Skip to main content
GET
/
calls
/
{callId}
Get a call
curl --request GET \
  --url https://voice.growdental.ai/api/partner/v1/calls/{callId} \
  --header 'Authorization: Bearer <token>'
{ "id": "3c90c3cc-0d44-4b50-8888-8dd25736052a", "status": "<string>", "outcome": "<string>", "duration_seconds": 123, "summary": "<string>", "started_at": "2023-11-07T05:31:56Z", "ended_at": "2023-11-07T05:31:56Z", "created_at": "2023-11-07T05:31:56Z", "has_recording": true, "has_transcript": true, "practice_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a", "transcript": [ { "message": "<string>", "t": 123 } ] }

Authorizations

Authorization
string
header
required

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.

Path Parameters

callId
string<uuid>
required

Call ID.

Response

The call.

A single call. Includes practice_id; the transcript field is present only when your effective scopes include transcripts:read and your app has a signed BAA (omitted otherwise).

id
string<uuid>
required

Call ID.

direction
enum<string>
required
Available options:
inbound,
outbound
status
string
required

Call lifecycle status (e.g. initiated, in_progress, completed, failed).

outcome
string | null
required

Outcome classification set by post-call processing (e.g. appointment_booked, callback_requested, voicemail, no_answer, not_interested). null until the call completes and is classified. Treat unknown values as informational — new outcomes may be added without an API version bump.

Example:

"appointment_booked"

duration_seconds
integer | null
required

Call duration in seconds; null while in flight or if never connected.

summary
string | null
required

Short natural-language summary of the conversation.

started_at
string<date-time> | null
required
ended_at
string<date-time> | null
required
created_at
string<date-time>
required
has_recording
boolean
required

True when a recording is available via GET /calls/{callId}/recording.

has_transcript
boolean
required

True when a transcript exists (readable with transcripts:read + BAA).

practice_id
string<uuid>
required

Practice the call belongs to.

transcript
object[] | null

Full conversation transcript as { role, message, t } turns. Present only when your key (and practice grant, where it narrows) holds transcripts:read and your app has a signed BAA; null for calls without a stored transcript.