Getting started

Overview & quickstart

Vardvik Bookings is an API-first booking platform. Your integration talks to a small REST API; the platform runs availability, table assignment, the operations console, guest emails, and webhooks behind it.

Base URL and versioning

All endpoints live under /api/v1. The version is part of the path; breaking changes ship as a new version, never silently.

Base URL
https://your-deployment.example/api/v1

Five-minute quickstart

You need a restaurant id, a location id, and an API key with the right scopes. In the demo deployment these are seeded; in production you create keys in the console under API & webhooks.

1. Check availability

Request
curl "$BASE/restaurants/$RESTAURANT_ID/availability?locationId=$LOCATION_ID&date=2026-06-12&partySize=4" \
  -H "Authorization: Bearer $API_KEY"
Response 200
{
  "slots": [
    {
      "start": "2026-06-12T17:00:00.000Z",
      "end": "2026-06-12T19:00:00.000Z",
      "available": true,
      "capacity": 4,
      "tableIds": ["t-03"],
      "serviceName": "Dinner"
    }
  ]
}

2. Create the reservation

Send an Idempotency-Key so a retried request can never double-book. Tables are assigned automatically from capacity, combinations, and buffers.

Request
curl -X POST "$BASE/restaurants/$RESTAURANT_ID/reservations" \
  -H "Authorization: Bearer $API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: order-84421" \
  -d '{
    "locationId": "'$LOCATION_ID'",
    "startTime": "2026-06-12T17:00:00.000Z",
    "partySize": 4,
    "guest": {
      "firstName": "Mara",
      "lastName": "Schneider",
      "email": "mara@example.com"
    },
    "specialRequests": "Window table if possible"
  }'
Response 201
{
  "reservation": {
    "id": "res_9f31",
    "publicReference": "rr_7f3a91",
    "status": "confirmed",
    "startTime": "2026-06-12T17:00:00.000Z",
    "endTime": "2026-06-12T19:00:00.000Z",
    "partySize": 4,
    "tableIds": ["t-03"]
  }
}

3. Manage it later

The publicReference is safe to show guests and works in every reservation endpoint in place of the internal id.

Cancel
curl -X DELETE "$BASE/reservations/rr_7f3a91?reason=Guest+called" \
  -H "Authorization: Bearer $API_KEY"

What happens behind the call

  • The availability engine validates opening hours, special days, lead time, advance window, slot limits, buffers, and table capacity.
  • Creation runs inside a database transaction with an advisory lock, so two parallel requests can never seat the same table twice.
  • A confirmation email is queued for the guest, a signed webhook notifies your systems, and the audit log records the change.

Next steps