Integrations
ยท7 min read

How to Integrate Your POS System with TableSpot

TableSpot offers a clean REST API that lets any POS system sync reservations, send orders, and read guest reviews โ€” no custom development contracts, no middleware, just HTTP requests.

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

One screen, not two
Staff see reservations directly in the POS โ€” no more checking a tablet on the side.
Automatic deposit reconciliation
The POS knows the deposit was already paid online, so the final bill is adjusted automatically.
Fewer no-shows
Online deposits collected through TableSpot drastically reduce no-shows; the POS reflects this in real time.
Guest history in one place
Reviews, orders, and reservations are linked โ€” so you know your returning guests.

What POS Vendors Get

New feature, zero UI work
Offer online reservations with deposit payments to your restaurant clients without building a booking flow from scratch.
Extra sales channel
Give your restaurant clients online reservations with deposit payments โ€” an additional revenue stream powered by your POS.
Modern, documented API
OpenAPI 3.1 spec, interactive Scalar docs, Bearer token auth โ€” your developers will feel right at home.
No vendor lock-in
RESTful JSON over HTTPS. No proprietary SDK โ€” use polling or webhooks, whichever fits your architecture.

Getting Started in 3 Steps

1

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.

2

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/v1
3

Start 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.

MethodEndpointDescriptionPlan
GET
/restaurantRestaurant profile, hours, deposit settings
All plans
GET
/tablesList tables with capacity & location
All plans
GET / POST
/reservationsList, create & update reservations
All plans
GET / POST
/ordersList, create & update orders
All plans
GET
/reviewsList reviews & summary stats
All plans
GET / POST / DELETE
/webhooksRegister & manage webhook endpoints
All plans

Quick Code Examples

Authentication

Every request needs an Authorization header with your API key:

HTTP Header
Authorization: Bearer ts_live_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

List Tables

Fetch all tables to know which seats are available before creating a reservation:

curl
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
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
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
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
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
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
# }
Rate Limits & Plans
Read endpoints allow 60 requests/minute, writes 60/min, and status updates 120/min. All endpoints are available on every plan, including the Free tier.
Security
API keys are encrypted at rest with AES-256. All traffic runs over HTTPS. Keys are scoped to a single restaurant โ€” a compromised key cannot access other merchants.

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.