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¢erPoint=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