Before venues appear in the Bookings API, you must onboard each operator and connect their TMS credentials. This is a one-time administrative step — once set up, the operator's venues are immediately searchable and bookable.
Bookable is a gateway to multiple Table Management Systems (Collins, SevenRooms, Zonal). Operators — the hospitality businesses whose venues you want to make bookable — each use one or more of these systems. You supply their TMS credentials to Bookable once, and Bookable handles all TMS communication on your behalf.
1. Onboard operator → 2. Add TMS credentials → 3. Venues appear in GET /venuesAn operator represents a hospitality business — a restaurant group, bar chain, or event venue company. Onboard one with POST /operators.
The partnerSource field identifies your bookings channel within the operator's TMS. If the operator already has a label for your channel from a previous integration, use that value. If in doubt, ask the operator.
curl -X POST https://api.bookabletech.com/operators \
-H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"businessName": "Acme Restaurant Group",
"partnerSource": "YourTradingName"
}'Example response:
{
"id": 3,
"businessName": "Acme Restaurant Group",
"createdAt": "2025-03-01T10:00:00Z",
"updatedAt": "2025-03-01T10:00:00Z"
}Store the id — you need it in the next step.
TMS credentials tell Bookable how to authenticate with the operator's table management system. The required fields depend on which TMS the operator uses.
| TMS | Slug | Auth type | Required fields |
|---|---|---|---|
| Collins | CO | Bearer token | bearer, externalOperatorId |
| SevenRooms | SR | Client credentials | clientId, secretId |
| Zonal | ZO | Basic auth | clientId, secretId |
The operator must supply their TMS credentials to you directly. Contact the TMS provider if you need guidance on where to find them.
{
"tmsSlug": "CO",
"bearer": "eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9...",
"externalOperatorId": "514ada610df690b6770000fd",
"active": true
}{
"tmsSlug": "SR",
"clientId": "44966392-f2d4-4929-8c9a-e87a0e7dc856",
"secretId": "LjjXs5$3M%Btx@tt",
"active": true
}{
"tmsSlug": "ZO",
"clientId": "44966392-f2d4-4929-8c9a-e87a0e7dc856",
"secretId": "LjjXs5$3M%Btx@tt",
"active": true
}OPERATOR_ID=3
curl -X POST "https://api.bookabletech.com/operators/${OPERATOR_ID}/tms-credentials" \
-H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"tmsSlug": "CO",
"bearer": "eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9...",
"externalOperatorId": "514ada610df690b6770000fd",
"active": true
}'Example response:
{
"operatorId": 3,
"tmsId": 1,
"tmsName": "Collins",
"tmsSlug": "CO",
"bearer": "eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9...",
"externalOperatorId": "514ada610df690b6770000fd",
"active": true,
"createdAt": "2025-03-01T10:05:00Z",
"updatedAt": "2025-03-01T10:05:00Z"
}Once credentials are active, call GET /venues to confirm the operator's venues appear:
curl "https://api.bookabletech.com/venues" \
-H "Authorization: Bearer YOUR_ACCESS_TOKEN"You should see venues belonging to the operator you just onboarded. If the list is empty, double-check that active was set to true and that the credentials are correct.
| Action | Endpoint |
|---|---|
| List all operators | GET /operators |
| Get a specific operator | GET /operators/{operatorId} |
| Update operator details | PUT /operators/{operatorId} |
| Remove an operator | DELETE /operators/{operatorId} |
| List TMS credentials | GET /operators/{operatorId}/tms-credentials |
| Update TMS credentials | PUT /operators/{operatorId}/tms-credentials/{tmsId} |
| Remove TMS credentials | DELETE /operators/{operatorId}/tms-credentials/{tmsId} |
See the TMS Gateway API reference for full endpoint documentation.