# 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: X-CanalMovil-deviceID: X-CanalMovil-pushID: ``` ## 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: - 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 ```json { "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/