Cabify Journeys API

This section covers the mobility solution for all companies looking to transport their employees in a simple, safe and comfortable way. We offer different types of vehicles with private drivers and provide everything you need to enjoy your journey, such as a good driver and a top-of-the-range car.

Operations 5

POST /api/v4/journey/{id}/state Cancel Journey #
GET /api/v4/journey/{id}/state Get Journey State #
POST /api/v4/journey Create a journey #
GET /api/v4/journey/{journey_id} Get Journey details #
POST /api/v4/journey/{id}/keep_searching Keep searching drivers for a journey #

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • find_apisBrowse and filter every API in the catalog.
  • get_api_artifactsOne API's artifacts, grouped by type.
  • get_openapiThe primary OpenAPI for this API.
  • find_similar_apisAPIs that look like this one.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/cabify-journeys-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

Get an API key

Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.

A second provider on the same verified email joins the account you already have.

OpenAPI Specification

cabify-journeys-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  contact:
    email: ridehailing.api@cabify.support
  license:
    name: Cabify Api support
    url: https://cabify.com
  title: Cabify Ride-Hailing Journeys API
  version: '4.0'
  description: This section covers the mobility solution for all companies looking to transport their employees in a simple, safe and comfortable way. We offer different types of vehicles with private drivers and provide everything you need to enjoy your journey, such as a good driver and a top-of-the-range car.
servers:
- url: https://cabify.com
  description: Production
- url: https://cabify-sandbox.com
  description: Sandbox
security:
- access_token: []
tags:
- description: This section covers the mobility solution for all companies looking to transport their employees in a simple, safe and comfortable way. We offer different types of vehicles with private drivers and provide everything you need to enjoy your journey, such as a good driver and a top-of-the-range car.
  name: Journeys
