Spot Slots for developers

API and webhooks

Read your experiences, availability and bookings; add bookings taken outside Spot; and get a webhook the moment a booking is made, changed or cancelled. Make keys and webhooks in Settings → API and webhooks.

Authentication

Send your key as a Bearer token. Keys belong to your company; keep them on your server, never in a browser or app.

curl https://europe-west1-marketinglabstudio-61305.cloudfunctions.net/api/v1/experiences \ -H "Authorization: Bearer spot_live_…"

Money is in minor units (cents). Dates are YYYY-MM-DD in the experience's city; times are ISO 8601. Errors are {"error": {"code", "message"}} with 400, 401, 404, 422 or 500.

Endpoints

GET/v1/experiences

Your experiences on Spot Slots, with customer types and prices, extras, questions, traveller details and pickup points.

GET/v1/availability?experience=ID&from=2026-11-01&to=2026-11-30

Departures with capacity and places left (up to 92 days).

GET/v1/bookings?from=2026-11-01&to=2026-11-30[&by=booked]

Bookings by trip date (or by the date they were made with by=booked), up to 92 days.

GET/v1/bookings/{id}

One booking.

POST/v1/bookings

Add a booking taken outside Spot (your own site's checkout, a phone line). Places are taken straight away; the money is yours to handle.

{ "departureId": "…", // from /v1/availability "quantities": {"adult": 2, "child": 1}, "customer": {"name": "Ana López", "email": "ana@example.com", "phone": "+34…"}, "payment": "paid", // paid | unpaid | free "totalCents": 13000, // optional: your price instead of Spot's "sendConfirmation": true, // email Spot's ticket to the customer "language": "es" // en | es | fr | de }

POST/v1/bookings/{id}/cancel

Cancel a booking ({"reason": "…", "notifyCustomer": true}). Bookings paid online through Spot are refunded in full.

Webhooks

Spot POSTs JSON to your URL for booking.created, booking.cancelled and booking.updated (moved, checked in, paid). Answer with a 2xx within 10 seconds; failures are retried after 1, 5, 30, 120 and 720 minutes.

POST https://yoursite.com/spot-webhook Spot-Signature: t=1730000000,v1=5257a869… {"id": "…", "type": "booking.created", "created": "2026-11-01T10:00:00Z", "data": {"booking": { …same shape as GET /v1/bookings/{id}… }}}

Check the signature: HMAC-SHA256 of {t}.{raw body} with your webhook secret must equal v1, and t should be within a few minutes of now.

const [t, v1] = header.split(",").map((p) => p.split("=")[1]); const expected = crypto.createHmac("sha256", secret).update(`${t}.${rawBody}`).digest("hex"); const ok = crypto.timingSafeEqual(Buffer.from(expected), Buffer.from(v1));

Booking sites

GetYourGuide, Viator and resellers using the OCTO standard (Klook, Headout, Tiqets and others) connect with their own credentials from Settings, not with this API.