Docked Micromobility structured data type definitions

Before you proceed with this section, if you haven't already done so, verify this is the appropriate section, as described in Structured data type definitions. To successfully integrate with Google, build your feed using only specifications found in this section.

You must specify the required fields included in this section. For conditionally required fields, refer to the field's description for guidance. You can also specify optional fields, which add information and can provide a better user experience.

Google only supports docked Micromobility feeds from aggregators of docked micromobility systems.

Required header for docked Micromobility feeds

Field name Type Requirement Description
last_updated Timestamp Required

A POSIX timestamp, which specifies a number of seconds since January 1, 1970 00:00:00 UTC.

Set to the last time that the data in the feed was updated.

ttl Non-negative integer Required

A non-negative integer that represents the number of seconds that remain until the data in the feed is to be updated again.

If the data must be updated at a constant rate, set this value to 0.

data JSON Required JSON that contains the data fields for the individual feed.
data.system_id ID Required A unique identifier for a given system among other systems in the aggregated feed.

For example, an aggregated station_status.json feed which specifies the required header for docked Micromobility feeds, might be as follows:

[
    {
        "ttl": 30,
        "last_updated": 1576123774,
        "data": {
            "system_id": "5",
            "stations": [ ... ]  // GBFS station status objects.
        }
    },
    {
        "ttl": 30,
        "last_updated": 1576123654,
        "data": {
            "system_id": "7",
            "stations": [ ... ]  // GBFS station status objects.
        }
    }
]

Required: system_information.json

Refer to the GBFS specification as needed.

This feed provides details regarding the system operator.

Field name Type Requirement Description
system_id ID Required A unique identifier for a given system among other systems in the aggregated feed.
name String Required Name of the system, which is displayed to customers.
rental_apps Object Required A JSON object that contains the rental app's information for Android and iOS in their respective fields.
rental_apps.android Object Conditionally required Contains rental app download and app discovery information for the Android platform in the store_uri and discovery_uri fields. If the system provider has an Android rental app, this field in required.
rental_apps.android.store_uri URI Required URI where the rental Android app can be downloaded from. This is typically a URI to an app store such as Google Play. If the URI points to an app store such as Google Play, we recommend that the URI follows Android best practices so the viewing app can directly open the URI to the native app store app instead of a website.
rental_apps.android.discovery_uri URI Required URI that has the form your_custom_scheme://your/path/here. The URI can be used by PackageManager.queryIntentActivities() to discover whether the rental Android app is installed on the device.
rental_apps.ios Object Conditionally required Contains rental app download and app discovery information for the iOS platform in the store_uri and discovery_uri fields. If the system provider has an iOS rental app, this field is required.
rental_apps.ios.store_uri URI Required URI where the rental iOS app can be downloaded from. This is typically a URI to an app store such as the Apple App Store. If the URI points to an app store such as the Apple App Store, we recommend that the URI follows iOS best practices so the viewing app can directly open the URI to the native app store app instead of a website.
rental_apps.ios.discovery_uri URI Required URI that has the form your_custom_scheme://. The URI can be used by UIApplication canOpenURL: to discover whether the rental iOS app is installed on the device.

Required: station_information.json

Refer to the GBFS specification as needed.

This feed defines the general information about public bikesharing stations.

Field name Type Requirement Description
stations Array Required An array of objects, where each object defines one and only one station.
stations[].source_id String Required Original ID from the original system feed, before aggregation.
stations[].station_id String Required The identifier of the station.
stations[].name String Required The public name of the station.
stations[].lat Latitude Required The WGS 84 latitude of the station, in decimal degrees format.
stations[].lon Longitude Required The WGS 84 longitude of the station, in decimal degrees format.
stations[].capacity Non-negative integer Optional A non-negative integer that represents the total number of docking points installed at the station, both available and unavailable.
stations[].rental_uris Object Required

A JSON object that contains rental URIs for Android, iOS, and web in their respective fields.

If these URIs are specified, they override the default deep links that were set when the provider was onboarded.

stations[].rental_uris.android URI Conditionally required

A URI that can be passed to an Android app with an android.intent.action.VIEW Android intent to support Android Deep Links. We recommend that you use Android App Links so that the viewing app doesn't need to manually manage the redirect of the user to the app store in the event that the user doesn’t have the provider application installed.

This URI should be a deep link specific to the individual station, not a general rental page that includes information for more than one station. The deep link should take the user directly to the station without any prompts, interstitial pages, or logins. Ensure that users can see the station even if they've never opened the application.

