Skip to content
KicksAPI

Live API / REST + GraphQL

REST & GraphQL documentation. Build your way.

REST resources, GraphQL queries and the typed schema of the KicksAPI sneaker data API, with example requests in JavaScript and Python.

Every request needs an API key. Create an account, mint a test key and call the endpoints below; test keys return sample data, live keys return current market data for the markets on your plan.

Authentication

The API uses a bearer token. Keep live keys on your server and never expose them in a public app bundle; use a test key or an origin-restricted key in browsers.

Authorization: Bearer YOUR_API_KEY

Resources

GET /v1/products

Search the catalogue by name, brand or style code. Paged with limit (up to 50) and page.

GET /v1/products/{id}

One product with its size chart, marketplace links and the lowest ask per market. {id} accepts our ID, a StockX slug or a style code.

GET /v1/products/{id}/prices

Asking prices per size for one market. Optional source (stockx or goat) and size_system (EU, UK, US, US_W or CM).

GET /v1/products/{id}/history

Daily snapshots between from and to, 90 days by default and up to 366. Builder and Scale.

POST /v1/prices/batch

Prices for up to 50 products in one market in a single request. Scale.

GET /v1/markets

Markets, currencies and sources, which your plan includes and when each was last refreshed. Not metered.

GET /v1/me

Your plan, its limits and this cycle’s usage. Not metered.

GraphQL: choose your fields

Query a product and its market-specific prices through one endpoint. Select only the fields your interface needs, using the same underlying data model as REST.

POST /graphql
Content-Type: application/json
Authorization: Bearer YOUR_API_KEY

Send a JSON body containing query and variables. In the example below, the market control updates the variables and the sample response. The Query, Variables and Response tabs belong to the same request.

The schema covers product search and lookup, market prices and price history. One document counts as one request and may resolve at most 50 price sets and 5 histories; past that, the extra fields return a query_too_large error next to the data that fits. A document that fails to parse or validate is not counted.

Code examples

API style
GET/v1/products/ka_concept_001/prices
{
  "id": "ka_concept_001",
  "name": "KicksAPI Concept 01",
  "style_code": "KA-001",
  "market": "NL",
  "currency": "EUR",
  "source": "stockx",
  "size_system": "EU",
  "observed_at": "2026-09-10T08:00:00Z",
  "variants": [
    {
      "size": "42",
      "size_system": "EU",
      "asking_price": 189
    }
  ]
}
Live APIREST / JSON

Freshness and missing values

Store both the source observation time and the time you received the response. A null price means no usable price is available. Do not turn missing values into zero or interpret an asking price as a completed sale. A size can be null in a system the brand does not chart; every system the product has is listed under sizes.

Data methodology

Error handling

Plan to handle 401 for invalid credentials, 402 when the balance cannot cover the plan, 403 when a market or feature is outside your plan, 404 for an unknown product, 429 for rate limits and 503 for temporary unavailability. Every error carries a machine-readable error code and a request_id, and refused requests do not count against your allowance. Preserve the last valid snapshot and show its age when an update fails.

For GraphQL, inspect both the HTTP status and the errors array. A response can contain partial data alongside errors. The integration examples reject responses with errors; production apps may choose how to display usable partial results.

KICKS / API

Your next idea. Our kind of data.

Create your account, mint a key and make your first request today.