theordinary.com APItheordinary.com ↗
Access The Ordinary's full product catalog via API. Retrieve product details, INCI ingredient lists, category filters, keyword search, and customer reviews.
curl -X GET 'https://api.parse.bot/scraper/40173335-04fa-432e-90d9-cdea5deb7cd7/get_all_products?sort=top-sellers&limit=2&start=0' \ -H 'X-API-Key: $PARSE_API_KEY'
Retrieve all products from The Ordinary's main listing. Returns paginated results with full product details from each item.
| Param | Type | Description |
|---|---|---|
| sort | string | Sort rule (e.g. 'top-sellers', 'new-arrivals'). |
| limit | integer | Number of products to return. |
| start | integer | Pagination offset. |
{
"type": "object",
"fields": {
"sz": "integer page size used",
"start": "integer pagination offset used",
"products": "array of full product detail objects including name, price, currency, ingredients, images, and inventory",
"total_on_page": "integer total number of products found on this page"
},
"sample": {
"data": {
"sz": 2,
"start": 0,
"products": [
{
"_v": "20.10",
"id": "769915234053",
"name": "Glycolic Acid 7% Exfoliating Toner",
"_type": "product",
"brand": "The Ordinary",
"price": 9,
"currency": "USD",
"c_ingredients": "Aqua (Water), Glycolic Acid, Rosa Damascena Flower Water...",
"c_keyIngredients": "Glycolic Acid, Aloe Barbadensis Leaf Water, Panax Ginseng Root Extract, Tasmannia Lanceolata Fruit/Leaf Extract",
"short_description": "A daily glycolic acid toner that smooths skin texture, evens tone, and enhances luminosity."
}
],
"total_on_page": 2
},
"status": "success"
}
}About the theordinary.com API
The Ordinary API covers 7 endpoints for querying The Ordinary's skincare catalog, returning product names, prices, full INCI ingredient lists, inventory status, and customer reviews. The get_product_ingredients endpoint isolates the complete INCI formula and key actives for any product by ID, while get_products_filtered lets you narrow results by concern, active ingredient, format, or regimen step — useful for building ingredient-aware skincare tools.
Product Catalog and Search
The get_all_products endpoint returns paginated product objects with fields including name, price, currency, c_ingredients, c_keyIngredients, inventory, and image data. You can sort by top-sellers or new-arrivals and control pagination with limit and start. The get_products_by_category endpoint accepts a category parameter with values like skincare, body+hair, sets-collections, bestsellers, and new-featured, returning the same full product detail shape. For keyword-based lookup, search_products accepts a query string — for example 'niacinamide' or 'vitamin c' — and returns matching products with all detail fields.
Filtering and Product Detail
get_products_filtered is a POST endpoint that accepts a filters object supporting keys: product_type, concern, active_ingredient, format, regimen_step, and prefer. This allows precise catalog queries such as finding all serums targeting hyperpigmentation that contain a specific active. The get_product_details endpoint accepts either a slug-style product_id (e.g. rdn-niacinamide-10pct-zinc-1pct-30ml) or a numeric UPC, returning the full record including short_description, brand, inventory availability object, and the complete ingredients fields.
Ingredients and Reviews
get_product_ingredients returns the ingredients (full INCI string) and key_ingredients for a product in a lightweight response, without the overhead of the full detail object — useful when you only need formula data at scale. For social proof data, get_product_reviews retrieves customer reviews from Bazaarvoice using a numeric master product ID found in the master.master_id field of product responses. The reviews response includes a Results array of review objects, a TotalResults count, and an Includes object with product and author metadata. Pagination is controlled via limit and offset.
- Build an ingredient comparison tool using
c_ingredientsandc_keyIngredientsfields across multiple products. - Filter The Ordinary's catalog by active ingredient or skin concern for a personalized routine recommender.
- Monitor inventory availability across the product catalog using the
inventoryfield in product detail responses. - Aggregate customer review sentiment using
TotalResultsand review text fromget_product_reviews. - Populate a skincare database with full INCI lists via
get_product_ingredientsfor allergen or formulation research. - Track price changes over time by polling
get_all_productssorted bynew-arrivalsortop-sellers. - Search by keyword (e.g.
'retinol') and extract format and regimen step attributes for product categorization.
| 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 | 250 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 The Ordinary have an official developer API?+
What product ID format does `get_product_reviews` require, and where do I find it?+
get_product_reviews requires a numeric master product ID (e.g. 100436 for Niacinamide 10% + Zinc 1%). This ID is found in the master.master_id field returned by get_product_details or any of the listing endpoints. It is distinct from the slug-style ID used by other endpoints.Can I filter products by multiple concerns or ingredients at the same time?+
get_products_filtered endpoint accepts a filters object with keys including concern, active_ingredient, product_type, format, regimen_step, and prefer. Whether multiple keys can be combined in one request depends on the filter implementation — testing with a filters object containing more than one key is the reliable way to confirm multi-filter behavior for a given combination.Does the API cover The Ordinary products sold on third-party retailers like Sephora or ASOS?+
Are bundle or set products returned separately from individual items?+
get_products_by_category endpoint accepts sets-collections as a valid category value, which returns sets as a distinct group. Individual product endpoints like get_product_details can be called on set product IDs if you have them. Variant-level breakdown within a set (e.g. individual items inside a kit) is not exposed as a separate endpoint. You can fork the API on Parse and revise it to add a dedicated set-contents endpoint if that granularity is needed.