openapi: 3.1.1 info: title: IKEA After Purchase Ordering Availability Products API summary: Unofficial IKEA API for After Purchase Ordering (APO) of spare parts description: 'This is an **unofficial** OpenAPI specification for the IKEA After Purchase Ordering (APO) API. ## FAQ **Q: Why is this API called After Purchase Ordering?** **A:** The URL(s) used have `apo` in the name. We are also dealing with after purchase replacement parts. A common term for this is After Purchase Ordering (APO). ## 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.prod.apo.ingka.com description: Production (Cloudflare) - url: https://origin-api.prod.apo.ingka.com description: Production (Google Frontend) - url: https://api.test.apo.ingka.com description: Testing (Cloudflare) - url: https://origin-api.test.apo.ingka.com description: Testing (Google Frontend) tags: - name: Products description: Everything about Products paths: /products/{productIdSuffix}/{productId}.json: get: summary: IKEA Find Product by Id description: Returns a single product operationId: getProductById tags: - Products parameters: - $ref: '#/components/parameters/productIdSuffix' - $ref: '#/components/parameters/productId' responses: '200': description: Successful response with product details content: application/json: schema: $ref: '#/components/schemas/ProductDetails' examples: GetProductById200Example: summary: Default getProductById 200 response value: catalogRefs: products: elements: - id: '43632' name: Fitted wardrobes url: https://www.ikea.com/de/en/cat/fitted-wardrobes-43632/ id: products name: Products url: https://www.ikea.com/de/en/cat/products-products/ currencyCode: EUR experimental: {} globalId: 00263850 id: 00263850 mainImage: alt: A white ikea PAX wardrobe with open doors, revealing shelves and a basket. id: 1197448_PE903536 imageFileName: 1197448_PE903536_S5.JPG type: MAIN_PRODUCT_IMAGE url: https://www.ikea.com/de/en/images/products/pax-forsand-wardrobe-white-white__1197448_pe903536_s5.jpg name: PAX / FORSAND pipUrl: https://www.ikea.com/de/en/p/pax-forsand-wardrobe-white-white-s09502728/ x-microcks-default: true '400': description: Bad Request '404': description: Product could not be found x-microcks-operation: delay: 0 dispatcher: FALLBACK /product-list-page: get: summary: IKEA Get a Limited Set of Filtered Products description: Returns a window of products that matches the filtered criteria. operationId: findProducts tags: - Products parameters: - $ref: '#/components/parameters/category' - $ref: '#/components/parameters/size' responses: '200': description: Lists a limited set of Products for a given category. content: application/json: schema: $ref: '#/components/schemas/ProductListPage' examples: FindProducts200Example: summary: Default findProducts 200 response value: usergroup: '[]' testActivationTriggers: {} productListPage: category: name: example key: example url: example imageUrl: example productWindow: - example productCount: 1 plannerWindow: - {} plannerCount: 1 filters2: - {} dynamicFiltersV1: - {} dynamicFilters: - {} x-microcks-default: true '400': description: Bad Request for Listing of Products '404': description: Product List Not Found x-microcks-operation: delay: 0 dispatcher: FALLBACK /product-list-page/more-products: get: summary: IKEA Get a Paginated Set of Filtered Products description: Returns a window of paginated products that matches the filtered criteria. operationId: findProductsPaginated tags: - Products parameters: - $ref: '#/components/parameters/category' - $ref: '#/components/parameters/start' - $ref: '#/components/parameters/end' responses: '200': description: Lists a paginated set of Products for a given category. content: application/json: schema: $ref: '#/components/schemas/MoreProducts' examples: FindProductsPaginated200Example: summary: Default findProductsPaginated 200 response value: usergroup: '[]' testActivationTriggers: {} moreProducts: productWindow: - example x-microcks-default: true '400': description: Bad Request for More Products '404': description: More Products Not Found x-microcks-operation: delay: 0 dispatcher: FALLBACK components: schemas: MoreProducts: description: Page with More Products allOf: - $ref: '#/components/schemas/CommonProperties' - type: object required: - moreProducts properties: moreProducts: $ref: '#/components/schemas/MoreProductsEnvelope' CommonProperties: type: object description: Common properties returned in search responses required: - usergroup - testActivationTriggers properties: usergroup: type: string example: '[]' testActivationTriggers: type: object example: {} ProductDetails: type: object description: 'Product details > Note: This Schema does not describe all of the properties returned or does not have a description for all properties. It only describes a sub-set of them. ' required: - catalogRefs - currencyCode - experimental - globalId - id - mainImage - name - pipUrl - price - priceExclTax - priceExclTaxNumeral - priceNumeral - revampPrice - typeName - validDesignText properties: catalogRefs: type: object required: - products properties: products: type: object required: - elements - id - name - url properties: elements: type: array items: type: object required: - id - name - url properties: id: type: string example: '43632' name: type: string example: Fitted wardrobes url: type: string format: uri example: https://www.ikea.com/de/en/cat/fitted-wardrobes-43632/ id: type: string example: products name: type: string example: Products url: type: string format: uri example: https://www.ikea.com/de/en/cat/products-products/ currencyCode: type: string example: EUR experimental: type: object example: {} globalId: $ref: '#/components/schemas/productId' id: $ref: '#/components/schemas/productId' mainImage: type: object required: - alt - id - imageFileName - type - url properties: alt: type: string example: A white ikea PAX wardrobe with open doors, revealing shelves and a basket. id: type: string example: 1197448_PE903536 imageFileName: type: string example: 1197448_PE903536_S5.JPG type: type: string example: MAIN_PRODUCT_IMAGE url: type: string format: uri example: https://www.ikea.com/de/en/images/products/pax-forsand-wardrobe-white-white__1197448_pe903536_s5.jpg name: type: string description: Product name example: PAX / FORSAND pipUrl: type: string format: uri example: https://www.ikea.com/de/en/p/pax-forsand-wardrobe-white-white-s09502728/ price: type: string description: Product price example: 560.00€ priceExclTax: type: string example: 470.58€ priceExclTaxNumeral: type: number example: 470.58 priceNumeral: type: number example: 560 revampPrice: type: object typeName: type: string example: wardrobe validDesignText: type: string example: white/white Product: type: object description: Project details required: - name - typeName - itemMeasureReferenceText - mainImageUrl - pipUrl - allProductImage - id - itemNoGlobal - onlineSellable - lastChance - gprDescription - colors - tag - quickFacts - features - availability - itemNo - itemType - salesPrice - contextualImageUrl - contextualImageAlt - mainImageAlt - businessStructure - categoryPath - heroBackoffData - optimizelyAttributes properties: name: type: string description: Product name example: PLATSA typeName: type: string description: Product type description example: Wardrobe with 8 doors+3 drawers itemMeasureReferenceText: type: string description: Dimensions of the product in centimeters example: 240x57x221 cm mainImageUrl: type: string format: uri description: URL of the main product image example: https://www.ikea.com/gb/en/images/products/platsa-wardrobe-with-8-doors-3-drawers-white-straumen-mirror-glass-sannidal-white__1017864_pe830974_s5.jpg pipUrl: type: string format: uri description: Product information page URL example: https://www.ikea.com/gb/en/p/platsa-wardrobe-with-8-doors-3-drawers-white-straumen-mirror-glass-sannidal-white-s39424871/ filterClass: type: string description: Product filter classification example: wardrobes allProductImage: type: array description: List of product images items: type: object required: - altText - type - url properties: altText: type: string description: Alt text of the product image example: White PLATSA storage system with multiple open shelves and a section with hanging rail and baskets. type: type: string description: Type of product image example: MAIN_PRODUCT_IMAGE url: type: string format: uri description: URL of the product image example: https://www.ikea.com/gb/en/images/products/platsa-wardrobe.jpg id: $ref: '#/components/schemas/productId' itemNoGlobal: $ref: '#/components/schemas/productId' onlineSellable: type: boolean description: Whether the product is available for online purchase example: true lastChance: type: boolean description: Whether the product is in last chance clearance example: false gprDescription: type: object description: Product variants information required: - numberOfVariants - variants properties: numberOfVariants: type: integer example: 0 variants: type: array items: type: object description: Variants of a product. This will contain a list of Product items. example: {} colors: type: array description: Available colors items: type: object properties: name: type: string example: white id: type: string example: '10156' hex: type: string example: ffffff tag: type: string description: Promotional tag example: FAMILY_PRICE tagText: type: string description: Promotional tag text example: IKEA Family price quickFacts: type: array description: 'Quick facts about the product (Note: Type if items is unknown at the time of writing)' items: type: object example: type: KEY_BENEFITS id: '100' name: Large drawers typeName: Key benefits features: type: array description: 'Product features (Note: Type if items is unknown at the time of writing)' items: type: string example: 'Note: Type if items is unknown at the time of writing' availability: type: array description: 'Availability information (Note: Type if items is unknown at the time of writing)' items: type: string example: 'Note: Type if items is unknown at the time of writing' ratingValue: type: number format: float description: Average rating value example: 2.3 ratingCount: type: integer description: Number of ratings example: 4 itemNo: $ref: '#/components/schemas/productId' itemType: $ref: '#/components/schemas/itemType' salesPrice: type: object description: Pricing information properties: currencyCode: type: string example: EUR numeral: type: number format: float example: 836.5 current: type: object properties: prefix: type: string example: '' wholeNumber: type: string example: '836' separator: type: string example: . decimals: type: string example: '50' suffix: type: string example: € isRegularCurrency: type: boolean example: true style: type: string example: BASE previous: type: object properties: prefix: type: string example: '' wholeNumber: type: string example: '963' separator: type: string example: . decimals: type: string example: '50' suffix: type: string example: € isRegularCurrency: type: boolean example: true style: type: string example: BASE lowestPreviousSalesPrice: type: object properties: prefix: type: string example: '' wholeNumber: type: string example: '963' separator: type: string example: . decimals: type: string example: '50' suffix: type: string example: € isRegularCurrency: type: boolean example: true style: type: string example: BASE isBreathTaking: type: boolean example: false discount: type: string example: '' prevPriceLabel: type: string example: Normal price lowestPreviousSalesPriceLabel: type: string example: Lowest price in the last 30 days validFrom: type: string format: date example: '2025-08-29' validTo: type: string format: date example: '2025-09-30' experimentalDiscountAmount: type: number example: 127 experimentalDiscountPercentage: type: integer example: 13 availabilityDisclaimer: type: string example: Price valid 29. August 2025 - 30. September 2025 or while supply lasts tag: type: string example: FAMILY_PRICE tagText: type: string example: IKEA Family price priceText: type: string example: Price tags: type: array items: type: string example: FAMILY_PRICE tagWithText: type: object properties: tag: type: string example: FAMILY_PRICE text: type: string example: IKEA Family price contextualImageUrl: type: string format: uri description: Contextual product image URL example: https://www.ikea.com/gb/en/images/products/platsa-contextual.jpg contextualImageAlt: type: string description: Alt text for contextual image example: PLATSA wardrobe with mirrors, next to bed, mirror, and basket. mainImageAlt: type: string description: Alt text for main product image example: White PLATSA storage system with multiple open shelves and a section with hanging rail and baskets. businessStructure: type: object description: Product business categorization properties: homeFurnishingBusinessName: type: string example: Bedroom furniture homeFurnishingBusinessNo: type: string example: '04' productAreaName: type: string example: System wardrobes productAreaNo: type: string example: '0421' productRangeAreaName: type: string example: Wardrobes productRangeAreaNo: type: string example: '042' categoryPath: type: array description: Category hierarchy items: type: object properties: name: type: string example: Storage furniture key: type: string example: st001 validDesignText: type: string description: Product design variant description example: white STRAUMEN mirror glass/SANNIDAL white heroBackoffData: type: object additionalProperties: true optimizelyAttributes: type: object properties: PRODUCT_TYPE: type: string example: standard ProductListPageEnvelope: type: object description: Product List Page envelope containing a limited set of Products for a given category. required: - category - productWindow - productCount - plannerWindow - plannerCount - filters2 - dynamicFiltersV1 - dynamicFilters - sortOrders properties: category: $ref: '#/components/schemas/Category' productWindow: description: Window of filtered products type: array items: $ref: '#/components/schemas/Product' productCount: description: Amount of products in this category type: integer example: 1 plannerWindow: description: Window of filtered windows type: array items: type: object plannerCount: description: Amount of planner entries type: integer example: 1 filters2: type: array items: type: object dynamicFiltersV1: type: array items: type: object dynamicFilters: type: array items: type: object sortOrders: description: What sorting is enabled type: object required: - name - values properties: name: type: string example: Sort values: type: array items: type: object required: - id - name - eventAction - selected properties: id: type: string example: RELEVANCE description: Filter identifier name: type: string example: Best match description: Name of the filter eventAction: type: string example: sort_by_relevance selected: description: Whether or not this sorting option is selected type: boolean example: true categoryId: type: string description: Category identifier (UUID, code like 'st001', or numeric ID) example: st001 examples: - st001 - 4a552556-db67-4fab-afb0-11433eda6784 MoreProductsEnvelope: type: object description: More Products Page envelope containing a window of paginated products that matches the filtered criteria. required: - productWindow properties: productWindow: description: Window of paginated products type: array items: $ref: '#/components/schemas/Product' ProductListPage: description: Page with Product List allOf: - $ref: '#/components/schemas/CommonProperties' - type: object required: - productListPage properties: productListPage: $ref: '#/components/schemas/ProductListPageEnvelope' itemType: type: string description: 'Item type code ' enum: - ART - SPR example: SPR Category: type: object description: Product Category required: - name - key properties: name: type: string description: Category name example: Sofa key: $ref: '#/components/schemas/categoryId' url: type: string description: URL to category example: https://www.ikea.com/gb/en/cat/sofa-fu003/ imageUrl: type: string description: Image for the category example: https://www.ikea.com/global/assets/range-categorisation/images/sofas-fu003.jpeg productId: type: string description: Product identifier example: 00263850 parameters: productIdSuffix: in: path name: productIdSuffix required: true description: "Product ID Suffix (last 3 digits of Product ID)\nValue can be:\n * zero (`0`) or\n * Product ID Suffix (`406`)\n" schema: type: string pattern: ^(0|[0-9]{3})$ maxLength: 3 examples: empty: summary: Empty value (0) value: '0' billy: summary: BILLY Bookcase (00263850) value: '850' besta: summary: BESTÅ Shelf unit with doors (s59047406) value: '406' size: name: size in: query required: false description: Amount of products to return schema: type: integer minimum: 0 maximum: 1000 example: 42 end: name: end in: query required: false description: 'The zero-based index of the last item to include **exclusive**. For example, `start=0&end=2` returns items at index 0 and 1. (2 items) If `end` is provided but not `end`, then default for `start=24`. ' schema: type: integer minimum: 0 example: 0 start: name: start in: query required: false description: 'The zero-based index of the first item to include in the response. For example, `start=0` begins from the very first item. If `start` is provided but not `end`, then default for `end=24`. ' schema: type: integer minimum: 0 example: 0 productId: name: productId in: path required: true description: "Product identifier\nValue can be:\n * zero (`0`),\n * product identifier (`00263850`) or\n * product identifier with `s` prefix (`s59047406`)\n" schema: type: string pattern: ^(0|s[0-9]{8}|[0-9]{8})$ maxLength: 9 examples: empty: summary: Empty value (0) value: '0' billy: summary: BILLY Bookcase (00263850) value: 00263850 besta: summary: BESTÅ Shelf unit with doors (s59047406) value: s59047406 category: name: category in: query description: Category to search for required: true schema: $ref: '#/components/schemas/categoryId' example: st001