Getting Started with the Product Atlas API

The Product Atlas API is a read-only API that returns product details and attributes, across a curated set of retailers, using familiar field names and identifiers. Get started with the API using the following steps.

Base URL

https://atlas.usebutton.com/v1

Every endpoint in this reference is relative to that base URL. All requests and responses are JSON.

Getting your API key

API keys are issued via self-serve key creation. See general authentication for details. The API key you use to access Product Atlas API endpoints also allows you to access Button's other server-to-server API endpoints.

⚠️

❗️Keep your API key private

Only call the Product Atlas API from a server you control. Don't embed your key in a mobile app or public webpage, and don't commit it to source control.

Authentication

Send your API key on every request, using either header:

X-Api-Key: YOUR_API_KEY

A missing or invalid key returns 401. A valid key that isn't entitled to the request (for example, a retailer your organization isn't granted access to) returns 403.

Make your first request

curl https://atlas.usebutton.com/v1/retailers \
  -H "'X-Api-Key: YOUR_API_KEY"
{
  "retailers": [
    { "slug": "amazon", "name": "Amazon" },
    { "slug": "walmart", "name": "Walmart" }
  ]
}

This list is scoped to your organization and can change over time, so treat it as the live source of truth rather than hard-coding retailer slugs. See Retailer Coverage for more.

Data freshness and normalization

Field values are not yet fully normalized. The Product Atlas API is launching ahead of a full catalog normalization effort, so field completeness and formatting (casing, units, category taxonomy) currently varies by retailer. Use last_updated on a product as the freshness signal — don't assume a fixed refresh interval.

Fields a retailer didn't provide are omitted from the response entirely, rather than returned as null or an empty string.

Rate limits

Requests are rate-limited per organization. If you exceed the limit, you'll get a 429 with a Retry-After header telling you how many seconds to wait before retrying.

Exact request limits are still being finalized ahead of general availability. Build your integration to respect Retry-After rather than assuming a fixed number, and check with your Button representative for current guidance.

Errors

Every error response shares one shape:

{
  "error": {
    "code": "not_found",
    "message": "product not found"
  }
}

code is a stable, machine-readable value — branch your error handling on code, not on message, since the wording of message may change.

HTTP statuscodeMeaning
400bad_requestThe request was malformed: a missing/invalid parameter, an unknown retailer slug, or a batch over the size limit.
401unauthorizedThe API key is missing or invalid.
403forbiddenThe key is valid, but not entitled to this request.
404not_foundNo matching product.
429rate_limitedYou're over your rate limit. Check Retry-After.
500internal_errorSomething went wrong on Button's side.
502 / 504upstream_errorButton's internal catalog returned an error or timed out.

Getting help

Contact your Button account representative, or [email protected] for help integrating.