Endpoint
POST /webhook_subscriptions for you, pointing at this URL with a freshly generated signing key.
Calendly’s webhook subscription API requires a Standard plan or higher. On the Free plan the subscribe call returns
403 "Please upgrade your Calendly account to Standard" and Nous will log the connection without a live webhook. See the Calendly provider page for the full plan matrix.Auth
Each Calendly connection stores its own signing key (encrypted) inworkflow_provider_connections.encrypted_credentials.webhook_signing_key. Calendly signs every delivery with that key and Nous verifies before processing.
| Header | Format |
|---|---|
Calendly-Webhook-Signature | t=<unix_ts>,v1=<hex_hmac_sha256> |
t older than 5 minutes are rejected. Comparison is timing-safe.
Supported events
| Calendly event | Activity logged |
|---|---|
invitee.created | meeting_scheduled |
invitee.canceled | meeting_cancelled |
external_id is keyed on the Calendly event UUID so the same booking discovered via webhook and via CSV-import backfill dedupes cleanly.
Payload
Calendly creates new contacts on
invitee.created — a booking is a strong enough intent signal to bootstrap the contact. invitee.canceled only updates existing contacts; it never creates one.