Choose a data submission method
Once you have a feed that is syntactically valid (even if it does not contain any data), you’re ready to set up the method you’ll use to provide your data to Google.
You can deliver realtime transit data one of two ways: fetch, which allows Google to retrieve your data from a web-location, or push, which allows you to upload your data programmatically.
With fetch delivery, you host each of your realtime feeds at their own web-location and Google pulls the data from this location every 30 seconds. You can make your feed data available to Google in two ways:
Host your GTFS-realtime feed on a web server
Use a web application server to generate and serve your data
Each of the different realtime feed data types (trip updates, service alerts, vehicle positions) must have its own unique, separate URL.
Push delivery allows you to periodically provide (or “push”) your data to Google programmatically. With push programmatic upload, you set up automatic uploads of your GTFS-realtime via HTTP POST, using OAuth2.0 authentication to ensure the security of your realtime feed.
To provide users with the most accurate and up-to-date transit information possible, we recommend that you push realtime updates frequently. Ideally, you should push trip update data every 30 seconds, and service alert data every 30 seconds to two minutes.
Note: you don't need to create new API or client IDs for push uploads.
You should use an HTTP POST request to upload to the partnerdash.
curl equivalent is:
--header "authorization: Bearer xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" \
-F "alkali_application_name=transit" \
-F "alkali_account_id=[your account id (*)]" \
-F "alkali_upload_type=realtime_push_upload" \
-F "alkali_application_id=100003100" \
-F "realtime_feed_id=[your realtime feed_name e.g. us-myfeed-updates]" \
-F "file=@/path/to/file" \
(*) The account id is the value of the 'a' parameter in the URL of your Transit Partner Dashboard
The push uploads url is: