API Documentation

Navora provides three REST APIs for route optimization and navigation. All endpoints accept JSON via POST, require authentication, and return JSON responses.

Base URL

https://resolt-navora-api.azurewebsites.net

All endpoint paths below are relative to this base URL.

Authentication

Every request must include your accountId and apiKey in the JSON body. These are validated against your account on every call. If invalid or suspended, the API returns 401 Unauthorized.

// Include in every request body { "accountId": "your-account-guid", "apiKey": "your-api-key", ... }

Error Handling

StatusMeaning
200Success
400Bad request — invalid input, too many tasks/vehicles, or route could not be calculated
401Unauthorized — invalid accountId or apiKey, or account suspended
500Internal server error — includes detail message

Error responses return JSON: { "error": "description" }



POST /api/route

Multi-stop ordered routing. Supply a sequence of locations and receive a route that visits them in the exact order provided. Returns the same response format as /api/navigate.

Request Body
FieldTypeRequiredDescription
accountIdstringYesYour account GUID
apiKeystringYesYour API key
locationsGeoLocation[]YesOrdered list of stops (minimum 2)
profilestringNoCar (default) or Bike
preferencestringNoFastest (default) or Shortest
Example Request
POST https://resolt-navora-api.azurewebsites.net/api/route Content-Type: application/json { "accountId": "6ffdea07-8957-49ba-9e0b-5dbce4b86d87", "apiKey": "your-api-key", "profile": "Car", "preference": "Fastest", "locations": [ { "latitude": -26.2041, "longitude": 28.0473 }, { "latitude": -26.1452, "longitude": 28.0364 }, { "latitude": -26.1076, "longitude": 28.0567 }, { "latitude": -25.9891, "longitude": 28.1275 } ] }
Response

Same format as /api/navigate response — distanceKm, duration, encodedPolyline, and steps.


POST /api/optimize

Fleet Matrix Routing — assign tasks to vehicles optimally. Supports capacity constraints, time windows, multi-depot, chained stops, priority levels, vehicle specialties, and four quality tiers.

Request Body
FieldTypeRequiredDescription
accountIdstringYesYour account GUID
apiKeystringYesYour API key
tasksRouteTask[]YesTasks to assign (max 200)
vehiclesVehicle[]YesAvailable vehicles (max 20)
modestringNoBalanced (default), Shortest, or Fastest
qualitystringNoQuick (default), Standard, Refined, or Exhaustive
chainsTaskChain[]NoTask ordering constraints
departureTimeDateTimeOffsetNoDeparture time (defaults to UTC now)
includeGeometryboolNoInclude road polylines per route
Example Request
POST https://resolt-navora-api.azurewebsites.net/api/optimize Content-Type: application/json { "accountId": "6ffdea07-8957-49ba-9e0b-5dbce4b86d87", "apiKey": "your-api-key", "mode": "Balanced", "quality": "Refined", "includeGeometry": false, "vehicles": [ { "id": "v1", "name": "Small Van", "startDepot": { "id": "depot-1", "name": "JHB Central", "location": { "latitude": -26.2041, "longitude": 28.0473 } }, "endDepot": { "id": "depot-1", "name": "JHB Central", "location": { "latitude": -26.2041, "longitude": 28.0473 } }, "capacity": 50, "required": true } ], "tasks": [ { "id": "t1", "name": "Deliver to Sandton", "location": { "latitude": -26.1076, "longitude": 28.0567 }, "type": "Delivery", "serviceDuration": "00:10:00", "demand": 15 } ] }
Response
{ "accountId": "6ffdea07-8957-49ba-9e0b-5dbce4b86d87", "solution": { "quality": "Refined", "mode": "Balanced", "totalDistanceKm": 42.5, "totalDuration": "01:15:00", "computedAt": "2025-01-15T10:30:00Z", "routes": [ { "vehicleId": "v1", "vehicleName": "Small Van", "stops": [ ... ], "distanceKm": 42.5, "duration": "01:15:00" } ], "unassignedTasks": [] } }

Enums

All enums can be passed as string names or integer values.

NavigationProfile
Car0Standard driving profile
Bike1Bicycle routing
RoutePreference
Fastest0Minimise travel time
Shortest1Minimise distance
OptimizationMode
Balanced0Balance distance and time
Shortest1Minimise total distance
Fastest2Minimise total time
SolutionQuality
Quick0~5 seconds
Standard1~15 seconds
Refined2~30 seconds
Exhaustive3~120 seconds
RouteTaskType
Delivery0Drop-off task
Collection1Pick-up task
Service2On-site service

Models

GeoLocation
FieldTypeDescription
latitudedoubleLatitude in decimal degrees
longitudedoubleLongitude in decimal degrees
Vehicle
FieldTypeRequiredDescription
idstringYesUnique vehicle identifier
namestringYesDisplay name
startDepotDepotYesWhere the vehicle starts
endDepotDepotYesWhere the vehicle returns
capacitydouble?NoLoad capacity
maxTasksint?NoMaximum tasks this vehicle can handle
maxDistanceKmdouble?NoMaximum route distance
maxDurationTimeSpan?NoMaximum route duration
requiredboolNoIf true, vehicle must be used
specialtiesstring?NoComma-delimited specialties (e.g. "refrigerated,hazmat")
Depot
FieldTypeRequiredDescription
idstringYesUnique depot identifier
namestringYesDisplay name
locationGeoLocationYesDepot coordinates
RouteTask
FieldTypeRequiredDescription
idstringYesUnique task identifier
namestringYesDisplay name
locationGeoLocationYesTask coordinates
typestringNoDelivery (default), Collection, or Service
serviceDurationTimeSpan?NoTime spent at location
timeWindowTimeWindow?NoEarliest/latest arrival constraint
priorityintNo1 (default) = normal, higher = more important
demanddoubleNoLoad demand (counted against vehicle capacity)
chainIdstring?NoChain group identifier
chainOrderintNoOrder within the chain
specialtiesstring?NoRequired vehicle specialties
TaskChain
FieldTypeRequiredDescription
chainIdstringYesMatches the chainId on tasks
taskIdsstring[]YesOrdered list of task IDs in this chain
allowInterleavedStopsboolNoIf true, other stops may appear between chained tasks
TimeWindow
FieldTypeDescription
earliestDateTimeOffsetEarliest allowed arrival
latestDateTimeOffsetLatest allowed arrival