Files
adif-api-reverse-engineering/API_DOCUMENTATION.md

5.4 KiB

Adif Elcano API - Ingeniería Reversa

Documentación de la API de Adif (Elcano) obtenida mediante ingeniería reversa de la aplicación móvil.

URLs Base

BASE_URL_STATIONS     = https://estaciones.api.adif.es
BASE_URL_CIRCULATION  = https://circulacion.api.adif.es
BASE_URL_ELCANOWEB    = https://elcanoweb.adif.es/api/
BASE_URL_AVISA        = https://avisa.adif.es/avisa-ws/api/

Headers de Autenticación

Para API de Circulaciones y Composiciones

Content-Type: application/json;charset=utf-8
User-key: f4ce9fbfa9d721e39b8984805901b5df

Para API de Estaciones

Content-Type: application/json;charset=utf-8
User-key: 0d021447a2fd2ac64553674d5a0c1a6f

Para Avisa Login

Authorization: Basic YXZpc3RhX2NsaWVudF9hbmRyb2lkOjh5WzZKNyFmSjwhXypmYXE1NyNnOSohNElwa2MjWC1BTg==

Para Suscripciones

Authorization: Basic ZGVpbW9zOmRlaW1vc3R0
X-CanalMovil-Authentication: <token>
X-CanalMovil-deviceID: <device_id>
X-CanalMovil-pushID: <push_id>

Tokens

REGISTRATION_TOKEN = Bearer b9034774-c6e4-4663-a1a8-74bf7102651b

Endpoints

Estaciones

Obtener todas las estaciones

GET /portroyalmanager/secure/stations/allstations/reducedinfo/{token}/
Base: https://estaciones.api.adif.es
Headers: User-key para estaciones

Obtener detalles de una estación

POST /portroyalmanager/secure/stations/onestation/
Base: https://estaciones.api.adif.es
Headers: User-key para estaciones

Body:
{
  "stationCode": "string"
}

Observaciones de estación

POST /portroyalmanager/secure/stationsobservations/
Base: https://estaciones.api.adif.es
Headers: User-key para estaciones

Circulaciones (Trenes)

Salidas (Departures)

POST /portroyalmanager/secure/circulationpaths/departures/traffictype/
Base: https://circulacion.api.adif.es
Headers: User-key para circulaciones

Body:
{
  "commercialService": "YES|NO|ALL",
  "commercialStopType": "YES|NO|ALL",
  "destinationStationCode": "string|null",
  "originStationCode": "string|null",
  "page": {
    "page": number,
    "size": number
  },
  "stationCode": "string|null",
  "trafficType": "CERCANIAS|MEDIA_DISTANCIA|LARGA_DISTANCIA|ALL"
}

Llegadas (Arrivals)

POST /portroyalmanager/secure/circulationpaths/arrivals/traffictype/
Base: https://circulacion.api.adif.es
Headers: User-key para circulaciones
Body: Same as departures

Entre estaciones

POST /portroyalmanager/secure/circulationpaths/betweenstations/traffictype/
Base: https://circulacion.api.adif.es
Headers: User-key para circulaciones
Body: Same as departures

Una ruta específica

POST /portroyalmanager/secure/circulationpathdetails/onepaths/
Base: https://circulacion.api.adif.es
Headers: User-key para circulaciones

Body:
{
  "allControlPoints": boolean|null,
  "commercialNumber": "string|null",
  "destinationStationCode": "string|null",
  "launchingDate": timestamp|null,
  "originStationCode": "string|null"
}

Varias rutas

POST /portroyalmanager/secure/circulationpathdetails/severalpaths/
Base: https://circulacion.api.adif.es
Headers: User-key para circulaciones
Body: Same as onepaths

Composiciones

Composición de tren

POST /portroyalmanager/secure/circulationpaths/compositions/path/
Base: https://circulacion.api.adif.es
Headers: User-key para circulaciones

Body: Same as onepaths request

Avisa (Sistema de incidencias)

Login

POST /avisa-ws/api/token
Base: https://avisa.adif.es
Headers: Basic auth token para Avisa

Query params:
- grant_type: "password"
- username: <username>
- password: <password>

Registrar cliente

POST /avisa-ws/api/v1/client
Base: https://avisa.adif.es

Estaciones Avisa

GET /avisa-ws/api/v1/station
Base: https://avisa.adif.es

Categorías de estación

GET /avisa-ws/api/v1/category
Base: https://avisa.adif.es

Incidencias

GET /avisa-ws/api/v1/incidence
POST /avisa-ws/api/v1/incidence
GET /avisa-ws/api/v1/incidence/{incidenceId}
Base: https://avisa.adif.es

Suscripciones

Listar suscripciones

GET /api/subscriptions?platform=300
Base: https://elcanoweb.adif.es
Headers: Basic auth + X-CanalMovil headers

Crear suscripción

POST /api/subscriptions
Base: https://elcanoweb.adif.es
Headers: Basic auth + X-CanalMovil headers

Silenciar suscripción

PUT /api/subscriptions/{id}/mute
Base: https://elcanoweb.adif.es
Headers: Basic auth + X-CanalMovil headers

Tipos de Datos

TrafficType (Tipos de tráfico)

  • CERCANIAS - Trenes de cercanías
  • MEDIA_DISTANCIA - Media distancia
  • LARGA_DISTANCIA - Larga distancia
  • ALL - Todos los tipos

State (Estados)

  • YES - Sí
  • NO - No
  • ALL - Todos

PageInfoDTO

{
  "page": 0,
  "size": 20
}

Notas de Seguridad

  • La app usa certificate pinning con claves públicas específicas
  • Los tokens están hardcodeados en la aplicación
  • Las User-keys son diferentes para cada servicio (estaciones vs circulaciones)
  • El token de registro b9034774-c6e4-4663-a1a8-74bf7102651b está en el código

[CODE] 200 [METHOD] POST [URL] https://circulacion.api.adif.es/portroyalmanager/secure/circulationpathdetails/onepaths/ [URL] https://circulacion.api.adif.es/portroyalmanager/secure/circulationpaths/betweenstations/traffictype/ [URL] https://circulacion.api.adif.es/portroyalmanager/secure/circulationpaths/departures/traffictype/ [URL] https://estaciones.api.adif.es/portroyalmanager/secure/stationsobservations/