Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
32 commits
Select commit Hold shift + click to select a range
bf38920
First pass at Delivery mode updates
schnuerle Oct 22, 2025
1de9548
Updated delivery mode description
schnuerle Oct 23, 2025
06e1bd9
Update home page modes descriptions
schnuerle Oct 23, 2025
0fb78f9
Optional fields for city delivery needs
schnuerle Oct 23, 2025
6832e32
Added statistical_areas option in Events
schnuerle Oct 23, 2025
17765d2
Fixed typos
schnuerle Oct 23, 2025
25a3608
Delivery icon draft
schnuerle Oct 23, 2025
fbb4ef4
Delivery icon draft
schnuerle Oct 23, 2025
89639c1
Delivery icon update
schnuerle Oct 23, 2025
c2c9f9b
Delivery icon draft
schnuerle Oct 23, 2025
59920bd
Clarified all modes and Delivery
schnuerle Nov 15, 2025
dd76c15
Update Delivery icon
schnuerle Nov 15, 2025
0caf26c
Update Modes page with mode details
schnuerle Nov 16, 2025
b109946
Reduce mode icon detail on home page
schnuerle Nov 16, 2025
16d4e44
Update car-share to fleet
schnuerle Nov 16, 2025
acce9fa
Updates to Passenger mode
schnuerle Nov 16, 2025
ccfeb5b
Update micromobility description
schnuerle Nov 16, 2025
41e852f
Passenger summary description update
schnuerle Nov 16, 2025
03118c1
Update delivery icon size
schnuerle Nov 16, 2025
7f401df
Added MDS Overview diagram
schnuerle Nov 17, 2025
11d0393
Added route_id and clarified connections with shifts, journeys
schnuerle Nov 19, 2025
5488df3
Added `order` and `fare_order` arrays for individual order info
schnuerle Nov 19, 2025
5bd3e59
Clarified that `statistical_areas` is an array
schnuerle Nov 19, 2025
2be8286
Added the `enforcement` object for Incidents
schnuerle Nov 19, 2025
fa0c520
Added Enforcement and Violations to TOC
schnuerle Nov 19, 2025
80cfd3d
Fixed Incidents links
schnuerle Nov 19, 2025
9339b25
Added gantt chart journey/order examples
schnuerle Nov 19, 2025
5ceea18
Shift to example 3 chart
schnuerle Nov 19, 2025
f017879
Added `delivery_time` field
schnuerle Nov 19, 2025
ca8bad9
Added `unload_time` field
schnuerle Nov 19, 2025
0beffc9
More trip variety in examples
schnuerle Nov 20, 2025
e10f6a7
OMF styling on charts
schnuerle Nov 25, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
33 changes: 21 additions & 12 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
- [Modularity](#modularity)
- [GBFS Requirement](#gbfs-requirement)
- [Modes](#modes)
- [Future Modes](#future-modes)
- [Versions](#versions)
- [Technical Information](#technical-information)
- [Data Validation](#data-validation)
Expand All @@ -21,13 +22,17 @@

# About

The Mobility Data Specification (**MDS**), a project of the [Open Mobility Foundation](http://www.openmobilityfoundation.org) (**OMF**), is a set of Application Programming Interfaces (APIs) that helps cities better manage transportation in the public right of way, standardizing communication and data-sharing between cities and mobility providers, allowing cities to share and validate policy digitally, and enabling vehicle management and better outcomes for residents. Inspired in part by projects like [GTFS](https://developers.google.com/transit/gtfs/reference/) and [GBFS](https://github.com/MobilityData/gbfs), MDS is focused on managing mobility services such as dockless scooters, bicycles, mopeds, car share, delivery robots, fixed route services and shuttles, fleets, and passenger services.
The Mobility Data Specification (**MDS**), a project of the [Open Mobility Foundation](http://www.openmobilityfoundation.org) (**OMF**), is a set of Application Programming Interfaces (APIs) that helps cities better manage transportation in the public right of way, standardizing communication and data-sharing between cities and mobility providers, allowing cities to share and validate policy digitally, and enabling vehicle management and better outcomes for residents. Inspired in part by projects like [GTFS](https://developers.google.com/transit/gtfs/reference/) and [GBFS](https://github.com/MobilityData/gbfs), MDS is focused on managing mobility services such as dockless scooters, bicycles, mopeds, car share, food and goods delivery, sidewalk robots, fixed route services and shuttles, fleets, busses, and passenger services.

![MDS Main Logo](https://i.imgur.com/AiUedl3.png)

**MDS** is a key piece of digital infrastructure that supports the effective implementation of mobility policies in cities around the world. For a high level overview and visuals, see the [About MDS](https://www.openmobilityfoundation.org/about-mds/) page on the OMF website.

![MDS Main Logo](https://i.imgur.com/AiUedl3.png)
![MDS Overview Diagram](https://i.imgur.com/YsrCHPX.png)

**MDS** is an open-source project originally created by the [Los Angeles Department of Transportation](http://ladot.io) (LADOT). In November 2019, stewardship of MDS and the ownership of this repository were transferred to the [Open Mobility Foundation](http://www.openmobilityfoundation.org). GitHub automatically redirects any links to this repository from the `CityOfLosAngeles` organization to the `openmobilityfoundation` instead. MDS continues to be used by LADOT and [many other municipalities](#cities-using-mds) and companies.
### History

**MDS** is an open-source project originally created by the [Los Angeles Department of Transportation](http://ladot.io) (LADOT). In November 2019, stewardship of MDS and the ownership of this repository were transferred to the [Open Mobility Foundation](http://www.openmobilityfoundation.org). GitHub automatically redirects any links to this repository from the `CityOfLosAngeles` organization to the `openmobilityfoundation` instead. MDS continues to be used by LADOT and [many other municipalities](#cities-using-mds) and companies (confirmed over 200 mobility operators, operating in over 1,000 cities globally, and 2 billion trips sent).

[Top][toc]

Expand Down Expand Up @@ -83,7 +88,7 @@ You can read more in our **[Understanding the different MDS APIs](https://github

## GBFS Requirement

All MDS compatible Provider and/or Agency feeds must also expose a public [GBFS](https://github.com/MobilityData/gbfs) feed for the micromobility and car share [modes](/modes) (passenger services and delivery robots may be optionally supported at the discretion of the agency running the program). Compatibility with [GBFS 3.0](https://github.com/MobilityData/gbfs/blob/v3.0/gbfs.md) or greater is advised, or the version recommended per MobilityData's [supported releases](https://github.com/MobilityData/gbfs?tab=readme-ov-file#current-version-recommended) guidance. Read MobilityData's RFP recommendations and required files list in their [GBFS and Shared Mobility Data Policy guide](https://gbfs.org/learn/data-policy/).
All MDS compatible Provider and/or Agency feeds must also expose a public [GBFS](https://github.com/MobilityData/gbfs) feed for the micromobility and car share [modes](/modes) (passenger services and delivery may be optionally supported at the discretion of the agency running the program). Compatibility with [GBFS 3.0](https://github.com/MobilityData/gbfs/blob/v3.0/gbfs.md) or greater is advised, or the version recommended per MobilityData's [supported releases](https://github.com/MobilityData/gbfs?tab=readme-ov-file#current-version-recommended) guidance. Read MobilityData's RFP recommendations and required files list in their [GBFS and Shared Mobility Data Policy guide](https://gbfs.org/learn/data-policy/).

See our [MDS Vehicles Guide](https://github.com/openmobilityfoundation/mobility-data-specification/wiki/MDS-Vehicles) for how MDS Provider/Agency `/vehicles` can be used by regulators instead of the public GBFS `/vehicle_status` (formerly `/free_bike_status`). Additional information on MDS and GBFS can be found in this [guidance document](https://github.com/openmobilityfoundation/governance/blob/main/technical/GBFS_and_MDS.md).

Expand All @@ -93,19 +98,23 @@ See our [MDS Vehicles Guide](https://github.com/openmobilityfoundation/mobility-

MDS supports multiple "modes", defined as a distinct regulatory framework for a type of mobility service. See the [modes overview](/modes) or get started with a specific mode:

- **[Micromobility](/modes/micromobility.md)** - dockless or docked small devices such as e-scooters and bikes.
- **[Passenger services](/modes/passenger-services.md)** - transporting individuals with a vehicle driven by another entity, including taxis, TNCs, and microtransit
- **[Car share](/modes/car-share.md)** - shared point-to-point and station-based multi-passenger vehicles.
- **[Delivery robots](/modes/delivery-robots.md)** - autonomous and remotely driven goods delivery devices
- **[Micromobility](/modes/micromobility.md)** - customer operated dockless or docked small devices moving customers and goods, such as scooters, bikeshare, cargo bikes, adaptive scooters, docked bikes, mopeds, trikes, and quadracycles.
- **[Passenger](/modes/passenger-services.md)** - employees and contractors, autonomous, and remotely operated transporting individuals or goods with a vehicle driven by another entity, including taxis, AV robotaxis, busses, transportation network companies (TNCs), commercial transport apps (CTAs), and private hire vehicles (PHVs), shuttles, paratransit, on demand vehicles, limosines, and microtransit.
- **[Fleet](/modes/car-share.md)** - customer, employees and contractors, autonomous, and remotely operated shared point-to-point, station-based, or free-floating multi-passenger or cargo vehicles like consumer car share, sanitation vehicles (garbage, recycling), city fleets, vehicle rentals, street sweepers, snow plows, utility services, construction, emergency response (police, fire, ambulance), tree maintenance, inspection and permitting vehicles, mobile health clinics, and heavy maintenance vehicles.
- **[Delivery](/modes/delivery-robots.md)** - employees and contractors, autonomous, and remotely operated sidewalk robots, app delivery, packages, freight, goods, food, private hire vehicles, postal service, medicine, and other delivery services.

<p align="center">
<a href="/modes/micromobility.md"><img src="https://i.imgur.com/tl99weM.png" alt="MDS Mode - Micromobility" style="float: left; border: 0; width: 150px;"></a> &nbsp; &nbsp; &nbsp;
<a href="/modes/passenger-services.md"><img src="https://i.imgur.com/3iAkYBC.png" alt="MDS Mode - Passenger Services" style="float: left; border: 0; width: 150px;"></a> &nbsp; &nbsp; &nbsp;
<a href="/modes/car-share.md"><img src="https://i.imgur.com/cCQTge5.png" alt="MDS Mode - Car Share" style="float: left; border: 0; width: 150px;"></a> &nbsp; &nbsp; &nbsp;
<a href="/modes/delivery-robots.md"><img src="https://i.imgur.com/u2HgctV.png" alt="MDS Mode - Delivery Robots" style="float: left; border: 0; width: 150px;"></a>
<a href="/modes/micromobility.md"><img src="https://i.imgur.com/bKGsiXz.png" alt="MDS Mode - Micromobility" style="float: left; border: 0; width: 170px;"></a> &nbsp; &nbsp; &nbsp;
<a href="/modes/passenger-services.md"><img src="https://i.imgur.com/beefGup.png" alt="MDS Mode - Passenger" style="float: left; border: 0; width: 170px;"></a> &nbsp; &nbsp; &nbsp;
<a href="/modes/car-share.md"><img src="https://i.imgur.com/OTl1hIv.png" alt="MDS Mode - Fleet" style="float: left; border: 0; width: 170px;"></a> &nbsp; &nbsp; &nbsp;
<a href="/modes/delivery-robots.md"><img src="https://i.imgur.com/bw2O9t8.png" alt="MDS Mode - Delivery" style="float: left; border: 0; width: 170px;"></a>
</p>
<br clear="both"/>

## Future Modes

Support for other shared modes, services, programs, and vehicles has been discussed for MDS, and could be created by public agencies and company requests in the future with non-breaking modifications in new MDS versions, for drone delivery, EVTOL air taxis, ferries, gondolas, subway, trolleys, trains, water taxis, helicopters, and planes. If interested, browse our [current conversations](https://github.com/openmobilityfoundation/mobility-data-specification/issues) or [start your own](https://github.com/openmobilityfoundation/mobility-data-specification/issues/new?template=feature-request---proposal.md).

[Top][toc]

# Versions
Expand Down
41 changes: 39 additions & 2 deletions data-types.md
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,8 @@ This MDS data types page catalogs the objects (fields, types, requirements, desc
- [Trips](#trips)
- [Incidents](#incidents)
- [Reports](#reports)
- [Enforcement](#enforcement)
- [Violations](#violations)
- [External Reference](#external-reference)

## Vehicles
Expand Down Expand Up @@ -111,7 +113,8 @@ Events represent changes in vehicle status.
| `timestamp` | [Timestamp][ts] | Required | Date/time that event occurred at. See [Event Times][event-times] |
| `publication_time` | [Timestamp][ts] | [Optional](./general-information.md#optional-fields) | Date/time that event became available through the status changes endpoint |
| `location` | [GPS][gps] | Required | See also [Telemetry][telemetry]. |
| `event_geographies` | UUID[] | [Optional](./general-information.md#optional-fields) | **[Beta feature](/general-information.md#beta-features):** *Yes (as of 2.0.0)*. Array of Geography UUIDs consisting of every Geography that contains the location of the status change. See [Geography Driven Events][geography-driven-events]. Required if `location` is not present. |
| `event_geographies` | UUID[] | [Optional](./general-information.md#optional-fields) | **[Beta feature](/general-information.md#beta-features):** *Yes (as of 2.0.0)*. Array of Geography UUIDs consisting of every Geography that contains the location of the status change. See [Geography Driven Events][geography-driven-events]. Required if `location` and `statistical_area_ids` are not present. |
| `statistical_areas` | Strings[] | [Optional](./general-information.md#optional-fields) | Array of statistical area identifier(s) where the event occurred. e.g. US census area IDs (tract, block group, block, etc), Canadian dissemination blocks or areas, UK output areas, etc, or any other pre-defined standard district, area, sector, neighborhood, etc. Details of the type and meaning of these identifiers are communicated between the public agency and operator outside of MDS. Note that instead of these pre-defined areas, custom geographic areas can be defined using `event_geographies`. Required if `location` and `event_geographies` are not present. |
| `battery_percent` | Integer | [Required if Applicable](./general-information.md#required-if-applicable-fields) | Percent battery charge of vehicle, expressed between 0 and 100 |
| `fuel_percent` | Integer | [Required if Applicable](./general-information.md#required-if-applicable-fields) | Percent fuel in vehicle, expressed between 0 and 100 |
| `trip_ids` | UUID[] | [Required if Applicable](./general-information.md#required-if-applicable-fields) | Trip UUIDs (foreign key to /trips endpoint), required if `event_types` contains `trip_start`, `trip_end`, `trip_cancel`, `trip_enter_jurisdiction`, or `trip_leave_jurisdiction` |
Expand Down Expand Up @@ -263,7 +266,7 @@ A Trip is defined by the following structure:
| Field | Type | Required/Optional | Comments |
| ---- | ---- | ---- | ---- |
| `incident_id` | UUID | Required | ID used for uniquely identifying an Incident. |
| `incident_type` | Enum | Required | The type of incident. One of `unplanned_stop`, `remote_takeover`, `ads_engaged` (Automated Driving System), `ads_disengaged`, `tip_over`, `harsh_stopping` (e.g. braking), `harsh_starting` (e.g. acceleration), `near_miss`, `vandalism`, `theft`, `crash`. Exact definitions, and when and if which incident types are sent, come from the agency. |
| `incident_type` | Enum | Required | The type of incident. One of `unplanned_stop`, `remote_takeover`, `ads_engaged` (Automated Driving System), `ads_disengaged`, `tip_over`, `harsh_stopping` (e.g. braking), `harsh_starting` (e.g. acceleration), `near_miss`, `vandalism`, `theft`, `violation`, `crash`. Exact definitions, and when and if which incident types are sent, come from the public agency. |
| `incident_time` | [Timestamp][ts] | Required | Date/time that incident first occurred. Note that this timestamp of the incident first occurance is independent of one or more Telemetry timestamps referenced via `incident_id`. Note that more frequent telemetry data points may be required when an incident is first discovered and occuring. |
| `discovery_time` | [Timestamp][ts] | Required | Date/time that incident was first discovered by the operator. This may be at the same moment of the `incident_time`, or may have been discovered later. |
| `publication_time` | [Timestamp][ts] | Required | Date/time that incident became first available to an agency through an Incident endpoint. |
Expand All @@ -274,6 +277,7 @@ A Trip is defined by the following structure:
| `medical_transport` | Boolean | Optional | If `true`, one or more individuals was transported via an ambulance or emergency response vehicle because of the incident. |
| `report_id` | String | Optional | Identifier of an external report, from a police report, citation, internal system, service request, etc. The report source is communicated by the operator to the agency outside of MDS. |
| `report_type` | String | Optional | Description of the type of report referenced by the `report_id`, eg. police, customer, remote operator, 311 call, etc. |
| `enforcement` | [Enforcement](#enforcement) | Optional | Enforcement and violation information related to this incident. Can be used for any `incident_type`. |
| `external_references` | Array of [External Reference][external-reference] objects | Optional | One or more references to external data feeds, links, reports, or documents impacting or related to this Incident, as they become available. |
| `contact_info` | String | Optional | Description of any relevant contact information about the incident the operator can provide. |
| `preliminary` | Boolean | Optional | If `true`, then this information in this Incident is only preliminary, with more details and/or validation coming at a later date. If `false`, the information provided here is deemed valed with no more updates expected. |
Expand Down Expand Up @@ -333,6 +337,39 @@ Other special group types may be added in future MDS releases as relevant agency

[Top][toc]

## Enforcement

The Enforcement object describes a specific set of features relevant to an enforcement [Incident](#incidents).

Where a citation could represent multiple violations, an enforcement object contains an array that enumerates the violations for a single citation. Where a citation can only represent a single violation, multiple Incidents may be published, each with a single violation in the array.

The `enforcement` object is a JSON *object* with the following fields:

| Name | Type | Required/Optional | Description |
| ---------------- | ------- | ----------------- | ------------- |
| `enforcement_id` | UUID | Required | An identifier unique to the enforcement incident, generated the first time an enforcement event is recorded, and referenced in future related enforcement events. Multiple Incidents (ex: `crash`, `violation`, or `vandalism`) that relate to the same enforcement activity can share the same `enforcement_id`. |
| `citation_id` | String | Optional | A unique id which represents a single citation. |
| `is_warning` | Boolean | Optional | A boolean value to indicate if the enforcement action is being processed as a warning. |
| `action_taken` | String | Optional | Indicates how the violation was enforced. Typical well-known values are `citation_registered`, `citation_posted`, `citation_served`, or `citation_emailed`. |
| `citation_cost` | String | Optional | The total cost of all violations associated to this enforcement action. |
| `violations` | Array of [Violations](#violations) | Optional | An array of Violation objects that indicate the one-to-many violations associated to this enforcement event. |

[Top][toc]

### Violations

The Violations object describes the violations associated to an enforcement action that can occur as part of a [Enforcement](#enforcement) on an [Incident](#incidents).

The `violations` object is a JSON *object* with the following fields:

| Name | Type | Required/Optional | Description |
| ---------------- | ------ | ----------------- | ------------- |
| `violation_code` | String | Optional | The unique code created by the municipality, city, county, state, federal, or enforcement agency to identify the type of rule being enforced. |
| `violation_name` | String | Optional | The city/municipal, county, state, provincial, or federal code that was violated. |
| `violation_cost` | String | Optional | The original cost associated with the violation. |

[Top][toc]

## External Reference

An External Reference object describes a specific feature from an external data source that is relevant to a part of MDS data. This allows MDS users to reference other data sources that impact or provide information about an MDS object, and see more details at an external URL. Data sources can be anything available via a URL, including an existing data standard (CDS, WZDx, CWZ, GTFS, GBFS, MDS, etc), a custom feed, API, document, web page, report, etc.
Expand Down
Loading