IKEA API endpoint
Returns a page of IKEA's full category taxonomy, sourced from IKEA's own site navigation data: every top-level department and nested subcategory, with the key each one uses as ikea_category's own category input. key is IKEA's own category key (numeric, e.g. 20649, or a short alphanumeric department code, e.g. st001). parent_key is the immediate parent category's own key (empty for a top-level department); level is depth in the taxonomy tree, starting at 1. q optionally filters by a case-insensitive substring of name.
/ikea/categoriesReturns a page of IKEA's full category taxonomy, sourced from IKEA's own site navigation data: every top-level department and nested subcategory, each with the key value that GET /ikea/category's own category parameter accepts. q optionally filters to categories whose name contains it (case-insensitive substring). country and language default to us/en; the taxonomy is locale-specific, so a different country/language returns a different tree. page (default 1) and page_size (1-1000, default 100) page through the full result set.
Each entry's key is either a numeric category id (e.g. 20649) or a short alphanumeric department code (e.g. st001) — both forms are directly usable as ikea/category's category input. parent_key is the immediate parent category's own key, empty for a top-level department. level is depth in the taxonomy tree, starting at 1 for a top-level department. Some categories are cross-listed under more than one parent in IKEA's own navigation (e.g. accessory categories shared between two furniture systems) — parent_key records one such parent, not every one each category is cross-listed under.
| Field | Filled in, of 25 checked | Values in the sample |
|---|---|---|
| key | 25 | |
| name | 25 | “Desk lamps” and 24 other values |
| parent_key | 24 | |
| level | 25 | 1 to 5, median 3 |
| url | 25 | ikea.com |
| Parameter | Type | Required | Default | Description | Example |
|---|---|---|---|---|---|
| q | string | No | Case-insensitive substring filter on category name | desk | |
| country | string | No | Lowercase 2-letter IKEA site country code | ||
| language | string | No | Lowercase 2-letter IKEA site language code | ||
| page | integer | No | 1-based page number Minimum: 1. | ||
| page_size | integer | No | Result count per page (1-1000) Minimum: 1. Maximum: 1000. | ||
| x-api-key (header) | string | Yes | API key required |
curl -X GET "https://api.crawlora.net/api/v1/ikea/categories?q=coffee&country=us&language=en&page=1" \ -H "x-api-key: $CRAWLORA_API_KEY"
{
"code": 200,
"msg": "OK",
"data": {
"total": 929,
"page": 1,
"page_size": 100,
"has_next": true,
"country": "us",
"language": "en",
"categories": [
{
"key": "st001",
"name": "Storage & organization",
"level": 1,
"url": "https://www.ikea.com/us/en/cat/storage-organization-st001/"
},
{
"key": "20649",
"name": "Desks & computer desks",
"parent_key": "fu004",
"level": 2,
"url": "https://www.ikea.com/us/en/cat/desks-computer-desks-20649/"
}
],
"source_url": "https://www.ikea.com/us/en/navigation/catalog-products-slim.json",
"fetched_at": "2026-09-16T00:00:00Z"
}
}Request schema
No body schema
Response schema
#/definitions/ikea.categoriesResponseDoc
| Field | Type | Required | Enum | Bounds | Example | Description |
|---|---|---|---|---|---|---|
| code | integer | No | 200 | |||
| data | ikea.CategoriesResponse | No | ||||
| data.categories | array | No | ||||
| data.categories[].key | string | No | 20649 | |||
| data.categories[].level | integer | No | 2 | Level is this category's depth in the taxonomy tree: 1 for a top-level department, 2 for its direct children, and so on. | ||
| data.categories[].name | string | No | Desks & computer desks | |||
| data.categories[].parent_key | string | No | 20649 | ParentKey is the immediate parent category's own key, empty for a top-level department. Some categories are cross-listed under more than one parent in IKEA's own taxonomy (e.g. "Knobs and handles" under both PAX and BESTÅ) -- ParentKey records one such parent, not every one; see this file's doc comment. | ||
| data.categories[].url | string | No | ||||
| data.country | string | No | us | |||
| data.fetched_at | string | No | ||||
| data.has_next | boolean | No | true | |||
| data.language | string | No | en | |||
| data.page | integer | No | 1 | |||
| data.page_size | integer | No | 100 | |||
| data.source_url | string | No | ||||
| data.total | integer | No | 929 | |||
| msg | string | No | OK |
| Status | Description | Schema |
|---|---|---|
| 400 | Bad Request | #/definitions/app.Response |
| 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/ikea/categories?q=coffee&country=us&language=en&page=1" \
-H "x-api-key: $CRAWLORA_API_KEY"