Amazon Data API query parameters
Every endpoint takes plain query parameters. A handful are shared across the whole API — learn these four and the rest is per-endpoint detail.
Shared across every endpoint
| Parameter | Type | Default | Notes |
|---|---|---|---|
| marketplace | string | US | Two-letter marketplace code (US, UK, DE, FR, IT, ES, CA, JP, IN, AU, …). |
| zip | string | — | Delivery postcode. Without one, many listings report “cannot be shipped to your location” and come back with no price or images. Always send it for price-accurate data. |
| page | integer | 1 | 1-based page number. |
| limit | integer | 0 | Search only. Auto-paginate until N items are collected. 0 returns a single page. Maximum 200. |
Why zip matters more than you expect
Amazon resolves price, availability and delivery promise against a delivery address. With no
postcode, a large share of listings report “cannot be shipped to your location” and return with
price: null and no images. It is not an error — it is what Amazon
genuinely serves to an unlocated visitor.
{
"asin": "B07CMS5Q6P",
"title": "Logitech G305 …",
"price": null,
"availability": "Cannot be shipped to your location",
"images": []
}
{
"asin": "B07CMS5Q6P",
"title": "Logitech G305 …",
"price": { "display": "$29.99", "amount": 29.99 },
"availability": "In Stock",
"images": [ "…" ]
}
Marketplace codes
Two letters, case-insensitive, validated against ^[A-Za-z]{2}$.
An unknown code returns 422 rather than silently falling back to US.
See the marketplace list for all
16 and their matching postcode formats.
Pagination
Paginated endpoints take page, 1-based, and return
has_next_page. There are no cursors to store.
page = 1
while True:
data = fetch("/products/search", {"query": "wireless mouse", "page": page})
yield from data["results"]
if not data["has_next_page"]:
break
page += 1
On /products/search you can skip the loop entirely with
limit — the API paginates server-side until it has N items.
Each page it fetches still costs one credit, so limit=100 across
five upstream pages costs five.
Booleans and filters
Booleans accept true/false,
1/0,
yes/no and
on/off. Anything else is a
422.
| Parameter | Endpoint | Effect |
|---|---|---|
| prime_only | /products/search | Drop non-Prime results. |
| include_sponsored | /products/search | Set false to strip sponsored placements — useful for organic rank tracking. |
| verified_only | /products/reviews | Only verified-purchase reviews. |
| min_price / max_price | /products/search | Price band in the marketplace's currency, not USD. |
Sorting
/products/search accepts:
Validation errors
Bad input returns 422 with a detail array
naming the offending field, so you can map errors back to form inputs without string matching.
{
"detail": [
{
"loc": ["query", "asin"],
"msg": "Field required",
"type": "missing",
"input": null
}
]
}