Why Connect Your POS to TableSpot?
Most restaurants run reservations and POS as separate islands. Guests book online, but the host still re-keys the booking into the POS. Orders close in the POS, but nobody checks if the deposit was already paid. The TableSpot API bridges that gap.
What Restaurants Get
What POS Vendors Get
Getting Started in 3 Steps
Generate an API Key
In your TableSpot admin panel, go to Settings โ API Integration and create a key. Keys start with ts_live_ and are scoped to one restaurant.
Explore the API
Open the interactive docs at /api/v1 โ you can try every endpoint directly from the browser with your key.
tablespot.online/api/v1Start syncing
Pull tables and reservations, push orders, update statuses. That's it โ you're integrated.
API at a Glance
The API is organized around six resources โ including webhooks for real-time event notifications. All endpoints are authenticated with a Bearer token and return JSON.
| Method | Endpoint | Description | Plan |
|---|---|---|---|
GET | /restaurant | Restaurant profile, hours, deposit settings | All plans |
GET | /tables | List tables with capacity & location | All plans |
GET / POST | /reservations | List, create & update reservations | All plans |
GET / POST | /orders | List, create & update orders | All plans |
GET | /reviews | List reviews & summary stats | All plans |
GET / POST / DELETE | /webhooks | Register & manage webhook endpoints | All plans |
Quick Code Examples
Authentication
Every request needs an Authorization header with your API key:
Authorization: Bearer ts_live_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxList Tables
Fetch all tables to know which seats are available before creating a reservation:
curl https://tablespot.online/api/v1/tables \
-H "Authorization: Bearer ts_live_xxxxxxxx"
# Response
{
"data": [
{ "id": "abc123", "name": "Table 1", "seats": 4, "location": "indoor", "isActive": true },
{ "id": "def456", "name": "Terrace A", "seats": 6, "location": "outdoor", "isActive": true }
]
}Create a Reservation
Book a table for a guest directly from the POS โ the reservation appears instantly in the TableSpot host dashboard:
curl -X POST https://tablespot.online/api/v1/reservations \
-H "Authorization: Bearer ts_live_xxxxxxxx" \
-H "Content-Type: application/json" \
-d '{
"tableId": "abc123",
"customerName": "Jane Doe",
"customerEmail": "jane@example.com",
"customerPhone": "+370 600 12345",
"date": "2026-02-15",
"time": "19:00",
"partySize": 2,
"status": "confirmed",
"notes": "Window seat preferred"
}'
# Response โ 201 Created
{
"data": {
"id": "res_789",
"tableId": "abc123",
"customerName": "Jane Doe",
"status": "confirmed",
"depositPaid": false,
...
}
}Push an Order
Send the bill from your POS to TableSpot so the guest can pay online or track their spending:
curl -X POST https://tablespot.online/api/v1/orders \
-H "Authorization: Bearer ts_live_xxxxxxxx" \
-H "Content-Type: application/json" \
-d '{
"tableId": "abc123",
"reservationId": "res_789",
"customerName": "Jane Doe",
"customerEmail": "jane@example.com",
"customerPhone": "+370 600 12345",
"items": [
{ "id": "pizza-01", "name": "Margherita Pizza", "quantity": 2, "unitPriceCents": 1200 },
{ "id": "wine-03", "name": "House Red Wine", "quantity": 1, "unitPriceCents": 800 }
]
}'
# Response โ 201 Created
{
"data": {
"id": "ord_456",
"totalCents": 3200,
"status": "open",
"accessToken": "pay_xxxxx",
...
}
}Update Reservation Status
When the guest is seated or leaves, update the status so both systems stay in sync:
curl -X PATCH https://tablespot.online/api/v1/reservations/res_789 \
-H "Authorization: Bearer ts_live_xxxxxxxx" \
-H "Content-Type: application/json" \
-d '{ "status": "seated" }'
# Response โ 200 OK
{ "data": { "id": "res_789", "status": "seated", ... } }Pull Reviews
Fetch guest reviews and display them on your POS reporting dashboard:
curl "https://tablespot.online/api/v1/reviews?limit=5" \
-H "Authorization: Bearer ts_live_xxxxxxxx"
# Response
{
"data": [
{
"id": "rev_001",
"customerName": "Jane Doe",
"overallRating": 5,
"foodRating": 5,
"serviceRating": 4,
"comment": "Best pizza in town!",
"createdAt": 1739400000
}
],
"summary": {
"totalReviews": 42,
"averageOverall": 4.3,
"averageFood": 4.5,
"distribution": { "5": 19, "4": 15, "3": 5, "2": 2, "1": 1 }
}
}Register a Webhook
Subscribe to real-time events instead of polling. You can register webhooks from the admin dashboard (Webhooks section) or via the API:
curl -X POST https://tablespot.online/api/v1/webhooks \
-H "Authorization: Bearer ts_live_xxxxxxxx" \
-H "Content-Type: application/json" \
-d '{
"url": "https://pos.example.com/webhooks/tablespot",
"events": ["reservation.created", "reservation.updated"],
"secret": "whsec_your_signing_secret_here"
}'
# Response โ 201 Created
{
"data": {
"id": "wh_123",
"url": "https://pos.example.com/webhooks/tablespot",
"events": ["reservation.created", "reservation.updated"],
"isActive": true,
...
}
}
# Every matching event delivers a POST to your URL:
# Headers:
# X-TableSpot-Event: reservation.created
# X-TableSpot-Signature: <hmac-sha256-hex>
# Body:
# {
# "event": "reservation.created",
# "data": { "id": "res_789", "customerName": "Jane Doe", ... },
# "timestamp": 1707700000000
# }Frequently Asked Questions
Does the API support webhooks?
Yes. You can manage webhooks from the admin dashboard (Webhooks section in the sidebar) or via the API using POST /webhooks. Select the events you want (e.g. reservation.created, order.updated) and provide an HTTPS endpoint. TableSpot signs every payload with HMAC-SHA256 so you can verify authenticity. Failed deliveries are retried up to 3 times with exponential back-off.
Is there a sandbox environment?
There is no separate sandbox. You can use your existing restaurant or create a new test restaurant, generate an API key, and start testing right away. There are no artificial limits โ it behaves like production.
Which programming languages are supported?
Any language that can make HTTP requests. The API is plain REST โ curl, Python, Node.js, C#, Java, Go, PHP โ everything works.
Does the API cost extra?
The API is completely free for all restaurants and integrators. Every plan โ including the Free tier โ comes with full API access at no extra cost.
How do I get started with integration?
Just sign up, create or open a restaurant, go to Settings โ API Integration, and generate a key. The interactive docs at /api/v1 let you test every endpoint right in the browser โ no onboarding call needed.
Ready to Integrate?
Sign up for free, generate an API key from your admin panel, and open the interactive docs. Most POS integrations go live in under a day.