URIs aren't necessarily required to include the station_id for the station, as long as the partner has other means to identify the respective station. For example, the rental app can use other identifiers within the URI to uniquely identify the station.

If the partner has an Android rental app, this field is required.

Android App Links example: https://www.abc.com/app?sid=1234567890&platform=android

Deep Link without Android App Links example: com.abcrental.android://open.abc.app/app?sid=1234567890

stations[].rental_uris.ios URI Conditionally required

A URI that can be used on iOS to launch the rental app for the station. For more information about this, refer to Apple's article about iOS custom URL schemes. We recommend that you use iOS Universal Links so that the viewing app doesn't need to manually manage the redirect of the user to the app store in the event that the user doesn’t have the provider application installed.

This URI should be a deep link specific to the individual station, not a general rental page that includes information for more than one station. The deep link should take the user directly to the station without any prompts, interstitial pages, or logins. Ensure that users can see the station even if they've never opened the application.

URIs aren’t necessarily required to include the station_id for the station. The rental app can use other identifiers within the URI to uniquely identify the station.

If the partner has an iOS rental app, this field is required.

iOS Universal Links example: https://www.abc.com/app?sid=1234567890&platform=ios

Deep Link without iOS Universal Links example: com.abcrental.ios://open.abc.app/app?sid=1234567890

stations[].rental_uris.web URL Optional

A URL that can be used by a web browser to show more information about renting a vehicle at this vehicle.

This URL should be a deep link specific to the individual station, not a general rental page that includes information for more than one station. The deep link should take the user directly to the station without any prompts, interstitial pages, or logins. Ensure that users can see the station even if they've never opened the application.

URLs aren't necessarily required to include the station_id for the station or otherwise follow the semantic conventions of the rental URLs for Android or iOS. The rental app can use other identifiers within the URL that uniquely identify the station.

If this field is unset, it means that deep links aren't supported for the web browser.

Example value: https://www.abcrental.com/app?sid=1234567890

The following is an example for station_information.json:

"stations": [
  {
    "station_id": "597",
    "source_id": "x13f",
    "name": "Silverthorne Road, Battersea",
    "lat": 51.472865,
    "lon": -0.148059,
    "capacity": 10,
    "rental_uris": {
        "android": "https://www.abc.com/app?sid=1234567890&platform=android",
        "ios": "https://www.abc.com/app?sid=1234567890&platform=ios",
        "web": "https://www.abc.com/app?sid=1234567890&platform=web"
    }
  },
]

Required: station_status.json

Refer to the GBFS specification as needed.

This feed defines the up-to-date, current status of public bikesharing stations.

Field name Type Requirement Description
stations Array Required An array of objects, where each object defines one and only one station.
stations[].station_id String Required The identifier of the station.
stations[].num_bikes_available Non-negative integer Required

A non-negative integer that represents the number of functional bikes that are physically at the station and that may be offered for rental.

To determine whether the station currently rents bikes, you must inspect the station's is_renting field, and find a true Boolean value.

stations[].num_docks_available Non-negative integer Conditionally required

The field is required, unless the station has unlimited docking capacity. For example, virtual stations have unlimited docking capacities and the field isn't required.

A non-negative integer that represents the total number of functional docks physically at the station that are able to accept vehicle returns.

To determine whether the station currently accepts bike returns, you must inspect the station's is_returning field, and find a true Boolean value.

stations[].is_installed Boolean Required

A Boolean that indicates whether it's true that the station is currently on the street and installed.

If the station is installed on the street, set to 1.

If the station isn't installed on the street, set to 0.

stations[].is_renting Boolean Required

A Boolean that indicates whether it's true that the station currently rents bikes.

If the station currently rents bikes, set to 1. Even if the station is empty, if it's set to allow rentals is_renting is set to 1.

If the station doesn't currently rent bikes, set to 0.

stations[].is_returning Boolean Required

A Boolean that indicates whether it's true that the station currently accepts bike returns.

If the station currently accepts bike returns, set to 1. Even if the station is full, but would allow a return if it was not, is_returning is set to 1.

If the station doesn't currently accept bike returns, set to 0.

The following is an example of station_status.json:

"stations": [
        {
          "station_id": "2",
          "num_bikes_available": 6,
          "num_bikes_disabled": 0,
          "num_docks_available": 30,
          "num_docks_disabled": 0,
          "is_installed": 1,
          "is_renting": 1,
          "is_returning": 1,
          "last_reported": 1576119631
        },
]