One REST API for orders, inventory, tracking, returns and COD — with signed webhooks for every movement a parcel makes. Connect your store, app or ERP in an afternoon.
{
"id": "ord_88104",
"status": "received",
"tracking_url": "https://4pl.global/t/ord_88104",
"cod": { "amount": 4850, "currency": "LKR" }
}# create an order — COD, 2 items curl -X POST https://api.4pl.global/v1/orders \ -H "Authorization: Bearer sk_live_····" \ -H "Content-Type: application/json" \ -d '{ "reference": "SHOP-1042", "customer": { "name": "Nadeesha P.", "phone": "+94 77 123 4567" }, "address": "22/4 Galle Road, Colombo 03", "items": [ { "sku": "TEE-BLK-M", "qty": 2 } ], "payment": { "method": "cod", "amount": 4850, "currency": "LKR" } }'
{
"id": "ord_88104",
"status": "in_transit",
"hub": "KADAWATHA",
"eta": "16:00–18:00",
"events": [
{ "t": "10:12", "e": "received" },
{ "t": "09:41", "e": "packed" },
{ "t": "11:05", "e": "dispatched" }
],
"cod": { "amount": 4850, "status": "pending" }
}Seven event types cover the full parcel lifecycle. Signed with HMAC-SHA256, retried ×5 with backoff, replayable from the dashboard.
{
"event": "cod.reconciled",
"order_id": "ord_88104",
"at": "2026-08-09T16:42:11+05:30",
"courier": "KOOMBIYO",
"expected": 4850,
"received": 4850,
"variance": 0,
"statement": "cst_2026_08"
}Whatever you've built — a storefront, a POS, an ERP, your own app — there's a direct path into the network.
Sandbox keys simulate the full parcel lifecycle — orders, events, returns and COD statements — with no real parcels moved.