BarcodesDocs

GET Resale Prices

The answer comes from the Barcodes.gg price cache. When the cache has no StockX or Alias price less than 60 minutes old for the market that you ask for, the API pulls that price live. Each size has its own as_of time. StockX sizes have price (lowest ask), bid and sales. Alias sizes have ask (lowest ask in the region), bid, last_sale, global_indicator and sales. A size that the marketplace lists without a current ask has price: null (StockX) or ask: null (Alias). The size stays in the list.

The sneaker price API page shows the plans and examples. To get the product for a barcode first, use the barcode lookup API.

Routes

/api/v2/prices/{style_code}
/api/v2/prices/barcode/{barcode}
  • {style_code}: 2 to 80 characters (letters, digits, space, ., _, /, -). Example: DZ5485-612.
  • {barcode}: a UPC or EAN with 8 to 14 digits. The answer keeps only the size of that barcode on each site.

Two-part style codes

Some shoes have a two-part style code with a slash, for example 315122-111/CW2288-111. You can put it in {style_code}. Send the slash plain or encoded as %2F. Both forms work:

GET /api/v2/prices/315122-111/CW2288-111
GET /api/v2/prices/315122-111%2FCW2288-111

A two-part code also answers with the prices of each part. A single code such as CW2288-111 also answers with the prices of a two-part code that contains it, when both codes are the same shoe. The API compares the product names. It never mixes the prices of two different shoes.

Slug in place of the style code

On /api/v2/prices/{style_code}, you can send a StockX or Alias product slug in place of the style code. Add these query parameters:

ParameterAllowed valuesMeaning
is_slugtrueThe path value is a slug, not a style code.
slug_storestockx, aliasThe marketplace of the slug. It is required when is_slug=true.
GET /api/v2/prices/{slug}?is_slug=true&slug_store=stockx
  • A slug has 2 to 200 characters: letters, digits and -. Any other slug returns 422 (The slug is not valid.).
  • Any other slug_store value returns 422.
  • A slug that matches no product returns 200 with "error": true and the message No product is known for this slug. It costs nothing.
  • The barcode route does not take is_slug.

Parameters

Both routes take the same query parameters. All parameters are optional. Each value must be on the allowed list. Any other value returns 422 with a message that lists the allowed values. Values are not case-sensitive.

ParameterAllowed valuesDefaultMeaning
sitesstockx, alias (comma list), or allallMarketplaces in the answer. all means StockX and Alias.
currencyAUD, BRL, CAD, CHF, CLP, CNY, DKK, EUR, GBP, HKD, HUF, IDR, ILS, JPY, KRW, KWD, MOP, MXN, MYR, NOK, NZD, PEN, PHP, PLN, SEK, SGD, THB, TWD, USD, VNDEURStockX currency. It applies to StockX only. Alias prices are USD in every region. Each row shows its currency.
marketEU, an EU country code (AT, BE, BG, HR, CY, CZ, DK, EE, FI, FR, DE, GR, HU, IE, IT, LV, LT, LU, MT, NL, PL, PT, RO, SK, SI, ES, SE), or GB, CH, NO, US, CA, MX, HK, MO, TW, JP, KR, SG, MY, PH, AU, NZ, AE, SA, ILEUStockX market. A comma list of at most 3 values. All EU countries share one StockX market, so an EU country code answers as EU. The other countries have their own StockX prices and keep their code.
regionEU, FR, GB, CH, NO, US, CA, MX, BR, JP, KR, HK, MO, CN, TW, SG, MY, TH, PH, IN, AU, NZ, AE, SA, KW, QA, IL, TR, ZA, globalEUAlias region. EU is the Alias Europe region, for example Germany, Spain, Italy and the Netherlands. France is not in it: France is FR. UK is also accepted for GB. global asks Alias for prices without a region. It always needs a live pull.
consignfalse, true, bothfalsefalse shows standard prices. true shows consignment prices only. both shows the two as separate rows. On StockX, consignment means Flex.
freshauto, cacheautoauto pulls StockX and Alias live when the cache has no matching price less than 60 minutes old. cache answers from the cache only and does not wait for a live pull.

Notes:

  • The standard StockX row shows the lowest ask of the market. That ask can itself be a Flex ask. The Flex row (is_consign: true) shows only Flex asks.
  • StockX and Alias do not split the sales count by consignment. A consignment row has sales: null.
  • global_indicator is the Alias global indicator price. It is a price guide, not an ask. A global row has no global_indicator.
  • A cached row whose market or region is not known stays in the answer with market: null (or region: null on Alias). The API never merges it into a named market.
  • A live pull can make a request slower. Use fresh=cache when speed matters more than age.

