Accepts up to 1,000 quote requests and prices them after answering. The response is the batch in status PRICING with every item PENDING; read it at GET /v1/shipper/quotes/batch/{batchId} (the Location header) after Retry-After seconds until its status is COMPLETED or FAILED.
Each item is exactly a quote request and is priced as its own quote request would be. Results come back in the order you sent the items, so the position is how you match them; an item's customerReference, when you give one, is stored on its quote and finds it later. Each result is QUOTED with the same QuoteResponse a single request answers with, or NOT_QUOTED or UNDER_REVIEW with the same ProblemDetail. A refused or malformed item never fails the batch; only an envelope that cannot be taken does (no items, more than 1,000, or an empty item).
Idempotent twice over. With an Idempotency-Key, retrying the same request within 24h returns the original response; the same key with a different body returns 409 idempotency_key_conflict. Without one, the same items for your company within 24h return the batch that already ran, however far it has got; quotes stay valid for two days, so a replay never returns an expired price. One batch prices for your account at a time: a second, different batch while one is PRICING is refused with 409 batch_in_progress and the running batch's id.
UNDER_REVIEW items are the ones no automatic price can be trusted for; a person decides, and the item later becomes QUOTED or NOT_QUOTED. After a batch is COMPLETED, items change only that way and nothing else on the batch moves. The requiredPickupDate of an item is read as a day in the origin's time zone; send it with an offset, for example 2026-10-14T08:00:00-07:00.
| Time | Status | User Agent | |
|---|---|---|---|
Retrieving recent requests… | |||