Get drivers in viewport with automatic clustering based on zoom level.
Returns clusters for areas with many drivers and individual markers
for areas below the clustering threshold. The clustering behavior
adapts based on zoom level:
- Street view (zoom >= 17): Always show individual drivers
- City view (zoom <= 8): Cluster aggressively (> 2 drivers)
- Standard zoom: Cluster when > 5 drivers in a cell
# Arguments
* input.bounds - Viewport bounds (sw/ne corners)
* input.zoom - Map zoom level (1-20)
* input.online_status - Optional filter by Online or Busy
# Example
Get available ride options for a specific service class
Returns all active ride options with their pricing configuration
# Arguments
* service_class_id - The service class to get options for
* currency - Currency to display fees in (defaults to USD)
Explain whether a driver is eligible for a given service class.
Runs the same EligibilityEvaluator the dispatch path uses, so the
answer is authoritative — no chance of admin and dispatch
disagreeing. When the driver is ineligible, returns the structured
reasons so support can pinpoint the failing dimension.
# Authorization
Requires TenantAdmin or PlatformAdmin role.
Get nearby driver coordinates for map display.
Returns 5-20 nearby available drivers around a center point for UI visualization.
This is a lightweight query - it only returns driver IDs, coordinates, and ratings.
# Arguments
* input.center - Center coordinates to search from
* input.limit - Max drivers to return (5-20, default 10)
* input.radius_meters - Search radius in meters (default 5000m)
# Example
Get recent unique travel locations (pickup/dropoff addresses) from order history.
Returns locations deduplicated by coordinates, ordered by most recent usage.
Useful for showing users their frequently used addresses for quick selection.
# Arguments
* limit - Maximum number of unique locations to return (default: 5, max: 20)
# Example
graphqlquery {
recentTravelLocations(limit: 5) {
id
coordinates { latitude longitude }
formattedAddress
label
kind
lastUsedAt
}
}
Get a single ride option pricing by ID.
# Authorization
Requires TenantAdmin role.
# Arguments
* id - Ride option pricing ID
* currency - Currency to display fee in (defaults to USD)
List ride option pricings with pagination and filtering.
# Authorization
Requires TenantAdmin role.
# Arguments
* input - Filter and pagination options
* currency - Currency to display fees in (defaults to USD)
Get the current tenant's vehicle catalog config. Returns the
"show everything" defaults when no row exists yet — so callers
always get a non-null payload they can render straight into the
settings UI.
Get paginated list of active vehicle colors
Returns colors available for the tenant (tenant overrides + global colors).
Results are ordered by position.
Get paginated list of active vehicle models
Returns models available for the tenant (tenant overrides + global models).
Optionally filter by make_id.
Results are ordered by position.
Manually assign a driver to an order.
# Authorization
Requires TenantAdmin or PlatformAdmin role.
# Arguments
* input - The driver assignment input containing orderId, driverId, and optional force flag
# Returns
The assignment response containing success status, updated order, and optional message.
# Errors
- Unauthorized: If caller is not an admin
- NotFound: If order or driver does not exist
- InvalidState: If order is not in a dispatchable state or driver is not approved
- InvalidState: If order already has a driver and force=false
Swap the payment method used for an active taxi order.
Allowed any time before the payment for the order is captured (i.e.
from booking through end-of-ride payment confirmation). The new method
is authorized / debited first; only on success is the previous method
voided or refunded.
# Errors
- INVALID_INPUT — missing/extra payment_method_id for the chosen type.
- INVALID_STATE — order is in a terminal state, already captured, or the
new method needs 3DS verification (not supported in swap flow today).
- PAYMENT_FAILED — PSP declined the new method.
- UNAUTHORIZED — caller is not the order owner.
Confirm the metered fare submitted by driver.
Called by passenger after reviewing the driver-submitted fare.
Once confirmed, payment is captured and the ride is completed.
Confirm a pending payment after 3DS or other client-side authentication.
This mutation is called when a customer completes payment authentication
(e.g., 3DS) for an order that was in PendingPayment status.
On success:
- The order will transition to Dispatching status
- A dispatch job will be enqueued to find drivers
On failure:
- A payment block will be created for the customer
- The order will be cancelled
- The customer must resolve the payment issue before creating new orders
Pay additional amount for an order that exceeded pre-authorization.
When a ride's final cost exceeds the pre-authorized amount, the order
enters PendingAdditionalPayment status. The customer must pay the
excess amount before the order can be completed.
This mutation processes the additional payment and, if successful,
transitions the order to Completed status.
# Arguments
* input - Payment details including order ID and payment method
# Returns
Payment result with status and any required client actions (e.g., 3DS)
# Errors
- InvalidState - Order is not in PendingAdditionalPayment status
- Unauthorized - Caller is not the order owner
- PaymentFailed - Payment processing failed
Reject a driver's photo with a reason.
Sets the driver's photo status to Rejected and stores the rejection reason.
# Authorization
Requires TenantAdmin or PlatformAdmin role.
Set driver status to offline (unavailable for orders)
This mutation:
- Sets the driver as unavailable
- Removes driver info from Redis cache (demotes from online pool)
Set driver status to online (available for orders)
This mutation:
- Validates that the driver is approved
- Infers the zone from the provided coordinates
- Updates the driver's location
- Sets the driver as available
- Promotes driver info to Redis cache for quick dispatch
Set the service classes for a driver.
Replaces all existing service class assignments with the provided list.
Pass an empty array to remove all service class assignments.
# Authorization
Requires TenantAdmin or PlatformAdmin role.
Set or clear a single (driver, service class) eligibility override.
INCLUDE forces the driver eligible regardless of dynamic criteria.
EXCLUDE forces the driver ineligible regardless of dynamic criteria.
CLEAR removes any existing override; eligibility falls back to
pure criteria evaluation (or to manual-roster check on Manual
classes).
Note: this only persists the override row. The driver's currently
cached eligible-set updates next time they go online; for an
immediate effect, an admin can also force-offline the driver.
# Authorization
Requires TenantAdmin or PlatformAdmin role.
Toggle a driver's VIP-class eligibility. Default is true for all
drivers; admins flip to false to exclude a specific driver from
VIP-tier dispatch (without revoking the qualifying ratings/vehicle).
Requires TenantAdmin or PlatformAdmin role.
Set the regions for a service class.
Replaces all existing region links with the provided list.
Pass an empty regionIds array to remove all region links.
# Authorization
Requires TenantAdmin role.
Submit vehicle details during driver onboarding
This mutation:
- Validates that the driver is in Pending status
- Validates that the vehicle model and color exist
- Updates the driver's vehicle information
- Changes driver status to PendingReview for admin approval
After calling this mutation, the driver must wait for admin approval
before they can start accepting rides.
Update driver's GPS location while online
This mutation:
- Updates driver's GPS coordinates in Redis cache
- Recalculates H3 geospatial indexes if location changed significantly
- Updates zone in PostgreSQL if driver moved to a different zone
- Does NOT update PostgreSQL on every location ping (only Redis for performance)
Update the wait/stopover time for an active taxi order.
Recalculates the stopover fee based on the service class per-minute rate
and updates the order total accordingly.
Update driver's preferred search radius for ride offers
This mutation:
- Persists the search radius to PostgreSQL
- Updates Redis cache if the driver is currently online (dual-write)
- Can be called whether driver is online or offline
- Set to null to use service class default radius
Update the three include-globals toggles. Preserves any per-row
hidden globals already set — switching the toggle off doesn't
erase the cherry-picked suppressions.
Subscribe to driver events (Taxi service)
Receive real-time events relevant to taxi drivers:
- New ride offers dispatched to you
- Ride acceptance confirmations
- Trip lifecycle events (start, complete, cancel)
- Chat messages from passengers
- Earnings updates
- Notifications
**Requirements:**
- Must be authenticated
- Must have Driver role
- Must be using Taxi app
Example:
graphqlsubscription {
driverEvents {
__typename
... on RideOfferEvent {
orderId
pickupAddress
fare
expiresAt
}
... on TripStartedEvent {
orderId
startedAt
}
}
}