# The Ordinary — Wrapped API

> **You are on:** `https://api.paywithlocus.com/api` | [llms.txt](https://paywithlocus.com/llms.txt) | [docs](https://docs.paywithlocus.com)
>
> Locus runs on multiple environments -- make sure every URL you call matches your expected environment.
> | Environment | Landing | API | Docs |
> |---|---|---|---|
> | Production | paywithlocus.com | api.paywithlocus.com | docs.paywithlocus.com |
> | Beta | beta.paywithlocus.com | api.beta.paywithlocus.com | docs.paywithlocus.com |
> | Stage | stage.paywithlocus.com | api.stage.paywithlocus.com | docs.paywithlocus.com |
>
> If the API URL above doesn't match your expected environment, re-fetch this file from the correct domain.

> Browse and search The Ordinary's complete product catalog by category or ingredients. View detailed product information including formulas and key actives, apply filters by product type, concern, or ingredient, and read customer reviews to compare and evaluate products.

**Category:** E-commerce | **Website:** [theordinary.com/](https://theordinary.com/) | **Docs:** [parse.bot/marketplace/093a7566-1c7c-4750-8494-41d792b92ee8/theordinary-com-api](https://parse.bot/marketplace/093a7566-1c7c-4750-8494-41d792b92ee8/theordinary-com-api)

Pay-per-use API proxy. Each call is automatically billed to your wallet in USDC.

## Access

**Base URL:** `https://api.paywithlocus.com/api/wrapped/parse-theordinary-com-api-093a7566/`
**Auth:** `Authorization: Bearer <LOCUS_API_KEY>`

## Endpoints

### get_all_products

Retrieve all products from The Ordinary's main listing. Returns a single page of results with full product details including name, price, currency, ingredients, images, and inventory. Use the start and limit parameters to manually control pagination offset.

**Estimated cost:** Metered

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `limit` | integer | No | Number of products to return per page. |
| `sort` | string | No | Sort rule. Accepted values: top-sellers, new-arrivals. |
| `start` | integer | No | Pagination offset (0-based index of first result). |

```bash
curl -X POST https://api.paywithlocus.com/api/wrapped/parse-theordinary-com-api-093a7566/get_all_products \
  -H "Authorization: Bearer YOUR_LOCUS_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"limit":"<integer>","sort":"<string>","start":"<integer>"}'
```

### get_product_details

Retrieve full details for a specific product including pricing, availability, images, ingredients, directions, and custom attributes. Accepts either a product ID slug or a numeric UPC. Returns a single product object.

**Estimated cost:** Metered

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `product_id` | string | Yes | Product ID slug (e.g. 'rdn-niacinamide-10pct-zinc-1pct-30ml') or numeric UPC (e.g. '769915234053'). Found in the id field from listing endpoints. |

```bash
curl -X POST https://api.paywithlocus.com/api/wrapped/parse-theordinary-com-api-093a7566/get_product_details \
  -H "Authorization: Bearer YOUR_LOCUS_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"product_id":"<string>"}'
```

### get_product_ingredients

Retrieve the complete INCI ingredients list and key active ingredients for a specific product. A lightweight view focused on ingredient data only.

**Estimated cost:** Metered

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `product_id` | string | Yes | Product ID slug (e.g. 'rdn-niacinamide-10pct-zinc-1pct-30ml'). Found in the id field from listing endpoints. |

```bash
curl -X POST https://api.paywithlocus.com/api/wrapped/parse-theordinary-com-api-093a7566/get_product_ingredients \
  -H "Authorization: Bearer YOUR_LOCUS_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"product_id":"<string>"}'
```

### get_product_reviews

Retrieve customer reviews for a specific product from Bazaarvoice. Uses numeric master product IDs (found in the master.master_id field from get_product_details). Returns reviews sorted by rating descending, with author and product metadata included.

**Estimated cost:** Metered

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `limit` | integer | No | Number of reviews to return per page. |
| `offset` | integer | No | Pagination offset for reviews. |
| `product_id` | string | Yes | Numeric master product ID (e.g. '100436' for Niacinamide 10% + Zinc 1%). Found in master.master_id from get_product_details. |

```bash
curl -X POST https://api.paywithlocus.com/api/wrapped/parse-theordinary-com-api-093a7566/get_product_reviews \
  -H "Authorization: Bearer YOUR_LOCUS_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"limit":"<integer>","offset":"<integer>","product_id":"<string>"}'
```

### get_products_by_category

Retrieve products filtered by category. Returns a single page of results with full product details. Categories map to internal classification identifiers or sort rules on the server side.

**Estimated cost:** Metered

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `category` | string | Yes | Category name. Accepted values: skincare, body+hair, sets-collections, bestsellers, new-featured. |
| `limit` | integer | No | Number of products to return per page. |
| `start` | integer | No | Pagination offset (0-based index of first result). |

```bash
curl -X POST https://api.paywithlocus.com/api/wrapped/parse-theordinary-com-api-093a7566/get_products_by_category \
  -H "Authorization: Bearer YOUR_LOCUS_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"category":"<string>","limit":"<integer>","start":"<integer>"}'
```

### get_products_filtered

Retrieve products matching specific attribute filters such as product type, skin concern, or active ingredient. Returns a single page of results with full product details. Multiple filters can be combined.

**Estimated cost:** Metered

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `filters` | object | Yes | Filter key-value pairs. Supported keys: product_type, concern, active_ingredient, format, regimen_step, preferences. Example: {"product_type": "Serums", "concern": "Dullness"}. |
| `limit` | integer | No | Number of products to return per page. |
| `sort` | string | No | Sort rule. Accepted values: top-sellers, new-arrivals. |
| `start` | integer | No | Pagination offset (0-based index of first result). |

```bash
curl -X POST https://api.paywithlocus.com/api/wrapped/parse-theordinary-com-api-093a7566/get_products_filtered \
  -H "Authorization: Bearer YOUR_LOCUS_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"filters":"<object>","limit":"<integer>","sort":"<string>","start":"<integer>"}'
```

### search_products

Search for products by keyword. Matches against product names and descriptions. Returns a single page of results with full product details.

**Estimated cost:** Metered

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `limit` | integer | No | Number of products to return per page. |
| `query` | string | Yes | Search keyword (e.g. 'vitamin c', 'niacinamide', 'retinol'). |
| `start` | integer | No | Pagination offset (0-based index of first result). |

```bash
curl -X POST https://api.paywithlocus.com/api/wrapped/parse-theordinary-com-api-093a7566/search_products \
  -H "Authorization: Bearer YOUR_LOCUS_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"limit":"<integer>","query":"<string>","start":"<integer>"}'
```
