APEXON API PLATFORM
CatalogAIO API documentation
Amazon catalog data behind one clean REST surface: product details, offers, reviews, search, suggestions, and best sellers across 22 storefronts — plus drop-in path aliases for popular marketplace Amazon APIs.
https://catalog.apexon.dev
- Interactive explorer — Swagger UI at
catalog.apexon.dev/docs, ReDoc atcatalog.apexon.dev/redoc. - Machine-readable spec — OpenAPI at
catalog.apexon.dev/openapi.jsonfor generating clients, mocks, and tests. - 22 storefronts — pick a market per request with
domain=amazon.deorcountry=DE; see Storefronts. - Drop-in aliases — OpenWeb/Axesso-style and Scout-style paths answer alongside the native
/v1surface.
Quickstart
Grab a key (subscribe on the marketplace, or request a direct key), then make your first calls. Health is public; everything else needs the key.
curl https://catalog.apexon.dev/health
curl https://catalog.apexon.dev/v1/markets \ -H "X-API-Key: $CATALOGAIO_KEY"
curl "https://catalog.apexon.dev/v1/product/B08N5WRWNW?domain=amazon.de" \ -H "X-API-Key: $CATALOGAIO_KEY"
curl "https://catalog.apexon.dev/v1/search?query=wireless+earbuds&page=1" \ -H "X-API-Key: $CATALOGAIO_KEY"
curl https://catalog.apexon.dev/v1/product/B08N5WRWNW/offers \ -H "X-API-Key: $CATALOGAIO_KEY"
{
"success": true,
"data": { … },
"request_id": "9f3c1a2b8d4e"
}
Every response also carries X-Request-Id, X-Cache, and X-RateLimit-* headers — see Responses & headers.
Authentication
CatalogAIO issues its own keys, prefixed ca_live_. Keys are product-scoped: a FinMarkets fm_live_ or LineSnap ls_ key will not authenticate here, and vice versa. Send a key any of these ways — first match wins:
| Method | How | Use when |
|---|---|---|
X-API-Key header | X-API-Key: <key> | Direct keys — the recommended default. |
| Bearer token | Authorization: Bearer <key> | Clients that standardize on Authorization headers. |
| RapidAPI | X-RapidAPI-Key: <key> | Sent automatically when you call through the RapidAPI gateway. |
| Query param | ?api_key=<key> | Quick tests only — keys in URLs end up in logs. |
Gateway traffic is verified by the platform: RapidAPI injects X-RapidAPI-Proxy-Secret alongside your X-RapidAPI-Key, and the secret is what vouches for the request. The rules, exactly as enforced:
- A valid direct key always works — with or without gateway headers present.
- Wrong proxy secret → 403 — presenting an
X-RapidAPI-Proxy-Secretthat does not match is rejected asforbidden. - Rapid key without the secret → 401 — an
X-RapidAPI-Keyarriving outside the gateway (no valid proxy secret) isunauthorized.
Meta routes (/, /health, /legal/*, /docs, /redoc, /openapi.json) are public; /metrics is operator-only — it 403s without a valid metrics token or API key; every data route requires a key.
Responses & headers
Unlike FinMarkets' upstream-shaped pass-through, CatalogAIO wraps every successful response in a stable envelope — the payload lives under data and the shape per endpoint is visible in the interactive explorer:
{
"success": true,
"data": { … endpoint payload … },
"request_id": "9f3c1a2b8d4e"
}
Standard headers
| Header | Meaning |
|---|---|
X-Request-Id | Unique id for the request — include it in support emails. |
X-Plan | The plan your key resolved to (public on unauthenticated routes). |
X-Cache | HIT, MISS, or STALE — cached, fetched fresh, or served from cache within a bounded age while upstream fetching is suspended; a STALE response also carries Warning: 110. |
X-Response-Time-ms | Server-side processing time in milliseconds. |
X-RateLimit-Limit / -Remaining / -Reset | Where you stand against your per-minute limit. |
X-API-Base | The canonical public base URL of the service. |
Errors
Errors always return the same machine-readable envelope — never an HTML error page:
{
"success": false,
"error": {
"code": "rate_limited",
"message": "Rate limit exceeded",
"status": 429,
"retry_after_seconds": 18
},
"request_id": "9f3c1a2b8d4e"
}
| Code | Status | Meaning |
|---|---|---|
unauthorized | 401 | Missing or invalid key. |
forbidden | 403 | Invalid RapidAPI proxy secret, or a disabled route. |
plan_upgrade_required | 403 | Endpoint is not included in the caller's plan. error.details names the feature and the plan required. |
not_found | 404 | Unknown route, or the storefront has no such resource (e.g. unknown ASIN). |
validation_error | 400 / 422 | Bad parameters — error.details lists each problem. |
rate_limited | 429 | Per-minute limit reached — honor retry_after_seconds. |
quota_exceeded | 429 | Monthly plan quota used up — upgrade or wait for reset. |
upstream_error | 502 | The catalog source failed; safe to retry with backoff. |
service_unavailable | 503 | The catalog source is temporarily unavailable; retry shortly. |
internal_error | 500 | Our fault — the request_id helps us find it. |
Rate limits & plans
Plans cap both monthly volume and burst rate. Requests-per-minute is enforced live and surfaced via X-RateLimit-*; the monthly quota resets at the start of each calendar month. A 429 tells you which limit you hit via error.details.limit_type. Core covers search, product details, autocomplete and markets; offers, reviews and best sellers require PRO or above and otherwise return 403 plan_upgrade_required.
| Plan | Price | Requests / month | Rate limit | Endpoints |
|---|---|---|---|---|
| BASIC | $0 | 500 | 30 / min | Core |
| PRO | $12.99/mo | 25,000 | 120 / min | All |
| ULTRA | $34.99/mo | 100,000 | 300 / min | All |
| MEGA | $89/mo | 500,000 | 600 / min | All |
Caching & freshness
Successful GET responses are cached server-side so repeat calls skip the storefront round-trip entirely. Cache windows are tuned per route family — offers and search refresh on the shortest intervals; product details and reviews a little longer; best sellers longest. The X-Cache header on every response tells you whether you got a cached copy.
Data is collected from publicly reachable catalog pages on a best-effort basis; it may be incomplete, delayed, or unavailable without notice, and it is not commercial advice.
Storefronts
Every data endpoint accepts domain= (e.g. amazon.de) or country= (e.g. DE) per request — no account-level region setting. Country codes are normalized: uk is accepted and mapped to gb / amazon.co.uk, and common aliases like usa→us and irl→ie work too. GET /v1/markets returns this list with aliases and marketplace ids.
| Storefront | Domain | Code | Marketplace id |
|---|---|---|---|
| Australia | amazon.com.au | au | A39IBJ37TRP1C6 |
| Belgium | amazon.com.be | be | AMEN7PMS3EDWL |
| Brazil | amazon.com.br | br | A2Q3Y263D00KWC |
| Canada | amazon.ca | ca | A2EUQ1WTGCTBG2 |
| Egypt | amazon.eg | eg | ARBP9OOSHTCHU |
| France | amazon.fr | fr | A13V1IB3VIYZZH |
| Germany | amazon.de | de | A1PA6795UKMFR9 |
| India | amazon.in | in | A21TJRUUN4KGV |
| Ireland | amazon.ie | ie | A28R8C7NBKEWEA |
| Italy | amazon.it | it | APJ6JRA9NG5V4 |
| Japan | amazon.co.jp | jp | A1VC38T7YXB528 |
| Mexico | amazon.com.mx | mx | A1AM78C64UM0Y8 |
| Netherlands | amazon.nl | nl | A1805IZSGTT6HS |
| Poland | amazon.pl | pl | A1C3SOZRARQ6R3 |
| Saudi Arabia | amazon.sa | sa | A17E79C6D8DWNP |
| Singapore | amazon.sg | sg | A19VAU5U5O7RUS |
| Spain | amazon.es | es | A1RKKUPIHCS9HS |
| Sweden | amazon.se | se | A2NODRKZP88ZB9 |
| Turkey | amazon.com.tr | tr | A33AVAJ2PDY3EV |
| United Arab Emirates | amazon.ae | ae | A2VIGQ35RCS4UG |
| United Kingdom | amazon.co.uk | gb | A1F83G8C2ARO7P |
| United States | amazon.com | us | ATVPDKIKX0DER |
Endpoint reference
The native surface lives under /v1. Path parameters are shown in braces; query parameters list their defaults where one exists. Full request/response schemas are in the interactive explorer.
Meta
| Endpoint | Query params | Notes |
|---|---|---|
GET/ | — | Service descriptor: name, version, doc links. |
GET/health | — | Liveness + upstream reachability. Public. |
GET/metrics | — | Basic service counters (may be disabled). |
GET/legal/terms | — | Terms of use (public). |
GET/legal/disclaimer | — | Amazon non-affiliation disclaimer (public). |
Search & discovery
| Endpoint | Query params | Notes |
|---|---|---|
GET/v1/search | query (required) · domain=amazon.com · country · page=1 · category | Keyword search; pages 1–20, optional department alias (e.g. electronics). |
GET/v1/suggestions | prefix (required) · domain=amazon.com · country · limit=10 | Autocomplete suggestions; limit 1–15. |
GET/v1/bestsellers | domain=amazon.com · country · category · type=zgbs | Best sellers; type zgbs | new-releases | movers-and-shakers. |
Products
| Endpoint | Query params | Notes |
|---|---|---|
GET/v1/product/{asin} | domain=amazon.com · country | Full product detail for one ASIN. |
GET/v1/product/{asin}/offers | domain=amazon.com · country | Buy-box / offer listing. |
GET/v1/product/{asin}/reviews | domain=amazon.com · country · page=1 · sort_by=recent | Customer reviews; sort recent | helpful, pages 1–20. |
GET/v1/product/{asin}/history | domain=amazon.com | Reserved — returns an empty series (points: []) until the history collector ships. Do not build on it yet. |
Markets
| Endpoint | Query params | Notes |
|---|---|---|
GET/v1/markets | — | All 22 storefronts with domains, country codes, aliases, and marketplace ids. |
Marketplace aliases
If you are swapping in from an OpenWeb/Axesso-style Amazon data API, these paths answer with the same engine, envelope, auth, and headers. They take country instead of domain (default US) and pass the ASIN as a query parameter.
| Endpoint | Query params | Notes |
|---|---|---|
GET/search | query (required) · country=US · page=1 · category | Alias of /v1/search. |
GET/product-details | asin (required) · country=US | Alias of /v1/product/{asin}. |
GET/product-offers | asin (required) · country=US | Alias of /v1/product/{asin}/offers. |
GET/product-reviews | asin (required) · country=US · page=1 | Alias of /v1/product/{asin}/reviews. |
GET/best-sellers | country=US · category | Alias of /v1/bestsellers. |
Scout-style aliases
Scout-shaped paths for drop-in swaps. These serve the US storefront.
| Endpoint | Query params | Notes |
|---|---|---|
GET/Amazon-Search-Data | query (required) · page=1 | Scout alias of /v1/search. |
GET/Amazon-Product-Data | asin (required) | Scout alias of /v1/product/{asin}. |
GET/Amazon-Bestsellers-Data | category | Scout alias of /v1/bestsellers. |