Ingest tracking data
Scoring needs two things: the shipments you want graded (their promise and
lane) and the tracking events that arrive against them. Both are pushed
through org-scoped ingest routes; every row is stamped with your
X-Organization-Id server-side, so an upload can only write into your own data.
Upload shipments
POST /v1/ingest/shipments accepts an array of shipment master records (max 500
per request). These establish the promise and lane each shipment is graded
against before its events arrive.
curl -X POST https://api.orderlycore.com/v1/ingest/shipments \
-H "Authorization: Bearer $ORDERLY_INTEL_KEY" \
-H "X-Organization-Id: $ORG_ID" \
-H "Content-Type: application/json" \
-d '[
{
"tracking_number": "1Z999AA10123456784",
"carrier": "ups",
"shipped_at": "2026-07-20T15:00:00Z",
"promised_at": "2026-07-23T23:59:00Z",
"origin_zip": "07001",
"dest_zip": "94107",
"service_level": "ground"
}
]'
Push tracking events
POST /v1/ingest/events accepts an array of raw tracking events (max 500 per
request). The Hub API forwards carrier webhooks here automatically; use this
route to push events from your own systems.
curl -X POST https://api.orderlycore.com/v1/ingest/events \
-H "Authorization: Bearer $ORDERLY_INTEL_KEY" \
-H "X-Organization-Id: $ORG_ID" \
-H "Content-Type: application/json" \
-d '[
{
"tracking_number": "1Z999AA10123456784",
"carrier": "ups",
"status": "in_transit",
"description": "Departed facility",
"occurred_at": "2026-07-21T08:12:00Z"
}
]'
Both routes return { "ok": true, "data": { "accepted": <n> } }. Ingestion is
asynchronous; track progress with GET /v1/jobs/:id using the job id returned.
See the Ingest reference to try these live.