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.

OpenAPI Specification

eat-app-openapi.yml Raw ↑
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