Create a call request
Queues outbound voice-AI calls to 1–50 contacts at a granted practice.
Requires call-requests:write. Counts against the bulk rate bucket
(60 requests/minute).
Calls are placed by the platform dialer inside the practice’s calling
window (or the narrower window you provide), with retries and
concurrency caps applied automatically. Track progress by polling
GET /call-requests/{callRequestId} or by subscribing to the
call_request.completed webhook event.
Always send an Idempotency-Key — a network retry without one can
dial patients twice.
Consent: by submitting contacts you attest, per your partner agreement, that each contact has given prior express consent to be called at the supplied number (TCPA and applicable state law).
Quotas (enforced before anything is dialed):
- Per-partner daily contact cap →
429 daily_cap_exceeded - Per-practice pending-contact cap →
409 queue_full - Practice minute-balance circuit breaker →
409 insufficient_minute_balance
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
Client-generated unique key (e.g. a UUID) making the POST safely
retryable for 24 hours: retries with the same key and payload replay
the original response; the same key with a different payload is
rejected with 409 idempotency_conflict. Strongly recommended on
every POST — required in practice for call-request creation, where a
blind retry can dial patients twice.
255Path Parameters
Practice ID (must be granted to your app — ungranted IDs return 404).
Body
Contacts to dial (1–50). Duplicate phone numbers (after E.164
normalization) are rejected with 400 duplicate_contacts.
1 - 50 elementsWhy these contacts are being called — shapes the agent's framing
of the conversation. Free-form slug; common values:
recall_reminder, treatment_follow_up, appointment_confirmation,
reactivation.
1 - 100"recall_reminder"
Free-text context for the voice agent, applied to every contact. Structured context is the only way partners influence call content — prompts and agent internals are not exposed.
5000Optional scheduling constraints. Calls are always confined to the
practice's configured calling hours and days; a window can only narrow
them further. daily_start/daily_end are practice-local times.
Response
Call request accepted and queued.
A call request with its window, context, and per-contact progress.
queued until dialing begins, in_progress while contacts are
being worked, completed when every contact is terminal.
queued, in_progress, completed, paused, cancelled Aggregate contact-status counts for a call request. Keys beyond the listed ones may appear if new contact statuses are introduced.
The free-text context supplied at creation.