Tiffany & Co. API endpoint
Lists every category id Tiffany & Co.'s own product catalog accepts, each with a human-readable label, a kind (category for a real navigable department/subcategory, curated_shop for a curated gift/merchandising shelf), and a live product count. Each id is exactly what tiffany-category's own category parameter accepts -- resolves the category-discovery gap that parameter would otherwise leave as "find one from a storefront URL".
/tiffany/categoriesLists every category id Tiffany & Co.'s own product catalog accepts. Each entry's id is exactly what tiffany-category's own category parameter accepts -- this is the discovery endpoint for that parameter, so a caller never has to guess a category id from a storefront URL.
No parameters.
Notable response behavior:
kind distinguishes a real navigable department/subcategory (category) from a curated gift or merchandising shelf (curated_shop) -- both are valid, filterable category ids on the catalog, but they serve different browsing purposes.label is a human-readable label derived from id; it is not a precise department/subcategory split.product_count is the live count of catalog items carrying that category id as of fetched_at.| Field | Filled in, of 279 checked | Values in the sample |
|---|---|---|
| id | 279 | |
| label | 279 | “Gifts” and 278 other values |
| kind | 279 | category (237), curated_shop (42) |
| product_count | 279 | 1 to 1,598, median 37 |
| Parameter | Type | Required | Default | Description | Example |
|---|---|---|---|---|---|
| x-api-key (header) | string | Yes | API key required |
curl -X GET "https://api.crawlora.net/api/v1/tiffany/categories" \ -H "x-api-key: $CRAWLORA_API_KEY"
{
"code": 200,
"msg": "OK",
"data": {
"count": 279,
"fetched_at": "2026-09-10T12:00:00Z",
"categories": [
{
"id": "ecommerce_us_jewelry",
"label": "Jewelry",
"kind": "category",
"product_count": 1561
},
{
"id": "ecommerce_us_jewelry_necklaces_and_pendants",
"label": "Jewelry Necklaces And Pendants",
"kind": "category",
"product_count": 536
},
{
"id": "curated_ecommerce_us_gifts_anniversary_gifts",
"label": "Gifts Anniversary Gifts",
"kind": "curated_shop",
"product_count": 229
}
]
}
}Request schema
No body schema
Response schema
#/definitions/tiffany.categoriesResponseDoc
| Field | Type | Required | Enum | Bounds | Example | Description |
|---|---|---|---|---|---|---|
| code | integer | No | 200 | |||
| data | tiffany.CategoriesResponse | No | ||||
| data.categories | array | No | ||||
| data.categories[].id | string | No | ID is the exact value to pass as tiffany-category's own "category" query parameter. | |||
| data.categories[].kind | string | No | Kind distinguishes a real navigable department/category ("category", ids starting "ecommerce_us_") from a curated merchandising/gift shelf ("curated_shop", ids starting "curated_ecommerce_us_") -- both are valid, filterable category ids, but they serve different purposes: see the categories endpoint documentation. | |||
| data.categories[].label | string | No | Label is a human-readable label derived from ID. | |||
| data.categories[].product_count | integer | No | ProductCount is the live count of in-index products carrying this category id, as of FetchedAt. | |||
| data.count | integer | No | ||||
| data.fetched_at | string | No | ||||
| data.source_url | string | No | ||||
| msg | string | No | OK |
| Status | Description | Schema |
|---|---|---|
| 429 | Too Many Requests | #/definitions/app.Response |
| 503 | Service Unavailable | #/definitions/app.Response |
Use environment variables for secrets and keep Crawlora API keys server-side.
curl -X GET "https://api.crawlora.net/api/v1/tiffany/categories" \
-H "x-api-key: $CRAWLORA_API_KEY"