Travo for Developers

Delivery quotes, on your website.

Show live Travo prices for parcels, travel, haulage and drivers on your own site or app. One REST call, your API key, and a price in Naira.

REST + JSON 4 services Kobo amounts v1
  get a quote in one call
curl -X GET 'https://app.travo.ng/v1/service-quotes' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{ "pickup": {...}, "dropoff": {...},
       "entities": [{"type":"parcel"}],
       "service": "<service id>",
       "single": true }'

# → { "id": "quote_uK83KEA",
#      "amount": 566180, "currency": "NGN", ... }

Overview

The Travo API gives your website or app access to the same pricing engine that powers travo.ng. Send a pickup and a delivery location, choose a service, and get a live price back.

Typical flow: your customer enters details on your site, your server calls the API with your key, and you show the price with the Travo logo and links.

Base URL: https://app.travo.ng/v1  ·  HTTPS only, JSON bodies, amounts in kobo (₦5,661.80 = 566180).

Authentication

Send your secret API key as a Bearer token on every request. Keys are issued per website or company and can be revoked at any time.

Headers
Authorization: Bearer YOUR_API_KEY
Content-Type: application/json
Accept: application/json
Keep your key on your server. Never put it in browser JavaScript, HTML or a mobile app. Call the API from your backend and send only the result to the browser. If a key is exposed, ask us to revoke it and issue a new one.

Need a key? Request access with your company name and website. Each key is issued for one website, so please tell us which website you will use it on.

Get a quote

GET /v1/service-quotes
FieldTypeRequiredDescription
pickupobjectYesPickup place (see Place object)
dropoffobjectYesDelivery or destination place
servicestringYesService ID from Service IDs
service_typestringExcept TravelService type of the chosen service
entitiesarrayYesAlways [{ "type": "parcel" }]
singlebooleanYesAlways true. Returns one quote.
Send the fields as a JSON body. This endpoint is a GET request that reads a JSON body, the same way the curl example below does. Use Content-Type: application/json. Some HTTP clients drop the body on GET requests, so if you get a "field is required" error, test with curl first.
curl · Send Parcel (up to 1 kg)
curl -X GET 'https://app.travo.ng/v1/service-quotes' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json' \
  -H 'Accept: application/json' \
  -d '{
    "pickup": {
      "street1": "Victoria Island, Lagos",
      "location": { "type": "Point", "coordinates": [3.4216, 6.4281] }
    },
    "dropoff": {
      "street1": "Ikeja, Lagos",
      "location": { "type": "Point", "coordinates": [3.3515, 6.6018] }
    },
    "entities": [{ "type": "parcel" }],
    "service": "32b07dd9-33ba-43d7-b27f-59b76bbc409c",
    "service_type": "ship-a-parcel-or-package-send-parcel",
    "single": true
  }'
Response · 201
{
  "id": "quote_uK83KEA",
  "amount": 566180,
  "currency": "NGN",
  "items": [
    { "details": "Base Fee",    "amount": 150000, "currency": "NGN", "code": "BASE_FEE" },
    { "details": "Service Fee", "amount": 416180, "currency": "NGN", "code": "BASE_FEE" }
  ],
  "request_id": "request_eVntVpb"
}

amount is the total in kobo. Divide by 100 to show Naira. id is the quote ID, keep it for reference. Only service and service_type change between services.

Service IDs

Use the Service ID in the service field, with the matching service_type. Each ID is one option with its own price. For Send Parcel, choose the ID that matches the parcel weight.

Send Parcel

service_type: ship-a-parcel-or-package-send-parcel

