openapi: 3.0.3 info: title: Quandoo Public Partner Availabilities Merchants API description: The Quandoo Public Partner API is a multi-purpose REST API for the Quandoo restaurant reservations platform. It lets partners check merchant availability, search merchants, read merchant reservation and enquiry settings, create and manage reservations and reservation enquiries, manage customers and reviews, handle preorders and reservation tags, and validate phone numbers. Reservation and enquiry creation is idempotent via an agent-specific unique identifier. Derived from the official Quandoo Swagger specification at https://api.quandoo.com/swagger.json. version: 1.0.0 contact: name: Quandoo Developers email: developers@quandoo.com url: https://docs.quandoo.com/ servers: - url: https://public-api.prod.quandoo.com description: Production security: - API_TOKEN: [] tags: - name: Merchants paths: /v1/merchants/{merchantId}/similar: get: tags: - Merchants summary: Quandoo Allows to Get a Merchant by Id and Find Similar Merchants operationId: searchSimilar_1 description: "This endpoint allows to receive detailed information for a particular merchant in the system and for restaurants that are similar to this one.\nA merchant is similar if all the following conditions are met:\n1. Location: the recommended merchants are within 30 km radius from the main merchant\n2. The similar merchants are bookable online\n3. The similar merchants have the main cuisine in common\n\nThis merchant should be specified by their identifier **merchantId**, which is mandatory.\nThe endpoint can take optional request header **Accept-Language**.\nThis header is used to determine correct locale and has an effect on translation of merchant's entity fields, that may be omitted.\n\nThe expected value of the header **Accept-Language** should contain language and can contain country, e.g. \"de_DE\" or \"de\". Locale by default is \"en_GB\".\n\nThe endpoint returns status `HTTP 200` if the request is successful. In a successful requests the specified merchant was found.\n\nIf the merchant has no products allowed for a web search, i.e. is not bookable, response data with `HTTP 200` is returned, but the field `merchant` is not set. Instead, the merchant search message is set.\n\nThe endpoint will return status `HTTP 404` if the merchant, specified by identifier, was not found.\n\nExample curl:\n```\ncurl -H 'X-Quandoo-AuthToken: {INSERT_KEY_HERE}' -H 'Accept-Language: de_DE' 'https://{host}/v{X}/merchants/11/similar'\n```\n\nExample responses:\n`merchant bookable`\n```\n{\n \"merchant\": {\n \"id\":11,\n \"name\":\"Test merchant\",\n \"phoneNumber\":\"+27113901837\",\n \"currency\":\"ZAR\",\n \"locale\":\"en_ZA\",\n \"timezone\":\"Africa/Johannesburg\",\n \"location\":{\n \"coordinates\":{\n \"latitude\":33.9,\n \"longitude\":18.4\n },\n \"address\":{\n \"street\":\"Tamerlan street\",\n \"number\":\"6A\",\n \"zipcode\":\"10787\",\n \"city\":\"Cape Town\",\n \"country\":\"ZAF\"\n }\n },\n \"reviewScore\": \"5.3\",\n \"tagGroups\":[\n {\n \"type\":\"CUISINE\",\n \"tags\":[\n {\n \"id\":25,\n \"name\":\"Testküche Hauptkategorie\"\n },\n {\n \"id\":28,\n \"name\":\"Test cuisine\"\n }\n ]\n }\n ],\n \"images\":[\n {\n \"url\":\"https://dci5ez2ey8tr9.cloudfront.net/8e4d1063-9171-40b1-94b7-5e9337591a90/7_sld.jpg\"\n }\n ],\n \"documents\":[],\n \"links\":[\n {\n \"href\":\"https://{host}/{path}?aid=16\",\n \"method\":\"GET\",\n \"rel\":\"DETAILS\"\n },\n {\n \"href\":\"https://{host}/{path}?aid=16&countryId=NLD\",\n \"method\":\"GET\",\n \"rel\":\"WIDGET\"\n },\n {\n \"href\":\"https://{host}/{path}/details?aid=16&countryId=NLD\",\n \"method\":\"GET\",\n \"rel\":\"WIDGET_DETAILS\"\n }\n ],\n \"bookable\": true,\n \"openingTimes\": {\n \"standardOpeningTimes\": {\n \"SATURDAY\": [\n {\n \"start\": \"09:00:00\",\n \"end\": \"20:00:00\"\n }\n ],\n \"SUNDAY\": [\n {\n \"start\": \"09:00:00\",\n \"end\": \"18:00:00\"\n }\n ]\n }\n },\n \"ccvEnabled\": true,\n \"chain\": {\n \"id\": 1,\n \"name\": \"Test chain\"\n }\n },\n \"recommendedMerchants\": {\n \"merchants\": [\n {\n \"id\":12,\n \"name\":\"similar merchant\",\n \"phoneNumber\":\"+27113901838\",\n \"currency\":\"ZAR\",\n \"locale\":\"en_ZA\",\n \"timezone\":\"Africa/Johannesburg\",\n \"location\":{\n \"coordinates\":{\n \"latitude\":33.8,\n \"longitude\":18.4\n },\n \"address\":{\n \"street\":\"Tamerlan street\",\n \"number\":\"5A\",\n \"zipcode\":\"10787\",\n \"city\":\"Cape Town\",\n \"country\":\"ZAF\"\n }\n },\n \"reviewScore\": \"5.3\",\n \"tagGroups\":[\n {\n \"type\":\"CUISINE\",\n \"tags\":[\n {\n \"id\":25,\n \"name\":\"Testküche Hauptkategorie\"\n },\n {\n \"id\":28,\n \"name\":\"Test cuisine\"\n }\n ]\n }\n ],\n \"images\":[\n {\n \"url\":\"https://dci5ez2ey8tr9.cloudfront.net/8e4d1063-9171-40b1-94b7-5e9337591a90/7_sld.jpg\"\n }\n ],\n \"documents\":[],\n \"links\":[\n {\n \"href\":\"https://{host}/{path}?aid=16\",\n \"method\":\"GET\",\n \"rel\":\"DETAILS\"\n },\n {\n \"href\":\"https://{host}/{path}?aid=16&countryId=NLD\",\n \"method\":\"GET\",\n \"rel\":\"WIDGET\"\n },\n {\n \"href\":\"https://{host}/{path}/details?aid=16&countryId=NLD\",\n \"method\":\"GET\",\n \"rel\":\"WIDGET_DETAILS\"\n }\n ],\n \"bookable\": true,\n \"openingTimes\": {\n \"standardOpeningTimes\": {\n \"SATURDAY\": [\n {\n \"start\": \"09:00:00\",\n \"end\": \"20:00:00\"\n }\n ],\n \"SUNDAY\": [\n {\n \"start\": \"09:00:00\",\n \"end\": \"18:00:00\"\n }\n ]\n }\n },\n \"ccvEnabled\": true,\n \"chain\": {\n \"id\": 1,\n \"name\": \"Test chain\"\n }\n }\n ],\n \"size\": 1,\n \"offset\": 0,\n \"limit\": 10\n }\n}\n```\n\n`merchant not bookable`\n```\n{\n \"merchantSearchMessage\": \"MERCHANT_NOT_BOOKABLE\",\n \"recommendedMerchants\": {\n \"limit\": 10,\n \"merchants\": [...],\n \"offset\": 0,\n \"size\": 0\n }\n}\n```" parameters: - name: merchantId in: path required: true description: merchantId schema: type: integer format: int32 - name: sort in: query required: false description: Sort order. Default sorting will be by proximity. schema: type: string enum: - CLOSEST default: CLOSEST - name: limit in: query required: false description: Max number of merchant recommendations to return. schema: type: integer format: int32 default: 10 - name: Accept-Language in: header required: false description: Locale.
Format:
<language code>[_<country code>] schema: type: string default: en_GB responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/MerchantWithRecommendationsDto' examples: SearchSimilar1200Example: summary: Default searchSimilar_1 200 response x-microcks-default: true value: merchant: id: 1 name: Sample Restaurant phoneNumber: 030120765890 currency: EUR locale: de_DE timezone: 70200 location: {} reviewScore: string tagGroups: - {} images: - {} documents: - {} links: - {} bookable: true openingTimes: {} ccvEnabled: true chain: {} ivrRedirectNumber: string shortDescription: Window table preferred if available. longDescription: Window table preferred if available. merchantSearchMessage: MERCHANT_NOT_BOOKABLE recommendedMerchants: merchants: - {} size: 1 offset: 1 limit: 1 '404': description: Merchant not found error content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' examples: SearchSimilar1404Example: summary: Default searchSimilar_1 404 response x-microcks-default: true value: errorType: BAD_REQUEST_ERROR errorMessage: Window table preferred if available. x-microcks-operation: delay: 0 dispatcher: FALLBACK /v1/merchants/{merchantId}: get: tags: - Merchants summary: Quandoo Allows to Get a Merchant by Id operationId: search_2 description: "This endpoint allows to receive detailed information on a particular merchant in the system. This merchant should be specified by their identifier **merchantId**, which is mandatory. The endpoint can take optional request header **Accept-Language**. This header is used to determine correct locale and has an effect on translation of merchant's entity fields, that may be omitted.\n\nThe expected value of the header **Accept-Language** should contain language and can contain country, e.g. \"de_DE\" or \"de\". Locale by default is \"en_GB\".\n\nThe endpoint returns status `HTTP 200` if the request is successful.\nThe endpoint will return status `HTTP 404` if the merchant, specified by identifier, was not found or has no products, allowed for a web search. \n\nExample curl:\n```\ncurl -H 'X-Quandoo-AuthToken: {INSERT_KEY_HERE}' -H 'Accept-Language: de_DE' 'https://{host}/v{X}/merchants/11'\n```\n\nExample response:\n```\n{\n \"id\":11,\n \"name\":\"Test merchant\",\n \"phoneNumber\":\"+27113901837\",\n \"currency\":\"ZAR\",\n \"locale\":\"en_ZA\",\n \"timezone\":\"Africa/Johannesburg\",\n \"location\":{\n \"coordinates\":{\n \"latitude\":33.9,\n \"longitude\":18.4\n },\n \"address\":{\n \"street\":\"Tamerlan street\",\n \"number\":\"6A\",\n \"zipcode\":\"10787\",\n \"city\":\"Cape Town\",\n \"country\":\"ZAF\"\n }\n },\n \"reviewScore\": \"5.3\",\n \"tagGroups\":[\n {\n \"type\":\"CUISINE\",\n \"tags\":[\n {\n \"id\":25,\n \"name\":\"Testküche Hauptkategorie\"\n },\n {\n \"id\":28,\n \"name\":\"Test cuisine\"\n }\n ]\n }\n ],\n \"images\":[\n {\n \"url\":\"https://dci5ez2ey8tr9.cloudfront.net/8e4d1063-9171-40b1-94b7-5e9337591a90/7_sld.jpg\"\n }\n ],\n \"documents\":[],\n \"links\":[\n {\n \"href\":\"https://{host}/{path}?aid=16\",\n \"method\":\"GET\",\n \"rel\":\"DETAILS\"\n },\n {\n \"href\":\"https://{host}/{path}?aid=16&countryId=NLD\",\n \"method\":\"GET\",\n \"rel\":\"WIDGET\"\n },\n {\n \"href\":\"https://{host}/{path}/details?aid=16&countryId=NLD\",\n \"method\":\"GET\",\n \"rel\":\"WIDGET_DETAILS\"\n }\n ],\n \"bookable\": true,\n \"openingTimes\": {\n \"standardOpeningTimes\": {\n \"SATURDAY\": [\n {\n \"start\": \"09:00:00\",\n \"end\": \"20:00:00\"\n }\n ],\n \"SUNDAY\": [\n {\n \"start\": \"09:00:00\",\n \"end\": \"18:00:00\"\n }\n ]\n }\n },\n \"ccvEnabled\": true,\n \"chain\": {\n \"id\": 1,\n \"name\": \"Test chain\"\n }\n}\n```" parameters: - name: merchantId in: path required: true description: merchantId schema: type: integer format: int32 - name: Accept-Language in: header required: false description: Locale.
Format:
<language code>[_<country code>] schema: type: string default: en_GB responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/MerchantDetailsDto' examples: Search2200Example: summary: Default search_2 200 response x-microcks-default: true value: id: 1 name: Sample Restaurant phoneNumber: 030120765890 currency: EUR locale: de_DE timezone: 70200 location: coordinates: {} address: {} reviewScore: string tagGroups: - type: {} tags: {} images: - url: {} documents: - name: {} url: {} format: {} description: {} links: - href: {} method: {} rel: {} bookable: true openingTimes: standardOpeningTimes: {} ccvEnabled: true chain: id: 1 name: Sample Restaurant ivrRedirectNumber: string shortDescription: Window table preferred if available. longDescription: Window table preferred if available. '404': description: Merchant not found error content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' examples: Search2404Example: summary: Default search_2 404 response x-microcks-default: true value: errorType: BAD_REQUEST_ERROR errorMessage: Window table preferred if available. x-microcks-operation: delay: 0 dispatcher: FALLBACK /v1/merchants: get: tags: - Merchants summary: Quandoo Allows to Get Merchant Information by Parameters operationId: search description: "###Description\n\nThis endpoint is used to search merchants by a set of parameters.\nFor each merchant in the result there is information about location, language and tags that describe this merchant's basic characteristics, there is also a set of images selected by the merchant.\n\n####Possible query parameters:\n\n##Mandatory geo parameters (at least one of two options must be provided)\n\n* **place**: Filter for merchant on a country, city or district whose name matches the parameter. (if the parameter does not match any city or district on the system it is ignored)\n* **centerPoint**: Filter merchants within the circle defined by center on centerPoint and radius defined by radius parameter (if not informed defaults to 10). Center point has the format LATITUDE,LONGITUDE with both parameters as numbers with . as decimal separator (e.g `centerPoint=52.547928,13.4085728`)\n\n* **query**: Filter merchants using text similarity on a number of merchant fields like name, description, categories and tags\n* **placeIds**: DEPRECATED. Filter for merchant by id of place. Semicolon separated integer value.\n* **radius**: The radius of the circle to filter merchants in **kilometers**. Defaults to 10 and is only used if *centerPoint* is also informed\n* **bookable**: Boolean value, if informed true means that only merchants that are online bookable will be returned and false means that only merchants that are NOT online bookable will be returned\n* **tags**: Filter out merchants with the selected tags text. Semicolon separated text value. All or nothing field: if a tag is not found, the query will fail. Cannot be used in conjunction with 'tagIds' parameter.\n* **tagIds**: Filter out merchants with the selected tag ids. Semicolon separated text value. All or nothing field: if a tag is not found, the query will fail. Cannot be used in conjunction with 'tags' parameter.\n* **reviewScoreMax**: Filter out merchants with review score higher than the one informed.\n* **onlyWithAttributes**: This field only accepts the value **documents** for now. If informed only merchants with documents will be returned. You need to have required permissions to use this filter\n* **capacity**: Number of people. In order to be effective, \"place\", \"date\" and \"fromTime\" must also be set.\n* **date**: Date of the desired reservation in merchants' time zone. Format: yyyy-MM-dd. Availability search is only activated if \"place\" is specified.\n* **fromTime**: Beginning of the desired reservation time frame in merchants' time zone. Format: HH:mm. Consider a 3h buffer for the time (0.5h before the given time and 2.5h after)\n* **offset**: Number of merchants to skip on the result. Defaults to 0\n* **limit**: Maximum number of merchants to return. Defaults to 100 and cannot be more than 100.\n* **ivrNumber**: Filter out merchants with phone number.\n\n\n####Result fields for Merchant object:\n\n* **id**: Id of the merchant\n* **name**: Name of the merchant\n* **phoneNumber**: The phone number of the merchant\n* **currency**: Currency of the merchant in the ISO 4217 letter format\n* **locale**: Locale used to communicate with this merchant\n* **timezone**: Canonical Timezone name\n* **location**: Location of the merchant, contains both an geo located point and an address if available\n* **reviewScore**: Review score of the merchant\n* **tagGroups**: Tags (grouped) about relevant merchant characteristics\n* **images**: Group of images selected by the merchant\n* **documents**: Group of documents released by this merchant (e.g seasonal menus )\n* **links**: Links for other pages or api operations for this merchant\n* **bookable**: The flag indicates whether the merchant is bookable or not\n* **openingTimes**: Group of opening times: restaurant opening times for this merchant. Time range beginning may be greater than the end time of the range, when this range goes beyond the day when it was started, e.g. 19:00:00 - 02:00:00\n* **ccvEnabled**: If true, credit card information is required when creating a reservation\n* **chain**: Merchant chain information, if any\n* **ivrRedirectNumber**: The IVR forwarding phone number, requires permission\n* **shortDescription**: Merchant short description, requires permission\n* **longDescription**: Merchant long description, requires permission\n\n\n###Authenticated use of the api:\n* Field `documents` is only accessible for authorized callers and will be empty otherwise.\n* Queries with parameter `onlyWithAttributes` are only allowed for authorized callers and will return `HTTP 403` for unauthorized requests\n\n#####How?\nIn order to make an authenticated call the caller must send a header name `X-Quandoo-AuthToken` with the token obtained from contact with Quandoo.\n\n###Pagination of the result:\n\nThe result contains the fields `size` with the number of all merchants that matched the informed parameters, `offset` and `limit` defining which merchants from the complete list are on this response,\nand the caller can use query parameters `offset` and `limit` to get different merchants on the result list\n\n###Examples:\n\nExample curl:\n```\ncurl -H 'X-Quandoo-AuthToken: INSERT_KEY_HERE' 'https://{host}/v{X}/merchants?query=Zim&place=Berlin&centerPoint=52.5479288%2C13.4085728&radius=10&bookable=true&reviewScoreMax=200&onlyWithAttributes=documents&offset=0&limit=100'\n```\n\nExample response:\n```\n{\n \"merchants\": [\n {\n \"id\": 215,\n \"name\": \"a-merchant-Zim\",\n \"phoneNumber\": \"+49153153153\",\n \"currency\": \"EUR\",\n \"locale\": \"de_DE\",\n \"timezone\": \"Europe/Berlin\",\n \"location\": {\n \"coordinates\": {\n \"latitude\": 55,\n \"longitude\": 12\n },\n \"address\": {}\n },\n \"reviewScore\": \"5.3\",\n \"tagGroups\": [\n {\n \"type\": \"CUISINE\",\n \"tags\": [\n {\n \"id\": 63,\n \"name\": \"Testküche Hauptkategorie\"\n },\n {\n \"id\": 66,\n \"name\": \"Test cuisine\"\n }\n ]\n }\n ],\n \"images\": [],\n \"documents\": [\n {\n \"name\": \"Main Menu\",\n \"url\": \"https://d2s6u6f7snurg9.cloudfront.net/partner/uploads/MD-document-3ec1dc15-1b69-463f-bdd2-c060b9bf844d.pdf\",\n \"format\": \"pdf\",\n \"description\": \"Seasonal Main Menu\"\n }\n ],\n \"links\": [\n {\n \"href\": \"https://{host}/{path}?aid=16\",\n \"method\": \"GET\",\n \"rel\": \"DETAILS\"\n },\n {\n \"href\": \"https://{host}/{path}?aid=16&countryId=NLD\",\n \"method\": \"GET\",\n \"rel\": \"WIDGET\"\n },\n {\n \"href\": \"https://{host}/{path}/details?aid=16&countryId=NLD\",\n \"method\": \"GET\",\n \"rel\": \"WIDGET_DETAILS\"\n }\n ],\n \"bookable\": true,\n \"ccvEnabled\": true,\n \"chain\": {\n \"id\": 1,\n \"name\": \"Test chain\"\n },\n \"ivrRedirectNumber\": \"+49153153153\",\n \"shortDescription\": \"Test short description\",\n \"longDescription\": \"Test long description\",\n },\n {\n \"id\": 219,\n \"name\": \"another merchants Zim\",\n \"phoneNumber\": \"+49154154154\",\n \"currency\": \"EUR\",\n \"locale\": \"de_DE\",\n \"timezone\": \"Europe/Berlin\",\n \"location\": {\n \"coordinates\": {\n \"latitude\": 52,\n \"longitude\": 13\n },\n \"address\": {\n \"street\": \"Wintersteinstr.\",\n \"number\": \"15\",\n \"zipcode\": \"10587\",\n \"city\": \"Berlin\",\n \"country\": \"DEU\"\n }\n },\n \"reviewScore\": \"4.7\", \n \"tagGroups\": [\n {\n \"type\": \"CUISINE\",\n \"tags\": [\n {\n \"id\": 79,\n \"name\": \"Testküche Hauptkategorie\"\n },\n {\n \"id\": 82,\n \"name\": \"Test Japanese\"\n }\n ]\n },\n {\n \"type\": \"PRICE\",\n \"tags\": [\n {\n \"id\": 84,\n \"name\": \"Test expensive\"\n }\n ]\n }\n ],\n \"images\": [\n {\n \"url\": \"https://dci5ez2ey8tr9.cloudfront.net/1482eec7-e585-4821-b096-8a9941e0d2eb/25_sld.jpg\"\n }\n ],\n \"documents\": [],\n \"links\": [\n {\n \"href\": \"https://{host}/{path}?aid=16\",\n \"method\": \"GET\",\n \"rel\": \"DETAILS\"\n },\n {\n \"href\": \"https://{host}/{path}?aid=16&countryId=NLD\",\n \"method\": \"GET\",\n \"rel\": \"WIDGET\"\n },\n {\n \"href\": \"https://{host}/{path}/details?aid=16&countryId=NLD\",\n \"method\": \"GET\",\n \"rel\": \"WIDGET_DETAILS\"\n }\n ],\n \"bookable\": true,\n \"openingTimes\": {\n \"standardOpeningTimes\": {\n \"SATURDAY\": [\n {\n \"start\": \"09:00:00\",\n \"end\": \"20:00:00\"\n }\n ],\n \"SUNDAY\": [\n {\n \"start\": \"09:00:00\",\n \"end\": \"18:00:00\"\n }\n ]\n }\n },\n \"ccvEnabled\": true,\n \"chain\": {\n \"id\": 1,\n \"name\": \"Test chain\"\n },\n \"ivrRedirectNumber\": \"+49153153153\",\n \"shortDescription\": \"Test short description\",\n \"longDescription\": \"Test long description\",\n }\n ],\n \"size\": 2,\n \"offset\": 0,\n \"limit\": 100\n}\n```" parameters: - name: query in: query required: false description: Search query for a merchant name schema: type: string - name: place in: query required: false description: 'Search query for a place (country, city or district) name: the most relevant places, if any, are taken as a filter' schema: type: string - name: placeIds in: query required: false description: DEPRECATED. Filter by place found by id. Semicolon separated. schema: type: string - name: centerPoint in: query required: false description: Search with coordinates and radius. "radius" argument can be set, otherwise default value of 10 km will be used.
Format:
53.1222,13.0303
where latitude=53.1222, longitude=13.0303 schema: type: string - name: radius in: query required: false description: Radius for coordinate-based search schema: type: integer format: int32 default: 10 - name: bookable in: query required: false description: Filter only bookable merchants schema: type: boolean - name: tags in: query required: false description: 'Filter by tags found by text. The value can be either in English or in the specific locale. Semicolon separated. All or nothing behaviour: if one single tag is not found, the whole request fails. Cannot be used in combination with ''groupedTagIds'' parameter.' schema: type: string - name: tagIds in: query required: false description: 'Filter by tags found by id. Semicolon separated. All or nothing behaviour: if one single tag id is not found, the whole request fails. Cannot be used in combination with ''tags'' parameter.' schema: type: string - name: reviewScoreMax in: query required: false description: Filter by max review score (100 - 600) schema: type: integer format: int32 - name: onlyWithAttributes in: query required: false description: Search with attributes specified only. Attribute "documents" is currently supported, requires permission schema: type: string - name: capacity in: query required: true description: Number of people. In order to be effective, "date" and "fromTime" must also be set. schema: type: integer format: int32 default: 2 - name: date in: query required: false description: 'Date of the desired reservation in merchants'' time zone. Format: yyyy-MM-dd. Availability search is only activated if "place" is specified.' schema: type: string format: date - name: fromTime in: query required: false description: 'Beginning of the desired reservation time frame in merchants'' time zone. Format: HH:mm. Consider a 3h buffer for the time (0.5h before the given time and 2.5h after)' schema: type: string - name: offset in: query required: false description: offset schema: type: integer format: int32 default: 0 - name: limit in: query required: false description: limit schema: type: integer format: int32 default: 100 - name: Accept-Language in: header required: false description: language schema: type: string - name: ivrNumber in: query required: false description: ivrNumber schema: type: string responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/MerchantDetailsDtoList' examples: Search200Example: summary: Default search 200 response x-microcks-default: true value: merchants: - id: {} name: {} phoneNumber: {} currency: {} locale: {} timezone: {} location: {} reviewScore: {} tagGroups: {} images: {} documents: {} links: {} bookable: {} openingTimes: {} ccvEnabled: {} chain: {} ivrRedirectNumber: {} shortDescription: {} longDescription: {} size: 1 offset: 1 limit: 1 '400': description: Bad request content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' examples: Search400Example: summary: Default search 400 response x-microcks-default: true value: errorType: BAD_REQUEST_ERROR errorMessage: Window table preferred if available. x-microcks-operation: delay: 0 dispatcher: FALLBACK /v1/merchants/{merchantId}/reservations: get: tags: - Merchants summary: Quandoo Get Merchant Reservations operationId: getReservations_2 description: "This endpoint allows an agent to get reservations of a merchant. The results will be filtered by agent id. \nReservation IDs in response are agent-specific. The agent needs to be authenticated.\n\nThe endpoint will return `HTTP 404 - Not Found` if the merchant with the specified id could not be found.\nIt will return `HTTP 403 - Forbidden` if the agent is not authenticated or the agent doesn't have permissions.\n\n####Request:\n* **merchantId**: ID of the merchant\n* **offset**: sets the starting element to be returned. Defaults to 0 when unset or malformed.\n* **limit**: maximum number of results to be returned. Value must be between 1 and 100. Defaults to 100 when unset, malformed or outside bounds.\n* **earliest**: earliest date time of time window in UTC. Format: yyyy-MM-dd HH:mm:ss\n* **latest**: latest date time of time window in UTC. Format: yyyy-MM-dd HH:mm:ss\n\n\n####Response:\nThe response will be a _list_ of reservations. Each reservation has the fields explained below:\n* **id**: The public id of the reservation\n* **number**: Quandoo internal identifier of the reservation.\n* **quandooId**: The public id of this reservation on quandoo system.\n* **status**: The status of the reservation eg. CREATED, CONFIRMED, CUSTOMER CANCELED etc.\n* **startTime**: The start time of the reservation. Format: `yyyy-MM-ddTHH:mm:ssZ`\n* **endTime**: The end time of the reservation. Format: `yyyy-MM-ddTHH:mm:ssZ`\n* **capacity**: The capacity (people count) of the reservation\n* **merchantId**: The ID of the merchant at which this reservation was made.\n* **customerId**: The public ID of the customer to which this reservation belongs\n* **promoCode**: The promotion code associated with this reservation. Optional.\n* **extraInfo**: extra information that the customer provided for the reservation. Optional.\n* **links**: Related links that can be followed based on this response.\n* **createdAt**: The date the reservation was created. Format: `yyyy-MM-ddTHH:mm:ssZ`\n* **updatedAt**: The date the reservation was last updated. Format: `yyyy-MM-ddTHH:mm:ssZ`\n\nExample curl:\n```\ncurl https://{host}/v{X}/merchants/32489/reservations\n```\n\nExample response: \n```\n{\n \"reservations\": [\n {\n \"id\": \"07f53b36-3f48-11e5-a151-feff819cdc9f\",\n \"number\": 8734957,\n \"quandooId\": \"07f53b36-3f48-11e5-a151-feff819cdc9f\",\n \"status\": \"CREATED\",\n \"startTime\": \"2015-06-22T12:00:00+00:00\",\n \"endTime\": \"2015-06-22T13:00:00+00:00\",\n \"capacity\": 4,\n \"merchantId\": 1384,\n \"customerId\": \"ce0706ff-a95d-4229-a220-d21dcd175342\",\n \"promocode\": \"SOME_CAMPAIGN_CODE\",\n \"extraInfo\": \"request for baby chair\",\n \"links\": [\n {\n \"href\": \"https://{host}/v{X}/reservations/07f53b36-3f48-11e5-a151-feff819cdc9f\",\n \"method\": \"GET\",\n \"rel\": \"self\"\n },\n {\n \"href\": \"https://{host}/v{X}/reservations/07f53b36-3f48-11e5-a151-feff819cdc9f\",\n \"method\": \"PATCH\",\n \"rel\": \"update\"\n }\n ],\n \"createdAt\": \"2015-06-01T15:21:54Z\",\n \"updatedAt\": \"2015-06-01T18:45:30Z\"\n },\n {\n \"id\": \"d8f53b36-3f48-11e5-a151-feff819cdc7a\",\n \"number\": 8734958,\n \"quandooId\": \"d8f53b36-3f48-11e5-a151-feff819cdc7a\",\n \"status\": \"CONFIRMED\",\n \"startTime\": \"2015-06-22T12:00:00+00:00\",\n \"endTime\": \"2015-06-22T13:00:00+00:00\",\n \"capacity\": 3,\n \"merchantId\": 1384,\n \"customerId\": \"ce0706ff-a95d-4229-a220-d21dcd175342\",\n \"promocode\": \"SOME_CAMPAIGN_CODE\",\n \"links\": [\n {\n \"href\": \"https://{host}/v{X}/reservations/d8f53b36-3f48-11e5-a151-feff819cdc7a\",\n \"method\": \"GET\",\n \"rel\": \"self\"\n },\n {\n \"href\": \"https://{host}/v{X}/reservations/d8f53b36-3f48-11e5-a151-feff819cdc7a\",\n \"method\": \"PATCH\",\n \"rel\": \"update\"\n }\n ],\n \"createdAt\": \"2015-06-01T15:21:54Z\",\n \"updatedAt\": \"2015-06-01T18:45:30Z\"\n }\n ],\n offset:0,\n limit:100\n}\n```\n" parameters: - name: merchantId in: path required: true description: Id of the merchant schema: type: integer format: int32 - name: offset in: query required: false description: Skip first n reservations schema: type: integer format: int32 default: 0 - name: limit in: query required: false description: limit schema: type: integer format: int32 default: 100 - name: earliest in: query required: false description: 'earliest date time of time window in UTC. Format: yyyy-MM-dd HH:mm:ss' schema: type: string format: date-time - name: latest in: query required: false description: 'latest date time of time window in UTC. Format: yyyy-MM-dd HH:mm:ss' schema: type: string format: date-time responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/MerchantReservationDataList' examples: GetReservations2200Example: summary: Default getReservations_2 200 response x-microcks-default: true value: reservations: - id: {} number: {} reservationNumber: {} quandooId: {} status: {} updatedAt: {} capacity: {} merchantId: {} customerId: {} promocode: {} extraInfo: {} links: {} reservationTags: {} offset: 1 limit: 1 '400': description: Bad request content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' examples: GetReservations2400Example: summary: Default getReservations_2 400 response x-microcks-default: true value: errorType: BAD_REQUEST_ERROR errorMessage: Window table preferred if available. '403': description: Access denied content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' examples: GetReservations2403Example: summary: Default getReservations_2 403 response x-microcks-default: true value: errorType: BAD_REQUEST_ERROR errorMessage: Window table preferred if available. '404': description: Merchant not found error content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' examples: GetReservations2404Example: summary: Default getReservations_2 404 response x-microcks-default: true value: errorType: BAD_REQUEST_ERROR errorMessage: Window table preferred if available. '500': description: Internal server error content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' examples: GetReservations2500Example: summary: Default getReservations_2 500 response x-microcks-default: true value: errorType: BAD_REQUEST_ERROR errorMessage: Window table preferred if available. x-microcks-operation: delay: 0 dispatcher: FALLBACK /v1/merchants/{merchantId}/reviews: get: tags: - Merchants summary: Quandoo Retrieves Customer Reviews for a Merchant, Specified by ReviewId operationId: getReviews_1 description: "This endpoint retrieves customer reviews for a particular merchant with rating, description, locale, date & the customer's information.This merchant should be specified by their identifier **merchantId**, which is mandatory.\n\nSupports pagination via offset & limit parameters in the request.\n\n`offset` allows skipping the first n reviews.\n`limit` makes sure the response contains a maximum of n reviews.\n\nIf not supplied, offset will be 0 and limit will be 10\n\n####Response:\n\n* **customer**: block contains link to customer's profile image, customer's first name & first letter of customer's last name.\n* **rating**: a value between 1 and 6, where 1 represents the worst rating and 6 represents the best.\n* **description**: the review description entered by the customer.\n* **locale**: represents the language settings of the customer, in the format: _\n* **date**: represents the date of the review, with the format: yyyy-MM-dd\n\nExample curl:\n```\ncurl https://{host}/v{X}/merchants/15/reviews?offset=10&limit=5\n```\n\nExample response:\n```\n{\n reviews: [\n {\n customer: {\n firstName: \"Hans\",\n lastName: \"W\",\n profileImage: {\n url: \"https://www...\"\n },\n },\n rating: 1,\n description: \"Foo bar\", \n locale: \"de_DE\",\n date: \"2017-07-21\"\n }\n ],\n offset: 10,\n limit: 5,\n size: 1\n}\n```" parameters: - name: merchantId in: path required: true schema: type: integer format: int32 - name: offset in: query required: false description: Skip first n reviews schema: type: integer format: int32 default: 0 - name: limit in: query required: false description: Max number of reviews to be retrieved schema: type: integer format: int32 default: 10 responses: '200': description: Review response content: application/json: schema: $ref: '#/components/schemas/ReviewDtoList' examples: GetReviews1200Example: summary: Default getReviews_1 200 response x-microcks-default: true value: reviews: - customer: {} rating: {} description: {} locale: {} date: {} size: 1 offset: 1 limit: 1 '400': description: Bad request content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' examples: GetReviews1400Example: summary: Default getReviews_1 400 response x-microcks-default: true value: errorType: BAD_REQUEST_ERROR errorMessage: Window table preferred if available. '500': description: Internal server error content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' examples: GetReviews1500Example: summary: Default getReviews_1 500 response x-microcks-default: true value: errorType: BAD_REQUEST_ERROR errorMessage: Window table preferred if available. '404': description: Merchant not found error content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' examples: GetReviews1404Example: summary: Default getReviews_1 404 response x-microcks-default: true value: errorType: BAD_REQUEST_ERROR errorMessage: Window table preferred if available. x-microcks-operation: delay: 0 dispatcher: FALLBACK components: schemas: StandardOpeningTimesDto: type: object LocationDto: type: object properties: coordinates: $ref: '#/components/schemas/CoordinatesDto' address: $ref: '#/components/schemas/MerchantAddressDto' ChainDto: type: object properties: id: type: integer format: int32 example: 1 name: type: string example: Sample Restaurant CoordinatesDto: type: object properties: latitude: type: number format: double example: 1.0 longitude: type: number format: double example: 1.0 MerchantDetailsDto: type: object required: - bookable - ccvEnabled - id - links - location - name - openingTimes - phoneNumber - reviewScore - timezone properties: id: type: integer format: int32 description: The id of the merchant. example: 1 name: type: string description: The name of the merchant. example: Sample Restaurant phoneNumber: type: string description: The phone number of the merchant. example: 030120765890 currency: type: string description: The currency of the merchant. example: EUR locale: type: string description: The locale of the merchant. example: de_DE timezone: type: string description: The timezone of the merchant. example: 70200 location: description: The location of the merchant. $ref: '#/components/schemas/LocationDto' reviewScore: type: string description: The review score of the merchant. example: string tagGroups: type: array description: The tag groups this merchant belongs to, requires permission. Without permissions returns only CUISINE and PRICE. items: $ref: '#/components/schemas/TagGroupDto' images: type: array description: The slider images this merchant has. items: $ref: '#/components/schemas/ImageDto' documents: type: array description: The documents this merchant has, requires permission. items: $ref: '#/components/schemas/DocumentDto' links: type: array description: The links related to this entity. items: $ref: '#/components/schemas/LinkRelationDto' bookable: type: boolean description: The flag indicates whether the merchant is bookable or not. example: true openingTimes: description: All opening times of the merchant. $ref: '#/components/schemas/OpeningTimesDto' ccvEnabled: type: boolean description: If true, credit card information is required when creating a reservation. example: true chain: description: The chain of the merchant. $ref: '#/components/schemas/ChainDto' ivrRedirectNumber: type: string description: The IVR forwarding phone number, requires permission. example: string shortDescription: type: string description: Merchant short description, requires permission. example: Window table preferred if available. longDescription: type: string description: Merchant long description, requires permission. example: Window table preferred if available. ReservationData: type: object required: - capacity - customerId - id - links - merchantId - quandooId - status properties: id: type: string description: The agent-dependent unique id of the reservation. example: '88086' number: type: integer format: int32 description: The id of the reservation on quandoo system. example: 1 reservationNumber: type: string description: The long id of this reservation on quandoo system. example: string quandooId: type: string format: uuid description: The public id of this reservation on quandoo system. example: '88086' status: type: string description: The status of the reservation. example: CONFIRMED updatedAt: type: string format: date-time description: 'The date the review created on. Format: yyyy-MM-ddTHH:mm:ssZ' example: '2026-07-15T19:30:00' capacity: type: integer format: int32 description: The capacity of the reservation. example: 4 merchantId: type: integer format: int32 description: The id of the merchant. example: 88086 customerId: type: string description: The public ID of the customer to which this reservation belongs. example: '88086' promocode: type: string description: The promotion code used in this reservation. Optional. example: string extraInfo: type: string description: Extra information that the customer provided for the reservation. Optional. example: Window table preferred if available. links: type: array description: The links related to this entity. items: $ref: '#/components/schemas/LinkRelationDto' reservationTags: type: array description: A list of reservation tag IDs. items: type: integer format: int32 MerchantWithRecommendationsDto: type: object required: - merchant - merchantSearchMessage properties: merchant: description: The merchant that was searched for. Only filled if it is bookable. $ref: '#/components/schemas/MerchantDetailsDto' merchantSearchMessage: type: string description: 'Additional information about the search result: MERCHANT_NOT_BOOKABLE if the merchant exists but is not bookable' enum: - MERCHANT_NOT_BOOKABLE example: MERCHANT_NOT_BOOKABLE recommendedMerchants: description: Recommendations for similar merchants. $ref: '#/components/schemas/MerchantDetailsDtoList' OpeningTimesDto: type: object required: - standardOpeningTimes properties: standardOpeningTimes: description: The standard opening times of the merchant. $ref: '#/components/schemas/StandardOpeningTimesDto' ReviewDto: type: object required: - customer - date - rating properties: customer: description: The customer who wrote the review. $ref: '#/components/schemas/CustomerDto' rating: type: integer format: int32 description: 'Possible values: 1 to 6.' example: 1 description: type: string description: The description of the review. example: Window table preferred if available. locale: type: string example: de_DE date: type: string format: date description: The date when the review was written. example: '2026-07-15' ImageDto: type: object properties: url: type: string format: url example: https://www.quandoo.com/place/sample-restaurant DocumentDto: type: object properties: name: type: string example: Sample Restaurant url: type: string example: https://www.quandoo.com/place/sample-restaurant format: type: string example: string description: type: string example: Window table preferred if available. MerchantDetailsDtoList: type: object required: - merchants properties: merchants: type: array description: Merchant details collection. items: $ref: '#/components/schemas/MerchantDetailsDto' size: type: integer format: int64 example: 1 offset: type: integer format: int32 example: 1 limit: type: integer format: int32 example: 1 TagGroupDto: type: object properties: type: type: string enum: - CUISINE - MEAL_TYPE - ESTABLISHMENT_TYPE - AREA - INTERNET - FOOD_RELATED - ACCESSIBILITY - PAYMENT - PRICE - ATMOSPHERE - PARKING - EXTRAS - GOOD_FOR - MENU_DETAILS example: CUISINE tags: type: array items: $ref: '#/components/schemas/TranslatedTagDto' ErrorResponse: type: object properties: errorType: type: string enum: - BAD_REQUEST_ERROR - FORBIDDEN_ERROR - NOT_FOUND_ERROR - METHOD_NOT_ALLOWED_ERROR - NOT_ACCEPTABLE_ERROR - UNSUPPORTED_MEDIA_TYPE_ERROR - START_TIME_NOT_FOUND_ERROR - MERCHANT_ID_INVALID - RESERVATION_CAPACITY_MISSING - RESERVATION_CAPACITY_INVALID - RESERVATION_DATE_TIME_MISSING - RESERVATION_DATE_TIME_INVALID_FORMAT - RESERVATION_EXTRA_INFO_INVALID - RESERVATION_SHOW_POSTCODE - RESERVATION_DATE_TIME_INVALID_IN_THE_PAST - RESERVATION_NO_TABLES_AVAILABLE - RESERVATION_NOT_FOUND - RESERVATION_IN_NON_EDITABLE_STATUS - RESERVATION_WITH_SMART_OFFER_EDIT - RESERVATION_WITH_CCV_EDIT - RESERVATION_IOVOX_OFFER_EDIT - RESERVATION_WITH_PREPAID_MENU_EDIT - RESERVATION_FOR_MERCHANT_WITH_FEEDBACK_TIME - RESERVATION_WALKIN_NOT_EDITABLE - RESERVATION_CUSTOMER_CANNOT_EDIT - RESERVATION_PROMO_CODE_PARAM_INVALID - RESERVATION_PROMO_CODE_NOT_FOUND - RESERVATION_PROMO_CODE_INVALID_DESTINATION - RESERVATION_PROMO_CODE_ALREADY_USED - RESERVATION_PROMO_CODE_INVALID_CAMPAIGN - RESERVATION_PROMO_CODE_DATE_TIME_IN_PAST_OR_FUTURE - RESERVATION_PROMO_CODE_INVALID_DAY_OF_WEEK - RESERVATION_PROMO_CODE_INVALID_AGENT - RESERVATION_PROMO_CODE_INVALID_MERCHANT - RESERVATION_PROMO_CODE_INVALID_PARTNER_VOUCHER - RESERVATION_PROMO_CODE_ALREADY_OWNED_BY_CUSTOMER - RESERVATION_INVITATION_PROMO_CODE_NOT_FIRST_RESERVATION - CCV_SETTINGS_REQUIRED - CCV_CARD_REQUIRED - CCV_SETTINGS_INVALID - CCV_SETTINGS_OFFLINE - CCV_CARD_INVALID - ENQUIRY_INVALID_MIN_COVERS - CUSTOMER_FIRST_NAME_INVALID - CUSTOMER_LAST_NAME_MISSING - CUSTOMER_LAST_NAME_INVALID - CUSTOMER_EMAIL_MISSING - CUSTOMER_EMAIL_INVALID - CUSTOMER_NEWSLETTER_REQUESTED_MISSING - CUSTOMER_PHONE_NUMBER_MISSING - CUSTOMER_COUNTRY_INVALID - CUSTOMER_ID_EXISTS - CUSTOMER_PHONE_NUMBER_INVALID - UNEXPECTED_SERVER_ERROR - PHONE_NUMBER_MISSING - PHONE_NUMBER_INVALID - UUID_CONFLICT - RESERVATION_STATUS_CONFLICT - INVALID_RESERVATION_GUESTS_QUANTITY - MENU_MAPPING_FAILED example: BAD_REQUEST_ERROR errorMessage: type: string example: Window table preferred if available. CustomerDto: type: object properties: firstName: type: string example: Jane lastName: type: string example: Smith profileImage: $ref: '#/components/schemas/ImageDto' TranslatedTagDto: type: object properties: id: type: string format: uuid example: '88086' name: type: string example: Sample Restaurant MerchantReservationDataList: type: object properties: reservations: type: array items: $ref: '#/components/schemas/ReservationData' offset: type: integer format: int32 example: 1 limit: type: integer format: int32 example: 1 LinkRelationDto: type: object properties: href: type: string format: url example: https://www.quandoo.com/place/sample-restaurant method: type: string example: string rel: type: string enum: - DETAILS - WIDGET - WIDGET_DETAILS - GET_MERCHANT - PARENT - SELF - SETTINGS - AVAILABILITY_DAYS - AVAILABILITIES - CREATE_RESERVATION - GET_RESERVATION - UPDATE_RESERVATION - GET_CUSTOMER_RESERVATION - GET_REVIEW - PORTAL_PREORDER_FORM - RESERVATION_CHECKOUT_PAGE - CREDIT_CARD_DETAILS_PAGE - CUSTOMER_EDIT_RESERVATION example: DETAILS ReviewDtoList: type: object required: - reviews properties: reviews: type: array description: Merchant customer review collection. items: $ref: '#/components/schemas/ReviewDto' size: type: integer format: int32 example: 1 offset: type: integer format: int32 example: 1 limit: type: integer format: int32 example: 1 MerchantAddressDto: type: object properties: street: type: string example: string number: type: string example: string zipcode: type: string example: string city: type: string example: string country: type: string example: DE district: type: string example: string securitySchemes: API_TOKEN: type: apiKey name: X-Quandoo-AuthToken in: header