{"openapi":"3.1.0","info":{"title":"Dotlas Data API","version":"1.0.0","description":"Public REST access to Dotlas restaurant-intelligence data. Authenticate every request with an organization API key: `Authorization: Bearer <key>`. Responses are scoped to the markets and brands your organization is entitled to."},"servers":[{"url":"/v1"}],"security":[{"apiKey":[]}],"components":{"securitySchemes":{"apiKey":{"type":"http","scheme":"bearer"}},"schemas":{"MarketsResponse":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"countryCode":{"type":"string"},"totalOutlets":{"type":"number"},"totalCities":{"type":"number"},"totalAreas":{"type":"number"},"totalBrands":{"type":"number"},"sources":{"type":"array","items":{"type":"string"}}},"required":["countryCode","totalOutlets","totalCities","totalAreas","totalBrands","sources"],"additionalProperties":false}}},"required":["data"],"additionalProperties":false},"BrandsResponse":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"brandSlug":{"type":"string"},"brandName":{"type":"string"},"cuisinesServed":{"anyOf":[{"type":"array","items":{"type":"string"}},{"type":"null"}]},"outletCount":{"anyOf":[{"type":"number"},{"type":"null"}]},"brandLogoUrl":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["brandSlug","brandName","cuisinesServed","outletCount","brandLogoUrl"],"additionalProperties":false}},"pageInfo":{"type":"object","properties":{"nextCursor":{"anyOf":[{"type":"string"},{"type":"null"}]},"hasMore":{"type":"boolean"}},"required":["nextCursor","hasMore"],"additionalProperties":false}},"required":["data","pageInfo"],"additionalProperties":false},"MenuItem":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"itemName":{"type":"string"},"sectionNames":{"type":"array","items":{"type":"string"}},"itemDescription":{"anyOf":[{"type":"string"},{"type":"null"}]},"itemImage":{"anyOf":[{"type":"string"},{"type":"null"}]},"isPopular":{"anyOf":[{"type":"boolean"},{"type":"null"}]},"minItemPrice":{"anyOf":[{"type":"number"},{"type":"null"}]},"maxItemPrice":{"anyOf":[{"type":"number"},{"type":"null"}]},"avgItemPrice":{"anyOf":[{"type":"number"},{"type":"null"}]},"isDiscounted":{"anyOf":[{"type":"boolean"},{"type":"null"}]},"itemAvailability":{"anyOf":[{"type":"number"},{"type":"null"}]},"lastAppearedAt":{"anyOf":[{"type":"string"},{"type":"null"}]},"sources":{"type":"object","propertyNames":{"type":"string","enum":["deliveroo","noon","talabat","careem","smiles","dtc","jahez","hungerstation","ninja","thechefz","snoonu","rafeeq","ahlan","elmenus","tmdone","glovo","wolt","yandex","talabatey","lezzoo","toters"]},"additionalProperties":{"type":"object","properties":{"minItemPrice":{"anyOf":[{"type":"number"},{"type":"null"}]},"maxItemPrice":{"anyOf":[{"type":"number"},{"type":"null"}]},"isDiscounted":{"anyOf":[{"type":"boolean"},{"type":"null"}]}},"required":["minItemPrice","maxItemPrice","isDiscounted"],"additionalProperties":false}}},"required":["itemName","sectionNames","itemDescription","itemImage","isPopular","minItemPrice","maxItemPrice","avgItemPrice","isDiscounted","itemAvailability","lastAppearedAt","sources"],"additionalProperties":false},"OutletsResponse":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"restaurantId":{"type":"string"},"city":{"anyOf":[{"type":"string"},{"type":"null"}]},"area":{"anyOf":[{"type":"string"},{"type":"null"}]},"address":{"anyOf":[{"type":"string"},{"type":"null"}]},"neighbourhoodId":{"anyOf":[{"type":"string"},{"type":"null"}]},"latitude":{"anyOf":[{"type":"number"},{"type":"null"}]},"longitude":{"anyOf":[{"type":"number"},{"type":"null"}]},"brandRank":{"anyOf":[{"type":"number"},{"type":"null"}]}},"required":["restaurantId","city","area","address","neighbourhoodId","latitude","longitude","brandRank"],"additionalProperties":false}},"pageInfo":{"type":"object","properties":{"nextCursor":{"anyOf":[{"type":"string"},{"type":"null"}]},"hasMore":{"type":"boolean"}},"required":["nextCursor","hasMore"],"additionalProperties":false}},"required":["data","pageInfo"],"additionalProperties":false},"PriceHistoryResponse":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"week":{"type":"string"},"modeOrganicPrice":{"anyOf":[{"type":"number"},{"type":"null"}]},"avgOrganicPrice":{"anyOf":[{"type":"number"},{"type":"null"}]},"minOrganicPrice":{"anyOf":[{"type":"number"},{"type":"null"}]},"maxOrganicPrice":{"anyOf":[{"type":"number"},{"type":"null"}]},"modeFinalPrice":{"anyOf":[{"type":"number"},{"type":"null"}]},"avgFinalPrice":{"anyOf":[{"type":"number"},{"type":"null"}]},"minFinalPrice":{"anyOf":[{"type":"number"},{"type":"null"}]},"maxFinalPrice":{"anyOf":[{"type":"number"},{"type":"null"}]}},"required":["week","modeOrganicPrice","avgOrganicPrice","minOrganicPrice","maxOrganicPrice","modeFinalPrice","avgFinalPrice","minFinalPrice","maxFinalPrice"],"additionalProperties":false}},"pageInfo":{"type":"object","properties":{"nextCursor":{"anyOf":[{"type":"string"},{"type":"null"}]},"hasMore":{"type":"boolean"}},"required":["nextCursor","hasMore"],"additionalProperties":false}},"required":["data","pageInfo"],"additionalProperties":false},"MenuSectionsResponse":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"activeSources":{"type":"array","items":{"type":"string"}},"totalItems":{"type":"object","properties":{"live":{"type":"number"},"all":{"type":"number"}},"required":["live","all"],"additionalProperties":false},"sections":{"type":"array","items":{"type":"object","properties":{"section":{"type":"string"},"sources":{"type":"array","items":{"type":"string"}},"itemCount":{"type":"object","properties":{"live":{"type":"number"},"all":{"type":"number"}},"required":["live","all"],"additionalProperties":false},"priceBand":{"anyOf":[{"type":"object","properties":{"min":{"type":"number"},"max":{"type":"number"}},"required":["min","max"],"additionalProperties":false},{"type":"null"}]},"discounts":{"type":"array","items":{"type":"object","properties":{"source":{"type":"string"},"pcts":{"type":"array","items":{"type":"number"}}},"required":["source","pcts"],"additionalProperties":false}},"rangeSources":{"type":"array","items":{"type":"string"}}},"required":["section","sources","itemCount","priceBand","discounts","rangeSources"],"additionalProperties":false}}},"required":["activeSources","totalItems","sections"],"additionalProperties":false},"SectionItemsResponse":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"section":{"type":"string"},"itemCount":{"type":"number"},"items":{"type":"array","items":{"type":"object","properties":{"brandItemNameId":{"type":"string"},"itemName":{"anyOf":[{"type":"string"},{"type":"null"}]},"itemDescription":{"anyOf":[{"type":"string"},{"type":"null"}]},"lastAppearedAt":{"anyOf":[{"type":"string"},{"type":"null"}]},"minItemPrice":{"anyOf":[{"type":"number"},{"type":"null"}]},"maxItemPrice":{"anyOf":[{"type":"number"},{"type":"null"}]},"isDiscounted":{"anyOf":[{"type":"boolean"},{"type":"null"}]}},"required":["brandItemNameId","itemName","itemDescription","lastAppearedAt","minItemPrice","maxItemPrice","isDiscounted"],"additionalProperties":false}}},"required":["section","itemCount","items"],"additionalProperties":false},"ItemSourcePricesResponse":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"brandItemNameId":{"type":"string"},"itemName":{"anyOf":[{"type":"string"},{"type":"null"}]},"outlets":{"type":"array","items":{"type":"object","properties":{"restaurantId":{"type":"string"},"city":{"anyOf":[{"type":"string"},{"type":"null"}]},"area":{"anyOf":[{"type":"string"},{"type":"null"}]},"neighbourhoodId":{"anyOf":[{"type":"string"},{"type":"null"}]},"isVirtualOutlet":{"anyOf":[{"type":"boolean"},{"type":"null"}]},"sources":{"type":"array","items":{"type":"object","properties":{"source":{"type":"string"},"minItemPrice":{"anyOf":[{"type":"number"},{"type":"null"}]},"maxItemPrice":{"anyOf":[{"type":"number"},{"type":"null"}]},"isDiscounted":{"anyOf":[{"type":"boolean"},{"type":"null"}]},"isPriceRange":{"anyOf":[{"type":"boolean"},{"type":"null"}]},"lastAppearedAt":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["source","minItemPrice","maxItemPrice","isDiscounted","isPriceRange","lastAppearedAt"],"additionalProperties":false}}},"required":["restaurantId","city","area","neighbourhoodId","isVirtualOutlet","sources"],"additionalProperties":false}}},"required":["brandItemNameId","itemName","outlets"],"additionalProperties":false},"ItemMenuEventsResponse":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"eventDate":{"type":"string"},"eventType":{"type":"string"},"eventSubtype":{"anyOf":[{"type":"string"},{"type":"null"}]},"itemPrice":{"anyOf":[{"type":"number"},{"type":"null"}]},"prevItemPrice":{"anyOf":[{"type":"number"},{"type":"null"}]},"itemPriceDiscounted":{"anyOf":[{"type":"number"},{"type":"null"}]},"prevItemPriceDiscounted":{"anyOf":[{"type":"number"},{"type":"null"}]},"eventSources":{"type":"array","items":{"type":"string"}},"eventOutletCount":{"anyOf":[{"type":"number"},{"type":"null"}]}},"required":["eventDate","eventType","eventSubtype","itemPrice","prevItemPrice","itemPriceDiscounted","prevItemPriceDiscounted","eventSources","eventOutletCount"],"additionalProperties":false}},"pageInfo":{"type":"object","properties":{"nextCursor":{"anyOf":[{"type":"string"},{"type":"null"}]},"hasMore":{"type":"boolean"}},"required":["nextCursor","hasMore"],"additionalProperties":false}},"required":["data","pageInfo"],"additionalProperties":false},"SearchRankingResponse":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"source":{"anyOf":[{"type":"string"},{"type":"null"}]},"date":{"type":"string"},"rank":{"anyOf":[{"type":"number"},{"type":"null"}]},"sponsored":{"type":"boolean"},"city":{"anyOf":[{"type":"string"},{"type":"null"}]},"neighbourhood":{"anyOf":[{"type":"string"},{"type":"null"}]},"neighbourhoodId":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["source","date","rank","sponsored","city","neighbourhood","neighbourhoodId"],"additionalProperties":false}},"pageInfo":{"type":"object","properties":{"nextCursor":{"anyOf":[{"type":"string"},{"type":"null"}]},"hasMore":{"type":"boolean"}},"required":["nextCursor","hasMore"],"additionalProperties":false}},"required":["data","pageInfo"],"additionalProperties":false},"SearchQueriesResponse":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"searchQuery":{"anyOf":[{"type":"string"},{"type":"null"}]},"searchQueryType":{"anyOf":[{"type":"string"},{"type":"null"}]},"searchMode":{"anyOf":[{"type":"string","enum":["free_text","native"]},{"type":"null"}]}},"required":["searchQuery","searchQueryType","searchMode"],"additionalProperties":false}},"pageInfo":{"type":"object","properties":{"nextCursor":{"anyOf":[{"type":"string"},{"type":"null"}]},"hasMore":{"type":"boolean"}},"required":["nextCursor","hasMore"],"additionalProperties":false}},"required":["data","pageInfo"],"additionalProperties":false},"DeliveryPerformanceResponse":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"source":{"anyOf":[{"type":"string"},{"type":"null"}]},"city":{"anyOf":[{"type":"string"},{"type":"null"}]},"neighbourhood":{"anyOf":[{"type":"string"},{"type":"null"}]},"avgDeliveryTime":{"anyOf":[{"type":"number"},{"type":"null"}]},"avgDeliveryFee":{"anyOf":[{"type":"number"},{"type":"null"}]},"avgDistanceKm":{"anyOf":[{"type":"number"},{"type":"null"}]}},"required":["source","city","neighbourhood","avgDeliveryTime","avgDeliveryFee","avgDistanceKm"],"additionalProperties":false}}},"required":["data"],"additionalProperties":false},"NearbyOutletsResponse":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"restaurantId":{"type":"string"},"brandSlug":{"type":"string"},"city":{"anyOf":[{"type":"string"},{"type":"null"}]},"area":{"anyOf":[{"type":"string"},{"type":"null"}]},"neighbourhoodId":{"anyOf":[{"type":"string"},{"type":"null"}]},"latitude":{"anyOf":[{"type":"number"},{"type":"null"}]},"longitude":{"anyOf":[{"type":"number"},{"type":"null"}]},"distanceKm":{"anyOf":[{"type":"number"},{"type":"null"}]}},"required":["restaurantId","brandSlug","city","area","neighbourhoodId","latitude","longitude","distanceKm"],"additionalProperties":false}},"pageInfo":{"type":"object","properties":{"nextCursor":{"anyOf":[{"type":"string"},{"type":"null"}]},"hasMore":{"type":"boolean"}},"required":["nextCursor","hasMore"],"additionalProperties":false}},"required":["data","pageInfo"],"additionalProperties":false},"NeighbourhoodsResponse":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"anyOf":[{"type":"string"},{"type":"null"}]},"city":{"anyOf":[{"type":"string"},{"type":"null"}]},"geojson":{}},"required":["id","name","city","geojson"],"additionalProperties":false}},"pageInfo":{"type":"object","properties":{"nextCursor":{"anyOf":[{"type":"string"},{"type":"null"}]},"hasMore":{"type":"boolean"}},"required":["nextCursor","hasMore"],"additionalProperties":false}},"required":["data","pageInfo"],"additionalProperties":false},"CompetitorsResponse":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"brandSlug":{"type":"string"},"brandName":{"anyOf":[{"type":"string"},{"type":"null"}]},"outletCount":{"anyOf":[{"type":"number"},{"type":"null"}]},"cities":{"type":"array","items":{"type":"string"}},"sources":{"type":"array","items":{"type":"string"}},"cuisinesServed":{"type":"array","items":{"type":"string"}}},"required":["brandSlug","brandName","outletCount","cities","sources","cuisinesServed"],"additionalProperties":false}},"pageInfo":{"type":"object","properties":{"nextCursor":{"anyOf":[{"type":"string"},{"type":"null"}]},"hasMore":{"type":"boolean"}},"required":["nextCursor","hasMore"],"additionalProperties":false}},"required":["data","pageInfo"],"additionalProperties":false},"PromotionsResponse":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["discount","campaign"]},"eventDate":{"type":"string"},"title":{"anyOf":[{"type":"string"},{"type":"null"}]},"isLive":{"anyOf":[{"type":"boolean"},{"type":"null"}]},"daysLive":{"anyOf":[{"type":"number"},{"type":"null"}]},"launchDate":{"anyOf":[{"type":"string"},{"type":"null"}]},"deactivationDate":{"anyOf":[{"type":"string"},{"type":"null"}]},"channels":{"type":"array","items":{"type":"string"}},"prevalenceRatio":{"anyOf":[{"type":"number"},{"type":"null"}]},"ctaUrl":{"anyOf":[{"type":"string"},{"type":"null"}]},"details":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["type","eventDate","title","isLive","daysLive","launchDate","deactivationDate","channels","prevalenceRatio","ctaUrl","details"],"additionalProperties":false}},"pageInfo":{"type":"object","properties":{"nextCursor":{"anyOf":[{"type":"string"},{"type":"null"}]},"hasMore":{"type":"boolean"}},"required":["nextCursor","hasMore"],"additionalProperties":false}},"required":["data","pageInfo"],"additionalProperties":false},"OutletsFeedResponse":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"eventType":{"type":"string"},"eventDate":{"type":"string"},"city":{"anyOf":[{"type":"string"},{"type":"null"}]},"area":{"anyOf":[{"type":"string"},{"type":"null"}]},"address":{"anyOf":[{"type":"string"},{"type":"null"}]},"latitude":{"anyOf":[{"type":"number"},{"type":"null"}]},"longitude":{"anyOf":[{"type":"number"},{"type":"null"}]},"eventSources":{"type":"array","items":{"type":"string"}}},"required":["eventType","eventDate","city","area","address","latitude","longitude","eventSources"],"additionalProperties":false}},"pageInfo":{"type":"object","properties":{"nextCursor":{"anyOf":[{"type":"string"},{"type":"null"}]},"hasMore":{"type":"boolean"}},"required":["nextCursor","hasMore"],"additionalProperties":false}},"required":["data","pageInfo"],"additionalProperties":false},"SocialMediaResponse":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"eventType":{"type":"string"},"eventDate":{"type":"string"},"caption":{"anyOf":[{"type":"string"},{"type":"null"}]},"likeCount":{"anyOf":[{"type":"number"},{"type":"null"}]},"commentCount":{"anyOf":[{"type":"number"},{"type":"null"}]},"location":{"anyOf":[{"type":"string"},{"type":"null"}]},"url":{"anyOf":[{"type":"string"},{"type":"null"}]},"mediaUrl":{"anyOf":[{"type":"string"},{"type":"null"}]},"isPinned":{"anyOf":[{"type":"boolean"},{"type":"null"}]}},"required":["eventType","eventDate","caption","likeCount","commentCount","location","url","mediaUrl","isPinned"],"additionalProperties":false}},"pageInfo":{"type":"object","properties":{"nextCursor":{"anyOf":[{"type":"string"},{"type":"null"}]},"hasMore":{"type":"boolean"}},"required":["nextCursor","hasMore"],"additionalProperties":false}},"required":["data","pageInfo"],"additionalProperties":false},"RecentEventsResponse":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"brandItemNameId":{"type":"string"},"itemName":{"anyOf":[{"type":"string"},{"type":"null"}]},"eventCount":{"type":"number"},"latestEventDate":{"anyOf":[{"type":"string"},{"type":"null"}]},"eventTypes":{"type":"array","items":{"type":"string"}}},"required":["brandItemNameId","itemName","eventCount","latestEventDate","eventTypes"],"additionalProperties":false}},"pageInfo":{"type":"object","properties":{"nextCursor":{"anyOf":[{"type":"string"},{"type":"null"}]},"hasMore":{"type":"boolean"}},"required":["nextCursor","hasMore"],"additionalProperties":false}},"required":["data","pageInfo"],"additionalProperties":false},"CuisinesResponse":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"cuisine":{"type":"string"},"brandCount":{"type":"number"}},"required":["cuisine","brandCount"],"additionalProperties":false}}},"required":["data"],"additionalProperties":false},"MenuEventTypesResponse":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"eventType":{"type":"string"},"count":{"type":"number"},"latestDate":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["eventType","count","latestDate"],"additionalProperties":false}}},"required":["data"],"additionalProperties":false}}},"paths":{"/markets":{"get":{"summary":"List markets","description":"Returns the markets (countries) your organization can query, each with a coverage snapshot: how many outlets, cities, areas, and brands are tracked, plus the delivery sources that are active. Start here to see which country codes your key accepts.","operationId":"listMarkets","parameters":[],"responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MarketsResponse"}}}},"400":{"description":"Invalid request parameters."},"401":{"description":"Missing or invalid API key."},"403":{"description":"API access not enabled, or the country/brand is not permitted for this organization."},"404":{"description":"Resource not found."},"429":{"description":"Rate limit exceeded."}}}},"/brands":{"get":{"summary":"Search brands","description":"Finds brands in a market by name or cuisine, ranked by outlet count. Use it to look up a brand's slug, which every brand-scoped endpoint needs. Results are limited to the brands your organization is entitled to.","operationId":"searchBrands","parameters":[{"name":"countryCode","in":"query","required":true,"schema":{"type":"string","enum":["ae","sa","kw","qa","bh","eg","jo","om","ma","kz","iq"]}},{"name":"query","in":"query","required":false,"schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","minimum":1}}],"responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BrandsResponse"}}}},"400":{"description":"Invalid request parameters."},"401":{"description":"Missing or invalid API key."},"403":{"description":"API access not enabled, or the country/brand is not permitted for this organization."},"404":{"description":"Resource not found."},"429":{"description":"Rate limit exceeded."}}}},"/brands/{brandSlug}/menu":{"get":{"summary":"Get brand menu","description":"Returns every menu item for a brand in a market, with per-source pricing and availability. This is the full item list. For a higher-level view of categories and price bands, use the menu sections endpoint instead.","operationId":"getBrandMenu","parameters":[{"name":"brandSlug","in":"path","required":true,"schema":{"type":"string"}},{"name":"countryCode","in":"query","required":true,"schema":{"type":"string","enum":["ae","sa","kw","qa","bh","eg","jo","om","ma","kz","iq"]}}],"responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/MenuItem"}}}}},"400":{"description":"Invalid request parameters."},"401":{"description":"Missing or invalid API key."},"403":{"description":"API access not enabled, or the country/brand is not permitted for this organization."},"404":{"description":"Resource not found."},"429":{"description":"Rate limit exceeded."}}}},"/brands/{brandSlug}/outlets":{"get":{"summary":"List brand outlets","description":"Lists a brand's active outlets in a market with their location (city, area, coordinates) and in-brand rank. Cursor-paginated for brands with many outlets.","operationId":"listBrandOutlets","parameters":[{"name":"brandSlug","in":"path","required":true,"schema":{"type":"string"}},{"name":"countryCode","in":"query","required":true,"schema":{"type":"string","enum":["ae","sa","kw","qa","bh","eg","jo","om","ma","kz","iq"]}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","minimum":1}},{"name":"cursor","in":"query","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OutletsResponse"}}}},"400":{"description":"Invalid request parameters."},"401":{"description":"Missing or invalid API key."},"403":{"description":"API access not enabled, or the country/brand is not permitted for this organization."},"404":{"description":"Resource not found."},"429":{"description":"Rate limit exceeded."}}}},"/brands/{brandSlug}/items/{itemId}/price-history":{"get":{"summary":"Get item price history","description":"Returns the weekly price timeline for a single menu item: the organic and final (post-discount) price as mode, average, min, and max per week. Use it to track how an item's price moved over time. Pass from and to to bound the window.","operationId":"getItemPriceHistory","parameters":[{"name":"brandSlug","in":"path","required":true,"schema":{"type":"string"}},{"name":"itemId","in":"path","required":true,"schema":{"type":"string"}},{"name":"countryCode","in":"query","required":true,"schema":{"type":"string","enum":["ae","sa","kw","qa","bh","eg","jo","om","ma","kz","iq"]}},{"name":"from","in":"query","required":false,"schema":{"type":"string","format":"date-time"}},{"name":"to","in":"query","required":false,"schema":{"type":"string","format":"date-time"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","minimum":1}},{"name":"cursor","in":"query","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PriceHistoryResponse"}}}},"400":{"description":"Invalid request parameters."},"401":{"description":"Missing or invalid API key."},"403":{"description":"API access not enabled, or the country/brand is not permitted for this organization."},"404":{"description":"Resource not found."},"429":{"description":"Rate limit exceeded."}}}},"/brands/{brandSlug}/menu/sections":{"get":{"summary":"Get menu sections","description":"Summarizes a brand's menu by category: how many items each section has, its price band, which sources carry it, and where it is discounted. This is the shape-of-the-menu overview. Use the section items endpoint to list the items inside one section.","operationId":"getMenuSections","parameters":[{"name":"brandSlug","in":"path","required":true,"schema":{"type":"string"}},{"name":"countryCode","in":"query","required":true,"schema":{"type":"string","enum":["ae","sa","kw","qa","bh","eg","jo","om","ma","kz","iq"]}},{"name":"status","in":"query","required":false,"schema":{"type":"string","enum":["live","retired","all"]}},{"name":"city","in":"query","required":false,"schema":{"type":"string"}},{"name":"area","in":"query","required":false,"schema":{"type":"string"}},{"name":"neighbourhoodId","in":"query","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MenuSectionsResponse"}}}},"400":{"description":"Invalid request parameters."},"401":{"description":"Missing or invalid API key."},"403":{"description":"API access not enabled, or the country/brand is not permitted for this organization."},"404":{"description":"Resource not found."},"429":{"description":"Rate limit exceeded."}}}},"/brands/{brandSlug}/menu/sections/{section}/items":{"get":{"summary":"List items in a section","description":"Lists the individual items within one menu section, with pricing and availability folded across the brand's outlets. Take the section name from the menu sections endpoint.","operationId":"getSectionItems","parameters":[{"name":"brandSlug","in":"path","required":true,"schema":{"type":"string"}},{"name":"section","in":"path","required":true,"schema":{"type":"string"}},{"name":"countryCode","in":"query","required":true,"schema":{"type":"string","enum":["ae","sa","kw","qa","bh","eg","jo","om","ma","kz","iq"]}},{"name":"status","in":"query","required":false,"schema":{"type":"string","enum":["live","retired","all"]}},{"name":"city","in":"query","required":false,"schema":{"type":"string"}},{"name":"area","in":"query","required":false,"schema":{"type":"string"}},{"name":"neighbourhoodId","in":"query","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SectionItemsResponse"}}}},"400":{"description":"Invalid request parameters."},"401":{"description":"Missing or invalid API key."},"403":{"description":"API access not enabled, or the country/brand is not permitted for this organization."},"404":{"description":"Resource not found."},"429":{"description":"Rate limit exceeded."}}}},"/brands/{brandSlug}/items/{itemId}/source-prices":{"get":{"summary":"Get item prices by outlet","description":"Returns one row per outlet that currently carries a menu item, with that outlet's per-source prices. Use it to see how a single item is priced across a brand's locations.","operationId":"getItemSourcePrices","parameters":[{"name":"brandSlug","in":"path","required":true,"schema":{"type":"string"}},{"name":"itemId","in":"path","required":true,"schema":{"type":"string"}},{"name":"countryCode","in":"query","required":true,"schema":{"type":"string","enum":["ae","sa","kw","qa","bh","eg","jo","om","ma","kz","iq"]}}],"responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ItemSourcePricesResponse"}}}},"400":{"description":"Invalid request parameters."},"401":{"description":"Missing or invalid API key."},"403":{"description":"API access not enabled, or the country/brand is not permitted for this organization."},"404":{"description":"Resource not found."},"429":{"description":"Rate limit exceeded."}}}},"/brands/{brandSlug}/items/{itemId}/events":{"get":{"summary":"Get item menu events","description":"Returns a single item's menu-change timeline (added, removed, repriced, discounted), newest first. Defaults to the last month. Pass from and to to widen the window.","operationId":"getItemMenuEvents","parameters":[{"name":"brandSlug","in":"path","required":true,"schema":{"type":"string"}},{"name":"itemId","in":"path","required":true,"schema":{"type":"string"}},{"name":"countryCode","in":"query","required":true,"schema":{"type":"string","enum":["ae","sa","kw","qa","bh","eg","jo","om","ma","kz","iq"]}},{"name":"from","in":"query","required":false,"schema":{"type":"string","format":"date-time"}},{"name":"to","in":"query","required":false,"schema":{"type":"string","format":"date-time"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","minimum":1}},{"name":"cursor","in":"query","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ItemMenuEventsResponse"}}}},"400":{"description":"Invalid request parameters."},"401":{"description":"Missing or invalid API key."},"403":{"description":"API access not enabled, or the country/brand is not permitted for this organization."},"404":{"description":"Resource not found."},"429":{"description":"Rate limit exceeded."}}}},"/brands/{brandSlug}/search-ranking":{"get":{"summary":"Get search ranking","description":"Returns how a brand ranks in delivery-app search over time for a term, as a daily timeline of median position per source, flagging where the placement was sponsored. Scope it to a neighbourhood, or a city plus neighbourhood, to read local visibility. For the default view (the ranking with no query typed), pass searchQueryType=default and omit searchQuery.","operationId":"getBrandSearchRanking","parameters":[{"name":"brandSlug","in":"path","required":true,"schema":{"type":"string"}},{"name":"countryCode","in":"query","required":true,"schema":{"type":"string","enum":["ae","sa","kw","qa","bh","eg","jo","om","ma","kz","iq"]}},{"name":"searchQuery","in":"query","required":false,"description":"The term to chart. Omit for the default view (searchQueryType=default).","schema":{"type":"string"}},{"name":"city","in":"query","required":false,"schema":{"type":"string"}},{"name":"neighbourhood","in":"query","required":false,"schema":{"type":"string"}},{"name":"neighbourhoodId","in":"query","required":false,"schema":{"type":"string"}},{"name":"source","in":"query","required":false,"schema":{"type":"string"}},{"name":"searchQueryType","in":"query","required":false,"description":"Narrow to one type. Use 'default' for the no-query default view.","schema":{"type":"string","enum":["cuisine","dish","brand","default"]}},{"name":"searchMode","in":"query","required":false,"description":"How the ranking was measured: 'free_text' (a typed search) or 'native' (the source's own category). Ignored for the default view.","schema":{"type":"string","enum":["free_text","native"]}},{"name":"from","in":"query","required":false,"schema":{"type":"string","format":"date"}},{"name":"to","in":"query","required":false,"schema":{"type":"string","format":"date"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","minimum":1}},{"name":"cursor","in":"query","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SearchRankingResponse"}}}},"400":{"description":"Invalid request parameters."},"401":{"description":"Missing or invalid API key."},"403":{"description":"API access not enabled, or the country/brand is not permitted for this organization."},"404":{"description":"Resource not found."},"429":{"description":"Rate limit exceeded."}}}},"/brands/{brandSlug}/search-queries":{"get":{"summary":"List search queries","description":"Lists the distinct search terms tracked in the brand's market, so you can see what customers type when looking for food. Optionally filter by source.","operationId":"listBrandSearchQueries","parameters":[{"name":"brandSlug","in":"path","required":true,"schema":{"type":"string"}},{"name":"countryCode","in":"query","required":true,"schema":{"type":"string","enum":["ae","sa","kw","qa","bh","eg","jo","om","ma","kz","iq"]}},{"name":"source","in":"query","required":false,"schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","minimum":1}},{"name":"cursor","in":"query","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SearchQueriesResponse"}}}},"400":{"description":"Invalid request parameters."},"401":{"description":"Missing or invalid API key."},"403":{"description":"API access not enabled, or the country/brand is not permitted for this organization."},"404":{"description":"Resource not found."},"429":{"description":"Rate limit exceeded."}}}},"/brands/{brandSlug}/delivery-performance":{"get":{"summary":"Get delivery performance","description":"Returns delivery performance for a brand's outlets: average delivery time, fee, and distance, grouped by source. Narrow it to a city, area, or neighbourhood with the scope parameters.","operationId":"getBrandDeliveryPerformance","parameters":[{"name":"brandSlug","in":"path","required":true,"schema":{"type":"string"}},{"name":"countryCode","in":"query","required":true,"schema":{"type":"string","enum":["ae","sa","kw","qa","bh","eg","jo","om","ma","kz","iq"]}},{"name":"source","in":"query","required":false,"schema":{"type":"string"}},{"name":"city","in":"query","required":false,"schema":{"type":"string"}},{"name":"area","in":"query","required":false,"schema":{"type":"string"}},{"name":"neighbourhoodId","in":"query","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeliveryPerformanceResponse"}}}},"400":{"description":"Invalid request parameters."},"401":{"description":"Missing or invalid API key."},"403":{"description":"API access not enabled, or the country/brand is not permitted for this organization."},"404":{"description":"Resource not found."},"429":{"description":"Rate limit exceeded."}}}},"/brands/{brandSlug}/outlets/nearby":{"get":{"summary":"List nearby outlets","description":"Returns a brand's outlets within a radius of a point, nearest first. Pass the point as lat and lng, and an optional radius in kilometres (capped at 5). Useful for proximity and coverage analysis around a location.","operationId":"listNearbyOutlets","parameters":[{"name":"brandSlug","in":"path","required":true,"schema":{"type":"string"}},{"name":"countryCode","in":"query","required":true,"schema":{"type":"string","enum":["ae","sa","kw","qa","bh","eg","jo","om","ma","kz","iq"]}},{"name":"lat","in":"query","required":true,"schema":{"type":"number"}},{"name":"lng","in":"query","required":true,"schema":{"type":"number"}},{"name":"radius","in":"query","required":false,"schema":{"type":"number","minimum":0,"maximum":5}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","minimum":1}},{"name":"cursor","in":"query","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NearbyOutletsResponse"}}}},"400":{"description":"Invalid request parameters."},"401":{"description":"Missing or invalid API key."},"403":{"description":"API access not enabled, or the country/brand is not permitted for this organization."},"404":{"description":"Resource not found."},"429":{"description":"Rate limit exceeded."}}}},"/markets/{countryCode}/neighbourhoods":{"get":{"summary":"List neighbourhoods","description":"Returns the mapped neighbourhoods of a market, each with its city and boundary polygon. These neighbourhood ids are the geographic scope other endpoints accept.","operationId":"listNeighbourhoods","parameters":[{"name":"countryCode","in":"path","required":true,"schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","minimum":1}},{"name":"cursor","in":"query","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NeighbourhoodsResponse"}}}},"400":{"description":"Invalid request parameters."},"401":{"description":"Missing or invalid API key."},"403":{"description":"API access not enabled, or the country/brand is not permitted for this organization."},"404":{"description":"Resource not found."},"429":{"description":"Rate limit exceeded."}}}},"/brands/{brandSlug}/competitors":{"get":{"summary":"List competitors","description":"Suggests competitor brands for a brand in a market, ranked by how closely their footprints and menus overlap. It returns other brands, so it is not limited to your entitled set the way brand-scoped reads are.","operationId":"listBrandCompetitors","parameters":[{"name":"brandSlug","in":"path","required":true,"schema":{"type":"string"}},{"name":"countryCode","in":"query","required":true,"schema":{"type":"string","enum":["ae","sa","kw","qa","bh","eg","jo","om","ma","kz","iq"]}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","minimum":1}},{"name":"cursor","in":"query","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CompetitorsResponse"}}}},"400":{"description":"Invalid request parameters."},"401":{"description":"Missing or invalid API key."},"403":{"description":"API access not enabled, or the country/brand is not permitted for this organization."},"404":{"description":"Resource not found."},"429":{"description":"Rate limit exceeded."}}}},"/brands/{brandSlug}/promotions":{"get":{"summary":"List promotions","description":"Returns a brand's promotions and ad campaigns seen across delivery sources as one timeline, newest first. Filter by type (discount or campaign) or a date window.","operationId":"listBrandPromotions","parameters":[{"name":"brandSlug","in":"path","required":true,"schema":{"type":"string"}},{"name":"countryCode","in":"query","required":true,"schema":{"type":"string","enum":["ae","sa","kw","qa","bh","eg","jo","om","ma","kz","iq"]}},{"name":"type","in":"query","required":false,"schema":{"type":"string","enum":["discount","campaign","all"]}},{"name":"from","in":"query","required":false,"schema":{"type":"string","format":"date-time"}},{"name":"to","in":"query","required":false,"schema":{"type":"string","format":"date-time"}},{"name":"restaurantId","in":"query","required":false,"schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","minimum":1}},{"name":"cursor","in":"query","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PromotionsResponse"}}}},"400":{"description":"Invalid request parameters."},"401":{"description":"Missing or invalid API key."},"403":{"description":"API access not enabled, or the country/brand is not permitted for this organization."},"404":{"description":"Resource not found."},"429":{"description":"Rate limit exceeded."}}}},"/brands/{brandSlug}/outlets-feed":{"get":{"summary":"List outlet events","description":"Returns a brand's outlet open and close events over time: when locations went live or stopped operating on each source. Defaults to the last 90 days.","operationId":"listBrandOutletEvents","parameters":[{"name":"brandSlug","in":"path","required":true,"schema":{"type":"string"}},{"name":"countryCode","in":"query","required":true,"schema":{"type":"string","enum":["ae","sa","kw","qa","bh","eg","jo","om","ma","kz","iq"]}},{"name":"from","in":"query","required":false,"schema":{"type":"string","format":"date-time"}},{"name":"to","in":"query","required":false,"schema":{"type":"string","format":"date-time"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","minimum":1}},{"name":"cursor","in":"query","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OutletsFeedResponse"}}}},"400":{"description":"Invalid request parameters."},"401":{"description":"Missing or invalid API key."},"403":{"description":"API access not enabled, or the country/brand is not permitted for this organization."},"404":{"description":"Resource not found."},"429":{"description":"Rate limit exceeded."}}}},"/brands/{brandSlug}/social-media":{"get":{"summary":"List social posts","description":"Returns a brand's recent social-media posts across tracked platforms, newest first, over a recent window.","operationId":"listBrandSocialMedia","parameters":[{"name":"brandSlug","in":"path","required":true,"schema":{"type":"string"}},{"name":"countryCode","in":"query","required":true,"schema":{"type":"string","enum":["ae","sa","kw","qa","bh","eg","jo","om","ma","kz","iq"]}},{"name":"from","in":"query","required":false,"schema":{"type":"string","format":"date-time"}},{"name":"to","in":"query","required":false,"schema":{"type":"string","format":"date-time"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","minimum":1}},{"name":"cursor","in":"query","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SocialMediaResponse"}}}},"400":{"description":"Invalid request parameters."},"401":{"description":"Missing or invalid API key."},"403":{"description":"API access not enabled, or the country/brand is not permitted for this organization."},"404":{"description":"Resource not found."},"429":{"description":"Rate limit exceeded."}}}},"/brands/{brandSlug}/items/recent-events":{"get":{"summary":"List items with recent changes","description":"Lists the brand items that changed recently (added, removed, repriced, or discounted), so you can spot what moved without scanning every item. Defaults to the last month.","operationId":"listBrandItemsWithRecentEvents","parameters":[{"name":"brandSlug","in":"path","required":true,"schema":{"type":"string"}},{"name":"countryCode","in":"query","required":true,"schema":{"type":"string","enum":["ae","sa","kw","qa","bh","eg","jo","om","ma","kz","iq"]}},{"name":"from","in":"query","required":false,"schema":{"type":"string","format":"date-time"}},{"name":"to","in":"query","required":false,"schema":{"type":"string","format":"date-time"}},{"name":"eventType","in":"query","required":false,"schema":{"type":"string"}},{"name":"restaurantId","in":"query","required":false,"schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","minimum":1}},{"name":"cursor","in":"query","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RecentEventsResponse"}}}},"400":{"description":"Invalid request parameters."},"401":{"description":"Missing or invalid API key."},"403":{"description":"API access not enabled, or the country/brand is not permitted for this organization."},"404":{"description":"Resource not found."},"429":{"description":"Rate limit exceeded."}}}},"/markets/{countryCode}/cuisines":{"get":{"summary":"List cuisines","description":"Returns the cuisines present in a market with how many brands serve each, so you can gauge the competitive mix. Scoped to the brands your organization is entitled to.","operationId":"listMarketCuisines","parameters":[{"name":"countryCode","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CuisinesResponse"}}}},"400":{"description":"Invalid request parameters."},"401":{"description":"Missing or invalid API key."},"403":{"description":"API access not enabled, or the country/brand is not permitted for this organization."},"404":{"description":"Resource not found."},"429":{"description":"Rate limit exceeded."}}}},"/menu-event-types":{"get":{"summary":"List menu event types","description":"Returns the catalogue of menu-change event types for a brand in a market, with how many of each occurred and the most recent date. Use it to understand the vocabulary the item-events endpoint reports.","operationId":"listMenuEventTypes","parameters":[{"name":"countryCode","in":"query","required":true,"schema":{"type":"string","enum":["ae","sa","kw","qa","bh","eg","jo","om","ma","kz","iq"]}},{"name":"brandSlug","in":"query","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MenuEventTypesResponse"}}}},"400":{"description":"Invalid request parameters."},"401":{"description":"Missing or invalid API key."},"403":{"description":"API access not enabled, or the country/brand is not permitted for this organization."},"404":{"description":"Resource not found."},"429":{"description":"Rate limit exceeded."}}}}}}