Open Mobility Foundation Stops API

The Stops API from Open Mobility Foundation — 2 operation(s) for stops.

Operations 4

POST /stops /stops #
PUT /stops /stops #
GET /stops /stops #
GET /stops/{stop_id} /stops/{stop_id} #

Documentation

Specifications

Schemas & Data

📊
JSONSchema
https://raw.githubusercontent.com/api-evangelist/open-mobility-foundation/refs/heads/main/json-schema/open-mobility-foundation-trip-schema.json
📊
JSONSchema
https://raw.githubusercontent.com/api-evangelist/open-mobility-foundation/refs/heads/main/json-schema/open-mobility-foundation-event-schema.json
📊
JSONSchema
https://raw.githubusercontent.com/api-evangelist/open-mobility-foundation/refs/heads/main/json-schema/open-mobility-foundation-stop-schema.json
📊
JSONSchema
https://raw.githubusercontent.com/api-evangelist/open-mobility-foundation/refs/heads/main/json-schema/open-mobility-foundation-telemetry-schema.json
📊
JSONSchema
https://raw.githubusercontent.com/api-evangelist/open-mobility-foundation/refs/heads/main/json-schema/open-mobility-foundation-mutable-stop-schema.json
📊
JSONSchema
https://raw.githubusercontent.com/api-evangelist/open-mobility-foundation/refs/heads/main/json-schema/open-mobility-foundation-vehicle-schema.json
📊
JSONSchema
https://raw.githubusercontent.com/api-evangelist/open-mobility-foundation/refs/heads/main/json-schema/open-mobility-foundation-report-schema.json
📊
JSONSchema
https://raw.githubusercontent.com/api-evangelist/open-mobility-foundation/refs/heads/main/json-schema/open-mobility-foundation-query-schema.json
📊
JSONSchema
https://raw.githubusercontent.com/api-evangelist/open-mobility-foundation/refs/heads/main/json-schema/open-mobility-foundation-measures-schema.json
📊
JSONSchema
https://raw.githubusercontent.com/api-evangelist/open-mobility-foundation/refs/heads/main/json-schema/open-mobility-foundation-data-types-iso-duration-schema.json
📊
JSONSchema
https://raw.githubusercontent.com/api-evangelist/open-mobility-foundation/refs/heads/main/json-schema/open-mobility-foundation-data-types-iso-dayhourminute-schema.json
📊
JSONSchema
https://raw.githubusercontent.com/api-evangelist/open-mobility-foundation/refs/heads/main/json-schema/open-mobility-foundation-column-schema.json
📊
JSONSchema
https://raw.githubusercontent.com/api-evangelist/open-mobility-foundation/refs/heads/main/json-schema/open-mobility-foundation-data-types-uuid-schema.json
📊
JSONSchema
https://raw.githubusercontent.com/api-evangelist/open-mobility-foundation/refs/heads/main/json-schema/open-mobility-foundation-requirements-schema.json
📊
JSONSchema
https://raw.githubusercontent.com/api-evangelist/open-mobility-foundation/refs/heads/main/json-schema/open-mobility-foundation-policy-schema.json
📊
JSONSchema
https://raw.githubusercontent.com/api-evangelist/open-mobility-foundation/refs/heads/main/json-schema/open-mobility-foundation-response-version-schema.json
📊
JSONSchema
https://raw.githubusercontent.com/api-evangelist/open-mobility-foundation/refs/heads/main/json-schema/open-mobility-foundation-response-last-updated-schema.json
📊
JSONSchema
https://raw.githubusercontent.com/api-evangelist/open-mobility-foundation/refs/heads/main/json-schema/open-mobility-foundation-data-types-timestamp-schema.json
📊
JSONSchema
https://raw.githubusercontent.com/api-evangelist/open-mobility-foundation/refs/heads/main/json-schema/open-mobility-foundation-jurisdiction-schema.json
📊
JSONSchema
https://raw.githubusercontent.com/api-evangelist/open-mobility-foundation/refs/heads/main/json-schema/open-mobility-foundation-geography-schema.json

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/open-mobility-foundation:open-mobility-foundation-stops-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

open-mobility-foundation-stops-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: Open Mobility Foundation Stops API
  version: '2.0'
  contact:
    url: https://github.com/openmobilityfoundation/mobility-data-specification
    name: Open Mobility Foundation
    email: info@openmobilityfoundation.org
  license:
    name: Creative Commons Attribution 4.0 International Public License
    url: https://github.com/openmobilityfoundation/mobility-data-specification/blob/main/LICENSE
  description: 'Operations tagged Stops across 2 of this provider''s published API definitions: open-mobility-foundation-mds-agency-openapi.yml, open-mobility-foundation-mds-provider-openapi.yml. Each path carries the servers of the definition it was published in.'
tags:
- name: Stops
paths:
  /stops:
    post:
      operationId: post-stops
      description: Allows an agency to register city-managed Stops, or a provider to register self-managed Stops.
      summary: /stops
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: array
              minItems: 1
              items:
                $ref: '#/components/schemas/stop'
      responses:
        '201':
          description: Stops registered.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/response_bulk'
        '400':
          description: Bad request.
          content:
            application/json:
              schema:
                allOf:
                - $ref: '#/components/schemas/response_bulk'
                - required:
                  - failures
                  properties:
                    failures:
                      minItems: 1
                      items:
                        properties:
                          item:
                            $ref: '#/components/schemas/stop'
                        oneOf:
                        - $ref: '#/components/schemas/response_error_bad_param'
                        - $ref: '#/components/schemas/response_error_missing_param'
        '401':
          description: 'Unauthorized: Invalid, expired, or insufficient scope of token.'
        '406':
          description: MDS version in Accept header is unsupported or invalid.
        '409':
          description: A stop with `stop_id` is already registered.
          content:
            application/json:
              schema:
                allOf:
                - $ref: '#/components/schemas/response_bulk'
                - required:
                  - failures
                  properties:
                    failures:
                      minItems: 1
                      items:
                        allOf:
                        - $ref: '#/components/schemas/response_error_already_registered'
                        - properties:
                            item:
                              $ref: '#/components/schemas/stop'
        '500':
          description: Internal server error.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/response_error'
      tags:
      - Stops
    put:
      operationId: put-stops
      description: Update stop information. Each stop must already be registered.
      summary: /stops
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: array
              minItems: 1
              items:
                $ref: '#/components/schemas/mutable-stop'
      responses:
        '200':
          description: Stop(s) updated.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/response_bulk'
        '400':
          description: Bad request.
          content:
            application/json:
              schema:
                allOf:
                - $ref: '#/components/schemas/response_bulk'
                - required:
                  - failures
                  properties:
                    failures:
                      minItems: 1
                      items:
                        properties:
                          item:
                            $ref: '#/components/schemas/mutable-stop'
                        oneOf:
                        - $ref: '#/components/schemas/response_error_bad_param'
                        - $ref: '#/components/schemas/response_error_missing_param'
        '401':
          description: 'Unauthorized: Invalid, expired, or insufficient scope of token.'
        '404':
          description: This `stop_id` is unregistered
          content:
            application/json:
              schema:
                allOf:
                - $ref: '#/components/schemas/response_bulk'
                - required:
                  - failures
                  properties:
                    failures:
                      minItems: 1
                      items:
                        allOf:
                        - $ref: '#/components/schemas/response_error_unregistered'
                        - properties:
                            item:
                              $ref: '#/components/schemas/mutable-stop'
        '406':
          description: MDS version in Accept header is unsupported or invalid.
        '500':
          description: Internal server error.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/response_error'
      tags:
      - Stops
    get:
      operationId: get-stops
      description: Get a list of all stop records.
      summary: /stops
      responses:
        '200':
          description: Stops found.
          content:
            application/json:
              schema:
                type: object
                allOf:
                - $ref: '#/components/schemas/response_version'
                - type: object
                  description: Stops data payload
                  required:
                  - stops
                  properties:
                    stops:
                      type: array
                      items:
                        $ref: '#/components/schemas/stop'
        '401':
          description: 'Unauthorized: Invalid, expired, or insufficient scope of token.'
        '404':
          description: Stops not found.
        '406':
          description: MDS version in Accept header is unsupported or invalid.
        '500':
          description: Internal server error.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/response_error'
      tags:
      - Stops
  /stops/{stop_id}:
    parameters:
    - name: stop_id
      schema:
        $ref: '#/components/schemas/data-types_uuid'
      in: path
      required: true
      description: The `stop_id` for a Stop.
    get:
      operationId: get-stops-stop_id
      description: Get information about the specified stop.
      summary: /stops/{stop_id}
      responses:
        '200':
          description: Stop found.
          content:
            application/json:
              schema:
                type: object
                allOf:
                - $ref: '#/components/schemas/response_version'
                - type: object
                  description: Stops data payload
                  required:
                  - stops
                  properties:
                    stops:
                      type: array
                      minItems: 1
                      maxItems: 1
                      items:
                        $ref: '#/components/schemas/stop'
        '400':
          description: Bad request.
        '401':
          description: 'Unauthorized: Invalid, expired, or insufficient scope of token.'
        '404':
          description: Stop not found.
        '406':
          description: MDS version in Accept header is unsupported or invalid.
        '500':
          description: Internal server error.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/response_error'
      tags:
      - Stops
