---
title: "Products listed by a seller"
method: GET
path: "/v2/seller-products"
tags: ["Amazon Data"]
---

# Products listed by a seller

`GET /v2/seller-products`

## Request

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

Use to list one seller's storefront. Products listed by a seller: a storefront search. Takes the same filters as search -- query, page, sort_by, category_id, min_price / max_price, product_condition, brand, today_deals, deal_type -- and answers with filters_applied, filters_ignored and available_filters like search does.

**Price:** $0.003 per call

**Notes:** A malformed seller_id is a free 400, as on seller_profile_batch. metadata.total_pages counts every page of the result (48 rows a page), but Amazon serves at most 7 pages of one query: metadata.reachable_pages is how far page can go, and when it is less, pagination_note says how to see the rest (min_price/max_price bands or category_id). _links.next is the next page while there is one; a page past the end is a free 400 page_out_of_range. Invalid sort_by, price, product_condition or deal_type is a free 400 that lists the allowed values. No single sort order lists a whole storefront: Amazon's relevance order (the default) can count far fewer products than the store holds and repeats products across pages, and other orders include products it leaves out (measured on one store: relevance 321, NEWEST 1,898; on another, relevance and NEWEST shared 90 of 161 products). Page 1 of a storefront without `query` carries `coverage_note` with the recipe: page through sort_by=RELEVANCE and sort_by=NEWEST, split a store larger than 336 products into min_price/max_price bands, dedupe by asin. An empty storefront carries `note`: Amazon reports 0 products for a seller with no listings on that marketplace and for an id that is not a seller alike, so check it with seller_profile_batch (`_links.seller_profile`). Rows have the search row shape: `offers_count` is null unless the card shows a count, and `product_brand` is null on most storefront cards (Amazon prints no brand line there; product_details has `brand_name`).

## Query parameters

- `seller_id` string, required
- `query` string
- `page` integer
- `geo` 'US' | 'CA' | 'DE' | 'MX' | 'UK' | 'FR' | 'IT' | 'ES' | 'AU' | 'BR' | 'IN' | 'JP' | 'NL' | 'AE' | 'PL' | 'SA' | 'SG' | 'SE' | 'TR' | 'BE' | 'IE' | 'ZA' | 'EG'
- `sort_by` 'RELEVANCE' | 'BEST_SELLERS' | 'LOW_HIGH_PRICE' | 'HIGH_LOW_PRICE' | 'REVIEWS' | 'NEWEST'
- `category_id` string
- `min_price` number
- `max_price` number
- `product_condition` 'NEW' | 'USED' | 'RENEWED'
- `brand` string
- `today_deals` boolean
- `deal_type` 'today_deals' | 'all_discounts' | 'coupons' | 'buy_more_save_more'

## 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)