Ability

  • prices (Standard Plus and up: Standard Plus, Pro, Pro Plus and Enterprise)

A token made before you had the ability does not get it automatically. Edit the token in the dashboard and tick Resale Prices.

Cost

One API call for each answered request, with any parameters. A request without matching prices costs nothing.

Examples

GET /api/v2/prices/DZ5485-612
GET /api/v2/prices/DZ5485-612?sites=stockx&currency=GBP&market=GB,EU
GET /api/v2/prices/DZ5485-612?sites=stockx,alias&consign=both
GET /api/v2/prices/barcode/0196975491234?sites=alias&region=global
GET /api/v2/prices/DZ5485-612?fresh=cache
GET /api/v2/prices/315122-111/CW2288-111

Response 200 (success)

Request: GET /api/v2/prices/barcode/0196975491234?sites=stockx,alias

The values below are a sample. They show the shape, not real prices.

{
  "error": false,
  "results": {
    "barcode": "0196975491234",
    "barcode_size": { "us": "12", "uk": "11", "eu": "46" },
    "style_code": "DZ5485-612",
    "query": {
      "sites": ["stockx", "alias"],
      "currency": "EUR",
      "market": ["EU"],
      "region": "EU",
      "consign": "false",
      "fresh": "auto"
    },
    "as_of": "2026-10-25T06:49:08+00:00",
    "is_stale": false,
    "sites": [
      {
        "site": "StockX",
        "currency": "EUR",
        "market": "EU",
        "is_consign": false,
        "as_of": "2026-10-25T06:40:12+00:00",
        "sizes": [
          {
            "as_of": "2026-10-25T06:40:12+00:00",
            "size": "12",
            "us": "12",
            "eu": "46",
            "uk": "11",
            "price": 280,
            "bid": 240,
            "sales": 12
          }
        ]
      },
      {
        "site": "Alias",
        "currency": "USD",
        "market": null,
        "region": "EU",
        "is_consign": false,
        "as_of": "2026-10-25T06:49:08+00:00",
        "sizes": [
          {
            "as_of": "2026-10-25T06:49:08+00:00",
            "size": "12",
            "us": "12",
            "eu": "46",
            "uk": "11",
            "ask": null,
            "bid": null,
            "last_sale": 255,
            "global_indicator": 265,
            "sales": 4
          }
        ]
      }
    ]
  },
  "response_time": "XXXms",
  "request_fulfilled": true,
  "request_debited": true
}

barcode and barcode_size are present only on the barcode route.

Fields

FieldMeaning
queryThe parameters that the API used, after defaults. An EU country code shows as EU
as_of (top level)Newest price time over all sites
is_staletrue when the newest price is older than 24 hours
siteMarketplace: StockX or Alias
currencyISO currency of the prices on this row. StockX uses the currency parameter. Alias is USD in every region
marketStockX market: EU for the shared EU market, or a country code such as GB or US for a market with its own prices. null when the market is not known, and on Alias rows
regionAlias rows only: the Alias region, such as EU or GB, global, or null when the region is not known
is_consigntrue for consignment prices (StockX Flex, Alias consignment)
sizes[].priceStockX rows: lowest ask, or null when the size is listed without a price
sizes[].askAlias rows: lowest ask in the region, or null when Alias shows no ask
sizes[].bidHighest bid, when the marketplace gives one
sizes[].last_saleAlias rows: price of the last sale of the size
sizes[].global_indicatorAlias rows: the Alias global indicator price. It is a price guide, not an ask
sizes[].salesSales count that the marketplace reports for the size. The time window depends on the marketplace: StockX counts 90 days. null on consignment rows
sizes[].sizeSize label as the marketplace shows it
sizes[].us, eu, ukSize labels from the product's size chart
sizes[].as_ofTime of this price

Response 200 (no prices)

{
  "error": true,
  "message": "No prices are cached for this product.",
  "response_time": "XXXms",
  "request_fulfilled": true,
  "request_debited": false
}

Response 422 (parameter not allowed)

{
  "error": true,
  "message": "The region value \"ES\" is not allowed. Allowed values: EU, FR, GB, CH, NO, US, CA, MX, BR, JP, KR, HK, MO, CN, TW, SG, MY, TH, PH, IN, AU, NZ, AE, SA, KW, QA, IL, TR, ZA, global.",
  "response_time": "XXXms",
  "request_fulfilled": false,
  "request_debited": false
}

Response 403, 422 or 503

{
  "error": true,
  "message": "token depleted, invalid style code or barcode, or prices temporarily unavailable",
  "response_time": "XXXms",
  "request_fulfilled": false,
  "request_debited": false
}