API Reference
Complete Routing Engine API documentation
Overview
The Routing Engine API provides multi-stop route optimization for fleet operations.
Base URLs
| Environment | URL |
|---|---|
| Production | https://routing.moovex.ai/api/v1 |
| Staging | https://routing.staging.moovex.ai/api/v1 |
Authentication
All requests require a Bearer token:
Endpoints
| Endpoint | Description |
|---|---|
| Create Routes | Generate optimized trips from bookings |
| Get Route Result | Retrieve routing results |
| Single Route | Calculate route for a sequence of stops |
| Optimize Stop Order | Find optimal ordering for stops (TSP) |
| Distance Matrix | Calculate distances between points |
Data Types
Coordinates
| Field | Type | Description |
|---|---|---|
lat | number | Latitude |
lng | number | Longitude |
Job
| Field | Type | Required | Description |
|---|---|---|---|
id | string | Yes | Unique job identifier |
from | Coordinates | Yes | Pickup location |
fromAddr | string | No | Pickup address display name |
to | Coordinates | Yes | Drop-off location |
toAddr | string | No | Drop-off address display name |
pick | ISO8601 | Yes* | Requested pickup time |
drop | ISO8601 | Yes* | Requested drop-off time |
seats | number | Yes | Number of seats required |
passenger | string | No | Passenger name/identifier |
phone | string | No | Contact phone number |
attr | string[] | No | Required attributes (wheelchair, child_seat, etc.) |
unit | string | No | Site/unit identifier for multi-tenant routing |
private | boolean | No | If true, job cannot be shared with others |
forceJoin | string | No | Group ID - jobs with same value must route together |
waitAndReturnId | string | No | Links outbound and return legs |
profileName | string | No | Service profile name |
*Either pick or drop must be provided.
Trip
| Field | Type | Description |
|---|---|---|
id | string | Trip identifier |
jobIds | string[] | Jobs included in this trip |
stops | Stop[] | Ordered sequence of stops |
duration | number | Total trip duration (seconds) |
distance | number | Total trip distance (meters) |
seats | number | Total seats needed |
attr | string[] | Combined attributes from all jobs |
areas | string[] | Areas the trip passes through |
routeTrajectory | RouteTrajectory | Route geometry and leg details |
Stop
| Field | Type | Description |
|---|---|---|
loc | Coordinates | Stop location |
pickIds | string[] | Job IDs picking up at this stop |
dropIds | string[] | Job IDs dropping off at this stop |
date | ISO8601 | Scheduled arrival time |
name | string | Stop name/address |
wait | number | Wait time at stop (seconds) |
dur | number | Duration from previous stop (seconds) |
dis | number | Distance from previous stop (meters) |
RouteTrajectory
| Field | Type | Description |
|---|---|---|
geometry | string | Encoded polyline of the route |
distance | number | Total distance (meters) |
duration | number | Total duration (seconds) |
legs | RouteLeg[] | Per-segment details |
RouteLeg
| Field | Type | Description |
|---|---|---|
distance | number | Segment distance (meters) |
duration | number | Segment duration (seconds) |
RoutingSettings
| Setting | Type | Default | Description |
|---|---|---|---|
maxSinglePassengerTime | RangeValue | 60 | Max passenger ride time (minutes) |
maxTripDuration | RangeValue | 120 | Max total trip duration (minutes) |
maxTripStops | number | 10 | Maximum stops per trip |
maxPickupStops | number | - | Maximum pickup stops per trip |
maxDropoffStops | number | - | Maximum drop-off stops per trip |
maxPassengers | number | 8 | Maximum total passengers per trip |
maxPassengersAtOnce | number | 4 | Max passengers at any point |
maxReservationsAtOnce | number | 4 | Max jobs at any point |
sharedRideRatio | number | 1.5 | Max shared-ride vs direct ratio |
sharedRideDifferenceLimit | number | 15 | Max additional minutes vs direct |
maxBoardingDelay | number | 15 | How late driver can arrive (minutes) |
maxBoardingEarly | number | 15 | How early driver can arrive (minutes) |
maxDropOffDelay | number | 15 | How late for drop-off (minutes) |
maxDropOffEarly | number | 15 | How early for drop-off (minutes) |
tripBoardingTime | number | 120 | Time to complete pickup (seconds) |
tripDropOffTime | number | 60 | Time to complete drop-off (seconds) |
waitForBoardingTime | boolean | false | Wait until exact pickup time |
onlyPrivate | boolean | false | Disable all ride sharing |
isClusteringEnabled | boolean | true | Enable stop clustering |
clusterReservationsRadius | number | 200 | Cluster radius (meters) |
RangeValue
For settings that vary by distance:
| Field | Type | Description |
|---|---|---|
value | number | Default value |
ranges | Range[] | Distance-based overrides |
ranges[].from | number | Start distance (meters) |
ranges[].to | number | End distance (meters) |
ranges[].value | number | Value for this range |
Example:
Error Codes
| Code | Status | Description |
|---|---|---|
invalid_job | 400 | Invalid job data |
no_route | 400 | Cannot find route |
timeout | 408 | Routing exceeded time limit |
auth_failed | 401 | Invalid API key |
rate_limited | 429 | Too many requests |