> ## Documentation Index
> Fetch the complete documentation index at: https://docs.julian.11x.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Call Results Webhook

> Receive the full call result on your endpoint after each call is completed and analyzed.

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

```json theme={null}
{
  "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"
      }
    ],
    "followUpMeetingDetails": {
      "startTime": "2025-09-26T15:00:00.000Z",
      "endTime": "2025-09-26T15:30:00.000Z",
      "hostEmail": "rep@example.com",
      "meetingLink": "https://cal.com/video/abc123"
    }
  },
  "sequence": {
    "sequenceId": "call-sequence.xyz123",
    "lifecycleStatus": "in progress"
  },
  "promptVersionId": "prompt-ver.abc123"
}
```

## Agent-specific fields

<Note>
  Three fields in the payload are shaped by your agent's configuration rather than a fixed schema:
  `customInputVariables`, `callResult.extractedVariables`, and `callResult.outcomes`. The keys and values shown in the
  sample above are placeholders — expect the sets configured on your agent instead.
</Note>

* **`customInputVariables`** — the custom variables you submitted when enrolling the contact, echoed back
  verbatim. The set of keys is whatever your agent's configuration requires (the same variables the schedule
  endpoints ask you to include).
* **`callResult.extractedVariables`** — values the agent extracted from the conversation, keyed by the extraction
  variables configured on your agent.
* **`callResult.outcomes`** — each `name` is one of the outcome definitions configured on your agent, not a fixed
  enum. Fetch the configured set with [List agent outcomes](/api-reference/agents/list-agent-outcomes) to map
  webhook outcomes back to their definitions programmatically.

## `callResult.followUpMeetingDetails`

Present when a meeting was booked during the call. Its `meetingLink` is the meeting's join link for virtual meetings (e.g. Cal.com, Google Meet, Zoom, Teams), or the physical location/address for in-person bookings — so treat it as a free-form string rather than always a URL.

## `callResult.resultType` values

| Value                  | Description                                                 |
| ---------------------- | ----------------------------------------------------------- |
| `Goal Completed`       | Call completed successfully and the agent achieved its goal |
| `Goal Not Completed`   | Call completed but the agent did not achieve its goal       |
| `Voicemail`            | Call reached voicemail and has a recording                  |
| `Busy`                 | Line was busy or failed to connect (no recording)           |
| `No Conversation`      | Call connected but no meaningful conversation occurred      |
| `Opted Out`            | Contact opted out during the call                           |
| `Invalid Phone Number` | Phone number was invalid or not in service                  |
| `Cancelled`            | Call was cancelled before execution                         |
| `Failed`               | Call failed due to a technical or provider error            |
| `Scheduled`            | Call is scheduled for the future                            |
| `Rescheduled`          | Call was rescheduled to a different time                    |
| `Processing Analysis`  | Call ended but post-call analysis is still processing       |
| `Calling`              | Call is currently in progress                               |

## `sequence.lifecycleStatus` values

Use `sequence.lifecycleStatus` to determine whether a contact is still actively enrolled.

| Value         | Description                                                                              |
| ------------- | ---------------------------------------------------------------------------------------- |
| `done`        | Sequence has a call with a terminal outcome or has completed all its steps               |
| `in progress` | Sequence is actively running (default state)                                             |
| `cancelled`   | Sequence was manually cancelled by a user                                                |
| `failed`      | Error 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:

```bash theme={null}
curl https://julian.11x.ai/api/v1/agent/$AGENT_ID/call_event_sample \
  -H "x-api-key: $JULIAN_API_KEY"
```
