Skip to main content

RideOps and performance data through the API

Read RideOps dispatches, queue times, statistics and attendants, send external ride data, and pull Performance by Locations and Groups figures via the API.

Written by Logan Bowlby

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

/api/customers/rideops/… and /api/customers/performance/ByLocationsAndGroups. Keys: Configuration › API › API Keys

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

/rideops/dispatches

Each dispatch recorded in RideOps: when, user (the Operator), riders, dispatchUnitCapacity, dispatchUnitsAvailable, dispatchUnitCapacityAvailable and totalUnavailableCapacity.

/rideops/queue

Each queue time entered in RideOps: when, user and queueTimeInMinutes.

/rideops/statistics

One interval per hour with riders, dispatches, capacityUtilization and dispatchUtilization (percent) and averageDispatchTime (seconds). Values that can't be calculated, for example for hours the ride wasn't open, are null.

/rideops/attendants

Now, not a period: the signed-in operator, and each configured position with its name, whether it's mandatory, and the attendant signed in to it. Needs only Location.

/rideops/external-dispatches

Dispatches sent by integrations. Source is required.

/rideops/external-queue

Queue times sent by integrations: queueTimeInMinutes and queueSize. Source is required.

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 entry has queueTimeInMinutes and queueSize.

  • An unknown location returns 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

From, To

Required. The period, up to 93 days. The error for a longer period currently says 62 days; the limit applied is 93.

TimeRangeType

Required. How a Checklist's slot must fall in the period: Overlaps, StartsWithin, EndsWithin or ContainedWithin (the widget's Overlaps, Starts, Ends and Starts and ends).

GroupByLocationGroup

Required. true returns Location Groups (top-level ones unless you filter by LocationGroups) with their sub-groups and Locations in children; false returns one item per Location.

Filters

Optional Locations, LocationGroups, Checklists, ChecklistCategories and Schedules (IDs; repeat the parameter).

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 TimeZone so hours line up with your park's day.

  • Send external data with a timeStamp in 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.

Did this answer your question?