paths:
  /api/v4/journey/{id}/state:
    post:
      callbacks: {}
      description: 'Cancels an active journey. Journeys can only be cancelled free of charge before a driver has been assigned. After assignment, cancellation fees may apply if the courtesy period has elapsed (this varies by operating zone).


        Returns `409 Conflict` if the journey has already been completed, terminated, or is in a state that does not allow cancellation.

        '
      operationId: cancelJourney
      parameters:
      - description: Id of the journey
        example: f0397896-19aa-11ed-b6fe-7aaea8067492
        in: path
        name: id
        required: true
        schema:
          type: string
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/JourneyResponse'
          description: Success
        '400':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BadRequest'
          description: Bad request
        '401':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnauthorizedRequest'
          description: Unauthorized
        '409':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Conflict'
          description: Journey cannot be cancelled (already terminated or in a non-cancellable state)
        '500':
          content:
            application/text:
              schema:
                $ref: '#/components/schemas/InternalServerError'
          description: Internal server error
      summary: Cancel Journey
      tags:
      - Journeys
    get:
      callbacks: {}
      description: 'Returns the real-time operational state of an active journey: assigned driver, vehicle, and

        the route waypoints collected so far.


        Use this endpoint for live tracking while a journey is in progress. It provides the data

        needed to show the driver''s position on a map and display vehicle/driver details to the rider.


        **Typical use cases:**

        - Show the assigned driver''s name, phone number, and avatar.

        - Display the vehicle plate, model, and color so the rider can identify it.

        - Plot the driver''s route on a map using the waypoints array.


        **Availability:**

        - Returns data once a driver is assigned (`hired` state onward).

        - Returns empty waypoints for journeys in `terminated` state (route data is archived).

        - Returns `404` if the journey does not exist or does not belong to the authenticated client.


        > ⚠️ Stop polling once you receive an end state

        >

        > End states are terminal, the journey will never transition to another state. Once you receive an

        > end state (via this endpoint or a webhook), stop polling. Continued polling returns `200` with

        > `state: terminated` indefinitely but carries no new information.

        >

        > For reliable state delivery without polling, configure

        > [Journey State Updates webhooks](https://developers.cabify.com/docs/journey-updates-webhook).


        > 📘 Looking for booking details or pricing?

        >

        > To retrieve stops, cost breakdown, or lifecycle status, use the

        > [Get Journey Details](#operation/getJourney) endpoint instead.

        >

        > To receive state changes in real time without polling, configure

        > [Webhooks](https://developers.cabify.com/docs/journey-updates-webhook).

        '
      operationId: getJourneyState
      parameters:
      - description: UUID of the journey
        example: f0397896-19aa-11ed-b6fe-7aaea8067492
        in: path
        name: id
        required: true
        schema:
          type: string
      - description: ID of the user who requested the journey
        example: 6f80363aa84fa61a58dc5720
        in: query
        name: requester_id
        required: true
        schema:
          type: string
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/JourneyState'
          description: Success
        '400':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BadRequest'
          description: Bad request
        '401':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnauthorizedRequest'
          description: Unauthorized
        '404':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFound'
          description: Not found
        '500':
          content:
            application/text:
              schema:
                $ref: '#/components/schemas/InternalServerError'
          description: Internal server error
      summary: Get Journey State
      tags:
      - Journeys
  /api/v4/journey:
    post:
      callbacks: {}
      description: 'Creates a new journey request for a ride.


        > ❗️ Prerequisites

        >

        > Before creating a journey, you **must** call the `/estimates` endpoint and use the returned

        > `product.id` as `product_id` in this request. This guarantees that the product is available

        > at the pickup location and provides accurate pricing shown to drivers.

        >

        > The estimate should be created within **5 minutes** of the journey request.


        ## Journey States


        After creation, the journey progresses through these states:

        1. `hire` - Searching for available drivers

        2. `hired` - Driver assigned and en route

        3. `arrived` - Driver at pickup location

        4. `pick up` - Passenger in vehicle

        5. `drop off` - Journey completed

        6. `terminated` - Receipt generated (after ~2 hours)

        For a detailed explanation of journey states and their transitions, see [Journey States](https://developers.cabify.com/docs/journey-states).


        > 📘 Booking a Journey (Reservation)

        >

        > Creating a reservation is similar to creating an ASAP journey, except for the `start_at` field,

        > which should contain a future date-time value in the format "YYYY-MM-DD HH:MM:SS", expressed

        > in the local time of the pickup location.

        >

        > **Use the same `start_at` value you provided to the `/estimates` endpoint** to ensure consistent

        > product availability and pricing between the estimate and the journey creation.

        >

        > **Important constraints:**

        > - Reservations must be created at least **30 minutes** before the start time

        > - Reservations can be scheduled up to **60 days** in advance


        > ⚠️ Sandbox Testing

        >

        > In the sandbox environment, pickup locations must be within central Madrid (approximately 40.4361°, -3.7014°).

        > See [Sandbox Environment](https://developers.cabify.com/docs/sandbox-environment) for details.

        '
      operationId: createJourney
      parameters: []
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/JourneyRequest'
        description: Journey request
        required: false
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/JourneyResponse'
          description: Success
        '400':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BadRequest'
          description: Bad request
        '401':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnauthorizedRequest'
          description: Unauthorized
        '404':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFound'
          description: Not found
        '500':
          content:
            application/text:
              schema:
                $ref: '#/components/schemas/InternalServerError'
          description: Internal server error
      summary: Create a journey
      tags:
      - Journeys
  /api/v4/journey/{journey_id}:
    get:
      callbacks: {}
      description: 'Returns the booking-level details of a journey: stops, pricing, timestamps, and lifecycle status.


        Use this endpoint to check whether a journey is finished, retrieve its cost breakdown, or read

        the stops that were requested. The response is stable once the journey is created and only

        changes when the journey ends (populating `end_state`, `end_at`, and `totals`).


        **Typical use cases:**

        - Display a journey''s origin/destination and scheduled time.

        - Check if a journey has finished and why (`end_state`).

        - Retrieve the price summary after a journey is terminated.


        > 📘 Looking for real-time tracking data?

        >

        > To get the driver''s current location, vehicle details, or route waypoints while a journey is

        > in progress, use the [Get Journey State](#operation/getJourneyState) endpoint instead.

        '
      operationId: getJourney
      parameters:
      - description: UUID of the journey
        example: f0397896-19aa-11ed-b6fe-7aaea8067492
        in: path
        name: journey_id
        required: true
        schema:
          type: string
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Journey'
          description: Success
        '400':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BadRequest'
          description: Bad request
        '401':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnauthorizedRequest'
          description: Unauthorized
        '500':
          content:
            application/text:
              schema:
                $ref: '#/components/schemas/InternalServerError'
          description: Internal server error
      summary: Get Journey details
      tags:
      - Journeys
  /api/v4/journey/{id}/keep_searching:
    post:
      callbacks: {}
      description: "If there are no drivers available after having created a journey (meaning you receive a\n 'not found' state via webhooks or via the GET journey/state endpoints), with this\n endpoint, you can continue searching for drivers for the same exact journey without the\n  need of a new estimation.\n\nThe journey will enter again in the 'hire' state for another 5 minutes (this time cannot be changed).\n\n"
      operationId: keepSearching
      parameters:
      - description: Id of the journey
        in: path
        name: id
        required: true
        schema:
          format: uuid
          type: string
      responses:
        '204':
          description: Empty Response
        '400':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BadRequest'
          description: Bad request
        '401':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnauthorizedRequest'
          description: Unauthorized
        '404':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFound'
          description: Not found
        '500':
          content:
            application/text:
              schema:
                $ref: '#/components/schemas/InternalServerError'
          description: Internal server error
      summary: Keep searching drivers for a journey
      tags:
      - Journeys
components:
  schemas:
    UnauthorizedRequest:
      description: The token used is invalid either because it is expired or because it is incorrect.
      example:
        error: Unauthorized
      properties:
        error:
          type: string
      title: UnauthorizedRequest
      type: object
    JourneyRequest:
      additionalProperties: false
      description: 'Input object needed to create a new journey.


        > ⚠️ Always estimate before creating a journey

        >

        > You **must** call `/estimates` before creating a journey. The estimation response provides:

        > - `product.id` — the product to book

        > - Pricing and availability information valid at the time of the estimate

        >

        > Pass `product.id` as `product_id` in this request. For **reserved** journeys, also pass the same

        > `start_at` you used in the estimation request to guarantee consistent pricing and availability.

        >

        > We recommend estimating no more than **5 minutes** before creating the journey.

        '
      example:
        label_slug: null
        message: Test message for driver
        product_id: 75dd566797369d1f0927102e5356ce59
        reason: Test reason for driver
        requester_id: 081a70a52cfc11ecbb03a25a490feee4
        rider:
          email: riderEmail@example.com
          locale: ES
          mobile:
            mobile_cc: '34'
            mobile_num: '123456789'
          name: Jhon Doe
        start_at: '2022-07-01 10:00:00'
        stops:
        - addr: Madrid Barajas T1
          city: Madrid
          contact:
            mobile_cc: '34'
            mobile_num: '123456789'
            name: Jhon Doe
            stop_action: pickup
          country: ES
          loc:
          - 40.4722
          - -3.5608
          location_id: location-4
          meeting_point:
            id: mp-loc4-1
            loc:
            - 40.4722
            - -3.5608
            name: Terminal 1
          name: Work
          num: '1428'
        - addr: Calle de la cruz
          city: Madrid
          country: ES
          loc:
          - 40.4169335
          - -3.7061872
      properties:
        label_slug:
          description: If your company has the labels feature enabled (used to categorize expenses, receipts) than a valid label can be provided and it will be associated to a journey for later financial reporting purposes. Custom string which does not allow an empty string value '' Note that it can have a null value.
          type:
          - string
          - 'null'
        message:
          description: A message that be associated to a journey that driver can see after they accept the ride. It's usually used to give any extra information that might help the driver in the pickup or to give any information that might help improving the journey experience.
          type:
          - string
          - 'null'
        preferred_driver_id:
          description: Id of the preferred driver for this journey (UUID without hyphens). Only available for clients that have their own driver fleet.
          type:
          - string
          - 'null'
        product_id:
          description: The product/vehicle category to book. **Must** come from a recent `/estimates` response (`product.id`). Products are dynamic and vary by location and time — never hardcode IDs. Always estimate first to discover available products.
          type: string
        reason:
          description: Free text explaining the motive of the journey. It is available later in all expenditure reports together with the label (if used). Note that this has to be a valid string if the company decides to have this field as mandatory.
          type:
          - string
          - 'null'
        requester_id:
          description: It represents the person who creates the ride and is also the passenger of the ride. Nevertheless if the rider object is provided then the passenger (rider) is a different person (check rider attribute for more info). The value of requesterIdshould correspond to a user.id of an registered user in the account.
          pattern: ^[a-f0-9]{32}$
          type: string
        rider:
          $ref: '#/components/schemas/Rider'
        start_at:
          description: "Defines when the journey should start. Format: `YYYY-MM-DD HH:MM:SS` (local time of the pickup location).\n\n- **ASAP rides**: Leave as `null` (or omit the field).\n- **Reservations**: Set to a future time. **Use the same `start_at` value you provided in the `/estimates` request** to ensure consistent product availability and pricing.\n  - Minimum: 30 minutes from now\n  - Maximum: 60 days in advance\n"
          pattern: '[0-9]{4}-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1]) (2[0-3]|[01][0-9]):[0-5][0-9]:[0-5][0-9]'
          type:
          - string
          - 'null'
        stops:
          items:
            $ref: '#/components/schemas/StopRequest'
          maxItems: 15
          minItems: 2
          type: array
      required:
      - product_id
      - requester_id
      - rider
      - stops
      title: JourneyRequest
      type: object
    Totals:
      description: Price breakdown for the journey. Only populated after the journey reaches `terminated` state.
      example:
        discount:
          amount: 0
          currency: EUR
        price:
          amount: 100
          currency: EUR
        price_total:
          amount: 100
          currency: EUR
      properties:
        discount:
          $ref: '#/components/schemas/Price'
        price:
          $ref: '#/components/schemas/Price'
        price_total:
          $ref: '#/components/schemas/Price'
      title: Totals
      type:
      - object
      - 'null'
    StopResponse:
      description: 'Stop of a journey. A journey needs to have at least 2 stops: the first one is considered the pickup point the last one the destination.'
      example:
        addr: Calle de la cruz
        city: Madrid
        contact:
          mobile_cc: '34'
          mobile_num: '123456789'
          name: Jhon Doe
          stop_action: pickup
        country: ES
        id: '123'
        loc:
        - 40.4169335
        - -3.7061872
        name: Work
        num: '1428'
        postal_code: '28002'
      properties:
        addr:
          description: If an address was provided when creating the journey this field will have its value.
          type: string
        city:
          description: City name where the address is located, e.g. Madrid.
          type: string
        contact:
          $ref: '#/components/schemas/Contact'
        contacts:
          default: []
          description: List of contacts for the stop, in case of multiple contacts.
          items:
            $ref: '#/components/schemas/Contact'
          type: array
        country:
          description: Country name where the address is located, e.g. España.
          type: string
        hit_at:
          description: DateTime when the driver arrived at the indicated point.
          format: date-time
          type: string
        id:
          description: Id of the stop.
          type: string
        instr:
          description: Set of instructions for the Driver.
          type: string
        loc:
          default: []
          description: The actual coordinates of the address. Required floats per location latitude and longitude.
          items:
            format: float
            type: number
          type: array
        meeting_point:
          $ref: '#/components/schemas/MeetingPoint'
        name:
          description: A short name for previously stored addresses. These can be viewed in places.
          type: string
        num:
          description: Street number.
          type: string
        postal_code:
          description: Postal code of the address.
          type: string
      required:
      - loc
      title: StopResponse
      type: object
    Mobile:
      description: Input Mobile Number. Required when the rider is external. Journey's SMS state updates will arrive to this mobile.
      example:
        mobile_cc: '34'
        mobile_num: '123456789'
      properties:
        mobile_cc:
          description: Mobile Country Code. Required if mobileNum is provided.
          pattern: ^\+?\d+$
          type: string
        mobile_num:
          description: Rider's phone number.
          pattern: ^[0-9]+$
          type: string
      required:
      - mobile_cc
      - mobile_num
      title: Mobile
      type: object
    Journey:
      description: Booking-level details of a journey including stops, pricing, timestamps, and lifecycle status.
      example:
        created_at: '2022-08-04T19:28:18.375Z'
        current_state: terminated
        end_at: '2022-02-17T09:30:34.831Z'
        end_state: drop off
        finished: true
        id: 96fc6f24-142b-11ed-bba7-56a6f40ef0bf
        label_slug: apiV4
        product_id: 75dd566797369d1f0927102e5356ce59
        public_url: /j/5ceg7v77qm8x28c9
        region_id: madrid
        start_at: '2022-02-17T09:30:34.831Z'
        start_type: asap
        stops:
        - addr: Calle de la cruz
          city: Madrid
          contact:
            mobile_cc: '34'
            mobile_num: '123456789'
            name: Jhon Doe
            stop_action: pickup
          country: ES
          id: '123'
          loc:
          - 40.4169335
          - -3.7061872
          name: Work
          num: '1428'
        totals:
          discount:
            amount: 0
            currency: EUR
          price:
            amount: 100
            currency: EUR
          price_total:
            amount: 100
            currency: EUR
        user_id: 0dfc7c0bbbd300e6f9212827106e8911
      properties:
        created_at:
          description: ISO 8601 datetime when the journey was created.
          format: date-time
          type: string
        current_state:
          description: Current lifecycle state of the journey (e.g. hire, hired, arrived, pick up, terminated).
          type: string
        end_at:
          description: ISO 8601 datetime when the journey ended. Null while still active.
          type:
          - string
          - 'null'
        end_state:
          default: not found
          description: The reason the journey ended. Null while the journey is still active.
          enum:
          - drop off
          - driver cancel
          - not found
          - no show
          - rider cancel
          type:
          - string
          - 'null'
        finished:
          description: Whether the journey has reached an end state (drop off, cancel, no show, or not found).
          type: boolean
        id:
          description: UUID of the journey.
          type: string
        label_slug:
          description: Slug of the label (cost center, project code) associated with this journey for expense reporting.
          type: string
        product_id:
          description: ID of the vehicle category/product used for this journey, as returned by the estimates endpoint.
          type: string
        public_url:
          description: Shareable URL that allows anyone to track the journey in real time without authentication.
          type:
          - string
          - 'null'
        region_id:
          description: Identifier of the city/region where the journey takes place.
          type: string
        start_at:
          description: ISO 8601 datetime when the journey started (driver began moving toward pickup). Null for journeys still in `hire` state.
          type:
          - string
          - 'null'
        start_type:
          description: Whether the journey was requested immediately or scheduled for a future time.
          enum:
          - asap
          - reserved
          type: string
        stops:
          items:
            $ref: '#/components/schemas/StopResponse'
          type: array
        totals:
          $ref: '#/components/schemas/Totals'
        user_id:
          description: ID of the user who requested the journey.
          type: string
      required:
      - id
      title: Journey
      type: object
    JourneyResponse:
      example:
        id: 0397896-19aa-11ed-b6fe-7aaea8067492
      properties:
        id:
          description: journey_id of the current operation.
          type: string
      title: JourneyResponse
      type: object
    JourneyState:
      description: 'Real-time operational state of an active journey: the assigned driver, their vehicle, and the route waypoints recorded so far.'
      example:
        driver:
          avatar_url: https://secure.gravatar.com/avatar/675ee8c314586d36a7b33c6c773565e9?r=pg&s=80&=blank
          id: e8417e8cd14c11ec869eb2e3f32e3b38
          name: John
          phone_number: '34611111111'
        driver_stop_before_pickup:
          loc:
          - 40.4201
          - -3.7056
        is_driver_on_another_journey: true
        journey_id: f0397896-19aa-11ed-b6fe-7aaea8067492
        preassigned_driver:
          avatar_url: https://secure.gravatar.com/avatar/1a79a4d60de6718e8e5b326e338ae533?r=pg&s=80&=blank
          id: a1b2c3d4e5f611ec869eb2e3f32e3b38
          name: Diana
        vehicle:
          color: red
          name: Seat ibiza
          plate: QXJ4758
        waypoints:
          rows:
          - loc:
            - 40.4169335
            - -3.7061872
            state_name: hired
          total: 48
      properties:
        driver:
          $ref: '#/components/schemas/Driver'
        driver_stop_before_pickup:
          $ref: '#/components/schemas/DriverStopBeforePickup'
        is_driver_on_another_journey:
          description: Whether the assigned driver is currently completing another trip before heading to the pickup.
          type: boolean
        journey_id:
          description: UUID of the journey.
          type: string
        preassigned_driver:
          $ref: '#/components/schemas/PreassignedDriver'
        vehicle:
          $ref: '#/components/schemas/Vehicle'
        waypoints:
          $ref: '#/components/schemas/Waypoint'
      title: JourneyState
      type: object
    Vehicle:
      description: Journey's vehicle information.
      example:
        color: red
        name: Seat ibiza
        plate: QXJ4758
      properties:
        color:
          description: Vehicle color.
          type: string
        name:
          description: Vehicle model.
          type: string
        plate:
          description: Vehicle plate number.
          type: string
      title: Vehicle
      type: object
    Row:
      description: Point and state through which the driver passed during the journey.
      example:
        loc:
        - 40.4169335
        - -3.7061872
        state_name: hired
      properties:
        loc:
          default: []
          description: The actual coordinates of the address. Required floats per location latitude and longitude.
          items:
            format: float
            type: number
          type: array
        state_name:
          description: Status of the journey at the time the driver passed through that point.
          type: string
      title: Row
      type: object
    NotFound:
      description: The server did not find a current representation for the target resource
      example:
        error: user with provided ID does not exist
      properties:
        message:
          type: string
      title: NotFound
      type: object
    Rider:
      description: Input data defining the rider of a journey.
      example:
        email: riderEmail@example.com
        locale: ES
        mobile:
          mobile_cc: '34'
          mobile_num: '123456789'
        name: John Doe
      properties:
        email:
          description: Rider's email.
          format: email
          type:
          - string
          - 'null'
        id:
          description: Id of the Rider that will travel, if the Rider is a User of your company this will be the User's id (can be same as requester_id to request a journey for yourself). Leave empty when the Rider is external to your company.
          pattern: ^[a-f0-9]{32}$
          type: string
        locale:
          description: Rider's Locale. Syntax consists of language two-letter tag which then will be suffixed with Client's country.
          type:
          - string
          - 'null'
        mobile:
          $ref: '#/components/schemas/Mobile'
        name:
          description: Rider's name. Required when the rider is external.
          type: string
      title: Rider
      type: object
    StopRequest:
      description: 'Stop of a journey. A journey needs to have at least 2 stops: the first one is considered the pickup point the last one the destination.'
      example:
        addr: Calle de la cruz
        city: Madrid
        contact:
          mobile_cc: '34'
          mobile_num: '123456789'
          name: Jhon Doe
          stop_action: pickup
        country: ES
        loc:
        - 40.4169335
        - -3.7061872
        location_id: location-4
        meeting_point:
          id: mp-loc4-1
          loc:
          - 40.4169335
          - -3.7061872
          name: Terminal 1
        name: Work
        num: '1428'
        postal_code: '28002'
      properties:
        addr:
          description: If an address was provided when creating the journey this field will have its value.
          type: string
        city:
          description: City name where the address is located, e.g. Madrid.
          type: string
        contact:
          $ref: '#/components/schemas/Contact'
        contacts:
          description: List of contacts for the stop. Only one of `contact` or `contacts` should be provided.
          items:
            $ref: '#/components/schemas/Contact'
          type: array
        country:
          description: Country name where the address is located, e.g. Spain.
          type: string
        instr:
          description: Set of instructions for the Driver.
          type: string
        loc:
          default: []
          description: The actual coordinates of the address. Required floats per location latitude and longitude.
          items:
            format: float
            type: number
          maxItems: 2
          minItems: 2
          type: array
        location_id:
          description: Internal location identifier for hub stops. Required when a meeting_point is provided. Obtained from the hub data returned by GET /hub or POST /estimates.
          type: string
        meeting_point:
          $ref: '#/components/schemas/MeetingPoint'
        name:
          description: A short name for previously stored addresses. These can be viewed in places.
          type: string
        num:
          description: Street number.
          type: string
        postal_code:
          description: Postal code of the address.
          type: string
      required:
      - loc
      title: StopRequest
      type: object
    Price:
      description: Price in the currency smallest unit.
      example:
        amount: 100
        currency: EUR
      properties:
        amount:
          description: Amount in cents. *For CLP this field is in currency units
          type: integer
        currency:
          description: Currency code in ISO_4217 format
          type: string
      title: Price
      type: object
    InternalServerError:
      description: indicates that an internal server error occurred
      example:
        error: Something went wrong
      properties:
        error:
          type: string


# --- truncated at 32 KB (37 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/cabify/refs/heads/main/openapi/cabify-journeys-api-openapi.yml