πŸ—“οΈGet booking!

APIs for managing reservations, including creating, updating, and canceling table bookings within the restaurant

ℹ️ The Booking Engine is the core feature, allowing customers to make reservations, choose rooms, slot times, number of persons and cancel existing bookings. βš™οΈ Use the base resource URL for the following examples, or see the complete collection

https://api.octorate.com/octotable-pms/api/v2

πŸ” Find all reservations

GET /reservations

Retrieves a list of all reservations for the specified property (e.g., restaurant) using the property ID see more

Headers

Name
Value

Content-Type

application/json

Authorization

Bearer <token>

Property

<your_property_id>

Query params

Name
Type
Description

next_cursor

string

Pagination cursor

limit

int

Elements limit per page

start_date

date [YYYY-MM-DD]

Start day of search

start_hour

[HH:MM:SS]

Starting hour of the reservation

end_date

date [YYYY-MM-DD]

End day of search

status[]

[WAITING, ACCEPTED, CANCELLED, CONFIRMED, EXPIRED, PREPAY, OUTOFORDER, REJECTED]

The status of reservation

text_search

string

The text search by customer name, last name or phone number

service_ids[]

[int]

The id list of services

room_ids[]

[int]

The id list of rooms

incoming

Boolean

Search criteria to retrieve incoming reservations

arrived

Boolean

Search criteria to retrieve arrived reservations

departed

Boolean

Search criteria to retrieve departed reservations

Response

{
  "data": [
    {
      "id": 32992280,
      "pax": 2,
      "status": "CANCELLED",
      "customer": {
        "id": 33942074,
        "first_name": "Adam",
        "last_name": "Devis",
        "email": "adam.devis@email.com",
        "phone": "3332211456"
      },
      "service": {
        "id": 33841,
        "name": "Custom dinner"
      },
      "channel": "OCTOTABLE_ADMIN",
      "room": {
        "id": 23288,
        "name": "Sala Nuova"
      },
      "end_date": "2025-05-15T14:00:00",
      "last_status_change": "2025-05-14T17:06:46",
      "notes": "",
      "special_request": "",
      "start_date": "2025-05-15",
      "start_hour": "13:00:00",
      "tables": [
        {
          "id": 197934,
          "name": "T8",
          "bookable": true,
          "free": true,
          "group": false,
          "online": true,
          "room_id": 23288
        }
      ],
      "waiting_list": false
    },
    {
      "id": 32992285,
      "pax": 2,
      "status": "CANCELLED",
      "customer": {
        "id": 33942079,
        "first_name": "Adam 2",
        "last_name": "Devis 2",
        "email": "adam.devis@email.com",
        "phone": "3332211456"
      },
      "service": {
        "id": 33841,
        "name": "Custom dinner"
      },
      "channel": "OCTOTABLE_ADMIN",
      "room": {
        "id": 23288,
        "name": "Sala Nuova"
      },
      "end_date": "2025-05-15T14:00:00",
      "last_status_change": "2025-05-14T17:09:40",
      "notes": "",
      "special_request": "",
      "start_date": "2025-05-15",
      "start_hour": "13:00:00",
      "tables": [
        {
          "id": 197934,
          "name": "T8",
          "bookable": true,
          "free": true,
          "group": false,
          "online": true,
          "room_id": 23288
        }
      ],
      "waiting_list": false
    },
    {
      "id": 32992293,
      "pax": 2,
      "status": "CANCELLED",
      "customer": {
        "id": 33942086,
        "first_name": "Adam 2",
        "last_name": "Devis 2",
        "email": "adam.devis@email.com",
        "phone": "3332211456"
      },
      "service": {
        "id": 33841,
        "name": "Custom dinner"
      },
      "channel": "OCTOTABLE_ADMIN",
      "room": {
        "id": 23288,
        "name": "Sala Nuova"
      },
      "end_date": "2025-05-15T14:00:00",
      "last_status_change": "2025-05-14T17:09:44",
      "start_date": "2025-05-15",
      "start_hour": "13:00:00",
      "tables": [
        {
          "id": 197934,
          "name": "T8",
          "bookable": true,
          "free": true,
          "group": false,
          "online": true,
          "room_id": 23288
        }
      ],
      "waiting_list": false
    }
  ]
}

πŸ” Find reservation by ID

GET /reservations/{reservation_id}

Retrieves a reservations by its ID see more

Headers

Name
Value

Content-Type

application/json

Authorization

Bearer <token>

Property

<your_property_id>

Response

