Eat App Concierge Availability API
Query bookable time slots for a restaurant across a date range via the Concierge availability range endpoint, returning the slots a reservation can be placed into. Endpoint confirmed from public Concierge docs.
Query bookable time slots for a restaurant across a date range via the Concierge availability range endpoint, returning the slots a reservation can be placed into. Endpoint confirmed from public Concierge docs.
openapi: 3.0.3
info:
title: Eat App Platform API
description: >-
Eat App is a restaurant reservation and table management platform. This
document models its two documented, partner/key-gated REST surfaces plus a
small honestly-modeled table-management surface:
1. Partner API (base /partners/v2) - for booking channels to read
availability and post reservations.
2. Concierge API (base /concierge/v2) - for restaurants, vendors, and groups
to sync reservations, guests, availability, and reference data (resources,
groups, restaurants). Requests are scoped with X-Group-ID and X-Restaurant-ID
headers and can be created idempotently via an idempotency_token.
3. Tables and Floor Plans (base /concierge/v2) - MODELED. No public tables or
floorplan endpoints are documented; these operations are honestly modeled on
Eat App's documented resource conventions and should be confirmed with a
partner API key before use.
All responses follow a JSON:API-style structure (data objects carrying id,
type, and attributes). Every request is authenticated with a Bearer token
(the API key Eat App issues to a partner or Concierge user). The sandbox host
is https://api.eat-sandbox.co and production is https://api.eatapp.co.
Endpoints are rate limited to roughly 60 requests per minute.
version: '2.0'
contact:
name: Eat App
url: https://eatapp.co
servers:
- url: https://api.eatapp.co
description: Production
- url: https://api.eat-sandbox.co
description: Sandbox
security:
- bearerAuth: []
tags:
- name: Partner - Availability
description: Partner API real-time availability lookups.
- name: Partner - Reservations
description: Partner API reservation creation.
- name: Concierge - Reference
description: Concierge bootstrap data - resources, groups, restaurants.
- name: Concierge - Availability
description: Concierge bookable time-slot lookups over a date range.
- name: Concierge - Reservations
description: Concierge reservation create, list, get, and update/cancel.
- name: Concierge - Guests
description: Concierge guest search and profile retrieval.
- name: Tables and Floor Plans (Modeled)
description: >-
Honestly-modeled table and floor-plan operations. Not documented in the
public Partner or Concierge references; confirm before use.
paths:
/partners/v2/availability:
get:
operationId: getPartnerAvailability
tags:
- Partner - Availability
summary: Get availability (Partner)
description: >-
Returns bookable availability for a restaurant on a given date. Confirmed
from the public Partner API documentation.
parameters:
- name: restaurant_id
in: query
required: true
schema:
type: string
description: The Eat App restaurant identifier.
- name: date
in: query
required: true
schema:
type: string
format: date
description: The date to check availability for (YYYY-MM-DD).
- name: guests
in: query
required: false
schema:
type: integer
description: Party size to check availability for.
responses:
'200':
description: A JSON:API document of available time slots.
content:
application/json:
schema:
$ref: '#/components/schemas/AvailabilityResponse'
'401':
$ref: '#/components/responses/Unauthorized'
'429':
$ref: '#/components/responses/RateLimited'
/partners/v2/reservations:
post:
operationId: createPartnerReservation
tags:
- Partner - Reservations
summary: Post a reservation (Partner)
description: >-
Creates a reservation for a restaurant on behalf of a booking channel.
Confirmed from the public Partner API documentation.
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/PartnerReservationInput'
responses:
'201':
description: The created reservation.
content:
application/json:
schema:
$ref: '#/components/schemas/ReservationResponse'
'401':
$ref: '#/components/responses/Unauthorized'
'422':
$ref: '#/components/responses/ValidationError'
'429':
$ref: '#/components/responses/RateLimited'
/concierge/v2/resources:
get:
operationId: getConciergeResources
tags:
- Concierge - Reference
summary: Get reference data
description: >-
Loads reference data used for dropdowns and validation (e.g. reservation
statuses, sources, tags). Confirmed from the public Concierge docs.
responses:
'200':
description: A JSON:API document of reference resources.
content:
application/json:
schema:
$ref: '#/components/schemas/GenericResponse'
'401':
$ref: '#/components/responses/Unauthorized'
/concierge/v2/groups:
get:
operationId: listConciergeGroups
tags:
- Concierge - Reference
summary: List accessible groups
description: Lists the groups the authenticated Concierge user can access.
responses:
'200':
description: A JSON:API document of groups.
content:
application/json:
schema:
$ref: '#/components/schemas/GenericResponse'
'401':
$ref: '#/components/responses/Unauthorized'
/concierge/v2/restaurants:
get:
operationId: listConciergeRestaurants
tags:
- Concierge - Reference
summary: List restaurants in a group
description: >-
Lists restaurants within a group. Requires the X-Group-ID header.
Confirmed from the public Concierge docs.
parameters:
- $ref: '#/components/parameters/GroupIdHeader'
responses:
'200':
description: A JSON:API document of restaurants.
content:
application/json:
schema:
$ref: '#/components/schemas/GenericResponse'
'401':
$ref: '#/components/responses/Unauthorized'
/concierge/v2/availability/range:
post:
operationId: getConciergeAvailabilityRange
tags:
- Concierge - Availability
summary: Query availability over a date range
description: >-
Returns bookable time slots for a restaurant across a date range.
Requires the X-Restaurant-ID header. Confirmed from the public Concierge
docs.
parameters:
- $ref: '#/components/parameters/RestaurantIdHeader'
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/AvailabilityRangeInput'
responses:
'200':
description: A JSON:API document of available slots.
content:
application/json:
schema:
$ref: '#/components/schemas/AvailabilityResponse'
'401':
$ref: '#/components/responses/Unauthorized'
'422':
$ref: '#/components/responses/ValidationError'
/concierge/v2/reservations:
get:
operationId: listConciergeReservations
tags:
- Concierge - Reservations
summary: List reservations
description: >-
Lists reservations for a restaurant with filtering options. Requires the
X-Restaurant-ID header.
parameters:
- $ref: '#/components/parameters/RestaurantIdHeader'
- name: date
in: query
required: false
schema:
type: string
format: date
description: Filter reservations by date.
- name: status
in: query
required: false
schema:
type: string
description: Filter reservations by status.
responses:
'200':
description: A JSON:API document of reservations.
content:
application/json:
schema:
$ref: '#/components/schemas/ReservationListResponse'
'401':
$ref: '#/components/responses/Unauthorized'
post:
operationId: createConciergeReservation
tags:
- Concierge - Reservations
summary: Create a reservation
description: >-
Creates a new reservation. Requires the X-Restaurant-ID header and an
idempotency_token to safely retry. Confirmed from the public Concierge
docs.
parameters:
- $ref: '#/components/parameters/RestaurantIdHeader'
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/ConciergeReservationInput'
responses:
'201':
description: The created reservation.
content:
application/json:
schema:
$ref: '#/components/schemas/ReservationResponse'
'401':
$ref: '#/components/responses/Unauthorized'
'422':
$ref: '#/components/responses/ValidationError'
/concierge/v2/reservations/{id_or_key}:
parameters:
- $ref: '#/components/parameters/IdOrKey'
- $ref: '#/components/parameters/RestaurantIdHeader'
get:
operationId: getConciergeReservation
tags:
- Concierge - Reservations
summary: Get a reservation
description: Retrieves a single reservation by id or key.
responses:
'200':
description: The requested reservation.
content:
application/json:
schema:
$ref: '#/components/schemas/ReservationResponse'
'401':
$ref: '#/components/responses/Unauthorized'
'404':
$ref: '#/components/responses/NotFound'
patch:
operationId: updateConciergeReservation
tags:
- Concierge - Reservations
summary: Update or cancel a reservation
description: >-
Modifies an existing reservation or cancels it (by setting its status).
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/ConciergeReservationInput'
responses:
'200':
description: The updated reservation.
content:
application/json:
schema:
$ref: '#/components/schemas/ReservationResponse'
'401':
$ref: '#/components/responses/Unauthorized'
'404':
$ref: '#/components/responses/NotFound'
'422':
$ref: '#/components/responses/ValidationError'
/concierge/v2/guests:
get:
operationId: searchConciergeGuests
tags:
- Concierge - Guests
summary: Search guests
description: >-
Searches the guest CRM by query parameter. Requires the X-Restaurant-ID
header. Confirmed from the public Concierge docs.
parameters:
- $ref: '#/components/parameters/RestaurantIdHeader'
- name: query
in: query
required: false
schema:
type: string
description: Free-text guest search (name, phone, email).
responses:
'200':
description: A JSON:API document of matching guests.
content:
application/json:
schema:
$ref: '#/components/schemas/GuestListResponse'
'401':
$ref: '#/components/responses/Unauthorized'
/concierge/v2/guests/{guest_id}:
get:
operationId: getConciergeGuest
tags:
- Concierge - Guests
summary: Get a guest
description: Retrieves an individual guest profile by id.
parameters:
- name: guest_id
in: path
required: true
schema:
type: string
- $ref: '#/components/parameters/RestaurantIdHeader'
responses:
'200':
description: The requested guest profile.
content:
application/json:
schema:
$ref: '#/components/schemas/GuestResponse'
'401':
$ref: '#/components/responses/Unauthorized'
'404':
$ref: '#/components/responses/NotFound'
/concierge/v2/tables:
get:
operationId: listTables
tags:
- Tables and Floor Plans (Modeled)
summary: List tables (MODELED)
description: >-
MODELED, not documented. Lists the tables configured for a restaurant.
Confirm the real path and shape with a partner API key before use.
parameters:
- $ref: '#/components/parameters/RestaurantIdHeader'
responses:
'200':
description: A JSON:API document of tables.
content:
application/json:
schema:
$ref: '#/components/schemas/GenericResponse'
'401':
$ref: '#/components/responses/Unauthorized'
/concierge/v2/tables/{table_id}:
get:
operationId: getTable
tags:
- Tables and Floor Plans (Modeled)
summary: Get a table (MODELED)
description: MODELED, not documented. Retrieves a single table by id.
parameters:
- name: table_id
in: path
required: true
schema:
type: string
- $ref: '#/components/parameters/RestaurantIdHeader'
responses:
'200':
description: The requested table.
content:
application/json:
schema:
$ref: '#/components/schemas/GenericResponse'
'401':
$ref: '#/components/responses/Unauthorized'
'404':
$ref: '#/components/responses/NotFound'
/concierge/v2/floor_plans:
get:
operationId: listFloorPlans
tags:
- Tables and Floor Plans (Modeled)
summary: List floor plans (MODELED)
description: >-
MODELED, not documented. Lists the floor plans (dining areas / room
layouts) configured for a restaurant. Confirm before use.
parameters:
- $ref: '#/components/parameters/RestaurantIdHeader'
responses:
'200':
description: A JSON:API document of floor plans.
content:
application/json:
schema:
$ref: '#/components/schemas/GenericResponse'
'401':
$ref: '#/components/responses/Unauthorized'
components:
securitySchemes:
bearerAuth:
type: http
scheme: bearer
description: >-
Bearer token (the API key Eat App issues to a partner or Concierge user).
Sent as Authorization: Bearer <api_token>.
parameters:
GroupIdHeader:
name: X-Group-ID
in: header
required: true
schema:
type: string
description: Scopes the request to a specific group.
RestaurantIdHeader:
name: X-Restaurant-ID
in: header
required: true
schema:
type: string
description: Scopes the request to a specific restaurant.
IdOrKey:
name: id_or_key
in: path
required: true
schema:
type: string
description: The reservation id or reservation key.
responses:
Unauthorized:
description: Missing or invalid Bearer token.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
NotFound:
description: The requested resource was not found.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
ValidationError:
description: The request body failed validation.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
RateLimited:
description: Too many requests (approximately 60 requests per minute).
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
schemas:
ResourceObject:
type: object
properties:
id:
type: string
type:
type: string
attributes:
type: object
additionalProperties: true
GenericResponse:
type: object
properties:
data:
oneOf:
- $ref: '#/components/schemas/ResourceObject'
- type: array
items:
$ref: '#/components/schemas/ResourceObject'
AvailabilityResponse:
type: object
properties:
data:
type: array
items:
type: object
properties:
id:
type: string
type:
type: string
example: availability
attributes:
type: object
properties:
time:
type: string
available:
type: boolean
preference_id:
type: string
AvailabilityRangeInput:
type: object
required:
- start_date
- end_date
- guests
properties:
start_date:
type: string
format: date
end_date:
type: string
format: date
guests:
type: integer
PartnerReservationInput:
type: object
required:
- restaurant_id
- date
- time
- guests
properties:
restaurant_id:
type: string
date:
type: string
format: date
time:
type: string
guests:
type: integer
preference_id:
type: string
guest:
$ref: '#/components/schemas/GuestInput'
ConciergeReservationInput:
type: object
properties:
idempotency_token:
type: string
description: Required on create to make the request safely retryable.
date:
type: string
format: date
time:
type: string
guests:
type: integer
status:
type: string
description: Set to a cancelled status to cancel the reservation.
preference_id:
type: string
guest:
$ref: '#/components/schemas/GuestInput'
GuestInput:
type: object
properties:
first_name:
type: string
last_name:
type: string
phone:
type: string
email:
type: string
ReservationResponse:
type: object
properties:
data:
$ref: '#/components/schemas/ResourceObject'
ReservationListResponse:
type: object
properties:
data:
type: array
items:
$ref: '#/components/schemas/ResourceObject'
GuestResponse:
type: object
properties:
data:
$ref: '#/components/schemas/ResourceObject'
GuestListResponse:
type: object
properties:
data:
type: array
items:
$ref: '#/components/schemas/ResourceObject'
Error:
type: object
properties:
errors:
type: array
items:
type: object
properties:
status:
type: string
title:
type: string
detail:
type: string