Record a manually-booked freight quote
Inserts a freight_quotes row for the order. This is the manual entry path
for quotes the operator received outside Shippo (phone calls, carrier
portals, brokers). The order must already be flagged as freight; the gate
returns 400 order_not_freight otherwise. Carrier and amount are required;
currency defaults to USD; quote_number, transit days, expires_at, and notes
are optional. The new row is created with accepted_at = null (operator
explicitly accepts a quote via POST /freight_quotes//accept). The
canonical helper createFreightQuote audits the insert. Idempotent on
Idempotency-Key. Requires the orders:write scope.
Authorizations
API key issued per entity via Settings > Developers > API Keys.
Each key carries scopes (e.g. orders:read, products:write).
Bearer token format: Authorization: Bearer ark_live_ent_Test keys use ark_test_ent_. Both are issued per entity
via Settings > Developers > API Keys.
Headers
Client-generated unique key for idempotent POST/PATCH/DELETE operations. Alias for the Idempotency parameter. Max 255 chars. On retry with the same key, the original response is returned without re-executing the operation. Keys expire after 24 hours.
255Path Parameters
Body
100"Estes Express"
x >= 0642.5
60"Standard LTL"
80"EST-2026-77821"
x >= 04
"USD"
"2026-05-25T17:00:00Z"
Optional raw carrier payload for the audit trail.
Response
Freight quote created
A carrier rate-quote attached to a freight order. Created either manually (operator booked a carrier outside Shippo) via POST /freight_orders/{id}/quotes, or in bulk by pulling Shippo LTL rates via POST /freight_orders/{id}/quotes/shippo. Exactly one quote per order may carry a non-null accepted_at; accepting a quote rolls its amount into orders.shipping_total. Rule 23 SSOT: amount is written only by createFreightQuoteHandler and the Shippo rate-import; accepted_at is written only by acceptFreightQuoteHandler. Scope: orders:read / orders:write.