{
    "data": [
        {
            "id": 31753958,
            "pax": 2,
            "status": "CONFIRMED",
            "customer": {
                "id": 33499559,
                "first_name": "Adam",
                "last_name": "Devis",
                "email": "adam.devis@email.com",
                "phone": "3332211456"
            },
            "service": {
                "id": 30911,
                "name": "Lunch"
            },
            "channel": "OCTOTABLE_ADMIN",
            "room": {
                "id": 21344,
                "name": "Secondary dining room"
            },
            "end_date": "2024-12-14T14:30:00",
            "start_day": "2024-12-14",
            "start_hour": "13:30:00",
            "tables": [
                {
                    "id": 172246,
                    "name": "T8",
                    "bookable": true,
                    "free": true,
                    "group": false,
                    "room_id": 21344
                }
            ],
            "waiting_list": false
        }
    ]
}

πŸ†• Create a new reservation

POST /reservations

Creates a new reservation for the specified property using the provided reservation details see more

Headers

Name
Value

Content-Type

application/json

Authorization

Bearer <token>

Property

<your_property_id>

Body

Name
Type
Description

start_date

date [YYYY-MM-DD]

The start date

start_hour

time [HH:mm:ss]

The start hour

pax

int

The number of person

channel

enum [OCTOTABLE_BOOK, OCTOTABLE_ADMIN]

OCTOTABLE_BOOK: This indicates reservations made through the Booking Engine. resents reservations made through Reserve with Google. OCTOTABLE_ADMIN: Refers to self reservations.

customer

Customer

The customer who makes the reservation

customer.first_name

string

The customers first name

customer.last_name

string

The customer last name

customer.email

string

The customers email

customer.phone

string

The customers phone

service_id

int

The id of the selected service

room_id

int

The id of the selected room

table_ids

[int]

The list of ids of the selected tables

waiting_list

boolean

Keep reservation in waiting list

Response

{
  "data": [
    {
      "id": 31753956,
      "pax": 2,
      "status": "WAITING",
      "customer": {
        "id": 33499557,
        "first_name": "Adam",
        "last_name": "Devis",
        "email": "adam.devis@email.com",
        "phone": "3332211456"
      },
      "service": {
        "id": 30907,
        "name": "Pranzo nuovo"
      },
      "channel": "OCTOTABLE_ADMIN",
      "room": {
        "id": 21343,
        "name": "main dining room"
      },
      "end_date": "2024-12-12T13:30:00",
      "start_date": "2024-12-12",
      "start_hour": "12:30:00",
      "tables": [
        {
          "id": 172245,
          "name": "T8",
          "bookable": true,
          "free": true,
          "group": false,
          "room_id": 21343
        }
      ],
      "waiting_list": false
    }
  ]
}

🟒 Enable Google Engine

POST /reservations/google

Activates the Google Engine for a specified property see more

Headers

Name
Value

Content-Type

application/json

Authorization

Bearer <token>

Property

<your_property_id>

Body

Name
Type
Description

enable_google_engine

boolean

Enable the google engine

Response

{
  "status": "ACCEPTED"
}

πŸ”„ Update a reservation

PUT /reservations/{reservation_id}

Update an existing reservation see more

Headers

Name
Value

Content-Type

application/json

Authorization

Bearer <token>

Property

<your_property_id>

Body

Name
Type
Description

start_day

date [YYYY-MM-DD ]

The start day

start_hour

time [HH:mm:ss]

The start hour

pax

int

The number of person

service_id

int

The id of the selected service

room_id

int

The id of the selected room

table_ids

[int]

The list of ids of the selected tables

Response

{
    "data": [
        {
            "id": 31753936,
            "pax": 2,
            "status": "CONFIRMED",
            "customer": {
                "id": 3255826,
                "first_name": "John",
                "last_name": "Smith",
                "email": "john.smith@demo.com",
                "phone": "55555555555"
            },
            "service": {
                "id": 17884,
                "name": "Breakfast"
            },
            "channel": "OCTOTABLE_ADMIN",
            "start_day": "2024-10-30",
            "start_hour": "18:00:00"
        }
    ]
}

πŸ”„ Check in

PATCH /reservations/{reservation_id}/checkin

Customers check-in see more

Headers

Name
Value

Content-Type

application/json

Authorization

Bearer <token>

Property

<your_property_id>

Query params

Name
Type
Description

undo

boolean

Undo check in if it has been made by mistake

Response

