{"openapi":"3.0.2","info":{"title":"Deck API","description":"This is the official Deck API documentation.\nDeck API allows you to access product information from your corporation product perimeter.\n","version":"1.0.4"},"servers":[{"url":"https://api.ppe-analytics.com/api/v1"}],"x-topics":[{"title":"Rate limiting","content":"📈 In order to offer a smooth experience for everyone, Deck API has rate limitations on its endpoints. \n\nBy default, the API will accept a maximum of **500 requests per minute** for a given client before returning a `419` response saying that the request has been rate limited.\nThis rate can go up to **40 requests per second** on short period of times.\n\nSome ressource-heavier endpoints have a lower limit, like the product information endpoint, which is at 300 RPM / 8 RPS\n\nSome more critical endpoints have a higher limit, like the search guide, which is at f 800 RPM / 50 RPS\n\n👉 These limits are fairly high and should not bother you if you're not calling the API with too many parrallel workers. However if you feel it's a problem, please contact us.\n\n👉 These limits could change a bit over time depending on the usage of the API. Any change will be updated in this documentation.\n"},{"title":"Code samples","content":"In this section you'll find a few basic examples on ways to consume the API with [Python](https://www.python.org/) scripts.\n\nThis can of course be adapted to any language. For production usage, you should handle error responses as well.\n\n## Export SKUs or products data with pagination\n\n```python\n  '''\n  Export SKUs or products data from Deck configured template\n  python3 deck_export_data.py\n  '''\n  import requests\n\n  # Set script parameters\n  item_type       = \"skus\"\n  template_uuid   = \"cf0c1a10-776d-41a9-9d65-85535be6f8ff\"\n  deck_api_url    = f\"https://api.ppe-analytics.com/api/v1/export/{item_type}/{template_uuid}\"\n  deck_api_key    = \"YOUR-API-KEY-HERE\"\n\n  template_rows        = []\n  slice_number         = 1\n  has_remaining_slices = True\n\n  # Iterate on all slices\n  while has_remaining_slices:\n      print(f\"GET {deck_api_url} for slice {slice_number}...\")\n\n      result = requests.get(deck_api_url, headers={\"PPEAPiKey\": deck_api_key}, params={\"slice_size\": 50, \"slice_number\": slice_number}).json()[\"result\"]\n\n      template_rows.extend(result[\"rows\"])\n\n      has_remaining_slices = slice_number \u003c result[\"pagination\"][\"max_slice_number\"]\n          \n      slice_number += 1\n\n  # In the end, all_rows will contain all aggregated content, ready to be used\n  print(template_rows)\n```\n"}],"tags":[{"name":"🧬 Datamodel"},{"name":"🗃️ Products"},{"name":"💼 Exports (beta)"},{"name":"🧭 Guided search"},{"name":"🧰 Utils"}],"externalDocs":{"description":"Request your demo API key","url":"mailto:contact@ppe-analytics.fr?subject=Deck%20API%20key%20request\u0026body=Hello%20!%20I%20was%20looking%20at%20the%20documentation%20for%20Deck%20API%20and%20I'd%20like%20to%20know%20more%20about%20accessing%20this%20API."},"paths":{"/export/products/{template_uuid}":{"get":{"summary":"Export product data 📑","tags":["Exports (beta)"],"description":"Export product-level data based on the definition of a Deck column template.\n\nData is returned as json, paginated in product slices.\n","parameters":[{"name":"template_uuid","in":"path","required":true,"description":"The uuid of the column template in Deck.\n\nAs it is a product dedicated endpoint, no SKU information must be requested in this export, they will simply be ignored.\n\nThe keys in the response will use the english column name by default. To avoid breaking keys, please configure explicit slugs in the column templates.\n","schema":{"type":"string"}},{"name":"slice_number","in":"query","required":false,"description":"The number of the slice to request (default to 1)\n","schema":{"type":"integer"}},{"name":"slice_size","in":"query","required":false,"description":"The size of each slice of products (default to 25, max 100)\n","schema":{"type":"integer"}},{"name":"modified_after","in":"query","required":false,"description":"When you only want to export data on products modified after a given date, use this to specify the cutoff day (in YYYY-MM-DD format)\n","schema":{"type":"date"}}],"responses":{"200":{"description":"Successfully returned one slice of product data","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"type":"string","example":"OK"},"result":{"type":"object","properties":{"rows":{"type":"array","items":{"$ref":"#/components/schemas/ProductExportLine"}},"pagination":{"$ref":"#/components/schemas/PaginationCursor"}},"example":{"rows":[{"segment_key":"head-protection","product_id":"123456789","values":{"col1":123,"col2":"foo","My col 3":"bar"}},{"segment_key":"head-protection","product_id":"9123456789","values":{"col1":23,"col2":"foo2","My col 3":"bar2"}}],"pagination":{"slice_size":25,"slice_number":1,"max_slice_number":14,"total_count":2457,"modified_after":"2025-12-07","api_get_next_slice":"/api/v1/export/products/abb230c2-2753-473c-b298-88fab2bc7c8c-0?slice_size=25\u0026slice_number=2\u0026language_code=en\u0026modified_after=2025-12-07"}}}}}}}}}}},"/export/skus/{template_uuid}":{"get":{"summary":"Export SKU data 📦","tags":["Exports (beta)"],"description":"Export SKU-level data based on the definition of a Deck column template.\n\nData is returned as json, paginated in SKU slices.\n","parameters":[{"name":"template_uuid","in":"path","required":true,"description":"The uuid of the column template in Deck.\n\nEven if it is a SKU dedicated endpoint, product information will be included in the slice: it will simply use product data of the product related to each SKU.\n\nThe keys in the response will use the english column name by default. To avoid breaking keys, please configure explicit slugs in the column templates.\n","schema":{"type":"string"}},{"name":"slice_number","in":"query","required":false,"description":"The number of the slice to request (default to 1)\n","schema":{"type":"integer"}},{"name":"slice_size","in":"query","required":false,"description":"The size of each slice (default to 25, max 100)\n","schema":{"type":"integer"}},{"name":"modified_after","in":"query","required":false,"description":"When you only want to export data on SKUs that have modified after a given date, use this to specify the cutoff day (in YYYY-MM-DD format)\nNote that if one SKU of a product has been modified after this date, all other SKUs of this product will also be in the response.\n","schema":{"type":"date"}},{"name":"sku_type","in":"query","required":false,"description":"If you have more than one SKU type in your corporation, you can specify the key of the one you want. Otherwise the default one will be used.\n","schema":{"type":"string"}}],"responses":{"200":{"description":"Successfully returned one slice of SKU data","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"type":"string","example":"OK"},"result":{"type":"object","properties":{"rows":{"type":"array","items":{"$ref":"#/components/schemas/SkuExportLine"}},"pagination":{"$ref":"#/components/schemas/PaginationCursor"}},"example":{"rows":[{"sku_code":"AB-1234Z","values":{"col1":123,"col2":"foo","My col 3":"bar"}},{"sku_code":"BX-9990X","values":{"col1":23,"col2":"foo2","My col 3":"bar2"}}],"pagination":{"slice_size":25,"slice_number":1,"max_slice_number":14,"total_count":2457,"modified_after":"2025-12-07","api_get_next_slice":"/api/v1/export/skus/abb230c2-2753-473c-b298-88fab2bc7c8c-0?slice_size=25\u0026slice_number=2\u0026language_code=en\u0026modified_after=2025-12-07"}}}}}}}}}}},"/status":{"get":{"summary":"Check API status ✅","security":[],"description":"Checks the status of the API, with a basic request to the database behind the scenes to ensure that the API is really available.\n","tags":["Utils"],"responses":{"200":{"description":"API is up and running","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusMessage"},"example":{"status":"OK","message":"Welcome to Deck API! Check out the API doc at https://api-doc.ppe-analytics.com"}}}},"503":{"description":"API is temporarily unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusMessage"},"example":{"status":"ERROR","message":"Deck API is temporarily unavailable. We're working on it to bring it back as soon as possible."}}}}}}},"/connect":{"get":{"summary":"Check API key 🔑","description":"Checks if the provided API key is valid.\n","tags":["Utils"],"responses":{"200":{"description":"Valid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusMessage"},"example":{"status":"OK","message":"This API key is valid for coporation mi-6"}}}},"403":{"description":"Invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusMessage"},"example":{"status":"ERROR","message":"Invalid API key. Did you provide it as PPEAPIKey header? Check the doc at https://api-doc.ppe-analytics.com. Contact us at support@ppe-analytics.com if you need some help."}}}}}}},"/upload/{container_uuid}":{"post":{"summary":"Upload file 📥","description":"Use this endpoint to upload a file to secured Deck container. The container must exist in order to upload the file. Note that this endpoint does not provide any read access to prior file versions.\n","tags":["Utils"],"parameters":[{"name":"container_uuid","in":"path","description":"The uuid of the container as provided in Deck administration interface","required":true,"type":"string"}],"requestBody":{"content":{"multipart/form-data":{"schema":{"type":"object","properties":{"file":{"type":"string","format":"binary"}}}}}},"responses":{"200":{"description":"Valid upload","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusMessage"},"example":{"status":"OK","message":"File correctly uploaded to container 'a73ba5b9-498a-4b96-a766-5588d16ada3e' as version 4"}}}},"404":{"description":"Invalid upload","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusMessage"},"example":{"status":"ERROR","message":"Unknown container id 'plop'"}}}}}}},"/webhook/{event_key}":{"post":{"summary":"Webhook ⚓","description":"Use this endpoint to notify Deck of something happening outside of it. Some actions will be triggered depending on the event key and the caller.\nThe event key and its consequences have to be defined with Deck team before using it, as it will be custom behaviours.\nIf you want to test an API call before having a real event in place, use \"test-event\" as event_key. It will not do anything but will reply with an OK.\n","tags":["Utils"],"parameters":[{"name":"event_key","in":"path","required":true,"description":"The event key to call, as given by Deck","schema":{"type":"string","example":"test-event"}}],"requestBody":{"description":"The webhook payload, format depending on the contract between Deck and the caller","content":{"application/json":{"schema":{"properties":{"sample_input_1":{"type":"string","description":"A sample input as a string","example":"123AMA"},"sample_input_2":{"type":"integer","description":"A sample input as an integer","example":7894}}}}}},"responses":{"200":{"description":"Valid webhook call","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusMessage"},"example":{"status":"OK","message":"Event 'test-event' received with 2 input parameters. Processing will begin and results should be visible on Deck within 5 minutes."}}}},"404":{"description":"Unknown event key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusMessage"},"example":{"status":"ERROR","message":"Unknown event key 'yolo'"}}}},"400":{"description":"Bad parameters","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusMessage"},"example":{"status":"ERROR","message":"Unexpected parameters provided for event key 'notify-new-product'. Expected something like '{product_code: AA99}'"}}}}}}},"/segments":{"get":{"summary":"List segments","description":"Returns the list of segments available to your perimeter.\n\nA segment is a product family in which the products share common technical properties and where comparison between them make sense.\n\nEach segment has a customized data model, allowing for very fine definition without bothering products from other segments with properties that would never be used.\n","tags":["Datamodel"],"responses":{"200":{"description":"Successfully returned available segments","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"type":"string","example":"OK"},"result":{"type":"object","properties":{"segments":{"type":"array","items":{"$ref":"#/components/schemas/Segment"},"example":[{"key":"head-protection","picto_url":"https://app.ppe-analytics.com/static/pictos/300w/epi-head.png","api_get_properties":"/api/v1/segments/hand-protection","api_get_products":"/api/v1/products/hand-protection","trads":{"en":"Head protection","fr":"Protection de la tête"}},{"key":"fall-protection","picto_url":"https://app.ppe-analytics.com/static/pictos/300w/epi-head.png","api_get_properties":"/api/v1/segments/head-protection","api_get_products":"/api/v1/segments/head-protection","trads":{"en":"Fall protection","fr":"Protection antichute"}}]}}}}}}}}}}},"/segments/{segment_key}":{"get":{"summary":"Get segment data model","description":"The data model of a segment consists of several properties identified by their key. Each property has a type depending on the data it can contain.\n\nSeveral types are available: boolean, string, enum, enum_list, json, arbo_enum, arbo_enum_list\n\nIn the case of types enum and enum_list, the list of possible values is provided, identified by their key.\n","tags":["Datamodel"],"parameters":[{"name":"segment_key","in":"path","description":"The segment key, as returned by the `List segments` endpoint.","required":true,"schema":{"$ref":"#/components/schemas/SegmentKey"}}],"responses":{"200":{"description":"Successfully returned segment data model","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"type":"string","example":"OK"},"result":{"type":"object","properties":{"segment":{"$ref":"#/components/schemas/Segment"},"languages":{"$ref":"#/components/schemas/Languages"},"properties":{"type":"array","items":{"$ref":"#/components/schemas/Property"}},"tiles":{"type":"array","items":{"$ref":"#/components/schemas/Tile"}}}}}}}}},"404":{"$ref":"#/components/responses/UnkwnownSegmentKey"},"403":{"$ref":"#/components/responses/UnauthorizedSegment"}}}},"/localized-fields":{"get":{"summary":"List localized fields","description":"Returns the list of localized fields available to your perimeter.\n\nA localized field is a data type used to store information about a product, as free text but in multiple languages.\n\nIs is identified by a unique key and some attributes and constraints about the field.\n\nLocalized fields are idependant of the concept of Segment.\n","tags":["Datamodel"],"responses":{"200":{"description":"Successfully returned available localized fields","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"type":"string","example":"OK"},"result":{"type":"object","properties":{"localized_fields":{"type":"array","items":{"$ref":"#/components/schemas/LocalizedField"},"example":[{"key":"long-label","trads":{"en":"Long label","fr":"Libellé long"}},{"key":"acme--catchphrase","trads":{"en":"Catchphrase","fr":"Phrase d'accroche"}},{"key":"acme--fabdis-desc-32","trads":{"en":"FabDis description 32 chars","fr":"Description FabDis 32 caractères"}}]}}}}}}}}}}},"/asset-types":{"get":{"summary":"List asset types","description":"Returns the list of asset types available to your perimeter.\n\nAsset types are used to caracterize assets (pictures, documents, videos) in the PIM and are identified by a unique key.\n\nAsset types are idependant of the concept of Segment.\n","tags":["Datamodel"],"responses":{"200":{"description":"Successfully returned available asset types","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"type":"string","example":"OK"},"result":{"type":"object","properties":{"asset_types":{"type":"array","items":{"$ref":"#/components/schemas/AssetType"},"example":[{"key":"technical-sheet","type":"document","trads":{"en":"Technical sheet","fr":"Fiche technique"}},{"key":"product-video","type":"video","trads":{"en":"Product video","fr":"Video produit"}},{"key":"picture-in-context","type":"picture","trads":{"en":"Picture in context","fr":"Product en situation"}}]}}}}}}}}}}},"/views":{"get":{"summary":"List views","description":"Returns the list of views available to your perimeter.\n\nA view in Deck is an object to tell what product information should be displayed, in what area (called \"zones\"), and in which order.\nThe finesse of this configuration is up to the PIM admins and can depend on product segments and classification. But in the end, on the API side, it is a ready-to-use indication to drive information display.\n\nInformation can be properties, tiles, localized fields.\n\nHere are some examples:\n* the view \"web\" would be used to give the instructions of what to display on the different zones of the product web page\n* the view \"technical-sheet\" would do that for the technical sheet generation, which is a bit different.\n* The view \"compare\" would be used to specified the criteria useful during product comparison, using zones to define parameters categories\n","tags":["Datamodel"],"responses":{"200":{"description":"Successfully returned available views","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"type":"string","example":"OK"},"result":{"type":"object","properties":{"views":{"type":"array","items":{"$ref":"#/components/schemas/View"},"example":[{"key":"web","trads":{"en":"Web view to control website","fr":"Vue site web"},"api_get_view":"/api/v1/views/web"},{"key":"compare","trads":{"en":"Comparision view","fr":"Vue comparison"},"name":"Comparision view to know relevant criteria","api_get_view":"/api/v1/views/compare"}]}}}}}}}}}}},"/views/{view_key}":{"get":{"summary":"Get view","description":"Get the full information about a view (for more information about what is a view, see List views endpoint above)\n\nFor each segment, all zones and the items in each zone are provided in the correct order.\n\nSome items can be seen in different segments and zones.\n","tags":["Datamodel"],"parameters":[{"name":"with_json_path","in":"query","description":"Set to \"1\" to also request api endpoint + json path for each item in the view, allosing easier query of detailed items attributes","schema":{"type":"boolean","example":1}}],"responses":{"200":{"description":"Successfully returned view","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"type":"string","example":"OK"},"result":{"type":"object","properties":{"view":{"$ref":"#/components/schemas/View"},"zones":{"type":"array","items":{"$ref":"#/components/schemas/ViewZone"}},"segments":{"type":"object","properties":{"hand-protection":{"type":"object","properties":{"zone1":{"type":"array","description":"The content of a zone","items":{"$ref":"#/components/schemas/ViewItem"}},"zone2":{"type":"array","description":"The content of another zone","items":{"$ref":"#/components/schemas/ViewItem"}}}},"foot-protection":{"type":"object","properties":{"zone1":{"type":"array","description":"The content of a zone","items":{"$ref":"#/components/schemas/ViewItem"}},"zone2":{"type":"array","description":"The content of another zone","items":{"$ref":"#/components/schemas/ViewItem"}}}}}}},"example":{"view":{"key":"web","trads":{"en":"Web view to control website","fr":"Vue site web"}},"zones":[{"rank":0,"key":"norms","trads":{"fr":"Normes","en":"Norms"}},{"rank":1,"key":"advantages","trads":{"fr":"Avantages","en":"Advantages"}}],"segments":{"hand-protection":{"default":[{"rank":0,"type":"property","key":"technical-name"}],"norms":[{"rank":0,"type":"property","key":"en388"},{"rank":1,"type":"tile","key":"tile-900"}],"advantages":[{"rank":0,"type":"localized-field","key":"acme--fabdis-desc-32"},{"rank":1,"type":"property","key":"mycorp/comfort"}]},"foot-protection":{"default":[{"rank":0,"type":"property","key":"technical-name"}],"norms":[{"rank":0,"type":"property","key":"en20345"}]}}}}}}}}}}}},"/products/{segment_key}":{"get":{"summary":"List products 📚","description":"Returns the list of products available to your corporation for a given segment, or for all segments at once (leave segment_key empty in that case)\n\nOnly basic product information is provided by this endpoint, including product id. Full information is available through the *Fetch product information* endpoint\n","tags":["Products"],"parameters":[{"name":"segment_key","in":"path","required":false,"description":"The segment key of the product, as returned by list products endpoint. Leave empty for all segments","schema":{"$ref":"#/components/schemas/SegmentKey","example":"head-protection"}},{"name":"updated_after","in":"query","description":"Product last update cutoff date, in format YYYY-MM-DD or YYYY-MM-DD HH:MM:SS","schema":{"type":"string","example":"2024-02-08 12:15:00"}}],"responses":{"200":{"description":"Successfully returned products","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"type":"string","example":"OK"},"result":{"type":"object","properties":{"products":{"type":"array","items":{"$ref":"#/components/schemas/ProductLight"},"example":[{"segment_key":"surface-cleaning","id":"f50938a24830edb8b1c2ecc3f7dd88a3","name":"Apollo 1027","manufacturer":"spontex","level":"single","last_modified":"2022-06-24 17:14:46 +0200","pim_status":"ready","api_get_product":"/api/v1/product/surface-cleaning/f50938a24830edb8b1c2ecc3f7dd88a3","main_picture_url":"https://app.ppe-analytics.com/static/pictures/300/surface-cleaning/f50938a24830edb8b1c2ecc3f7dd88a3.jpg"},{"segment_key":"surface-cleaning","id":"89e6848c8f1f91404c224393340b1fad","name":"Ariane Ultra 1212","manufacturer":"spontex","level":"parent","last_modified":"2022-06-22 10:04:02 +0200","pim_status":"draft","api_get_product":"/api/v1/product/surface-cleaning/89e6848c8f1f91404c224393340b1fad","main_picture_url":"https://app.ppe-analytics.com/static/pictures/300/surface-cleaning/89e6848c8f1f91404c224393340b1fad.jpg"},{"segment_key":"surface-cleaning","id":"79e6848c8f1f91404c224393340b1fad","name":"Ariane Ultra 1212 RED","manufacturer":"spontex","level":"variant","parent_id":"89e6848c8f1f91404c224393340b1fad","last_modified":"2024-01-09 07:34:02 +0200","pim_status":"archived","api_get_product":"/api/v1/product/surface-cleaning/79e6848c8f1f91404c224393340b1fad","main_picture_url":"https://app.ppe-analytics.com/static/pictures/300/surface-cleaning/79e6848c8f1f91404c224393340b1fad.jpg"}]}}}}}}}},"404":{"$ref":"#/components/responses/UnkwnownSegmentKey"},"403":{"$ref":"#/components/responses/UnauthorizedSegment"}}}},"/products/{segment_key}/{product_id}":{"get":{"summary":"Get product 📘","description":"Get all information about a product:\n  * descriptions in multiple languages - *name / long description / short description*\n  * picture URLs - *main picture + additional pictures*\n  * documents in multiple languages - *technical sheet, manuals, CE certificates...*\n  * property values - *as defined by segment data model*\n  * variants - *child products which are variants of the parent product*\n  * SKUs - *logistic references for products*\n  * relations with other products - *symmetrical and asymmetrical, and potentially from other segments*\n","tags":["Products"],"parameters":[{"name":"segment_key","in":"path","required":true,"description":"The segment key, as returned by list segments endpoint.","schema":{"$ref":"#/components/schemas/SegmentKey","example":"head-protection"}},{"name":"product_id","in":"path","required":true,"description":"The unique product id, as returned by list products endpoint.","schema":{"type":"string","example":"cbdeacabd0128cb641b64d0c0f590332"}},{"name":"with_sku_details","in":"query","description":"Set to \"1\" to request all detailed SKU information, otherwise only SKU codes will be provided. *SKU data model can be requested on the Fetch segment data model endpoint with \"sku\" as segment key.*","schema":{"type":"boolean","example":1}},{"name":"sku_type","in":"query","description":"Set to the sku type key for which you want to get SKU data from. It can be useful if you handle several SKU types in your corporation, but you want information on a different SKU type which is not the default one","schema":{"type":"string","example":"acme-latam-sku"}},{"name":"with_asset_details","in":"query","description":"Set to \"1\" to request more detailed information about assets (name, source url, multiple assets...)","schema":{"type":"boolean","example":1}},{"name":"with_dynamic_tiles","in":"query","description":"Set to \"1\" to request dynamic information about tiles (in that case the title, the pictogram and the value can change for each product)","schema":{"type":"boolean","example":1}},{"name":"with_json_path","in":"query","description":"Set to \"1\" to also request api endpoint + json path for each item in the views, allosing easier query of detailed items attributes","schema":{"type":"boolean","example":1}}],"responses":{"200":{"description":"Successfully returned product information","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"type":"string","example":"OK"},"result":{"type":"object","properties":{"languages":{"$ref":"#/components/schemas/Languages"},"product":{"$ref":"#/components/schemas/ProductFull"}},"example":{"languages":["en","fr"],"product":{"segment_key":"surface-cleaning","id":"f50938a24830edb8b1c2ecc3f7dd88a3","name":"Apo-low 1027","manufacturer":"spontex","level":"parent","main_picture_url":"https://app.ppe-analytics.com/static/pictures/300/surface-cleaning/f50938a24830edb8b1c2ecc3f7dd88a3.jpg","pim_status":"ready","product_page_urls":{"en":"https://website.uk/product-64654","fr":"https://website.fr/produit-64654"},"descriptions":{"name":{"en":"Apo-low 1027","fr":"Apo-bas 1027"},"description":{"en":"This product is truly awesome and made for you","fr":"Ce produit est vraiment incroyable et pensé pour vous"},"short_description":{"en":"You deserve the best","fr":"La meilleure qualité pour vous"}},"pictures":[{"is_main_picture":true,"asset_uuid":"9e158040-272e-4f6a-8da5-1bed82f8ca80-0.jpg","original":"https://assets.ppe-analytics.com/mapa/9e/15/9e158040-272e-4f6a-8da5-1bed82f8ca80/9e158040-272e-4f6a-8da5-1bed82f8ca80-0.jpg","square-80px":"https://assets.ppe-analytics.com/mapa/9e/15/9e158040-272e-4f6a-8da5-1bed82f8ca80/9e158040-272e-4f6a-8da5-1bed82f8ca80-0-80.jpg","square-300px":"https://assets.ppe-analytics.com/mapa/9e/15/9e158040-272e-4f6a-8da5-1bed82f8ca80/9e158040-272e-4f6a-8da5-1bed82f8ca80-0-300.jpg","square-800px":"https://assets.ppe-analytics.com/mapa/9e/15/9e158040-272e-4f6a-8da5-1bed82f8ca80/9e158040-272e-4f6a-8da5-1bed82f8ca80-0-800.jpg","hd":"https://assets.ppe-analytics.com/mapa/9e/15/9e158040-272e-4f6a-8da5-1bed82f8ca80/9e158040-272e-4f6a-8da5-1bed82f8ca80-0-hd.jpg","types":["product-picture"]},{"asset_uuid":"6cb60165-78ab-4bd7-8ac7-2afc3a5c952d-0.png","original":"https://assets.ppe-analytics.com/mapa/6c/b6/6cb60165-78ab-4bd7-8ac7-2afc3a5c952d/6cb60165-78ab-4bd7-8ac7-2afc3a5c952d-0.png","square-80px":"https://assets.ppe-analytics.com/mapa/6c/b6/6cb60165-78ab-4bd7-8ac7-2afc3a5c952d/6cb60165-78ab-4bd7-8ac7-2afc3a5c952d-0-80.png","square-300px":"https://assets.ppe-analytics.com/mapa/6c/b6/6cb60165-78ab-4bd7-8ac7-2afc3a5c952d/6cb60165-78ab-4bd7-8ac7-2afc3a5c952d-0-300.png","square-800px":"https://assets.ppe-analytics.com/mapa/6c/b6/6cb60165-78ab-4bd7-8ac7-2afc3a5c952d/6cb60165-78ab-4bd7-8ac7-2afc3a5c952d-0-800.png","hd":"https://assets.ppe-analytics.com/mapa/6c/b6/6cb60165-78ab-4bd7-8ac7-2afc3a5c952d/6cb60165-78ab-4bd7-8ac7-2afc3a5c952d-0-hd.png","types":["360-picture"]}],"documents":{"technical-sheet":{"en":"https://spontex.ppe-analytics.com/en/product/f50938a24830edb8b1c2ecc3f7dd88a3/pdf/technical-sheet","fr":"https://spontex.ppe-analytics.com/fr/product/f50938a24830edb8b1c2ecc3f7dd88a3/pdf/technical-sheet"},"instructions-for-use":{"en":"https://assets.ppe-analytics.com/mapa/ab/b2/abb230c2-2753-473c-b298-88fab2bc7c8c/abb230c2-2753-473c-b298-88fab2bc7c8c-0.pdf","fr":"https://assets.ppe-analytics.com/mapa/ab/b2/abb230c2-2753-473c-b298-88fab2bc7c8c/abb230c2-2753-473c-b298-88fab2bc7c8c-0.pdf"}},"assets":{"instructions-for-use":[{"asset_uuid":"abb230c2-2753-473c-b298-88fab2bc7c8c","url":"https://assets.ppe-analytics.com/mapa/ab/b2/abb230c2-2753-473c-b298-88fab2bc7c8c/abb230c2-2753-473c-b298-88fab2bc7c8c-0.pdf","name":"Notice chemical range","languages":["en","fr"]}],"technical-sheet":[{"asset_uuid":"0bb230c2-2753-473c-b298-88fab2bc7001","url":"https://spontex.ppe-analytics.com/en/product/f50938a24830edb8b1c2ecc3f7dd88a3/pdf/dcue-certificate","name":"Apo-low 1027 Technical sheet EN","languages":["en"]},{"asset_uuid":"0bb230c2-2753-473c-b298-88fab2bc7002","url":"https://spontex.ppe-analytics.com/fr/product/f50938a24830edb8b1c2ecc3f7dd88a3/pdf/dcue-certificate","name":"Apo-low 1027 Technical sheet FR","languages":["fr"]}]},"values":{"main-color":["blue"],"has-latex":true,"en388-digits":"4343X"},"tiles":{"en374-letters":{"pictures":{"square-80px":"https://static.ppe-analytics.com/pictograms/public/d5/b2/d5b2f59e-9129-40c2-a9ea-1478c1431bcf/d5b2f59e-9129-40c2-a9ea-1478c1431bcf-80.png","square-300px":"https://static.ppe-analytics.com/pictograms/public/d5/b2/d5b2f59e-9129-40c2-a9ea-1478c1431bcf/d5b2f59e-9129-40c2-a9ea-1478c1431bcf-300.png"},"title":{"en":"EN344 Letters","fr":"Lettres En344"},"content":{"en":"B + some details","fr":"B + des détails"}},"mycorp/advantages":{"title":{"en":"Advantages","fr":"Avantages"},"content":{"en":"Cheap / green / robust","fr":"Pas cher / écolo / robuste"}}},"views":{"web":{"default":[{"type":"property","key":"technical-name"}],"norms":[{"type":"property","key":"en388"},{"type":"tile","key":"tile-900"}],"advantages":[{"type":"localized-field","key":"acme--fabdis-desc-32"},{"type":"property","key":"mycorp/comfort"}]},"compare":{"default":[{"type":"property","key":"mycorp/material"},{"type":"property","key":"color"}]}},"variants":[{"product_id":"f60938a24830edb8b1c2ecc3f7dd88a4","segment_key":"ear-protection","label":"Apo-low 1027 BLUEGREEN","code":"1027-BG","rank":0,"main_picture_url":"https://app.ppe-analytics.com/static/pictures/300/surface-cleaning/f50938a24830edb8b1c2ecc3f7dd88a3.jpg","api_get_product":"/api/v1/products/ear-protection/f60938a24830edb8b1c2ecc3f7dd88a4","last_modified":"2023-12-24 17:14:46 +0200","values":{"color":["blue","green"]}},{"product_id":"f70938a24830edb8b1c2ecc3f7dd88a5","segment_key":"ear-protection","label":"Apo-low 1027 BLUEBLACK","code":"1027-BB","rank":1,"main_picture_url":"https://app.ppe-analytics.com/static/pictures/300/surface-cleaning/f50938a24830edb8b1c2ecc3f7dd88a3.jpg","api_get_product":"/api/v1/products/ear-protection/f70938a24830edb8b1c2ecc3f7dd88a5","last_modified":"2024-01-09 12:55:02 +0200","values":{"color":["blue","black"]}}],"skus":[{"code":"APO1027-123","label":"APO-LOW 1027 polybag","values":[{"basic-unit-kind":"bg","basic-packaging-ean":283762387623,"basic-packaging-gross-weight":540}]},{"code":"APO1027-456","label":"APO-LOW 1027 single","values":[{"basic-unit-kind":"ea","basic-packaging-ean":283762387624,"basic-packaging-gross-weight":122}]},{"code":"APO1027-777","label":"APO-LOW 1027 FOR EXPORT","values":[{"basic-unit-kind":"bx","basic-packaging-ean":283762387625,"basic-packaging-gross-weight":1250}]}],"relations":[{"key":"is_part_of_kit","type":"asymmetrical","products":[{"product_id":"f70938a24830edb8b1c2ecc3f7dd88a5","segment_key":"surface-cleaning","label":"Kit nettoyage","manufacturer":"spontex","code":"CLEAN-KIT","main_picture_url":"https://app.ppe-analytics.com/static/pictures/300/surface-cleaning/f50938a24830edb8b1c2ecc3f7dd88a3.jpg","api_get_product":"/api/v1/products/ear-protection/f70938a24830edb8b1c2ecc3f7dd88a5"}]},{"key":"can_replace","type":"asymmetrical","products":[{"product_id":"f70938a24830edb8b1c2ecc3f7dd88a5","segment_key":"surface-cleaning","label":"Apo li light","manufacturer":"spontex","code":"APOLI","main_picture_url":"https://app.ppe-analytics.com/static/pictures/300/surface-cleaning/f50938a24830edb8b1c2ecc3f7dd88a3.jpg","api_get_product":"/api/v1/products/ear-protection/f70938a24830edb8b1c2ecc3f7dd88a5"},{"product_id":"f70938a24830edb8b1c2ecc3f7dd88a5","segment_key":"surface-cleaning","label":"Apo logic","manufacturer":"spontex","code":"APOLOGIC","main_picture_url":"https://app.ppe-analytics.com/static/pictures/300/surface-cleaning/f50938a24830edb8b1c2ecc3f7dd88a3.jpg","api_get_product":"/api/v1/products/ear-protection/f70938a24830edb8b1c2ecc3f7dd88a5"}]},{"key":"associated","type":"symmetrical","products":[{"product_id":"f70938a24830edb8b1c2ecc3f7dd88a5","segment_key":"eye-protection","label":"Lunettes anti projections","manufacturer":"uvex","code":"9872323-LUN","main_picture_url":"https://app.ppe-analytics.com/static/pictures/300/surface-cleaning/f50938a24830edb8b1c2ecc3f7dd88a3.jpg","api_get_product":"/api/v1/products/ear-protection/f70938a24830edb8b1c2ecc3f7dd88a5"}]}],"countries":["it","fr","gb","ml"]}}}}}}}},"404":{"$ref":"#/components/responses/UnkwnownProductId"},"403":{"$ref":"#/components/responses/UnauthorizedProduct"},"419":{"$ref":"#/components/responses/RateLimitExceeded"}}}},"/products/values/{property_key}":{"get":{"summary":"Get values 📋","description":"Returns the values for a given property on a list of products\n\nBy default all the products of the perimeter with a value on this property will be returned, but the population can be reduced using filters.\n","tags":["Products"],"parameters":[{"name":"property_key","in":"path","required":true,"description":"The property key for which to get the values, as returned by segment datamodel endpoint.\n\nIf it is a public property, it must be prefixed by the segment slug + '--', for example `hand-protection--en388-digits`.\n\nOtherwise it will look for private properties\n","schema":{"type":"string","example":"acme-product-ranking"}},{"name":"filters","in":"query","required":false,"description":"Optional filters that will reduce the product population and only provide values for the products matching the filters. Filter example: `en388-cut~d`\n\nFilters can be cumulated with the query string array syntax: `?filters[]=prop1~foo\u0026filters[]=prop2~bar`\n  \nFilters on string properties must provide the exact value, case sensitive. Loose search is not permitted yet.\n\nIn the filter, if the value is omitted after the ~, the filter will return all products having at least a value for the property. \n"}],"responses":{"200":{"description":"Successfully returned property values","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"type":"string","example":"OK"},"result":{"type":"object","properties":{"values":{"type":"array","items":{"$ref":"#/components/schemas/ProductPropertyValue"},"example":[{"product_segment_key":"surface-cleaning","product_id":"f50938a24830edb8b1c2ecc3f7dd88a3","value":["one","two"]},{"product_segment_key":"surface-cleaning","product_id":"89e6848c8f1f91404c224393340b1fad","value":["three"]},{"product_segment_key":"surface-cleaning","product_id":"79e6848c8f1f91404c224393340b1fad","value":["one"]}]}}}}}}}},"404":{"$ref":"#/components/responses/UnkwnownPropertyKey"},"403":{"$ref":"#/components/responses/UnauthorizedProperty"}}}},"/products/search":{"post":{"summary":"Search products 🔍","description":"Returns the list of products available to your API access, with their name matching a given input text.\n\nOnly basic product information is provided by this endpoint, including product id. Additional info can be reached through the links provided in basic information.\n","tags":["Products"],"requestBody":{"description":"The search request infos","content":{"application/json":{"schema":{"properties":{"input_text":{"type":"string","required":true,"description":"The text to search for, typically from user input","example":"Awesome 123"},"max_count":{"type":"integer","required":false,"description":"The maximum number of results to return","example":20,"default":10},"language":{"description":"The language in which to receive the results","$ref":"#/components/schemas/Language"},"filters":{"description":"Optional filters that will reduce the product population to search into","required":false,"$ref":"#/components/schemas/PropertyFilter"}}}}}},"responses":{"200":{"description":"Successfully returned products (can be empty if no results)","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"type":"string","example":"OK"},"result":{"type":"object","properties":{"products":{"type":"array","items":{"$ref":"#/components/schemas/ProductLight"},"example":[{"segment_key":"lightening","id":"f50938a24830edb8b1c2ecc3f7dd88a3","name":"Awesome light 123","manufacturer":"petzl","level":"variant","last_modified":"2022-06-24 17:14:46 +0200","api_get_product":"/api/v1/product/lightening/f50938a24830edb8b1c2ecc3f7dd88a3","main_picture_url":"https://app.ppe-analytics.com/static/pictures/300/lightening/f50938a24830edb8b1c2ecc3f7dd88a3.jpg","product_page_url":"https://my-website.it/lightening/f50938a24830edb8b1c2ecc3f7dd88a3"},{"segment_key":"head-protection","id":"89e6848c8f1f91404c224393340b1fad","name":"Awesome helmet 1234","manufacturer":"jsp","level":"single","last_modified":"2022-06-22 10:04:02 +0200","api_get_product":"/api/v1/product/head-protection/89e6848c8f1f91404c224393340b1fad","main_picture_url":"https://app.ppe-analytics.com/static/pictures/300/head-protection/89e6848c8f1f91404c224393340b1fad.jpg","product_page_url":"https://my-website.it/head-protection/89e6848c8f1f91404c224393340b1fad"}]}}}}}}}}}}},"/skus/{segment_key}":{"get":{"summary":"List SKUs 📦","description":"Returns the list of SKUs available to your corporation for a given segment, or for all segments at once (leave segment_key empty in that case)\n\nOnly product id information is provided by this endpoint. Full information is available through the *Fetch product information* endpoint\n","tags":["Products"],"parameters":[{"name":"segment_key","in":"path","required":false,"description":"The segment key of the SKUs, as returned by list products endpoint. Leave empty for all segments","schema":{"$ref":"#/components/schemas/SegmentKey","example":"head-protection"}},{"name":"sku_type","in":"query","description":"Set to the sku type key for which you want to get SKU list. It can be useful if you handle several SKU types in your corporation, but you want information on a different SKU type which is not the default one","schema":{"type":"string","example":"acme-latam-sku"}}],"responses":{"200":{"description":"Successfully returned SKUs with their product ids","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"type":"string","example":"OK"},"result":{"type":"object","properties":{"skus":{"type":"array","items":{"$ref":"#/components/schemas/ProductSku"},"example":[{"code":"789-111","product_segment_key":"surface-cleaning","product_id":"f50938a24830edb8b1c2ecc3f7dd88a3"},{"code":"789-12","product_segment_key":"surface-cleaning","product_id":"89e6848c8f1f91404c224393340b1fad"},{"code":"789-112","product_segment_key":"surface-cleaning","product_id":"79e6848c8f1f91404c224393340b1fad"}]}}}}}}}},"404":{"$ref":"#/components/responses/UnkwnownSegmentKey"},"403":{"$ref":"#/components/responses/UnauthorizedSegment"}}}},"/navigation/trees":{"get":{"summary":"List navigation trees","description":"Returns the list of navigation trees available to your corporation.\n\nA navigation tree is a tree-structure to organize your products and navigate into them in a classic \"nested folders\" architecture.\n","tags":["Datamodel"],"responses":{"200":{"description":"Successfully returned available navigation trees","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"type":"string","example":"OK"},"result":{"type":"object","properties":{"navigation_trees":{"type":"array","items":{"$ref":"#/components/schemas/NavigationTreeLight"},"example":[{"id":"aada9924-34dd-4ce7-8e15-482ff0c8fa81","key":"by-risk","allow_multiple_nodes":false,"api_get_navigation_tree":"/api/v1/navigation/trees/aada9924-34dd-4ce7-8e15-482ff0c8fa81"},{"id":"b1702cb8-b68e-47e5-a8fe-4a1b330d567f","key":"website-tree-structure","allow_multiple_nodes":true,"api_get_navigation_tree":"/api/v1/navigation/trees/b1702cb8-b68e-47e5-a8fe-4a1b330d567f"}]}}}}}}}}}}},"/navigation/trees/{tree_id}":{"get":{"summary":"Get navigation tree","description":"Returns the content of a given navigation tree.\n\nA navigation tree is a tree-structure to organize your products and navigate into them in a classic \"nested folders\" architecture.\n\nIt is very different from the navigation guide whose structure is dynamic and depends on the population considered and the answers chosen previously.\n\nThe depth of the tree is not fixed, and can vary accross a given tree depending on the branches.\n\nSome trees allow for products to be found in multiple nodes, whereas some others will enforce a unicity constraint. This is detailed via the `allow_multiple_nodes` attribute\n\nFor all the nodes with a `parent_node_id`, the API guarantees that the parent node is returned before any of its children in the list, allowing a single-pass parsing of the tree.\n","tags":["Datamodel"],"parameters":[{"name":"tree_id","in":"path","required":true,"description":"The navigation tree id, as returned by list navigation trees endpoint.","type":"string","example":"b1702cb8-b68e-47e5-a8fe-4a1b330d567f"},{"name":"max_depth","in":"query","required":false,"description":"The max depth to be returned for the tree. By default the full tree will be returned.","type":"integer","example":4},{"name":"filters","in":"query","required":false,"description":"Optional filters that will reduce the product population and only provide nodes with at least one product in it (for advanced usages only)\nFilter example: `my-prop1~my-value`\n      \n"}],"responses":{"200":{"description":"Successfully returned navigation tree content","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"type":"string","example":"OK"},"result":{"type":"object","properties":{"navigation_tree":{"$ref":"#/components/schemas/NavigationTreeFull"}},"example":{"navigation_tree":{"id":"b1702cb8-b68e-47e5-a8fe-4a1b330d567f","key":"website-tree-structure","allow_multiple_nodes":true,"max_depth":-1,"nodes":[{"id":"the-essentials","key":"family~essentials","name":{"en":"The essentials","fr":"Les essentiels"},"depth":1,"rank":0,"picto_urls":["https://app.ppe-analytics.com/static/pictos/300w/fc6d75d7-8366-424e-b526-4bc333a390b5.jpg","https://app.ppe-analytics.com/static/pictos/150w/e32e0f84-7889-414d-ab17-3be2d1f47f9a.jpg"]},{"id":"on-sales","key":"family~on-sales","name":{"en":"On sales!","fr":"Les promos"},"depth":1,"rank":1,"picto_urls":["https://app.ppe-analytics.com/static/pictos/300w/fc6d75d7-8366-424e-b526-4bc333a390b5.jpg"]},{"id":"our-selection","key":"family~our-selection","depth":1,"rank":2,"name":{"en":"Our selection","fr":"Notre selection"}},{"id":"indoor-work","key":"env~indoor","name":{"en":"Indoor work","fr":"Travail en intérieur"},"depth":2,"rank":0,"parent_node_id":"the-essentials"},{"id":"outdoor-work","key":"env~outdoor","name":{"en":"Outdoor work","fr":"Travail en exterieur"},"depth":2,"rank":1,"parent_node_id":"the-essentials"},{"id":"outdoor-work-cold","key":"env-outdoor-temp~cold","name":{"en":"Cold environment","fr":"Environnement froid"},"depth":3,"rank":0,"parent_node_id":"outdoor-work"},{"id":"outdoor-work-hot","key":"env-outdoor-temp~hot","name":{"en":"Hot environment","fr":"Environnement chaud"},"depth":3,"rank":1,"parent_node_id":"outdoor-work"}]}}}}}}}},"404":{"$ref":"#/components/responses/UnkwnownNavigationTreeId"}}}},"/navigation/guide/init":{"post":{"summary":"Initialize guide ▶️","description":"Initialize a new guided search.\n\nA guided search will take several steps to go through, thus it is identified by a search_id which must be provided at each step.\n\nThe search_id holds all user choices made at each step of the guide.\n\nFor advanced usages, it is possible to provide some filters at search init, that will be used immediately on the rest of the search. The syntax of the filters requires some knowledged about the keys of the used properties and values and is not meant to be guessed without prior knowledge.\n","tags":["Guided search"],"requestBody":{"content":{"application/json":{"schema":{"properties":{"optional_filters":{"description":"The filters to use right at the beginning of the search (for advanced usages only)","required":false,"$ref":"#/components/schemas/PropertyFilter"},"custom_pictos_only":{"description":"If enabled, will only show custom pictograms, not Deck default ones","type":"boolean","example":true}}}}}},"responses":{"200":{"description":"Successfully initialized guided search","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"type":"string","example":"OK"},"result":{"type":"object","properties":{"context":{"type":"object","items":{"$ref":"#/components/schemas/GuideContext"},"example":{"locale":"en","search_id":"2e254ef2-3e63-4cb2-9680-3876b68e7191","custom_pictos_only":true,"step":1,"product_count":4513,"api_follow_guide":"/api/v1/navigation/guide/2e254ef2-3e63-4cb2-9680-3876b68e7191/en/follow/current","api_guide_results":"/api/v1/navigation/guide/2e254ef2-3e63-4cb2-9680-3876b68e7191/en/results"}}}}}}}}}}}},"/navigation/guide/{search_id}/{locale}/follow/{step}":{"get":{"summary":"Follow guide ⏭️","description":"This endpoint is the core of the guided search. It has a double use case:\n  * Get a question of a given step with possible choices\n  * Answer to a question of a given step with user choices, in that case the next question + choices is returned directly\n\nIt is meant to be used several times in a row to follow the guide until the end, or until the user wants to stop it and show results immediately\n","tags":["Guided search"],"parameters":[{"name":"search_id","in":"path","required":true,"description":"The search_id as returned by the `Initialize guide` endpoint.","schema":{"type":"string","example":"2e254ef2-3e63-4cb2-9680-3876b68e7191"}},{"name":"locale","in":"path","required":true,"description":"The locale in which to go through the guide. It can be changed at any step of the guide. Available languages depend on your corporation settings.","schema":{"$ref":"#/components/schemas/Language"}},{"name":"step","in":"path","required":true,"description":"The step for which we want to get the question or the step we want to answer to. If you're not answering a given step, use `current` to automatically jump to latest step.\n","schema":{"type":"string","example":2}},{"name":"choice_key","in":"query","required":false,"description":"The string representation of the choice(s) made by the user for the question at the given step.\nFor multiple choices, allowed combinations are given by `available_combination_mode` attribute of the question.\nIn order to build the final choice_key, you'll need to concatenate the choice keys with\n  * `~` char for `and` combination\n  * `|` char for `or` combination\n\nIf the question is marked as skippable, it can be skipped by using `_skip_` as a choice\n\nIf you want to go back to the previous proposed question, you should use `_back_` as a choice\n","schema":{"type":"string"}}],"responses":{"200":{"description":"Submit choices for a given question, and get next question with its choices","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"type":"string","example":"OK"},"result":{"type":"object","properties":{"context":{"type":"object","items":{"$ref":"#/components/schemas/GuideContext"},"example":{"locale":"it","search_id":"2e254ef2-3e63-4cb2-9680-3876b68e7191","custom_pictos_only":true,"step":2,"product_count":262,"api_follow_guide":"/api/v1/navigation/guide/2e254ef2-3e63-4cb2-9680-3876b68e7191/it/follow/3","api_guide_results":"/api/v1/navigation/guide/2e254ef2-3e63-4cb2-9680-3876b68e7191/it/results","api_skip_question":"/api/v1/navigation/guide/2e254ef2-3e63-4cb2-9680-3876b68e7191/it/follow/3?choice_key=_skip_","api_back_question":"/api/v1/navigation/guide/2e254ef2-3e63-4cb2-9680-3876b68e7191/it/follow/3?choice_key=_back_"}},"question":{"type":"object","items":{"$ref":"#/components/schemas/GuideQuestion"},"example":{"key":"search-by-manufacturer","label":"Ricerca per produttore","available_combination_mode":"or","picto_url":"https://app.ppe-analytics.com/static/pictos/300/fc6d75d7-8366-424e-b526-4bc333a390b5.jpg","is_back_allowed":true,"is_skip_allowed":true}},"choices":{"type":"array","items":{"$ref":"#/components/schemas/GuideChoices"},"example":[{"key":"manufacturer-1","label":"Produttore n°1","picto_url":"https://app.ppe-analytics.com/static/pictos/300/fc6d75d7-8366-424e-b526-4bc333a390b5.jpg","product_count":20},{"key":"manufacturer-2","label":"Produttore n°2","picto_url":"https://app.ppe-analytics.com/static/pictos/300/fc6d75d7-8366-424e-b526-4bc333a39585.jpg","product_count":55},{"key":"manufacturer-3","label":"Produttore n°3","picto_url":"https://app.ppe-analytics.com/static/pictos/300/fc6d75d7-8366-424e-b526-4bc333a39585.jpg","product_count":187}]}}}}}}}}}}},"/navigation/guide/{search_id}/{locale}/results":{"get":{"summary":"Guide results ⏏️","description":"Get search results and search filters for the latest step of a given search.\n\nIt can be called at the end of the guide (when there is no question left) but can also be called any time during the guided search.\n\nIf called regularly, it is recommended to activate the pagination mechanism by providing a page number - starting at 1. Default slice page is 25, but it can be refined with the slice parameter.\n","tags":["Guided search"],"parameters":[{"name":"search_id","in":"path","required":true,"description":"The search_id as returned by the `Follow guide` endpoint.","schema":{"type":"string","example":"2e254ef2-3e63-4cb2-9680-3876b68e7191"}},{"name":"locale","in":"path","required":true,"description":"The locale in which to receive the results. Available languages depend on your corporation settings.","schema":{"$ref":"#/components/schemas/Language"}},{"name":"page","in":"query","required":false,"description":"The rank of the requested page, starting at 1.","schema":{"type":"integer","example":3}},{"name":"slice","in":"query","required":false,"description":"The size of the slice requested. Default value is 25.","schema":{"type":"integer","example":10}}],"responses":{"200":{"description":"Successfully returned results for a given search (filters + products)","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"type":"string","example":"OK"},"result":{"type":"object","properties":{"context":{"type":"object","items":{"$ref":"#/components/schemas/GuideContext"},"example":{"locale":"fr","search_id":"2e254ef2-3e63-4cb2-9680-3876b68e7191","custom_pictos_only":true,"step":4,"product_count":50,"api_refine_guide":"/api/v1/navigation/guide/2e254ef2-3e63-4cb2-9680-3876b68e7191/fr/follow/current?choice_key=_refine_"}},"filters":{"type":"array","items":{"$ref":"#/components/schemas/GuideFilter"},"example":[{"segment_key":"head-protection","key":"colour","name":"Couleur","combination_mode":"or","picto_url":"https://app.ppe-analytics.com/static/pictures/300/head-protection/89e6848c8f1f91404c224393340b1fad.jpg","values":[{"key":"white","name":"Blanc","picto_url":"https://app.ppe-analytics.com/static/pictures/300/head-protection/89e6848c8f1f91404c224393340b1fad.jpg"},{"key":"black","name":"Noir","picto_url":"https://app.ppe-analytics.com/static/pictures/300/head-protection/89e6848c8f1f91404c224393340b1fad.jpg"}],"query_string":"colour~white_black"}]},"products":{"type":"array","items":{"$ref":"#/components/schemas/ProductLight"},"example":[{"segment_key":"head-protection","id":"f50938a24830edb8b1c2ecc3f7dd88a3","name":"Awesome light 123","manufacturer":"petzl","level":"single","api_get_product":"/api/v1/product/lightening/f50938a24830edb8b1c2ecc3f7dd88a3","main_picture_url":"https://app.ppe-analytics.com/static/pictures/300/lightening/f50938a24830edb8b1c2ecc3f7dd88a3.jpg","product_page_url":"https://my-website.it/lightening/f50938a24830edb8b1c2ecc3f7dd88a3"},{"segment_key":"head-protection","id":"89e6848c8f1f91404c224393340b1fad","name":"Awesome helmet 1234","manufacturer":"jsp","level":"variant","api_get_product":"/api/v1/product/head-protection/89e6848c8f1f91404c224393340b1fad","main_picture_url":"https://app.ppe-analytics.com/static/pictures/300/head-protection/89e6848c8f1f91404c224393340b1fad.jpg","product_page_url":"https://my-website.it/head-protection/89e6848c8f1f91404c224393340b1fad"}]}}}}}}}}}}}},"security":[{"API key":[]}],"components":{"securitySchemes":{"API key":{"type":"apiKey","in":"header","name":"PPEApiKey","description":"🛡️ Deck API access is restricted to Deck **customers** and **partners**.\n\nIn order to access the API, you'll need to authenticate by sending your authentication token in the `PPEApiKey` header of your requests.\nAccess rights and product perimeters depend on the API key provided, so you may have to use several API keys if you work on several projects with different scopes.\n\n👉 If you need an API key to look around and try our API, ask one [here](https://ppe-analytics-25299782.hubspotpagebuilder.eu/lapi-des-epi).\n\n👉 If you want to use Deck services or become a partner, contact us on [support@ppe-analytics.com](support@ppe-analytics.com).\n"}},"schemas":{"ResponseStatus":{"type":"string","description":"The status of the reponse","enum":["OK","WARNING","ERROR"],"example":"OK"},"StatusMessage":{"type":"object","properties":{"status":{"type":"string"},"message":{"type":"string"}}},"Language":{"type":"string","description":"Available languages depend on your corporation settings","enum":["en fr it es de hu ja be pt es fi ro tr pt-BR es-AR en-US"],"example":"it"},"Languages":{"type":"array","description":"List of languages","items":{"$ref":"#/components/schemas/Language"},"example":["en fr it es"]},"SegmentKey":{"type":"string","description":"Unique slug to identify the segment","example":"surface-cleaning","enum":["hand-protection","foot-protection","head-protection","eye-protection","body-protection","ear-protection","fall-protection","respiratory-protection","ergonomy","safety-first-aid","hygiene","lockout-tagout","electrical","lightening","safety-signs","surface-cleaning"]},"ViewItemType":{"type":"string","description":"The type of the item in the view, to know in which kind of object to look for","example":"property","enum":["property","tile","localized-field"]},"PropertyStatusKey":{"type":"string","description":"Status to define the property in more detail","example":"beta","enum":["beta sunset input"]},"PictureAssetType":{"type":"string","description":"Unique slug to identify an asset type for pictures","enum":["product-picture","picture-in-context","360-picture","benefits-picture","pictogram"],"example":"360-picture"},"AnyAssetType":{"type":"string","description":"Unique slug to identify an asset type","enum":["fda-certificate","esd-certificate","food-contact-test-results","en407-certificate","oekotex-certificate","iso18889-certificate","chemical-chart","ca-brazil","brochure","phytosanitary-instructions-for-use","periodic-control-sheet","ukca-certificate","experience-feedback","product-brochure","range-brochure","technology-brochure","cleanroom-specifications","maintenance-tips","dcue-certificate","tag-information","vertical-video","range-poster","technology-video","range-video","selection-assistance","local-certificate","reach-certificate","scip-notification","vertical-brochure","technical-sheet","instructions-for-use","product-video","periodic-control","dceuepi-certificate","dceumachine-certificate","usa-certificate","technical-poster","product-sheet","detailed-technical-sheet","food-contact-certificate","product-worn-picture","contact-info","difac-technical-sheet","additional-note","colombia-certificate","technical-drawing","product-picture","picture-in-context","360-picture","benefits-picture","pictogram"],"example":"technical-sheet"},"ProductLevel":{"type":"string","description":"The level of the product in the product hierarchy. Products which are not part of any hierarchy are marked as 'single'","enum":["single","parent","variant"]},"PimStatus":{"type":"string","description":"The status of the product in the PIM. It is only available on products on which your are the owner","enum":["draft","ready","archived"]},"RelationKey":{"type":"string","description":"A key to define the type of relation between two products","example":"is_part_of_kit","enum":["is_part_of_kit","has_for_kit_content","is_spare_part_for","has_for_spare_parts","is_accessory_for","has_for_accessories","is_replaceable_by","can_replace","is_premium_replaceable_by","can_premium_replace","associated","part_of_same_collection"]},"RelationType":{"type":"string","description":"Defines wether a relation is symmetrical (true for both parties equally) or asymmetrical (different for each party)","enum":["symmetrical","asymmetrical"]},"ProductId":{"type":"string","description":"Id to identify the product, unique segment-wise","example":"f50938a24830edb8b1c2ecc3f7dd88a3"},"PropertyType":{"type":"string","description":"Type of the data handled by the property.","example":"enum","enum":["boolean string enum enum_list json arbo_enum arbo_enum_list"]},"PropertyFilter":{"type":"array","example":["my-prop1~my-value","other-prop2~other-value"],"items":{"type":"string"}},"Trads":{"type":"object","description":"Translations for the object. Available languages depend on your corporation settings","properties":{"en":{"type":"string"},"fr":{"type":"string"}}},"LocalizedUrls":{"type":"object","description":"Localized URLs for the object. Available languages depend on your corporation settings","properties":{"en":{"type":"string"},"fr":{"type":"string"}}},"AssetType":{"type":"object","properties":{"key":{"type":{"$ref":"#/components/schemas/AnyAssetType"}},"type":{"description":"The type of content it applies to","type":"string","enum":["document video picture"]},"trads":{"type":{"$ref":"#/components/schemas/Trads"}},"allow_multiple":{"description":"Wether of not this asset type can receive multiple instances for a given language","type":"boolean"}}},"Property":{"type":"object","properties":{"key":{"type":"string","description":"The slug to identify the property. It is unique segment-wise."},"type":{"$ref":"#/components/schemas/PropertyType"},"group":{"type":"string","description":"The group key of this property, mostly for organisation purpose."},"picto_url":{"type":"url","description":"The URL of the pictogram for the property."},"trads":{"$ref":"#/components/schemas/Trads"},"status":{"type":"array","description":"Meta info about the property","items":{"$ref":"#/components/schemas/PropertyStatusKey"}},"values":{"type":"array","description":"The available values for this property (only for *enum* and *enum_list* types).","items":{"type":"object","properties":{"key":{"type":"string","description":"The slug for this value. It is unique property-wise."},"rank":{"type":"integer","description":"The rank of the value within its siblings"},"picto_url":{"type":"url","description":"The URL of the pictogram for the value."},"trads":{"$ref":"#/components/schemas/Trads"}}}}},"example":{"key":"color","group":"description","type":"enum_list","picto_url":"https://app.ppe-analytics.com/static/pictos/300w/fc6d75d7-8366-424e-b526-4bc333a390b5.jpg","trads":{"en":"Color","fr":"Couleur","de":"Farbe"},"values":[{"key":"red","rank":1,"picto_url":"https://app.ppe-analytics.com/static/pictos/150w/e32e0f84-7889-414d-ab17-3be2d1f47f9a.jpg","trads":{"en":"Red","fr":"Rouge","de":"Rot"}},{"key":"green","rank":2,"picto_url":"https://app.ppe-analytics.com/static/pictos/150w/5872a29a-0059-4342-82cc-cb1e1965d629.jpg"}]}},"Tile":{"type":"object","properties":{"key":{"type":"string","description":"The slug to identify the property. It is unique segment-wise."},"tags":{"type":"array","description":"Tags for the tile, allowing finer filtering","items":{"type":"string"}},"picto_url":{"type":"url","description":"The URL of the pictogram for the property. **DEPRECATED, as well as the description, as the tile title \u0026 picto can now vary for each product**"},"trads":{"$ref":"#/components/schemas/Trads"}},"example":{"key":"en-388","tags":["norm","eu"]}},"Segment":{"type":"object","properties":{"key":{"$ref":"#/components/schemas/SegmentKey"},"picto_url":{"type":"string","description":"The URL of the pictogram for the segment."},"api_get_properties":{"type":"url","description":"The API endpoint to get all available properties of the segment"},"api_get_products":{"type":"url","description":"The API endpoint to get all available products of the segment"},"trads":{"$ref":"#/components/schemas/Trads"}},"example":{"key":"hand-protection","picto_url":"https://app.ppe-analytics.com/static/pictos/300w/epi-hand.png","api_get_properties":"/api/v1/segments/hand-protection","api_get_products":"/api/v1/products/hand-protection","trads":{"en":"Hand protection","fr":"Protection de la main"}}},"LocalizedField":{"type":"object","properties":{"key":{"type":"String","description":"The unique key to identify this localized field"},"trads":{"$ref":"#/components/schemas/Trads"}}},"View":{"type":"object","properties":{"key":{"type":"String","description":"The unique key to identify this view"},"trads":{"$ref":"#/components/schemas/Trads"},"api_get_view":{"type":"url","description":"The API endpoint to get detailed information for this view"}}},"ViewZone":{"type":"object","properties":{"key":{"type":"String","description":"The key to identify this zone in the view"},"trads":{"$ref":"#/components/schemas/Trads"},"rank":{"type":"integer","description":"The rank of the zone inside the view"}}},"ViewItem":{"type":"object","description":"An item (property/tile/localized-field) inside the view","properties":{"type":{"$ref":"#/components/schemas/ViewItemType"},"rank":{"type":"integer","description":"The rank of the item inside the zone"},"key":{"type":"string","description":"The unique key to designate the item found in the view + zone"}}},"NavigationTreeLight":{"type":"object","properties":{"id":{"type":"string","description":"The unique id of the navigation tree"},"key":{"type":"string","description":"A key identifying the navigation tree, for understanding purpose, not guaranteed unique"},"allow_multiple_nodes":{"type":"boolean","description":"Whether or not a product can be located in multiple nodes of the tree"},"api_get_navigation_tree":{"type":"url","description":"The API endpoint to get the content of this navigation tree"}}},"NavigationTreeFull":{"type":"object","properties":{"id":{"type":"string","description":"The unique id of the navigation tree"},"key":{"type":"string","description":"A key identifying the navigation tree, for debugging/understanding purpose, not guaranteed unique"},"allow_multiple_nodes":{"type":"boolean","description":"Whether or not a product can be located in multiple nodes of the tree"},"max_depth":{"type":"integer","description":"The max depth requested. `-1` if no depth limit has been applied"},"nodes":{"type":"array","items":{"$ref":"#/components/schemas/NavigationNode"}}}},"NavigationNode":{"type":"object","properties":{"id":{"type":"string","description":"The id of the node, unique accross the navigation tree"},"parent_node_id":{"type":"string","description":"The id of the parent node (empty for root nodes)"},"key":{"type":"string","description":"A key identifying the node, for debugging/understanding purpose, not guaranteed unique"},"name":{"$ref":"#/components/schemas/Trads"},"depth":{"type":"integer","description":"The depth of the node inside the tree"},"rank":{"type":"integer","description":"The ranking of the node accross its siblings"},"picto_urls":{"type":"array","description":"The urls for the pictograms of this node (optional, not all nodes have pictograms)","items":{"type":"url"}}}},"Values":{"type":"object","description":"Property values attached to this object","properties":{"property_key":{"type":"string","description":"To be replaced with the property key of the property"},"value":{"$ref":"#/components/schemas/PropertyValue"}}},"Tiles":{"type":"object","description":"Tiles attached to this object. One tile is composed of a pictogram + localized title \u0026 value","properties":{"tile_key":{"type":"string","description":"To be replaced with the tile key of the tile. It will have a mycorp/ prefix for private tiles to avoid conflicts"},"value":{"$ref":"#/components/schemas/TileValue"}}},"ProductLight":{"type":"object","properties":{"segment_key":{"$ref":"#/components/schemas/SegmentKey"},"id":{"$ref":"#/components/schemas/ProductId"},"name":{"type":"string","description":"The name of the product"},"manufacturer":{"type":"string","description":"The manufacturer key for the product"},"level":{"$ref":"#/components/schemas/ProductLevel"},"last_modified":{"type":"date","description":"Date of last modification on product"},"parent_id":{"type":"string","description":"The id of the parent product (if level is \"variant\")"},"api_get_product":{"type":"url","description":"The API endpoint to get all information on the product"},"main_picture_url":{"type":"url","description":"The URL of the main picture for the product"},"product_page_url":{"type":"url","description":"The URL of the public product page"},"pim_status":{"$ref":"#/components/schemas/PimStatus"}},"example":{"id":"surface-cleaning/f50938a24830edb8b1c2ecc3f7dd88a3","name":"Apollo 1027","api_get_product":"/api/v1/product/surface-cleaning/f50938a24830edb8b1c2ecc3f7dd88a3","main_picture_url":"https://app.ppe-analytics.com/static/pictures/300/surface-cleaning/f50938a24830edb8b1c2ecc3f7dd88a3.jpg"}},"ProductVariant":{"type":"object","properties":{"segment_key":{"$ref":"#/components/schemas/SegmentKey"},"id":{"$ref":"#/components/schemas/ProductId"},"name":{"type":"string","description":"The name of the variant product"},"code":{"type":"string","description":"The code to identify the variant (optional)"},"rank":{"type":"integer","description":"The rank of the variant in the variants list"},"api_get_product":{"type":"url","description":"The API endpoint to get all information on the product"},"main_picture_url":{"type":"url","description":"The URL of the main picture for the product"},"last_modified":{"type":"date","description":"Date of last modification on product"},"values":{"$ref":"#/components/schemas/Values"}}},"PropertyValue":{"type":"string","description":"The value for this property can be:\n * a value_key for enum\n * an array of value_key for enum_list\n * a string otherwise\n"},"TileValue":{"type":"object","description":"Full tile content, including its pictogram, title and content (all of them are optional)","properties":{"pictures":{"type":"array","description":"Direct links to different sizes of the picture. Can be hotlinked","items":{"type":"object","properties":{"square-80px":{"type":"url"},"square-300px":{"type":"url"}}}},"title":{"$ref":"#/components/schemas/Trads","description":"The localized title for this tile and product. Note: titles can vary from one product to another"},"content":{"$ref":"#/components/schemas/Trads","description":"The localized content for this tile and product."}}},"ProductPropertyValue":{"type":"object","properties":{"product_segment_key":{"$ref":"#/components/schemas/SegmentKey"},"product_id":{"$ref":"#/components/schemas/ProductId"},"value":{"$ref":"#/components/schemas/PropertyValue"}}},"ProductExportLine":{"type":"object","properties":{"product_segment_key":{"$ref":"#/components/schemas/SegmentKey"},"product_id":{"$ref":"#/components/schemas/ProductId"},"values":{"$ref":"#/components/schemas/Values"}}},"PaginationCursor":{"type":"object","properties":{"slice_size":{"description":"The size of the current slice","type":"integer"},"slice_number":{"description":"The number of the current slice","type":"integer"},"max_slice_number":{"description":"The max number of slices for this dataset \u0026 slice size","type":"integer"},"total_count":{"description":"The total number of items in the dataset","type":"integer"},"modified_after":{"description":"The \"modified_after\" day, if provided. It must be provided in pagination request to preserve the product population","type":"date"},"api_get_next_slice":{"description":"The url to call in order to get the next slice","type":"url"}}},"SkuExportLine":{"type":"object","properties":{"sku_code":{"type":"string","description":"The unique code of the SKU"},"values":{"$ref":"#/components/schemas/Values"}}},"ProductSku":{"type":"object","properties":{"code":{"type":"string","description":"The unique code of the SKU"},"product_segment_key":{"$ref":"#/components/schemas/SegmentKey"},"product_id":{"$ref":"#/components/schemas/ProductId"}}},"GuideFilter":{"type":"object","properties":{"segment_key":{"$ref":"#/components/schemas/SegmentKey"},"key":{"type":"string","description":"Unique key to identify the filter"},"name":{"type":"string","description":"Filter key translation (depending of the locale)"},"combination_mode":{"type":"string","description":"The value for this property can be:\n  * \"none\"        --\u003e Single choice\n  * \"and\" OR \"or\" --\u003e Multiple choice --\u003e \"choice_1~choice_2\" OR \"choice_1|choice_2\"\n"},"picto_url":{"type":"string","description":"The URL of the filter pictogram"},"values":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string","description":"Unique key to identify the value"},"name":{"type":"string","description":"value key translation (depending of the locale)"},"picto_url":{"type":"string","description":"The URL of the value pictogram"}}}},"query_string":{"type":"string","description":"The query_string URL compatible version of the filter, to provide in optional_filters for example"}}},"GuideContext":{"type":"object","properties":{"locale":{"$ref":"#/components/schemas/Language"},"search_id":{"type":"string","description":"The search_id include all user choices, built or edited at each stage of the search guide"},"custom_pictos_only":{"type":"boolean","description":"True if only custom pictograms are returned, but not Deck default pictograms"},"step":{"type":"integer","description":"The current step of the search, to be used to identify the question we're answering to"},"product_count":{"type":"integer","description":"Total product count at current step"},"api_follow_guide":{"type":"url","description":"The API endpoint to follow search guide while there are still some steps to follow"},"api_refine_guide":{"type":"url","description":"The API endpoint to refine your search once you followed all the steps"},"api_guide_results":{"type":"url","description":"The API endpoint to get search guide results"}}},"GuideQuestion":{"type":"object","properties":{"key":{"type":"string","description":"Unique key to identify the question"},"label":{"type":"string","description":"Question key translation (depending of the locale)"},"available_combination_mode":{"type":"string","description":"The different ways that several answers for this question can be combined:\n  * \"none\"   --\u003e Single choice, no combination possible\n  * \"or\"     --\u003e Multiple choice, only with OR combination --\u003e \"choice_1|choice_2\"\n  * \"and_or\" --\u003e Multiple choice, with AND or OR combinations --\u003e \"choice_1~choice_2\" OR \"choice_1|choice_2\"\n"},"picto_url":{"type":"string","description":"The URL of the question pictogram"},"is_back_allowed":{"type":"boolean","description":"Wether or not this question can be rollback"},"is_skip_allowed":{"type":"boolean","description":"Wether or not this question can be skipped"}}},"GuideChoices":{"type":"object","properties":{"key":{"type":"string","description":"Unique key to identify the choice"},"label":{"type":"string","description":"Choice key translation (depending of the locale)"},"picto_url":{"type":"string","description":"The URL of the choice pictogram"},"product_count":{"type":"integer","description":"The number of products affected by this choice"}}},"GuideFilterQuestion":{"type":"object","items":{"type":"object","properties":{"key":{"type":"string","description":"Unique key to identify the filter"},"label":{"type":"string","description":"Question key translation (depending of the locale)"},"available_combination_mode":{"type":"string","description":"The different ways that several values for this filter can be combined:\n  * \"none\"   --\u003e Single choice, no combination possible\n  * \"or\"     --\u003e Multiple choice, only with OR combination --\u003e \"choice_1|choice_2\"\n  * \"and_or\" --\u003e Multiple choice, with AND or OR combinations --\u003e \"choice_1~choice_2\" OR \"choice_1|choice_2\"\n","enum":["none or and_or"]},"selected_combination_mode":{"type":"string","description":"The ways that the values for this filters are currently combined\n","enum":["none and or"]},"picto_url":{"type":"string","description":"The URL of the question pictogram"}}}},"GuideFilterValue":{"type":"object","properties":{"key":{"type":"string","description":"Unique key to identify the value"},"label":{"type":"string","description":"Choice key translation (depending of the locale)"},"picto_url":{"type":"url","description":"The URL of the value pictogram"},"is_selected":{"type":"boolean","description":"Whether or not this choice is already selected by the user"},"product_count":{"type":"integer","description":"The number of products resulting from this choice"}}},"ProductFull":{"type":"object","properties":{"segment_key":{"$ref":"#/components/schemas/SegmentKey"},"id":{"$ref":"#/components/schemas/ProductId"},"name":{"type":"string","description":"The name of the product"},"manufacturer":{"type":"string","description":"The manufacturer key of the product"},"level":{"$ref":"#/components/schemas/ProductLevel"},"main_picture_url":{"type":"url","description":"The URL of the main picture for the product"},"product_page_urls":{"type":"object","$ref":"#/components/schemas/LocalizedUrls"},"descriptions":{"type":"object","properties":{"name":{"$ref":"#/components/schemas/Trads"},"description":{"$ref":"#/components/schemas/Trads"},"short_description":{"$ref":"#/components/schemas/Trads"}}},"pictures":{"type":"array","items":{"type":"object","properties":{"is_main_picture":{"type":"boolean"},"asset_uuid":{"type":"string"},"types":{"type":"array","items":{"$ref":"#/components/schemas/PictureAssetType"}},"original":{"type":"url"},"square-80px":{"type":"url"},"square-300px":{"type":"url"},"square-800px":{"type":"url"},"hd":{"type":"url"}}}},"documents":{"type":"object","description":"The list of available types used as keys depend on your corporation settings and on the content attached to the product","properties":{"technical-sheet":{"$ref":"#/components/schemas/LocalizedUrls"},"dcue-certificate":{"$ref":"#/components/schemas/LocalizedUrls"}}},"values":{"$ref":"#/components/schemas/Values"},"tiles":{"$ref":"#/components/schemas/Tiles"},"variants":{"type":"array","description":"The list of available variants of this product","items":{"$ref":"#/components/schemas/ProductVariant"}},"variant_parent":{"allOf":[{"description":"Parent product if current product is a variant"},{"$ref":"#/components/schemas/ProductLight"}]},"skus":{"type":"array","description":"The list of active SKUs on this product. *SKU data model can be requested on the Fetch segment data model endpoint with \"sku\" as segment key.*","items":{"type":"object","properties":{"code":{"type":"string","description":"The unique code for the SKU"},"label":{"type":"string","description":"A description for this SKU"},"values":{"$ref":"#/components/schemas/Values"}}}},"relations":{"type":"array","description":"The list of relations that this product has with other products, potentially from other segments. Relations can be asymmetrical or symmetrical. In a symmetrical relation both product are at the same level, whereas in an asymmetrical relation the roles of the products involved is not the same, one is the leader and the other the follower.","items":{"type":"object","properties":{"key":{"$ref":"#/components/schemas/RelationKey"},"type":{"$ref":"#/components/schemas/RelationType"},"products":{"type":"array","description":"The list of relations with other products on this product","items":{"$ref":"#/components/schemas/ProductLight"}}}}},"countries":{"type":"array","description":"The list of countries in which the product is sold, using alpha-2 iso codes","items":{"type":"string","example":["fr","gb","it"]}}}}},"responses":{"UnkwnownSegmentKey":{"description":"Unknown segment key","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"type":"string","example":"ERROR"},"message":{"type":"string","example":"Unknown segment key 'book-protection'"}}}}}},"UnauthorizedSegment":{"description":"Unauthorized segment","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"type":"string","example":"ERROR"},"message":{"type":"string","example":"Unauthorized access to segment 'secret-agent'"}}}}}},"UnkwnownNavigationTreeId":{"description":"Unknown navigation tree id","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"type":"string","example":"ERROR"},"message":{"type":"string","example":"Unknown navigation tree id 'abcdef-1234'"}}}}}},"UnkwnownProductId":{"description":"Unknown product id","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"type":"string","example":"ERROR"},"message":{"type":"string","example":"Unknown product id 'abcdef-1234'"}}}}}},"UnauthorizedProduct":{"description":"Unauthorized product","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"type":"string","example":"ERROR"},"message":{"type":"string","example":"Unauthorized access to product 'secret-agent/007'"}}}}}},"RateLimitExceeded":{"description":"Rate limit exceeded","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"type":"string","example":"ERROR"},"message":{"type":"string","example":"Rate limit exceeded on this endpoint. Please slow down your calls a little"}}}}}}}}}