VoxLink.ai

API Reference

Post-Call Webhook

Webhook sent after a call is completed containing extracted variables and call data

Updated 24 Mar 2026

The Post-Call Webhook is automatically sent to your specified webhook URL after each call is completed. This webhook contains call details, extracted variables, transcript, and optionally the recording URL.

Webhook Configuration

To enable post-call webhooks:

  1. Configure your assistant's webhook URL in the assistant settings
  2. Enable "Post call webhook" in the assistant configuration
  3. Define post-call variables that the AI should extract

Request Format

The webhook is sent as a POST request to your configured URL with the following JSON payload:

Payload Structure

idinteger

Unique identifier of the call

customer_phonestring

Phone number of the customer in E.164 format (e.g., "+1234567890") or null if not available

assistant_phonestring

Phone number used by the assistant in E.164 format or null if not available

durationinteger

Duration of the call in seconds

statusstring

Final status of the call (e.g., "completed", "busy", "failed")

extracted_variablesobject

Variables extracted by AI based on your post-call schema configuration

statusboolean

  Whether the call objective was achieved

summarystring

  Call summary in a few words

custom_variablestring|number|boolean

  Any custom variables you defined in the assistant configuration

input_variablesobject

Variables that were passed to the assistant before the call started

transcriptstring

Full transcript of the conversation

recording_urlstring

URL to download the call recording (only included if "Include recording in webhook" is enabled in assistant settings)

created_atstring

ISO 8601 timestamp when the call was initiated

finished_atstring

ISO 8601 timestamp when the call was completed (uses updated_at from the call record)

leadobject

Lead information (only included for campaign calls)

idinteger

  Unique identifier of the lead

phone_numberstring

  Lead's phone number

variablesobject

  Variables associated with the lead

statusstring

  Current status of the lead

call_triesinteger

  The number of call attempts made to this lead

created_atstring

  When the lead was created

updated_atstring

  When the lead was last updated

campaignobject

  Campaign information (if available)

idinteger

      Campaign ID

namestring

      Campaign name

statusstring

      Campaign status

allowed_hours_start_timestring

      Campaign allowed start time

allowed_hours_end_timestring

      Campaign allowed end time

allowed_daysarray

      Campaign allowed days

max_calls_in_parallelinteger

      Maximum concurrent calls for campaign

max_retriesinteger

      Maximum retry attempts for leads

retry_intervalinteger

      Retry interval in minutes

created_atstring

      When the campaign was created

updated_atstring

      When the campaign was last updated

transfersarray

List of transfer calls made during this call (only included if the call has transfers)

idinteger

  Unique identifier of the transfer call

statusstring

  Final status of the transfer call (e.g., "completed", "busy", "failed")

transfer_tostring

  Phone number the call was transferred to in E.164 format

durationinteger

  Duration of the transfer call in seconds

carrier_costnumber

  Carrier cost of the transfer call in USD

transcriptarray

  Raw transcript of the transfer call (null if not available)

formatted_transcriptstring

  Human-readable formatted transcript of the transfer call

recording_urlstring

  URL to download the transfer call recording (only included if "Include recording in webhook" is enabled and a recording exists)

created_atstring

  ISO 8601 timestamp when the transfer was initiated

finished_atstring

  ISO 8601 timestamp when the transfer was completed
{
  "id": 12345,
  "customer_phone": "+1234567890",
  "assistant_phone": "+1987654321",
  "duration": 125,
  "status": "completed",
  "extracted_variables": {
    "status": true,
    "summary": "Customer interested in product demo",
    "lead_quality": "high",
    "next_action": "schedule_demo"
  },
  "input_variables": {
    "customer_name": "John Doe",
    "product_interest": "Pro Plan"
  },
  "transcript": [
    {
      "text": "Hello! This is Sarah from VoxLink. How are you today?",
      "type": "transcript",
      "sender": "bot",
      "timestamp": 1756812511.315143
    },
    {
      "text": "Hi, I'm doing well, thanks for calling.",
      "type": "transcript",
      "sender": "human",
      "timestamp": 1756812514.104436
    },
    {
      "text": "I'm calling to tell you about our new product features.",
      "type": "transcript",
      "sender": "bot",
      "timestamp": 1756812522.918859
    },
    {
      "text": "That sounds interesting, tell me more.",
      "type": "transcript",
      "sender": "human",
      "timestamp": 1756812525.234567
    }
  ],
  "formatted_transcript": "AI: Hello! This is Sarah from VoxLink. How are you today?\nCustomer: Hi, I'm doing well, thanks for calling.\nAI: I'm calling to tell you about our new product features.\nCustomer: That sounds interesting, tell me more.",
  "recording_url": "https://app.voxlink.ai/storage/recordings/call-12345.mp4",
  "created_at": "2025-01-15T10:30:00.000000Z",
  "finished_at": "2025-01-15T10:32:05.000000Z",
  "transfers": [
    {
      "id": 12346,
      "status": "completed",
      "transfer_to": "+1555123456",
      "duration": 85,
      "carrier_cost": 0.0156,
      "transcript": null,
      "formatted_transcript": "",
      "created_at": "2025-01-15T10:31:00.000000Z",
      "finished_at": "2025-01-15T10:32:25.000000Z"
    }
  ],
  "lead": {
    "id": 789,
    "phone_number": "+1234567890",
    "variables": {
      "source": "website",
      "interest_level": "high"
    },
    "status": "contacted",
    "call_tries": 2,
    "created_at": "2025-01-15T09:00:00.000000Z",
    "updated_at": "2025-01-15T10:32:05.000000Z",
    "campaign": {
      "id": 456,
      "name": "Product Demo Campaign",
      "status": "active",
      "allowed_hours_start_time": "09:00",
      "allowed_hours_end_time": "17:00",
      "allowed_days": ["monday", "tuesday", "wednesday", "thursday", "friday"],
      "max_calls_in_parallel": 5,
      "max_retries": 3,
      "retry_interval": 60,
      "created_at": "2025-01-15T08:00:00.000000Z",
      "updated_at": "2025-01-15T08:00:00.000000Z"
    }
  }
}

Webhook Settings

You can configure the following options for your post-call webhook:

  • Send webhook only on completed: Only send the webhook for successfully completed calls
  • Include recording in webhook: Include the recording_url field in the payload
  • Custom variables: Define custom variables that the AI should extract from the conversation

Important Notes

  • The customer_phone and assistant_phone fields can be null if the information is not available
  • The recording_url field is only included if you have enabled "Include recording in webhook" in your assistant settings
  • The lead object is only included for calls that are part of a campaign
  • The transfers array is only included for calls that have transfer calls associated with them
  • The extracted_variables object will contain the variables you defined in your assistant's post-call schema configuration

Related guides