{
    "data": [
        {
            "id": 31753956,
            "pax": 2,
            "status": "ACCEPTED",
            "customer": {
                "id": 33499557,
                "first_name": "Adam",
                "last_name": "Devis",
                "email": "adam.devis@email.com",
                "phone": "3332211456"
            },
            "service": {
                "id": 30907,
                "name": "Pranzo nuovo"
            },
            "channel": "OCTOTABLE_ADMIN",
            "room": {
                "id": 21343,
                "name": "main dining room"
            },
            "checkin_date": "2024-12-12T17:04:04.564",
            "end_date": "2024-12-12T13:30:00",
            "expiration_date": "2024-12-12T17:13:49",
            "start_day": "2024-12-12",
            "start_hour": "12:30:00",
            "tables": [
                {
                    "id": 172245,
                    "name": "T8",
                    "bookable": true,
                    "free": true,
                    "group": false,
                    "room_id": 21343
                }
            ],
            "waiting_list": false
        }
    ]
}

πŸ”„ Check out

PATCH /reservations/{reservation_id}/checkout

Customers check out see more

Headers

Name
Value

Content-Type

application/json

Authorization

Bearer <token>

Property

<your_property_id>

Query param

Name
Type
Description

undo

boolean

Undo check out if it has been made by mistake

Response

{
    "data": [
        {
            "id": 31753958,
            "pax": 2,
            "status": "CONFIRMED",
            "customer": {
                "id": 33499559,
                "first_name": "Adam",
                "last_name": "Devis",
                "email": "adam.devis@email.com",
                "phone": "3332211456"
            },
            "service": {
                "id": 30911,
                "name": "Lunch"
            },
            "channel": "OCTOTABLE_ADMIN",
            "room": {
                "id": 21344,
                "name": "Secondary dining room"
            },
            "end_date": "2024-12-14T14:30:00",
            "start_day": "2024-12-14",
            "start_hour": "13:30:00",
            "tables": [
                {
                    "id": 172246,
                    "name": "T8",
                    "bookable": true,
                    "free": true,
                    "group": false,
                    "room_id": 21344
                }
            ],
            "waiting_list": false
        }
    ]
}

πŸ”„ Update status

PATCH /reservations/{reservation_id}

Update the status of the reservation in waiting list. If on the waiting list, the reservation should become accepted, declined, or confirmed see more

Headers

Name
Value

Content-Type

application/json

Authorization

Bearer <token>

Property

<your_property_id>

Query param

Name
Type
Description

status

enum

The status of the reservation in waiting list

Response

{
    "data": [
        {
            "id": 31753956,
            "pax": 2,
            "status": "WAITING",
            "customer": {
                "id": 33499557,
                "first_name": "Adam",
                "last_name": "Devis",
                "email": "adam.devis@email.com",
                "phone": "3332211456"
            },
            "service": {
                "id": 30907,
                "name": "Pranzo nuovo"
            },
            "channel": "OCTOTABLE_ADMIN",
            "room": {
                "id": 21343,
                "name": "main dining room"
            },
            "end_date": "2024-12-12T13:30:00",
            "start_day": "2024-12-12",
            "start_hour": "12:30:00",
            "tables": [
                {
                    "id": 172245,
                    "name": "T8",
                    "bookable": true,
                    "free": true,
                    "group": false,
                    "room_id": 21343
                }
            ],
            "waiting_list": false
        }
    ]
}

πŸ—‘οΈ Delete a reservation

DELETE /reservations/{reservation_id}

Delete a reservation see more

Headers

Name
Value

Content-Type

application/json

Authorization

Bearer <token>

Property

<your_property_id>

Response

{
    "data": [
        172221
    ]
}

πŸ“• ADDITIONAL NOTES

Tables

  • Bookable / Online: These parameters indicate whether a table can be booked online (via the booking engine or Reserve with Google) or only through manual methods such as phone or walk-in (offline).

  • Free: A table is considered free if it has no active reservation during the selected time slot. This status is based on the average_stay setting. For example, if the average stay is 60 minutes and a reservation starts at 1:00 p.m., the table is marked as occupied from 1:00 p.m. to 2:00 p.m. However, it will also be considered unavailable starting from 12:00 p.m., in order to respect the buffer time before the next reservation.

  • Group: Indicates whether the table is a grouped table (i.e. a combination of two or more individual tables).

    • Group = true β†’ The table is formed by merging smaller tables (e.g., Indoor 1 {2 pax} + Indoor 2 {2 pax} = Indoor 1+2 {4 pax}).

    • Group = false β†’ It is a standalone table.

  • Best_Choice: This parameter helps the system determine the most suitable table for a given party size. The goal is to optimize table usage by selecting the table that best fits the number of guests (e.g., assigning a 2-pax table to a 2-person reservation instead of a 4-pax table).

Last updated