Call requestcompleted
Sent when every contact in one of your call requests has reached a terminal state (completed or failed after exhausting retries).
Verify X-GrowDental-Signature before trusting the payload;
de-duplicate on X-GrowDental-Delivery-Id.
Authorizations
Partner API key sent as a Bearer token:
Authorization: Bearer gd_live_...Keys are issued by the GrowDental team (invite-only), shown once
at creation, and stored server-side only as a SHA-256 hash. Key format:
gd_live_ (or gd_test_) followed by a 43-character base62 secret
(~256 bits of entropy). To rotate, request a new key, deploy it, then
ask us to revoke the old one — both keys work during the overlap.
Headers
Delivery signature: t=<unix seconds>,v1=<hex HMAC-SHA256> where the
HMAC is computed over <t> + "." + <raw request body> using your
endpoint's signing secret. Recompute and compare with a constant-time
comparison, and reject deliveries whose t is more than 300 seconds
from the current time (replay protection).
Unique delivery ID, stable across retries of the same delivery.
Deliveries are at-least-once — de-duplicate on this value. The event
type is carried in the body envelope's type field.
Body
Delivery body for call_request.completed.
Event ID (stable across every delivery and retry of this event).
Event types deliverable to webhook endpoints. call_attempt.resolved
and appointment.booked are planned (Phase 2) — valid to subscribe to
now, but not yet emitted.
call.completed, call.recording.ready, call_request.completed, call_attempt.resolved, appointment.booked "call_request.completed"When the event occurred.
The practice the event belongs to.
Event-specific payload (see the concrete event schemas).
Response
Respond with any 2xx status within 10 seconds to acknowledge.