Campaigns webhook payload

The payload Sarvam POSTs to your webhook after every campaign call attempt.
View as Markdown

After each call attempt completes — whether or not it connected — Sarvam sends a POST request to your webhook URL with the attempt result. Configure the webhook URL in the campaign’s app_config.webhook_config.

Payload schema

FieldTypeDescription
app_idstring (required)ID of the agent.
app_versioninteger (required)Version of the agent.
attempt_idstring (required)Unique identifier for this call attempt.
campaign_idstring (required)Campaign this attempt belongs to.
cohort_idstring (required)Cohort this attempt belongs to.
completion_statusstring (required)Outcome of the call. One of completed, partial, failed.
connectivity_statusstring | nullWhether the call connected. One of connected, busy, no_answer, failed, or null.
next_action_statusstring | nullNext action for the retry engine (retry, reschedule, business_retry, short_duration_retry, provider_error_retry, internal_error_retry), or null if terminal.
failure_reasonstring | nullReason for failure, if applicable.
user_identifierstring (required)Unique identifier for the user (from cohort transformation config).
user_phone_numberstring (required)Phone number of the user in E.164 format.
agent_phone_numberstring | nullPhone number used by the agent for the call.
durationnumber | nullCall duration in seconds. null if the call did not connect.
interaction_idstring | nullUnique interaction ID for retrieving transcripts and recordings. null if the call did not connect.
retry_attemptinteger (required)Which attempt this is (0 = first attempt, 1 = first retry, and so on).
executed_atstring | nullTimestamp when the call was executed (ISO 8601).
initial_agent_variablesobject | nullAgent variables passed to the call from the cohort.
final_agent_variablesobject | nullAgent variables at the end of the conversation. null if the call did not connect.
interaction_transcriptarray | nullTranscript of the conversation as a list of turns. Each turn has role ("agent" or "user") and en_text. null if the call did not connect.
metadataobject | nullCustom metadata from the webhook configuration.

Examples

Connected attempt

1{
2 "app_id": "my-agent-app",
3 "app_version": 1,
4 "attempt_id": "019d392a-4f5a-7db3-904a-6ecebb9aac96",
5 "campaign_id": "welcome-campaign-2026",
6 "cohort_id": "cohort-batch-01",
7 "completion_status": "completed",
8 "connectivity_status": "connected",
9 "next_action_status": null,
10 "failure_reason": null,
11 "user_identifier": "user-1001",
12 "user_phone_number": "+919876543210",
13 "agent_phone_number": "+91804XXXXXXX",
14 "duration": 42.5,
15 "interaction_id": "20260329/a1b2c3d4-10:30:00-e5f6a7b8",
16 "retry_attempt": 0,
17 "executed_at": "2026-03-29T10:30:45+05:30",
18 "initial_agent_variables": {
19 "customer_name": "Rahul Kumar",
20 "outstanding_amount": "1500"
21 },
22 "final_agent_variables": {
23 "payment_confirmed": "yes",
24 "sentiment": "positive"
25 },
26 "interaction_transcript": [
27 { "role": "agent", "en_text": "Hello Rahul, I'm calling about your pending payment of 1500 rupees." },
28 { "role": "user", "en_text": "Yes, I'll pay today." }
29 ],
30 "metadata": { "team": "collections" }
31}

Not connected attempt

1{
2 "app_id": "my-agent-app",
3 "app_version": 1,
4 "attempt_id": "019d392a-11c6-72bd-8eb7-c37e84bbd1f3",
5 "campaign_id": "welcome-campaign-2026",
6 "cohort_id": "cohort-batch-01",
7 "completion_status": "failed",
8 "connectivity_status": "failed",
9 "next_action_status": "retry",
10 "failure_reason": "TelephonyProvider: Rate Limit Exceeded",
11 "user_identifier": "user-1002",
12 "user_phone_number": "+919876543211",
13 "agent_phone_number": "+91804XXXXXXX",
14 "duration": null,
15 "interaction_id": null,
16 "retry_attempt": 1,
17 "executed_at": "2026-03-29T10:40:26+05:30",
18 "initial_agent_variables": {
19 "customer_name": "Priya Sharma",
20 "outstanding_amount": "2500"
21 },
22 "final_agent_variables": null,
23 "interaction_transcript": null,
24 "metadata": { "team": "collections" }
25}