Developer API & Webhooks
Build on TeamSchedulerPro: read availability and bookings, create or cancel bookings via the REST API, and receive real-time events via webhooks. Base URL: https://www.teamschedulerpro.com
Authentication
Create an API key under Admin Dashboard → Developers. The full key is shown once — store it securely. Send it on every API request as a Bearer token (or the X-API-Key header):
Authorization: Bearer tsp_xxxxxxxxxxxxxxxxxxxxxxxx
Scheduling API (v1)
List meeting types
curl https://www.teamschedulerpro.com/api/v1/meeting-types \
-H "Authorization: Bearer tsp_..."
Get availability
Returns open time slots for the date, honouring every assigned member's calendars and working hours.
List bookings
Create a booking
Use your API key (no CAPTCHA needed). The meeting type must belong to your account.
curl -X POST https://www.teamschedulerpro.com/api/bookings \
-H "Authorization: Bearer tsp_..." -H "Content-Type: application/json" \
-d '{
"meetingTypeId": 15,
"clientName": "Jane Doe",
"clientEmail": "jane@example.com",
"date": "2026-06-10",
"time": "14:00",
"timezone": "America/New_York"
}'
Cancel a booking
Rate limit: 120 requests/minute per key.
Webhooks
Register an endpoint under Developers → Webhooks and choose which events to receive. We POST a JSON body to your URL when those events happen.
Events
booking.created— a new booking was madebooking.cancelled— a booking was cancelled
Payload
{
"id": "f1a2…", // unique delivery id
"event": "booking.created",
"created_at": "2026-05-31T15:00:00.000Z",
"data": {
"id": 42,
"meetingTypeId": 15,
"meetingType": "Intro Call",
"clientName": "Jane Doe",
"clientEmail": "jane@example.com",
"date": "2026-06-10",
"time": "14:00",
"timezone": "America/New_York",
"videoLink": "https://zoom.us/j/…"
}
}
Verifying signatures
Every delivery includes X-TSP-Signature: sha256=<hmac> — an HMAC-SHA256 of the raw request body, keyed with your webhook's signing secret (shown in the dashboard). Verify it before trusting the payload:
const crypto = require('crypto');
const expected = 'sha256=' + crypto
.createHmac('sha256', WEBHOOK_SECRET)
.update(rawBody) // the raw, unparsed request body
.digest('hex');
if (expected !== req.headers['x-tsp-signature']) return res.sendStatus(401);
Need help?
Contact support@teamschedulerpro.com.