ASOS APIasos.com ↗
Access ASOS product search, category browsing, product details, sale items, trending products, and brand listings via a structured REST API.
What is the ASOS API?
The ASOS API covers 10 endpoints that expose ASOS's full fashion catalog, from keyword search and category browsing to per-product stock and pricing data. The get_product_details endpoint returns four structured objects per product — search_data, stock_price, structured_data (JSON-LD), and initial_store — while search_products returns facets, item counts, and paginated results against ASOS's entire indexed inventory.
curl -X GET 'https://api.parse.bot/scraper/54c0c805-9176-4dcd-b380-7bdc4a05a8ab/search_products?sort=freshness&limit=5&query=sneakers&offset=0' \ -H 'X-API-Key: $PARSE_API_KEY'
Typed, relational, agent-ready
A generated client with real types, enums, and the links between objects — the structure a flat JSON response can't carry. Autocompletes in your editor and reads cleanly to coding agents.
- Fully typed · autocompletes
- Objects link to objects
- Typed errors & pagination
Typed Python client. Set up the SDK in your uv project, then pull this API’s typed client:
uv add parse-sdk uv run parse init uv run parse add --marketplace asos-com-api
uv run parse add --marketplace pulls a pinned snapshot of this canonical API — it won’t change underneath you. To customize it, subscribe and swap to your own copy.
"""Walkthrough: ASOS Product API — search, browse categories, get recommendations."""
from parse_apis.asos_product_api import Asos, Sort, Gender, ProductNotFound
client = Asos()
# Search for products sorted by price, capped at 5 results.
for product in client.products.search(query="sneakers", sort=Sort.PRICE_ASC, limit=5):
print(product.name, product.brandName, product.price.current.text)
# Take one trending product and explore its recommendations.
trending = client.products.trending(limit=1).first()
if trending:
for rec in trending.similar.list(limit=3):
print(rec.name, rec.brandName, rec.price.current.text)
# Browse a category by constructing it from its ID.
category = client.category(id="4209")
for item in category.products(sort=Sort.FRESHNESS, limit=3):
print(item.name, item.colour, item.isSellingFast)
# List available brands.
for brand in client.brands.list(limit=5):
print(brand.name, brand.count)
# Typed error handling on product lookup.
try:
detail = client.products.search(query="nonexistent_sku_xyz_00000", limit=1).first()
if detail:
print(detail.name)
except ProductNotFound as exc:
print(f"Product gone: {exc.product_id}")
print("exercised: products.search / products.trending / similar.list / category.products / brands.list")
Full-text search over the ASOS catalog by keyword. Returns paginated product listings with facets for filtering (brand, price range, gender). Paginates via offset; each product includes id, name, price, brandName, colour, imageUrl. Facets describe the available refinement axes for the current query.
| Param | Type | Description |
|---|---|---|
| sort | string | Sort order for results. |
| limit | integer | Max results per page (1-200). |
| queryrequired | string | Search keyword (e.g. 'sneakers', 'black dress'). |
| offset | integer | Pagination offset (number of items to skip). |
{
"type": "object",
"fields": {
"facets": "array of facet groups for filtering (brand, price range, gender, etc.)",
"products": "array of product objects with id, name, price, brandName, colour, url, imageUrl",
"itemCount": "integer, total number of matching products",
"searchTerm": "string, the query that was searched"
},
"sample": {
"data": {
"facets": [
{
"id": "range",
"name": "Sale/New Season",
"facetValues": [
{
"id": "new_season",
"name": "New Season",
"count": 5724,
"isSelected": false
}
]
}
],
"products": [
{
"id": 207206543,
"url": "new-balance/new-balance-740-sneakers-in-beige-exclusive-to-asos/prd/207206543#colourWayId-207206544",
"name": "New Balance 740 sneakers in beige - Exclusive to ASOS",
"price": {
"current": {
"text": "$114.99",
"value": 114.99
},
"currency": "USD",
"previous": {
"text": "",
"value": null
},
"isMarkedDown": false
},
"colour": "BEIGE",
"imageUrl": "images.asos-media.com/products/new-balance-740-sneakers-in-beige-exclusive-to-asos/207206543-1-beige",
"brandName": "New Balance",
"isSellingFast": true
}
],
"itemCount": 9243,
"searchTerm": "sneakers"
},
"status": "success"
}
}About the ASOS API
Product Search and Category Browsing
The search_products endpoint accepts a required query string and optional sort (freshness, priceasc, pricedesc), limit, and offset parameters. It returns a products array with id, name, price, brandName, url, and imageUrl per item, plus an itemCount integer and a facets array covering brand, price range, gender, and other filter dimensions. The get_category_products endpoint works similarly but takes a category_id instead — for example, 4209 for shoes or 7046 for women's sale — and supports an additional refine parameter for applying facet filters within a category.
Product Details and Recommendations
get_product_details accepts either a numeric product_id or a full product_url and returns four objects. structured_data contains a JSON-LD Product schema with name, brand, description, offers, and sku. stock_price reflects real-time availability and pricing per variant. search_data gives listing-level fields like colour and brandName. get_product_similar takes a product_id and returns a recommendations array with id, name, price, brandName, and imageUrl for related items.
Catalog Navigation and Discovery
get_women_categories and get_men_categories return full hierarchical navigation trees with link (including linkType and webUrl), content (title and image URLs), and nested children arrays. These trees mirror the category structure used in get_category_products. get_brands_list pulls from search facets and returns brand id, name, and count (number of products per brand) across the full catalog.
Sale, Trending, and New Arrivals
get_sale_products defaults to category IDs 7046 (women) and 8409 (men) and accepts a gender filter or a custom category_id override. get_trending_products defaults to category 51137 (Selling Fast). get_new_arrivals defaults to 2623 for women and 27110 for men. All three return the standard products array with sale pricing where applicable, an itemCount, and a categoryName string.
The ASOS API is a managed, monitored endpoint for asos.com — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when asos.com changes and a check fails, the API is automatically queued for repair and re-verified. It is built to keep working as the site underneath it changes.
This isn't an official asos.com API — it's an independent, maintained REST wrapper over public data. Where the source has no official API (or only a limited one), Parse gives you a stable contract over a source that never promised one, and keeps it current. Need a new endpoint or field? You can revise it yourself in plain English and the agent rebuilds it against the live site in minutes — contributing the change back to the shared API is free.
Will this API break when the source site changes?+
Is this an official API from the source site?+
Can I fix or extend this API myself if I need a new endpoint or field?+
What happens if I call an endpoint that has an issue?+
- Build a price comparison tool that queries
search_productsby keyword and sorts results bypriceascorpricedesc. - Monitor stock and pricing changes for specific products using
get_product_detailswith aproduct_id. - Populate a fashion discovery feed with
get_new_arrivalsfiltered by gender. - Track sale inventory across men's and women's sections using
get_sale_productswith thegenderparameter. - Build a brand directory by calling
get_brands_listto retrieve brand names and product counts. - Power a 'You Might Also Like' widget using
get_product_similarrecommendations. - Construct a category navigation UI from the hierarchical trees returned by
get_women_categoriesandget_men_categories.
| Tier | Price | Credits/month | Rate limit |
|---|---|---|---|
| Free | $0/mo | 100 | 5 req/min |
| Hobby | $30/mo | 1,000 | 20 req/min |
| Developer | $100/mo | 5,000 | 100 req/min |
One credit = one API call regardless of which marketplace API you call. Exceeding the rate limit returns a 429 response. Authenticate with the X-API-Key header.
Does ASOS have an official developer API?+
What does `get_product_details` return beyond basic listing fields?+
get_product_details returns four objects: search_data (listing fields like name, price, colour, brandName), stock_price (real-time per-variant availability and pricing), structured_data (a JSON-LD Product schema including offers, sku, description, and brand), and initial_store (site navigation configuration). You can supply either a numeric product_id or a full product URL.Does the API return customer reviews or ratings for products?+
How does pagination work for search and category endpoints?+
search_products and get_category_products accept limit (max results per page) and offset (starting position) parameters. The response includes an itemCount integer representing the total number of matching results, which you can use to calculate how many pages exist for a given query.Can I filter category results beyond the basic sort order?+
get_category_products supports a refine parameter for applying facet-based filters within a category, in addition to sort. Available facets — such as brand, price range, and gender — are also returned in the facets array of each response, giving you the filter values valid for that category. Search-level refinements are available through the facets returned by search_products, but the refine parameter is specific to category browsing.