openapi: 3.1.3 info: title: IKEA Sales Item API summary: Unofficial API for fetching IKEA product availability information and packaging information description: | This is an **unofficial** OpenAPI specification for the IKEA Sales Item API. Get information for items in different contexts. ## FAQ **Q: Why is this API called Sales Item?** **A:** That is what the API endpoint is called `api.salesitem.ingka.com` and what is being used in other API resources that were found. ## Authentication This API requires authentication, make sure to provide the required headers. ## Swagger UI This API can be tested using swagger-ui at [./swagger-ui.html](swagger-ui.html) as long as the CORS header `Access-Control-Allow-Origin` are configured as `*`. At the moment of writing this is only the case for the [IKEA Search API](../search/index.html). ## Other APIs * [IKEA Product Catalog API](../product-catalog/index.html) * [IKEA Search API](../search/index.html) * [IKEA Sales Item API](../sales-item/index.html) * [IKEA After Purchase Ordering API](../after-purchase-ordering/index.html) ## ⚠️ Disclaimer * This project is based on publicly available information and analysis of network requests. * It is not affiliated with, endorsed by, or supported by IKEA. * Endpoints, schemas, and behaviors may change at any time and may not reflect official or supported APIs. * Use this specification at your own risk. ### See also This section lists resources used during the creation of these APIs to exent and check validity of the API. These are not in any special order but useful as references. * [OpenAPI Spec for api.salesitem.ingka.com](https://github.com/shrabdut123/cart-multi-agent/blob/a10dc96ac7a1fd98701afebe2cde585e6d9a6a08/service_coordinator_agent/salesitem_api.yaml#L13) - Very verbose OpenAPI Spec with detailed resources referring to inside IKEA knowledge. * [DavisChappins/ikeaStockChecker](https://github.com/DavisChappins/ikeaStockChecker/blob/45fa92f26ac2b37d03c37eb34e0c618c4a8477e8/ikea_stock_scanner.py#L11) - Use of `api.salesitem.ingka.com` endpoint. * [Mirzaei81/ikeaScraper](https://github.com/Mirzaei81/ikeaScraper/blob/cdeef5c9fb76660b18a8e569d7213828ffe5f9d2/app.py#L74) - Use of `api.salesitem.ingka.com` endpoint. * [Ephigenia/ikea-availability-checker/postman/schemas/ikea-ingka-api.yaml](https://github.com/Ephigenia/ikea-availability-checker/blob/c7fe2f9bc8306c01783f8d22329d34ed76a582c9/postman/schemas/ikea-ingka-api.yaml) - This contains resources related to the `api.salesitem.ingka.com` (Sales Item API) * [vrslev/ikea-api-client/src/ikea_api/endpoints/search.py](https://github.com/vrslev/ikea-api-client/blob/ce70c8d743302a465931bdb6a9f7b0bc5c1d882f/src/ikea_api/endpoints/search.py#L14C1-L14C117) - Use of the Search API and some other endpoints. version: 0.1.0 license: name: MIT License url: https://opensource.org/licenses/MIT contact: name: Unofficial IKEA OpenAPI Maintainer url: https://github.com/idelsink/ikea-openapi servers: - url: https://api.salesitem.ingka.com description: IKEA Sales Item Availability API (Production Global) security: [] tags: - name: Availability description: Everything about Availability paths: /availabilities/{classUnitType}/{classUnitCode}: get: summary: IKEA Get Product Availability with Child Items description: Returns availability information including child items and packages operationId: getProductAvailability tags: - Availability security: - X-Client-ID: [] parameters: - $ref: '#/components/parameters/classUnitType' - $ref: '#/components/parameters/classUnitCode' - $ref: '#/components/parameters/itemNos' - $ref: '#/components/parameters/expand' responses: '200': description: Response with availability and errors content: application/json: schema: $ref: '#/components/schemas/AvailabilityEnvelope' examples: GetProductAvailability200Example: summary: Default getProductAvailability 200 response value: availabilities: - availableForCashCarry: true availableForClickCollect: false buyingOption: &id002 clickCollect: range: inRange: true childAvailabilities: &id003 [] classUnitKey: classUnitCode: example classUnitType: example itemKey: itemNo: example itemType: example salesLocations: - childItems: - itemKey: example salesLocations: example classUnitKey: classUnitCode: example classUnitType: example itemKey: itemNo: example itemType: example errors: - code: 404 details: &id001 classUnitCode: DE classUnitType: RU itemNo: s59047406 message: Not found timestamp: '2025-09-10T14:23:33.956Z' traceId: '4119683959736817039' x-microcks-default: true '422': description: Unprocessable Content content: application/json: schema: $ref: '#/components/schemas/AvailabilityError' examples: GetProductAvailability422Example: summary: Default getProductAvailability 422 response value: code: 404 details: *id001 message: Not found x-microcks-operation: delay: 0 dispatcher: FALLBACK components: securitySchemes: X-Client-ID: type: apiKey in: header name: X-Client-ID description: | Client specific identifier (Akamai API Gateway) required for API access ## Available Client IDs The following public client IDs are available: - `ef382663-a2a5-40d4-8afe-f0634821c0ed` - `b6c117e5-ae61-4ef5-b4cc-e0b1e37f0631` - `da465052-7912-43b2-82fa-9dc39cdccef8` ## How to Find Client IDs Visit any IKEA product page (e.g., [BILLY Bookcase](https://www.ikea.com/gb/en/p/billy-bookcase-white-00263850/)) and inspect the network requests in browser DevTools. Look for API calls to `api.salesitem.ingka.com` and check the `X-Client-ID` header value. Alternatively, search for `ciaApiClientKey` in the page's JavaScript bundles. parameters: classUnitType: name: classUnitType in: path required: true description: | `classUnitType` must be a Retail Unit (`ru`). Or Store (`sto`). It is used together with `classUnitCode` to give context when invoking the AvailabilityClassifications API. Unit Type: * `ru` - Retail Unit - Retail Unit must be combined with a valid `classUnitCode`. For example, `SE` for Sweden or `DE` for Germany. A list of valid Retail Units can be found [in CBD](https://iwww.cbdview.ikea.com/) (requires VPN or internal network). * `sto` - Store - The store availability for a given store schema: type: string enum: - ru - sto example: ru example: ru classUnitCode: name: classUnitCode in: path required: true description: | `classUnitCode` is the unique identifier of a Class Unit when combined with a `classUnitType`. A valid `classUnitCode` always has a pattern like `^([A-Z]|[0-9]){2,5}$`. Note that the Selling Range APIs are case insensitive when it comes to the `classUnitCode` path parameter and lower case is always internally converted to upper case. This can either be a: * **Retail Unit** - Retail Unit must be combined with a valid `classUnitCode`. For example, `SE` for Sweden or `DE` for Germany. A list of valid Class Units can be found [in CBD](https://iwww.cbdview.ikea.com/) (requires VPN or internal network). * **Store ID** - The 3-digit store ID. E.g. `066`. schema: type: string minLength: 2 maxLength: 5 examples: lowerCaseGb: summary: Lower Case GB value: gb upperCaseGb: summary: Upper Case GB value: GB lowerCaseDe: summary: Lower Case DE value: de upperCaseDe: summary: Upper Case DE value: DE storeBerlin: summary: Store ID for Berlin value: '066' itemNos: name: itemNos in: query required: true style: form explode: false description: Product identifier(s) example: - '00263850' schema: type: array items: $ref: '#/components/schemas/productId' minItems: 1 expand: name: expand in: query required: false style: form explode: false description: | List of expandOption(s), see expandOption for values. example: - ChildItems - SalesLocations schema: type: array items: $ref: '#/components/schemas/expandOption' minItems: 0 schemas: productId: type: string description: Product identifier example: '00263850' expandOption: type: string description: | On the returned data, expand: * `ChildItems` - Child items, e.g. multiple packages that are part of the parent package * `Restocks` - Restock items * `StoresList` - List of stores * `SalesLocations` - Sale locations * `DeliveryPrice` - Deliver Price * `CollectPrice` - Collect Price * `DisplayLocations` - Display locations * `DeliveryTime` - Delivery time * `FoodAvailabilities` - Food availability enum: - ChildItems - Restocks - StoresList - SalesLocations - DeliveryPrice - CollectPrice - DisplayLocations - DeliveryTime - FoodAvailabilities example: ChildItems Availability: type: object description: Availability of a Product properties: availableForCashCarry: type: boolean example: true availableForClickCollect: type: boolean example: false buyingOption: type: object example: *id002 childAvailabilities: type: array items: $ref: '#/components/schemas/Availability' example: *id003 classUnitKey: $ref: '#/components/schemas/ClassUnitKey' itemKey: $ref: '#/components/schemas/ItemKey' ClassUnitKey: type: object description: | Class Unit Key gives context when invoking the AvailabilityClassifications API. properties: classUnitCode: type: string minLength: 2 maxLength: 5 description: | `classUnitCode` is the unique identifier of a Class Unit when combined with a `classUnitType`. A valid `classUnitCode` always has a pattern like `^([A-Z]|[0-9]){2,5}$`. This can either be a: * **Retail Unit** - Retail Unit must be combined with a valid `classUnitCode`. For example, `SE` for Sweden or `DE` for Germany. A list of valid Class Units can be found [in CBD](https://iwww.cbdview.ikea.com/) (requires VPN or internal network). * **Store ID** - The 3-digit store ID. E.g. `066`. examples: - GB - DE - '066' classUnitType: type: string description: | Class Unit Type: * `RU` - Retail Unit - Retail Unit must be combined with a valid `classUnitCode`. For example, `SE` for Sweden or `DE` for Germany. A list of valid Retail Units can be found [in CBD](https://iwww.cbdview.ikea.com/) (requires VPN or internal network). * `STO` - Store - The store availability for a given store enum: - RU - STO example: RU itemType: type: string description: | Item type code enum: - ART - SPR example: SPR ItemKey: type: object description: Item key (Product ID and Item type) properties: itemNo: $ref: '#/components/schemas/productId' itemType: $ref: '#/components/schemas/itemType' SalesLocation: type: object description: properties: childItems: type: array items: type: object properties: itemKey: $ref: '#/components/schemas/ItemKey' salesLocations: type: array items: type: object example: aisleAndBin: aisle: '06' bin: '01' division: SELF_SERVE id: '060100' recommendationRank: 1 type: AISLE_AND_BIN classUnitKey: $ref: '#/components/schemas/ClassUnitKey' itemKey: $ref: '#/components/schemas/ItemKey' AvailabilityError: type: object required: - code - message description: Error object describing the reason of failure properties: code: type: integer description: | Error Codes: * `404` - Not found * `405` - ClassUnitCode doesn't exist * `602` - itemNos in query is required * `604` - itemNos.`n` in query should be at least 8 chars long. Where `n` is the positional indicator for the parameter. * `606` - expand.`n` in query should be one of [ChildItems Restocks StoresList SalesLocations DeliveryPrice CollectPrice DisplayLocations DeliveryTime FoodAvailabilities]. Where `n` is the positional indicator for the parameter. example: 404 details: type: object description: Additional error details. These change depending on the context of the query. example: *id001 message: type: string description: Error message indicating the failure example: Not found AvailabilityEnvelope: type: object description: Availability envelope containing availabilities, sales Sales Locations and errors. required: - availabilities - timestamp - traceId properties: availabilities: type: array description: List of product availabilities items: $ref: '#/components/schemas/Availability' salesLocations: type: array items: $ref: '#/components/schemas/SalesLocation' errors: type: array description: List of errors items: $ref: '#/components/schemas/AvailabilityError' timestamp: type: string description: ISO 8601 formatted timestamp with timezone format: date-time example: '2025-09-10T14:23:33.956Z' traceId: type: string description: Unique trace identifier for debugging and log correlation example: '4119683959736817039'