Tableo Restaurant API
Bookings

Create Booking

Create a new booking for the restaurant associated with the bearer token.

This endpoint is protected by RMS idempotency middleware. You must send an Idempotency-Key header matching ^[a-zA-Z0-9-]{1,64}$.

RMS caches successful JSON responses for 24 hours per bearer token + idempotency key. When the same request is replayed with a cached result, RMS returns the cached response and adds the Idempotent-Replayed: true response header.

POST
/api/restaurant/bookings

Authorization

bearerAuth
AuthorizationBearer <token>

Supports two token types:

  1. Restaurant tokens — API tokens with restaurant-api ability, issued per restaurant.
  2. User tokens — Personal access tokens with mobile-access ability (e.g. for the mobile app). When managing multiple restaurants, include X-Restaurant-Id: <id> header.

In: header

Header Parameters

Idempotency-Key*string

Unique idempotency key for this booking creation request. Must be 1-64 characters and contain only letters, numbers, and hyphens.

Match^[a-zA-Z0-9-]{1,64}$
Length1 <= length <= 64

Request Body

application/json

TypeScript Definitions

Use the request body type in TypeScript.

Response Body

application/json

application/json

application/json

application/json

application/json

curl -X POST "https://devrms.tabdevx.com/api/restaurant/bookings" \  -H "Idempotency-Key: string" \  -H "Content-Type: application/json" \  -d '{    "date": "2026-03-18T19:00:00",    "adults": 4,    "children": 1,    "dining_area_id": 10,    "comment": "Window seat",    "patron": {      "first_name": "John",      "last_name": "Doe",      "email": "john@example.com",      "mobile_number": "+35612345678",      "mobile_prefix": "+356"    }  }'
{
  "data": {
    "id": 123,
    "reference": "API-ABC123",
    "status": "confirmed",
    "date": "2026-03-18T19:00:00+00:00",
    "end_time": "2026-03-18T21:00:00+00:00",
    "adults": 4,
    "no_of_adults": 4,
    "children": 1,
    "no_of_children": 1,
    "comment": "Window seat",
    "dining_area": {
      "id": 10,
      "name": "Main Hall"
    },
    "tables": [
      {
        "id": 1,
        "name": "T1",
        "covers": 4
      },
      {
        "id": 2,
        "name": "T2",
        "covers": 2
      }
    ],
    "patron": {
      "name": "John Doe",
      "email": "john@example.com",
      "mobile_number": "+35612345678"
    }
  },
  "meta": {
    "timestamp": "2026-03-18T10:00:00Z",
    "restaurant_id": 1
  }
}
{
  "error": {
    "code": "string",
    "message": "string",
    "details": {}
  },
  "meta": {
    "timestamp": "2019-08-24T14:15:22Z"
  }
}
{
  "error": {
    "code": "string",
    "message": "string",
    "details": {}
  },
  "meta": {
    "timestamp": "2019-08-24T14:15:22Z"
  }
}

{
  "message": "The given data was invalid.",
  "errors": {
    "patron.email": [
      "The patron.email must be a valid email address."
    ],
    "dining_area_id": [
      "The selected dining area id is invalid."
    ]
  }
}

{
  "error": {
    "code": "string",
    "message": "string",
    "details": {}
  },
  "meta": {
    "timestamp": "2019-08-24T14:15:22Z"
  }
}