Errors
Every failure carries a structured object: {error_code, error_message, stage, recoverable, details}. Switch on the code; messages are for humans.
| Code | Meaning |
|---|---|
INVALID_INPUT | Order failed validation (async path; synchronous problems return 422) |
PARSE_FAILED | Document workflow: the file could not be interpreted |
STALE_RATE_CARD | Your rate version is behind; the rate_drift diff lists your_cost vs current_cost per line. Refresh and resubmit. |
INVENTORY_UNAVAILABLE | Requested weeks or slots lack availability (the only legitimate business rejection on price-valid orders). On a pooled package, details.pool_id names the pool whose capacity ran out. |
DAYPART_CONFLICT | Catalog ingest rejected an undeclared overlap: packages intersect in days and time without every one declaring the same validated pool. The conflict report blocks the update before it can ever produce an order error. |
OUTSIDE_RATE_CARD | Requested combination is not on the applicable card |
SELLER_REJECTED | The seller's approver declined (reason persisted and surfaced) |
BUYER_REJECTED_INTENT | You rejected at confirmation; surfaces as canceled |
CREDIT_LIMIT | Cleared trades only: the order would breach a credit or exposure cap; fails fast at create, before anything books |
PLACEMENT_FAILED | The booking write into the seller's traffic system failed, so the order did not reach placed; ops is on it |
INTERNAL_ERROR | Our fault; the audit trail will say exactly where |
Per the price-clearance invariant, a rate mismatch on matching versions is a Switchboard defect, not your error. It pages us, not you.