> ## Documentation Index
> Fetch the complete documentation index at: https://docs.agents.labs.bandwidth.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Receive call results

> Configure an HTTPS webhook to receive the result of a completed call.

You need an HTTPS endpoint you control and a saved credential if the receiver requires authentication.

## Configure delivery

Add a **Webhook** node to your workflow. Set its endpoint URL, HTTP method, credential, headers, and JSON payload template. Enabled webhook nodes run after the conversation completes; they do not need to be on a spoken conversation path.

Use `POST`, `PUT`, or `PATCH` to send a JSON body. `GET` and `DELETE` requests do not send the payload template as a body.

## Payload variables

| Variable                               | Value                               |
| -------------------------------------- | ----------------------------------- |
| `workflow_run_id`, `workflow_run_name` | Completed run identifiers           |
| `workflow_id`, `workflow_name`         | Agent identifiers                   |
| `campaign_id`                          | Campaign identifier when applicable |
| `call_time`                            | Run creation timestamp              |
| `initial_context`                      | Data supplied before the call       |
| `gathered_context`                     | Extracted conversation data         |
| `cost_info`                            | Available cost information          |
| `annotations`                          | Available analysis results          |
| `recording_url`, `transcript_url`      | Available artifact links            |

Example payload template:

```json theme={null}
{
  "run_id": "{{workflow_run_id}}",
  "customer": "{{initial_context.customer_name}}",
  "outcome": "{{gathered_context.resolution}}",
  "recording": "{{recording_url}}"
}
```

Fields can be empty when no value or artifact is available. Check them before updating your application.

## Authenticate requests

Select a stored credential for an API-key header, bearer token, basic authentication, or a custom header. Your receiver must verify that credential before accepting the event. You can add other headers in the Webhook settings.

## Build a reliable receiver

Return a successful response promptly and finish slow work in your own application. The request timeout is 30 seconds. Use the run ID to avoid processing the same result twice.

Webhook delivery does not provide a configurable automatic retry policy. Inspect delivery results in the run and reconcile missing results with [list runs](/api-reference/agents/runs/list) and [get a run](/api-reference/agents/runs/get). Do not rely on a webhook as your only record of an important action.

## Test the complete flow

Save your workflow, run a controlled conversation, and confirm that your service receives the expected run ID and fields. Test a rejected credential and a temporarily unavailable receiver so your application can detect missing results.
