Call verdict corrected
Sent when a verdict about a call you were already sent changes.
Sent when a verdict about a call you were already sent changes. Today that is only a late voicemail verdict: the call is rewritten to status no_answer, sub_status voicemail_detected, and this event carries the corrected values with the call_id you already hold — update that row, do not add one. Sent only to a subscription that names call_corrected; a dashboard Custom Webhook receives it too.
Rate limit: none — this is an event Graine delivers to you.
call_correctedAuthorization
AuthorizationRequiredBearer <token>
Your Graine API key. Create one in the dashboard under Developers, or via POST /v2/api-keys. Send it as Authorization: Bearer <key>.
In: header
Request Body
application/jsonRequiredevent_typeRequiredstring
Which event this is. Branch on this.
"call_corrected"event_idRequiredstring | null
Stable per (call, event type): the same on every delivery attempt and if the event is ever sent twice. Your deduplication key.
versionstring | null
Payload version. "1.0" on every event today.
timestampstring | null
When this payload was built, ISO-8601 UTC.
call_idRequiredstring | null
The execution_id you received when the call was placed.
call_sidstring | null
The carrier's own leg id. For support tickets only; null when no carrier accepted the call.
agent_idstring | null
The agent you dialled — the original id, never the A/B variant that served the call.
agent_namestring | null
That agent's name, best-effort; null when it could not be looked up.
organization_idstring | null
Your organization.
workspace_idstring | null
Always the same value as organization_id.
statusRequiredstring
The call's public status: queued, initiated, ringing and in_progress while it is under way, then completed, busy, no_answer, failed or canceled. Underscores, not the hyphens of GET /v2/calls. Never null.
"busy" | "canceled" | "completed" | "failed" | "in_progress" | "initiated" | "no_answer" | "queued" | "ringing"sub_statusAny properties in string, string, string
Why the call reached that status. Null while it is under way; UPPERCASE when status is completed and lowercase otherwise, so the casing alone says whether the call connected; sip_ for a carrier response with no name of its own.
call_typestring | null
inbound or outbound.
calling_sourcestring | null
"custom" whenever a carrier carried the call; null when none was recorded. Which carrier is not part of this contract.
custom_args_valuesobject | null
The variables you sent with the call, metadata merged over them, minus platform keys and any key that reads like a sentence. Never null.
to_numberstring | null
The number dialled, E.164.
from_numberstring | null
The caller ID used, E.164.
bulk_list_idstring | null
The batch this call belonged to; null for a call placed directly.
called_onstring | null
When this attempt was dialled, for a call placed by a batch. For any other call it is created_at — for a scheduled call, when it was booked. ISO-8601 UTC.
created_atstring | null
When the call record was created, ISO-8601 UTC.
correction_reasonstring | null
"late_voicemail_verdict" — the only correction the platform makes today.
previous_statusstring | null
The status you were sent before: "completed" for a late voicemail verdict.
previous_sub_statusstring | null
The sub_status you were sent before, when it is known. Null today: the record has been rewritten by the time this is built.
call_costnumber | null
Always 0.0 in this event.
answered_by_voice_mailboolean | null
Always true.

