Skip to main content
Julian sends a POST request to your configured webhook URL after each call is completed and analyzed. The payload contains everything about the call: contact details, duration, transcript, assigned outcomes, extracted variables, and any actions taken by the agent or requested by the contact. The full payload schema is documented in the API Reference tab under Webhooks.

Sample payload

{
  "agentId": "agent.abc123",
  "agentName": "Inbound Agent",
  "callId": "call.abc123",
  "name": "Victor Wembly",
  "phoneNumber": "+15551234567",
  "phoneNumberExt": "",
  "fromPhoneNumber": "+15559876543",
  "scheduledAt": "2025-09-25T08:20:48.760Z",
  "timezone": "Europe/London",
  "direction": "outbound",
  "customInputVariables": {
    "prospect_name": "Victor",
    "prospect_surname": "Wemby"
  },
  "duration": 46,
  "callUrl": "https://julian.11x.ai/.../calls/call.abc123",
  "rescheduledAt": null,
  "callResult": {
    "resultType": "Goal Completed",
    "summary": "Julian reached Victor and booked a follow-up meeting.",
    "extractedVariables": {
      "example__summary": "User inquired to request...",
      "example__appt_time": "2025-09-25T08:20:48.760Z"
    },
    "agentActions": [
      {
        "description": "Scheduled follow-up meeting",
        "status": "completed",
        "actionKey": "schedule_meeting",
        "completedAt": "2025-09-25T08:21:30.000Z",
        "metadata": {}
      }
    ],
    "humanActions": [],
    "transcription": "User: ...",
    "outcomes": [
      {
        "name": "interested",
        "reasoning": "Customer expressed interest in the product"
      }
    ]
  },
  "sequence": {
    "sequenceId": "call-sequence.xyz123",
    "lifecycleStatus": "in progress"
  }
}

callResult.resultType values

ValueDescription
Goal CompletedCall completed successfully and the agent achieved its goal
Goal Not CompletedCall completed but the agent did not achieve its goal
VoicemailCall reached voicemail and has a recording
BusyLine was busy or failed to connect (no recording)
No ConversationCall connected but no meaningful conversation occurred
Opted OutContact opted out during the call
Invalid Phone NumberPhone number was invalid or not in service
CancelledCall was cancelled before execution
FailedCall failed due to a technical or provider error
ScheduledCall is scheduled for the future
RescheduledCall was rescheduled to a different time
Processing AnalysisCall ended but post-call analysis is still processing
CallingCall is currently in progress

sequence.lifecycleStatus values

Use sequence.lifecycleStatus to determine whether a contact is still actively enrolled.
ValueDescription
doneSequence has a call with a terminal outcome or has completed all its steps
in progressSequence is actively running (default state)
cancelledSequence was manually cancelled by a user
failedError prevented the sequence from continuing (invalid phone number, internal error, etc)

Best practices

  • Implement idempotency — handle duplicate webhook deliveries gracefully (key on callId).
  • Respond quickly — return a 2xx promptly and process the payload asynchronously.
  • Log deliveries — keep webhook request logs for debugging.
  • Monitor failures — set up alerting on webhook processing errors.

Testing your endpoint

Fetch a sample webhook payload for any agent to test your endpoint before going live:
curl https://julian.11x.ai/api/v1/agent/$AGENT_ID/call_event_sample \
  -H "x-api-key: $JULIAN_API_KEY"