{ "$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." } } } } }