openapi: 3.2.0 info: title: ROOTE Transit API version: 2.0.0 description: Worldwide live mobility near a coordinate. servers: - url: https://api.roote.ai description: ROOTE API tags: - name: Transit paths: /v1/transit/nearby: get: operationId: getNearbyTransport security: - {} - bearerAuth: [] summary: Find nearby public transport stations description: Multi-provider transit discovery. ROOTE automatically queries configured complementary aggregators in parallel, then normalizes and conservatively resolves their identities. Realtime departures and alerts are intentionally not fetched by this endpoint. parameters: - name: lat in: query required: true schema: type: number minimum: -90 maximum: 90 description: Latitude of query_origin - name: lng in: query required: false schema: type: number minimum: -180 maximum: 180 description: Longitude; supply lng or lon. - name: lon in: query required: false schema: type: number minimum: -180 maximum: 180 description: ROOTE compatibility alias for lng. - name: radius in: query required: false schema: type: number exclusiveMinimum: 0 maximum: 5000 default: 1000 description: Requested metres; values above 5000 are clamped to 5000 - name: limit in: query required: false schema: type: integer minimum: 1 maximum: 200 default: 50 description: Maximum returned stations; capability policy can apply a lower limit - name: modes in: query schema: type: string default: bus,tram,metro,cable_car,regional_rail,train,ferry,shuttle description: Comma-separated canonical ROOTE transit modes - name: providers in: query schema: type: string description: Optional diagnostic override. Normal clients should omit it so ROOTE can select configured providers automatically. - name: realtime in: query schema: type: boolean default: false description: Reserved preference; Nearby reports capabilities without fetching departures or alerts. - name: language in: query schema: type: string description: Preferred response language for providers that support it. - name: debug in: query required: false schema: type: boolean default: false description: Include provider and cache diagnostics - name: token in: query deprecated: true schema: type: string description: Compatibility API token; prefer Authorization Bearer. responses: '200': description: Normalized nearby transport stations content: application/json: schema: type: object required: - status - query_origin - radius - total - results properties: status: type: string enum: - success - empty - partial - error message: type: string query_origin: type: object required: - lat - lon properties: lat: type: number lon: type: number radius: type: number maximum: 5000 total: type: integer minimum: 0 results: type: object required: - stations - lines properties: stations: type: array maxItems: 200 items: type: object required: - id - type - entity_kind - logical_station_id - parent_station - child_stop_ids - name - location - distance_meters - modes - operators - routes - schedule_coverage - realtime - alerts - accessibility - freshness - sources properties: knowledge: type: object properties: contract_version: type: string const: 1.0.0 entity_id: type: string minLength: 1 relations: type: object properties: parent: type: object properties: knowledge: type: string enum: - known - unknown - not_applicable - known_absent coverage: type: string enum: - complete - partial - unknown freshness: type: string enum: - fresh - stale - unknown scope: type: object properties: entity_id: type: string minLength: 1 relation: type: string enum: - parent - children namespace: anyOf: - type: string minLength: 1 - type: 'null' feed_id: anyOf: - type: string minLength: 1 - type: 'null' description: type: string minLength: 1 required: - entity_id - relation - namespace - feed_id - description additionalProperties: false target_ids: type: array items: type: string minLength: 1 evidence_ids: type: array items: type: string minLength: 1 observed_at: anyOf: - type: string format: date-time - type: 'null' source_updated_at: anyOf: - type: string format: date-time - type: 'null' valid_until: anyOf: - type: string format: date-time - type: 'null' absence_proof: anyOf: - type: object properties: description: type: string minLength: 1 evidence_ids: type: array items: type: string minLength: 1 minItems: 1 required: - description - evidence_ids additionalProperties: false - type: 'null' required: - knowledge - coverage - freshness - scope - target_ids - evidence_ids - observed_at - source_updated_at - valid_until - absence_proof additionalProperties: false children: type: object properties: knowledge: type: string enum: - known - unknown - not_applicable - known_absent coverage: type: string enum: - complete - partial - unknown freshness: type: string enum: - fresh - stale - unknown scope: type: object properties: entity_id: type: string minLength: 1 relation: type: string enum: - parent - children namespace: anyOf: - type: string minLength: 1 - type: 'null' feed_id: anyOf: - type: string minLength: 1 - type: 'null' description: type: string minLength: 1 required: - entity_id - relation - namespace - feed_id - description additionalProperties: false target_ids: type: array items: type: string minLength: 1 evidence_ids: type: array items: type: string minLength: 1 observed_at: anyOf: - type: string format: date-time - type: 'null' source_updated_at: anyOf: - type: string format: date-time - type: 'null' valid_until: anyOf: - type: string format: date-time - type: 'null' absence_proof: anyOf: - type: object properties: description: type: string minLength: 1 evidence_ids: type: array items: type: string minLength: 1 minItems: 1 required: - description - evidence_ids additionalProperties: false - type: 'null' required: - knowledge - coverage - freshness - scope - target_ids - evidence_ids - observed_at - source_updated_at - valid_until - absence_proof additionalProperties: false required: - parent - children additionalProperties: false history: type: array items: type: object properties: id: type: string minLength: 1 subject_id: type: string minLength: 1 object_id: anyOf: - type: string minLength: 1 - type: 'null' relation: type: string enum: - parent - children reconciliation: type: string enum: - confirmed - probable - unknown - contradictory - revoked provider: anyOf: - type: string minLength: 1 - type: 'null' namespace: anyOf: - type: string minLength: 1 - type: 'null' feed_id: anyOf: - type: string minLength: 1 - type: 'null' feed_version: anyOf: - type: string minLength: 1 - type: 'null' source_id: anyOf: - type: string minLength: 1 - type: 'null' parent_source_id: anyOf: - type: string minLength: 1 - type: 'null' method: type: string enum: - provider_explicit_parent - historical_unverified - manual evidence: type: array items: type: string observed_at: anyOf: - type: string format: date-time - type: 'null' received_at: anyOf: - type: string format: date-time - type: 'null' source_updated_at: anyOf: - type: string format: date-time - type: 'null' valid_from: anyOf: - type: string format: date-time - type: 'null' valid_until: anyOf: - type: string format: date-time - type: 'null' required: - id - subject_id - object_id - relation - reconciliation - provider - namespace - feed_id - feed_version - source_id - parent_source_id - method - evidence - observed_at - received_at - source_updated_at - valid_from - valid_until additionalProperties: false required: - contract_version - entity_id - relations - history additionalProperties: false id: type: string pattern: ^roote_transport_station_ type: type: string const: transport_station entity_kind: type: string enum: - station - stop_area - stop_point - platform logical_station_id: type: string pattern: ^roote_transport_station_ description: Canonical logical station identity. Children are grouped only through verified parent relationships. parent_station: type: - object - 'null' properties: id: type: string name: type: string child_stop_ids: type: array items: type: string description: Canonical child stop/platform identities attached to this logical station. name: type: string location: type: object required: - lat - lon properties: lat: type: number lon: type: number distance_meters: type: integer minimum: 0 modes: type: array items: type: string enum: - bus - tram - metro - cable_car - regional_rail - train - ferry - shuttle - other operators: type: array items: type: object routes: type: array items: type: object required: - id - name - short_name - mode - source_mode - color - text_color - sources properties: identity: type: object properties: contract_version: type: string const: 1.1.0 canonical_id: type: string pattern: ^roote_transport_line_[a-f0-9]{20}$ base_id: type: string pattern: ^roote_transport_line_[a-f0-9]{20}$ qualification: type: string enum: - established - unqualified - historical_unqualified - ambiguous aliases: type: array items: type: string pattern: ^roote_transport_line_[a-f0-9]{20}$ references: type: array items: type: object properties: reference_key: type: string minLength: 1 base_id: type: string pattern: ^roote_transport_line_[a-f0-9]{20}$ active: type: boolean observation_id: type: string minLength: 1 observation: type: object properties: reference: type: object properties: provider: type: string enum: - tripgo - transit - transitland - navitia - gtfs - gbfs source_id: type: string minLength: 1 id_scope: type: string enum: - provider_global - feed_local - network_local - namespace_local - unknown namespace: anyOf: - type: string minLength: 1 - type: 'null' feed_id: anyOf: - type: string minLength: 1 - type: 'null' network_id: anyOf: - type: string minLength: 1 - type: 'null' operator_id: anyOf: - type: string minLength: 1 - type: 'null' required: - provider - source_id - id_scope - namespace - feed_id - network_id - operator_id additionalProperties: false feed_version: anyOf: - type: string minLength: 1 - type: 'null' observed_at: anyOf: - type: string format: date-time - type: 'null' received_at: anyOf: - type: string format: date-time - type: 'null' source_updated_at: anyOf: - type: string format: date-time - type: 'null' qualification: type: string enum: - verified - provider - historical attributes: type: object properties: name: anyOf: - type: string - type: 'null' short_name: anyOf: - type: string - type: 'null' mode: type: string enum: - bus - tram - metro - cable_car - regional_rail - train - ferry - shuttle - rail - other color: anyOf: - type: string - type: 'null' text_color: anyOf: - type: string - type: 'null' network_id: anyOf: - type: string minLength: 1 - type: 'null' operator_id: anyOf: - type: string minLength: 1 - type: 'null' source_mode: anyOf: - type: string - type: 'null' subtype: anyOf: - type: string enum: - brt - commuter - suburban - regional - intercity - high_speed - type: 'null' required: - name - short_name - mode - color - text_color - network_id - operator_id - source_mode - subtype additionalProperties: false required: - reference - feed_version - observed_at - received_at - source_updated_at - qualification - attributes additionalProperties: false required: - reference_key - base_id - active - observation_id - observation additionalProperties: false decisions: type: array items: type: object properties: event_id: type: string minLength: 1 sequence: type: integer minimum: 0 decision_id: type: string minLength: 1 left_id: type: string pattern: ^roote_transport_line_[a-f0-9]{20}$ right_id: type: string pattern: ^roote_transport_line_[a-f0-9]{20}$ reconciliation: type: string enum: - confirmed - probable - unknown - contradictory - revoked method: type: string enum: - documented_mapping - shared_authority_identifier - historical_review evidence: type: array items: type: string minLength: 1 authority: anyOf: - type: string minLength: 1 - type: 'null' authority_identifier: anyOf: - type: string minLength: 1 - type: 'null' observed_at: anyOf: - type: string format: date-time - type: 'null' recorded_at: type: string format: date-time required: - event_id - sequence - decision_id - left_id - right_id - reconciliation - method - evidence - authority - authority_identifier - observed_at - recorded_at additionalProperties: false attribute_provenance: type: array items: type: object properties: field: type: string enum: - name - short_name - mode - color - text_color - network_id - operator_id - source_mode - subtype observation_id: type: string minLength: 1 reference_key: type: string minLength: 1 required: - field - observation_id - reference_key additionalProperties: false conflicts: type: array items: type: object properties: field: type: string minLength: 1 values: type: array items: type: string observation_ids: type: array items: type: string minLength: 1 required: - field - values - observation_ids additionalProperties: false required: - contract_version - canonical_id - base_id - qualification - aliases - references - decisions - attribute_provenance - conflicts additionalProperties: false network_id: type: - string - 'null' operator_id: type: - string - 'null' id: type: string pattern: ^roote_transport_line_ name: type: - string - 'null' short_name: type: - string - 'null' mode: type: string enum: - bus - tram - metro - cable_car - regional_rail - train - ferry - shuttle - other subtype: type: - string - 'null' source_mode: type: - string - 'null' color: type: - string - 'null' pattern: ^#[0-9A-F]{6}$ text_color: type: - string - 'null' pattern: ^#[0-9A-F]{6}$ sources: type: array items: type: object required: - provider - source_id - color - text_color properties: provider: type: string enum: - tripgo - transit - transitland - navitia - gtfs - gbfs source_id: type: string color: type: - string - 'null' pattern: ^#[0-9A-F]{6}$ text_color: type: - string - 'null' pattern: ^#[0-9A-F]{6}$ description: Canonical lines served by this logical station, including provider branding and field provenance when available. schedule_coverage: type: object required: - status - scheduled - realtime - departures_supported properties: status: type: string enum: - available - unavailable - unknown scheduled: type: - boolean - 'null' realtime: type: - boolean - 'null' departures_supported: type: - boolean - 'null' realtime: type: object required: - available - queried properties: available: type: - boolean - 'null' queried: type: boolean const: false alerts: type: object required: - available - queried properties: available: type: - boolean - 'null' queried: type: boolean const: false accessibility: type: object required: - wheelchair properties: wheelchair: type: string enum: - 'yes' - 'no' - unknown freshness: type: object required: - data_class - fetched_at properties: data_class: type: string const: static fetched_at: type: string format: date-time sources: type: array items: type: object required: - provider - region - source_id - operator_id - feed_id - entity_kind properties: provider: type: string enum: - tripgo - transit - transitland - navitia - gtfs - gbfs region: type: - string - 'null' source_id: type: string operator_id: type: - string - 'null' feed_id: type: - string - 'null' route_ids: type: array items: type: string description: Provider route identifiers retained only as source provenance. entity_kind: type: string enum: - station - stop_area - stop_point - platform parent_source_id: type: - string - 'null' external_codes: type: object additionalProperties: type: string confidence: type: number minimum: 0 maximum: 1 description: Internal resolution confidence exposed as provenance metadata, never used as the public identity. fetched_at: type: string format: date-time source_updated_at: type: - string - 'null' format: date-time lines: type: array maxItems: 200 description: Canonical nearby lines. Their opaque id can be passed to /v1/transit/lines/{id}/patterns. items: type: object required: - id - name - short_name - mode - source_mode - color - text_color - sources properties: identity: type: object properties: contract_version: type: string const: 1.1.0 canonical_id: type: string pattern: ^roote_transport_line_[a-f0-9]{20}$ base_id: type: string pattern: ^roote_transport_line_[a-f0-9]{20}$ qualification: type: string enum: - established - unqualified - historical_unqualified - ambiguous aliases: type: array items: type: string pattern: ^roote_transport_line_[a-f0-9]{20}$ references: type: array items: type: object properties: reference_key: type: string minLength: 1 base_id: type: string pattern: ^roote_transport_line_[a-f0-9]{20}$ active: type: boolean observation_id: type: string minLength: 1 observation: type: object properties: reference: type: object properties: provider: type: string enum: - tripgo - transit - transitland - navitia - gtfs - gbfs source_id: type: string minLength: 1 id_scope: type: string enum: - provider_global - feed_local - network_local - namespace_local - unknown namespace: anyOf: - type: string minLength: 1 - type: 'null' feed_id: anyOf: - type: string minLength: 1 - type: 'null' network_id: anyOf: - type: string minLength: 1 - type: 'null' operator_id: anyOf: - type: string minLength: 1 - type: 'null' required: - provider - source_id - id_scope - namespace - feed_id - network_id - operator_id additionalProperties: false feed_version: anyOf: - type: string minLength: 1 - type: 'null' observed_at: anyOf: - type: string format: date-time - type: 'null' received_at: anyOf: - type: string format: date-time - type: 'null' source_updated_at: anyOf: - type: string format: date-time - type: 'null' qualification: type: string enum: - verified - provider - historical attributes: type: object properties: name: anyOf: - type: string - type: 'null' short_name: anyOf: - type: string - type: 'null' mode: type: string enum: - bus - tram - metro - cable_car - regional_rail - train - ferry - shuttle - rail - other color: anyOf: - type: string - type: 'null' text_color: anyOf: - type: string - type: 'null' network_id: anyOf: - type: string minLength: 1 - type: 'null' operator_id: anyOf: - type: string minLength: 1 - type: 'null' source_mode: anyOf: - type: string - type: 'null' subtype: anyOf: - type: string enum: - brt - commuter - suburban - regional - intercity - high_speed - type: 'null' required: - name - short_name - mode - color - text_color - network_id - operator_id - source_mode - subtype additionalProperties: false required: - reference - feed_version - observed_at - received_at - source_updated_at - qualification - attributes additionalProperties: false required: - reference_key - base_id - active - observation_id - observation additionalProperties: false decisions: type: array items: type: object properties: event_id: type: string minLength: 1 sequence: type: integer minimum: 0 decision_id: type: string minLength: 1 left_id: type: string pattern: ^roote_transport_line_[a-f0-9]{20}$ right_id: type: string pattern: ^roote_transport_line_[a-f0-9]{20}$ reconciliation: type: string enum: - confirmed - probable - unknown - contradictory - revoked method: type: string enum: - documented_mapping - shared_authority_identifier - historical_review evidence: type: array items: type: string minLength: 1 authority: anyOf: - type: string minLength: 1 - type: 'null' authority_identifier: anyOf: - type: string minLength: 1 - type: 'null' observed_at: anyOf: - type: string format: date-time - type: 'null' recorded_at: type: string format: date-time required: - event_id - sequence - decision_id - left_id - right_id - reconciliation - method - evidence - authority - authority_identifier - observed_at - recorded_at additionalProperties: false attribute_provenance: type: array items: type: object properties: field: type: string enum: - name - short_name - mode - color - text_color - network_id - operator_id - source_mode - subtype observation_id: type: string minLength: 1 reference_key: type: string minLength: 1 required: - field - observation_id - reference_key additionalProperties: false conflicts: type: array items: type: object properties: field: type: string minLength: 1 values: type: array items: type: string observation_ids: type: array items: type: string minLength: 1 required: - field - values - observation_ids additionalProperties: false required: - contract_version - canonical_id - base_id - qualification - aliases - references - decisions - attribute_provenance - conflicts additionalProperties: false network_id: type: - string - 'null' operator_id: type: - string - 'null' id: type: string pattern: ^roote_transport_line_ name: type: - string - 'null' short_name: type: - string - 'null' mode: type: string enum: - bus - tram - metro - cable_car - regional_rail - train - ferry - shuttle - other subtype: type: - string - 'null' source_mode: type: - string - 'null' color: type: - string - 'null' pattern: ^#[0-9A-F]{6}$ text_color: type: - string - 'null' pattern: ^#[0-9A-F]{6}$ sources: type: array items: type: object required: - provider - source_id - color - text_color properties: provider: type: string enum: - tripgo - transit - transitland - navitia - gtfs - gbfs source_id: type: string color: type: - string - 'null' pattern: ^#[0-9A-F]{6}$ text_color: type: - string - 'null' pattern: ^#[0-9A-F]{6}$ debug: type: object description: Provider and cache diagnostics returned only when debug=true. '400': description: Invalid request content: application/json: schema: type: object properties: error: type: object properties: code: type: string message: type: string '401': description: Invalid request content: application/json: schema: type: object properties: error: type: object properties: code: type: string message: type: string '402': description: Invalid request content: application/json: schema: type: object properties: error: type: object properties: code: type: string message: type: string '403': description: Invalid request content: application/json: schema: type: object properties: error: type: object properties: code: type: string message: type: string '429': description: Invalid request content: application/json: schema: type: object properties: error: type: object properties: code: type: string message: type: string '503': description: Invalid request content: application/json: schema: type: object properties: error: type: object properties: code: type: string message: type: string tags: - Transit /v1/transit/lines/{id}/patterns: get: operationId: getTransportLinePatterns security: - {} - bearerAuth: [] x-roote-required-scope: data:read summary: Get directions and ordered stops for a transit line description: Returns distinct service patterns for a canonical ROOTE line. Patterns retain qualified ordered occurrences, permissions, structural revisions, temporal applicability, collection coverage and honest geometry quality. parameters: - name: id in: path required: true schema: type: string pattern: ^roote_transport_line_[a-f0-9]{20}$ - name: service_date in: query required: false schema: type: string format: date pattern: ^\d{4}-\d{2}-\d{2}$ description: Optional service date; unknown applicability and any explicit undated fallback are exposed. - name: debug in: query required: false schema: type: boolean default: false description: Include safe provider, cache and trip-inspection diagnostics responses: '200': description: Normalized line patterns content: application/json: schema: type: object properties: status: type: string enum: - success - empty - partial line: type: object properties: id: type: string pattern: ^roote_transport_line_[a-f0-9]{20}$ name: anyOf: - type: string - type: 'null' short_name: anyOf: - type: string - type: 'null' mode: type: string enum: - bus - tram - metro - cable_car - regional_rail - train - ferry - shuttle - rail - other color: anyOf: - type: string - type: 'null' text_color: anyOf: - type: string - type: 'null' source_mode: anyOf: - type: string - type: 'null' subtype: anyOf: - type: string enum: - brt - commuter - suburban - regional - intercity - high_speed - type: 'null' network_id: anyOf: - type: string minLength: 1 - type: 'null' operator_id: anyOf: - type: string minLength: 1 - type: 'null' identity: type: object properties: contract_version: type: string const: 1.1.0 canonical_id: type: string pattern: ^roote_transport_line_[a-f0-9]{20}$ base_id: type: string pattern: ^roote_transport_line_[a-f0-9]{20}$ qualification: type: string enum: - established - unqualified - historical_unqualified - ambiguous aliases: type: array items: type: string pattern: ^roote_transport_line_[a-f0-9]{20}$ references: type: array items: type: object properties: reference_key: type: string minLength: 1 base_id: type: string pattern: ^roote_transport_line_[a-f0-9]{20}$ active: type: boolean observation_id: type: string minLength: 1 observation: type: object properties: reference: type: object properties: provider: type: string enum: - tripgo - transit - transitland - navitia - gtfs - gbfs source_id: type: string minLength: 1 id_scope: type: string enum: - provider_global - feed_local - network_local - namespace_local - unknown namespace: anyOf: - type: string minLength: 1 - type: 'null' feed_id: anyOf: - type: string minLength: 1 - type: 'null' network_id: anyOf: - type: string minLength: 1 - type: 'null' operator_id: anyOf: - type: string minLength: 1 - type: 'null' required: - provider - source_id - id_scope - namespace - feed_id - network_id - operator_id additionalProperties: false feed_version: anyOf: - type: string minLength: 1 - type: 'null' observed_at: anyOf: - type: string format: date-time - type: 'null' received_at: anyOf: - type: string format: date-time - type: 'null' source_updated_at: anyOf: - type: string format: date-time - type: 'null' qualification: type: string enum: - verified - provider - historical attributes: type: object properties: name: anyOf: - type: string - type: 'null' short_name: anyOf: - type: string - type: 'null' mode: type: string enum: - bus - tram - metro - cable_car - regional_rail - train - ferry - shuttle - rail - other color: anyOf: - type: string - type: 'null' text_color: anyOf: - type: string - type: 'null' network_id: anyOf: - type: string minLength: 1 - type: 'null' operator_id: anyOf: - type: string minLength: 1 - type: 'null' source_mode: anyOf: - type: string - type: 'null' subtype: anyOf: - type: string enum: - brt - commuter - suburban - regional - intercity - high_speed - type: 'null' required: - name - short_name - mode - color - text_color - network_id - operator_id - source_mode - subtype additionalProperties: false required: - reference - feed_version - observed_at - received_at - source_updated_at - qualification - attributes additionalProperties: false required: - reference_key - base_id - active - observation_id - observation additionalProperties: false decisions: type: array items: type: object properties: event_id: type: string minLength: 1 sequence: type: integer minimum: 0 decision_id: type: string minLength: 1 left_id: type: string pattern: ^roote_transport_line_[a-f0-9]{20}$ right_id: type: string pattern: ^roote_transport_line_[a-f0-9]{20}$ reconciliation: type: string enum: - confirmed - probable - unknown - contradictory - revoked method: type: string enum: - documented_mapping - shared_authority_identifier - historical_review evidence: type: array items: type: string minLength: 1 authority: anyOf: - type: string minLength: 1 - type: 'null' authority_identifier: anyOf: - type: string minLength: 1 - type: 'null' observed_at: anyOf: - type: string format: date-time - type: 'null' recorded_at: type: string format: date-time required: - event_id - sequence - decision_id - left_id - right_id - reconciliation - method - evidence - authority - authority_identifier - observed_at - recorded_at additionalProperties: false attribute_provenance: type: array items: type: object properties: field: type: string enum: - name - short_name - mode - color - text_color - network_id - operator_id - source_mode - subtype observation_id: type: string minLength: 1 reference_key: type: string minLength: 1 required: - field - observation_id - reference_key additionalProperties: false conflicts: type: array items: type: object properties: field: type: string minLength: 1 values: type: array items: type: string observation_ids: type: array items: type: string minLength: 1 required: - field - values - observation_ids additionalProperties: false required: - contract_version - canonical_id - base_id - qualification - aliases - references - decisions - attribute_provenance - conflicts additionalProperties: false required: - id - name - short_name - mode - color - text_color - source_mode - subtype - network_id - operator_id - identity additionalProperties: false patterns: type: array items: type: object properties: id: type: string pattern: ^roote_transport_pattern_[a-f0-9]{20}$ direction_id: anyOf: - type: integer - type: 'null' headsign: type: string terminus: type: object properties: id: type: string minLength: 1 name: anyOf: - type: string - type: 'null' required: - id - name additionalProperties: false stop_count: type: integer minimum: 0 stops: type: array items: type: object properties: id: type: string minLength: 1 source_stop_id: type: string name: anyOf: - type: string - type: 'null' lat: anyOf: - type: number - type: 'null' lon: anyOf: - type: number - type: 'null' sequence: type: integer minimum: 0 headsign: type: string pickup_type: anyOf: - type: integer minimum: 0 maximum: 3 - type: 'null' drop_off_type: anyOf: - type: integer minimum: 0 maximum: 3 - type: 'null' required: - id - name - lat - lon - sequence - headsign - pickup_type - drop_off_type additionalProperties: false minItems: 1 geometry: anyOf: - type: object properties: type: type: string const: LineString coordinates: type: array items: type: array prefixItems: - type: number minimum: -180 maximum: 180 - type: number minimum: -90 maximum: 90 minItems: 2 maxItems: 2 items: false minItems: 2 required: - type - coordinates additionalProperties: false - type: 'null' representative_trip_id: type: string sources: type: array items: type: object properties: provider: type: string enum: - tripgo - transit - transitland - navitia - gtfs - gbfs trip_id: type: string required: - provider - trip_id additionalProperties: false knowledge: type: object properties: contract_version: type: string const: 1.3.0 canonical_id: type: string minLength: 1 revision_id: type: string minLength: 1 line_id: type: string pattern: ^roote_transport_line_[a-f0-9]{20}$ qualification: type: string enum: - scoped_structure - unqualified_structure structural_fingerprint: type: string minLength: 1 reference: type: object properties: provider: type: string enum: - tripgo - transit - transitland - navitia - gtfs - gbfs namespace: anyOf: - type: string minLength: 1 - type: 'null' feed_id: anyOf: - type: string minLength: 1 - type: 'null' feed_version: anyOf: - type: string minLength: 1 - type: 'null' route_id: type: string minLength: 1 pattern_id: anyOf: - type: string minLength: 1 - type: 'null' pattern_kind: type: string enum: - itinerary - computed_stop_pattern - unknown pattern_scope: type: string enum: - provider_global - feed_local - feed_version_local - namespace_local - unknown shape_id: anyOf: - type: string minLength: 1 - type: 'null' required: - provider - namespace - feed_id - feed_version - route_id - pattern_id - pattern_kind - pattern_scope - shape_id additionalProperties: false occurrences: type: array items: type: object properties: id: type: string minLength: 1 position: type: integer minimum: 0 reference: type: object properties: provider: type: string enum: - tripgo - transit - transitland - navitia - gtfs - gbfs namespace: anyOf: - type: string minLength: 1 - type: 'null' feed_id: anyOf: - type: string minLength: 1 - type: 'null' feed_version: anyOf: - type: string minLength: 1 - type: 'null' source_id: anyOf: - type: string minLength: 1 - type: 'null' id_scope: type: string enum: - provider_global - feed_local - namespace_local - unknown required: - provider - namespace - feed_id - feed_version - source_id - id_scope additionalProperties: false source_sequence: anyOf: - type: integer minimum: 0 - type: 'null' stop_point_id: anyOf: - type: string minLength: 1 - type: 'null' resolution: type: string enum: - resolved - unresolved name: anyOf: - type: string - type: 'null' lat: anyOf: - type: number - type: 'null' lon: anyOf: - type: number - type: 'null' headsign: anyOf: - type: string - type: 'null' pickup_type: anyOf: - type: integer minimum: 0 maximum: 3 - type: 'null' drop_off_type: anyOf: - type: integer minimum: 0 maximum: 3 - type: 'null' continuous_pickup: anyOf: - type: integer minimum: 0 maximum: 3 - type: 'null' continuous_drop_off: anyOf: - type: integer minimum: 0 maximum: 3 - type: 'null' start_pickup_drop_off_window: anyOf: - type: string - type: 'null' end_pickup_drop_off_window: anyOf: - type: string - type: 'null' observation_id: type: string minLength: 1 required: - id - position - reference - source_sequence - stop_point_id - resolution - name - lat - lon - headsign - pickup_type - drop_off_type - continuous_pickup - continuous_drop_off - start_pickup_drop_off_window - end_pickup_drop_off_window - observation_id additionalProperties: false minItems: 1 revisions: type: array items: type: object properties: id: type: string minLength: 1 structural_fingerprint: type: string minLength: 1 observed_at: type: string format: date-time received_at: type: string format: date-time reference: type: object properties: provider: type: string enum: - tripgo - transit - transitland - navitia - gtfs - gbfs namespace: anyOf: - type: string minLength: 1 - type: 'null' feed_id: anyOf: - type: string minLength: 1 - type: 'null' feed_version: anyOf: - type: string minLength: 1 - type: 'null' route_id: type: string minLength: 1 pattern_id: anyOf: - type: string minLength: 1 - type: 'null' pattern_kind: type: string enum: - itinerary - computed_stop_pattern - unknown pattern_scope: type: string enum: - provider_global - feed_local - feed_version_local - namespace_local - unknown shape_id: anyOf: - type: string minLength: 1 - type: 'null' required: - provider - namespace - feed_id - feed_version - route_id - pattern_id - pattern_kind - pattern_scope - shape_id additionalProperties: false required: - id - structural_fingerprint - observed_at - received_at - reference additionalProperties: false minItems: 1 observation_ids: type: array items: type: string minLength: 1 minItems: 1 observations: type: array items: type: object properties: reference: type: object properties: provider: type: string enum: - tripgo - transit - transitland - navitia - gtfs - gbfs namespace: anyOf: - type: string minLength: 1 - type: 'null' feed_id: anyOf: - type: string minLength: 1 - type: 'null' feed_version: anyOf: - type: string minLength: 1 - type: 'null' route_id: type: string minLength: 1 pattern_id: anyOf: - type: string minLength: 1 - type: 'null' pattern_kind: type: string enum: - itinerary - computed_stop_pattern - unknown pattern_scope: type: string enum: - provider_global - feed_local - feed_version_local - namespace_local - unknown shape_id: anyOf: - type: string minLength: 1 - type: 'null' required: - provider - namespace - feed_id - feed_version - route_id - pattern_id - pattern_kind - pattern_scope - shape_id additionalProperties: false direction_id: anyOf: - type: integer - type: 'null' headsign: anyOf: - type: string - type: 'null' headsign_origin: type: string enum: - provider - stop_headsign - structural_terminus - unknown branch: anyOf: - type: string - type: 'null' stops: type: array items: type: object properties: reference: type: object properties: provider: type: string enum: - tripgo - transit - transitland - navitia - gtfs - gbfs namespace: anyOf: - type: string minLength: 1 - type: 'null' feed_id: anyOf: - type: string minLength: 1 - type: 'null' feed_version: anyOf: - type: string minLength: 1 - type: 'null' source_id: anyOf: - type: string minLength: 1 - type: 'null' id_scope: type: string enum: - provider_global - feed_local - namespace_local - unknown required: - provider - namespace - feed_id - feed_version - source_id - id_scope additionalProperties: false source_sequence: anyOf: - type: integer minimum: 0 - type: 'null' name: anyOf: - type: string - type: 'null' lat: anyOf: - type: number minimum: -90 maximum: 90 - type: 'null' lon: anyOf: - type: number minimum: -180 maximum: 180 - type: 'null' headsign: anyOf: - type: string - type: 'null' pickup_type: anyOf: - type: integer minimum: 0 maximum: 3 - type: 'null' drop_off_type: anyOf: - type: integer minimum: 0 maximum: 3 - type: 'null' continuous_pickup: anyOf: - type: integer minimum: 0 maximum: 3 - type: 'null' continuous_drop_off: anyOf: - type: integer minimum: 0 maximum: 3 - type: 'null' start_pickup_drop_off_window: anyOf: - type: string - type: 'null' end_pickup_drop_off_window: anyOf: - type: string - type: 'null' required: - reference - source_sequence - name - lat - lon - headsign - pickup_type - drop_off_type - continuous_pickup - continuous_drop_off - start_pickup_drop_off_window - end_pickup_drop_off_window additionalProperties: false minItems: 1 maxItems: 1000 sequence_complete: anyOf: - type: boolean - type: 'null' sequence_evidence: type: array items: type: string minLength: 1 geometry: anyOf: - type: object properties: type: type: string const: LineString coordinates: type: array items: type: array prefixItems: - type: number minimum: -180 maximum: 180 - type: number minimum: -90 maximum: 90 minItems: 2 maxItems: 2 items: false minItems: 2 required: - type - coordinates additionalProperties: false - type: 'null' geometry_quality: type: string enum: - provider - approximate - absent geometry_evidence: type: array items: type: string minLength: 1 sample_trip_ids: type: array items: type: string minLength: 1 acquisition_key: type: string minLength: 1 validity: type: object properties: requested_date: anyOf: - type: string pattern: ^\d{4}-\d{2}-\d{2}$ - type: 'null' queried_date: anyOf: - type: string pattern: ^\d{4}-\d{2}-\d{2}$ - type: 'null' applicability: type: string enum: - confirmed - unknown - not_applicable undated_fallback: type: boolean calendars: type: array items: type: object properties: service_id: anyOf: - type: string minLength: 1 - type: 'null' start_date: anyOf: - type: string pattern: ^\d{4}-\d{2}-\d{2}$ - type: 'null' end_date: anyOf: - type: string pattern: ^\d{4}-\d{2}-\d{2}$ - type: 'null' monday: anyOf: - type: integer minimum: 0 maximum: 1 - type: 'null' tuesday: anyOf: - type: integer minimum: 0 maximum: 1 - type: 'null' wednesday: anyOf: - type: integer minimum: 0 maximum: 1 - type: 'null' thursday: anyOf: - type: integer minimum: 0 maximum: 1 - type: 'null' friday: anyOf: - type: integer minimum: 0 maximum: 1 - type: 'null' saturday: anyOf: - type: integer minimum: 0 maximum: 1 - type: 'null' sunday: anyOf: - type: integer minimum: 0 maximum: 1 - type: 'null' added_dates: type: array items: type: string pattern: ^\d{4}-\d{2}-\d{2}$ removed_dates: type: array items: type: string pattern: ^\d{4}-\d{2}-\d{2}$ required: - service_id - start_date - end_date - monday - tuesday - wednesday - thursday - friday - saturday - sunday - added_dates - removed_dates additionalProperties: false evidence: type: array items: type: string minLength: 1 warnings: type: array items: type: string required: - requested_date - queried_date - applicability - undated_fallback - calendars - evidence - warnings additionalProperties: false observed_at: type: string format: date-time received_at: type: string format: date-time source_updated_at: anyOf: - type: string format: date-time - type: 'null' required: - reference - direction_id - headsign - headsign_origin - branch - stops - sequence_complete - sequence_evidence - geometry - geometry_quality - geometry_evidence - sample_trip_ids - validity - observed_at - received_at - source_updated_at additionalProperties: false minItems: 1 legacy_id_candidates: type: array items: type: string minLength: 1 aliases: type: array items: type: string minLength: 1 headsign_origin: type: string enum: - provider - stop_headsign - structural_terminus - unknown announced_headsign: anyOf: - type: string - type: 'null' branch: anyOf: - type: string - type: 'null' sequence_coverage: type: string enum: - complete - partial - unknown validity: type: object properties: requested_date: anyOf: - type: string pattern: ^\d{4}-\d{2}-\d{2}$ - type: 'null' queried_date: anyOf: - type: string pattern: ^\d{4}-\d{2}-\d{2}$ - type: 'null' applicability: type: string enum: - confirmed - unknown - not_applicable undated_fallback: type: boolean calendars: type: array items: type: object properties: service_id: anyOf: - type: string minLength: 1 - type: 'null' start_date: anyOf: - type: string pattern: ^\d{4}-\d{2}-\d{2}$ - type: 'null' end_date: anyOf: - type: string pattern: ^\d{4}-\d{2}-\d{2}$ - type: 'null' monday: anyOf: - type: integer minimum: 0 maximum: 1 - type: 'null' tuesday: anyOf: - type: integer minimum: 0 maximum: 1 - type: 'null' wednesday: anyOf: - type: integer minimum: 0 maximum: 1 - type: 'null' thursday: anyOf: - type: integer minimum: 0 maximum: 1 - type: 'null' friday: anyOf: - type: integer minimum: 0 maximum: 1 - type: 'null' saturday: anyOf: - type: integer minimum: 0 maximum: 1 - type: 'null' sunday: anyOf: - type: integer minimum: 0 maximum: 1 - type: 'null' added_dates: type: array items: type: string pattern: ^\d{4}-\d{2}-\d{2}$ removed_dates: type: array items: type: string pattern: ^\d{4}-\d{2}-\d{2}$ required: - service_id - start_date - end_date - monday - tuesday - wednesday - thursday - friday - saturday - sunday - added_dates - removed_dates additionalProperties: false evidence: type: array items: type: string minLength: 1 warnings: type: array items: type: string required: - requested_date - queried_date - applicability - undated_fallback - calendars - evidence - warnings additionalProperties: false geometry: type: object properties: quality: type: string enum: - provider - approximate - absent evidence: type: array items: type: string minLength: 1 observation_id: type: string minLength: 1 required: - quality - evidence - observation_id additionalProperties: false required: - contract_version - canonical_id - revision_id - line_id - qualification - structural_fingerprint - reference - occurrences - revisions - observation_ids - observations - legacy_id_candidates - aliases - headsign_origin - announced_headsign - branch - sequence_coverage - validity - geometry additionalProperties: false required: - id - direction_id - headsign - terminus - stop_count - stops - geometry - representative_trip_id - sources - knowledge additionalProperties: false coverage: type: object properties: state: type: string enum: - complete - partial - unknown scope: type: object properties: line_id: type: string pattern: ^roote_transport_line_[a-f0-9]{20}$ requested_date: anyOf: - type: string pattern: ^\d{4}-\d{2}-\d{2}$ - type: 'null' description: type: string minLength: 1 required: - line_id - requested_date - description additionalProperties: false evidence: type: array items: type: string minLength: 1 warnings: type: array items: type: string pages: type: integer minimum: 0 trips_listed: type: integer minimum: 0 trips_inspected: type: integer minimum: 0 max_provider_calls: type: integer minimum: 0 max_references: type: integer minimum: 0 time_budget_ms: type: integer minimum: 0 required: - state - scope - evidence - warnings - pages - trips_listed - trips_inspected - max_provider_calls - max_references - time_budget_ms additionalProperties: false persistence: type: object properties: served_from: type: string enum: - acquisition - memory_cache - persisted - persisted_fallback - mixed stored_at: anyOf: - type: string format: date-time - type: 'null' revalidation: type: string enum: - fresh - stale - failed applicability_guaranteed: type: boolean const: false required: - served_from - stored_at - revalidation - applicability_guaranteed additionalProperties: false errors: type: array items: type: object properties: provider: type: string enum: - tripgo - transit - transitland - navitia - gtfs - gbfs status: type: string enum: - ok - timeout - error - unauthorized - rate_limit - unavailable message: type: string required: - provider - status - message additionalProperties: false message: type: string debug: type: object properties: providers: type: object properties: tripgo: type: string enum: - ok - timeout - error - unauthorized - rate_limit - unavailable transit: type: string enum: - ok - timeout - error - unauthorized - rate_limit - unavailable transitland: type: string enum: - ok - timeout - error - unauthorized - rate_limit - unavailable navitia: type: string enum: - ok - timeout - error - unauthorized - rate_limit - unavailable gtfs: type: string enum: - ok - timeout - error - unauthorized - rate_limit - unavailable gbfs: type: string enum: - ok - timeout - error - unauthorized - rate_limit - unavailable required: [] additionalProperties: false cache: type: string enum: - hit - miss - stale provider_calls: type: integer minimum: 0 trips_listed: type: integer minimum: 0 trips_inspected: type: integer minimum: 0 patterns: type: integer minimum: 0 required: - providers - cache - provider_calls - trips_listed - trips_inspected - patterns additionalProperties: false required: - status - line - patterns - coverage - persistence - errors additionalProperties: false '400': description: Invalid request content: application/json: schema: type: object properties: error: type: object properties: code: type: string message: type: string '401': description: Invalid request content: application/json: schema: type: object properties: error: type: object properties: code: type: string message: type: string '403': description: Invalid request content: application/json: schema: type: object properties: error: type: object properties: code: type: string message: type: string '404': description: Invalid request content: application/json: schema: type: object properties: error: type: object properties: code: type: string message: type: string '409': description: Invalid request content: application/json: schema: type: object properties: error: type: object properties: code: type: string message: type: string '429': description: Invalid request content: application/json: schema: type: object properties: error: type: object properties: code: type: string message: type: string '503': description: Invalid request content: application/json: schema: type: object properties: error: type: object properties: code: type: string message: type: string tags: - Transit /v1/transit/stations/{id}: get: operationId: getTransportStation security: - {} - bearerAuth: [] x-roote-required-scope: data:read summary: Read a durable canonical transport station description: Reads stable metadata from the canonical PostgreSQL registry without calling a provider or loading departures. Invalid or revoked credentials never fall back to anonymous access. parameters: - name: public_contract in: query required: false schema: type: string enum: - transport-1.0.0 description: Opt in to the strict public transport DTO. Incompatible with projection=true. debug never adds diagnostics to this contract. Also available under /api/v1. - name: id in: path required: true schema: type: string pattern: ^roote_transport_station_[a-f0-9]{20}$ - name: projection in: query required: false schema: type: boolean default: false description: Include shared transport presentation from registry data; no provider acquisition responses: '200': description: Canonical station metadata content: application/json: schema: oneOf: - type: object required: - status - station properties: projection: type: object properties: contract_version: type: string const: 1.4.0 evaluated_at: type: string format: date-time expires_at: anyOf: - type: string format: date-time - type: 'null' on_expiry: type: string const: invalidate_next_and_realtime_until_reprojection entity: type: object properties: id: type: string minLength: 1 name: anyOf: - type: string - type: 'null' entity_kind: type: string enum: - station - stop_area - stop_point - platform location: anyOf: - type: object properties: lat: type: number minimum: -90 maximum: 90 lon: type: number minimum: -180 maximum: 180 required: - lat - lon additionalProperties: false - type: 'null' kind: type: string enum: - Place - StopPoint modes: type: array items: type: string enum: - bus - tram - metro - cable_car - regional_rail - train - ferry - shuttle - rail - other relations: type: object properties: parent: type: object properties: knowledge: type: string enum: - known - unknown - not_applicable - known_absent coverage: type: string enum: - complete - partial - unknown freshness: type: string enum: - fresh - stale - unknown scope: type: object properties: entity_id: type: string minLength: 1 relation: type: string enum: - parent - children namespace: anyOf: - type: string minLength: 1 - type: 'null' feed_id: anyOf: - type: string minLength: 1 - type: 'null' description: type: string minLength: 1 required: - entity_id - relation - namespace - feed_id - description additionalProperties: false target_ids: type: array items: type: string minLength: 1 evidence_ids: type: array items: type: string minLength: 1 observed_at: anyOf: - type: string format: date-time - type: 'null' source_updated_at: anyOf: - type: string format: date-time - type: 'null' valid_until: anyOf: - type: string format: date-time - type: 'null' absence_proof: anyOf: - type: object properties: description: type: string minLength: 1 evidence_ids: type: array items: type: string minLength: 1 minItems: 1 required: - description - evidence_ids additionalProperties: false - type: 'null' required: - knowledge - coverage - freshness - scope - target_ids - evidence_ids - observed_at - source_updated_at - valid_until - absence_proof additionalProperties: false children: type: object properties: knowledge: type: string enum: - known - unknown - not_applicable - known_absent coverage: type: string enum: - complete - partial - unknown freshness: type: string enum: - fresh - stale - unknown scope: type: object properties: entity_id: type: string minLength: 1 relation: type: string enum: - parent - children namespace: anyOf: - type: string minLength: 1 - type: 'null' feed_id: anyOf: - type: string minLength: 1 - type: 'null' description: type: string minLength: 1 required: - entity_id - relation - namespace - feed_id - description additionalProperties: false target_ids: type: array items: type: string minLength: 1 evidence_ids: type: array items: type: string minLength: 1 observed_at: anyOf: - type: string format: date-time - type: 'null' source_updated_at: anyOf: - type: string format: date-time - type: 'null' valid_until: anyOf: - type: string format: date-time - type: 'null' absence_proof: anyOf: - type: object properties: description: type: string minLength: 1 evidence_ids: type: array items: type: string minLength: 1 minItems: 1 required: - description - evidence_ids additionalProperties: false - type: 'null' required: - knowledge - coverage - freshness - scope - target_ids - evidence_ids - observed_at - source_updated_at - valid_until - absence_proof additionalProperties: false required: - parent - children additionalProperties: false detail_href: type: string minLength: 1 required: - id - name - entity_kind - location - kind - modes - relations - detail_href additionalProperties: false boarding_points: type: array items: type: object properties: id: type: string minLength: 1 name: anyOf: - type: string - type: 'null' entity_kind: type: string enum: - station - stop_area - stop_point - platform location: anyOf: - type: object properties: lat: type: number minimum: -90 maximum: 90 lon: type: number minimum: -180 maximum: 180 required: - lat - lon additionalProperties: false - type: 'null' required: - id - name - entity_kind - location additionalProperties: false boarding_points_coverage: type: string enum: - complete - partial - unknown lines: type: array items: type: object properties: id: type: string minLength: 1 name: anyOf: - type: string - type: 'null' short_name: anyOf: - type: string - type: 'null' mode: type: string enum: - bus - tram - metro - cable_car - regional_rail - train - ferry - shuttle - rail - other color: anyOf: - type: string - type: 'null' text_color: anyOf: - type: string - type: 'null' network_id: anyOf: - type: string minLength: 1 - type: 'null' operator_id: anyOf: - type: string minLength: 1 - type: 'null' qualification: type: string enum: - established - unqualified - historical_unqualified - ambiguous - observed_only presence: type: object properties: structurally_known: type: boolean observed_in_departures: type: boolean registry_association: type: boolean required: - structurally_known - observed_in_departures - registry_association additionalProperties: false provenance: type: object properties: observation_ids: type: array items: type: string minLength: 1 reference_keys: type: array items: type: string minLength: 1 detail_href: type: string minLength: 1 required: - observation_ids - reference_keys - detail_href additionalProperties: false choices: type: array items: type: object properties: id: type: string minLength: 1 line_id: type: string minLength: 1 scope: type: string const: station_presentation qualification: type: string enum: - pattern_occurrence - linked_pattern_detail_unknown - unqualified_passages destination: type: object properties: label: anyOf: - type: string - type: 'null' origin: type: string enum: - provider - stop_headsign - structural_terminus - departure - unknown terminus_point_id: anyOf: - type: string minLength: 1 - type: 'null' required: - label - origin - terminus_point_id additionalProperties: false direction_id: anyOf: - type: string - type: 'null' branch: anyOf: - type: string - type: 'null' pattern_references: type: array items: type: object properties: pattern_id: type: string minLength: 1 revision_id: type: string minLength: 1 occurrence_id: anyOf: - type: string minLength: 1 - type: 'null' line_id: type: string minLength: 1 detail_href: type: string minLength: 1 detail_state: type: string enum: - loaded - not_loaded required: - pattern_id - revision_id - occurrence_id - line_id - detail_href - detail_state additionalProperties: false occurrence: anyOf: - type: object properties: id: type: string minLength: 1 position: type: integer minimum: 0 stop_point_id: anyOf: - type: string minLength: 1 - type: 'null' name: anyOf: - type: string - type: 'null' source_sequence: anyOf: - type: integer minimum: 0 - type: 'null' pickup_type: anyOf: - type: integer minimum: 0 maximum: 3 - type: 'null' drop_off_type: anyOf: - type: integer minimum: 0 maximum: 3 - type: 'null' continuous_pickup: anyOf: - type: integer minimum: 0 maximum: 3 - type: 'null' continuous_drop_off: anyOf: - type: integer minimum: 0 maximum: 3 - type: 'null' required: - id - position - stop_point_id - name - source_sequence - pickup_type - drop_off_type - continuous_pickup - continuous_drop_off additionalProperties: false - type: 'null' previous: anyOf: - type: object properties: id: type: string minLength: 1 position: type: integer minimum: 0 stop_point_id: anyOf: - type: string minLength: 1 - type: 'null' name: anyOf: - type: string - type: 'null' source_sequence: anyOf: - type: integer minimum: 0 - type: 'null' pickup_type: anyOf: - type: integer minimum: 0 maximum: 3 - type: 'null' drop_off_type: anyOf: - type: integer minimum: 0 maximum: 3 - type: 'null' continuous_pickup: anyOf: - type: integer minimum: 0 maximum: 3 - type: 'null' continuous_drop_off: anyOf: - type: integer minimum: 0 maximum: 3 - type: 'null' required: - id - position - stop_point_id - name - source_sequence - pickup_type - drop_off_type - continuous_pickup - continuous_drop_off additionalProperties: false - type: 'null' next: anyOf: - type: object properties: id: type: string minLength: 1 position: type: integer minimum: 0 stop_point_id: anyOf: - type: string minLength: 1 - type: 'null' name: anyOf: - type: string - type: 'null' source_sequence: anyOf: - type: integer minimum: 0 - type: 'null' pickup_type: anyOf: - type: integer minimum: 0 maximum: 3 - type: 'null' drop_off_type: anyOf: - type: integer minimum: 0 maximum: 3 - type: 'null' continuous_pickup: anyOf: - type: integer minimum: 0 maximum: 3 - type: 'null' continuous_drop_off: anyOf: - type: integer minimum: 0 maximum: 3 - type: 'null' required: - id - position - stop_point_id - name - source_sequence - pickup_type - drop_off_type - continuous_pickup - continuous_drop_off additionalProperties: false - type: 'null' neighbors_knowledge: type: string enum: - known - partial - unknown validity: anyOf: - type: object properties: requested_date: anyOf: - type: string pattern: ^\d{4}-\d{2}-\d{2}$ - type: 'null' queried_date: anyOf: - type: string pattern: ^\d{4}-\d{2}-\d{2}$ - type: 'null' applicability: type: string enum: - confirmed - unknown - not_applicable undated_fallback: type: boolean calendars: type: array items: type: object properties: service_id: anyOf: - type: string minLength: 1 - type: 'null' start_date: anyOf: - type: string pattern: ^\d{4}-\d{2}-\d{2}$ - type: 'null' end_date: anyOf: - type: string pattern: ^\d{4}-\d{2}-\d{2}$ - type: 'null' monday: anyOf: - type: integer minimum: 0 maximum: 1 - type: 'null' tuesday: anyOf: - type: integer minimum: 0 maximum: 1 - type: 'null' wednesday: anyOf: - type: integer minimum: 0 maximum: 1 - type: 'null' thursday: anyOf: - type: integer minimum: 0 maximum: 1 - type: 'null' friday: anyOf: - type: integer minimum: 0 maximum: 1 - type: 'null' saturday: anyOf: - type: integer minimum: 0 maximum: 1 - type: 'null' sunday: anyOf: - type: integer minimum: 0 maximum: 1 - type: 'null' added_dates: type: array items: type: string pattern: ^\d{4}-\d{2}-\d{2}$ removed_dates: type: array items: type: string pattern: ^\d{4}-\d{2}-\d{2}$ required: - service_id - start_date - end_date - monday - tuesday - wednesday - thursday - friday - saturday - sunday - added_dates - removed_dates additionalProperties: false evidence: type: array items: type: string minLength: 1 warnings: type: array items: type: string required: - requested_date - queried_date - applicability - undated_fallback - calendars - evidence - warnings additionalProperties: false - type: 'null' boarding_point_ids: type: array items: type: string minLength: 1 boarding_points_knowledge: type: string enum: - known - unknown boarding_permission: type: string enum: - allowed - forbidden - conditional - unknown passage_ids: type: array items: type: string minLength: 1 next_passage_id: anyOf: - type: string minLength: 1 - type: 'null' following_passage_id: anyOf: - type: string minLength: 1 - type: 'null' cancelled_passage_ids: type: array items: type: string minLength: 1 uncertain_passage_ids: type: array items: type: string minLength: 1 state: type: string enum: - passages_available - structure_only - no_usable_passages - not_applicable required: - id - line_id - scope - qualification - destination - direction_id - branch - pattern_references - occurrence - previous - next - neighbors_knowledge - validity - boarding_point_ids - boarding_points_knowledge - boarding_permission - passage_ids - next_passage_id - following_passage_id - cancelled_passage_ids - uncertain_passage_ids - state additionalProperties: false next_passage_id: anyOf: - type: string minLength: 1 - type: 'null' following_passage_id: anyOf: - type: string minLength: 1 - type: 'null' required: - id - name - short_name - mode - color - text_color - network_id - operator_id - qualification - presence - provenance - choices - next_passage_id - following_passage_id additionalProperties: false passages: type: array items: type: object properties: id: type: string minLength: 1 line_id: anyOf: - type: string minLength: 1 - type: 'null' mode: type: string enum: - bus - tram - metro - cable_car - regional_rail - train - ferry - shuttle - rail - other headsign: anyOf: - type: string - type: 'null' boarding_point_id: anyOf: - type: string minLength: 1 - type: 'null' boarding_point: anyOf: - type: object properties: id: type: string minLength: 1 name: anyOf: - type: string - type: 'null' entity_kind: type: string enum: - station - stop_area - stop_point - platform location: anyOf: - type: object properties: lat: type: number minimum: -90 maximum: 90 lon: type: number minimum: -180 maximum: 180 required: - lat - lon additionalProperties: false - type: 'null' required: - id - name - entity_kind - location additionalProperties: false - type: 'null' pattern_reference: anyOf: - type: object properties: pattern_id: type: string minLength: 1 revision_id: type: string minLength: 1 occurrence_id: anyOf: - type: string minLength: 1 - type: 'null' line_id: type: string minLength: 1 detail_href: type: string minLength: 1 detail_state: type: string enum: - loaded - not_loaded required: - pattern_id - revision_id - occurrence_id - line_id - detail_href - detail_state additionalProperties: false - type: 'null' service_date: anyOf: - type: string - type: 'null' timezone: anyOf: - type: string - type: 'null' timing: anyOf: - type: object properties: scheduled_at: anyOf: - type: string format: date-time - type: 'null' predicted_at: anyOf: - type: string format: date-time - type: 'null' display_at: type: string format: date-time display_origin: type: string enum: - scheduled - realtime fallback_reason: anyOf: - type: string enum: - stale_prediction - unknown_source_freshness - invalid_prediction - no_prediction - type: 'null' required: - scheduled_at - predicted_at - display_at - display_origin - fallback_reason additionalProperties: false - type: 'null' expired_timing: anyOf: - type: object properties: scheduled_at: anyOf: - type: string format: date-time - type: 'null' predicted_at: anyOf: - type: string format: date-time - type: 'null' display_at: type: string format: date-time display_origin: type: string enum: - scheduled - realtime fallback_reason: anyOf: - type: string enum: - stale_prediction - unknown_source_freshness - invalid_prediction - no_prediction - type: 'null' required: - scheduled_at - predicted_at - display_at - display_origin - fallback_reason additionalProperties: false - type: 'null' realtime: type: boolean cancelled: type: boolean service_status: type: string enum: - cancelled - not_cancelled - unknown - conflicting freshness: type: object properties: state: type: string enum: - fresh - stale - unknown - static received_at: type: string format: date-time source_updated_at: anyOf: - type: string format: date-time - type: 'null' evaluated_at: type: string format: date-time max_age_seconds: anyOf: - type: number minimum: 0 - type: 'null' required: - state - received_at - source_updated_at - evaluated_at - max_age_seconds additionalProperties: false expires_at: anyOf: - type: string format: date-time - type: 'null' selection: type: string enum: - upcoming - cancelled - uncertain_service - past - unavailable provenance: type: object properties: selected_observation_id: type: string minLength: 1 observation_ids: type: array items: type: string minLength: 1 providers: type: array items: type: string minLength: 1 received_at: type: string format: date-time source_updated_at: anyOf: - type: string format: date-time - type: 'null' detail_href: type: string minLength: 1 required: - selected_observation_id - observation_ids - providers - received_at - source_updated_at - detail_href additionalProperties: false required: - id - line_id - mode - headsign - boarding_point_id - boarding_point - pattern_reference - service_date - timezone - timing - expired_timing - realtime - cancelled - service_status - freshness - expires_at - selection - provenance additionalProperties: false unassigned_passage_ids: type: array items: type: string minLength: 1 temporal_coverage: type: object properties: execution: type: string enum: - complete - partial - failed - not_requested state: type: string enum: - passages_available - healthy_no_passages_returned - no_usable_passages - unavailable - not_requested requested_at: anyOf: - type: string format: date-time - type: 'null' window_start: anyOf: - type: string format: date-time - type: 'null' window_end: anyOf: - type: string format: date-time - type: 'null' timezone: anyOf: - type: string - type: 'null' timezones: type: array items: type: string service_dates: type: array items: type: string query_limit: anyOf: - type: integer minimum: 0 - type: 'null' returned_count: type: integer minimum: 0 acquisition_limit: type: integer minimum: 0 warnings: type: array items: type: string required: - execution - state - requested_at - window_start - window_end - timezone - timezones - service_dates - query_limit - returned_count - acquisition_limit - warnings additionalProperties: false structure_coverage: type: object properties: patterns: type: string enum: - partial - unknown loaded_patterns: type: integer minimum: 0 omitted_pattern_ids: type: array items: type: string minLength: 1 scope: type: string const: previously_acquired_patterns_for_visible_lines required: - patterns - loaded_patterns - omitted_pattern_ids - scope additionalProperties: false limits: type: object properties: max_lines: type: integer minimum: 0 max_patterns: type: integer minimum: 0 max_occurrences: type: integer minimum: 0 max_passages: type: integer minimum: 0 max_points: type: integer minimum: 0 max_choices: type: integer minimum: 0 omitted_choice_ids: type: array items: type: string minLength: 1 omitted_line_ids: type: array items: type: string minLength: 1 omitted_passage_ids: type: array items: type: string minLength: 1 omitted_point_ids: type: array items: type: string minLength: 1 occurrences_inspected: type: integer minimum: 0 truncated: type: boolean required: - max_lines - max_patterns - max_occurrences - max_passages - max_points - max_choices - omitted_choice_ids - omitted_line_ids - omitted_passage_ids - omitted_point_ids - occurrences_inspected - truncated additionalProperties: false errors: type: array items: type: object properties: code: type: string minLength: 1 message: type: string required: - code - message additionalProperties: false warnings: type: array items: type: string required: - contract_version - evaluated_at - expires_at - on_expiry - entity - boarding_points - boarding_points_coverage - lines - passages - unassigned_passage_ids - temporal_coverage - structure_coverage - limits - errors - warnings additionalProperties: false status: type: string const: success station: type: object required: - id - source_stop_id - source_stop_ids - entity_kind - name - location - parent - children - modes - line_ids - operator_ids - sources - metadata_timestamps properties: id: type: string pattern: ^roote_transport_station_[a-f0-9]{20}$ source_stop_id: type: - string - 'null' description: Provider stop identifier used by Transit itinerary stop sequences when available. source_stop_ids: type: array items: type: object required: - provider - source_stop_id - region properties: provider: type: string source_stop_id: type: string region: type: - string - 'null' entity_kind: type: string enum: - station - stop_area - stop_point - platform name: type: string location: type: object required: - lat - lon properties: lat: type: number lon: type: number knowledge: type: object properties: contract_version: type: string const: 1.0.0 entity_id: type: string minLength: 1 relations: type: object properties: parent: type: object properties: knowledge: type: string enum: - known - unknown - not_applicable - known_absent coverage: type: string enum: - complete - partial - unknown freshness: type: string enum: - fresh - stale - unknown scope: type: object properties: entity_id: type: string minLength: 1 relation: type: string enum: - parent - children namespace: anyOf: - type: string minLength: 1 - type: 'null' feed_id: anyOf: - type: string minLength: 1 - type: 'null' description: type: string minLength: 1 required: - entity_id - relation - namespace - feed_id - description additionalProperties: false target_ids: type: array items: type: string minLength: 1 evidence_ids: type: array items: type: string minLength: 1 observed_at: anyOf: - type: string format: date-time - type: 'null' source_updated_at: anyOf: - type: string format: date-time - type: 'null' valid_until: anyOf: - type: string format: date-time - type: 'null' absence_proof: anyOf: - type: object properties: description: type: string minLength: 1 evidence_ids: type: array items: type: string minLength: 1 minItems: 1 required: - description - evidence_ids additionalProperties: false - type: 'null' required: - knowledge - coverage - freshness - scope - target_ids - evidence_ids - observed_at - source_updated_at - valid_until - absence_proof additionalProperties: false children: type: object properties: knowledge: type: string enum: - known - unknown - not_applicable - known_absent coverage: type: string enum: - complete - partial - unknown freshness: type: string enum: - fresh - stale - unknown scope: type: object properties: entity_id: type: string minLength: 1 relation: type: string enum: - parent - children namespace: anyOf: - type: string minLength: 1 - type: 'null' feed_id: anyOf: - type: string minLength: 1 - type: 'null' description: type: string minLength: 1 required: - entity_id - relation - namespace - feed_id - description additionalProperties: false target_ids: type: array items: type: string minLength: 1 evidence_ids: type: array items: type: string minLength: 1 observed_at: anyOf: - type: string format: date-time - type: 'null' source_updated_at: anyOf: - type: string format: date-time - type: 'null' valid_until: anyOf: - type: string format: date-time - type: 'null' absence_proof: anyOf: - type: object properties: description: type: string minLength: 1 evidence_ids: type: array items: type: string minLength: 1 minItems: 1 required: - description - evidence_ids additionalProperties: false - type: 'null' required: - knowledge - coverage - freshness - scope - target_ids - evidence_ids - observed_at - source_updated_at - valid_until - absence_proof additionalProperties: false required: - parent - children additionalProperties: false history: type: array items: type: object properties: id: type: string minLength: 1 subject_id: type: string minLength: 1 object_id: anyOf: - type: string minLength: 1 - type: 'null' relation: type: string enum: - parent - children reconciliation: type: string enum: - confirmed - probable - unknown - contradictory - revoked provider: anyOf: - type: string minLength: 1 - type: 'null' namespace: anyOf: - type: string minLength: 1 - type: 'null' feed_id: anyOf: - type: string minLength: 1 - type: 'null' feed_version: anyOf: - type: string minLength: 1 - type: 'null' source_id: anyOf: - type: string minLength: 1 - type: 'null' parent_source_id: anyOf: - type: string minLength: 1 - type: 'null' method: type: string enum: - provider_explicit_parent - historical_unverified - manual evidence: type: array items: type: string observed_at: anyOf: - type: string format: date-time - type: 'null' received_at: anyOf: - type: string format: date-time - type: 'null' source_updated_at: anyOf: - type: string format: date-time - type: 'null' valid_from: anyOf: - type: string format: date-time - type: 'null' valid_until: anyOf: - type: string format: date-time - type: 'null' required: - id - subject_id - object_id - relation - reconciliation - provider - namespace - feed_id - feed_version - source_id - parent_source_id - method - evidence - observed_at - received_at - source_updated_at - valid_from - valid_until additionalProperties: false required: - contract_version - entity_id - relations - history additionalProperties: false legacy_line_ids: type: array items: type: string description: Unqualified historical registry metadata; never a proof of canonical identity. lines: type: array items: type: object properties: id: type: string pattern: ^roote_transport_line_[a-f0-9]{20}$ name: anyOf: - type: string - type: 'null' short_name: anyOf: - type: string - type: 'null' mode: type: string enum: - bus - tram - metro - cable_car - regional_rail - train - ferry - shuttle - rail - other color: anyOf: - type: string - type: 'null' text_color: anyOf: - type: string - type: 'null' source_mode: anyOf: - type: string - type: 'null' subtype: anyOf: - type: string enum: - brt - commuter - suburban - regional - intercity - high_speed - type: 'null' network_id: anyOf: - type: string minLength: 1 - type: 'null' operator_id: anyOf: - type: string minLength: 1 - type: 'null' identity: type: object properties: contract_version: type: string const: 1.1.0 canonical_id: type: string pattern: ^roote_transport_line_[a-f0-9]{20}$ base_id: type: string pattern: ^roote_transport_line_[a-f0-9]{20}$ qualification: type: string enum: - established - unqualified - historical_unqualified - ambiguous aliases: type: array items: type: string pattern: ^roote_transport_line_[a-f0-9]{20}$ references: type: array items: type: object properties: reference_key: type: string minLength: 1 base_id: type: string pattern: ^roote_transport_line_[a-f0-9]{20}$ active: type: boolean observation_id: type: string minLength: 1 observation: type: object properties: reference: type: object properties: provider: type: string enum: - tripgo - transit - transitland - navitia - gtfs - gbfs source_id: type: string minLength: 1 id_scope: type: string enum: - provider_global - feed_local - network_local - namespace_local - unknown namespace: anyOf: - type: string minLength: 1 - type: 'null' feed_id: anyOf: - type: string minLength: 1 - type: 'null' network_id: anyOf: - type: string minLength: 1 - type: 'null' operator_id: anyOf: - type: string minLength: 1 - type: 'null' required: - provider - source_id - id_scope - namespace - feed_id - network_id - operator_id additionalProperties: false feed_version: anyOf: - type: string minLength: 1 - type: 'null' observed_at: anyOf: - type: string format: date-time - type: 'null' received_at: anyOf: - type: string format: date-time - type: 'null' source_updated_at: anyOf: - type: string format: date-time - type: 'null' qualification: type: string enum: - verified - provider - historical attributes: type: object properties: name: anyOf: - type: string - type: 'null' short_name: anyOf: - type: string - type: 'null' mode: type: string enum: - bus - tram - metro - cable_car - regional_rail - train - ferry - shuttle - rail - other color: anyOf: - type: string - type: 'null' text_color: anyOf: - type: string - type: 'null' network_id: anyOf: - type: string minLength: 1 - type: 'null' operator_id: anyOf: - type: string minLength: 1 - type: 'null' source_mode: anyOf: - type: string - type: 'null' subtype: anyOf: - type: string enum: - brt - commuter - suburban - regional - intercity - high_speed - type: 'null' required: - name - short_name - mode - color - text_color - network_id - operator_id - source_mode - subtype additionalProperties: false required: - reference - feed_version - observed_at - received_at - source_updated_at - qualification - attributes additionalProperties: false required: - reference_key - base_id - active - observation_id - observation additionalProperties: false decisions: type: array items: type: object properties: event_id: type: string minLength: 1 sequence: type: integer minimum: 0 decision_id: type: string minLength: 1 left_id: type: string pattern: ^roote_transport_line_[a-f0-9]{20}$ right_id: type: string pattern: ^roote_transport_line_[a-f0-9]{20}$ reconciliation: type: string enum: - confirmed - probable - unknown - contradictory - revoked method: type: string enum: - documented_mapping - shared_authority_identifier - historical_review evidence: type: array items: type: string minLength: 1 authority: anyOf: - type: string minLength: 1 - type: 'null' authority_identifier: anyOf: - type: string minLength: 1 - type: 'null' observed_at: anyOf: - type: string format: date-time - type: 'null' recorded_at: type: string format: date-time required: - event_id - sequence - decision_id - left_id - right_id - reconciliation - method - evidence - authority - authority_identifier - observed_at - recorded_at additionalProperties: false attribute_provenance: type: array items: type: object properties: field: type: string enum: - name - short_name - mode - color - text_color - network_id - operator_id - source_mode - subtype observation_id: type: string minLength: 1 reference_key: type: string minLength: 1 required: - field - observation_id - reference_key additionalProperties: false conflicts: type: array items: type: object properties: field: type: string minLength: 1 values: type: array items: type: string observation_ids: type: array items: type: string minLength: 1 required: - field - values - observation_ids additionalProperties: false required: - contract_version - canonical_id - base_id - qualification - aliases - references - decisions - attribute_provenance - conflicts additionalProperties: false required: - id - name - short_name - mode - color - text_color - source_mode - subtype - network_id - operator_id - identity additionalProperties: false parent: oneOf: - type: object required: - id - source_stop_id - source_stop_ids - entity_kind - name - location properties: id: type: string pattern: ^roote_transport_station_[a-f0-9]{20}$ source_stop_id: type: - string - 'null' description: Provider stop identifier used by Transit itinerary stop sequences when available. source_stop_ids: type: array items: type: object required: - provider - source_stop_id - region properties: provider: type: string source_stop_id: type: string region: type: - string - 'null' entity_kind: type: string enum: - station - stop_area - stop_point - platform name: type: string location: type: object required: - lat - lon properties: lat: type: number lon: type: number - type: 'null' children: type: array items: type: object required: - id - source_stop_id - source_stop_ids - entity_kind - name - location properties: id: type: string pattern: ^roote_transport_station_[a-f0-9]{20}$ source_stop_id: type: - string - 'null' description: Provider stop identifier used by Transit itinerary stop sequences when available. source_stop_ids: type: array items: type: object required: - provider - source_stop_id - region properties: provider: type: string source_stop_id: type: string region: type: - string - 'null' entity_kind: type: string enum: - station - stop_area - stop_point - platform name: type: string location: type: object required: - lat - lon properties: lat: type: number lon: type: number modes: type: array items: type: string line_ids: type: array items: type: string operator_ids: type: array items: type: string sources: type: array items: type: object required: - provider - entity_kind - source_id - region - first_seen_at - last_seen_at properties: provider: type: string entity_kind: type: string source_id: type: string region: type: - string - 'null' first_seen_at: type: string format: date-time last_seen_at: type: string format: date-time metadata_timestamps: type: object required: - created_at - updated_at - meaning properties: created_at: type: string format: date-time updated_at: type: string format: date-time meaning: type: string - type: object properties: contract_version: type: string const: transport-1.0.0 status: type: string const: success station: type: object properties: id: type: string pattern: ^roote_transport_station_[a-f0-9]{20}$ name: type: string entity_kind: type: string enum: - station - stop_area - stop_point - platform location: type: object properties: lat: type: number minimum: -90 maximum: 90 lon: type: number minimum: -180 maximum: 180 required: - lat - lon additionalProperties: false modes: type: array items: type: string enum: - bus - tram - metro - cable_car - regional_rail - train - ferry - shuttle - rail - other parent: type: object properties: state: type: string enum: - known - unknown - not_applicable - known_absent coverage: type: string enum: - complete - partial - unknown ids: type: array items: type: string pattern: ^roote_transport_station_[a-f0-9]{20}$ required: - state - coverage - ids additionalProperties: false children: type: object properties: state: type: string enum: - known - unknown - not_applicable - known_absent coverage: type: string enum: - complete - partial - unknown ids: type: array items: type: string pattern: ^roote_transport_station_[a-f0-9]{20}$ required: - state - coverage - ids additionalProperties: false line_ids: type: array items: type: string pattern: ^roote_transport_line_[a-f0-9]{20}$ operator_ids: type: array items: type: string pattern: ^roote_transport_operator_[a-f0-9]{20}$ accessibility: type: object properties: wheelchair: type: string enum: - 'yes' - 'no' - unknown required: - wheelchair additionalProperties: false freshness: type: object properties: state: type: string enum: - fresh - stale - unknown - static received_at: anyOf: - type: string format: date-time - type: 'null' source_updated_at: anyOf: - type: string format: date-time - type: 'null' expires_at: anyOf: - type: string format: date-time - type: 'null' required: - state - received_at - source_updated_at - expires_at additionalProperties: false required: - id - name - entity_kind - location - modes - parent - children - line_ids - operator_ids - accessibility - freshness additionalProperties: false lines: type: array items: type: object properties: id: type: string pattern: ^roote_transport_line_[a-f0-9]{20}$ name: anyOf: - type: string - type: 'null' short_name: anyOf: - type: string - type: 'null' mode: type: string enum: - bus - tram - metro - cable_car - regional_rail - train - ferry - shuttle - rail - other color: anyOf: - type: string - type: 'null' text_color: anyOf: - type: string - type: 'null' network_id: anyOf: - type: string minLength: 1 - type: 'null' operator_id: anyOf: - type: string pattern: ^roote_transport_operator_[a-f0-9]{20}$ - type: 'null' qualification: type: string enum: - established - uncertain - historical required: - id - name - short_name - mode - color - text_color - network_id - operator_id - qualification additionalProperties: false operators: type: array items: type: object properties: id: anyOf: - type: string pattern: ^roote_transport_operator_[a-f0-9]{20}$ - type: 'null' name: anyOf: - type: string - type: 'null' required: - id - name additionalProperties: false warnings: type: array items: type: object properties: code: type: string minLength: 1 message: type: string scope: anyOf: - type: string - type: 'null' required: - code - message - scope additionalProperties: false attributions: type: array items: type: object properties: provider: type: string minLength: 1 display_name: type: string url: anyOf: - type: string - type: 'null' required: type: boolean required: - provider - display_name - url - required additionalProperties: false required: - contract_version - status - station - lines - operators - warnings - attributions additionalProperties: false '400': description: Invalid request content: application/json: schema: type: object properties: error: type: object properties: code: type: string message: type: string '401': description: Invalid request content: application/json: schema: type: object properties: error: type: object properties: code: type: string message: type: string '403': description: Invalid request content: application/json: schema: type: object properties: error: type: object properties: code: type: string message: type: string '404': description: Invalid request content: application/json: schema: type: object properties: error: type: object properties: code: type: string message: type: string '409': description: Invalid request content: application/json: schema: type: object properties: error: type: object properties: code: type: string message: type: string '429': description: Invalid request content: application/json: schema: type: object properties: error: type: object properties: code: type: string message: type: string '503': description: Invalid request content: application/json: schema: type: object properties: error: type: object properties: code: type: string message: type: string tags: - Transit /v1/transit/stations/{id}/departures: get: operationId: getTransportDepartures security: - {} - bearerAuth: [] x-roote-required-scope: data:read summary: Get upcoming departures for a transport station description: Requires data:read. Resolves the canonical ROOTE station ID to active provider references server-side, executes a bounded plan over established boarding relations and reconciles only proven passage occurrences. expected_at is the selected display time; coherence.timing separates nullable scheduled and predicted times and identifies stale or unknown freshness fallbacks. An all-provider failure has status error, not empty. Departure IDs no longer use display labels; consumers must treat previous IDs as unverified historical keys. parameters: - name: public_contract in: query required: false schema: type: string enum: - transport-1.0.0 description: Opt in to the strict public transport DTO. Incompatible with projection=true. debug never adds diagnostics to this contract. Also available under /api/v1. - name: id in: path required: true schema: type: string pattern: ^roote_transport_station_[a-f0-9]{20}$ - name: projection in: query required: false schema: type: boolean default: false description: Include shared transport presentation from the same acquired departures and stored structures - name: limit in: query required: false schema: type: integer minimum: 1 maximum: 50 default: 10 description: Maximum departures - name: at in: query required: false schema: type: integer minimum: 1 description: Earliest departure as Unix seconds - name: line in: query required: false schema: type: string description: Optional canonical line number or name - name: direction in: query required: false schema: type: string description: Optional direction filter - name: debug in: query required: false schema: type: boolean default: false description: Include safe provider diagnostics - name: token in: query deprecated: true schema: type: string responses: '200': description: Normalized upcoming departures content: application/json: schema: oneOf: - type: object properties: status: type: string enum: - success - empty - partial - error station_id: type: string minLength: 1 total: type: integer minimum: 0 maximum: 50 departures: type: array items: type: object properties: id: type: string pattern: ^roote_transport_departure_[a-f0-9]{20}$ type: type: string const: transport_departure station_id: type: string minLength: 1 mode: type: string enum: - bus - tram - metro - cable_car - regional_rail - train - ferry - shuttle - rail - other line: type: object properties: id: anyOf: - type: string pattern: ^roote_transport_line_[a-f0-9]{20}$ - type: 'null' name: anyOf: - type: string - type: 'null' short_name: anyOf: - type: string - type: 'null' identity: type: object properties: contract_version: type: string const: 1.1.0 canonical_id: type: string pattern: ^roote_transport_line_[a-f0-9]{20}$ base_id: type: string pattern: ^roote_transport_line_[a-f0-9]{20}$ qualification: type: string enum: - established - unqualified - historical_unqualified - ambiguous aliases: type: array items: type: string pattern: ^roote_transport_line_[a-f0-9]{20}$ references: type: array items: type: object properties: reference_key: type: string minLength: 1 base_id: type: string pattern: ^roote_transport_line_[a-f0-9]{20}$ active: type: boolean observation_id: type: string minLength: 1 observation: type: object properties: reference: type: object properties: provider: type: string enum: - tripgo - transit - transitland - navitia - gtfs - gbfs source_id: type: string minLength: 1 id_scope: type: string enum: - provider_global - feed_local - network_local - namespace_local - unknown namespace: anyOf: - type: string minLength: 1 - type: 'null' feed_id: anyOf: - type: string minLength: 1 - type: 'null' network_id: anyOf: - type: string minLength: 1 - type: 'null' operator_id: anyOf: - type: string minLength: 1 - type: 'null' required: - provider - source_id - id_scope - namespace - feed_id - network_id - operator_id additionalProperties: false feed_version: anyOf: - type: string minLength: 1 - type: 'null' observed_at: anyOf: - type: string format: date-time - type: 'null' received_at: anyOf: - type: string format: date-time - type: 'null' source_updated_at: anyOf: - type: string format: date-time - type: 'null' qualification: type: string enum: - verified - provider - historical attributes: type: object properties: name: anyOf: - type: string - type: 'null' short_name: anyOf: - type: string - type: 'null' mode: type: string enum: - bus - tram - metro - cable_car - regional_rail - train - ferry - shuttle - rail - other color: anyOf: - type: string - type: 'null' text_color: anyOf: - type: string - type: 'null' network_id: anyOf: - type: string minLength: 1 - type: 'null' operator_id: anyOf: - type: string minLength: 1 - type: 'null' source_mode: anyOf: - type: string - type: 'null' subtype: anyOf: - type: string enum: - brt - commuter - suburban - regional - intercity - high_speed - type: 'null' required: - name - short_name - mode - color - text_color - network_id - operator_id - source_mode - subtype additionalProperties: false required: - reference - feed_version - observed_at - received_at - source_updated_at - qualification - attributes additionalProperties: false required: - reference_key - base_id - active - observation_id - observation additionalProperties: false decisions: type: array items: type: object properties: event_id: type: string minLength: 1 sequence: type: integer minimum: 0 decision_id: type: string minLength: 1 left_id: type: string pattern: ^roote_transport_line_[a-f0-9]{20}$ right_id: type: string pattern: ^roote_transport_line_[a-f0-9]{20}$ reconciliation: type: string enum: - confirmed - probable - unknown - contradictory - revoked method: type: string enum: - documented_mapping - shared_authority_identifier - historical_review evidence: type: array items: type: string minLength: 1 authority: anyOf: - type: string minLength: 1 - type: 'null' authority_identifier: anyOf: - type: string minLength: 1 - type: 'null' observed_at: anyOf: - type: string format: date-time - type: 'null' recorded_at: type: string format: date-time required: - event_id - sequence - decision_id - left_id - right_id - reconciliation - method - evidence - authority - authority_identifier - observed_at - recorded_at additionalProperties: false attribute_provenance: type: array items: type: object properties: field: type: string enum: - name - short_name - mode - color - text_color - network_id - operator_id - source_mode - subtype observation_id: type: string minLength: 1 reference_key: type: string minLength: 1 required: - field - observation_id - reference_key additionalProperties: false conflicts: type: array items: type: object properties: field: type: string minLength: 1 values: type: array items: type: string observation_ids: type: array items: type: string minLength: 1 required: - field - values - observation_ids additionalProperties: false required: - contract_version - canonical_id - base_id - qualification - aliases - references - decisions - attribute_provenance - conflicts additionalProperties: false required: - id - name - short_name additionalProperties: false direction: anyOf: - type: string - type: 'null' headsign: anyOf: - type: string - type: 'null' pattern_id: anyOf: - type: string minLength: 1 - type: 'null' itinerary_id: anyOf: - type: string minLength: 1 - type: 'null' source_trip_id: anyOf: - type: string - type: 'null' pattern_link: type: object properties: pattern_id: anyOf: - type: string minLength: 1 - type: 'null' revision_id: anyOf: - type: string minLength: 1 - type: 'null' occurrence_id: anyOf: - type: string minLength: 1 - type: 'null' method: type: string enum: - stored_scoped_trip_occurrence - unknown evidence: type: array items: type: string minLength: 1 legacy_id_candidates: type: array items: type: string minLength: 1 required: - pattern_id - revision_id - occurrence_id - method - evidence additionalProperties: false route_id: anyOf: - type: string minLength: 1 - type: 'null' boarding_point_id: anyOf: - type: string minLength: 1 - type: 'null' source_stop_id: anyOf: - type: string - type: 'null' operator: type: object properties: id: anyOf: - type: string - type: 'null' name: anyOf: - type: string - type: 'null' required: - id - name additionalProperties: false scheduled_at: type: string format: date-time expected_at: type: string format: date-time delay_seconds: anyOf: - type: integer - type: 'null' realtime: type: boolean cancelled: type: boolean schedule_relationship: anyOf: - type: string - type: 'null' timetable: type: object properties: scheduled_at: anyOf: - type: string format: date-time - type: 'null' estimated_at: anyOf: - type: string format: date-time - type: 'null' required: - scheduled_at - estimated_at additionalProperties: false platform: type: object properties: scheduled: anyOf: - type: string - type: 'null' current: anyOf: - type: string - type: 'null' changed: type: boolean required: - scheduled - current - changed additionalProperties: false accessibility: type: object properties: wheelchair: anyOf: - type: boolean - type: 'null' bicycle: anyOf: - type: boolean - type: 'null' required: - wheelchair - bicycle additionalProperties: false alerts: type: array items: type: object properties: cause: anyOf: - type: string - type: 'null' effect: anyOf: - type: string - type: 'null' severity: anyOf: - type: string - type: 'null' title: anyOf: - type: string - type: 'null' description: anyOf: - type: string - type: 'null' active_periods: type: array items: type: object properties: start: anyOf: - type: string format: date-time - type: 'null' end: anyOf: - type: string format: date-time - type: 'null' required: - start - end additionalProperties: false entities: type: array items: type: object properties: agency_id: anyOf: - type: string - type: 'null' route_id: anyOf: - type: string - type: 'null' stop_id: anyOf: - type: string - type: 'null' trip_id: anyOf: - type: string - type: 'null' required: - agency_id - route_id - stop_id - trip_id additionalProperties: false required: - cause - effect - severity - title - description - active_periods - entities additionalProperties: false sources: type: array items: type: object properties: provider: type: string enum: - tripgo - transit - transitland - navitia - gtfs - gbfs region: anyOf: - type: string - type: 'null' stop_code: type: string service_trip_id: type: string route_id: anyOf: - type: string - type: 'null' operator_id: anyOf: - type: string - type: 'null' received_at: type: string format: date-time source_updated_at: anyOf: - type: string format: date-time - type: 'null' scheduled_at: type: string format: date-time expected_at: type: string format: date-time realtime: type: boolean cancelled: type: boolean reference: type: object properties: provider: type: string enum: - tripgo - transit - transitland - navitia - gtfs - gbfs namespace: anyOf: - type: string minLength: 1 - type: 'null' feed_id: anyOf: - type: string minLength: 1 - type: 'null' feed_version: anyOf: - type: string minLength: 1 - type: 'null' trip_id: anyOf: - type: string minLength: 1 - type: 'null' trip_id_scope: type: string enum: - provider_global - feed_local - namespace_local - unknown trip_start_time: anyOf: - type: string pattern: ^\d{2,}:\d{2}:\d{2}$ - type: 'null' trip_instance: type: string enum: - scheduled - frequency - unknown service_date: anyOf: - type: string pattern: ^\d{4}-\d{2}-\d{2}$ - type: 'null' stop_id: anyOf: - type: string minLength: 1 - type: 'null' stop_sequence: anyOf: - type: integer minimum: 0 - type: 'null' occurrence_id: anyOf: - type: string minLength: 1 - type: 'null' timezone: anyOf: - type: string minLength: 1 - type: 'null' required: - provider - namespace - feed_id - feed_version - trip_id - trip_id_scope - trip_start_time - trip_instance - service_date - stop_id - stop_sequence - occurrence_id - timezone additionalProperties: false observation_id: type: string minLength: 1 required: - provider - region - stop_code - service_trip_id - route_id - operator_id - received_at - source_updated_at - scheduled_at - expected_at - realtime - cancelled additionalProperties: false minItems: 1 freshness: type: object properties: received_at: type: string format: date-time source_updated_at: anyOf: - type: string format: date-time - type: 'null' required: - received_at - source_updated_at additionalProperties: false direction_id: anyOf: - type: string - type: 'null' terminus: anyOf: - type: string - type: 'null' coherence: type: object properties: contract_version: type: string const: 1.2.0 qualification: type: string enum: - scoped_occurrence - documented_equivalence - unqualified_observation selected_observation_id: type: string minLength: 1 reference: type: object properties: provider: type: string enum: - tripgo - transit - transitland - navitia - gtfs - gbfs namespace: anyOf: - type: string minLength: 1 - type: 'null' feed_id: anyOf: - type: string minLength: 1 - type: 'null' feed_version: anyOf: - type: string minLength: 1 - type: 'null' trip_id: anyOf: - type: string minLength: 1 - type: 'null' trip_id_scope: type: string enum: - provider_global - feed_local - namespace_local - unknown trip_start_time: anyOf: - type: string pattern: ^\d{2,}:\d{2}:\d{2}$ - type: 'null' trip_instance: type: string enum: - scheduled - frequency - unknown service_date: anyOf: - type: string pattern: ^\d{4}-\d{2}-\d{2}$ - type: 'null' stop_id: anyOf: - type: string minLength: 1 - type: 'null' stop_sequence: anyOf: - type: integer minimum: 0 - type: 'null' occurrence_id: anyOf: - type: string minLength: 1 - type: 'null' timezone: anyOf: - type: string minLength: 1 - type: 'null' required: - provider - namespace - feed_id - feed_version - trip_id - trip_id_scope - trip_start_time - trip_instance - service_date - stop_id - stop_sequence - occurrence_id - timezone additionalProperties: false place_id: anyOf: - type: string minLength: 1 - type: 'null' direction_id: anyOf: - type: string - type: 'null' terminus: anyOf: - type: string - type: 'null' observations: type: array items: type: object properties: id: type: string minLength: 1 reference: type: object properties: provider: type: string enum: - tripgo - transit - transitland - navitia - gtfs - gbfs namespace: anyOf: - type: string minLength: 1 - type: 'null' feed_id: anyOf: - type: string minLength: 1 - type: 'null' feed_version: anyOf: - type: string minLength: 1 - type: 'null' trip_id: anyOf: - type: string minLength: 1 - type: 'null' trip_id_scope: type: string enum: - provider_global - feed_local - namespace_local - unknown trip_start_time: anyOf: - type: string pattern: ^\d{2,}:\d{2}:\d{2}$ - type: 'null' trip_instance: type: string enum: - scheduled - frequency - unknown service_date: anyOf: - type: string pattern: ^\d{4}-\d{2}-\d{2}$ - type: 'null' stop_id: anyOf: - type: string minLength: 1 - type: 'null' stop_sequence: anyOf: - type: integer minimum: 0 - type: 'null' occurrence_id: anyOf: - type: string minLength: 1 - type: 'null' timezone: anyOf: - type: string minLength: 1 - type: 'null' required: - provider - namespace - feed_id - feed_version - trip_id - trip_id_scope - trip_start_time - trip_instance - service_date - stop_id - stop_sequence - occurrence_id - timezone additionalProperties: false provider_observation_id: type: string minLength: 1 qualification: type: string enum: - verified - provider - unknown line_id: anyOf: - type: string minLength: 1 - type: 'null' boarding_point_id: anyOf: - type: string minLength: 1 - type: 'null' direction: anyOf: - type: string - type: 'null' headsign: anyOf: - type: string - type: 'null' pattern_id: anyOf: - type: string minLength: 1 - type: 'null' scheduled_at: anyOf: - type: string format: date-time - type: 'null' predicted_at: anyOf: - type: string format: date-time - type: 'null' cancelled: type: boolean platform: type: object properties: scheduled: anyOf: - type: string - type: 'null' current: anyOf: - type: string - type: 'null' changed: type: boolean required: - scheduled - current - changed additionalProperties: false received_at: type: string format: date-time source_updated_at: anyOf: - type: string format: date-time - type: 'null' receipts: type: object properties: first_received_at: type: string format: date-time last_received_at: type: string format: date-time receipt_count: type: integer minimum: 0 required: - first_received_at - last_received_at - receipt_count additionalProperties: false details: type: object properties: mode: type: string enum: - bus - tram - metro - cable_car - regional_rail - train - ferry - shuttle - rail - other line_name: anyOf: - type: string - type: 'null' line_short_name: anyOf: - type: string - type: 'null' canonical_operator_id: anyOf: - type: string minLength: 1 - type: 'null' operator: type: object properties: id: anyOf: - type: string minLength: 1 - type: 'null' name: anyOf: - type: string - type: 'null' required: - id - name additionalProperties: false direction_id: anyOf: - type: string minLength: 1 - type: 'null' terminus: anyOf: - type: string - type: 'null' realtime: type: boolean schedule_relationship: anyOf: - type: string - type: 'null' accessibility: type: object properties: wheelchair: anyOf: - type: boolean - type: 'null' bicycle: anyOf: - type: boolean - type: 'null' required: - wheelchair - bicycle additionalProperties: false alerts: type: array items: type: object properties: cause: anyOf: - type: string - type: 'null' effect: anyOf: - type: string - type: 'null' severity: anyOf: - type: string - type: 'null' title: anyOf: - type: string - type: 'null' description: anyOf: - type: string - type: 'null' active_periods: type: array items: type: object properties: start: anyOf: - type: string format: date-time - type: 'null' end: anyOf: - type: string format: date-time - type: 'null' required: - start - end additionalProperties: false entities: type: array items: type: object properties: agency_id: anyOf: - type: string - type: 'null' route_id: anyOf: - type: string - type: 'null' stop_id: anyOf: - type: string - type: 'null' trip_id: anyOf: - type: string - type: 'null' required: - agency_id - route_id - stop_id - trip_id additionalProperties: false required: - cause - effect - severity - title - description - active_periods - entities additionalProperties: false timetable: anyOf: - type: object properties: scheduled_at: anyOf: - type: string format: date-time - type: 'null' estimated_at: anyOf: - type: string format: date-time - type: 'null' required: - scheduled_at - estimated_at additionalProperties: false - type: 'null' pattern_revision_id: anyOf: - type: string minLength: 1 - type: 'null' pattern_occurrence_id: anyOf: - type: string minLength: 1 - type: 'null' required: - mode - line_name - line_short_name - canonical_operator_id - operator - direction_id - terminus - realtime - schedule_relationship - accessibility - alerts - timetable - pattern_revision_id - pattern_occurrence_id additionalProperties: false required: - id - reference - provider_observation_id - qualification - line_id - boarding_point_id - direction - headsign - pattern_id - scheduled_at - predicted_at - cancelled - platform - received_at - source_updated_at additionalProperties: false minItems: 1 observation_ids: type: array items: type: string minLength: 1 minItems: 1 correspondences: type: array items: type: object properties: id: type: string minLength: 1 passage_key: type: string minLength: 1 reference_keys: type: array items: type: string minLength: 1 minItems: 2 reconciliation: type: string enum: - confirmed - probable - unknown - contradictory - revoked authority: anyOf: - type: string minLength: 1 - type: 'null' evidence: type: array items: type: string minLength: 1 required: - id - passage_key - reference_keys - reconciliation - authority - evidence additionalProperties: false conflicts: type: array items: type: object properties: field: type: string minLength: 1 observation_ids: type: array items: type: string minLength: 1 values: type: array items: anyOf: - type: string - type: 'null' required: - field - observation_ids - values additionalProperties: false service_status: type: string enum: - cancelled - not_cancelled - unknown - conflicting freshness: type: object properties: state: type: string enum: - fresh - stale - unknown - static received_at: type: string format: date-time source_updated_at: anyOf: - type: string format: date-time - type: 'null' evaluated_at: type: string format: date-time max_age_seconds: anyOf: - type: number minimum: 0 - type: 'null' required: - state - received_at - source_updated_at - evaluated_at - max_age_seconds additionalProperties: false timing: type: object properties: scheduled_at: anyOf: - type: string format: date-time - type: 'null' predicted_at: anyOf: - type: string format: date-time - type: 'null' display_at: type: string format: date-time display_origin: type: string enum: - scheduled - realtime fallback_reason: anyOf: - type: string enum: - stale_prediction - unknown_source_freshness - invalid_prediction - no_prediction - type: 'null' required: - scheduled_at - predicted_at - display_at - display_origin - fallback_reason additionalProperties: false required: - contract_version - qualification - selected_observation_id - reference - place_id - direction_id - terminus - observations - observation_ids - correspondences - conflicts - service_status - freshness - timing additionalProperties: false required: - id - type - station_id - mode - line - direction - headsign - pattern_id - itinerary_id - source_trip_id - route_id - boarding_point_id - source_stop_id - operator - scheduled_at - expected_at - delay_seconds - realtime - cancelled - platform - accessibility - sources - freshness - coherence additionalProperties: false maxItems: 50 coverage: type: object properties: target_kind: type: string enum: - place - stop_point structural_coverage: type: string enum: - complete - partial - unknown established_stop_ids: type: array items: type: string minLength: 1 executed_stop_ids: type: array items: type: string minLength: 1 omitted_stop_ids: type: array items: type: string minLength: 1 acquisition_limit: type: integer minimum: 0 execution: type: string enum: - complete - partial - failed unusable_observations: type: integer minimum: 0 warnings: type: array items: type: string required: - target_kind - structural_coverage - established_stop_ids - executed_stop_ids - omitted_stop_ids - acquisition_limit - execution - unusable_observations - warnings additionalProperties: false errors: type: array items: type: object properties: provider: type: string enum: - tripgo - transit - transitland - navitia - gtfs - gbfs status: type: string enum: - ok - timeout - error - unauthorized - rate_limit - unavailable message: type: string required: - provider - status - message additionalProperties: false message: type: string debug: type: object properties: providers: type: object properties: tripgo: type: string enum: - ok - timeout - error - unauthorized - rate_limit - unavailable transit: type: string enum: - ok - timeout - error - unauthorized - rate_limit - unavailable transitland: type: string enum: - ok - timeout - error - unauthorized - rate_limit - unavailable navitia: type: string enum: - ok - timeout - error - unauthorized - rate_limit - unavailable gtfs: type: string enum: - ok - timeout - error - unauthorized - rate_limit - unavailable gbfs: type: string enum: - ok - timeout - error - unauthorized - rate_limit - unavailable required: [] additionalProperties: false raw_count: type: integer minimum: 0 returned_count: type: integer minimum: 0 provider_calls: type: integer minimum: 0 cache: type: string enum: - hit - miss - stale - none required: - providers - raw_count - returned_count - provider_calls - cache additionalProperties: false projection: type: object properties: contract_version: type: string const: 1.4.0 evaluated_at: type: string format: date-time expires_at: anyOf: - type: string format: date-time - type: 'null' on_expiry: type: string const: invalidate_next_and_realtime_until_reprojection entity: type: object properties: id: type: string minLength: 1 name: anyOf: - type: string - type: 'null' entity_kind: type: string enum: - station - stop_area - stop_point - platform location: anyOf: - type: object properties: lat: type: number minimum: -90 maximum: 90 lon: type: number minimum: -180 maximum: 180 required: - lat - lon additionalProperties: false - type: 'null' kind: type: string enum: - Place - StopPoint modes: type: array items: type: string enum: - bus - tram - metro - cable_car - regional_rail - train - ferry - shuttle - rail - other relations: type: object properties: parent: type: object properties: knowledge: type: string enum: - known - unknown - not_applicable - known_absent coverage: type: string enum: - complete - partial - unknown freshness: type: string enum: - fresh - stale - unknown scope: type: object properties: entity_id: type: string minLength: 1 relation: type: string enum: - parent - children namespace: anyOf: - type: string minLength: 1 - type: 'null' feed_id: anyOf: - type: string minLength: 1 - type: 'null' description: type: string minLength: 1 required: - entity_id - relation - namespace - feed_id - description additionalProperties: false target_ids: type: array items: type: string minLength: 1 evidence_ids: type: array items: type: string minLength: 1 observed_at: anyOf: - type: string format: date-time - type: 'null' source_updated_at: anyOf: - type: string format: date-time - type: 'null' valid_until: anyOf: - type: string format: date-time - type: 'null' absence_proof: anyOf: - type: object properties: description: type: string minLength: 1 evidence_ids: type: array items: type: string minLength: 1 minItems: 1 required: - description - evidence_ids additionalProperties: false - type: 'null' required: - knowledge - coverage - freshness - scope - target_ids - evidence_ids - observed_at - source_updated_at - valid_until - absence_proof additionalProperties: false children: type: object properties: knowledge: type: string enum: - known - unknown - not_applicable - known_absent coverage: type: string enum: - complete - partial - unknown freshness: type: string enum: - fresh - stale - unknown scope: type: object properties: entity_id: type: string minLength: 1 relation: type: string enum: - parent - children namespace: anyOf: - type: string minLength: 1 - type: 'null' feed_id: anyOf: - type: string minLength: 1 - type: 'null' description: type: string minLength: 1 required: - entity_id - relation - namespace - feed_id - description additionalProperties: false target_ids: type: array items: type: string minLength: 1 evidence_ids: type: array items: type: string minLength: 1 observed_at: anyOf: - type: string format: date-time - type: 'null' source_updated_at: anyOf: - type: string format: date-time - type: 'null' valid_until: anyOf: - type: string format: date-time - type: 'null' absence_proof: anyOf: - type: object properties: description: type: string minLength: 1 evidence_ids: type: array items: type: string minLength: 1 minItems: 1 required: - description - evidence_ids additionalProperties: false - type: 'null' required: - knowledge - coverage - freshness - scope - target_ids - evidence_ids - observed_at - source_updated_at - valid_until - absence_proof additionalProperties: false required: - parent - children additionalProperties: false detail_href: type: string minLength: 1 required: - id - name - entity_kind - location - kind - modes - relations - detail_href additionalProperties: false boarding_points: type: array items: type: object properties: id: type: string minLength: 1 name: anyOf: - type: string - type: 'null' entity_kind: type: string enum: - station - stop_area - stop_point - platform location: anyOf: - type: object properties: lat: type: number minimum: -90 maximum: 90 lon: type: number minimum: -180 maximum: 180 required: - lat - lon additionalProperties: false - type: 'null' required: - id - name - entity_kind - location additionalProperties: false boarding_points_coverage: type: string enum: - complete - partial - unknown lines: type: array items: type: object properties: id: type: string minLength: 1 name: anyOf: - type: string - type: 'null' short_name: anyOf: - type: string - type: 'null' mode: type: string enum: - bus - tram - metro - cable_car - regional_rail - train - ferry - shuttle - rail - other color: anyOf: - type: string - type: 'null' text_color: anyOf: - type: string - type: 'null' network_id: anyOf: - type: string minLength: 1 - type: 'null' operator_id: anyOf: - type: string minLength: 1 - type: 'null' qualification: type: string enum: - established - unqualified - historical_unqualified - ambiguous - observed_only presence: type: object properties: structurally_known: type: boolean observed_in_departures: type: boolean registry_association: type: boolean required: - structurally_known - observed_in_departures - registry_association additionalProperties: false provenance: type: object properties: observation_ids: type: array items: type: string minLength: 1 reference_keys: type: array items: type: string minLength: 1 detail_href: type: string minLength: 1 required: - observation_ids - reference_keys - detail_href additionalProperties: false choices: type: array items: type: object properties: id: type: string minLength: 1 line_id: type: string minLength: 1 scope: type: string const: station_presentation qualification: type: string enum: - pattern_occurrence - linked_pattern_detail_unknown - unqualified_passages destination: type: object properties: label: anyOf: - type: string - type: 'null' origin: type: string enum: - provider - stop_headsign - structural_terminus - departure - unknown terminus_point_id: anyOf: - type: string minLength: 1 - type: 'null' required: - label - origin - terminus_point_id additionalProperties: false direction_id: anyOf: - type: string - type: 'null' branch: anyOf: - type: string - type: 'null' pattern_references: type: array items: type: object properties: pattern_id: type: string minLength: 1 revision_id: type: string minLength: 1 occurrence_id: anyOf: - type: string minLength: 1 - type: 'null' line_id: type: string minLength: 1 detail_href: type: string minLength: 1 detail_state: type: string enum: - loaded - not_loaded required: - pattern_id - revision_id - occurrence_id - line_id - detail_href - detail_state additionalProperties: false occurrence: anyOf: - type: object properties: id: type: string minLength: 1 position: type: integer minimum: 0 stop_point_id: anyOf: - type: string minLength: 1 - type: 'null' name: anyOf: - type: string - type: 'null' source_sequence: anyOf: - type: integer minimum: 0 - type: 'null' pickup_type: anyOf: - type: integer minimum: 0 maximum: 3 - type: 'null' drop_off_type: anyOf: - type: integer minimum: 0 maximum: 3 - type: 'null' continuous_pickup: anyOf: - type: integer minimum: 0 maximum: 3 - type: 'null' continuous_drop_off: anyOf: - type: integer minimum: 0 maximum: 3 - type: 'null' required: - id - position - stop_point_id - name - source_sequence - pickup_type - drop_off_type - continuous_pickup - continuous_drop_off additionalProperties: false - type: 'null' previous: anyOf: - type: object properties: id: type: string minLength: 1 position: type: integer minimum: 0 stop_point_id: anyOf: - type: string minLength: 1 - type: 'null' name: anyOf: - type: string - type: 'null' source_sequence: anyOf: - type: integer minimum: 0 - type: 'null' pickup_type: anyOf: - type: integer minimum: 0 maximum: 3 - type: 'null' drop_off_type: anyOf: - type: integer minimum: 0 maximum: 3 - type: 'null' continuous_pickup: anyOf: - type: integer minimum: 0 maximum: 3 - type: 'null' continuous_drop_off: anyOf: - type: integer minimum: 0 maximum: 3 - type: 'null' required: - id - position - stop_point_id - name - source_sequence - pickup_type - drop_off_type - continuous_pickup - continuous_drop_off additionalProperties: false - type: 'null' next: anyOf: - type: object properties: id: type: string minLength: 1 position: type: integer minimum: 0 stop_point_id: anyOf: - type: string minLength: 1 - type: 'null' name: anyOf: - type: string - type: 'null' source_sequence: anyOf: - type: integer minimum: 0 - type: 'null' pickup_type: anyOf: - type: integer minimum: 0 maximum: 3 - type: 'null' drop_off_type: anyOf: - type: integer minimum: 0 maximum: 3 - type: 'null' continuous_pickup: anyOf: - type: integer minimum: 0 maximum: 3 - type: 'null' continuous_drop_off: anyOf: - type: integer minimum: 0 maximum: 3 - type: 'null' required: - id - position - stop_point_id - name - source_sequence - pickup_type - drop_off_type - continuous_pickup - continuous_drop_off additionalProperties: false - type: 'null' neighbors_knowledge: type: string enum: - known - partial - unknown validity: anyOf: - type: object properties: requested_date: anyOf: - type: string pattern: ^\d{4}-\d{2}-\d{2}$ - type: 'null' queried_date: anyOf: - type: string pattern: ^\d{4}-\d{2}-\d{2}$ - type: 'null' applicability: type: string enum: - confirmed - unknown - not_applicable undated_fallback: type: boolean calendars: type: array items: type: object properties: service_id: anyOf: - type: string minLength: 1 - type: 'null' start_date: anyOf: - type: string pattern: ^\d{4}-\d{2}-\d{2}$ - type: 'null' end_date: anyOf: - type: string pattern: ^\d{4}-\d{2}-\d{2}$ - type: 'null' monday: anyOf: - type: integer minimum: 0 maximum: 1 - type: 'null' tuesday: anyOf: - type: integer minimum: 0 maximum: 1 - type: 'null' wednesday: anyOf: - type: integer minimum: 0 maximum: 1 - type: 'null' thursday: anyOf: - type: integer minimum: 0 maximum: 1 - type: 'null' friday: anyOf: - type: integer minimum: 0 maximum: 1 - type: 'null' saturday: anyOf: - type: integer minimum: 0 maximum: 1 - type: 'null' sunday: anyOf: - type: integer minimum: 0 maximum: 1 - type: 'null' added_dates: type: array items: type: string pattern: ^\d{4}-\d{2}-\d{2}$ removed_dates: type: array items: type: string pattern: ^\d{4}-\d{2}-\d{2}$ required: - service_id - start_date - end_date - monday - tuesday - wednesday - thursday - friday - saturday - sunday - added_dates - removed_dates additionalProperties: false evidence: type: array items: type: string minLength: 1 warnings: type: array items: type: string required: - requested_date - queried_date - applicability - undated_fallback - calendars - evidence - warnings additionalProperties: false - type: 'null' boarding_point_ids: type: array items: type: string minLength: 1 boarding_points_knowledge: type: string enum: - known - unknown boarding_permission: type: string enum: - allowed - forbidden - conditional - unknown passage_ids: type: array items: type: string minLength: 1 next_passage_id: anyOf: - type: string minLength: 1 - type: 'null' following_passage_id: anyOf: - type: string minLength: 1 - type: 'null' cancelled_passage_ids: type: array items: type: string minLength: 1 uncertain_passage_ids: type: array items: type: string minLength: 1 state: type: string enum: - passages_available - structure_only - no_usable_passages - not_applicable required: - id - line_id - scope - qualification - destination - direction_id - branch - pattern_references - occurrence - previous - next - neighbors_knowledge - validity - boarding_point_ids - boarding_points_knowledge - boarding_permission - passage_ids - next_passage_id - following_passage_id - cancelled_passage_ids - uncertain_passage_ids - state additionalProperties: false next_passage_id: anyOf: - type: string minLength: 1 - type: 'null' following_passage_id: anyOf: - type: string minLength: 1 - type: 'null' required: - id - name - short_name - mode - color - text_color - network_id - operator_id - qualification - presence - provenance - choices - next_passage_id - following_passage_id additionalProperties: false passages: type: array items: type: object properties: id: type: string minLength: 1 line_id: anyOf: - type: string minLength: 1 - type: 'null' mode: type: string enum: - bus - tram - metro - cable_car - regional_rail - train - ferry - shuttle - rail - other headsign: anyOf: - type: string - type: 'null' boarding_point_id: anyOf: - type: string minLength: 1 - type: 'null' boarding_point: anyOf: - type: object properties: id: type: string minLength: 1 name: anyOf: - type: string - type: 'null' entity_kind: type: string enum: - station - stop_area - stop_point - platform location: anyOf: - type: object properties: lat: type: number minimum: -90 maximum: 90 lon: type: number minimum: -180 maximum: 180 required: - lat - lon additionalProperties: false - type: 'null' required: - id - name - entity_kind - location additionalProperties: false - type: 'null' pattern_reference: anyOf: - type: object properties: pattern_id: type: string minLength: 1 revision_id: type: string minLength: 1 occurrence_id: anyOf: - type: string minLength: 1 - type: 'null' line_id: type: string minLength: 1 detail_href: type: string minLength: 1 detail_state: type: string enum: - loaded - not_loaded required: - pattern_id - revision_id - occurrence_id - line_id - detail_href - detail_state additionalProperties: false - type: 'null' service_date: anyOf: - type: string - type: 'null' timezone: anyOf: - type: string - type: 'null' timing: anyOf: - type: object properties: scheduled_at: anyOf: - type: string format: date-time - type: 'null' predicted_at: anyOf: - type: string format: date-time - type: 'null' display_at: type: string format: date-time display_origin: type: string enum: - scheduled - realtime fallback_reason: anyOf: - type: string enum: - stale_prediction - unknown_source_freshness - invalid_prediction - no_prediction - type: 'null' required: - scheduled_at - predicted_at - display_at - display_origin - fallback_reason additionalProperties: false - type: 'null' expired_timing: anyOf: - type: object properties: scheduled_at: anyOf: - type: string format: date-time - type: 'null' predicted_at: anyOf: - type: string format: date-time - type: 'null' display_at: type: string format: date-time display_origin: type: string enum: - scheduled - realtime fallback_reason: anyOf: - type: string enum: - stale_prediction - unknown_source_freshness - invalid_prediction - no_prediction - type: 'null' required: - scheduled_at - predicted_at - display_at - display_origin - fallback_reason additionalProperties: false - type: 'null' realtime: type: boolean cancelled: type: boolean service_status: type: string enum: - cancelled - not_cancelled - unknown - conflicting freshness: type: object properties: state: type: string enum: - fresh - stale - unknown - static received_at: type: string format: date-time source_updated_at: anyOf: - type: string format: date-time - type: 'null' evaluated_at: type: string format: date-time max_age_seconds: anyOf: - type: number minimum: 0 - type: 'null' required: - state - received_at - source_updated_at - evaluated_at - max_age_seconds additionalProperties: false expires_at: anyOf: - type: string format: date-time - type: 'null' selection: type: string enum: - upcoming - cancelled - uncertain_service - past - unavailable provenance: type: object properties: selected_observation_id: type: string minLength: 1 observation_ids: type: array items: type: string minLength: 1 providers: type: array items: type: string minLength: 1 received_at: type: string format: date-time source_updated_at: anyOf: - type: string format: date-time - type: 'null' detail_href: type: string minLength: 1 required: - selected_observation_id - observation_ids - providers - received_at - source_updated_at - detail_href additionalProperties: false required: - id - line_id - mode - headsign - boarding_point_id - boarding_point - pattern_reference - service_date - timezone - timing - expired_timing - realtime - cancelled - service_status - freshness - expires_at - selection - provenance additionalProperties: false unassigned_passage_ids: type: array items: type: string minLength: 1 temporal_coverage: type: object properties: execution: type: string enum: - complete - partial - failed - not_requested state: type: string enum: - passages_available - healthy_no_passages_returned - no_usable_passages - unavailable - not_requested requested_at: anyOf: - type: string format: date-time - type: 'null' window_start: anyOf: - type: string format: date-time - type: 'null' window_end: anyOf: - type: string format: date-time - type: 'null' timezone: anyOf: - type: string - type: 'null' timezones: type: array items: type: string service_dates: type: array items: type: string query_limit: anyOf: - type: integer minimum: 0 - type: 'null' returned_count: type: integer minimum: 0 acquisition_limit: type: integer minimum: 0 warnings: type: array items: type: string required: - execution - state - requested_at - window_start - window_end - timezone - timezones - service_dates - query_limit - returned_count - acquisition_limit - warnings additionalProperties: false structure_coverage: type: object properties: patterns: type: string enum: - partial - unknown loaded_patterns: type: integer minimum: 0 omitted_pattern_ids: type: array items: type: string minLength: 1 scope: type: string const: previously_acquired_patterns_for_visible_lines required: - patterns - loaded_patterns - omitted_pattern_ids - scope additionalProperties: false limits: type: object properties: max_lines: type: integer minimum: 0 max_patterns: type: integer minimum: 0 max_occurrences: type: integer minimum: 0 max_passages: type: integer minimum: 0 max_points: type: integer minimum: 0 max_choices: type: integer minimum: 0 omitted_choice_ids: type: array items: type: string minLength: 1 omitted_line_ids: type: array items: type: string minLength: 1 omitted_passage_ids: type: array items: type: string minLength: 1 omitted_point_ids: type: array items: type: string minLength: 1 occurrences_inspected: type: integer minimum: 0 truncated: type: boolean required: - max_lines - max_patterns - max_occurrences - max_passages - max_points - max_choices - omitted_choice_ids - omitted_line_ids - omitted_passage_ids - omitted_point_ids - occurrences_inspected - truncated additionalProperties: false errors: type: array items: type: object properties: code: type: string minLength: 1 message: type: string required: - code - message additionalProperties: false warnings: type: array items: type: string required: - contract_version - evaluated_at - expires_at - on_expiry - entity - boarding_points - boarding_points_coverage - lines - passages - unassigned_passage_ids - temporal_coverage - structure_coverage - limits - errors - warnings additionalProperties: false required: - status - station_id - total - departures - coverage - errors additionalProperties: false - type: object properties: contract_version: type: string const: transport-1.0.0 status: type: string enum: - success - empty - partial - error station_id: type: string pattern: ^roote_transport_station_[a-f0-9]{20}$ departures: type: array items: type: object properties: id: type: string pattern: ^roote_transport_departure_[a-f0-9]{20}$ station_id: type: string pattern: ^roote_transport_station_[a-f0-9]{20}$ boarding_point_id: anyOf: - type: string pattern: ^roote_transport_station_[a-f0-9]{20}$ - type: 'null' line_id: anyOf: - type: string pattern: ^roote_transport_line_[a-f0-9]{20}$ - type: 'null' mode: type: string enum: - bus - tram - metro - cable_car - regional_rail - train - ferry - shuttle - rail - other headsign: anyOf: - type: string - type: 'null' direction_id: anyOf: - type: string - type: 'null' pattern_id: anyOf: - type: string minLength: 1 - type: 'null' occurrence_id: anyOf: - type: string minLength: 1 - type: 'null' service_date: anyOf: - type: string - type: 'null' timezone: anyOf: - type: string - type: 'null' timing: type: object properties: scheduled_at: anyOf: - type: string format: date-time - type: 'null' predicted_at: anyOf: - type: string format: date-time - type: 'null' display_at: anyOf: - type: string format: date-time - type: 'null' display_origin: anyOf: - type: string enum: - scheduled - realtime - type: 'null' required: - scheduled_at - predicted_at - display_at - display_origin additionalProperties: false service_status: type: string enum: - cancelled - not_cancelled - unknown - conflicting platform: type: object properties: scheduled: anyOf: - type: string - type: 'null' current: anyOf: - type: string - type: 'null' changed: type: boolean required: - scheduled - current - changed additionalProperties: false accessibility: type: object properties: wheelchair: anyOf: - type: boolean - type: 'null' bicycle: anyOf: - type: boolean - type: 'null' required: - wheelchair - bicycle additionalProperties: false alerts: type: array items: type: object properties: cause: anyOf: - type: string - type: 'null' effect: anyOf: - type: string - type: 'null' severity: anyOf: - type: string - type: 'null' title: anyOf: - type: string - type: 'null' description: anyOf: - type: string - type: 'null' active_periods: type: array items: type: object properties: start: anyOf: - type: string format: date-time - type: 'null' end: anyOf: - type: string format: date-time - type: 'null' required: - start - end additionalProperties: false required: - cause - effect - severity - title - description - active_periods additionalProperties: false freshness: type: object properties: state: type: string enum: - fresh - stale - unknown - static received_at: anyOf: - type: string format: date-time - type: 'null' source_updated_at: anyOf: - type: string format: date-time - type: 'null' expires_at: anyOf: - type: string format: date-time - type: 'null' required: - state - received_at - source_updated_at - expires_at additionalProperties: false required: - id - station_id - boarding_point_id - line_id - mode - headsign - direction_id - pattern_id - occurrence_id - service_date - timezone - timing - service_status - platform - accessibility - alerts - freshness additionalProperties: false lines: type: array items: type: object properties: id: type: string pattern: ^roote_transport_line_[a-f0-9]{20}$ name: anyOf: - type: string - type: 'null' short_name: anyOf: - type: string - type: 'null' mode: type: string enum: - bus - tram - metro - cable_car - regional_rail - train - ferry - shuttle - rail - other color: anyOf: - type: string - type: 'null' text_color: anyOf: - type: string - type: 'null' network_id: anyOf: - type: string minLength: 1 - type: 'null' operator_id: anyOf: - type: string pattern: ^roote_transport_operator_[a-f0-9]{20}$ - type: 'null' qualification: type: string enum: - established - uncertain - historical required: - id - name - short_name - mode - color - text_color - network_id - operator_id - qualification additionalProperties: false coverage: type: object properties: execution: type: string enum: - complete - partial - failed structural: type: string enum: - complete - partial - unknown truncated: type: boolean exhaustive: type: boolean const: false required: - execution - structural - truncated - exhaustive additionalProperties: false warnings: type: array items: type: object properties: code: type: string minLength: 1 message: type: string scope: anyOf: - type: string - type: 'null' required: - code - message - scope additionalProperties: false attributions: type: array items: type: object properties: provider: type: string minLength: 1 display_name: type: string url: anyOf: - type: string - type: 'null' required: type: boolean required: - provider - display_name - url - required additionalProperties: false meta: type: object properties: returned_count: type: integer minimum: 0 requested_limit: type: integer minimum: 0 applied_limit: type: integer minimum: 0 limit_scope: type: string enum: - response - line_category required: - returned_count - requested_limit - applied_limit - limit_scope additionalProperties: false required: - contract_version - status - station_id - departures - lines - coverage - warnings - attributions - meta additionalProperties: false '400': description: Invalid request content: application/json: schema: type: object properties: error: type: object properties: code: type: string message: type: string '401': description: Invalid request content: application/json: schema: type: object properties: error: type: object properties: code: type: string message: type: string '402': description: Invalid request content: application/json: schema: type: object properties: error: type: object properties: code: type: string message: type: string '403': description: Invalid request content: application/json: schema: type: object properties: error: type: object properties: code: type: string message: type: string '404': description: Invalid request content: application/json: schema: type: object properties: error: type: object properties: code: type: string message: type: string '429': description: Invalid request content: application/json: schema: type: object properties: error: type: object properties: code: type: string message: type: string '503': description: Invalid request content: application/json: schema: type: object properties: error: type: object properties: code: type: string message: type: string tags: - Transit /v1/transit/journey: get: operationId: getTransportJourney security: - bearerAuth: [] x-roote-required-scope: journey:read summary: Calculate an A-to-B public transport journey description: Requires journey:read. Legacy-compatible A-to-B form of Journey Contract 1.0.0. Provider fallback is sequential by default; compare is explicit. scheduled_at remains distinct from realtime estimated_at. parameters: - name: origin_lat in: query required: true schema: type: number minimum: -90 maximum: 90 description: Origin latitude - name: origin_lon in: query required: true schema: type: number minimum: -180 maximum: 180 description: Origin longitude - name: destination_lat in: query required: true schema: type: number minimum: -90 maximum: 90 description: Destination latitude - name: destination_lon in: query required: true schema: type: number minimum: -180 maximum: 180 description: Destination longitude - name: departure_time in: query required: false schema: oneOf: - type: string format: date-time - type: integer minimum: 1 description: ISO 8601 or Unix seconds; incompatible with arrival_time - name: arrival_time in: query required: false schema: oneOf: - type: string format: date-time - type: integer minimum: 1 description: ISO 8601 or Unix seconds; incompatible with departure_time - name: modes in: query required: false schema: type: string default: walk,bus,tram,metro,cable_car,regional_rail,train,ferry,shuttle description: Comma-separated canonical ROOTE modes - name: max_transfers in: query required: false schema: type: integer minimum: 0 default: 3 description: Requested maximum; server applies at most 4 - name: wheelchair in: query required: false schema: type: boolean default: false description: Require wheelchair-compatible planning where supported - name: limit in: query required: false schema: type: integer minimum: 1 default: 3 description: Requested alternatives; capability limits and a maximum of 10 apply - name: providers in: query required: false schema: type: string description: 'Optional ordered list: transit,tripgo,navitia' - name: provider_strategy in: query required: false schema: type: string enum: - primary - fallback - compare default: fallback description: Normal primary selection, controlled fallback, or explicit comparison - name: language in: query required: false schema: type: string description: Preferred provider response language - name: debug in: query required: false schema: type: boolean default: false description: Include safe provider and cache diagnostics responses: '200': description: Canonical journey options content: application/json: schema: type: object required: - contract_version - status - request_id - effective_query - constraints - total - journeys - warnings - errors - provenance - freshness properties: contract_version: type: string const: 1.0.0 status: type: string enum: - success - empty - partial - error request_id: type: string reason: type: string enum: - NO_JOURNEY_FOUND - PROVIDER_UNAVAILABLE - UNSUPPORTED_CONSTRAINT - PARTIAL_PROVIDER_COVERAGE message: type: string effective_query: type: object constraints: type: object required: - applied - unsupported properties: applied: type: array items: type: string unsupported: type: array items: type: string total: type: integer minimum: 0 journeys: type: array maxItems: 10 items: type: object required: - id - departure_at - arrival_at - duration_seconds - transfers - legs - accessibility - fare - sources - freshness properties: id: type: string pattern: ^roote_journey_ departure_at: type: string format: date-time arrival_at: type: string format: date-time duration_seconds: type: integer transfers: type: integer minimum: 0 legs: type: array items: oneOf: - type: object required: - id - type - mode - from - to - duration_seconds - distance_meters - geometry - sources properties: id: type: string type: type: string const: walk mode: type: string const: walk from: type: object required: - id - name - location properties: id: type: - string - 'null' description: Canonical ROOTE station/stop identity when the point is a provider stop. name: type: - string - 'null' location: type: object required: - lat - lon properties: lat: type: number lon: type: number to: type: object required: - id - name - location properties: id: type: - string - 'null' description: Canonical ROOTE station/stop identity when the point is a provider stop. name: type: - string - 'null' location: type: object required: - lat - lon properties: lat: type: number lon: type: number duration_seconds: type: integer distance_meters: type: - integer - 'null' geometry: type: - object - 'null' description: GeoJSON LineString; coordinates are [longitude, latitude]. Null means the provider supplied no usable geometry. properties: type: type: string const: LineString coordinates: type: array items: type: array prefixItems: - type: number - type: number minItems: 2 maxItems: 2 sources: type: array items: type: object - type: object required: - id - type - mode - line - trip - direction - from - to - departure - arrival - intermediate_stops - operator - platforms - duration_seconds - distance_meters - geometry - accessibility - cancelled - sources properties: id: type: string type: type: string const: public_transport mode: type: string enum: - bus - tram - metro - cable_car - regional_rail - train - ferry - shuttle - other line: type: object properties: id: anyOf: - type: string pattern: ^roote_transport_line_[a-f0-9]{20}$ - type: 'null' name: anyOf: - type: string - type: 'null' short_name: anyOf: - type: string - type: 'null' identity: type: object properties: contract_version: type: string const: 1.1.0 canonical_id: type: string pattern: ^roote_transport_line_[a-f0-9]{20}$ base_id: type: string pattern: ^roote_transport_line_[a-f0-9]{20}$ qualification: type: string enum: - established - unqualified - historical_unqualified - ambiguous aliases: type: array items: type: string pattern: ^roote_transport_line_[a-f0-9]{20}$ references: type: array items: type: object properties: reference_key: type: string minLength: 1 base_id: type: string pattern: ^roote_transport_line_[a-f0-9]{20}$ active: type: boolean observation_id: type: string minLength: 1 observation: type: object properties: reference: type: object properties: provider: type: string enum: - tripgo - transit - transitland - navitia - gtfs - gbfs source_id: type: string minLength: 1 id_scope: type: string enum: - provider_global - feed_local - network_local - namespace_local - unknown namespace: anyOf: - type: string minLength: 1 - type: 'null' feed_id: anyOf: - type: string minLength: 1 - type: 'null' network_id: anyOf: - type: string minLength: 1 - type: 'null' operator_id: anyOf: - type: string minLength: 1 - type: 'null' required: - provider - source_id - id_scope - namespace - feed_id - network_id - operator_id additionalProperties: false feed_version: anyOf: - type: string minLength: 1 - type: 'null' observed_at: anyOf: - type: string format: date-time - type: 'null' received_at: anyOf: - type: string format: date-time - type: 'null' source_updated_at: anyOf: - type: string format: date-time - type: 'null' qualification: type: string enum: - verified - provider - historical attributes: type: object properties: name: anyOf: - type: string - type: 'null' short_name: anyOf: - type: string - type: 'null' mode: type: string enum: - bus - tram - metro - cable_car - regional_rail - train - ferry - shuttle - rail - other color: anyOf: - type: string - type: 'null' text_color: anyOf: - type: string - type: 'null' network_id: anyOf: - type: string minLength: 1 - type: 'null' operator_id: anyOf: - type: string minLength: 1 - type: 'null' source_mode: anyOf: - type: string - type: 'null' subtype: anyOf: - type: string enum: - brt - commuter - suburban - regional - intercity - high_speed - type: 'null' required: - name - short_name - mode - color - text_color - network_id - operator_id - source_mode - subtype additionalProperties: false required: - reference - feed_version - observed_at - received_at - source_updated_at - qualification - attributes additionalProperties: false required: - reference_key - base_id - active - observation_id - observation additionalProperties: false decisions: type: array items: type: object properties: event_id: type: string minLength: 1 sequence: type: integer minimum: 0 decision_id: type: string minLength: 1 left_id: type: string pattern: ^roote_transport_line_[a-f0-9]{20}$ right_id: type: string pattern: ^roote_transport_line_[a-f0-9]{20}$ reconciliation: type: string enum: - confirmed - probable - unknown - contradictory - revoked method: type: string enum: - documented_mapping - shared_authority_identifier - historical_review evidence: type: array items: type: string minLength: 1 authority: anyOf: - type: string minLength: 1 - type: 'null' authority_identifier: anyOf: - type: string minLength: 1 - type: 'null' observed_at: anyOf: - type: string format: date-time - type: 'null' recorded_at: type: string format: date-time required: - event_id - sequence - decision_id - left_id - right_id - reconciliation - method - evidence - authority - authority_identifier - observed_at - recorded_at additionalProperties: false attribute_provenance: type: array items: type: object properties: field: type: string enum: - name - short_name - mode - color - text_color - network_id - operator_id - source_mode - subtype observation_id: type: string minLength: 1 reference_key: type: string minLength: 1 required: - field - observation_id - reference_key additionalProperties: false conflicts: type: array items: type: object properties: field: type: string minLength: 1 values: type: array items: type: string observation_ids: type: array items: type: string minLength: 1 required: - field - values - observation_ids additionalProperties: false required: - contract_version - canonical_id - base_id - qualification - aliases - references - decisions - attribute_provenance - conflicts additionalProperties: false required: - id - name - short_name additionalProperties: false trip: type: object direction: type: - string - 'null' from: type: object required: - id - name - location properties: id: type: - string - 'null' description: Canonical ROOTE station/stop identity when the point is a provider stop. name: type: - string - 'null' location: type: object required: - lat - lon properties: lat: type: number lon: type: number to: type: object required: - id - name - location properties: id: type: - string - 'null' description: Canonical ROOTE station/stop identity when the point is a provider stop. name: type: - string - 'null' location: type: object required: - lat - lon properties: lat: type: number lon: type: number departure: type: object required: - scheduled_at - estimated_at - realtime properties: scheduled_at: type: - string - 'null' format: date-time estimated_at: type: - string - 'null' format: date-time realtime: type: boolean description: True only when estimated_at is backed by provider realtime data. arrival: type: object required: - scheduled_at - estimated_at - realtime properties: scheduled_at: type: - string - 'null' format: date-time estimated_at: type: - string - 'null' format: date-time realtime: type: boolean description: True only when estimated_at is backed by provider realtime data. intermediate_stops: type: array items: type: object required: - id - name - location properties: id: type: - string - 'null' description: Canonical ROOTE station/stop identity when the point is a provider stop. name: type: - string - 'null' location: type: object required: - lat - lon properties: lat: type: number lon: type: number operator: type: object platforms: type: object duration_seconds: type: integer distance_meters: type: - integer - 'null' geometry: type: - object - 'null' description: GeoJSON LineString; coordinates are [longitude, latitude]. Null means the provider supplied no usable geometry. properties: type: type: string const: LineString coordinates: type: array items: type: array prefixItems: - type: number - type: number minItems: 2 maxItems: 2 accessibility: type: object cancelled: type: boolean sources: type: array items: type: object accessibility: type: object fare: type: - object - 'null' description: Null means price unknown, not free. sources: type: array items: type: object description: Provider provenance; provider IDs are never public primary identifiers. freshness: type: object results: type: object deprecated: true description: Compatibility alias for existing GET consumers. properties: journeys: type: array maxItems: 10 items: type: object required: - id - departure_at - arrival_at - duration_seconds - transfers - legs - accessibility - fare - sources - freshness properties: id: type: string pattern: ^roote_journey_ departure_at: type: string format: date-time arrival_at: type: string format: date-time duration_seconds: type: integer transfers: type: integer minimum: 0 legs: type: array items: oneOf: - type: object required: - id - type - mode - from - to - duration_seconds - distance_meters - geometry - sources properties: id: type: string type: type: string const: walk mode: type: string const: walk from: type: object required: - id - name - location properties: id: type: - string - 'null' description: Canonical ROOTE station/stop identity when the point is a provider stop. name: type: - string - 'null' location: type: object required: - lat - lon properties: lat: type: number lon: type: number to: type: object required: - id - name - location properties: id: type: - string - 'null' description: Canonical ROOTE station/stop identity when the point is a provider stop. name: type: - string - 'null' location: type: object required: - lat - lon properties: lat: type: number lon: type: number duration_seconds: type: integer distance_meters: type: - integer - 'null' geometry: type: - object - 'null' description: GeoJSON LineString; coordinates are [longitude, latitude]. Null means the provider supplied no usable geometry. properties: type: type: string const: LineString coordinates: type: array items: type: array prefixItems: - type: number - type: number minItems: 2 maxItems: 2 sources: type: array items: type: object - type: object required: - id - type - mode - line - trip - direction - from - to - departure - arrival - intermediate_stops - operator - platforms - duration_seconds - distance_meters - geometry - accessibility - cancelled - sources properties: id: type: string type: type: string const: public_transport mode: type: string enum: - bus - tram - metro - cable_car - regional_rail - train - ferry - shuttle - other line: type: object properties: id: anyOf: - type: string pattern: ^roote_transport_line_[a-f0-9]{20}$ - type: 'null' name: anyOf: - type: string - type: 'null' short_name: anyOf: - type: string - type: 'null' identity: type: object properties: contract_version: type: string const: 1.1.0 canonical_id: type: string pattern: ^roote_transport_line_[a-f0-9]{20}$ base_id: type: string pattern: ^roote_transport_line_[a-f0-9]{20}$ qualification: type: string enum: - established - unqualified - historical_unqualified - ambiguous aliases: type: array items: type: string pattern: ^roote_transport_line_[a-f0-9]{20}$ references: type: array items: type: object properties: reference_key: type: string minLength: 1 base_id: type: string pattern: ^roote_transport_line_[a-f0-9]{20}$ active: type: boolean observation_id: type: string minLength: 1 observation: type: object properties: reference: type: object properties: provider: type: string enum: - tripgo - transit - transitland - navitia - gtfs - gbfs source_id: type: string minLength: 1 id_scope: type: string enum: - provider_global - feed_local - network_local - namespace_local - unknown namespace: anyOf: - type: string minLength: 1 - type: 'null' feed_id: anyOf: - type: string minLength: 1 - type: 'null' network_id: anyOf: - type: string minLength: 1 - type: 'null' operator_id: anyOf: - type: string minLength: 1 - type: 'null' required: - provider - source_id - id_scope - namespace - feed_id - network_id - operator_id additionalProperties: false feed_version: anyOf: - type: string minLength: 1 - type: 'null' observed_at: anyOf: - type: string format: date-time - type: 'null' received_at: anyOf: - type: string format: date-time - type: 'null' source_updated_at: anyOf: - type: string format: date-time - type: 'null' qualification: type: string enum: - verified - provider - historical attributes: type: object properties: name: anyOf: - type: string - type: 'null' short_name: anyOf: - type: string - type: 'null' mode: type: string enum: - bus - tram - metro - cable_car - regional_rail - train - ferry - shuttle - rail - other color: anyOf: - type: string - type: 'null' text_color: anyOf: - type: string - type: 'null' network_id: anyOf: - type: string minLength: 1 - type: 'null' operator_id: anyOf: - type: string minLength: 1 - type: 'null' source_mode: anyOf: - type: string - type: 'null' subtype: anyOf: - type: string enum: - brt - commuter - suburban - regional - intercity - high_speed - type: 'null' required: - name - short_name - mode - color - text_color - network_id - operator_id - source_mode - subtype additionalProperties: false required: - reference - feed_version - observed_at - received_at - source_updated_at - qualification - attributes additionalProperties: false required: - reference_key - base_id - active - observation_id - observation additionalProperties: false decisions: type: array items: type: object properties: event_id: type: string minLength: 1 sequence: type: integer minimum: 0 decision_id: type: string minLength: 1 left_id: type: string pattern: ^roote_transport_line_[a-f0-9]{20}$ right_id: type: string pattern: ^roote_transport_line_[a-f0-9]{20}$ reconciliation: type: string enum: - confirmed - probable - unknown - contradictory - revoked method: type: string enum: - documented_mapping - shared_authority_identifier - historical_review evidence: type: array items: type: string minLength: 1 authority: anyOf: - type: string minLength: 1 - type: 'null' authority_identifier: anyOf: - type: string minLength: 1 - type: 'null' observed_at: anyOf: - type: string format: date-time - type: 'null' recorded_at: type: string format: date-time required: - event_id - sequence - decision_id - left_id - right_id - reconciliation - method - evidence - authority - authority_identifier - observed_at - recorded_at additionalProperties: false attribute_provenance: type: array items: type: object properties: field: type: string enum: - name - short_name - mode - color - text_color - network_id - operator_id - source_mode - subtype observation_id: type: string minLength: 1 reference_key: type: string minLength: 1 required: - field - observation_id - reference_key additionalProperties: false conflicts: type: array items: type: object properties: field: type: string minLength: 1 values: type: array items: type: string observation_ids: type: array items: type: string minLength: 1 required: - field - values - observation_ids additionalProperties: false required: - contract_version - canonical_id - base_id - qualification - aliases - references - decisions - attribute_provenance - conflicts additionalProperties: false required: - id - name - short_name additionalProperties: false trip: type: object direction: type: - string - 'null' from: type: object required: - id - name - location properties: id: type: - string - 'null' description: Canonical ROOTE station/stop identity when the point is a provider stop. name: type: - string - 'null' location: type: object required: - lat - lon properties: lat: type: number lon: type: number to: type: object required: - id - name - location properties: id: type: - string - 'null' description: Canonical ROOTE station/stop identity when the point is a provider stop. name: type: - string - 'null' location: type: object required: - lat - lon properties: lat: type: number lon: type: number departure: type: object required: - scheduled_at - estimated_at - realtime properties: scheduled_at: type: - string - 'null' format: date-time estimated_at: type: - string - 'null' format: date-time realtime: type: boolean description: True only when estimated_at is backed by provider realtime data. arrival: type: object required: - scheduled_at - estimated_at - realtime properties: scheduled_at: type: - string - 'null' format: date-time estimated_at: type: - string - 'null' format: date-time realtime: type: boolean description: True only when estimated_at is backed by provider realtime data. intermediate_stops: type: array items: type: object required: - id - name - location properties: id: type: - string - 'null' description: Canonical ROOTE station/stop identity when the point is a provider stop. name: type: - string - 'null' location: type: object required: - lat - lon properties: lat: type: number lon: type: number operator: type: object platforms: type: object duration_seconds: type: integer distance_meters: type: - integer - 'null' geometry: type: - object - 'null' description: GeoJSON LineString; coordinates are [longitude, latitude]. Null means the provider supplied no usable geometry. properties: type: type: string const: LineString coordinates: type: array items: type: array prefixItems: - type: number - type: number minItems: 2 maxItems: 2 accessibility: type: object cancelled: type: boolean sources: type: array items: type: object accessibility: type: object fare: type: - object - 'null' description: Null means price unknown, not free. sources: type: array items: type: object description: Provider provenance; provider IDs are never public primary identifiers. freshness: type: object warnings: type: array items: type: object errors: type: array items: type: object provenance: type: object freshness: type: object requested_limit: type: integer requested_max_transfers: type: integer debug: type: object description: Provider/cache diagnostics returned only with debug=true. '400': description: Invalid request content: application/json: schema: type: object properties: error: type: object properties: code: type: string message: type: string '401': description: Invalid request content: application/json: schema: type: object properties: error: type: object properties: code: type: string message: type: string '402': description: Invalid request content: application/json: schema: type: object properties: error: type: object properties: code: type: string message: type: string '403': description: Invalid request content: application/json: schema: type: object properties: error: type: object properties: code: type: string message: type: string '429': description: Invalid request content: application/json: schema: type: object properties: error: type: object properties: code: type: string message: type: string '503': description: Invalid request content: application/json: schema: type: object properties: error: type: object properties: code: type: string message: type: string tags: - Transit post: operationId: createTransportJourney security: - bearerAuth: [] x-roote-required-scope: journey:read summary: Calculate a journey with ordered waypoints description: Requires journey:read. Journey Contract 1.0.0. POST is used because ordered waypoint and constraint objects do not fit a stable query string. Providers without native waypoint support are called segment by segment with propagated times and continuity checks. requestBody: required: true content: application/json: schema: type: object additionalProperties: false required: - origin - destination properties: origin: type: object required: - lat - lon properties: lat: type: number lon: type: number destination: type: object required: - lat - lon properties: lat: type: number lon: type: number waypoints: type: array maxItems: 8 items: type: object required: - lat - lon properties: lat: type: number lon: type: number departure_time: oneOf: - type: string format: date-time - type: integer arrival_time: oneOf: - type: string format: date-time - type: integer modes: type: array items: type: string enum: - walk - bus - tram - metro - cable_car - regional_rail - train - ferry - shuttle constraints: type: object properties: max_transfers: type: integer minimum: 0 default: 3 wheelchair: type: boolean default: false alternatives: type: integer minimum: 1 default: 3 language: type: string providers: type: array items: type: string enum: - transit - tripgo - navitia provider_strategy: type: string enum: - primary - fallback - compare default: fallback debug: type: boolean default: false responses: '200': description: Canonical journey options content: application/json: schema: type: object required: - contract_version - status - request_id - effective_query - constraints - total - journeys - warnings - errors - provenance - freshness properties: contract_version: type: string const: 1.0.0 status: type: string enum: - success - empty - partial - error request_id: type: string reason: type: string enum: - NO_JOURNEY_FOUND - PROVIDER_UNAVAILABLE - UNSUPPORTED_CONSTRAINT - PARTIAL_PROVIDER_COVERAGE message: type: string effective_query: type: object constraints: type: object required: - applied - unsupported properties: applied: type: array items: type: string unsupported: type: array items: type: string total: type: integer minimum: 0 journeys: type: array maxItems: 10 items: type: object required: - id - departure_at - arrival_at - duration_seconds - transfers - legs - accessibility - fare - sources - freshness properties: id: type: string pattern: ^roote_journey_ departure_at: type: string format: date-time arrival_at: type: string format: date-time duration_seconds: type: integer transfers: type: integer minimum: 0 legs: type: array items: oneOf: - type: object required: - id - type - mode - from - to - duration_seconds - distance_meters - geometry - sources properties: id: type: string type: type: string const: walk mode: type: string const: walk from: type: object required: - id - name - location properties: id: type: - string - 'null' description: Canonical ROOTE station/stop identity when the point is a provider stop. name: type: - string - 'null' location: type: object required: - lat - lon properties: lat: type: number lon: type: number to: type: object required: - id - name - location properties: id: type: - string - 'null' description: Canonical ROOTE station/stop identity when the point is a provider stop. name: type: - string - 'null' location: type: object required: - lat - lon properties: lat: type: number lon: type: number duration_seconds: type: integer distance_meters: type: - integer - 'null' geometry: type: - object - 'null' description: GeoJSON LineString; coordinates are [longitude, latitude]. Null means the provider supplied no usable geometry. properties: type: type: string const: LineString coordinates: type: array items: type: array prefixItems: - type: number - type: number minItems: 2 maxItems: 2 sources: type: array items: type: object - type: object required: - id - type - mode - line - trip - direction - from - to - departure - arrival - intermediate_stops - operator - platforms - duration_seconds - distance_meters - geometry - accessibility - cancelled - sources properties: id: type: string type: type: string const: public_transport mode: type: string enum: - bus - tram - metro - cable_car - regional_rail - train - ferry - shuttle - other line: type: object properties: id: anyOf: - type: string pattern: ^roote_transport_line_[a-f0-9]{20}$ - type: 'null' name: anyOf: - type: string - type: 'null' short_name: anyOf: - type: string - type: 'null' identity: type: object properties: contract_version: type: string const: 1.1.0 canonical_id: type: string pattern: ^roote_transport_line_[a-f0-9]{20}$ base_id: type: string pattern: ^roote_transport_line_[a-f0-9]{20}$ qualification: type: string enum: - established - unqualified - historical_unqualified - ambiguous aliases: type: array items: type: string pattern: ^roote_transport_line_[a-f0-9]{20}$ references: type: array items: type: object properties: reference_key: type: string minLength: 1 base_id: type: string pattern: ^roote_transport_line_[a-f0-9]{20}$ active: type: boolean observation_id: type: string minLength: 1 observation: type: object properties: reference: type: object properties: provider: type: string enum: - tripgo - transit - transitland - navitia - gtfs - gbfs source_id: type: string minLength: 1 id_scope: type: string enum: - provider_global - feed_local - network_local - namespace_local - unknown namespace: anyOf: - type: string minLength: 1 - type: 'null' feed_id: anyOf: - type: string minLength: 1 - type: 'null' network_id: anyOf: - type: string minLength: 1 - type: 'null' operator_id: anyOf: - type: string minLength: 1 - type: 'null' required: - provider - source_id - id_scope - namespace - feed_id - network_id - operator_id additionalProperties: false feed_version: anyOf: - type: string minLength: 1 - type: 'null' observed_at: anyOf: - type: string format: date-time - type: 'null' received_at: anyOf: - type: string format: date-time - type: 'null' source_updated_at: anyOf: - type: string format: date-time - type: 'null' qualification: type: string enum: - verified - provider - historical attributes: type: object properties: name: anyOf: - type: string - type: 'null' short_name: anyOf: - type: string - type: 'null' mode: type: string enum: - bus - tram - metro - cable_car - regional_rail - train - ferry - shuttle - rail - other color: anyOf: - type: string - type: 'null' text_color: anyOf: - type: string - type: 'null' network_id: anyOf: - type: string minLength: 1 - type: 'null' operator_id: anyOf: - type: string minLength: 1 - type: 'null' source_mode: anyOf: - type: string - type: 'null' subtype: anyOf: - type: string enum: - brt - commuter - suburban - regional - intercity - high_speed - type: 'null' required: - name - short_name - mode - color - text_color - network_id - operator_id - source_mode - subtype additionalProperties: false required: - reference - feed_version - observed_at - received_at - source_updated_at - qualification - attributes additionalProperties: false required: - reference_key - base_id - active - observation_id - observation additionalProperties: false decisions: type: array items: type: object properties: event_id: type: string minLength: 1 sequence: type: integer minimum: 0 decision_id: type: string minLength: 1 left_id: type: string pattern: ^roote_transport_line_[a-f0-9]{20}$ right_id: type: string pattern: ^roote_transport_line_[a-f0-9]{20}$ reconciliation: type: string enum: - confirmed - probable - unknown - contradictory - revoked method: type: string enum: - documented_mapping - shared_authority_identifier - historical_review evidence: type: array items: type: string minLength: 1 authority: anyOf: - type: string minLength: 1 - type: 'null' authority_identifier: anyOf: - type: string minLength: 1 - type: 'null' observed_at: anyOf: - type: string format: date-time - type: 'null' recorded_at: type: string format: date-time required: - event_id - sequence - decision_id - left_id - right_id - reconciliation - method - evidence - authority - authority_identifier - observed_at - recorded_at additionalProperties: false attribute_provenance: type: array items: type: object properties: field: type: string enum: - name - short_name - mode - color - text_color - network_id - operator_id - source_mode - subtype observation_id: type: string minLength: 1 reference_key: type: string minLength: 1 required: - field - observation_id - reference_key additionalProperties: false conflicts: type: array items: type: object properties: field: type: string minLength: 1 values: type: array items: type: string observation_ids: type: array items: type: string minLength: 1 required: - field - values - observation_ids additionalProperties: false required: - contract_version - canonical_id - base_id - qualification - aliases - references - decisions - attribute_provenance - conflicts additionalProperties: false required: - id - name - short_name additionalProperties: false trip: type: object direction: type: - string - 'null' from: type: object required: - id - name - location properties: id: type: - string - 'null' description: Canonical ROOTE station/stop identity when the point is a provider stop. name: type: - string - 'null' location: type: object required: - lat - lon properties: lat: type: number lon: type: number to: type: object required: - id - name - location properties: id: type: - string - 'null' description: Canonical ROOTE station/stop identity when the point is a provider stop. name: type: - string - 'null' location: type: object required: - lat - lon properties: lat: type: number lon: type: number departure: type: object required: - scheduled_at - estimated_at - realtime properties: scheduled_at: type: - string - 'null' format: date-time estimated_at: type: - string - 'null' format: date-time realtime: type: boolean description: True only when estimated_at is backed by provider realtime data. arrival: type: object required: - scheduled_at - estimated_at - realtime properties: scheduled_at: type: - string - 'null' format: date-time estimated_at: type: - string - 'null' format: date-time realtime: type: boolean description: True only when estimated_at is backed by provider realtime data. intermediate_stops: type: array items: type: object required: - id - name - location properties: id: type: - string - 'null' description: Canonical ROOTE station/stop identity when the point is a provider stop. name: type: - string - 'null' location: type: object required: - lat - lon properties: lat: type: number lon: type: number operator: type: object platforms: type: object duration_seconds: type: integer distance_meters: type: - integer - 'null' geometry: type: - object - 'null' description: GeoJSON LineString; coordinates are [longitude, latitude]. Null means the provider supplied no usable geometry. properties: type: type: string const: LineString coordinates: type: array items: type: array prefixItems: - type: number - type: number minItems: 2 maxItems: 2 accessibility: type: object cancelled: type: boolean sources: type: array items: type: object accessibility: type: object fare: type: - object - 'null' description: Null means price unknown, not free. sources: type: array items: type: object description: Provider provenance; provider IDs are never public primary identifiers. freshness: type: object results: type: object deprecated: true description: Compatibility alias for existing GET consumers. properties: journeys: type: array maxItems: 10 items: type: object required: - id - departure_at - arrival_at - duration_seconds - transfers - legs - accessibility - fare - sources - freshness properties: id: type: string pattern: ^roote_journey_ departure_at: type: string format: date-time arrival_at: type: string format: date-time duration_seconds: type: integer transfers: type: integer minimum: 0 legs: type: array items: oneOf: - type: object required: - id - type - mode - from - to - duration_seconds - distance_meters - geometry - sources properties: id: type: string type: type: string const: walk mode: type: string const: walk from: type: object required: - id - name - location properties: id: type: - string - 'null' description: Canonical ROOTE station/stop identity when the point is a provider stop. name: type: - string - 'null' location: type: object required: - lat - lon properties: lat: type: number lon: type: number to: type: object required: - id - name - location properties: id: type: - string - 'null' description: Canonical ROOTE station/stop identity when the point is a provider stop. name: type: - string - 'null' location: type: object required: - lat - lon properties: lat: type: number lon: type: number duration_seconds: type: integer distance_meters: type: - integer - 'null' geometry: type: - object - 'null' description: GeoJSON LineString; coordinates are [longitude, latitude]. Null means the provider supplied no usable geometry. properties: type: type: string const: LineString coordinates: type: array items: type: array prefixItems: - type: number - type: number minItems: 2 maxItems: 2 sources: type: array items: type: object - type: object required: - id - type - mode - line - trip - direction - from - to - departure - arrival - intermediate_stops - operator - platforms - duration_seconds - distance_meters - geometry - accessibility - cancelled - sources properties: id: type: string type: type: string const: public_transport mode: type: string enum: - bus - tram - metro - cable_car - regional_rail - train - ferry - shuttle - other line: type: object properties: id: anyOf: - type: string pattern: ^roote_transport_line_[a-f0-9]{20}$ - type: 'null' name: anyOf: - type: string - type: 'null' short_name: anyOf: - type: string - type: 'null' identity: type: object properties: contract_version: type: string const: 1.1.0 canonical_id: type: string pattern: ^roote_transport_line_[a-f0-9]{20}$ base_id: type: string pattern: ^roote_transport_line_[a-f0-9]{20}$ qualification: type: string enum: - established - unqualified - historical_unqualified - ambiguous aliases: type: array items: type: string pattern: ^roote_transport_line_[a-f0-9]{20}$ references: type: array items: type: object properties: reference_key: type: string minLength: 1 base_id: type: string pattern: ^roote_transport_line_[a-f0-9]{20}$ active: type: boolean observation_id: type: string minLength: 1 observation: type: object properties: reference: type: object properties: provider: type: string enum: - tripgo - transit - transitland - navitia - gtfs - gbfs source_id: type: string minLength: 1 id_scope: type: string enum: - provider_global - feed_local - network_local - namespace_local - unknown namespace: anyOf: - type: string minLength: 1 - type: 'null' feed_id: anyOf: - type: string minLength: 1 - type: 'null' network_id: anyOf: - type: string minLength: 1 - type: 'null' operator_id: anyOf: - type: string minLength: 1 - type: 'null' required: - provider - source_id - id_scope - namespace - feed_id - network_id - operator_id additionalProperties: false feed_version: anyOf: - type: string minLength: 1 - type: 'null' observed_at: anyOf: - type: string format: date-time - type: 'null' received_at: anyOf: - type: string format: date-time - type: 'null' source_updated_at: anyOf: - type: string format: date-time - type: 'null' qualification: type: string enum: - verified - provider - historical attributes: type: object properties: name: anyOf: - type: string - type: 'null' short_name: anyOf: - type: string - type: 'null' mode: type: string enum: - bus - tram - metro - cable_car - regional_rail - train - ferry - shuttle - rail - other color: anyOf: - type: string - type: 'null' text_color: anyOf: - type: string - type: 'null' network_id: anyOf: - type: string minLength: 1 - type: 'null' operator_id: anyOf: - type: string minLength: 1 - type: 'null' source_mode: anyOf: - type: string - type: 'null' subtype: anyOf: - type: string enum: - brt - commuter - suburban - regional - intercity - high_speed - type: 'null' required: - name - short_name - mode - color - text_color - network_id - operator_id - source_mode - subtype additionalProperties: false required: - reference - feed_version - observed_at - received_at - source_updated_at - qualification - attributes additionalProperties: false required: - reference_key - base_id - active - observation_id - observation additionalProperties: false decisions: type: array items: type: object properties: event_id: type: string minLength: 1 sequence: type: integer minimum: 0 decision_id: type: string minLength: 1 left_id: type: string pattern: ^roote_transport_line_[a-f0-9]{20}$ right_id: type: string pattern: ^roote_transport_line_[a-f0-9]{20}$ reconciliation: type: string enum: - confirmed - probable - unknown - contradictory - revoked method: type: string enum: - documented_mapping - shared_authority_identifier - historical_review evidence: type: array items: type: string minLength: 1 authority: anyOf: - type: string minLength: 1 - type: 'null' authority_identifier: anyOf: - type: string minLength: 1 - type: 'null' observed_at: anyOf: - type: string format: date-time - type: 'null' recorded_at: type: string format: date-time required: - event_id - sequence - decision_id - left_id - right_id - reconciliation - method - evidence - authority - authority_identifier - observed_at - recorded_at additionalProperties: false attribute_provenance: type: array items: type: object properties: field: type: string enum: - name - short_name - mode - color - text_color - network_id - operator_id - source_mode - subtype observation_id: type: string minLength: 1 reference_key: type: string minLength: 1 required: - field - observation_id - reference_key additionalProperties: false conflicts: type: array items: type: object properties: field: type: string minLength: 1 values: type: array items: type: string observation_ids: type: array items: type: string minLength: 1 required: - field - values - observation_ids additionalProperties: false required: - contract_version - canonical_id - base_id - qualification - aliases - references - decisions - attribute_provenance - conflicts additionalProperties: false required: - id - name - short_name additionalProperties: false trip: type: object direction: type: - string - 'null' from: type: object required: - id - name - location properties: id: type: - string - 'null' description: Canonical ROOTE station/stop identity when the point is a provider stop. name: type: - string - 'null' location: type: object required: - lat - lon properties: lat: type: number lon: type: number to: type: object required: - id - name - location properties: id: type: - string - 'null' description: Canonical ROOTE station/stop identity when the point is a provider stop. name: type: - string - 'null' location: type: object required: - lat - lon properties: lat: type: number lon: type: number departure: type: object required: - scheduled_at - estimated_at - realtime properties: scheduled_at: type: - string - 'null' format: date-time estimated_at: type: - string - 'null' format: date-time realtime: type: boolean description: True only when estimated_at is backed by provider realtime data. arrival: type: object required: - scheduled_at - estimated_at - realtime properties: scheduled_at: type: - string - 'null' format: date-time estimated_at: type: - string - 'null' format: date-time realtime: type: boolean description: True only when estimated_at is backed by provider realtime data. intermediate_stops: type: array items: type: object required: - id - name - location properties: id: type: - string - 'null' description: Canonical ROOTE station/stop identity when the point is a provider stop. name: type: - string - 'null' location: type: object required: - lat - lon properties: lat: type: number lon: type: number operator: type: object platforms: type: object duration_seconds: type: integer distance_meters: type: - integer - 'null' geometry: type: - object - 'null' description: GeoJSON LineString; coordinates are [longitude, latitude]. Null means the provider supplied no usable geometry. properties: type: type: string const: LineString coordinates: type: array items: type: array prefixItems: - type: number - type: number minItems: 2 maxItems: 2 accessibility: type: object cancelled: type: boolean sources: type: array items: type: object accessibility: type: object fare: type: - object - 'null' description: Null means price unknown, not free. sources: type: array items: type: object description: Provider provenance; provider IDs are never public primary identifiers. freshness: type: object warnings: type: array items: type: object errors: type: array items: type: object provenance: type: object freshness: type: object requested_limit: type: integer requested_max_transfers: type: integer debug: type: object description: Provider/cache diagnostics returned only with debug=true. '400': description: Invalid request content: application/json: schema: type: object properties: error: type: object properties: code: type: string message: type: string '401': description: Invalid request content: application/json: schema: type: object properties: error: type: object properties: code: type: string message: type: string '402': description: Invalid request content: application/json: schema: type: object properties: error: type: object properties: code: type: string message: type: string '403': description: Invalid request content: application/json: schema: type: object properties: error: type: object properties: code: type: string message: type: string '429': description: Invalid request content: application/json: schema: type: object properties: error: type: object properties: code: type: string message: type: string '503': description: Invalid request content: application/json: schema: type: object properties: error: type: object properties: code: type: string message: type: string tags: - Transit components: securitySchemes: bearerAuth: type: http scheme: bearer bearerFormat: rt_live_...