{
  "components": {
    "schemas": {
      "AsdaProductDetailGetCompletedJob": {
        "additionalProperties": false,
        "properties": {
          "billing": {
            "$ref": "#/components/schemas/JobBilling"
          },
          "capability": {
            "enum": [
              "asda.product.detail.get"
            ],
            "type": "string"
          },
          "job_id": {
            "format": "uuid",
            "type": "string"
          },
          "platform": {
            "enum": [
              "asda"
            ],
            "type": "string"
          },
          "request_id": {
            "format": "uuid",
            "type": "string"
          },
          "results": {
            "items": {
              "additionalProperties": false,
              "properties": {
                "data": {
                  "description": "Raw capability output. Its shape may evolve with the upstream source; the example is illustrative, not a compatibility guarantee.",
                  "example": {
                    "product": {
                      "avg_rating": 4.179,
                      "brand": "ASDA",
                      "category": "Chilled Food > Milk, Butter, Cream & Eggs > Fresh Milk > Semi Skimmed Milk",
                      "cin": "165468",
                      "currency": "GBP",
                      "gtin": "20337087",
                      "id": "20504",
                      "image_id": "20337087",
                      "image_url": "https://asdagroceries.scene7.com/is/image/asdagroceries/20337087",
                      "in_stock": true,
                      "name": "British Milk Semi Skimmed 4 Pints",
                      "pack_size": "4 PINT",
                      "price": 1.65,
                      "price_per_uom": "72.6p/LT",
                      "rating_count": 1039,
                      "sales_type": "Each",
                      "status": "A",
                      "taxonomy": {
                        "AISLE_ID": "1215339434886",
                        "AISLE_NAME": "Fresh Milk",
                        "CAT_ID": "1215660378320",
                        "CAT_NAME": "Chilled Food",
                        "DEPT_ID": "1215339432024",
                        "DEPT_NAME": "Milk, Butter, Cream & Eggs",
                        "SHELF_ID": "1215339438036",
                        "SHELF_NAME": "Semi Skimmed Milk"
                      },
                      "url": "https://www.asda.com/groceries/product/165468",
                      "was_price": 1.65
                    },
                    "raw": {
                      "exhaustive": {
                        "nbHits": true,
                        "typo": true
                      },
                      "exhaustiveNbHits": true,
                      "exhaustiveTypo": true,
                      "extensions": {
                        "queryCategorization": {}
                      },
                      "hits": [
                        {
                          "BRAND": "ASDA",
                          "STOCK": {
                            "4669": 999,
                            "4547": 999,
                            "4450": 999,
                            "4461": 999,
                            "5881": 999,
                            "4549": 999,
                            "4881": 999,
                            "4536": 999,
                            "4965": 0,
                            "5864": 999,
                            "4642": 999,
                            "4973": 999,
                            "4690": 999,
                            "4344": 0,
                            "4948": 999,
                            "4466": 999,
                            "4133": 999,
                            "4640": 999,
                            "4766": 999,
                            "4599": 999,
                            "4499": 999,
                            "4696": 999,
                            "4844": 999,
                            "5870": 0,
                            "4757": 999,
                            "4584": 999,
                            "4679": 999,
                            "5880": 999,
                            "4182": 999,
                            "4955": 999,
                            "4730": 999,
                            "4950": 999,
                            "4203": 0,
                            "4641": 999,
                            "4217": 999,
                            "4177": 999,
                            "5729": 999,
                            "4647": 999,
                            "4925": 999,
                            "4472": 999,
                            "4477": 999,
                            "4617": 999,
                            "4178": 999,
                            "5784": 0,
                            "4408": 999,
                            "4471": 999,
                            "4452": 999,
                            "5849": 999,
                            "4877": 999,
                            "4436": 999,
                            "4243": 0,
                            "4771": 999,
                            "4156": 999,
                            "4164": 999,
                            "4260": 0,
                            "4611": 999,
                            "4911": 0,
                            "4600": 999,
                            "4990": 999,
                            "4396": 999,
                            "4976": 999,
                            "4162": 999,
                            "4919": 999,
                            "4738": 999,
                            "4160": 999,
                            "4806": 999,
                            "4566": 999,
                            "4231": 999,
                            "4631": 999,
                            "5899": 0,
                            "4670": 999,
                            "4585": 999,
                            "4154": 999,
                            "4460": 999,
                            "4602": 999,
                            "4850": 999,
                            "4934": 999,
                            "4903": 999,
                            "4175": 0,
                            "4628": 999,
                            "4141": 999,
                            "4370": 0,
                            "4947": 999,
                            "4997": 999,
                            "4415": 999,
                            "4603": 999,
                            "4632": 999,
                            "4165": 999,
                            "4608": 999,
                            "4958": 999,
                            "4501": 999,
                            "4152": 999,
                            "4145": 999,
                            "4390": 999,
                            "5878": 999,
                            "4981": 999,
                            "4794": 999,
                            "4837": 999,
                            "4963": 999,
                            "4216": 999,
                            "4944": 999,
                            "5013": 999,
                            "5028": 999,
                            "4551": 999,
                            "4625": 0,
                            "4259": 999,
                            "4630": 999,
                            "5809": 999,
                            "4151": 0,
                            "4286": 0,
                            "4563": 999,
                            "4252": 999,
                            "4689": 999,
                            "4980": 0,
                            "4307": 0,
                            "4931": 999,
                            "4209": 999,
                            "4469": 999,
                            "4126": 999,
                            "4550": 999,
                            "5011": 999,
                            "4967": 999,
                            "4580": 999,
                            "4743": 999,
                            "4401": 999,
                            "4949": 999,
                            "4699": 999,
                            "4936": 999,
                            "4841": 999,
                            "4918": 999,
                            "4926": 0,
                            "4559": 999,
                            "4994": 999,
                            "4143": 999,
                            "4666": 999,
                            "4229": 999,
                            "4759": 999,
                            "4564": 999,
                            "5883": 999,
                            "4661": 0,
                            "4658": 999,
                            "5840": 999,
                            "4522": 0,
                            "4576": 999,
                            "5002": 999,
                            "4364": 999,
                            "4375": 0,
                            "4492": 999,
                            "4414": 999,
                            "4218": 999,
                            "4483": 999,
                            "4464": 999,
                            "4186": 999,
                            "4786": 999,
                            "4360": 999,
                            "4457": 999,
                            "4184": 999,
                            "4531": 0,
                            "4975": 999,
                            "4290": 0,
                            "4626": 999,
                            "4917": 999,
                            "4537": 999,
                            "4399": 999,
                            "4960": 0,
                            "4214": 999,
                            "4570": 999,
                            "4922": 999,
                            "4651": 0,
                            "4905": 999,
                            "4572": 999,
                            "4276": 999,
                            "4697": 999,
                            "4573": 999,
                            "4140": 999,
                            "4885": 999,
                            "4325": 999,
                            "4627": 999,
                            "4161": 999,
                            "4583": 999,
                            "4656": 999,
                            "4623": 999,
                            "5819": 999,
                            "4440": 0,
                            "4289": 0,
                            "4733": 999,
                            "5759": 999,
                            "4653": 999,
                            "4649": 999,
                            "4329": 999,
                            "4561": 999,
                            "5871": 999,
                            "5807": 0,
                            "5885": 999,
                            "4192": 0,
                            "4615": 999,
                            "4543": 999,
                            "4530": 999,
                            "4929": 999,
                            "5900": 0,
                            "4168": 999,
                            "4422": 999,
                            "4567": 999,
                            "5818": 999,
                            "4772": 999,
                            "4676": 999,
                            "5762": 999,
                            "4845": 999,
                            "4952": 999,
                            "4961": 999,
                            "4510": 999,
                            "4616": 999,
                            "4419": 999,
                            "4879": 0,
                            "4505": 999,
                            "4667": 999,
                            "4409": 999,
                            "4251": 999,
                            "4345": 999,
                            "5130": 999,
                            "4943": 999,
                            "4410": 999,
                            "4356": 999,
                            "4946": 0,
                            "4734": 999,
                            "4826": 0,
                            "4509": 999,
                            "4167": 999,
                            "4185": 0,
                            "4664": 0,
                            "4671": 999,
                            "4668": 999,
                            "4597": 999,
                            "4456": 999,
                            "4953": 999,
                            "4574": 999,
                            "4463": 999,
                            "4639": 999,
                            "4326": 0,
                            "4804": 999,
                            "4688": 999,
                            "4880": 999,
                            "5892": 999,
                            "4174": 999,
                            "4798": 999,
                            "4601": 999,
                            "4575": 999,
                            "4514": 999,
                            "4823": 999,
                            "4614": 999,
                            "4675": 999,
                            "4941": 999,
                            "4747": 999,
                            "4776": 999,
                            "4135": 999,
                            "4933": 999,
                            "4681": 999,
                            "4663": 999,
                            "4622": 999,
                            "4288": 0,
                            "4646": 999,
                            "4263": 999,
                            "4660": 999,
                            "4680": 999,
                            "4672": 999,
                            "4200": 999,
                            "4906": 999,
                            "4645": 999,
                            "4995": 999,
                            "4652": 999,
                            "4694": 999,
                            "4311": 0,
                            "4744": 999,
                            "4674": 0,
                            "4220": 999,
                            "4137": 999,
                            "4678": 0,
                            "4275": 999,
                            "5828": 999,
                            "4163": 999,
                            "4489": 999,
                            "4916": 999,
                            "4777": 999,
                            "4634": 999,
                            "4403": 999,
                            "4179": 999,
                            "4993": 999,
                            "4654": 999,
                            "4851": 999,
                            "4677": 999,
                            "4187": 999,
                            "4692": 999,
                            "4942": 999,
                            "4778": 999,
                            "4425": 999,
                            "4598": 999,
                            "4662": 999,
                            "4606": 999,
                            "4155": 999,
                            "4327": 999,
                            "5884": 999,
                            "4486": 999,
                            "4857": 999,
                            "5758": 999,
                            "4183": 999,
                            "4363": 0,
                            "4148": 999,
                            "4789": 999,
                            "4232": 999,
                            "4932": 999,
                            "4928": 999,
                            "5001": 999,
                            "4740": 999,
                            "5794": 999,
                            "4153": 999,
                            "4613": 999,
                            "4188": 999,
                            "4181": 999,
                            "4644": 999,
                            "4637": 0,
                            "5757": 999,
                            "4430": 999,
                            "4176": 0,
                            "4131": 0,
                            "4271": 999,
                            "4322": 999,
                            "4765": 999,
                            "4127": 999,
                            "4238": 0,
                            "4708": 999,
                            "4655": 999,
                            "4139": 999,
                            "4659": 999,
                            "4991": 999,
                            "4361": 999,
                            "4316": 0,
                            "4294": 0,
                            "4966": 999,
                            "4633": 999,
                            "4172": 0,
                            "4565": 999,
                            "4718": 999,
                            "4520": 999,
                            "4957": 0,
                            "4157": 999,
                            "4971": 0,
                            "4338": 999,
                            "4386": 999,
                            "4685": 999,
                            "4619": 999,
                            "4878": 999,
                            "4813": 999,
                            "4264": 0,
                            "4638": 999,
                            "5830": 999,
                            "4610": 999,
                            "4609": 999,
                            "4462": 999,
                            "4138": 999,
                            "4686": 0,
                            "4712": 999,
                            "4195": 999,
                            "4979": 999,
                            "4920": 999,
                            "4774": 999,
                            "5894": 0,
                            "4964": 999,
                            "4454": 999,
                            "4605": 999,
                            "4571": 999,
                            "4988": 999,
                            "5876": 0,
                            "4144": 999,
                            "4792": 999,
                            "4253": 999,
                            "4548": 999,
                            "4376": 999,
                            "4170": 999,
                            "4189": 999,
                            "5719": 999,
                            "4538": 999,
                            "4394": 999,
                            "5868": 0,
                            "4750": 999,
                            "4657": 999,
                            "4136": 999,
                            "5869": 999,
                            "4506": 999,
                            "4684": 999,
                            "4607": 999,
                            "4892": 999,
                            "4769": 999,
                            "4618": 999,
                            "4956": 999,
                            "4596": 999,
                            "4158": 999,
                            "4201": 999,
                            "4433": 0,
                            "4278": 999,
                            "4977": 999,
                            "4840": 999,
                            "4586": 999,
                            "4643": 999,
                            "4799": 999,
                            "4281": 999,
                            "4987": 999,
                            "4308": 0,
                            "4368": 0,
                            "4146": 999,
                            "4954": 999,
                            "5889": 999,
                            "4620": 999,
                            "4924": 999,
                            "4636": 999,
                            "4190": 999,
                            "4996": 999,
                            "4648": 0,
                            "4587": 999,
                            "5004": 0,
                            "4579": 999,
                            "4173": 999,
                            "4710": 999,
                            "4831": 999,
                            "4533": 999,
                            "4149": 999,
                            "4935": 0,
                            "4383": 999,
                            "5867": 999,
                            "4938": 999,
                            "4927": 0,
                            "4923": 0,
                            "4511": 999,
                            "4128": 0,
                            "4939": 999,
                            "4233": 999,
                            "4500": 999,
                            "4986": 999,
                            "4211": 999,
                            "4249": 0,
                            "4169": 999,
                            "4194": 999,
                            "4446": 999,
                            "4405": 0,
                            "4635": 999,
                            "4940": 999,
                            "4159": 999,
                            "4424": 0,
                            "4287": 0,
                            "4582": 999,
                            "4577": 0,
                            "4693": 999,
                            "5895": 0,
                            "4581": 999
                          },
                          "NAME": "British Milk Semi Skimmed 4 Pints",
                          "SECONDARY_TAXONOMY": {
                            "AISLE_ID": [
                              "1215684431268",
                              "1215684431428",
                              "1215684751119",
                              "1215686355775",
                              "1215685941123",
                              "1215686171994",
                              "1215686201112",
                              "1215686231114",
                              "1215686251779",
                              "1215686351447",
                              "1215686355770",
                              "1215686355483",
                              "1215686355500",
                              "1215686355521",
                              "1215686355970",
                              "1215686356047",
                              "1215686356081",
                              "1215686356092",
                              "1215686356177",
                              "1215686356179",
                              "1215686356694",
                              "1215686356698",
                              "1215686356795",
                              "1215686356916",
                              "1215685402890",
                              "81159825",
                              "1215684741360",
                              "1215684741355"
                            ],
                            "CAT_ID": [
                              "1215684421135",
                              "1215684741317",
                              "1215677638945",
                              "1215685931218",
                              "1215686171987",
                              "1215684571145",
                              "1215686355474",
                              "1215682433625"
                            ],
                            "DEPT_ID": [
                              "1215684421138",
                              "1215684421136",
                              "1215684741357",
                              "1215683767650",
                              "1215685931219",
                              "1215686171989",
                              "1215686201111",
                              "1215684571199",
                              "1215686355482",
                              "1215686355499",
                              "1215682447118",
                              "1215686356036",
                              "1215686356074",
                              "1215686356176",
                              "1215686356693",
                              "1215686356915",
                              "1215685402889",
                              "81159679",
                              "1215684741348"
                            ],
                            "SHELF_ID": [
                              "1215684431270",
                              "1215684431429",
                              "1215684751120",
                              "1215685931241",
                              "1215685941124",
                              "1215686171995",
                              "1215686201113",
                              "1215686231110",
                              "1215686231118",
                              "1215686251780",
                              "1215686351448",
                              "1215686354611",
                              "1215686355494",
                              "1215686355501",
                              "1215686355522",
                              "1215686355971",
                              "1215686356048",
                              "1215686356083",
                              "1215686356093",
                              "1215686356200",
                              "1215686356202",
                              "1215686356695",
                              "1215686356699",
                              "1215686356796",
                              "1215686356917",
                              "1215686356932",
                              "81160248",
                              "84154413",
                              "84741875"
                            ]
                          },
                          "CIN": "165468",
                          "_highlightResult": {
                            "BRAND": {
                              "matchLevel": "none",
                              "matchedWords": [],
                              "value": "ASDA"
                            },
                            "CIN": {
                              "matchLevel": "none",
                              "matchedWords": [],
                              "value": "165468"
                            },
                            "ID": {
                              "matchLevel": "none",
                              "matchedWords": [],
                              "value": "20504"
                            },
                            "NAME": {
                              "matchLevel": "none",
                              "matchedWords": [],
                              "value": "British Milk Semi Skimmed 4 Pints"
                            },
                            "PRIMARY_TAXONOMY": {
                              "AISLE_NAME": {
                                "matchLevel": "none",
                                "matchedWords": [],
                                "value": "Fresh Milk"
                              },
                              "SHELF_NAME": {
                                "matchLevel": "none",
                                "matchedWords": [],
                                "value": "Semi Skimmed Milk"
                              }
                            }
                          },
                          "IS_FROZEN": false,
                          "CPC": 0,
                          "FLAVOUR": "SEMI",
                          "STATUS": "A",
                          "NUTRITIONAL_INFO": {
                            "Halal": 0,
                            "HighFibre": 0,
                            "Kosher": 0,
                            "LowFat": 0,
                            "LowSalt": 0,
                            "LowSaturatedFat": 0,
                            "LowSugar": 0,
                            "NoCeleryincludingceleriac": 1,
                            "NoEgg": 1,
                            "NoFish": 1,
                            "NoGluten": 1,
                            "NoLactose": 0,
                            "NoLupin": 1,
                            "NoMilk": 0,
                            "NoMustard": 1,
                            "NoNuts": 1,
                            "NoPeanuts": 1,
                            "NoSesame": 1,
                            "NoShellfish": 1,
                            "NoSoya": 1,
                            "Ofaday": 0,
                            "SourceofFibre": 0,
                            "Vegan": 0,
                            "Vegetarian": 1
                          },
                          "CS_YES": false,
                          "MAX_QTY": 24,
                          "HFSS_CAT_ID": 0,
                          "COUNTRY": [
                            "Packed In : United Kingdom"
                          ],
                          "AVG_RATING": 4.179,
                          "PHARMACY_RESTRICTED": false,
                          "SHOW_PRICE_CS": true,
                          "ICONS": [
                            {
                              "CLICKABLE": false,
                              "END_DATE": 1551873600,
                              "ICON_NAME": "801_NoShellfish",
                              "ID": "51000002",
                              "IMAGE_URL": "https://ui.assets-asda.com/dm/_000_Icon?&$Icon-wapp$",
                              "PRIORITY": 10440,
                              "START_DATE": 1551700800
                            },
                            {
                              "CLICKABLE": true,
                              "END_DATE": 1604275200,
                              "ICON_NAME": "_923_LiveBetter",
                              "ID": "53500014",
                              "IMAGE_URL": "https://ui.assets-asda.com/dm/_923_LiveBetter?&$Icon-wapp$",
                              "PRIORITY": -83,
                              "START_DATE": 1575072060
                            },
                            {
                              "CLICKABLE": false,
                              "END_DATE": 1600171200,
                              "ICON_NAME": "_151_UnionFlag",
                              "ID": "55000003",
                              "IMAGE_URL": "https://ui.assets-asda.comtest.jpg",
                              "PRIORITY": 10427,
                              "START_DATE": 1594728000
                            },
                            {
                              "CLICKABLE": true,
                              "ICON_NAME": "Live Better",
                              "ID": "55100004",
                              "IMAGE_URL": "https://ui.assets-asda.com/dm/_923_LiveBetter_Update?",
                              "PRIORITY": 875,
                              "START_DATE": 1596283200
                            },
                            {
                              "CLICKABLE": true,
                              "END_DATE": 1682510400,
                              "ICON_NAME": "_008_RedTractorAUTO",
                              "ID": "55200006",
                              "IMAGE_URL": "https://ui.assets-asda.com/dm/_008_redtractor?&$icon-wapp$",
                              "PRIORITY": 5354,
                              "START_DATE": 1609329600
                            },
                            {
                              "CLICKABLE": false,
                              "END_DATE": 1608292800,
                              "ICON_NAME": "_555_CrackersIcon",
                              "ID": "56100010",
                              "IMAGE_URL": "https://ui.assets-asda.com/dm/_555_CrackersIcon?&$icon-wapp$",
                              "PRIORITY": 251
                            },
                            {
                              "CLICKABLE": true,
                              "END_DATE": 1912161600,
                              "ICON_NAME": "Typically fresh for 5 days",
                              "ID": "59600046",
                              "IMAGE_URL": "https://ui.assets-asda.com/dm/produce-5-days-icon?",
                              "PRIORITY": 39,
                              "START_DATE": 1625227200
                            },
                            {
                              "CLICKABLE": true,
                              "END_DATE": 1682510400,
                              "ICON_NAME": "_043_British",
                              "ID": "1215429129918",
                              "IMAGE_URL": "https://ui.assets-asda.com/dm/_043_british?",
                              "PRIORITY": 5435
                            },
                            {
                              "CLICKABLE": true,
                              "END_DATE": 1682510400,
                              "ICON_NAME": "_122_farmerowned",
                              "ID": "1215559958453",
                              "IMAGE_URL": "https://ui.assets-asda.com/dm/_122_farmerowned?",
                              "PRIORITY": 1562
                            }
                          ],
                          "SALES_TYPE": "Each",
                          "UNTRAITED_STORES": [
                            4128,
                            4131,
                            4151,
                            4172,
                            4175,
                            4176,
                            4185,
                            4192,
                            4203,
                            4238,
                            4243,
                            4249,
                            4260,
                            4264,
                            4286,
                            4287,
                            4288,
                            4289,
                            4290,
                            4294,
                            4307,
                            4308,
                            4311,
                            4316,
                            4326,
                            4344,
                            4363,
                            4368,
                            4370,
                            4375,
                            4405,
                            4424,
                            4433,
                            4440,
                            4522,
                            4531,
                            4577,
                            4625,
                            4637,
                            4648,
                            4651,
                            4661,
                            4664,
                            4674,
                            4678,
                            4686,
                            4826,
                            4879,
                            4911,
                            4923,
                            4926,
                            4927,
                            4935,
                            4946,
                            4957,
                            4960,
                            4965,
                            4971,
                            4980,
                            5004,
                            5784,
                            5807,
                            5868,
                            5870,
                            5876,
                            5894,
                            5895,
                            5899,
                            5900
                          ],
                          "PRODUCT_TYPE": "STANDARD",
                          "END_DATE": 1924948800,
                          "IMAGE_ID": "20337087",
                          "PRICES": {
                            "EN": {
                              "OFFER": "Dropped",
                              "PRICE": 1.65,
                              "PRICEPERUOM": 0.72591,
                              "PRICEPERUOMFORMATTED": "72.6p/LT",
                              "WASPRICE": 1.65
                            },
                            "NI": {
                              "OFFER": "Dropped",
                              "PRICE": 1.65,
                              "PRICEPERUOM": 0.72591,
                              "PRICEPERUOMFORMATTED": "72.6p/LT",
                              "WASPRICE": 1.65
                            },
                            "SC": {
                              "OFFER": "Dropped",
                              "PRICE": 1.65,
                              "PRICEPERUOM": 0.72591,
                              "PRICEPERUOMFORMATTED": "72.6p/LT",
                              "WASPRICE": 1.65
                            },
                            "WA": {
                              "OFFER": "Dropped",
                              "PRICE": 1.65,
                              "PRICEPERUOM": 0.72591,
                              "PRICEPERUOMFORMATTED": "72.6p/LT",
                              "WASPRICE": 1.65
                            }
                          },
                          "MAX_QTY_HSC": 24,
                          "PRIMARY_TAXONOMY": {
                            "AISLE_ID": "1215339434886",
                            "AISLE_NAME": "Fresh Milk",
                            "CAT_ID": "1215660378320",
                            "CAT_NAME": "Chilled Food",
                            "DEPT_ID": "1215339432024",
                            "DEPT_NAME": "Milk, Butter, Cream & Eggs",
                            "SHELF_ID": "1215339438036",
                            "SHELF_NAME": "Semi Skimmed Milk"
                          },
                          "RATING_COUNT": 1039,
                          "START_DATE": -1893412800,
                          "IS_SPONSORED": false,
                          "IS_FTO": false,
                          "ID": "20504",
                          "LABEL": "",
                          "HFSS_CAT_NAME": "Exempt",
                          "GPR": 0,
                          "IS_HFSS": false,
                          "HFSS_RESTRICTED": false,
                          "PAGE_TAXONOMY": [
                            "Chilled Food",
                            "Chilled Food > Milk, Butter, Cream & Eggs",
                            "Chilled Food > Milk, Butter, Cream & Eggs > Fresh Milk",
                            "Chilled Food > Milk, Butter, Cream & Eggs > Fresh Milk > Semi Skimmed Milk",
                            "Rollback",
                            "Rollback > Food & Drink",
                            "Rollback > Food & Drink > Food",
                            "Rollback > Food & Drink > Food > Chilled Food",
                            "Rollback > View All RollBack",
                            "Rollback > View All RollBack > View All RollBack",
                            "Rollback > View All RollBack > View All RollBack > View All RollBack",
                            "Summer",
                            "Summer > Holiday Shop",
                            "Summer > Holiday Shop > View All Holiday Shop",
                            "Summer > Holiday Shop > View All Holiday Shop > View All Holiday Shop",
                            "Events & Inspiration",
                            "Events & Inspiration > Back to School",
                            "Events & Inspiration > Back to School > View All Back to School",
                            "Events & Inspiration > Back to School > View All Back to School > View All Back to School",
                            "Back to School",
                            "Back to School > Mealtime",
                            "Back to School > Mealtime > View All Mealtime",
                            "Back to School > Mealtime > View All Mealtime > View All Mealtime",
                            "Live Better",
                            "Live Better > Chilled Food",
                            "Live Better > Chilled Food > Chilled Food",
                            "Live Better > Chilled Food > Chilled Food > Chilled Food",
                            "Live Better > Live Better",
                            "Live Better > Live Better > View All Live Better",
                            "Live Better > Live Better > View All Live Better > View All Live Better",
                            "Live Better > Live Better > View All Live Better > Chilled Food",
                            "Live Better > Live Better > Chilled Food",
                            "Live Better > Live Better > Chilled Food > Chilled Food",
                            "Easter",
                            "Easter > Easter Bakery",
                            "Easter > Easter Bakery > Easter Home Baking",
                            "Easter > Easter Bakery > Easter Home Baking > Easter Home Baking",
                            "Summer > Holiday Shop > Staycation",
                            "Summer > Holiday Shop > Staycation > Staycation Food Favourites",
                            "Events & Inspiration > Back to School > Mealtime",
                            "Events & Inspiration > Back to School > Mealtime > Breakfast",
                            "Going to Uni",
                            "Going to Uni > Food Essentials",
                            "Going to Uni > Food Essentials > View All Food Essentials",
                            "Going to Uni > Food Essentials > View All Food Essentials > View All Food Essentials",
                            "Going to Uni > View All Going to Uni",
                            "Going to Uni > View All Going to Uni > View All Going to Uni",
                            "Going to Uni > View All Going to Uni > View All Going to Uni > View All Going to Uni",
                            "Going to Uni > Food Essentials > Fridge Essentials",
                            "Going to Uni > Food Essentials > Fridge Essentials > Fridge Essentials",
                            "Events",
                            "Events > Price Match",
                            "Events > Price Match > Chilled Food",
                            "Events > Price Match > Chilled Food > Chilled Food",
                            "Events & Inspiration > To Say Thank You",
                            "Events & Inspiration > To Say Thank You > Baking & Homemade Treats",
                            "Events & Inspiration > To Say Thank You > Baking & Homemade Treats > Baking & Homemade Treats",
                            "Events & Inspiration > Going to Uni",
                            "Events & Inspiration > Going to Uni > Food Essentials",
                            "Events & Inspiration > Going to Uni > Food Essentials > Fridge Staples",
                            "Events & Inspiration > Going to Uni > View All Going to Uni",
                            "Events & Inspiration > Going to Uni > View All Going to Uni > View All Going to Uni",
                            "Events & Inspiration > Diwali",
                            "Events & Inspiration > Diwali > View All Diwali",
                            "Events & Inspiration > Diwali > View All Diwali > View All Diwali",
                            "Events & Inspiration > Diwali > Chilled Food",
                            "Events & Inspiration > Diwali > Chilled Food > Chilled Food",
                            "Events & Inspiration > Pancake Day",
                            "Events & Inspiration > Pancake Day > View All Pancake Day",
                            "Events & Inspiration > Pancake Day > View All Pancake Day > View All Pancake Day",
                            "Events & Inspiration > Pancake Day > Pancake Ingredients",
                            "Events & Inspiration > Pancake Day > Pancake Ingredients > Pancake Ingredients",
                            "Easter > Easter Bakery > View All Easter Bakery",
                            "Easter > Easter Bakery > View All Easter Bakery > View All Easter Bakery",
                            "Summer > Summer Top Picks",
                            "Summer > Summer Top Picks > Summer Top Picks",
                            "Summer > Summer Top Picks > Summer Top Picks > Summer Top Picks",
                            "Summer > New In Summer",
                            "Summer > New In Summer > New In Summer",
                            "Summer > New In Summer > New In Summer > New In Summer",
                            "Events & Inspiration > Mother's Day",
                            "Events & Inspiration > Mother's Day > Meal Ideas",
                            "Events & Inspiration > Mother's Day > Meal Ideas > Breakfast In Bed",
                            "Summer > Holiday Shop > Holiday Shop Offers",
                            "Summer > Holiday Shop > Holiday Shop Offers > Holiday Shop Rollbacks",
                            "Summer > Summer Drinks",
                            "Summer > Summer Drinks > Soft Drinks & Mixers",
                            "Summer > Summer Drinks > Soft Drinks & Mixers > Iced Coffee & Iced Tea"
                          ],
                          "PACK_SIZE": "4 PINT",
                          "DISPLAY_ONLINE": true,
                          "objectID": "165468",
                          "IS_BWS": false,
                          "SKU_TYPE_IDENTIFIER": "GROCERY"
                        }
                      ],
                      "hitsPerPage": 2,
                      "nbHits": 1,
                      "nbPages": 1,
                      "page": 0,
                      "params": "filters=ID%3A20504+OR+CIN%3A20504&hitsPerPage=2&optionalFilters=%5B%22STOCK.4565%3A1%3Cscore%3D50000%3E%22%5D&page=0",
                      "processingTimeMS": 14,
                      "processingTimingsMS": {
                        "_request": {
                          "roundTrip": 19
                        },
                        "extensions": 1,
                        "rulesProcessing": {
                          "drr": 8,
                          "indexRules": 3,
                          "total": 12
                        },
                        "total": 14
                      },
                      "query": "",
                      "renderingContent": {},
                      "serverTimeMS": 14
                    }
                  }
                },
                "error": {
                  "type": "null"
                },
                "index": {
                  "const": 0,
                  "type": "integer"
                },
                "url": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ]
                }
              },
              "required": [
                "index",
                "url",
                "data",
                "error"
              ],
              "type": "object"
            },
            "maxItems": 1,
            "minItems": 1,
            "type": "array"
          },
          "state": {
            "const": "completed",
            "type": "string"
          },
          "stats": {
            "$ref": "#/components/schemas/JobStats"
          },
          "success": {
            "const": true,
            "type": "boolean"
          }
        },
        "required": [
          "job_id",
          "request_id",
          "platform",
          "capability",
          "state",
          "success",
          "results",
          "billing",
          "stats"
        ],
        "type": "object"
      },
      "AsdaProductDetailGetExecuteRequest": {
        "additionalProperties": false,
        "example": {
          "capability": "asda.product.detail.get",
          "input": {
            "id": "20504",
            "store_id": "4565"
          }
        },
        "properties": {
          "capability": {
            "enum": [
              "asda.product.detail.get"
            ],
            "type": "string"
          },
          "input": {
            "$ref": "#/components/schemas/AsdaProductDetailGetInput"
          },
          "network": {
            "$ref": "#/components/schemas/ExecuteNetwork"
          },
          "timeout_ms": {
            "description": "Optional request timeout in milliseconds. Values above the capability timeout are rejected.",
            "maximum": 30000,
            "minimum": 1,
            "type": "integer"
          }
        },
        "required": [
          "capability",
          "input"
        ],
        "type": "object"
      },
      "AsdaProductDetailGetInput": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "additionalProperties": false,
        "properties": {
          "id": {
            "description": "Asda product ID or CIN (both are numeric catalog identifiers)",
            "pattern": "^[0-9]{1,14}$",
            "type": "string"
          },
          "limit": {
            "minimum": 1,
            "type": "integer"
          },
          "max_records": {
            "minimum": 1,
            "type": "integer"
          },
          "store_id": {
            "default": "4565",
            "description": "Asda store id used for stock boosting and in_stock flags",
            "pattern": "^[0-9]{1,6}$",
            "type": "string"
          }
        },
        "required": [
          "id"
        ],
        "type": "object"
      },
      "CredentialsRequiredError": {
        "additionalProperties": false,
        "properties": {
          "error": {
            "additionalProperties": false,
            "properties": {
              "code": {
                "const": "credentials_required",
                "type": "string"
              },
              "message": {
                "const": "this capability requires authentication credentials; save them via POST /credentials",
                "type": "string"
              }
            },
            "required": [
              "code",
              "message"
            ],
            "type": "object"
          }
        },
        "required": [
          "error"
        ],
        "type": "object"
      },
      "ExecuteAcceptedResponse": {
        "additionalProperties": false,
        "properties": {
          "capability": {
            "enum": [
              "asda.product.detail.get"
            ],
            "type": "string"
          },
          "job_id": {
            "format": "uuid",
            "type": "string"
          },
          "platform": {
            "enum": [
              "asda"
            ],
            "type": "string"
          },
          "request_id": {
            "format": "uuid",
            "type": "string"
          },
          "state": {
            "const": "queued",
            "type": "string"
          }
        },
        "required": [
          "job_id",
          "request_id",
          "platform",
          "capability",
          "state"
        ],
        "type": "object"
      },
      "ExecuteNetwork": {
        "additionalProperties": false,
        "properties": {
          "session_id": {
            "description": "Optional explicit session identifier.",
            "minLength": 1,
            "type": "string"
          },
          "session_key": {
            "description": "Optional stable key used to derive a reusable session.",
            "minLength": 1,
            "type": "string"
          },
          "sticky": {
            "description": "Whether the request should reuse the resolved session.",
            "type": "boolean"
          }
        },
        "type": "object"
      },
      "ExecuteReplayResponse": {
        "additionalProperties": false,
        "description": "Replayed response matching the original job's current state (completed, failed, or pending).",
        "properties": {
          "billing": {
            "$ref": "#/components/schemas/JobBilling"
          },
          "capability": {
            "enum": [
              "asda.product.detail.get"
            ],
            "type": "string"
          },
          "error": {},
          "idempotent_replay": {
            "const": true,
            "type": "boolean"
          },
          "job_id": {
            "format": "uuid",
            "type": "string"
          },
          "platform": {
            "enum": [
              "asda"
            ],
            "type": "string"
          },
          "request_id": {
            "format": "uuid",
            "type": "string"
          },
          "results": {},
          "state": {
            "enum": [
              "queued",
              "running",
              "retrying",
              "completed",
              "failed"
            ],
            "type": "string"
          },
          "stats": {},
          "success": {
            "type": "boolean"
          }
        },
        "required": [
          "job_id",
          "request_id",
          "platform",
          "capability",
          "state",
          "idempotent_replay"
        ],
        "type": "object"
      },
      "IdempotencyConflictError": {
        "additionalProperties": false,
        "properties": {
          "error": {
            "additionalProperties": false,
            "properties": {
              "code": {
                "const": "idempotency_conflict",
                "type": "string"
              },
              "message": {
                "const": "idempotency key has already been used for a different request",
                "type": "string"
              }
            },
            "required": [
              "code",
              "message"
            ],
            "type": "object"
          }
        },
        "required": [
          "error"
        ],
        "type": "object"
      },
      "InternalError": {
        "additionalProperties": false,
        "properties": {
          "error": {
            "additionalProperties": false,
            "properties": {
              "code": {
                "const": "internal_error",
                "type": "string"
              },
              "message": {
                "type": "string"
              }
            },
            "required": [
              "code",
              "message"
            ],
            "type": "object"
          }
        },
        "required": [
          "error"
        ],
        "type": "object"
      },
      "JobBilling": {
        "additionalProperties": false,
        "properties": {
          "credits_charged": {
            "anyOf": [
              {
                "description": "Actual credits charged. Null only when retained historical facts cannot establish the amount.",
                "minimum": 0,
                "type": "integer"
              },
              {
                "type": "null"
              }
            ]
          },
          "credits_per_unit": {
            "anyOf": [
              {
                "description": "Snapshotted price for one billed unit. Zero only for historical free work; null when unknown.",
                "minimum": 0,
                "type": "integer"
              },
              {
                "type": "null"
              }
            ]
          },
          "model": {
            "enum": [
              "per_request",
              "per_record",
              "free",
              "unknown"
            ],
            "type": "string"
          },
          "pricing": {
            "additionalProperties": false,
            "properties": {
              "rule_id": {
                "anyOf": [
                  {
                    "minLength": 1,
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "scope": {
                "anyOf": [
                  {
                    "enum": [
                      "module",
                      "platform",
                      "capability"
                    ],
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "source": {
                "enum": [
                  "manifest",
                  "price_book"
                ],
                "type": "string"
              },
              "version": {
                "anyOf": [
                  {
                    "minimum": 1,
                    "type": "integer"
                  },
                  {
                    "type": "null"
                  }
                ]
              }
            },
            "required": [
              "source",
              "scope",
              "version",
              "rule_id"
            ],
            "type": "object"
          },
          "units": {
            "anyOf": [
              {
                "description": "Billed units under the stated model. Null when units do not apply or cannot be established.",
                "minimum": 0,
                "type": "integer"
              },
              {
                "type": "null"
              }
            ]
          }
        },
        "required": [
          "model",
          "units",
          "credits_per_unit",
          "credits_charged",
          "pricing"
        ],
        "type": "object"
      },
      "JobErrorObject": {
        "additionalProperties": false,
        "properties": {
          "code": {
            "description": "Machine-readable error code (e.g. forbidden, not_found, invalid_input, upstream_timeout, upstream_error).",
            "type": "string"
          },
          "message": {
            "description": "Human-readable error description.",
            "type": "string"
          }
        },
        "required": [
          "code",
          "message"
        ],
        "type": "object"
      },
      "JobFailedResponse": {
        "additionalProperties": false,
        "properties": {
          "capability": {
            "enum": [
              "asda.product.detail.get"
            ],
            "type": "string"
          },
          "error": {
            "$ref": "#/components/schemas/JobErrorObject"
          },
          "job_id": {
            "format": "uuid",
            "type": "string"
          },
          "platform": {
            "enum": [
              "asda"
            ],
            "type": "string"
          },
          "request_id": {
            "format": "uuid",
            "type": "string"
          },
          "results": {
            "type": "null"
          },
          "state": {
            "const": "failed",
            "type": "string"
          },
          "stats": {
            "type": "null"
          },
          "success": {
            "const": false,
            "type": "boolean"
          }
        },
        "required": [
          "job_id",
          "request_id",
          "platform",
          "capability",
          "state",
          "success",
          "error",
          "results",
          "stats"
        ],
        "type": "object"
      },
      "JobPendingResponse": {
        "additionalProperties": false,
        "properties": {
          "capability": {
            "enum": [
              "asda.product.detail.get"
            ],
            "type": "string"
          },
          "job_id": {
            "format": "uuid",
            "type": "string"
          },
          "platform": {
            "enum": [
              "asda"
            ],
            "type": "string"
          },
          "request_id": {
            "format": "uuid",
            "type": "string"
          },
          "state": {
            "enum": [
              "queued",
              "running",
              "retrying"
            ],
            "type": "string"
          }
        },
        "required": [
          "job_id",
          "request_id",
          "platform",
          "capability",
          "state"
        ],
        "type": "object"
      },
      "JobStats": {
        "additionalProperties": false,
        "properties": {
          "duration_ms": {
            "anyOf": [
              {
                "minimum": 0,
                "type": "integer"
              },
              {
                "type": "null"
              }
            ]
          },
          "failed": {
            "const": 0,
            "type": "integer"
          },
          "passed": {
            "const": 1,
            "type": "integer"
          },
          "total": {
            "const": 1,
            "type": "integer"
          }
        },
        "required": [
          "total",
          "passed",
          "failed",
          "duration_ms"
        ],
        "type": "object"
      },
      "NotFoundError": {
        "additionalProperties": false,
        "properties": {
          "error": {
            "additionalProperties": false,
            "properties": {
              "code": {
                "const": "not_found",
                "type": "string"
              },
              "message": {
                "const": "job not found",
                "type": "string"
              }
            },
            "required": [
              "code",
              "message"
            ],
            "type": "object"
          }
        },
        "required": [
          "error"
        ],
        "type": "object"
      },
      "QuotaError": {
        "oneOf": [
          {
            "additionalProperties": false,
            "properties": {
              "error": {
                "additionalProperties": false,
                "properties": {
                  "code": {
                    "const": "account_inactive",
                    "type": "string"
                  },
                  "message": {
                    "const": "an active paid account is required",
                    "type": "string"
                  }
                },
                "required": [
                  "code",
                  "message"
                ],
                "type": "object"
              }
            },
            "required": [
              "error"
            ],
            "type": "object"
          },
          {
            "additionalProperties": false,
            "properties": {
              "error": {
                "additionalProperties": false,
                "properties": {
                  "code": {
                    "const": "quota_exhausted",
                    "type": "string"
                  },
                  "message": {
                    "const": "request quota exhausted for current billing period",
                    "type": "string"
                  }
                },
                "required": [
                  "code",
                  "message"
                ],
                "type": "object"
              }
            },
            "required": [
              "error"
            ],
            "type": "object"
          }
        ]
      },
      "RateLimitError": {
        "additionalProperties": false,
        "properties": {
          "error": {
            "additionalProperties": false,
            "properties": {
              "code": {
                "const": "rate_limited",
                "type": "string"
              },
              "message": {
                "const": "rate limit exceeded",
                "type": "string"
              },
              "retry_after_ms": {
                "description": "Milliseconds until the rolling window resets enough to retry. The `retry-after` response header carries the same value rounded up to seconds.",
                "minimum": 0,
                "type": "integer"
              }
            },
            "required": [
              "code",
              "message",
              "retry_after_ms"
            ],
            "type": "object"
          }
        },
        "required": [
          "error"
        ],
        "type": "object"
      },
      "UnauthorizedError": {
        "additionalProperties": false,
        "properties": {
          "error": {
            "additionalProperties": false,
            "properties": {
              "code": {
                "const": "unauthorized",
                "type": "string"
              },
              "message": {
                "enum": [
                  "authentication required",
                  "invalid bearer token",
                  "missing bearer token"
                ],
                "type": "string"
              }
            },
            "required": [
              "code",
              "message"
            ],
            "type": "object"
          }
        },
        "required": [
          "error"
        ],
        "type": "object"
      },
      "ValidationErrors": {
        "additionalProperties": false,
        "properties": {
          "errors": {
            "additionalProperties": {
              "items": {
                "type": "string"
              },
              "type": "array"
            },
            "type": "object"
          }
        },
        "required": [
          "errors"
        ],
        "type": "object"
      }
    },
    "securitySchemes": {
      "BearerAuth": {
        "bearerFormat": "API Key",
        "scheme": "bearer",
        "type": "http"
      }
    }
  },
  "info": {
    "description": "Scraper for Asda Groceries UK product search, category taxonomy, and product detail, backed by Asda's public Algolia catalog index.\nThis spec includes only the live `Asda` capabilities exposed by Upscrape.\nExecution uses the generic `POST /execute` endpoint and job polling uses `GET /jobs/{id}`.\nSupported capabilities: `asda.product.detail.get`\n## Rate limiting\n\nRequests are rate-limited per API key at **1200 requests per minute** on a rolling window. Every response includes `x-ratelimit-limit`, `x-ratelimit-remaining`, and `x-ratelimit-reset` (Unix ms) headers so clients can self-pace. When the limit is exceeded the API returns `429` with a `rate_limited` error body and a `retry-after` header in seconds plus a `retry_after_ms` field on the body for finer-grained backoff.",
    "title": "Asda API",
    "version": "v0.1.3"
  },
  "jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
  "openapi": "3.1.0",
  "paths": {
    "/execute": {
      "post": {
        "description": "All executions are asynchronous. Submit a capability-specific payload to `POST /execute`, then poll the returned `job_id`.",
        "operationId": "asda_execute",
        "parameters": [
          {
            "description": "Optional idempotency key. Reusing the same key with the same request replays the original job.",
            "in": "header",
            "name": "Idempotency-Key",
            "required": false,
            "schema": {
              "maxLength": 255,
              "type": "string"
            }
          },
          {
            "description": "Request synchronous completion. Use `wait=N` to hold the connection up to N seconds (max 300). If the job completes within the window, the response is `200` with full results (same shape as `GET /jobs/{id}`). If not, the response is the normal `202` with a `job_id` for polling. Omit this header for default asynchronous behavior.",
            "examples": {
              "wait30": {
                "summary": "Wait up to 30 seconds",
                "value": "wait=30"
              },
              "wait5": {
                "summary": "Wait up to 5 seconds",
                "value": "wait=5"
              }
            },
            "in": "header",
            "name": "Prefer",
            "required": false,
            "schema": {
              "example": "wait=30",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "example": {
                "capability": "asda.product.detail.get",
                "input": {
                  "id": "20504",
                  "store_id": "4565"
                }
              },
              "schema": {
                "$ref": "#/components/schemas/AsdaProductDetailGetExecuteRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/AsdaProductDetailGetCompletedJob"
                    },
                    {
                      "$ref": "#/components/schemas/ExecuteReplayResponse"
                    },
                    {
                      "$ref": "#/components/schemas/JobFailedResponse"
                    }
                  ]
                }
              }
            },
            "description": "Job completed within the `Prefer: wait` window, or existing job replayed via idempotency key.",
            "headers": {
              "Preference-Applied": {
                "description": "Present when the server honored the `Prefer: wait` preference.",
                "schema": {
                  "example": "wait=30",
                  "type": "string"
                }
              },
              "x-ratelimit-limit": {
                "description": "Per-API-key request ceiling over the rolling window.",
                "schema": {
                  "minimum": 0,
                  "type": "integer"
                }
              },
              "x-ratelimit-remaining": {
                "description": "Requests remaining in the current window before throttling.",
                "schema": {
                  "minimum": 0,
                  "type": "integer"
                }
              },
              "x-ratelimit-reset": {
                "description": "Unix epoch milliseconds at which the current window resets.",
                "schema": {
                  "minimum": 0,
                  "type": "integer"
                }
              }
            }
          },
          "202": {
            "content": {
              "application/json": {
                "example": {
                  "capability": "asda.product.detail.get",
                  "job_id": "00000000-0000-0000-0000-000000000001",
                  "platform": "asda",
                  "request_id": "00000000-0000-0000-0000-000000000001",
                  "state": "queued",
                  "success": false
                },
                "schema": {
                  "$ref": "#/components/schemas/ExecuteAcceptedResponse"
                }
              }
            },
            "description": "Job accepted and queued.",
            "headers": {
              "x-ratelimit-limit": {
                "description": "Per-API-key request ceiling over the rolling window.",
                "schema": {
                  "minimum": 0,
                  "type": "integer"
                }
              },
              "x-ratelimit-remaining": {
                "description": "Requests remaining in the current window before throttling.",
                "schema": {
                  "minimum": 0,
                  "type": "integer"
                }
              },
              "x-ratelimit-reset": {
                "description": "Unix epoch milliseconds at which the current window resets.",
                "schema": {
                  "minimum": 0,
                  "type": "integer"
                }
              }
            }
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/UnauthorizedError"
                }
              }
            },
            "description": "Unauthorized"
          },
          "402": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/QuotaError"
                }
              }
            },
            "description": "The authenticated account cannot execute the request."
          },
          "409": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/IdempotencyConflictError"
                }
              }
            },
            "description": "Idempotency conflict"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/ValidationErrors"
                    },
                    {
                      "$ref": "#/components/schemas/CredentialsRequiredError"
                    }
                  ]
                }
              }
            },
            "description": "The request body failed validation."
          },
          "429": {
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "code": "rate_limited",
                    "message": "rate limit exceeded",
                    "retry_after_ms": 4200
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/RateLimitError"
                }
              }
            },
            "description": "The per-API-key rate limit has been exceeded. Clients should back off until `retry_after_ms` has elapsed (or `retry-after` seconds).",
            "headers": {
              "retry-after": {
                "description": "Seconds until the client may retry (ceiling of `retry_after_ms`).",
                "schema": {
                  "minimum": 0,
                  "type": "integer"
                }
              },
              "x-ratelimit-limit": {
                "description": "Per-API-key request ceiling over the rolling window.",
                "schema": {
                  "minimum": 0,
                  "type": "integer"
                }
              },
              "x-ratelimit-remaining": {
                "description": "Requests remaining in the current window before throttling.",
                "schema": {
                  "minimum": 0,
                  "type": "integer"
                }
              },
              "x-ratelimit-reset": {
                "description": "Unix epoch milliseconds at which the current window resets.",
                "schema": {
                  "minimum": 0,
                  "type": "integer"
                }
              }
            }
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/InternalError"
                }
              }
            },
            "description": "Unexpected server error"
          }
        },
        "security": [
          {
            "BearerAuth": []
          }
        ],
        "summary": "Queue a Asda capability run",
        "tags": [
          "Execution"
        ]
      }
    },
    "/jobs/{id}": {
      "get": {
        "description": "Get job status and result",
        "operationId": "asda_getJob",
        "parameters": [
          {
            "description": "The job ID returned by `POST /execute`.",
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/AsdaProductDetailGetCompletedJob"
                    },
                    {
                      "$ref": "#/components/schemas/JobFailedResponse"
                    }
                  ]
                }
              }
            },
            "description": "Completed or terminal job state.",
            "headers": {
              "x-ratelimit-limit": {
                "description": "Per-API-key request ceiling over the rolling window.",
                "schema": {
                  "minimum": 0,
                  "type": "integer"
                }
              },
              "x-ratelimit-remaining": {
                "description": "Requests remaining in the current window before throttling.",
                "schema": {
                  "minimum": 0,
                  "type": "integer"
                }
              },
              "x-ratelimit-reset": {
                "description": "Unix epoch milliseconds at which the current window resets.",
                "schema": {
                  "minimum": 0,
                  "type": "integer"
                }
              }
            }
          },
          "202": {
            "content": {
              "application/json": {
                "example": {
                  "capability": "asda.product.detail.get",
                  "job_id": "00000000-0000-0000-0000-000000000001",
                  "platform": "asda",
                  "request_id": "00000000-0000-0000-0000-000000000001",
                  "state": "running",
                  "success": false
                },
                "schema": {
                  "$ref": "#/components/schemas/JobPendingResponse"
                }
              }
            },
            "description": "Job is still queued, running, or retrying.",
            "headers": {
              "x-ratelimit-limit": {
                "description": "Per-API-key request ceiling over the rolling window.",
                "schema": {
                  "minimum": 0,
                  "type": "integer"
                }
              },
              "x-ratelimit-remaining": {
                "description": "Requests remaining in the current window before throttling.",
                "schema": {
                  "minimum": 0,
                  "type": "integer"
                }
              },
              "x-ratelimit-reset": {
                "description": "Unix epoch milliseconds at which the current window resets.",
                "schema": {
                  "minimum": 0,
                  "type": "integer"
                }
              }
            }
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/UnauthorizedError"
                }
              }
            },
            "description": "Unauthorized"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/NotFoundError"
                }
              }
            },
            "description": "Job not found"
          },
          "429": {
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "code": "rate_limited",
                    "message": "rate limit exceeded",
                    "retry_after_ms": 4200
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/RateLimitError"
                }
              }
            },
            "description": "The per-API-key rate limit has been exceeded. Clients should back off until `retry_after_ms` has elapsed (or `retry-after` seconds).",
            "headers": {
              "retry-after": {
                "description": "Seconds until the client may retry (ceiling of `retry_after_ms`).",
                "schema": {
                  "minimum": 0,
                  "type": "integer"
                }
              },
              "x-ratelimit-limit": {
                "description": "Per-API-key request ceiling over the rolling window.",
                "schema": {
                  "minimum": 0,
                  "type": "integer"
                }
              },
              "x-ratelimit-remaining": {
                "description": "Requests remaining in the current window before throttling.",
                "schema": {
                  "minimum": 0,
                  "type": "integer"
                }
              },
              "x-ratelimit-reset": {
                "description": "Unix epoch milliseconds at which the current window resets.",
                "schema": {
                  "minimum": 0,
                  "type": "integer"
                }
              }
            }
          }
        },
        "security": [
          {
            "BearerAuth": []
          }
        ],
        "summary": "Poll a Asda job",
        "tags": [
          "Jobs"
        ]
      }
    },
    "/jobs/{id}/result": {
      "get": {
        "description": "Backward-compatible alias for `/jobs/{id}`.",
        "operationId": "asda_getJobResult",
        "parameters": [
          {
            "description": "The job ID returned by `POST /execute`.",
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/AsdaProductDetailGetCompletedJob"
                    },
                    {
                      "$ref": "#/components/schemas/JobFailedResponse"
                    }
                  ]
                }
              }
            },
            "description": "Completed or terminal job state.",
            "headers": {
              "x-ratelimit-limit": {
                "description": "Per-API-key request ceiling over the rolling window.",
                "schema": {
                  "minimum": 0,
                  "type": "integer"
                }
              },
              "x-ratelimit-remaining": {
                "description": "Requests remaining in the current window before throttling.",
                "schema": {
                  "minimum": 0,
                  "type": "integer"
                }
              },
              "x-ratelimit-reset": {
                "description": "Unix epoch milliseconds at which the current window resets.",
                "schema": {
                  "minimum": 0,
                  "type": "integer"
                }
              }
            }
          },
          "202": {
            "content": {
              "application/json": {
                "example": {
                  "capability": "asda.product.detail.get",
                  "job_id": "00000000-0000-0000-0000-000000000001",
                  "platform": "asda",
                  "request_id": "00000000-0000-0000-0000-000000000001",
                  "state": "running",
                  "success": false
                },
                "schema": {
                  "$ref": "#/components/schemas/JobPendingResponse"
                }
              }
            },
            "description": "Job is still queued, running, or retrying.",
            "headers": {
              "x-ratelimit-limit": {
                "description": "Per-API-key request ceiling over the rolling window.",
                "schema": {
                  "minimum": 0,
                  "type": "integer"
                }
              },
              "x-ratelimit-remaining": {
                "description": "Requests remaining in the current window before throttling.",
                "schema": {
                  "minimum": 0,
                  "type": "integer"
                }
              },
              "x-ratelimit-reset": {
                "description": "Unix epoch milliseconds at which the current window resets.",
                "schema": {
                  "minimum": 0,
                  "type": "integer"
                }
              }
            }
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/UnauthorizedError"
                }
              }
            },
            "description": "Unauthorized"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/NotFoundError"
                }
              }
            },
            "description": "Job not found"
          },
          "429": {
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "code": "rate_limited",
                    "message": "rate limit exceeded",
                    "retry_after_ms": 4200
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/RateLimitError"
                }
              }
            },
            "description": "The per-API-key rate limit has been exceeded. Clients should back off until `retry_after_ms` has elapsed (or `retry-after` seconds).",
            "headers": {
              "retry-after": {
                "description": "Seconds until the client may retry (ceiling of `retry_after_ms`).",
                "schema": {
                  "minimum": 0,
                  "type": "integer"
                }
              },
              "x-ratelimit-limit": {
                "description": "Per-API-key request ceiling over the rolling window.",
                "schema": {
                  "minimum": 0,
                  "type": "integer"
                }
              },
              "x-ratelimit-remaining": {
                "description": "Requests remaining in the current window before throttling.",
                "schema": {
                  "minimum": 0,
                  "type": "integer"
                }
              },
              "x-ratelimit-reset": {
                "description": "Unix epoch milliseconds at which the current window resets.",
                "schema": {
                  "minimum": 0,
                  "type": "integer"
                }
              }
            }
          }
        },
        "security": [
          {
            "BearerAuth": []
          }
        ],
        "summary": "Poll a Asda job",
        "tags": [
          "Jobs"
        ]
      }
    }
  },
  "servers": [
    {
      "url": "https://data.upscrape.com"
    }
  ],
  "tags": [
    {
      "description": "Submit asynchronous capability runs.",
      "name": "Execution"
    },
    {
      "description": "Poll queued jobs for status and results.",
      "name": "Jobs"
    }
  ]
}