curl -X POST "$RUN_BASE_URL/business/order/cost" \
-H "Authorization: Bearer $RUN_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"pickup_address": "15 Bode Thomas Street, Surulere, Lagos",
"dropoff_address": "24 Allen Avenue, Ikeja, Lagos",
"weight": 2,
"vehicle_type": "bike"
}'
const res = await fetch(`${process.env.RUN_BASE_URL}/business/order/cost`, {
method: 'POST',
headers: {
Authorization: `Bearer ${process.env.RUN_API_KEY}`,
'Content-Type': 'application/json',
},
body: JSON.stringify({
pickup_address: '15 Bode Thomas Street, Surulere, Lagos',
dropoff_address: '24 Allen Avenue, Ikeja, Lagos',
weight: 2,
vehicle_type: 'bike',
}),
});
const quote = await res.json();
import os
import requests
res = requests.post(
f"{os.environ['RUN_BASE_URL']}/business/order/cost",
headers={
"Authorization": f"Bearer {os.environ['RUN_API_KEY']}",
"Content-Type": "application/json",
},
json={
"pickup_address": "15 Bode Thomas Street, Surulere, Lagos",
"dropoff_address": "24 Allen Avenue, Ikeja, Lagos",
"weight": 2,
"vehicle_type": "bike",
},
)
quote = res.json()
<?php
$ch = curl_init(getenv('RUN_BASE_URL') . '/business/order/cost');
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_POST => true,
CURLOPT_HTTPHEADER => [
'Authorization: Bearer ' . getenv('RUN_API_KEY'),
'Content-Type: application/json',
],
CURLOPT_POSTFIELDS => json_encode([
'pickup_address' => '15 Bode Thomas Street, Surulere, Lagos',
'dropoff_address' => '24 Allen Avenue, Ikeja, Lagos',
'weight' => 2,
'vehicle_type' => 'bike',
]),
]);
$quote = json_decode(curl_exec($ch), true);
curl_close($ch);
package main
import (
"bytes"
"fmt"
"io"
"net/http"
"os"
)
func main() {
body := []byte(`{
"pickup_address": "15 Bode Thomas Street, Surulere, Lagos",
"dropoff_address": "24 Allen Avenue, Ikeja, Lagos",
"weight": 2,
"vehicle_type": "bike"
}`)
req, _ := http.NewRequest(
"POST",
os.Getenv("RUN_BASE_URL")+"/business/order/cost",
bytes.NewReader(body),
)
req.Header.Set("Authorization", "Bearer "+os.Getenv("RUN_API_KEY"))
req.Header.Set("Content-Type", "application/json")
res, err := http.DefaultClient.Do(req)
if err != nil {
panic(err)
}
defer res.Body.Close()
out, _ := io.ReadAll(res.Body)
fmt.Println(string(out))
}
{
"price": 5000,
"distance_km": 12.4,
"currency": "NGN",
"pricing_model": "rate_card",
"option_id": "band_0_2_5",
"option_label": "0.5–2.5 kg",
"delivery_mode": "MOTORBIKE",
"from_zone_name": "Surulere",
"to_zone_name": "Ikeja / Omole / Agege / Magodo / Ogba"
}
{
"statusCode": 400,
"timestamp": "2026-08-12T15:18:51.396Z",
"path": "/api/v2/business/order/cost",
"message": "weight must not be less than 0.1"
}
{
"statusCode": 401,
"timestamp": "2026-08-12T15:18:51.396Z",
"path": "/api/v2/business/order/cost",
"message": "Invalid API key"
}
{
"statusCode": 403,
"timestamp": "2026-08-12T15:18:51.396Z",
"path": "/api/v2/business/order/cost",
"message": "Insufficient API key scope"
}
Quote cost
Get a Local delivery quote for one shipment.
POST
/
business
/
order
/
cost
curl -X POST "$RUN_BASE_URL/business/order/cost" \
-H "Authorization: Bearer $RUN_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"pickup_address": "15 Bode Thomas Street, Surulere, Lagos",
"dropoff_address": "24 Allen Avenue, Ikeja, Lagos",
"weight": 2,
"vehicle_type": "bike"
}'
const res = await fetch(`${process.env.RUN_BASE_URL}/business/order/cost`, {
method: 'POST',
headers: {
Authorization: `Bearer ${process.env.RUN_API_KEY}`,
'Content-Type': 'application/json',
},
body: JSON.stringify({
pickup_address: '15 Bode Thomas Street, Surulere, Lagos',
dropoff_address: '24 Allen Avenue, Ikeja, Lagos',
weight: 2,
vehicle_type: 'bike',
}),
});
const quote = await res.json();
import os
import requests
res = requests.post(
f"{os.environ['RUN_BASE_URL']}/business/order/cost",
headers={
"Authorization": f"Bearer {os.environ['RUN_API_KEY']}",
"Content-Type": "application/json",
},
json={
"pickup_address": "15 Bode Thomas Street, Surulere, Lagos",
"dropoff_address": "24 Allen Avenue, Ikeja, Lagos",
"weight": 2,
"vehicle_type": "bike",
},
)
quote = res.json()
<?php
$ch = curl_init(getenv('RUN_BASE_URL') . '/business/order/cost');
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_POST => true,
CURLOPT_HTTPHEADER => [
'Authorization: Bearer ' . getenv('RUN_API_KEY'),
'Content-Type: application/json',
],
CURLOPT_POSTFIELDS => json_encode([
'pickup_address' => '15 Bode Thomas Street, Surulere, Lagos',
'dropoff_address' => '24 Allen Avenue, Ikeja, Lagos',
'weight' => 2,
'vehicle_type' => 'bike',
]),
]);
$quote = json_decode(curl_exec($ch), true);
curl_close($ch);
package main
import (
"bytes"
"fmt"
"io"
"net/http"
"os"
)
func main() {
body := []byte(`{
"pickup_address": "15 Bode Thomas Street, Surulere, Lagos",
"dropoff_address": "24 Allen Avenue, Ikeja, Lagos",
"weight": 2,
"vehicle_type": "bike"
}`)
req, _ := http.NewRequest(
"POST",
os.Getenv("RUN_BASE_URL")+"/business/order/cost",
bytes.NewReader(body),
)
req.Header.Set("Authorization", "Bearer "+os.Getenv("RUN_API_KEY"))
req.Header.Set("Content-Type", "application/json")
res, err := http.DefaultClient.Do(req)
if err != nil {
panic(err)
}
defer res.Body.Close()
out, _ := io.ReadAll(res.Body)
fmt.Println(string(out))
}
{
"price": 5000,
"distance_km": 12.4,
"currency": "NGN",
"pricing_model": "rate_card",
"option_id": "band_0_2_5",
"option_label": "0.5–2.5 kg",
"delivery_mode": "MOTORBIKE",
"from_zone_name": "Surulere",
"to_zone_name": "Ikeja / Omole / Agege / Magodo / Ogba"
}
{
"statusCode": 400,
"timestamp": "2026-08-12T15:18:51.396Z",
"path": "/api/v2/business/order/cost",
"message": "weight must not be less than 0.1"
}
{
"statusCode": 401,
"timestamp": "2026-08-12T15:18:51.396Z",
"path": "/api/v2/business/order/cost",
"message": "Invalid API key"
}
{
"statusCode": 403,
"timestamp": "2026-08-12T15:18:51.396Z",
"path": "/api/v2/business/order/cost",
"message": "Insufficient API key scope"
}
Get a Local delivery quote for one shipment.
Requires scope:
orders:write
Headers
string
required
Bearer API key (
Bearer <api_key>).Body
string
required
Full pickup address (≥ 3 chars).
string
required
Full drop-off address (≥ 3 chars).
number
required
Billable weight in kg (≥ 0.1). For
vehicle_type=bike, weight also selects the rate-card band.string
bike, bus_van, or truck. When set, quotes use your business rate card. Omit for distance-only pricing.string
Option id from Rate cards. Required for
bus_van and truck. Omit for bike (band from weight).number
Optional pickup latitude.
number
Optional pickup longitude.
number
Optional drop-off latitude.
number
Optional drop-off longitude. If all four lat/lng are set, geocode is skipped.
Response
number
Quoted price.
number
Estimated distance in km.
string
Currency code (for example
NGN).string
rate_card or distance.string
Resolved option id (for example the bike weight band).
string
Snapshot label for the option.
string
Assignment mode (for example
MOTORBIKE, BUS_VAN, TRUCK).string
Resolved from-zone name when rate-card quoting applies.
string
Resolved to-zone name when rate-card quoting applies.
Prefer listing options RUN already configured for you, then quote with
vehicle_type. See Rate-card pricing.curl -X POST "$RUN_BASE_URL/business/order/cost" \
-H "Authorization: Bearer $RUN_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"pickup_address": "15 Bode Thomas Street, Surulere, Lagos",
"dropoff_address": "24 Allen Avenue, Ikeja, Lagos",
"weight": 2,
"vehicle_type": "bike"
}'
const res = await fetch(`${process.env.RUN_BASE_URL}/business/order/cost`, {
method: 'POST',
headers: {
Authorization: `Bearer ${process.env.RUN_API_KEY}`,
'Content-Type': 'application/json',
},
body: JSON.stringify({
pickup_address: '15 Bode Thomas Street, Surulere, Lagos',
dropoff_address: '24 Allen Avenue, Ikeja, Lagos',
weight: 2,
vehicle_type: 'bike',
}),
});
const quote = await res.json();
import os
import requests
res = requests.post(
f"{os.environ['RUN_BASE_URL']}/business/order/cost",
headers={
"Authorization": f"Bearer {os.environ['RUN_API_KEY']}",
"Content-Type": "application/json",
},
json={
"pickup_address": "15 Bode Thomas Street, Surulere, Lagos",
"dropoff_address": "24 Allen Avenue, Ikeja, Lagos",
"weight": 2,
"vehicle_type": "bike",
},
)
quote = res.json()
<?php
$ch = curl_init(getenv('RUN_BASE_URL') . '/business/order/cost');
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_POST => true,
CURLOPT_HTTPHEADER => [
'Authorization: Bearer ' . getenv('RUN_API_KEY'),
'Content-Type: application/json',
],
CURLOPT_POSTFIELDS => json_encode([
'pickup_address' => '15 Bode Thomas Street, Surulere, Lagos',
'dropoff_address' => '24 Allen Avenue, Ikeja, Lagos',
'weight' => 2,
'vehicle_type' => 'bike',
]),
]);
$quote = json_decode(curl_exec($ch), true);
curl_close($ch);
package main
import (
"bytes"
"fmt"
"io"
"net/http"
"os"
)
func main() {
body := []byte(`{
"pickup_address": "15 Bode Thomas Street, Surulere, Lagos",
"dropoff_address": "24 Allen Avenue, Ikeja, Lagos",
"weight": 2,
"vehicle_type": "bike"
}`)
req, _ := http.NewRequest(
"POST",
os.Getenv("RUN_BASE_URL")+"/business/order/cost",
bytes.NewReader(body),
)
req.Header.Set("Authorization", "Bearer "+os.Getenv("RUN_API_KEY"))
req.Header.Set("Content-Type", "application/json")
res, err := http.DefaultClient.Do(req)
if err != nil {
panic(err)
}
defer res.Body.Close()
out, _ := io.ReadAll(res.Body)
fmt.Println(string(out))
}
{
"price": 5000,
"distance_km": 12.4,
"currency": "NGN",
"pricing_model": "rate_card",
"option_id": "band_0_2_5",
"option_label": "0.5–2.5 kg",
"delivery_mode": "MOTORBIKE",
"from_zone_name": "Surulere",
"to_zone_name": "Ikeja / Omole / Agege / Magodo / Ogba"
}
{
"statusCode": 400,
"timestamp": "2026-08-12T15:18:51.396Z",
"path": "/api/v2/business/order/cost",
"message": "weight must not be less than 0.1"
}
{
"statusCode": 401,
"timestamp": "2026-08-12T15:18:51.396Z",
"path": "/api/v2/business/order/cost",
"message": "Invalid API key"
}
{
"statusCode": 403,
"timestamp": "2026-08-12T15:18:51.396Z",
"path": "/api/v2/business/order/cost",
"message": "Insufficient API key scope"
}
⌘I