Skip to main content

Get lowest prices for many SKUs in one call

POST 

/partner/lowest/bulk

Resolves up to 100 SKUs per request. Prefer this over looping GET /partner/lowest/{sku} — it is the same data at 1/100th the request count.

Each value in results is byte-identical to the body GET /partner/lowest/{sku} returns for that SKU at that instant (same keys, same message, same code, same size_map, same product). No extra per-SKU fields are added — everything this endpoint needs to say about a SKU is said at the envelope level.

The four envelope arrays are mutually exclusive, and results ∪ not_found ∪ deferred ∪ errors is exactly the de-duplicated input set:

FieldMeaningEquivalent per-SKU callWhat to do
resultsResolved200Use it
not_foundSKU does not exist in the catalog400 + {"message":"SKU not found","code":"0009"}Stop requesting it
deferredResolvable, but this request hit its internal work budget—Retry later — see below
errorsTransient failure on that SKU500Retry

deferred and errors are never the same thing as not_found. Do not treat them as "SKU does not exist".

About deferred. A small share of SKUs cannot be priced from our fast store and require an expensive live computation. Each bulk request performs only a handful of those (currently 5), and there is an additional server-side rate ceiling on them; everything over budget comes back in deferred. This is the same cohort the catalog manifest marks price_source: "live". Consequences to design for:

  • Do not hot-loop the deferred set. Retrying immediately mostly returns the same SKUs again. Spread them over your normal polling schedule.
  • GET /partner/lowest/{sku} will resolve them one at a time, but it is the expensive path this endpoint exists to move you off, and it consumes the same request rate limit. Use it for the few SKUs you genuinely need now, not as a bulk substitute.
  • A body composed largely of price_source: "live" SKUs will return mostly deferred. That is expected, not an outage.

Duplicate SKUs in the request are collapsed (not an error); compare requested vs deduped. Unknown top-level body keys are ignored.

Responses are not cached by intermediaries (unlike the GET variant, which carries max-age=300).

Request​

Responses​

Bulk lowest prices resolved