ASOS API

Read ASOS prices and sizes across five storefronts with one id

The ASOS API returns fashion product data from ASOS as clean JSON.

no credit card1,000 free credits · instant API key · pay by card or crypto
Missing a ASOS endpoint, or need a source we don't have yet?Contact us real people · same-day reply.
A
/asos/v1

11 active endpoints. Every call is 1 credit.

  • POST/asos/v1/search
  • POST/asos/v1/category
  • POST/asos/v1/sale
  • POST/asos/v1/new_in
  • POST/asos/v1/product
  • POST/asos/v1/products
  • POST/asos/v1/navigation
  • +4 more

What ASOS endpoints does ReefAPI ship?

11 live read endpoints. Read-only data API: no writes, no account actions, no dashboard access on the target site.

11 endpoints

search

1 cr

Keyword product search across the ASOS catalogue with filters (price, brand, colour, size, pr…

required
query
optional
store, lang, currency, country, offset, limit, sort, min_price, max_price, brand, colour, color, size, product_type, on_sale, new_in_within, discount, channel, key_store_dataversion

category

1 cr

Browse all products in a category by category_id, with the same filters, sorting and paginati…

required
category_id
optional
store, lang, currency, country, offset, limit, sort, min_price, max_price, brand, colour, color, size, product_type, on_sale, new_in_within, discount, channel

sale

1 cr

On-sale / marked-down products only.

required
optional
query, category_id, store, lang, currency, country, offset, limit, sort, min_price, max_price, brand, colour, color, size, product_type, discount

new_in

1 cr

Newest arrivals.

required
optional
query, category_id, store, lang, currency, country, offset, limit, new_in_within, min_price, max_price, brand, colour, color, size, product_type

product

1 cr

full product detail (sizes/stock/description/images) by product_id or product_url.

required
optional
product_id, product_url, store

products

1 cr

batch product detail for comma-separated product_ids.

required
product_ids
optional
store

navigation

1 cr

category links from gender landing pages.

required
optional
gender, store, format

reviews

1 cr

product reviews + rating summary from PDP embedded ratings blob (paginated).

required
optional
product_id, product_url, offset, limit

similar

1 cr

related products via same-brand search fallback (true mightLike API is account-gated).

required
optional
product_id, product_url, limit, store

filters

1 cr

available search/category facets (brands, colours, sizes, price ranges).

required
optional
query, category_id, store, lang, currency, country

suggestions

1 cr

search autocomplete suggestions for partial query.

required
query
optional
store, lang, currency, country

Every parameter, every allowed value →

ASOS API

3 of 11 endpoints, ready to run

View docs ↗

Product cards with the id, brand, colour, the price block with its currency and markdown flag, the images, the stock flag and the sibling colourways.

1 credit1 required · 5 optional
POST/asos/v1/search
ok926 ms · 24 records · sample
{
  "ok": true,
  "meta": {
    "api": "asos",
    "endpoint": "search",
    "mode": "live",
    "latency_ms": 926,
    "record_count": 24,
    "cache_hit": false,
    "completeness_pct": 100
  },
  "data": {
    "products": [
      {
        "id": 210430491,
        "name": "ASOS DESIGN poplin halter neck swing mini sundress in lemon",
        "brand": "ASOS DESIGN",
        "colour": "Lemon",
        "colour_way_id": 210430492,
        "product_code": 155514594,
        "price": {
          "current_value": 34.99,
          "current_text": "$34.99",
          "previous_value": null,
          "previous_text": "",
          "rrp_value": null,
          "rrp_text": "",
          "currency": "USD",
          "is_marked_down": false,
          "is_outlet_price": false
        },
        "images": [
          "https://images.asos-media.com/images.asos-media.com/products/asos-design-poplin-halter-neck-swing-mini-sundress-in-lemon/210430491-1-lemon",
          "https://images.asos-media.com/images.asos-media.com/products/asos-design-poplin-halter-neck-swing-mini-sundress-in-lemon/210430491-2",
          "https://images.asos-media.com/images.asos-media.com/products/asos-design-poplin-halter-neck-swing-mini-sundress-in-lemon/210430491-3"
        ],
        "url": "https://www.asos.com/asos-design/asos-design-poplin-halter-neck-swing-mini-sundress-in-lemon/prd/210430491#colourWayId-210430492",
        "in_stock": true,
        "is_selling_fast": false,
        "has_variant_colours": false,
        "colour_variant_product_ids": [
          210430491,
          210430512,
          210430569
        ],
        "video_url": "www.asos-video.com/video/upload/q_auto/t_legacy_product_video/210430491-catwalk"
      },
      {
        "id": 210358797,
        "name": "Never Fully Dressed Michaela slinky cowl neck tie shoulders mini dress in abstract multi print ",
        "brand": "Never Fully Dressed",
        "colour": "Multi",
        "colour_way_id": 210358803,
        "product_code": 155222898,
        "price": {
          "current_value": 157,
          "current_text": "$157.00",
          "previous_value": null,
          "previous_text": "",
          "rrp_value": null,
          "rrp_text": "",
          "currency": "USD",
          "is_marked_down": false,
          "is_outlet_price": false
        },
        "images": [
          "https://images.asos-media.com/images.asos-media.com/products/never-fully-dressed-michaela-slinky-cowl-neck-tie-shoulders-mini-dress-in-abstract-multi-print/210358797-1-multi",
          "https://images.asos-media.com/images.asos-media.com/products/never-fully-dressed-michaela-slinky-cowl-neck-tie-shoulders-mini-dress-in-abstract-multi-print/210358797-2",
          "https://images.asos-media.com/images.asos-media.com/products/never-fully-dressed-michaela-slinky-cowl-neck-tie-shoulders-mini-dress-in-abstract-multi-print/210358797-3"
        ],
        "url": "https://www.asos.com/never-fully-dressed/never-fully-dressed-michaela-slinky-cowl-neck-tie-shoulders-mini-dress-in-abstract-multi-print/prd/210358797#colourWayId-210358803",
        "in_stock": true,
        "is_selling_fast": false,
        "has_variant_colours": false,
        "colour_variant_product_ids": [],
        "video_url": null
      },
      {
        "id": 210786932,
        "name": "ASOS DESIGN crochet knit halter maxi dress with trim in striped print",
        "brand": "ASOS DESIGN",
        "colour": "Ecru stripe",
        "colour_way_id": 210786944,
        "product_code": 156674975,
        "price": {
          "current_value": 54.99,
          "current_text": "$54.99",
          "previous_value": null,
          "previous_text": "",
          "rrp_value": null,
          "rrp_text": "",
          "currency": "USD",
          "is_marked_down": false,
          "is_outlet_price": false
        },
        "images": [
          "https://images.asos-media.com/images.asos-media.com/products/asos-design-crochet-knit-halter-maxi-dress-with-trim-in-striped-print/210786932-1-ecrustripe",
          "https://images.asos-media.com/images.asos-media.com/products/asos-design-crochet-knit-halter-maxi-dress-with-trim-in-striped-print/210786932-2",
          "https://images.asos-media.com/images.asos-media.com/products/asos-design-crochet-knit-halter-maxi-dress-with-trim-in-striped-print/210786932-3"
        ],
        "url": "https://www.asos.com/asos-design/asos-design-crochet-knit-halter-maxi-dress-with-trim-in-striped-print/prd/210786932#colourWayId-210786944",
        "in_stock": true,
        "is_selling_fast": false,
        "has_variant_colours": false,
        "colour_variant_product_ids": [
          210786751,
          210786932
        ],
        "video_url": "www.asos-video.com/video/upload/q_auto/t_legacy_product_video/210786932-catwalk"
      }
    ],
    "facets": [
      {
        "id": "range",
        "name": "Sale/New Season",
        "type": "TextMultiSelect",
        "values": [
          {
            "id": "new_season",
            "name": "New Season",
            "count": 5230,
            "is_selected": false
          },
          {
            "id": "sale",
            "name": "Sale",
            "count": 1192,
            "is_selected": false
          }
        ]
      },
      {
        "id": "freshness_band",
        "name": "New in date",
        "type": "TextMultiSelect",
        "values": [
          {
            "id": "1",
            "name": "Today",
            "count": 20,
            "is_selected": false
          },
          {
            "id": "2",
            "name": "Yesterday",
            "count": 20,
            "is_selected": false
          },
          {
            "id": "3",
            "name": "Last 7 Days",
            "count": 73,
            "is_selected": false
          }
        ]
      },
      {
        "id": "floor",
        "name": "Gender",
        "type": "TextMultiSelect",
        "values": [
          {
            "id": "1001",
            "name": "Men",
            "count": 44,
            "is_selected": false
          },
          {
            "id": "1000",
            "name": "Women",
            "count": 6382,
            "is_selected": false
          },
          {
            "id": "2001",
            "name": "Unisex",
            "count": 4,
            "is_selected": false
          }
        ]
      }
    ],
    "search_term": "summer dress",
    "category_name": null,
    "total": 6422,
    "offset": 0,
    "limit": 24,
    "has_more": true,
    "next_offset": 24
  }
}
Real response, fetched from the live endpoint with the parameters on the left — trimmed to the first few rows, with seller names left out. Press Try it for the untrimmed response.

How the ASOS API works

ASOS is a normal ReefAPI surface — the same four rules that hold for every other engine on the key.

01
Authenticate
x-api-key header

No OAuth app, no request signing, no per-site account. One key covers all 184 engines.

02
Call
POST /asos/v1/…

Every route is a POST with a JSON body. Parameters are validated against the published schema before anything is charged.

03
Pay
1 credit per call

Credits, not seats. Failed and blocked calls are never charged, and cache hits cost nothing.

04
Read
{ ok, data, meta, error }

One envelope everywhere. meta carries latency_ms, record_count and the endpoint that answered.

One id, five prices

The thing that makes ASOS easy to work with is that the product id is global. Search once in any store, then price the same id wherever you sell.

01search
POST/asos/v1/search
{"query": "summer dress", "store": "US", "limit": 24}

Take id from a row. It is the same number on every storefront.

02product
POST/asos/v1/product
{"product_id": 210786932, "store": "GB"}

Same id, different store: the currency and the price change and nothing else does. Verified on one product across two storefronts.

03products
POST/asos/v1/products
{"product_ids": "210786932,210430491", "store": "US"}

Several ids in one call when you are refreshing a list you already hold.

A cross-market price for one garment in two calls, with no id mapping table to maintain.

request
curl -X POST https://api.reefapi.com/asos/v1/search \
  -H "x-api-key: $REEF_KEY" \
  -H "content-type: application/json" \
  -d '{"query":"dress"}'
response envelope
{
  "ok": true,
  "data": { … },
  "meta": {
    "api": "asos",
    "endpoint": "search",
    "mode": "live",
    "latency_ms": …,
    "record_count": …
  },
  "error": null
}

ASOS ids, stores and the four numbers on one product

A single ASOS garment carries four different identifiers, and one of them changes meaning between actions. The store parameter is what sets the currency, and the enum now lists only the five storefronts that answer. Everything below was measured on 2026-08-27, mostly against product 210791038, a Bershka halter midi dress.

Field or valueWhat it identifiesMeasured value
idThe colourway-level product, the number after /prd/ in the URL210791038
colour_way_idWhich colour the row is showing. Present on search rows, null on the product action210791039
product_codeASOS's internal style code. A string on product, an integer on search"156679606"
variants[].idOne size of one colour210791040, for size XS - UK 6
variants[].skuThat size's stock-keeping code"156679614"
variants[].ean13-digit retail barcode for that size"8447489469461"
variants[].size vs brand_sizeASOS's own size label vs the brand's label"XS - UK 6" vs "XS"
variants[].sellerPartner that fulfils the order. null when ASOS holds the stock itself{"id": "BRKAFS", "description": "BERSHKA UK LTD"}
store=COM / GBUK and international. COM is the defaultcurrency GBP, prices formatted "£27.99"
store=USUnited Statescurrency USD, prices formatted "$157.00"
store=DE / FRGermany and Francecurrency EUR, current_text "64,99 €" with current_value 64.99
store=<anything else>Rejected by the schema, with no upstream callINVALID_PARAM "invalid value for 'store'", with the five allowed values in error.detail

current_text is formatted the way that store formats money, comma-decimal included, while current_value is always a plain number. On the product action watch meta.stockprice: "v4_matched_12" means live per-size price and stock were matched for 12 variants, and "unavailable" means they were not and the prices you are looking at are the ones embedded in the page.

Which storefronts answer, and the ceiling behind the result count

Measured on the same query against every storefront in the schema, and paged until it stopped. Two of these go against us.

Five storefronts answer, and two of them are the same one

COM, GB, US, DE and FR all returned a full page, priced in GBP, GBP, USD, EUR and EUR. COM and GB reported the identical result count and the identical first 24 product ids — COM is the British store. A sixth value that used to sit in the enum has been removed because ASOS never accepted it; the five that remain are the five that work, and anything else is refused by the schema before a call is made.

The id does not move between stores

One product asked for in the US and then in the GB store returned the same product id, the same four size variants and the same supplier SKUs. What changed was the price and the currency — 54.99 dollars against 32.00 pounds. There is no per-market id mapping to build.

Currency follows the store and price is on every row

24 of 24 rows priced in every store, in GBP, USD and EUR respectively, with the currency stated inside the price block rather than implied.

Against us: paging stops at exactly one thousand products

On a query whose own reported total was 6,454: offset 960 returned 40 rows, offset 990 returned 10, and offset 1,000 returned zero. The wall is a hard thousand per query regardless of the count. Split a broad sweep by category, brand or price band rather than paging into it.

The keyword is read in the store's own language

The same English phrase reported 6,198 matches on the British store, 6,457 on the American one, 6,271 on the German one and 261 on the French one. A thin result on a non-English store is usually the language of your query, not missing inventory.

The previous price is only where you would expect it

On a general search, previous_value and the recommended retail price were null on all 48 rows and no row was flagged marked down. On the sale action, every one of the 24 rows carried a previous price and the markdown flag — 52.50 from 70.00, 96.00 from 128.00. On product detail the previous price equals the current price when nothing is discounted. Read the markdown flag, not the presence of the field.

The same query twice returns the same rows

Two runs returned the identical 24 ids in the same order. The reported total drifted by three between runs, which is the catalogue moving rather than the answer wobbling.

A dead id is an unambiguous not-found

An id that does not exist answers NOT_FOUND with retryable false and names the page it tried. Reviews carry no author at all — a rating, a title, a body, a recency string and a verified-purchase flag, and nothing that identifies the writer.

What people build with ASOS

The jobs this data is most often used for.

11

endpoints

1

credit per call

01

Fashion-pricing tools call search and sale to track ASOS prices and markdowns by brand.

02

Catalog-enrichment products use product to fill listings with images, colours and variants.

03

Retail analysts use new_in and facets to spot trending brands and categories.

What ASOS data costs

The cheapest call here is 1 credit, so $15/mo (Pro) buys 10,000 of them — $1.50 per 1,000 credits. Credits roll over and never expire, and failed or blocked calls are not charged.

Full pricing →
$0.67–$1.50 / 1,000 credits
  • 1,000 free credits on signup, no card
  • One key, all 184 APIs, one credit pool
  • Failed and blocked calls are never charged
  • Credits roll over and never expire

Call it in two lines

Sign up, get 1,000 credits and one key that works on every engine. Then this is the whole protocol.

curl
curl -X POST https://api.reefapi.com/asos/v1/search \
  -H "x-api-key: $REEF_KEY" \
  -H "content-type: application/json" \
  -d '{"query":"dress"}'
python
import requests

r = requests.post(
    "https://api.reefapi.com/asos/v1/search",
    headers={"x-api-key": REEF_KEY},
    json={
  "query": "dress"
},
)
print(r.json()["data"])
FAQ

Have a question? We got answers.

The questions people actually ask before wiring up ASOS.

Get a free key →
What is the difference between an ASOS product id, product_code and sku?

id is the product as ASOS links to it, and it is colour-level: 210791038 is the yellow colourway of that dress. product_code ("156679606") is the internal style code. sku is per size, so the XS is "156679614", and each size also has its own 13-digit ean ("8447489469461") and its own numeric variant id (210791040). Fetch by id, match against a warehouse feed by sku or ean.

Which ASOS store codes actually return data, and what currency does each give?

COM and GB return GBP, US returns USD, DE and FR return EUR - re-measured on all five. Those five are the whole enum; a sixth value that used to sit in it was removed because ASOS never accepted it, and anything outside the five is now refused by the schema before a call goes out, with the allowed values listed in the error. The default is COM. The store changes the assortment too, not just the money: the same query reported 21,417 results on GB and 100 on FR.

Why did asking for store=US return a price in GBP?

Because that product is not sold in the US store, so the live per-store price and stock lookup found nothing and the response fell back to the price embedded in the product page. The tell is meta.stockprice: it read "unavailable" on that call, against "v4_matched_5" for the same product with store=COM. When you request a market, check that field before trusting price.currency.

Is price.previous_value the was-price?

Only when is_marked_down is true. On the product action a full-price item returns previous_value equal to current_value (27.99 and 27.99), while search returns previous_value null for the same item. On a marked-down item the actions agree: 210882523 came back as current 17.99, previous 29.99, is_marked_down true. So branch on is_marked_down rather than on whether previous_value is present.

How do I see which sizes are in stock?

variants[] carries in_stock per size, plus is_low_in_stock and is_restocking_soon. On product 210791038 the XS and S variants were in_stock true while M - UK 10 was false, even though the product-level in_stock was true. Product-level in_stock means at least one size is available, so read the variant rows whenever size matters.

What does a populated variants[].seller mean?

It means a partner brand fulfils the order rather than ASOS shipping from its own stock. The Bershka dress returned seller {"id": "BRKAFS", "description": "BERSHKA UK LTD"} on every size, while a Never Fully Dressed item on the US store returned seller null on its variants. The id is a short alphanumeric partner code, not a numeric account id.

What happens if I pass a brand name ASOS does not recognise?

You get an empty result set, not an error. Brand names are resolved to ASOS facet ids before the search runs, so a misspelling like 'Nikeee' resolved to nothing and the call returned ok true with total 0 and no products. Call the filters action first to list the brand, colour and size facets a query actually supports.

Why does colour_way_id come back null on the product action?

The product action returns the garment as a whole and hangs colour information off each variant row instead, so the top-level colour_way_id is null while every variant carries its own (210791039 on that dress). Search rows do fill the top-level field, because a search row is one colourway. If you need it from the product action, read variants[0].colour_way_id.

What is the ASOS API?

ASOS API is a ReefAPI endpoint group for asos It returns live JSON through POST requests under /asos/v1.

Is the ASOS API free to try?

Yes. ReefAPI starts with 1,000 free credits, no card required. ASOS calls use the same shared credit balance as every other ReefAPI engine.

Do I need an ASOS login or account?

No login to ASOS is needed for the API response. You call ReefAPI with your x-api-key header, and the playground can run live examples before you create a production key.

How fresh is the ASOS data?

The page example is captured from a live search call, and production requests fetch live data through ReefAPI rather than a static sample.

How many credits does the ASOS API use?

ASOS actions currently cost 1 credit per successful call. Failed or blocked calls are free, and all APIs draw from one credit pool.

Can I call ASOS from an AI assistant or MCP client?

Yes. Connect ReefAPI once through MCP and your assistant can call asos actions with the same key, credit pool and JSON envelope used by normal REST requests.

35 E-commerce & Marketplaces APIs on the same key

One key, one credit pool, one response envelope. If you are pulling ASOS, you are one call away from the rest of the category — no second contract, no second integration.

Need something this API does not do?

Name the endpoint, the field, or a source we do not carry yet. We ship new APIs every week and you would be first to get the key. Real people read every message and reply the same day.

0/4000

No account needed · we reply from [email protected]

Try it on your own data before you pay anything

The call above is the real endpoint, not a recording. A free key gives you 1,000 credits, the other 183 APIs, and the same envelope everywhere.

Endpoints, parameters and credit costs on this page are read from the live catalog and cannot drift from what the API accepts. Field notes were captured on 2026-08-28.