<img height="1" width="1" style="display:none" src="https://www.facebook.com/tr?id=345344538922740&amp;ev=PageView&amp;noscript=1">
Skip to content
  • There are no suggestions because the search field is empty.

How to use the Eat App Concierge API to sync restaurant and group data

This guide will help you understand how to check restaurant availability and post reservations using the concierge API.

Overview

The Eat Concierge API allows restaurants, restaurant vendors, and groups to manage booking and access data across Eat App’s table management system.

The system can only be accessed by Concierge Users using a provided API key (Bearer token).

For the full reference, see the Concierge API docs (Postman):
https://documenter.getpostman.com/view/6372626/SWLcc85D#39df6cae-4370-42ee-b948-33ef95fd1548:~:text=POST-,Availability,-Reservations

Happy integrating!

What are the steps in this guide?

  1. Configure host +api_token (note: host is usually https://api.eat-sandbox.co for sandbox and https://api.eatapp.co for production)
  2. GET /resources (cache)
  3. GET /groups → choose group_id
  4. GET /restaurants with X-Group-ID → choose restaurant_id
  5. POST /availability/range → show slots
  6. POST /reservations with idempotency_token
  7. PATCH /reservations/:id_or_key for changes/cancel
  8. Enable webhooks for real-time updates

Eat Concierge API: Simple Integration Guide

Purpose: Help restaurant groups get availability, read/write reservations, and manage guests. Webhooks are supported using the same JSON structure as API responses.


1) What you need from Eat App

  1. API token (for a Concierge user)
  2. API host (base URL), set as host
  3. Access to one or more Groups and their Restaurants (group_id, restaurant_id)

2) Base URL + Authentication (every request)

Base URL:

[host]/concierge/v2/...

Required headers:

Header Value Notes
Authorization Bearer [api_token] Required
Content-Type application/json Required for POST/PATCH
Accept-Encoding gzip Optional

Tip: Use an idempotency_token when creating reservations so retries don’t create duplicates.

3) Scoping: Group vs Restaurant

Many endpoints require scope. Use one of these headers:

Scope Header When to use
Group X-Group-ID: [group_id] Listing restaurants within a group
Restaurant X-Restaurant-ID: [restaurant_id] Availability, reservations, guests, tables, rooms, payments, etc.

If you can’t set headers, you can usually pass group_id / restaurant_id as query params instead.

4) Bootstrap sequence (do this first)

Step 4.1 — Load reference data

GET [host]/concierge/v2/resources

Use this to populate dropdowns and validate statuses/tags.

Step 4.2 — List groups you can access

GET [host]/concierge/v2/groups

Select the group_id you want to operate on.

Step 4.3 — List restaurants in the group

GET [host]/concierge/v2/restaurants

Headers: X-Group-ID: [group_id]

Pick a restaurant_id to scope availability/reservations/guests.

5) Availability: get bookable times

POST [host]/concierge/v2/availability/range

Request example:

{
"restaurant_id": "[restaurant_id]",
"first_seating": "2026-03-01T00:00",
"last_seating": "2026-03-01T23:59",
"only_available": true
}

What you get back: a list of “slots”. Use the slot time as start_time when creating a reservation.

6) Create a reservation

POST [host]/concierge/v2/reservations

Headers: X-Restaurant-ID: [restaurant_id]

Minimal request example:

{
"first_name": "John",
"last_name": "Doe",
"phone": "+971555555551",
"email": "john@doe.co",
"covers": 3,
"start_time": "2026-03-01T19:30:00",
"idempotency_token": "UUID-GUID-HERE"
}

Optional fields you may support:

  • notes
  • custom_fields (key/value)
  • tagscustom_tagsconcierge_tags
  • payment/deposit info (if required by restaurant)

7) Read reservations

List reservations

GET [host]/concierge/v2/reservations?start_time_on=YYYY-MM-DD

Headers: X-Restaurant-ID: [restaurant_id]

Example:

GET [host]/concierge/v2/reservations?start_time_on=2026-03-01

Common filters: start_time_onstatuscreated_at_gte/created_at_lteupdated_at_gte/updated_at_lteguest_idconcierge_tags.

Get a single reservation

GET [host]/concierge/v2/reservations/:id_or_key

8) Update or cancel a reservation

PATCH [host]/concierge/v2/reservations/:id_or_key

Headers: X-Restaurant-ID: [restaurant_id]

Example:

{
"status": "canceled",
"notes": "Guest requested cancellation",
"concierge_tags": ["vip", "call-center"]
}

Note: Some completion states may lock edits. Some restaurants may enforce a “change window”.

9) Guests: search and view profiles

Search guests

GET [host]/concierge/v2/guests?q=John

Headers: X-Restaurant-ID: [restaurant_id]

Get a guest

GET [host]/concierge/v2/guests/:guest_id

10) Webhooks: event-driven sync

Webhooks send the same JSON structure as the API. Recommended handling:

  1. Verify authenticity (signature/secret if provided).
  2. Store the raw payload (for debugging/replay).
  3. Route by data.type + data.id (e.g., reservation, guest).
  4. Make processing idempotent (store event IDs or use type + id + updated_at).
  5. If needed, refresh source-of-truth using:
    • GET /reservations/:id_or_key
    • GET /guests/:guest_id