curl -X POST "$RUN_BASE_URL/business/order/cost/bulk" \
-H "Authorization: Bearer $RUN_API_KEY" \
-H "Content-Type: application/json" \
-d '[
{
"pickup_address": "12 Admiralty Way, Lekki, Lagos",
"dropoff_address": "15 Broad Street, Lagos Island, Lagos",
"weight": 2
},
{
"pickup_address": "hassan adesola street",
"dropoff_address": "44, unity avenue, abaranje road ikotun lagos",
"weight": 3
}
]'
const res = await fetch(`${process.env.RUN_BASE_URL}/business/order/cost/bulk`, {
method: 'POST',
headers: {
Authorization: `Bearer ${process.env.RUN_API_KEY}`,
'Content-Type': 'application/json',
},
body: JSON.stringify([
{
pickup_address: '12 Admiralty Way, Lekki, Lagos',
dropoff_address: '15 Broad Street, Lagos Island, Lagos',
weight: 2,
},
{
pickup_address: 'hassan adesola street',
dropoff_address: '44, unity avenue, abaranje road ikotun lagos',
weight: 3,
},
]),
});
const quotes = await res.json();
import os
import requests
res = requests.post(
f"{os.environ['RUN_BASE_URL']}/business/order/cost/bulk",
headers={
"Authorization": f"Bearer {os.environ['RUN_API_KEY']}",
"Content-Type": "application/json",
},
json=[
{
"pickup_address": "12 Admiralty Way, Lekki, Lagos",
"dropoff_address": "15 Broad Street, Lagos Island, Lagos",
"weight": 2,
},
{
"pickup_address": "hassan adesola street",
"dropoff_address": "44, unity avenue, abaranje road ikotun lagos",
"weight": 3,
},
],
)
quotes = res.json()
<?php
$ch = curl_init(getenv('RUN_BASE_URL') . '/business/order/cost/bulk');
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' => '12 Admiralty Way, Lekki, Lagos',
'dropoff_address' => '15 Broad Street, Lagos Island, Lagos',
'weight' => 2,
],
[
'pickup_address' => 'hassan adesola street',
'dropoff_address' => '44, unity avenue, abaranje road ikotun lagos',
'weight' => 3,
],
]),
]);
$quotes = json_decode(curl_exec($ch), true);
curl_close($ch);
package main
import (
"bytes"
"fmt"
"io"
"net/http"
"os"
)
func main() {
body := []byte(`[
{
"pickup_address": "12 Admiralty Way, Lekki, Lagos",
"dropoff_address": "15 Broad Street, Lagos Island, Lagos",
"weight": 2
},
{
"pickup_address": "hassan adesola street",
"dropoff_address": "44, unity avenue, abaranje road ikotun lagos",
"weight": 3
}
]`)
req, _ := http.NewRequest(
"POST",
os.Getenv("RUN_BASE_URL")+"/business/order/cost/bulk",
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))
}
[
{ "index": 0, "price": 3869, "distance_km": 7.54, "currency": "NGN" },
{ "index": 1, "price": 4200, "distance_km": 9.1, "currency": "NGN" }
]
[
{ "index": 0, "price": 3869, "distance_km": 7.54, "currency": "NGN" },
{ "index": 1, "error": "Could not geocode pickup address" }
]
{
"statusCode": 400,
"timestamp": "2026-08-12T15:18:51.396Z",
"path": "/api/v2/business/order/cost/bulk",
"message": "Maximum 100 items per bulk cost request"
}
{
"statusCode": 401,
"timestamp": "2026-08-12T15:18:51.396Z",
"path": "/api/v2/business/order/cost/bulk",
"message": "Invalid API key"
}
{
"statusCode": 403,
"timestamp": "2026-08-12T15:18:51.396Z",
"path": "/api/v2/business/order/cost/bulk",
"message": "Insufficient API key scope"
}
Bulk quote
Quote up to 100 shipments in one request.
POST
/
business
/
order
/
cost
/
bulk
curl -X POST "$RUN_BASE_URL/business/order/cost/bulk" \
-H "Authorization: Bearer $RUN_API_KEY" \
-H "Content-Type: application/json" \
-d '[
{
"pickup_address": "12 Admiralty Way, Lekki, Lagos",
"dropoff_address": "15 Broad Street, Lagos Island, Lagos",
"weight": 2
},
{
"pickup_address": "hassan adesola street",
"dropoff_address": "44, unity avenue, abaranje road ikotun lagos",
"weight": 3
}
]'
const res = await fetch(`${process.env.RUN_BASE_URL}/business/order/cost/bulk`, {
method: 'POST',
headers: {
Authorization: `Bearer ${process.env.RUN_API_KEY}`,
'Content-Type': 'application/json',
},
body: JSON.stringify([
{
pickup_address: '12 Admiralty Way, Lekki, Lagos',
dropoff_address: '15 Broad Street, Lagos Island, Lagos',
weight: 2,
},
{
pickup_address: 'hassan adesola street',
dropoff_address: '44, unity avenue, abaranje road ikotun lagos',
weight: 3,
},
]),
});
const quotes = await res.json();
import os
import requests
res = requests.post(
f"{os.environ['RUN_BASE_URL']}/business/order/cost/bulk",
headers={
"Authorization": f"Bearer {os.environ['RUN_API_KEY']}",
"Content-Type": "application/json",
},
json=[
{
"pickup_address": "12 Admiralty Way, Lekki, Lagos",
"dropoff_address": "15 Broad Street, Lagos Island, Lagos",
"weight": 2,
},
{
"pickup_address": "hassan adesola street",
"dropoff_address": "44, unity avenue, abaranje road ikotun lagos",
"weight": 3,
},
],
)
quotes = res.json()
<?php
$ch = curl_init(getenv('RUN_BASE_URL') . '/business/order/cost/bulk');
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' => '12 Admiralty Way, Lekki, Lagos',
'dropoff_address' => '15 Broad Street, Lagos Island, Lagos',
'weight' => 2,
],
[
'pickup_address' => 'hassan adesola street',
'dropoff_address' => '44, unity avenue, abaranje road ikotun lagos',
'weight' => 3,
],
]),
]);
$quotes = json_decode(curl_exec($ch), true);
curl_close($ch);
package main
import (
"bytes"
"fmt"
"io"
"net/http"
"os"
)
func main() {
body := []byte(`[
{
"pickup_address": "12 Admiralty Way, Lekki, Lagos",
"dropoff_address": "15 Broad Street, Lagos Island, Lagos",
"weight": 2
},
{
"pickup_address": "hassan adesola street",
"dropoff_address": "44, unity avenue, abaranje road ikotun lagos",
"weight": 3
}
]`)
req, _ := http.NewRequest(
"POST",
os.Getenv("RUN_BASE_URL")+"/business/order/cost/bulk",
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))
}
[
{ "index": 0, "price": 3869, "distance_km": 7.54, "currency": "NGN" },
{ "index": 1, "price": 4200, "distance_km": 9.1, "currency": "NGN" }
]
[
{ "index": 0, "price": 3869, "distance_km": 7.54, "currency": "NGN" },
{ "index": 1, "error": "Could not geocode pickup address" }
]
{
"statusCode": 400,
"timestamp": "2026-08-12T15:18:51.396Z",
"path": "/api/v2/business/order/cost/bulk",
"message": "Maximum 100 items per bulk cost request"
}
{
"statusCode": 401,
"timestamp": "2026-08-12T15:18:51.396Z",
"path": "/api/v2/business/order/cost/bulk",
"message": "Invalid API key"
}
{
"statusCode": 403,
"timestamp": "2026-08-12T15:18:51.396Z",
"path": "/api/v2/business/order/cost/bulk",
"message": "Insufficient API key scope"
}
Quote up to 100 shipments in one request. The body and response are both a JSON array. Each item uses the same fields as Quote cost.
Requires scope:
orders:write
Sum prices client-side for a total. Use index to match each result to the request item. Failed rows include an error string instead of price fields.
Headers
string
required
Bearer API key (
Bearer <api_key>).string
required
Must be
application/json.Body
Each array item supports:string
required
Full pickup address (≥ 3 chars). Same fields per item as Quote cost.
string
required
Full drop-off address (≥ 3 chars).
number
required
Billable weight in kg (≥ 0.1).
string
Same as Quote cost:
bike, bus_van, or truck.string
From Rate cards. Required for bus/van and truck.
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
Zero-based index matching the request item.
number
Quoted price (omitted when the row failed).
number
Estimated distance in km.
string
Currency code (for example
NGN).string
Present on failed rows instead of price fields.
curl -X POST "$RUN_BASE_URL/business/order/cost/bulk" \
-H "Authorization: Bearer $RUN_API_KEY" \
-H "Content-Type: application/json" \
-d '[
{
"pickup_address": "12 Admiralty Way, Lekki, Lagos",
"dropoff_address": "15 Broad Street, Lagos Island, Lagos",
"weight": 2
},
{
"pickup_address": "hassan adesola street",
"dropoff_address": "44, unity avenue, abaranje road ikotun lagos",
"weight": 3
}
]'
const res = await fetch(`${process.env.RUN_BASE_URL}/business/order/cost/bulk`, {
method: 'POST',
headers: {
Authorization: `Bearer ${process.env.RUN_API_KEY}`,
'Content-Type': 'application/json',
},
body: JSON.stringify([
{
pickup_address: '12 Admiralty Way, Lekki, Lagos',
dropoff_address: '15 Broad Street, Lagos Island, Lagos',
weight: 2,
},
{
pickup_address: 'hassan adesola street',
dropoff_address: '44, unity avenue, abaranje road ikotun lagos',
weight: 3,
},
]),
});
const quotes = await res.json();
import os
import requests
res = requests.post(
f"{os.environ['RUN_BASE_URL']}/business/order/cost/bulk",
headers={
"Authorization": f"Bearer {os.environ['RUN_API_KEY']}",
"Content-Type": "application/json",
},
json=[
{
"pickup_address": "12 Admiralty Way, Lekki, Lagos",
"dropoff_address": "15 Broad Street, Lagos Island, Lagos",
"weight": 2,
},
{
"pickup_address": "hassan adesola street",
"dropoff_address": "44, unity avenue, abaranje road ikotun lagos",
"weight": 3,
},
],
)
quotes = res.json()
<?php
$ch = curl_init(getenv('RUN_BASE_URL') . '/business/order/cost/bulk');
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' => '12 Admiralty Way, Lekki, Lagos',
'dropoff_address' => '15 Broad Street, Lagos Island, Lagos',
'weight' => 2,
],
[
'pickup_address' => 'hassan adesola street',
'dropoff_address' => '44, unity avenue, abaranje road ikotun lagos',
'weight' => 3,
],
]),
]);
$quotes = json_decode(curl_exec($ch), true);
curl_close($ch);
package main
import (
"bytes"
"fmt"
"io"
"net/http"
"os"
)
func main() {
body := []byte(`[
{
"pickup_address": "12 Admiralty Way, Lekki, Lagos",
"dropoff_address": "15 Broad Street, Lagos Island, Lagos",
"weight": 2
},
{
"pickup_address": "hassan adesola street",
"dropoff_address": "44, unity avenue, abaranje road ikotun lagos",
"weight": 3
}
]`)
req, _ := http.NewRequest(
"POST",
os.Getenv("RUN_BASE_URL")+"/business/order/cost/bulk",
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))
}
[
{ "index": 0, "price": 3869, "distance_km": 7.54, "currency": "NGN" },
{ "index": 1, "price": 4200, "distance_km": 9.1, "currency": "NGN" }
]
[
{ "index": 0, "price": 3869, "distance_km": 7.54, "currency": "NGN" },
{ "index": 1, "error": "Could not geocode pickup address" }
]
{
"statusCode": 400,
"timestamp": "2026-08-12T15:18:51.396Z",
"path": "/api/v2/business/order/cost/bulk",
"message": "Maximum 100 items per bulk cost request"
}
{
"statusCode": 401,
"timestamp": "2026-08-12T15:18:51.396Z",
"path": "/api/v2/business/order/cost/bulk",
"message": "Invalid API key"
}
{
"statusCode": 403,
"timestamp": "2026-08-12T15:18:51.396Z",
"path": "/api/v2/business/order/cost/bulk",
"message": "Insufficient API key scope"
}
⌘I