diff --git a/README.md b/README.md index b74a78a8..61c3c95e 100644 --- a/README.md +++ b/README.md @@ -46,7 +46,7 @@ MobiltyData has compiled a [project roadmap](https://portal.productboard.com/26q ## Current Version *(Recommended)* | Version | Type | Release Date | Status | JSON Schema | Release Notes | |:---:|:---:|---|---|---| ---| -| [v2.3](https://github.com/MobilityData/gbfs/blob/v2.3/gbfs.md) | MINOR | April 5, 2022 | :white_check_mark:   *Current Version* | [v2.3 Schema](https://github.com/MobilityData/gbfs-json-schema/tree/master/v2.3) | [v2.3 Release Notes](https://github.com/MobilityData/gbfs/releases/tag/v2.3) | +| [v3.0](https://github.com/MobilityData/gbfs/blob/v3.0/gbfs.md) | MAJOR | April 11, 2024 | :white_check_mark:   *Current Version* | [v3.0 Schema](https://github.com/MobilityData/gbfs-json-schema/tree/master/v3.0) | [v3.0 Article](https://mobilitydata.org/gbfs-v3-0-is-live-heres-why-youll-love-it/) | ### Upcoming MAJOR Version @@ -59,8 +59,7 @@ Release Candidates will receive *Current Version* status when they have been ful | Version | Type | Release Date | Status | JSON Schema | Release Notes | |:---:|:-----:|----------------|----------------------------|----------------------------------------------------------------------------------------|---------------------| -|[v3.0-RC2](https://github.com/MobilityData/gbfs/blob/master/gbfs.md) | MAJOR | November 14, 2023 | ✅ Ready for implementation | [v3.0-RC2 Schema](https://github.com/MobilityData/gbfs-json-schema/tree/master/v3.0-RC2) | [v3.0-RC2 Release Notes](https://github.com/MobilityData/gbfs/releases/tag/v3.0-RC2) | -|[v3.0-RC](https://github.com/MobilityData/gbfs/blob/v3.0-RC/gbfs.md) | MAJOR | March 10, 2023 | ✅ Ready for implementation | [v3.0-RC Schema](https://github.com/MobilityData/gbfs-json-schema/tree/master/v3.0-RC) | [v3.0-RC Article](https://mobilitydata.org/2023-the-year-of-v3/) | +| No current Release Candidate versions | | | | | | ### Past Version Releases Past versions with *Supported* status MAY be patched to correct bugs or vulnerabilities but new features will not be introduced.
@@ -68,6 +67,7 @@ Past versions with *Deprecated* status will not be patched and their use SHOULD | Version | Type | Release Date | Status | JSON Schema | Release Notes | |:---:|:---:|---|---|---|---| +| [v2.3](https://github.com/MobilityData/gbfs/blob/v2.3/gbfs.md) | MINOR | April 5, 2022 | :white_check_mark:   *Supported* | [v2.3 Schema](https://github.com/MobilityData/gbfs-json-schema/tree/master/v2.3) | [v2.3 Release Notes](https://github.com/MobilityData/gbfs/releases/tag/v2.3) | | [v2.2](https://github.com/MobilityData/gbfs/blob/v2.2/gbfs.md) | MINOR | March 19, 2021 |:white_check_mark:   *Supported* | [v2.2 Schema](https://github.com/MobilityData/gbfs-json-schema/tree/master/v2.2)| [v2.2 Article](https://mobilitydata.org/cities-gbfs-v2-2-is-here-for-you/) | [v2.1](https://github.com/MobilityData/gbfs/blob/v2.1/gbfs.md) | MINOR | March 18, 2021 |:white_check_mark:   *Supported* | [v2.1 Schema](https://github.com/MobilityData/gbfs-json-schema/tree/master/v2.1)| [v2.1 Article](https://mobilitydata.org/gbfs-now-fully-supports-dockless-systems-%f0%9f%9b%b4%f0%9f%91%8f/) | [v2.0](https://github.com/MobilityData/gbfs/blob/v2.0/gbfs.md) | MAJOR | March 16, 2020 | :white_check_mark:   *Supported* | [v2.0 Schema](https://github.com/MobilityData/gbfs-json-schema/tree/master/v2.0) | [v2.0 Article](https://mobilitydata.org/whats-new-in-gbfs-v2-0-%f0%9f%9a%b2%f0%9f%9b%b4/) | @@ -75,7 +75,7 @@ Past versions with *Deprecated* status will not be patched and their use SHOULD | [v1.0](https://github.com/MobilityData/gbfs/blob/v1.0/gbfs.md) | MAJOR | Prior to October 2019 | :x:   *Deprecated* | [v1.0 Schema](https://github.com/MobilityData/gbfs-json-schema/tree/master/v1.0)| | ### Full Version History -The complete GBFS version history is available on the [wiki](https://github.com/MobilityData/gbfs/wiki/Complete-Version-History). +The complete GBFS version history is available in the [Release Notes](https://github.com/MobilityData/gbfs/releases). ## Specification Versioning To enable the evolution of GBFS, including changes that would otherwise break backwards-compatibility with consuming applications, GBFS uses [semantic versioning](https://semver.org/). diff --git a/gbfs.md b/gbfs.md index 3913030b..13193779 100644 --- a/gbfs.md +++ b/gbfs.md @@ -4,9 +4,9 @@ This document explains the types of files and data that comprise the General Bik ## Reference version -This documentation refers to **v3.0-RC2**. +This documentation refers to **v3.0**. -**For the current version see [**version 2.3**](https://github.com/MobilityData/gbfs/blob/v2.3/gbfs.md).** For past and upcoming versions see the [README](https://github.com/MobilityData/gbfs/blob/master/README.md#current-version-recommended). +For past and upcoming versions see the [README](https://github.com/MobilityData/gbfs/blob/master/README.md#current-version-recommended). ## Terminology @@ -23,15 +23,15 @@ The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "S * [Field Types](#field-types) * [Files](#files) * [gbfs.json](#gbfsjson) - * [manifest.json](#manifestjson) *(added in v3.0-RC)* + * [manifest.json](#manifestjson) *(added in v3.0)* * [gbfs_versions.json](#gbfs_versionsjson) * [system_information.json](#system_informationjson) * [vehicle_types.json](#vehicle_typesjson) *(added in v2.1)* * [station_information.json](#station_informationjson) * [station_status.json](#station_statusjson) * [vehicle_status.json](#vehicle_statusjson) *(formerly free_bike_status.json)* - * [system_hours.json](#system_hoursjson) *(removed in v3.0-RC)* - * [system_calendar.json](#system_calendarjson) *(removed in v3.0-RC)* + * [system_hours.json](#system_hoursjson) *(removed in v3.0)* + * [system_calendar.json](#system_calendarjson) *(removed in v3.0)* * [system_regions.json](#system_regionsjson) * [system_pricing_plans.json](#system_pricing_plansjson) * [system_alerts.json](#system_alertsjson) @@ -63,15 +63,15 @@ This section defines terms that are used throughout this document. File Name | REQUIRED | Defines ---|---|--- gbfs.json | Yes
*(as of v2.0)* | Auto-discovery file that links to the other files published for the system. To avoid circular references this file MUST NOT contain links to `manifest.json`. -manifest.json *(added in v3.0-RC)* | Conditionally REQUIRED | Required of any GBFS dataset provider that publishes more than one GBFS dataset. For example, if you publish one set of files for Berlin and a different set for Paris, this file is REQUIRED. A discovery file containing a comprehensive list of `gbfs.json` URLs for all GBFS datasets published by the provider. +manifest.json *(added in v3.0)* | Conditionally REQUIRED | Required of any GBFS dataset provider that publishes more than one GBFS dataset. For example, if you publish one set of files for Berlin and a different set for Paris, this file is REQUIRED. A discovery file containing a comprehensive list of `gbfs.json` URLs for all GBFS datasets published by the provider. gbfs_versions.json | OPTIONAL | Lists all feed endpoints published according to versions of the GBFS documentation. system_information.json | Yes | Details including system operator, system location, year implemented, URL, contact info, time zone. vehicle_types.json
*(added in v2.1)* | Conditionally REQUIRED | Describes the types of vehicles that System operator has available for rent. REQUIRED of systems that include information about vehicle types in the `vehicle_status` file. If this file is not included, then all vehicles in the feed are assumed to be non-motorized bicycles. station_information.json | Conditionally REQUIRED | List of all stations, their capacities and locations. REQUIRED of systems utilizing docks. station_status.json | Conditionally REQUIRED | Number of available vehicles and docks at each station and station availability. REQUIRED of systems utilizing docks. vehicle_status.json | Conditionally REQUIRED | *(as of v2.1)* Describes all vehicles that are not currently in active rental. REQUIRED for free floating (dockless) vehicles. OPTIONAL for station based (docked) vehicles. Vehicles that are part of an active rental MUST NOT appear in this feed. -system_hours.json | - | This file is removed *(as of v3.0-RC)*. See `system_information.opening_hours` for system hours of operation. -system_calendar.json | - | This file is removed *(as of v3.0-RC)*. See `system_information.opening_hours` for system dates of operation. +system_hours.json | - | This file is removed *(as of v3.0)*. See `system_information.opening_hours` for system hours of operation. +system_calendar.json | - | This file is removed *(as of v3.0)*. See `system_information.opening_hours` for system dates of operation. system_regions.json | OPTIONAL | Regions the system is broken up into. system_pricing_plans.json | OPTIONAL | System pricing scheme. system_alerts.json | OPTIONAL | Current system alerts. @@ -97,7 +97,7 @@ Announcements for disruptions of service, including disabled stations or tempora Permanent shutdowns resulting in the termination of service SHOULD be communicated to data consumers via `system_information.json#termination_date`. ### Hours and Dates of Operation -Beginning with v3.0-RC, hours and dates of operation are described using the Open Street Map [opening_hours](https://wiki.openstreetmap.org/wiki/Key:opening_hours) format. The OSM opening_hours syntax is quite complex, therefore it is RECOMMENDED that publishers validate their opening_hours data to ensure its accuracy. +Beginning with v3.0, hours and dates of operation are described using the Open Street Map [opening_hours](https://wiki.openstreetmap.org/wiki/Key:opening_hours) format. The OSM opening_hours syntax is quite complex, therefore it is RECOMMENDED that publishers validate their opening_hours data to ensure its accuracy. * [OSM opening_hours examples](https://wiki.openstreetmap.org/wiki/Key:opening_hours) * [OSM opening_hours syntax guide](https://wiki.openstreetmap.org/wiki/Key:opening_hours/specification) * [OSM opening_hours validation tool](https://openingh.openstreetmap.de/evaluation_tool/) @@ -143,9 +143,9 @@ Publishers SHOULD implement auto-discovery of GBFS feeds by linking to the locat ### Localization -* Each supported language MUST be listed in the `languages` field in `system_information.json`. *(as of v3.0-RC)* -* Translations MUST be provided for each supported language for all translateable fields of type Array<[Localized String](#localized-string)> and Array<[Localized URL](#localized-url)>. *(as of v3.0-RC)* -* URLs pointing to text intended for consumption by end-users MUST be provided for each supported language. *(as of v3.0-RC)* +* Each supported language MUST be listed in the `languages` field in `system_information.json`. *(as of v3.0)* +* Translations MUST be provided for each supported language for all translateable fields of type Array<[Localized String](#localized-string)> and Array<[Localized URL](#localized-url)>. *(as of v3.0)* +* URLs pointing to text intended for consumption by end-users MUST be provided for each supported language. *(as of v3.0)* ### Text Fields and Naming @@ -195,7 +195,7 @@ It is RECOMMENDED that all GBFS data sets be offered under an open data license. * Date - A date in the [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) Complete Date Extended Format: YYYY-MM-DD. Example: `2019-09-13` for September 13th, 2019. * Datetime *(added in v2.3)*- Combination of a date and a time following [ISO 8601 notation](https://www.iso.org/iso-8601-date-and-time-format.html). Attributes : [year](https://docs.python.org/3/library/datetime.html#datetime.datetime.year), [month](https://docs.python.org/3/library/datetime.html#datetime.datetime.month), [day](https://docs.python.org/3/library/datetime.html#datetime.datetime.day), [hour](https://docs.python.org/3/library/datetime.html#datetime.datetime.hour), [minute](https://docs.python.org/3/library/datetime.html#datetime.datetime.minute), [second](https://docs.python.org/3/library/datetime.html#datetime.datetime.second), and timezone. * Email - An email address. Example: `example@example.com` -* Enum (Enumerable values) - An option from a set of predefined constants in the "Defines" column. Enum values MUST (as of v3.0-RC) be lowercase. +* Enum (Enumerable values) - An option from a set of predefined constants in the "Defines" column. Enum values MUST (as of v3.0) be lowercase. Example: The `rental_methods` field contains values `creditcard`, `paypass`, etc... * Float *(added in v2.1)* - A 32-bit floating point number. * GeoJSON FeatureCollection - A FeatureCollection as described by the IETF RFC 7946 https://tools.ietf.org/html/rfc7946#section-3.3. @@ -203,8 +203,8 @@ Example: The `rental_methods` field contains values `creditcard`, `paypass`, etc * ID - Should be represented as a string that identifies that particular entity. An ID: * MUST be unique within like fields (for example, `station_id` MUST be unique among stations) * Does not have to be globally unique, unless otherwise specified - * MUST be in the ASCII printable character range, space excluded (0x21 to 0x7E) https://en.wikipedia.org/wiki/ASCII#Printable_characters *(as of v3.0-RC2)* - * SHOULD be restricted to `A-Z`, `a-z`, `0-9` and `.@:/_-` *(as of v3.0-RC2)* + * MUST be in the ASCII printable character range, space excluded (0x21 to 0x7E) https://en.wikipedia.org/wiki/ASCII#Printable_characters *(as of v3.0)* + * SHOULD be restricted to `A-Z`, `a-z`, `0-9` and `.@:/_-` *(as of v3.0)* * MUST be persistent for a given entity (station, plan, etc.). An exception is `vehicle_id`, which MUST NOT be persistent for privacy reasons (see `vehicle_status.json`). *(as of v2.0)* * Language - An IETF BCP 47 language code. For an introduction to IETF BCP 47, refer to https://www.rfc-editor.org/rfc/bcp/bcp47.txt and https://www.w3.org/International/articles/language-tags/. Examples: `en` for English, `en-US` for American English, or `de` for German. * Latitude - WGS84 latitude in decimal degrees. The value MUST be greater than or equal to -90.0 and less than or equal to 90.0. Example: `41.890169` for the Colosseum in Rome. @@ -227,10 +227,10 @@ Example: The `rental_methods` field contains values `creditcard`, `paypass`, etc * Non-negative Float - A 32-bit floating point number greater than or equal to 0. * Non-negative Integer - An integer greater than or equal to 0. * Object - A JSON element consisting of key-value pairs (fields). -* Phone Number *as of v3.0-RC* - Phone number in [E.164](https://www.itu.int/rec/T-REC-E.164-201011-I/en) format. The phone number MUST start with a "+". The characters following the "+" MUST be integers and MUST NOT contain any hyphens, spaces or parentheses. +* Phone Number *as of v3.0* - Phone number in [E.164](https://www.itu.int/rec/T-REC-E.164-201011-I/en) format. The phone number MUST start with a "+". The characters following the "+" MUST be integers and MUST NOT contain any hyphens, spaces or parentheses. * String - Can only contain text. Strings MUST NOT contain any formatting codes (including HTML) other than newlines. * Time - Service time in the HH:MM:SS format for the time zone indicated in `system_information.json` (00:00:00 - 47:59:59). Time can stretch up to one additional day in the future to accommodate situations where, for example, a system was open from 11:30pm - 11pm the next day (23:30:00-47:00:00). -* Timestamp - Timestamp fields MUST be represented as strings in [RFC3339 format](https://www.rfc-editor.org/rfc/rfc3339), for example `2023-07-17T13:34:13+02:00`. *(as of v3.0-RC2)* +* Timestamp - Timestamp fields MUST be represented as strings in [RFC3339 format](https://www.rfc-editor.org/rfc/rfc3339), for example `2023-07-17T13:34:13+02:00`. *(as of v3.0)* * Timezone - TZ timezone from the https://www.iana.org/time-zones. Timezone names never contain the space character but MAY contain an underscore. Refer to https://en.wikipedia.org/wiki/List_of_tz_zones for a list of valid values. Example: `Asia/Tokyo`, `America/Los_Angeles` or `Africa/Cairo`. * URI - A fully qualified URI that includes the scheme (for example, `com.example.android://`). Any special characters in the URI MUST be correctly escaped. See the following https://www.w3.org/Addressing/URL/4_URI_Recommentations.html for a description of how to create fully qualified URI values. Note that URIs MAY be URLs. @@ -265,7 +265,7 @@ Field Name | REQUIRED | Type | Defines { "last_updated": "2023-07-17T13:34:13+02:00", "ttl": 3600, - "version": "3.0-RC2", + "version": "3.0", "data": { "name": [ { @@ -282,7 +282,7 @@ Field Name | REQUIRED | Type | Defines ### gbfs.json -The `gbfs.json` discovery file SHOULD represent a single system or geographic area in which vehicles are operated. The location (URL) of the `gbfs.json` file SHOULD be made available to the public using the specification’s [auto-discovery](#auto-discovery) function. To avoild circular references, this file MUST NOT contain links to `manifest.json` files.*(as of v3.0-RC)*
The following fields are all attributes within the main `data` object for this feed. +The `gbfs.json` discovery file SHOULD represent a single system or geographic area in which vehicles are operated. The location (URL) of the `gbfs.json` file SHOULD be made available to the public using the specification’s [auto-discovery](#auto-discovery) function. To avoild circular references, this file MUST NOT contain links to `manifest.json` files.*(as of v3.0)*
The following fields are all attributes within the main `data` object for this feed. Field Name | REQUIRED | Type | Defines ---|---|---|--- @@ -296,7 +296,7 @@ Field Name | REQUIRED | Type | Defines { "last_updated": "2023-07-17T13:34:13+02:00", "ttl": 0, - "version": "3.0-RC2", + "version": "3.0", "data": { "feeds": [ { @@ -313,7 +313,7 @@ Field Name | REQUIRED | Type | Defines ``` ### manifest.json -*(added in v3.0-RC)* +*(added in v3.0)* An index of `gbfs.json` URLs for each GBFS data set produced by a publisher. A single instance of this file should be published at a single stable URL, for example: `https://example.com/gbfs/manifest.json` @@ -332,7 +332,7 @@ Field Name | REQUIRED | Type | Defines { "last_updated": "2023-07-17T13:34:13+02:00", "ttl":0, - "version":"3.0-RC", + "version":"3.0", "data":{ "datasets":[ { @@ -343,7 +343,7 @@ Field Name | REQUIRED | Type | Defines "url":"https://berlin.example.com/gbfs/2/gbfs" }, { - "version":"3.0-RC", + "version":"3.0", "url":"https://berlin.example.com/gbfs/3/gbfs" } ] @@ -356,7 +356,7 @@ Field Name | REQUIRED | Type | Defines "url":"https://paris.example.com/gbfs/2/gbfs" }, { - "version":"3.0-RC", + "version":"3.0", "url":"https://paris.example.com/gbfs/3/gbfs" } ] @@ -383,7 +383,7 @@ Field Name | REQUIRED | Type | Defines { "last_updated": "2023-07-17T13:34:13+02:00", "ttl": 0, - "version": "3.0-RC2", + "version": "3.0", "data": { "versions": [ { @@ -391,7 +391,7 @@ Field Name | REQUIRED | Type | Defines "url": "https://www.example.com/gbfs/2/gbfs" }, { - "version": "3.0-RC2", + "version": "3.0", "url": "https://www.example.com/gbfs/3/gbfs" } ] @@ -406,33 +406,33 @@ The following fields are all attributes within the main `data` object for this f Field Name | REQUIRED | Type | Defines ---|---|---|--- `system_id` | Yes | ID | This is a globally unique identifier for the vehicle share system. Each distinct system or geographic area in which vehicles are operated MUST have its own unique `system_id`. It is up to the publisher of the feed to guarantee uniqueness and MUST be checked against existing `system_id` fields in [systems.csv](https://github.com/MobilityData/gbfs/blob/master/systems.csv) to ensure this. This value is intended to remain the same over the life of the system.

System IDs SHOULD be recognizable as belonging to a particular system as opposed to random strings - for example, `bcycle_austin` or `biketown_pdx`. -`languages`
*(added of v3.0-RC)* | Yes | Array<Language> | List of languages used in translated strings. -`name`
*(as of v3.0-RC)* | Yes | Array<Localized String> | Name of the system to be displayed to customers. -`opening_hours`
*(added in v3.0-RC)*| Yes | String | Hours and dates of operation for the system in [OSM opening_hours](https://wiki.openstreetmap.org/wiki/Key:opening_hours) format. *(added in v3.0-RC)* -`short_name` *(as of v3.0-RC)* | OPTIONAL | Array<Localized String> | Abbreviation for a system. -`operator`
*(as of v3.0-RC)* | OPTIONAL | Array<Localized String> | Name of the system operator. +`languages`
*(added of v3.0)* | Yes | Array<Language> | List of languages used in translated strings. +`name`
*(as of v3.0)* | Yes | Array<Localized String> | Name of the system to be displayed to customers. +`opening_hours`
*(added in v3.0)*| Yes | String | Hours and dates of operation for the system in [OSM opening_hours](https://wiki.openstreetmap.org/wiki/Key:opening_hours) format. *(added in v3.0)* +`short_name` *(as of v3.0)* | OPTIONAL | Array<Localized String> | Abbreviation for a system. +`operator`
*(as of v3.0)* | OPTIONAL | Array<Localized String> | Name of the system operator. `url` | OPTIONAL | URL | The URL of the vehicle share system. `purchase_url` | OPTIONAL | URL | URL where a customer can purchase a membership. `start_date` | OPTIONAL | Date | Date that the system began operations. -`termination_date`
*(added in v3.0-RC2)* | OPTIONAL | Date | Date after which this data source will no longer be available to consuming applications.

This OPTIONAL field SHOULD be used to notify 3rd party data consumers when a service is planning a permanent (non-seasonal) shutdown. Publishers SHOULD include this date in their feeds as soon as they know of an impending shutdown. Publishers SHOULD continue to publish feeds for 30 days following a permanent shutdown after which they SHOULD return a helpful http status code and text, for example `410 service no longer available ...` for all feed endpoint URLs. -`phone_number`
*(as of v3.0-RC)* | OPTIONAL | Phone Number | This OPTIONAL field SHOULD contain a single voice telephone number for the specified system’s customer service department. MUST be in [E.164](https://www.itu.int/rec/T-REC-E.164-201011-I/en) format as defined in [Field Types](#field-types). +`termination_date`
*(added in v3.0)* | OPTIONAL | Date | Date after which this data source will no longer be available to consuming applications.

This OPTIONAL field SHOULD be used to notify 3rd party data consumers when a service is planning a permanent (non-seasonal) shutdown. Publishers SHOULD include this date in their feeds as soon as they know of an impending shutdown. Publishers SHOULD continue to publish feeds for 30 days following a permanent shutdown after which they SHOULD return a helpful http status code and text, for example `410 service no longer available ...` for all feed endpoint URLs. +`phone_number`
*(as of v3.0)* | OPTIONAL | Phone Number | This OPTIONAL field SHOULD contain a single voice telephone number for the specified system’s customer service department. MUST be in [E.164](https://www.itu.int/rec/T-REC-E.164-201011-I/en) format as defined in [Field Types](#field-types). `email` | OPTIONAL | Email | This OPTIONAL field SHOULD contain a single contact email address actively monitored by the operator’s customer service department. This email address SHOULD be a direct contact point where riders can reach a customer service representative. -`feed_contact_email` | Yes
*(as of v3.0-RC)* | Email | This field MUST contain a single contact email for feed consumers to report issues with the feed. This email address SHOULD point to a stable email address, that does not correspond to an individual but rather the team or company that manages GBFS feeds. -`manifest_url`
*(added in v3.0-RC)* | Conditionally REQUIRED | URL | REQUIRED if the producer publishes datasets for more than one system geography, for example Berlin and Paris. A fully qualified URL pointing to the [manifest.json](#manifestjson) file for the publisher. +`feed_contact_email` | Yes
*(as of v3.0)* | Email | This field MUST contain a single contact email for feed consumers to report issues with the feed. This email address SHOULD point to a stable email address, that does not correspond to an individual but rather the team or company that manages GBFS feeds. +`manifest_url`
*(added in v3.0)* | Conditionally REQUIRED | URL | REQUIRED if the producer publishes datasets for more than one system geography, for example Berlin and Paris. A fully qualified URL pointing to the [manifest.json](#manifestjson) file for the publisher. `timezone` | Yes | Timezone | The time zone where the system is located. -`license_id`
*(added in v3.0-RC)* | Conditionally REQUIRED | String | REQUIRED if the dataset is provided under a standard license. An identifier for a standard license from the [SPDX License List](https://spdx.org/licenses/). Provide `license_id` rather than `license_url` if the license is included in the SPDX License List. See the GBFS wiki for a [comparison of a subset of standard licenses](https://github.com/MobilityData/gbfs/blob/master/data-licenses.md). If the `license_id` and `license_url` fields are blank or omitted, this indicates that the feed is provided under the [Creative Commons Universal Public Domain Dedication](https://creativecommons.org/publicdomain/zero/1.0/legalcode). -`license_url` | Conditionally REQUIRED
*(as of v3.0-RC)* | URL | REQUIRED if the dataset is provided under a customized license. A fully qualified URL of a page that defines the license terms for the GBFS data for this system. Do not specify a `license_url` if `license_id` is specified. If the `license_id` and `license_url` fields are blank or omitted, this indicates that the feed is provided under the [Creative Commons Universal Public Domain Dedication](https://creativecommons.org/publicdomain/zero/1.0/legalcode). *(as of v3.0-RC)* -`attribution_organization_name`
*(added in v3.0-RC)* | OPTIONAL | Array<Localized String> | If the feed license requires attribution, name of the organization to which attribution should be provided. -`attribution_url`
*(added in v3.0-RC)* | OPTIONAL | URL | URL of the organization to which attribution should be provided. +`license_id`
*(added in v3.0)* | Conditionally REQUIRED | String | REQUIRED if the dataset is provided under a standard license. An identifier for a standard license from the [SPDX License List](https://spdx.org/licenses/). Provide `license_id` rather than `license_url` if the license is included in the SPDX License List. See the GBFS wiki for a [comparison of a subset of standard licenses](https://github.com/MobilityData/gbfs/blob/master/data-licenses.md). If the `license_id` and `license_url` fields are blank or omitted, this indicates that the feed is provided under the [Creative Commons Universal Public Domain Dedication](https://creativecommons.org/publicdomain/zero/1.0/legalcode). +`license_url` | Conditionally REQUIRED
*(as of v3.0)* | URL | REQUIRED if the dataset is provided under a customized license. A fully qualified URL of a page that defines the license terms for the GBFS data for this system. Do not specify a `license_url` if `license_id` is specified. If the `license_id` and `license_url` fields are blank or omitted, this indicates that the feed is provided under the [Creative Commons Universal Public Domain Dedication](https://creativecommons.org/publicdomain/zero/1.0/legalcode). *(as of v3.0)* +`attribution_organization_name`
*(added in v3.0)* | OPTIONAL | Array<Localized String> | If the feed license requires attribution, name of the organization to which attribution should be provided. +`attribution_url`
*(added in v3.0)* | OPTIONAL | URL | URL of the organization to which attribution should be provided. `brand_assets`
*(added in v2.3)* | OPTIONAL | Object | Object containing branding information about the system. `brand_assets.brand_last_modified`
*(added in v2.3)* | REQUIRED | Date | Date that indicates the last time any included brand assets were updated or modified. `brand_assets.brand_terms_url`
*(added in v2.3)* | OPTIONAL | URL | A fully qualified URL pointing to the location of a page that defines the license terms of brand icons, colors, or other trademark information. This field MUST NOT take the place of `license_url` or `license_id`. `brand_assets.brand_image_url`
*(added in v2.3)* | REQUIRED | URL | A fully qualified URL pointing to the location of a graphic file representing the brand for the service. File MUST be in SVG V1.1 format and MUST be either square or round. `brand_assets.brand_image_url_dark`
*(added in v2.3)* | OPTIONAL | URL | A fully qualified URL pointing to the location of a graphic file representing the brand for the service for use in dark mode applications. File MUST be in SVG V1.1 format and MUST be either square or round. `brand_assets.color`
*(added in v2.3)* | OPTIONAL | String | Color used to represent the brand for the service expressed as a 6 digit hexadecimal color code in the form #000000. -`terms_url`
*(as of v3.0-RC)* | OPTIONAL | Array<Localized String> | A fully qualified URL pointing to the terms of service (also often called "terms of use" or "terms and conditions") for the service. +`terms_url`
*(as of v3.0)* | OPTIONAL | Array<Localized String> | A fully qualified URL pointing to the terms of service (also often called "terms of use" or "terms and conditions") for the service. `terms_last_updated`
*(added in v2.3)* | REQUIRED | Date | The date that the terms of service provided at `terms_url` were last updated. -`privacy_url`
*(as of v3.0-RC)*| OPTIONAL | Array<Localized String> | A fully qualified URL pointing to the privacy policy for the service. +`privacy_url`
*(as of v3.0)*| OPTIONAL | Array<Localized String> | A fully qualified URL pointing to the privacy policy for the service. `privacy_last_updated`
*(added in v2.3)* | REQUIRED | Date | The date that the privacy policy provided at `privacy_url` was last updated. `rental_apps` | OPTIONAL | Object | Contains rental app information in the `android` and `ios` JSON objects. `rental_apps.android` | OPTIONAL | Object | Contains rental app download and app discovery information for the Android platform in the `store_uri` and `discovery_uri` fields. See [examples](#deep-links-examples) of how to use these fields and [supported analytics](#analytics). @@ -448,7 +448,7 @@ Field Name | REQUIRED | Type | Defines { "last_updated": "2023-07-17T13:34:13+02:00", "ttl": 1800, - "version": "3.0-RC2", + "version": "3.0", "data": { "system_id": "example_cityname", "languages": ["en"], @@ -530,22 +530,22 @@ Field Name | REQUIRED | Type | Defines `vehicle_types[].cargo_volume_capacity`
*(added in v2.3)* | OPTIONAL | Non-negative integer | Cargo volume available in the vehicle, expressed in liters. For cars, it corresponds to the space between the boot floor, including the storage under the hatch, to the rear shelf in the trunk. `vehicle_types[].cargo_load_capacity`
*(added in v2.3)* | OPTIONAL | Non-negative integer | The capacity of the vehicle cargo space (excluding passengers), expressed in kilograms. `vehicle_types[].propulsion_type` | Yes | Enum | The primary propulsion type of the vehicle.

Current valid values are:
This field was inspired by, but differs from the propulsion types field described in the [Open Mobility Foundation Mobility Data Specification](https://github.com/openmobilityfoundation/mobility-data-specification/blob/main/general-information.md#propulsion-types). -`vehicle_types[].eco_labels`
*(as of v3.0-RC2)* | OPTIONAL | Array<Object> | Vehicle air quality certificate. Official anti-pollution certificate, based on the information on the vehicle's registration certificate, attesting to its level of pollutant emissions based on a defined standard. In Europe, for example, it is the European emission standard. The aim of this measure is to encourage the use of the least polluting vehicles by allowing them to drive during pollution peaks or in low emission zones. +`vehicle_types[].eco_labels`
*(as of v3.0)* | OPTIONAL | Array<Object> | Vehicle air quality certificate. Official anti-pollution certificate, based on the information on the vehicle's registration certificate, attesting to its level of pollutant emissions based on a defined standard. In Europe, for example, it is the European emission standard. The aim of this measure is to encourage the use of the least polluting vehicles by allowing them to drive during pollution peaks or in low emission zones. `vehicle_types[].eco_labels[].country_code`
*(added in v2.3)*| REQUIRED | Country code | Country where the `eco_sticker` applies. `vehicle_types[].eco_labels[].eco_sticker`
*(added in v2.3)* | REQUIRED | String | Name of the eco label. The name must be written in lowercase, separated by an underscore.

Example of `eco_sticker` in Europe : `vehicle_types[].max_range_meters` | Conditionally REQUIRED | Non-negative float | If the vehicle has a motor (as indicated by having a value other than `human` in the `propulsion_type` field), this field is REQUIRED. This represents the furthest distance in meters that the vehicle can travel without recharging or refueling when it has the maximum amount of energy potential (for example, a full battery or full tank of gas). -`vehicle_types[].name`
*(as of v3.0-RC)* | OPTIONAL | Array<Localized String> | The public name of this vehicle type. +`vehicle_types[].name`
*(as of v3.0)* | OPTIONAL | Array<Localized String> | The public name of this vehicle type. `vehicle_types[].vehicle_accessories`
*(added in v2.3)* | OPTIONAL | Array<String> | Description of accessories available in the vehicle. These accessories are part of the vehicle and are not supposed to change frequently. Current valid values are: `vehicle_types[].g_CO2_km`
*(added in v2.3)* | OPTIONAL | Non-negative integer | Maximum quantity of CO2, in grams, emitted per kilometer, according to the [WLTP](https://en.wikipedia.org/wiki/Worldwide_Harmonised_Light_Vehicles_Test_Procedure). `vehicle_types[].vehicle_image`
*(added in v2.3)* | OPTIONAL | URL | URL to an image that would assist the user in identifying the vehicle (for example, an image of the vehicle or a logo).
Allowed formats: JPEG, PNG. -`vehicle_types[].make`
*(as of v3.0-RC)* | OPTIONAL| Array<Localized String> | The name of the vehicle manufacturer.

Example: -`vehicle_types[].model`
*(as of v3.0-RC)* | OPTIONAL| Array<Localized String> | The name of the vehicle model.

Example +`vehicle_types[].make`
*(as of v3.0)* | OPTIONAL| Array<Localized String> | The name of the vehicle manufacturer.

Example: +`vehicle_types[].model`
*(as of v3.0)* | OPTIONAL| Array<Localized String> | The name of the vehicle model.

Example `vehicle_types[].color`
*(added in v2.3)*| OPTIONAL| String| The color of the vehicle.

All words must be in lower case, without special characters, quotation marks, hyphens, underscores, commas, or dots. Spaces are allowed in case of a compound name.

Example -`vehicle_types[].description`
*(added in v3.0-RC)*| OPTIONAL | Array<Localized String> | Customer-readable description of the vehicle type outlining special features or how-tos. +`vehicle_types[].description`
*(added in v3.0)*| OPTIONAL | Array<Localized String> | Customer-readable description of the vehicle type outlining special features or how-tos. `vehicle_types[].wheel_count`
*(added in v2.3)* | OPTIONAL | Non-negative Integer | Number of wheels this vehicle type has. `vehicle_types[].max_permitted_speed`
*(added in v2.3)* | OPTIONAL | Non-negative Integer | The maximum speed in kilometers per hour this vehicle is permitted to reach in accordance with local permit and regulations. `vehicle_types[].rated_power`
*(added in v2.3)* | OPTIONAL | Non-negative Integer | The rated power of the motor for this vehicle type in watts. -`vehicle_types[].default_reserve_time`
*(added in v2.3)* | Conditionally REQUIRED
*(as of v3.0-RC)* | Non-negative Integer | REQUIRED if `reservation_price_per_min` or `reservation_price_flat_rate` are defined. Maximum time in minutes that a vehicle can be reserved before a rental begins. When a vehicle is reserved by a user, the vehicle remains locked until the rental begins. During this time the vehicle is unavailable and cannot be reserved or rented by other users. The vehicle status in `vehicle_status.json` MUST be set to `is_reserved = true`. If the value of `default_reserve_time` elapses without a rental beginning, the vehicle status MUST change to `is_reserved = false`. If `default_reserve_time` is set to `0`, the vehicle type cannot be reserved. +`vehicle_types[].default_reserve_time`
*(added in v2.3)* | OPTIONAL | Non-negative Integer | Maximum time in minutes that a vehicle can be reserved before a rental begins. When a vehicle is reserved by a user, the vehicle remains locked until the rental begins. During this time the vehicle is unavailable and cannot be reserved or rented by other users. The vehicle status in `vehicle_status.json` MUST be set to `is_reserved = true`. If the value of `default_reserve_time` elapses without a rental beginning, the vehicle status MUST change to `is_reserved = false`. If `default_reserve_time` is set to `0`, the vehicle type cannot be reserved. `vehicle_types[].return_constraint`
*(as of v2.3)*| OPTIONAL | Enum | The conditions for returning the vehicle at the end of the rental.

Current valid values are: