Overview
The Mobaro API gives your BI tools and other systems RideOps and performance data: every dispatch and queue time recorded at a ride, hourly ride statistics, who is signed in at each position, and how Locations are doing against their scheduled Checklists. It also lets ride-counting and queue systems send their own dispatches and queue times into Mobaro.
For the dashboard widgets that show the same data, see RideOps dashboard widgets. Safari AI, DMT RideGuard and Attractions.io have ready-made integrations: see Set up the Safari AI integration for RideOps, Set up the DMT RideGuard integration and Set up the Attractions.io integration for RideOps.
At a glance |
|
Who can do this | An integration with an API key. Reading works with a Read-only key; sending external data needs a key that isn't Read-only. |
Where |
|
Works on | Public API. Data comes from RideOps and the Mobile app; external data shows in RideOps dashboard widgets. |
Availability | API access, enabled per organization by Mobaro — ask your CSM |
Read RideOps data
Every RideOps endpoint covers one Location. Send Location (a Location ID), and for everything except attendants From and To as ISO 8601 date-times in UTC, for example 2026-07-01T00:00:00Z. One request covers at most 31 days. TimeZone is optional: an IANA name such as Europe/Copenhagen or America/New_York sets the time zone of the times returned and of the hourly statistics. Without it, Mobaro uses UTC.
GET https://app.mobaro.com/api/customers/rideops/dispatches?Location=locations/345678-A&From=2026-07-01T00:00:00Z&To=2026-07-02T00:00:00Z&TimeZone=Europe/Copenhagen
x-api-key: YOUR_API_KEY
Endpoint | Returns |
| Each dispatch recorded in RideOps: |
| Each queue time entered in RideOps: |
| One interval per hour with |
| Now, not a period: the signed-in |
| Dispatches sent by integrations. |
| Queue times sent by integrations: |
Statistics are calculated from RideOps dispatches only, not external ones. For a Location's current open or closed state and latest queue time, use GET /api/customers/locations/{id}: its operations field is filled for Locations with Operational Logging.
Send external dispatches and queue times
A ride-counting or queue system can send its own data with POST /api/customers/rideops/external-dispatch and POST /api/customers/rideops/external-queue-entry:
{
"location": "locations/345678-A",
"source": "Other",
"timeStamp": "2026-07-01T10:15:30Z",
"entry": {
"riders": 22,
"dispatchUnitCapacity": 24,
"dispatchUnitsAvailable": 5,
"totalUnavailableCapacity": 0,
"dispatchUnitCapacityAvailable": 24,
"utilization": 91.7
}
}source:"Other"for your own system."SafariAi","Purematic"and, for dispatches,"DmtRideGuard"are reserved for those integrations. Left out, it's"Other".timeStamp: when it happened, in UTC. Left out, Mobaro uses the time it receives the request.A queue entry's
entryhasqueueTimeInMinutesandqueueSize.An unknown
locationreturns 404 Not Found. Entries can't be edited or deleted afterwards.
External entries show in the Operational Log as External Dispatch and External Update Queue, feed RideOps dashboard widgets whose Source is External, and fire the Dispatches and Queue times webhooks. Read them back with the external endpoints, using the same Source value.
⚠️ Heads-up: Mobaro stores what you send as it is and doesn't check the numbers. Send dispatchUnitCapacityAvailable and utilization yourself: Mobaro doesn't calculate them.
Read performance by Location
GET /api/customers/performance/ByLocationsAndGroups returns the figures behind the Performance by Locations and Groups widget: how many scheduled Checklists each Location has in a period, how many were done, and their scores.
Parameter | What to send |
| Required. The period, up to 93 days. The error for a longer period currently says 62 days; the limit applied is 93. |
| Required. How a Checklist's slot must fall in the period: |
| Required. |
Filters | Optional |
Each item has expectedResults (every scheduled Checklist in the period) split into results (completed), missingResults, overdueUnits, unitsAvailableNow and unitsAvailableLater. It also has resultsRequiringApproval, approvedResultsRequiringApproval, approvedMissingResults, averageResultsScore and averageExpectedResultsScore, which counts Checklists not done as 0. Only Checklists with a slot count: Continuous Schedules have none. See Readiness by Locations and Groups Widget. All items come in one response.
Best practices
Pull RideOps data a day at a time, and step through longer periods in chunks of 31 days or less.
Always send
TimeZoneso hours line up with your park's day.Send external data with a
timeStampin UTC, and use"Other"as the source for your own systems.Use a separate API key for each system that sends data.
Frequently asked questions
Can our guest app get live wait times and ride status from Mobaro?
Yes. GET /api/customers/locations/{id} returns each Operational Logging Location's open or closed state and latest queue time. To push them to the app instead, use webhooks or the Attractions.io integration.
Can I export ridership data to Excel?
Yes, through the API: pull /rideops/dispatches or hourly /rideops/statistics per Location, up to 31 days at a time, into Excel or Power BI.
Why do I get 400 Bad Request from a RideOps endpoint?
Check that the period is 31 days or less, To is after From, TimeZone is an IANA name, and external endpoints have a Source. The response names the problem.
Why is the external data I read back empty?
Source must match what was sent exactly, for example SafariAi or Other, and the period must include the entries' timestamps.
