models/stop

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.

CompanyMobilityOpen SourceOpen StandardsTransportationCitiesMicromobilityData Specifications
View JSON Schema on GitHub

JSON Schema

open-mobility-foundation-stop-schema.json Raw ↑
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://raw.githubusercontent.com/api-evangelist/open-mobility-foundation/main/json-schema/open-mobility-foundation-stop-schema.json",
  "title": "models/stop",
  "description": "Stops describe vehicle trip start and end locations in a pre-designated physical place. They can vary from docking stations\nwith or without charging, corrals with lock-to railings, or suggested parking areas marked with spray paint.\nStops are used in both [Provider](../reference/provider.yaml) and [Agency](#) telemetry data.",
  "x-generated": "2026-10-09",
  "x-method": "derived",
  "x-generator": "derive-json-schema.py",
  "x-source": "openapi/open-mobility-foundation-mds-agency-openapi.yml#/components/schemas/stop",
  "type": "object",
  "x-stoplight": {
    "id": "m0f816guajcjj"
  },
  "allOf": [
    {
      "required": [
        "name",
        "location",
        "status",
        "capacity",
        "num_vehicles_available",
        "num_vehicles_disabled"
      ],
      "properties": {
        "name": {
          "$ref": "#/$defs/data-types_string",
          "description": "Name of the stop."
        },
        "location": {
          "$ref": "#/$defs/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": "#/$defs/data-types_vehicle-type-counts",
          "description": "Number of total places per [`vehicle_type`](./data-types/vehicle-type.yaml)."
        },
        "provider_id": {
          "$ref": "#/$defs/data-types_uuid",
          "description": "UUID for the Provider managing this Stop. Null/undefined if managed by an Agency.\nSee MDS [provider list](https://github.com/openmobilityfoundation/mobility-data-specification/blob/main/providers.csv)."
        },
        "data_provider_id": {
          "$ref": "#/$defs/data-types_uuid",
          "description": "UUID for the data provider managing the data coming from this stop.\nNull/undefined if managed by an agency or a provider. Null/undefined if managed by an Agency.\nSee MDS [provider list](https://github.com/openmobilityfoundation/mobility-data-specification/blob/main/providers.csv)."
        },
        "geography_id": {
          "$ref": "#/$defs/data-types_uuid",
          "description": "Pointer to the [Geography](#) that represents the Stop geospatially via Polygon or MultiPolygon."
        },
        "region_id": {
          "$ref": "#/$defs/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": "#/$defs/data-types_string",
          "description": "Abbreviated stop name."
        },
        "address": {
          "$ref": "#/$defs/data-types_string",
          "description": "Postal address (useful for directions)."
        },
        "post_code": {
          "$ref": "#/$defs/data-types_string",
          "description": "Postal code."
        },
        "cross_street": {
          "$ref": "#/$defs/data-types_string",
          "description": "Cross street of where station is located."
        },
        "parent_stop": {
          "$ref": "#/$defs/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": "#/$defs/mutable-stop"
    }
  ],
  "$defs": {
    "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": "#/$defs/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_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_string": {
      "title": "data-types/string",
      "description": "A length-limited string type.",
      "maxLength": 255,
      "pattern": "^(.*)$",
      "type": "string",
      "x-stoplight": {
        "id": "2vqv7166161kh"
      }
    },
    "data-types_timestamp": {
      "title": "data-types/timestamp",
      "description": "Integer milliseconds since Unix epoch.",
      "minimum": 1514764800000,
      "multipleOf": 1,
      "type": "number",
      "x-stoplight": {
        "id": "vliol1hqlxw6y"
      }
    },
    "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}$"
    },
    "data-types_uuid-array": {
      "title": "data-types/uuid-array",
      "description": "Array of UUID.",
      "type": "array",
      "x-stoplight": {
        "id": "v932clitbqv31"
      },
      "uniqueItems": true,
      "items": {
        "$ref": "#/$defs/data-types_uuid"
      }
    },
    "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"
      ]
    },
    "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": "#/$defs/data-types_vehicle-type"
      },
      "patternProperties": {
        "": {
          "$ref": "#/$defs/data-types_integer-positive"
        }
      }
    },
    "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": "#/$defs/data-types_uuid",
          "description": "UUID for the stop."
        },
        "last_updated": {
          "$ref": "#/$defs/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": "#/$defs/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": "#/$defs/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": "#/$defs/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": "#/$defs/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": "#/$defs/data-types_uuid-array",
          "description": "List of `device_id` for [vehicles](./vehicle.yaml) currently at this stop."
        }
      }
    }
  }
}

Work with this as data

Every JSON Schema 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 schemas

4 MCP tools reach this
  • find_json_schemasBrowse and filter every JSON Schema in the catalog.
  • 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 JSON Schema
curl "https://apis.io/api/v1/json-schemas/open-mobility-foundation-stop"
All schemas
curl "https://apis.io/api/v1/json-schemas?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.