Skip to content

Availability ​

Catalogue of slots for one venue on one calendar date.

Auth: x-api-key. The venue must be granted (403 VENUE_NOT_AUTHORIZED otherwise).

http
GET /api/v1/slots/availability?venue_id=<uuid>&date=2026-09-20&resource_id=badminton-court-1
x-api-key: <your-api-key>

resource_id is optional. date is YYYY-MM-DD and means the venue's local calendar day, not a UTC day. All times in the response are UTC (ISO 8601); convert them to the venue's time zone, given in timezone, before you show them to a customer.

json
{
  "venue_id": "a0000000-0000-4000-8000-000000000001",
  "date": "2026-09-20",
  "timezone": "Asia/Kolkata",
  "slots": [
    {
      "slot_id": "…",
      "resource_id": "badminton-court-1",
      "slot_start": "2026-09-20T06:00:00.000Z",
      "slot_end": "2026-09-20T07:00:00.000Z",
      "price_rupees": 500,
      "is_available": true
    }
  ]
}

is_available: true is not a reservation. Another channel can hold the slot before your hold call returns. Always hold before you promise the customer the court.

price_rupees already includes the venue's price rules — it is what a hold on that slot is charged. base_price_rupees is the price before rules. The hold's own price_rupees is authoritative (it locks the price for that reservation).

Holding a slot from this list ​

Availability has no duration field. Each slot has a slot_start and a slot_end (ISO 8601, UTC). When you hold a slot, send its slot_start unchanged as slot_start, and send the minutes between slot_end and slot_start as slot_duration_minutes — for example 06:00:00.000Z to 07:00:00.000Z is 60. Do not invent a different start or length.

javascript
const slotDurationMinutes = (Date.parse(slot.slot_end) - Date.parse(slot.slot_start)) / 60000;

Start in the sandbox. Production access is granted after certification. Access requests and integration support: [email protected]