components:
  schemas:
    data-types_uuid-array:
      title: data-types/uuid-array
      description: Array of UUID.
      type: array
      x-stoplight:
        id: v932clitbqv31
      uniqueItems: true
      items:
        $ref: '#/components/schemas/data-types_uuid'
    response_bulk:
      title: response/bulk
      type: object
      description: For multi-record POST and PUT calls, e.g. sending Events using the Agency API, the bulk-response structure describes a list of results.
      x-stoplight:
        id: sdj75536ytrso
      required:
      - success
      - total
      properties:
        success:
          $ref: '#/components/schemas/data-types_integer-positive'
          description: Number of successfully written records.
        total:
          $ref: '#/components/schemas/data-types_integer-positive'
          description: Total number of provided records.
        failures:
          type: array
    data-types_string:
      title: data-types/string
      description: A length-limited string type.
      examples:
      - ABC123
      maxLength: 255
      pattern: ^(.*)$
      type: string
      x-stoplight:
        id: 2vqv7166161kh
    data-types_timestamp:
      title: data-types/timestamp
      description: Integer milliseconds since Unix epoch.
      examples:
      - 1514764800000
      - 1681855703000
      minimum: 1514764800000
      multipleOf: 1
      type: number
      x-stoplight:
        id: vliol1hqlxw6y
    response_error_already_registered:
      title: response/error_already_registered
      description: An item with that identifier is already registered.
      type: object
      x-stoplight:
        id: 3hzf84lqgzawp
      required:
      - item
      - error
      - error_description
      properties:
        error:
          const: already_registered
        error_description:
          type: string
          examples:
          - A vehicle with that device_id is already registered.
          - A stop with that stop_id is already registered.
        error_details:
          type: array
          items:
            type: string
    data-types_version:
      title: data-type/version
      description: The version of MDS this data represents.
      type: string
      x-stoplight:
        id: bt49ntcbcuxbh
      pattern: ^2\.(\d|[1-9]\d+)\.(\d|[1-9]\d+)$
      examples:
      - 2.0.0
    data-types_vehicle-type:
      title: data-types/vehicle-type
      description: The allowed types of of vehicles in MDS. Based off of `form_factor` in [GBFS vehicle_types](https://github.com/MobilityData/gbfs/blob/master/gbfs.md#vehicle_typesjson), with some additional to support MDS modes.
      type: string
      x-stoplight:
        id: gbhhyditnvs5w
      enum:
      - bicycle
      - bus
      - cargo_bicycle
      - car
      - delivery_robot
      - moped
      - motorcycle
      - scooter_standing
      - scooter_seated
      - truck
      - other
    response_error:
      title: response/error
      description: An error message for troubleshooting.
      type: object
      x-stoplight:
        id: 90yc58ni8u0ch
      required:
      - error
      - error_description
      - error_details
      properties:
        error:
          type: string
          description: Error message string.
        error_description:
          type: string
          description: Human readable error description (can be localized).
        error_details:
          type: array
          description: Human readable error description (can be localized).
          minItems: 1
          items:
            type: string
    mutable-stop:
      title: models/mutable-stop
      description: The fields of a Stop that can be changed in the Agency API.
      type: object
      x-stoplight:
        id: xs6ehwfn5b629
      required:
      - stop_id
      - last_updated
      properties:
        stop_id:
          $ref: '#/components/schemas/data-types_uuid'
          description: UUID for the stop.
        last_updated:
          $ref: '#/components/schemas/data-types_timestamp'
          description: Date/Time of the the stop was last updated.
        status:
          type: object
          required:
          - is_installed
          - is_renting
          - is_returning
          properties:
            is_installed:
              type: boolean
              description: See GBFS [station_status.json](https://github.com/NABSA/gbfs/blob/master/gbfs.md#station_statusjson)
            is_renting:
              type: boolean
              description: See GBFS [station_status.json](https://github.com/NABSA/gbfs/blob/master/gbfs.md#station_statusjson)
            is_returning:
              type: boolean
              description: See GBFS [station_status.json](https://github.com/NABSA/gbfs/blob/master/gbfs.md#station_statusjson)
          description: The status of the stop.
        num_vehicles_available:
          $ref: '#/components/schemas/data-types_vehicle-type-counts'
          description: How many vehicles are available per [`vehicle_type`](./data-types/vehicle-type.yaml) at this stop?.
        num_vehicles_disabled:
          $ref: '#/components/schemas/data-types_vehicle-type-counts'
          description: How many vehicles are unavailable/reserved per [`vehicle_type`](./data-types/vehicle-type.yaml) at this stop?.
        rental_methods:
          type: array
          uniqueItems: true
          items:
            enum:
            - key
            - creditcard
            - paypass
            - applepay
            - androidpay
            - transitcard
            - accountnumber
            - phone
          description: List of payment methods accepted at stop, see [GBFS Rental Methods](https://github.com/NABSA/gbfs/blob/master/gbfs.md#station_informationjson).
        num_places_available:
          $ref: '#/components/schemas/data-types_vehicle-type-counts'
          description: How many places are free to be populated with vehicles per [`vehicle_type`](./data-types/vehicle-type.yaml) at this stop?
        num_places_disabled:
          $ref: '#/components/schemas/data-types_vehicle-type-counts'
          description: How many places are disabled and unable to accept vehicles per [`vehicle_type`](./data-types/vehicle-type.yaml) at this stop?
        devices:
          $ref: '#/components/schemas/data-types_uuid-array'
          description: List of `device_id` for [vehicles](./vehicle.yaml) currently at this stop.
    response_version:
      title: response/version
      description: Response bodies must be a UTF-8 encoded JSON object and must minimally include the MDS `version`.
      type: object
      x-stoplight:
        id: ivd8jadc3rqf7
      required:
      - version
      properties:
        version:
          $ref: '#/components/schemas/data-types_version'
    response_error_missing_param:
      title: response/error_missing_param
      description: A required parameter is missing.
      type: object
      x-stoplight:
        id: huc7x2g2wfq5a
      required:
      - item
      - error
      - error_description
      - error_details
      properties:
        error:
          const: missing_param
        error_description:
          type: string
          examples:
          - A required parameter is missing.
        error_details:
          type: array
          description: Array of missing parameters.
          minItems: 1
          items:
            type: string
    data-types_integer-positive:
      title: data-types/integer-positive
      description: An integer greater than or equal to 0.
      minimum: 0
      type: integer
      x-stoplight:
        id: nfkphjmpm8yay
    data-types_uuid:
      title: data-types/uuid
      description: A UUID used to uniquely identity an object.
      type: string
      x-stoplight:
        id: np9kodwmy2kqa
      format: uuid
      pattern: ^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$
      examples:
      - 3c9604d6-b5ee-11e8-96f8-529269fb1459
    data-types_gps:
      title: data-types/gps
      properties:
        altitude:
          description: Altitude above mean sea level in meters.
          type: number
        heading:
          description: Degrees - clockwise starting at 0 degrees at true North.
          type: number
        horizontal_accuracy:
          description: Horizontal accuracy in meters.
          type: number
        lat:
          description: Latitude coordinate.
          maximum: 90
          minimum: -90
          type: number
        lng:
          description: Longitude coordinate.
          maximum: 180
          minimum: -180
          type: number
        satellites:
          $ref: '#/components/schemas/data-types_integer-positive'
          description: Number of GPS or GNSS satellites.
        speed:
          description: Estimated speed in meters / sec as reported by the GPS chipset.
          type: number
        vertical_accuracy:
          description: Vertical accuracy in meters.
          type: number
      required:
      - lat
      - lng
      type: object
      x-stoplight:
        id: 8aooo5ag7x7vh
    data-types_vehicle-type-counts:
      title: data-types/vehicle-type-counts
      description: A dictionary of vehicle counts, keyed by [`vehicle_type`](./vehicle-type.yaml).
      type: object
      x-stoplight:
        id: isobk3kg3rr8r
      additionalProperties: false
      propertyNames:
        $ref: '#/components/schemas/data-types_vehicle-type'
      patternProperties:
        ? ''
        : $ref: '#/components/schemas/data-types_integer-positive'
    stop:
      title: models/stop
      description: 'Stops describe vehicle trip start and end locations in a pre-designated physical place. They can vary from docking stations

        with or without charging, corrals with lock-to railings, or suggested parking areas marked with spray paint.

        Stops are used in both [Provider](../reference/provider.yaml) and [Agency](#) telemetry data.'
      type: object
      x-stoplight:
        id: m0f816guajcjj
      allOf:
      - required:
        - name
        - location
        - status
        - capacity
        - num_vehicles_available
        - num_vehicles_disabled
        properties:
          name:
            $ref: '#/components/schemas/data-types_string'
            description: Name of the stop.
          location:
            $ref: '#/components/schemas/data-types_gps'
            description: Simple centerpoint location of the Stop. The use of the optional `geography_id` is recommended to provide more detail.
          capacity:
            $ref: '#/components/schemas/data-types_vehicle-type-counts'
            description: Number of total places per [`vehicle_type`](./data-types/vehicle-type.yaml).
          provider_id:
            $ref: '#/components/schemas/data-types_uuid'
            description: 'UUID for the Provider managing this Stop. Null/undefined if managed by an Agency.

              See MDS [provider list](https://github.com/openmobilityfoundation/mobility-data-specification/blob/main/providers.csv).'
          data_provider_id:
            $ref: '#/components/schemas/data-types_uuid'
            description: 'UUID for the data provider managing the data coming from this stop.

              Null/undefined if managed by an agency or a provider. Null/undefined if managed by an Agency.

              See MDS [provider list](https://github.com/openmobilityfoundation/mobility-data-specification/blob/main/providers.csv).'
          geography_id:
            $ref: '#/components/schemas/data-types_uuid'
            description: Pointer to the [Geography](#) that represents the Stop geospatially via Polygon or MultiPolygon.
          region_id:
            $ref: '#/components/schemas/data-types_string'
            description: ID of the region where station is located. See [GBFS Station Information](https://github.com/NABSA/gbfs/blob/master/gbfs.md#station_informationjson).
          short_name:
            $ref: '#/components/schemas/data-types_string'
            description: Abbreviated stop name.
          address:
            $ref: '#/components/schemas/data-types_string'
            description: Postal address (useful for directions).
          post_code:
            $ref: '#/components/schemas/data-types_string'
            description: Postal code.
            examples:
            - 10036
          cross_street:
            $ref: '#/components/schemas/data-types_string'
            description: Cross street of where station is located.
          parent_stop:
            $ref: '#/components/schemas/data-types_uuid'
            description: Describe a basic hierarchy of stops (e.g. a stop inside a greater stop).
          image_url:
            type: string
            format: uri
            description: Link to an image, photo, or diagram of the stop. Could be used by providers to help riders find or use the stop.
      - $ref: '#/components/schemas/mutable-stop'
    response_error_bad_param:
      title: response/error_bad_param
      description: A validation error occurred.
      type: object
      x-stoplight:
        id: vekidez6dfa4u
      required:
      - item
      - error
      - error_description
      - error_details
      properties:
        error:
          const: bad_param
        error_description:
          type: string
          examples:
          - A validation error occurred
        error_details:
          type: array
          description: Array of parameters with errors.
          minItems: 1
          items:
            type: string
    response_error_unregistered:
      title: response/error_unregistered
      description: An item with that identifier is not registered.
      type: object
      x-stoplight:
        id: cw4q7ycy1a17h
      required:
      - item
      - error
      - error_description
      properties:
        error:
          const: unregistered
        error_description:
          type: string
          examples:
          - This device_id is not registered.
          - This stop_id is unregistered
        error_details:
          type: array
          items:
            type: string
    response_ttl:
      title: response/ttl
      type: object
      x-stoplight:
        id: kejk1tkl7fdd2
      required:
      - ttl
      properties:
        ttl:
          $ref: '#/components/schemas/data-types_integer-positive'
          description: 'Integer representing the number of milliseconds before the data in this feed will be updated again

            (0 if the data should always be refreshed). The data returned by a near-realtime endpoint should be as close to realtime

            as possible, but in no case should it be more than 5 minutes out-of-date.'
          maximum: 300000
    response_last_updated:
      title: response/last_updated
      type: object
      x-stoplight:
        id: z6u8eu7rlkd1j
      required:
      - last_updated
      properties:
        last_updated:
          $ref: '#/components/schemas/data-types_timestamp'
          description: Timestamp indicating the last time the data in this feed was updated.
  securitySchemes:
    bearer:
      type: http
      scheme: bearer
      bearerFormat: JWT
      description: 'All MDS Agency endpoints require authentication.


        JSON Web Token ([JWT](https://jwt.io/introduction/)) is RECOMMENDED as the token format.


        When making requests, the endpoints expect `provider_id` to be part of the claims the JWT. The token issuance,

        expiration and revocation policies are at the discretion of the agency.'
x-refined-from:
- open-mobility-foundation-mds-agency-openapi.yml
- open-mobility-foundation-mds-provider-openapi.yml
x-stoplight:
  id: f3thjnkfyv60k
x-bundled-from: https://github.com/openmobilityfoundation/mds-openapi/blob/v2.0/reference/agency.yaml (commit 0c07bc3d294237dd41c6273f059efb11b8149c66); external $refs into ../models/ inlined under components.schemas, no other changes