# Test and edit this file at https://editor.swagger.io/
openapi: 3.0.0
info:
version: 1.0.0
title: TableCheck API - Availability V1
description: The Availability API is used to obtain near real-time table availability for online reservation booking.
termsOfService: https://tablecheck.atlassian.net/wiki/spaces/API/pages/61571353/TableCheck+API+Terms+of+Service
externalDocs:
description: Implementation Guide
url: https://tablecheck.atlassian.net/wiki/spaces/API/pages/46301274/Availability+v1
servers:
- url: https://api.tablecheck.com/api/availability/v1/
description: Production (uses live data)
paths:
/shops:
get:
summary: Search for availability across all shops
operationId: listShops
tags:
- shops
parameters:
- name: pax
in: query
description: Desired number of guests for which to search for availability.
required: false
example: 2
schema:
type: number
format: integer
- name: datetime
in: query
description: Desired datetime around which to search for availability.
required: false
example: "2026-07-06T17:00:00.000Z"
schema:
type: string
format: date-time
- name: mini
in: query
description: If true, returns only availablity without including shop info.
required: false
schema:
type: boolean
- name: ids
in: query
description: Array or comma-separated list of specific IDs to return.
required: false
schema:
type: string
format: bson-id
- name: slugs
in: query
description: Array or comma-separated list of specific slugs to return.
required: false
schema:
type: string
- name: page
in: query
description: The zero-based page number. Used for pagination.
required: false
schema:
type: number
format: integer
minimum: 0
- name: per_page
in: query
description: Number of items to return at once. Used for pagination.
required: false
schema:
type: number
format: integer
default: 20
minimum: 1
maximum: 100
- name: sort
in: query
description: The field by which to sort the results. Distance sort is applied only if geo parameters are present.
required: false
schema:
type: string
default: distance
enum:
- distance
- slug
- name
- budget_lunch
- budget_dinner
- name: sort_order
in: query
description: asc or desc.
required: false
schema:
default: asc
enum:
- asc
- desc
type: string
- name: name
in: query
description: Filter by the shop name.
required: false
schema:
type: string
- name: geo_latitude
in: query
description: The latitude of the geocode center point used to evaluate distance query.
required: false
schema:
type: number
format: float
- name: geo_longitude
in: query
description: The longitude of the geocode center point used to evaluate distance query.
required: false
schema:
type: number
format: float
- name: geo_distance
in: query
description: The maximum distance in meters from the geocode center point from which to return results.
required: false
schema:
type: number
format: float
- name: cuisines
in: query
description: Filter by a list of cuisine values (array or comma-separated list)
required: false
schema:
type: string
- name: tags
in: query
description: Filter by a list of tag values (array or comma-separated list)
required: false
schema:
type: string
- name: seat_types
in: query
description: Filters availability by the type of seating, e.g. table, counter, private room, etc. (array or comma-separated list)
required: false
schema:
type: string
enum: ["open","counter","outside","curtain","private","tatami"]
- name: smoking
in: query
description: Filters availability by whether the seating allows smoking or not. If unspecified, both smoking and non-smoking are allowed.
required: false
schema:
type: string
enum:
- smoking
- non_smoking
- name: service_modes
in: query
description: Service mode selection of dining, pickup, etc. (array or comma-separated list)
required: false
schema:
type: string
enum:
- dining
- pickup
- delivery
- voucher
- name: budget_lunch_min
in: query
description: Minimum of lunch budget range filter.
required: false
schema:
type: number
format: float
minimum: 0
- name: budget_lunch_max
in: query
description: Maximum of lunch budget range filter.
required: false
schema:
type: number
format: float
minimum: 0
- name: budget_dinner_min
in: query
description: Minimum of dinner budget range filter.
required: false
schema:
type: number
format: float
minimum: 0
- name: budget_dinner_max
in: query
description: Maximum of dinner budget range filter.
required: false
schema:
type: number
format: float
minimum: 0
- name: address_city
in: query
description: Filter by the shop's address city, ward, or municipality.
required: false
schema:
type: string
- name: address_region
in: query
description: Filter by the shop's address region, state, or province.
required: false
schema:
type: string
- name: address_postal_code
in: query
description: Filter by the shop's address postal code.
required: false
schema:
type: string
- name: address_country
in: query
description: Filter by the shop's address country.
required: false
schema:
type: string
- name: search_after
in: query
description: Use for pagination. Set this value to obtain the next page of results.
required: false
schema:
type: string
- $ref: '#/components/parameters/IncludeFields'
- $ref: '#/components/parameters/ExcludeFields'
responses:
'200':
description: A paged array of shops
content:
application/json:
schema:
$ref: "#/components/schemas/ShopsListResponse"
default:
description: Error response
content:
application/json:
schema:
$ref: "#/components/schemas/Error"
/shops/{shop_id}:
get:
summary: Fetch info of a specific shop. Does not include availability.
operationId: showShopById
tags:
- shops
parameters:
- name: shop_id
in: path
required: true
description: The id or slug of the shop to retrieve
schema:
type: string
- $ref: '#/components/parameters/IncludeFields'
- $ref: '#/components/parameters/ExcludeFields'
responses:
'200':
description: Expected response to a valid request
content:
application/json:
schema:
$ref: "#/components/schemas/ShopShowResponse"
default:
description: Error response
content:
application/json:
schema:
$ref: "#/components/schemas/Error"
/timetable/{shop_id}:
get:
summary: Fetch availability timetable of a specific shop.
operationId: showTimetableByShopId
tags:
- timetable
parameters:
- name: shop_id
in: path
required: true
description: The id or slug of the shop timetable to retrieve
schema:
type: string
- name: pax
in: query
description: Desired number of guests for which to search for availability.
required: false
example: 2
schema:
type: number
format: integer
- name: datetime
in: query
description: Desired datetime around which to search for availability.
required: false
example: "2026-07-06T17:00:00.000Z"
schema:
type: string
format: date-time
- name: datetime_min
in: query
description: Lower-bound datetime for range query.
required: false
example: "2026-07-06T16:00:00.000Z"
schema:
type: string
format: date-time
- name: datetime_max
in: query
description: Upper-bound datetime for range query.
required: false
example: "2026-07-06T16:00:00.000Z"
schema:
type: string
format: date-time
- name: date
in: query
description: Desired date in which to search availability.
required: false
example: "2026-07-06"
schema:
type: string
format: date
- name: date_min
in: query
description: Lower-bound date for range query.
required: false
example: "2026-07-06"
schema:
type: string
format: date
- name: date_max
in: query
description: Upper-bound date for range query.
required: false
example: "2026-07-08"
schema:
type: string
format: date
- name: time
in: query
description: Desired time of day in which to search availability. Can be specified as time string or integer seconds.
required: false
example: '17:00'
schema:
type: string
format: time-of-day
- name: time_min
in: query
description: Lower-bound time of day for range query. Can be specified as time string or integer seconds.
required: false
example: '15:00'
schema:
type: string
format: time-of-day
- name: time_max
in: query
description: Upper-bound time of day for range query. Can be specified as time string or integer seconds.
required: false
example: '20:00'
schema:
type: string
format: time-of-day
- name: seat_types
in: query
description: Filters availability by the type of seating, e.g. table, counter, private room, etc. (array or comma-separated list)
required: false
schema:
type: string
enum: ["open","counter","outside","curtain","private","tatami"]
- name: smoking
in: query
description: Filters availability by whether the seating allows smoking or not. If unspecified, both smoking and non-smoking are allowed.
required: false
schema:
type: string
enum:
- smoking
- non_smoking
- name: service_category_id
in: query
required: false
description: The id of the service category
schema:
type: string
- $ref: '#/components/parameters/IncludeFields'
- $ref: '#/components/parameters/ExcludeFields'
responses:
'200':
description: Expected response to a valid request
content:
application/json:
schema:
$ref: "#/components/schemas/TimetableShowResponse"
default:
description: Error response
content:
application/json:
schema:
$ref: "#/components/schemas/Error"
/calendar/{shop_id}:
get:
summary: Fetch availability calendar of a specific shop.
operationId: showCalendarByShopId
tags:
- calendar
parameters:
- name: shop_id
in: path
required: true
description: The id or slug of the shop calendar to retrieve
schema:
type: string
- name: pax
in: query
description: Desired number of guests for which to search for availability.
required: false
example: 2
schema:
type: number
format: integer
- name: datetime
in: query
description: Desired datetime around which to search for availability.
required: false
example: "2026-07-06T17:00:00.000Z"
schema:
type: string
format: date-time
- name: datetime_min
in: query
description: Lower-bound datetime for range query.
required: false
example: "2026-07-06T16:00:00.000Z"
schema:
type: string
format: date-time
- name: datetime_max
in: query
description: Upper-bound datetime for range query.
required: false
example: "2026-07-06T16:00:00.000Z"
schema:
type: string
format: date-time
- name: date
in: query
description: Desired date in which to search availability.
required: false
example: "2026-07-06"
schema:
type: string
format: date
- name: date_min
in: query
description: Lower-bound date for range query.
required: false
example: "2026-07-06"
schema:
type: string
format: date
- name: date_max
in: query
description: Upper-bound date for range query.
required: false
example: "2026-07-08"
schema:
type: string
format: date
- name: time
in: query
description: Desired time of day in which to search availability. Can be specified as time string or integer seconds.
required: false
example: '17:00'
schema:
type: string
format: time-of-day
- name: time_min
in: query
description: Lower-bound time of day for range query. Can be specified as time string or integer seconds.
required: false
example: '15:00'
schema:
type: string
format: time-of-day
- name: time_max
in: query
description: Upper-bound time of day for range query. Can be specified as time string or integer seconds.
required: false
example: '20:00'
schema:
type: string
format: time-of-day
- name: seat_types
in: query
description: Filters availability by the type of seating, e.g. table, counter, private room, etc. (array or comma-separated list)
required: false
schema:
type: string
enum: ["open","counter","outside","curtain","private","tatami"]
- name: smoking
in: query
description: Filters availability by whether the seating allows smoking or not. If unspecified, both smoking and non-smoking are allowed.
required: false
schema:
type: string
enum:
- smoking
- non_smoking
- name: service_category_id
in: query
required: false
description: The id of the service category
schema:
type: string
- $ref: '#/components/parameters/IncludeFields'
- $ref: '#/components/parameters/ExcludeFields'
responses:
'200':
description: Expected response to a valid request
content:
application/json:
schema:
$ref: "#/components/schemas/CalendarShowResponse"
default:
description: Error response
content:
application/json:
schema:
$ref: "#/components/schemas/Error"
/availability_tables/{shop_id}:
get:
summary: Fetch availability tables of a specific shop.
tags:
- availability
parameters:
- name: shop_id
in: path
required: true
description: The id or slug of the shop to retrieve
schema:
type: string
- name: pax
in: query
required: true
description: Desired number of guests for which to search for availability.
example: 2
schema:
type: number
format: integer
- name: datetime
in: query
required: true
description: Desired datetime around which to search for availability.
example: "2026-07-06T17:00:00.000Z"
schema:
type: string
format: date-time
- name: seat_types
in: query
description: Filters availability by the type of seating, e.g. table, counter, private room, etc. (array or comma-separated list)
required: false
schema:
type: string
enum: ["open","counter","outside","curtain","private","tatami"]
- name: service_category_id
in: query
required: false
description: The id of the service category
schema:
type: string
- $ref: '#/components/parameters/IncludeFields'
- $ref: '#/components/parameters/ExcludeFields'
responses:
'200':
description: Expected response to a valid request
content:
application/json:
schema:
$ref: "#/components/schemas/AvailabilityTableShowResponse"
default:
description: Error response
content:
application/json:
schema:
$ref: "#/components/schemas/Error"
components:
securitySchemes:
ApiKeyAuth:
type: apiKey
in: header
name: AUTHORIZATION
parameters:
IncludeFields:
name: include_fields
in: query
description: Comma-separated list of fields to include in the response (whitelist). If specified, only the listed fields will be returned. Supports dot notation for nested fields.
required: false
schema:
type: string
example: id,name,addresses.city
ExcludeFields:
name: exclude_fields
in: query
description: Comma-separated list of fields to exclude from the response (blacklist). All fields except the given ones will be returned. Supports dot notation for nested fields.
required: false
schema:
type: string
example: created_at,socials.username
schemas:
Shop:
required:
- id
- name_translations
properties: &SHOP_PROPERTIES
id:
type: string
format: bson-id
example: ae5355ca1fd337ed5d6893e2
slug:
type: string
example: my-shop-slug
name_translations:
type: object
format: translations
example:
en: "Paris Cafe"
fr: "Café de Paris"
ja: "カフェデパリ"
alt_name:
type: string
example: "カフェデパリ"
location_name_translations:
type: object
format: translations
example:
en: "Hotel Kyoto"
fr: "Hôtel Kyoto"
ja: "ホテル京都"
alt_location_name:
type: string
example: "ホテルキョウト"
latitude:
type: number
format: float
example: 35.0116
longitude:
type: number
format: float
example: 135.7680
google_place_ref:
type: string
example: "ChIJ39ZjD-GLGGARBF5Aq0l7iPE"
google_place_cid:
description: "DEPRECATED. Use google_place_ref instead."
type: string
example: "Use-google_place_ref-instead"
country:
type: string
format: country
example: JP
currency:
type: string
format: currency
example: JPY
time_zone:
type: string
format: time-zone
example: Asia/Tokyo
phone:
type: string
format: phone-e164
example: "+81355650112"
phone_natl:
type: string
format: phone-national
example: "03-5565-0112"
homepage_url:
type: string
format: url
example: 'https://www.myrestaurant.com/ja'
homepage_url_translations:
type: object
format: translations
example:
en: 'https://www.myrestaurant.com/en'
ja: 'https://www.myrestaurant.com/ja'
tablecheck_shop_url:
type: string
format: url
example: https://www.tablecheck.com/my-shop-slug
tablecheck_booking_url:
type: string
format: url
example: https://www.tablecheck.com/shops/my-shop-slug/reserve
tags:
type: array
example:
- outdoor
- quiet
items:
type: string
cuisines:
type: array
example:
- sushi
- tempura
items:
type: string
budget_lunch:
type: string
format: float
example: "10000.0"
budget_dinner:
type: string
format: float
example: "10000.0"
updated_at:
type: string
format: date-time
content_title_translations:
type: object
format: translations
description: Short catchphrase for the restaurant.
example:
en: "A truly great restuarant"
ja: "本当にすごいレストランです"
content_body_translations:
type: object
format: translations
description: Paragraph of content about the restaurant.
example:
en: "I love this restuarant!"
ja: "このレストラン大好きです!"
show_pax_senior:
description: Whether the venue prefers to allow users to select the "pax_senior" field (number of elderly persons in the party.)
type: boolean
show_pax_child:
description: Whether the venue prefers to allow users to select the "pax_child" field (number of children in the party.)
type: boolean
show_pax_baby:
description: Whether the venue prefers to allow users to select the "pax_baby" field (number of babies in the party.)
type: boolean
pax_senior_age_min:
description: The minimum age for a person to be considered a senior.
type: number
format: integer
example: 65
pax_child_age_max:
description: The maximum age for a person to be considered a child.
type: number
format: integer
example: 12
pax_baby_age_max:
description: The maximum age for a person to be considered a baby.
type: number
format: integer
example: 5
service_categories:
description: The ServiceCategories of the Shop.
type: array
items:
'$ref': "#/components/schemas/ServiceCategory"
address:
$ref: "#/components/schemas/Address"
alt_address:
$ref: "#/components/schemas/Address"
images:
description: List of images depicting the shop. Consistent sizing of images is not guaranteed.
type: array
items:
$ref: "#/components/schemas/ImageEmbed"
image_url:
type: string
format: url
description: (Deprecated) Please use "images" field instead.
Address:
properties:
street:
type: string
example: "2-14-5 Ginza"
street2:
type: string
example: "Dai-27 Chuo Bldg 4F"
city:
type: string
example: "Chuo-ku"
region:
type: string
example: "Tokyo"
postal_code:
type: string
example: "104-0061"
country:
type: string
example: "JP"
ServiceCategory:
properties:
id:
description: Identifer for the ServiceCategory object.
type: string
format: bson-id
example: '5e281bfa7df93f63e0000003'
name_translations:
description: The name of the ServiceCategory.
type: array
example:
en: Sushi Bar
ja: 寿司バー
description_translations:
description: The description of the ServiceCategory.
type: array
example:
en: 'This is the sushi bar at our restaurant.'
ja: 当店の特設寿司バーで至福のひとときをお楽しみください。
image:
description: Image depicting the ServiceCategory. Consistent sizing of images is not guaranteed.
$ref: "#/components/schemas/ImageEmbed"
image_url:
description: (Deprecated) Please use "image" field instead.
type: string
format: url
ImageEmbed:
properties:
id:
description: The database ID of the Image.
type: string
format: bson-id
url:
description: The URL of the image as a large size JPEG.
type: string
format: url
example: https://cdn1.tablecheck.com/images/92a543f5085ea8b1ffbe000a/images/original/image.jpg
dimensions:
description: The dimensions of the image as a large size JPEG.
type: array
example: [1280, 960]
content_type:
description: The MIME content type of the image.
type: string
example: image/jpeg
fingerprint:
description: The fingerprint of the image used for deduplication.
type: string
example: af6515a29e04ac61d4379a3181140647
image_variants:
description: A list of image size variants scaled to different sizes. Note that "original" size variant may be a format other than JPEG.
type: array
items:
$ref: "#/components/schemas/ImageVariant"
tags:
description: Identifier tags associated with the image.
type: array
example: [primary]
created_at:
type: string
format: date-time
ImageVariant:
properties:
variant:
type: string
enum: ["original","large","medium","small"]
url:
type: string
format: url
example: https://cdn1.tablecheck.com/images/92a543f5085ea8b1ffbe000a/images/original/image.jpg
dimensions:
type: array
example: [2000, 1500]
content_type:
description: The MIME content type of the image variant.
type: string
example: image/jpeg
ShopsListResponse:
type: object
properties:
shops:
type: array
items:
$ref: "#/components/schemas/ShopAvailability"
pagination:
$ref: "#/components/schemas/PaginationData"
ShopShowResponse:
type: object
properties:
shop:
$ref: "#/components/schemas/Shop"
ShopAvailability:
properties:
availability:
type: array
example:
- "2018-11-10T02:30:00.000Z"
- "2018-11-10T02:45:00.000Z"
- "2018-11-10T05:30:00.000Z"
availability_cached_at:
type: string
format: date-time
<<: *SHOP_PROPERTIES
TimetableShowResponse:
type: object
properties:
timetable:
type: object
properties:
id:
type: string
format: bson-id
example: ae5355ca1fd337ed5d6893e2
slug:
type: string
example: my-shop-slug
availability:
type: array
items:
format: date-time
example:
- "2018-11-10T02:30:00.000Z"
- "2018-11-10T02:45:00.000Z"
- "2018-11-10T05:30:00.000Z"
availability_cached_at:
type: string
format: date-time
CalendarShowResponse:
type: object
properties:
calendar:
type: object
properties:
id:
type: string
format: bson-id
example: ae5355ca1fd337ed5d6893e2
slug:
type: string
example: my-shop-slug
availability:
type: array
items:
format: date
example:
- "2018-11-10"
- "2018-11-11"
- "2018-11-13"
availability_cached_at:
type: string
format: date-time
AvailabilityTableShowResponse:
type: object
properties:
timetable:
type: object
properties:
id:
type: string
format: bson-id
example: ae5355ca1fd337ed5d6893e2
slug:
type: string
example: my-shop-slug
tables:
type: array
items:
type: string
format: bson-id
example:
- 65e963e36ff2a92b0fb1fcfd
- 65e963756ff2a92b0fb1fcf6
table_combos:
type: array
items:
type: string
format: bson-id
example:
- 65e963e36ff2a92b0fb1fcfd
- 65e963756ff2a92b0fb1fcf6
PaginationData:
type: object
properties:
search_after:
description: The value to use as the search_after parameter for the next page of results.
type: string
page:
type: number
format: integer
example: 3
per_page:
type: number
format: integer
example: 100
page_count:
type: number
format: integer
example: 8
item_count:
type: number
format: integer
example: 742
Error:
required:
- errors
properties:
errors:
type: array
items:
type: object
properties:
code:
type: string
example: not_found
message:
type: string
example: Item not found
security:
- ApiKeyAuth: []