---
title: "Live offers and inventory for up to 10 ASINs"
method: GET
path: "/stock"
tags: ["Amazon Data"]
---

# Live offers and inventory for up to 10 ASINs

`GET /stock`

## Request

- Base URL: `https://dash.apiguru.app/api/v1`
- URL: `https://dash.apiguru.app/api/v1/stock`
- Auth: one of:
  - API key in header `X-API-KEY`
  - API key in query parameter `api_key`
  - none

Use to compare sellers' current offers and see who holds the buy box, and, with check_inventory, how many units a buyer can add to the cart now. The stock number is not a sales estimate. Not for the listing's own details (product_details). Returns the current offer list per ASIN (seller, price, condition, buy-box winner) and, optionally, the actual purchasable stock quantity.

**Price:** $0.0045 per item (max 10)

**Notes:** Billed per lookup, which is more than one per ASIN when check_inventory is true. offers_count=winner returns only the offer flagged is_buybox_winner (offers_total keeps the full count); it used to scope only the inventory check and return every offer. /scrape is a legacy alias for the same handler. When Amazon will not return the offer list for an ASIN, the result carries source=product_page: the featured (buy-box) offer read from the product page, offers_on_amazon (how many offers Amazon says exist) and a note; other sellers' offers and stock are then not included. With check_inventory, a cart check that cannot read a quantity is retried once on another session; one that still fails says so on the offer, inventory_response {"error": "cart check failed", "code": "cart_check_failed", "retryable": true}, is not billed, and never reads as a quantity of 0. Each offer carries `ships_from` (the "Ships from" name: Amazon for FBA, else the seller), `delivery_message` (the offer's own delivery promise, e.g. "FREE delivery Friday, October 16 on orders shipped by Amazon over $35") and `delivery_message_secondary` (the "Or fastest delivery ..." line), null when the offer shows none. `delivery` is the same value as `ships_from`, kept for existing integrations; it never held delivery information. A row for an ASIN that could not be answered carries `error`, `code`, `http_status`, `billed`, `retryable` and `next_step`, like a top-level error: `upstream_unavailable` (not billed, retry that ASIN), `no_offers` ("No offers found": the offer list holds no offer that can be bought as is -- customizable listings have none; billed like a 404) or `asin_redirected` (Amazon answers the ASIN with another listing's offers; billed like a 404). On agent.apiguru.app the answer also carries `success` and `_links` (self, and `details_url` per row); `billable_requests_count` is there on your own key only.

## Query parameters

- `asins` string, required
- `geo` 'US' | 'CA' | 'DE' | 'MX' | 'UK' | 'FR' | 'IT' | 'ES' | 'AU' | 'BR' | 'IN' | 'JP' | 'NL' | 'AE' | 'PL' | 'SA' | 'SG' | 'SE' | 'TR' | 'BE' | 'IE' | 'ZA' | 'EG'
- `check_inventory` boolean
- `offers_count` string
- `condition` string

## Response `200`

Success.

- object

## Other responses

- `400`: Bad input (bad ASIN format, unknown geo, missing required param), or a page past the last one Amazon serves for a list (`code: page_out_of_range`, with `reachable_pages`). On agent.apiguru.app an `api_key` in the URL is refused the same way (`code: api_key_in_query`): send it as the X-API-KEY header. NOT billed.
- `401`: Missing or invalid API key on the keyed path.
- `402`: Payment required. On the agent path this carries a PAYMENT-REQUIRED challenge (over MCP: an x402 PaymentRequired tool result, payable in-band via _meta["x402/payment"]). On the keyed path it means the account balance is exhausted.
- `403`: Account disabled, or no active subscription plan.
- `404`: The ASIN genuinely does not exist on that marketplace. BILLED - the lookup was performed and the bad input was the caller's. Retrying will not help; try a different geo.
- `413`: Too many items in a batch request.
- `429`: Per-second rate limit exceeded for the plan (`code: rate_limited`, `Retry-After: 1`). NOT billed. Back off and retry.
- `500`: Internal error. NOT billed.
- `502`: Bad gateway. NOT billed. Same class as 503: retry with backoff.
- `503`: Temporary failure on our side (`code: upstream_unavailable`). NOT billed. Safe and correct to retry.
- `504`: Gateway timeout: no answer within 55 s, so agent.apiguru.app stopped the request before it was billed (`code: deadline_exceeded`). NOT billed. Retry once; a batch with fewer items answers sooner.
- `timeout`: No response before your own client's deadline. A keyless call without a payment is never billed. On an API key, or with an x402 payment attached, the request may still complete after your client gave up, and is then billed like any answered call. Some marketplaces answer more slowly than others; allow 60s rather than retrying early (agent.apiguru.app answers a 504 itself at 55 s).

---

[API](https://skmtc.dev/apiguru/apis/apiguru-amazon-data-api.md) · [All operations](https://skmtc.dev/apiguru/apis/apiguru-amazon-data-api/llms.txt) · [OpenAPI document](https://skmtc.dev/apiguru/apis/apiguru-amazon-data-api/revisions/121618530d03?raw)