OptionService ID
Up to 1 kg32b07dd9-33ba-43d7-b27f-59b76bbc409c
2.01 to 2.5 kga82479f9-8d14-4dcb-b5c1-71c9e456d570
2.51 to 3 kg59400ffd-11d2-4768-a9ae-a3d86c9d00ac
3.01 to 3.5 kgbe985ea0-ce91-476e-b6dc-b6c698103131
3.51 to 4 kg34be13dd-2ea2-4246-9bd2-66c98ac33ef7
4.01 to 4.5 kg3c7858ee-f2d7-48c1-95fc-40f3bd382d2c
4.51 to 5 kgfe4fb778-5eca-40bd-a997-7d4b762e99d2
5.01 to 5.5 kgf5cd8a17-6723-445f-b77d-db5f3713957d
5.51 to 6 kgdd0cd7c2-4bb4-4628-9468-bdffb1f8177b
6.01 to 7 kg25d8118e-ebff-4742-8da7-8f9f7abcb142
7.01 to 8 kg45659774-7a31-4994-8ad3-31d8fb2bf8b5
8.01 to 9 kg1860243e-1bdc-4a8f-a50c-84317b4b42e8
9.01 to 10 kgb61fbb31-2361-4dc3-9b16-cc6735a78cc1
10.01 to 11 kg13e28f94-bf3a-4a14-ab8c-c713d2efed0e
11.01 to 12 kgec09a906-f224-4552-9fc7-c00abf2b5a9e
12.01 to 13 kg17269244-6d9c-428d-93b0-1484d1ab33a5
13.01 to 14 kg4414b293-de9b-4911-8e9d-70b674bf270d
14.01 to 15 kg55bbb20d-d50b-44ea-8d45-ff60e33c2cc4
15.01 to 16 kg3d09d256-7520-4cd4-84d5-58007794538b
16.01 to 17 kg4849084b-84ac-491b-84bd-0cba6515dbe3
17.01 to 18 kgc65b2f67-4987-49e5-9afe-5b65a139a3d8
18.01 to 19 kg3aacbb5b-5be1-4c71-88eb-aae58d21a902
19.01 to 20 kg753f0e94-7c25-4358-bb05-91c598495632
20.01 to 30 kgdf243b05-708c-4088-88c3-af26f39e7c00
30.01 to 40 kgd89ad206-a7f6-4f34-891d-c88c027ec6bd
40.01 to 50 kg9a3f5e8b-91e4-4b04-ab9a-e35b2f977020
Ship a Barrel (220 litre)9de4d00e-a8a4-4aeb-b844-0f5d72eaeb86

Travel

service_type: not required

OptionService ID
Single Ticket (Standard)de1b6aa0-eb64-48e8-9ce9-006f4735745d

Haulage

service_type: haulage-book-a-van-or-truck

OptionService ID
Small Van (Korope)eaf7fa38-5c81-4aad-bd59-699e84d1caf1
Medium Van (Up to 3 Tons)612ab201-ce27-4c38-a099-e8649b9d9f8f
Closed Body Truck (7 Tons)0c3006dd-c579-4c4e-af78-944ba9eb8838
Closed Body Truck (15 Tons)97469c66-c207-4959-902e-882ac88e74e8
Heavy Duty Truck (30 Tons)79c8bf27-e308-41f4-aa3c-1283dd6d5808
Heavy Duty Truck (40 Tons)d27ac161-f687-44d4-93f7-e5b7ef3178bb
Flatbed Truck (30 Tons)156c6fe5-3f0e-4cd4-8f91-cdb4aec32c72
Flatbed Truck (40 Tons)ec19665c-0ead-4a0c-81b9-7322b69be399
Tow Truck - Single Vehicle Recovery & Delivery32e171e4-7e80-4260-a843-cad8fabc943f

Driver

service_type: driver-book-a-cardriver

OptionService ID
Small Car (3 passengers)6ecee57f-6454-4cce-bc31-e12ed8a53220
Large Car (5 passengers)2304eb86-caea-45e7-85c2-fcc15f9111e5
Mini Bus (14 passengers)0fb4b66e-b611-435d-940d-ee747dc30dc3
Coach (60 passengers)ec7b78a8-dadd-46c0-abfb-a3f6e22532cf
FOOD DISPATCH RIDERf441dc5c-8f94-457e-9180-aae72c575e6a

Parcels above 50 kg: please contact Travo for a custom quote.

Objects & fields

Place

FieldRequiredNotes
street1YesAddress text
nameNoPlace name, for example an airport or landmark
location.typeYesAlways Point
location.coordinatesYes[longitude, latitude]. Longitude comes first.

Convert your customer's address to coordinates with a geocoding service (for example Google Geocoding) before calling the API.

Errors

Error body
{
  "error": "The pickup field is required.",
  "errors": [ "The pickup field is required." ]
}
StatusMeaning
401Missing or invalid API key. Check the Authorization header.
405Wrong method. Use GET for /v1/service-quotes.
422Missing or invalid field. The errors list names each problem.
429Too many requests. Wait and retry.
5xxServer error. Retry later or contact support.

Try it: live quote form

Enter your details and start typing an address, then pick it from the suggestions to see a live Travo quote. Partners can also see how the branding and payment details are shown.

      Request API keys

      Tell us your company and the website where you will use the API. We issue one key per website.

      Branding rules

      Websites that show Travo quotes must display the Travo logo and link to both Travo sites next to the price.

      • Show the Travo logo: https://services.travo.ng/wp-content/uploads/2025/04/blog-logo.png
      • Link to travo.ng and services.travo.ng
      • Show prices as amount / 100 in Naira

      Developer support

      Integrating? Message the line with the "DEV API:" prefix for routing to someone technical, or email hello@travoservices.com.

      DEV API: WhatsApp line Request API keys →

      WhatsApp Chat