Skip to content

Errors

A 400 lists every offending field at once:

{
"success": false,
"error": {
"id": "validation.partner_payload_invalid",
"message": "dropoffs.0.address.latitude: latitude is required",
"details": "[{\"field\":\"dropoffs.0.address.latitude\",\"message\":\"latitude is required\"}]"
}
}

details is a JSON array of { field, message } objects. Field paths are dot-joined with array indices inline: dropoffs.0.address.latitude.

Code Meaning
400 Payload rejected. See error.details.
401 Key missing, malformed, revoked — or its account can no longer create orders.
404 No order for that external_order_id.
409 A concurrent request is creating this order. Retry shortly.
429 Rate limit for this key exceeded.

The limit is per key, per minute. The current value is in the GET /ping response as rate_limit_per_minute.

On 429, back off and retry with an increasing interval.

A 401 does not always mean a typo in the key. It is also returned when:

  • the key has been revoked in the dashboard;
  • the owning account is disabled;
  • the owner is no longer a customer and cannot create orders.

GET /ping tells you which key you are using.