OnBoardCourier
Quote API · api.onboardcourier.ae
A priced hand-carry quote, in one call
Post a shipment. We search live airfares, select the flight a courier can actually make, price it against a fixed rate card and email the customer a binding offer that holds for 60 minutes.
How a quote is produced
- 1. Live fare search. Real airline offers for the requested city pair, never an estimate.
- 2. Routing agent. Selects the flight that works operationally: cabin baggage only, no connection under 90 minutes, enough time between pickup and departure, arrival inside your deadline.
- 3. Fixed rate card. The price is computed by a rules engine, not by a model. Same inputs, same price, every time.
- 4. Verification agent. A second, independent model on the same data, without seeing the first one's reasoning, whose job is to find the flaw in the selection.
- 5. Hard checks. Connection times, lead time, deadline and a full recomputation of the price. These run last and nothing overrides them.
An offer is only sent when every one of those agrees. Anything else is routed to a human at our desk, and the API answers needs_review instead of a price we cannot stand behind.
POST /api/v1/quote
Synchronous by default. Send "async": true to get the reference immediately and let the customer receive the offer by email.
| Field | Type | Notes |
|---|---|---|
| name | string | Required. The person we quote to. |
| string | Required. The offer is emailed here. | |
| phone | string | Optional, used by the desk on urgent lanes. |
| origin | IATA | Required. Three-letter departure airport. |
| destination | IATA | Required. Three-letter arrival airport. |
| ready_at | datetime | Required. YYYY-MM-DD or YYYY-MM-DDTHH:mm, local at pickup. |
| deadline_at | datetime | Optional. When the shipment has to be delivered. |
| weight_kg | number | Default 1. Above 10 kg adds a per-kilo line. |
| pieces | integer | Default 1. |
| goods | string | What is being carried. Drives the compliance check. |
| declared_value | number | Optional, for insurance and customs. |
| pickup_location | string | Street address or facility. |
| delivery_location | string | Street address or facility. |
| async | boolean | Default false. True returns 202 and emails the offer. |
curl -X POST https://api.onboardcourier.ae/api/v1/quote \
-H "Content-Type: application/json" \
-H "X-Api-Key: <your key>" \
-d '{
"name": "Aisha Khan",
"email": "aisha@example.com",
"phone": "+971500000000",
"origin": "DXB",
"destination": "FRA",
"ready_at": "2026-09-04T08:00",
"deadline_at": "2026-09-05T18:00",
"weight_kg": 4.5,
"pieces": 1,
"goods": "Aircraft AOG part, boxed",
"pickup_location": "Jebel Ali Free Zone",
"delivery_location": "Frankfurt Airport, Cargo City Sued"
}'{
"reference": "QK3M9TX2QP4",
"status": "offered",
"total": 8940,
"currency": "AED",
"valid_until": "2026-09-01T11:47:12.000Z",
"valid_for_minutes": 60,
"message": "The offer has been emailed to aisha@example.com."
}Status and acceptance
GET /api/v1/quote?reference=Q...returns the current state of one request. Requires your API key.- The customer accepts through the link in the offer email. We reconfirm the fare with the airline at that moment. If it moved by more than three percent, the offer is withdrawn and re-issued rather than silently repriced.
- Statuses:
offered,needs_review,accepted,expired,failed.
For AI agents
The same engine is exposed over the Model Context Protocol, so an agent can call it as a tool instead of being taught an HTTP contract. Stateless streamable HTTP, three tools, a partner key on every call.
| Surface | Address |
|---|---|
| MCP endpoint | https://api.onboardcourier.ae/mcp |
| OpenAPI 3.1 | https://api.onboardcourier.ae/openapi.json |
| llms.txt | https://api.onboardcourier.ae/llms.txt |
quote_hand_carry_shipmentcreates a real lead and sends a real email. It is not a lookup.check_quote_statusandlist_served_airportsare read only.- There is deliberately no tool that accepts an offer. Acceptance happens through the link in the customer's own email, which is also the consent trail.
# Claude Code
claude mcp add --transport http onboardcourier \
https://api.onboardcourier.ae/mcp \
--header "X-Api-Key: <your key>"
# Any MCP client, by configuration
{
"mcpServers": {
"onboardcourier": {
"type": "http",
"url": "https://api.onboardcourier.ae/mcp",
"headers": { "X-Api-Key": "<your key>" }
}
}
}Getting a key
There is no separate account here. Sign in with the same credentials you use on client.onboardcourier.ae and your key is on the next page. One key per account, shown once, rotatable at any time.
Send it as X-Api-Key, or as Authorization: Bearer from an MCP client. Unauthenticated calls are accepted for the website form at a low hourly rate. Higher partner limits come from the desk at bookings@onboardcourier.ae.