β‘ Avg API Latency
~180ms
A connected quickstart from authentication to booking creation, error handling, and webhook automation.
~180ms
99.95%
120 req/min/key
Use server-side bearer authentication, then call availability and booking endpoints in sequence.
Authorization: Bearer pmc_live_xxxxxxxxxxxx Content-Type: application/json X-Request-Id: req_client_001
A visual contract for what your backend sends and what PinmyCal API returns.
Authenticated payload sent by your backend service.
POST /v1/bookings
Authorization: Bearer pmc_live_xxxxx
Content-Type: application/json
{
"eventTypeId": "evt_demo",
"invitee": {
"name": "Jordan Lee",
"email": "jordan@company.com"
},
"start": "2026-03-10T09:30:00Z",
"timezone": "Asia/Kolkata"
}
PinmyCal validates, checks slot state, and provisions calendar/conferencing details.
Consistent JSON object with status, identifiers, and traceability.
HTTP/1.1 200 OK
Content-Type: application/json
{
"status": "ok",
"bookingId": "bk_1027",
"meetingUrl": "https://meet.google.com/abc-defg-hij",
"requestId": "req_9Gf21"
}
Follow this end-to-end sequence to power a production booking journey.
GET /v1/users/me Host: api.pinmycal.com Authorization: Bearer pmc_live_xxxxxxxxxxxx
GET /v1/availability?eventTypeId=evt_demo&date=2026-03-10&timezone=Asia/Kolkata
{
"status": "ok",
"slots": ["2026-03-10T09:30:00Z", "2026-03-10T11:00:00Z"]
}
Tip: If no slots are available, show the next available day and offer waitlist/retry options.
POST /v1/bookings
{
"eventTypeId": "evt_demo",
"invitee": {
"name": "Jordan Lee",
"email": "jordan@company.com"
},
"start": "2026-03-10T09:30:00Z",
"timezone": "Asia/Kolkata"
}
{
"status": "ok",
"bookingId": "bk_1027",
"meetingUrl": "https://meet.google.com/abc-defg-hij",
"requestId": "req_9Gf21"
}
booking.created booking.rescheduled booking.cancelled
Header: X-PMC-Signature: sha256=... Retry policy: exponential backoff up to 24h
Visualize response states and handle failures with clear recovery rules in client and backend services.
Resource created or fetched successfully; continue normal booking flow.
{
"status": "ok",
"bookingId": "bk_1027",
"requestId": "req_9Gf21"
}
Request queued for asynchronous processing; poll status or wait for webhook callback.
{
"status": "accepted",
"jobId": "job_4421",
"eta": "15s"
}
Return user-safe error copy, log request ID, and choose retry strategy by error type.
{
"status": "error",
"code": "INVALID_TOKEN",
"message": "Bearer token expired",
"requestId": "req_9Gf21"
}
Rotate token, refresh credentials, and retry once with a new bearer token.
Verify workspace scope and required role permissions before reattempting.
Map field-level validation errors to UI and re-submit with corrected payload.
Use exponential backoff with jitter and honor Retry-After header values.
Retry idempotent calls with capped attempts and circuit-breaker protection.
Store requestId, status code, latency, and endpoint to speed incident triage.
Apply these controls in production to secure event delivery and prevent duplicate processing.
Validate X-PMC-Signature against raw payload body using your webhook secret.
Reject stale signatures by validating timestamp windows (recommended β€ 5 minutes).
Persist eventId and skip duplicate deliveries to avoid repeated writes.
Allow HTTPS only, enforce TLS 1.2+, and deny plain HTTP callback endpoints.
Scope API keys per environment and rotate secrets every 60-90 days.
Log requestId, source IP, and failure reason; alert on repeated signature failures.