> For the complete documentation index, see [llms.txt](https://docs.moderncollections.io/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.moderncollections.io/webhooks/events/call.completed.md).

# call.completed

Fired after a voice call ends, the recording is processed, the transcript is generated, and the post-call LLM has classified the outcome.

## When this fires

* An outbound voice call we placed terminates and post-call processing finishes.

The webhook is emitted from the post-call pipeline. If the call was the placement's first completed call, a [`placement.first_contact`](/webhooks/events/placement.first_contact.md) event is dispatched immediately afterwards.

## Payload

```json
{
  "event": "call.completed",
  "timestamp": "2026-05-12T14:32:00+00:00",
  "placement_id": "550e8400-e29b-41d4-a716-446655440000",
  "call_id": "770e8400-e29b-41d4-a716-446655440000",
  "outcome": "payment_agreed",
  "summary": "Debtor agreed to pay full balance by April 15. Wired ACH.",
  "duration_seconds": 142
}
```

## Fields

| Field              | Type              | Notes                                                                                          |
| ------------------ | ----------------- | ---------------------------------------------------------------------------------------------- |
| `event`            | string            | Always `"call.completed"`.                                                                     |
| `timestamp`        | string (ISO-8601) | When the event was constructed.                                                                |
| `placement_id`     | string (UUID)     | Placement the call belonged to.                                                                |
| `call_id`          | string (UUID)     | The `CallRecord` id — primary key on the platform's call record table.                         |
| `outcome`          | string \| null    | The post-call classified outcome enum value (see below). May be null if classification failed. |
| `summary`          | string \| null    | The AI-generated post-call summary. May be null if generation failed.                          |
| `duration_seconds` | integer \| null   | Length of the connected call in seconds. May be null for calls that never connected.           |

Recording URLs, transcript URLs, attempt counts, contact-name extraction, compliance flags, and timing details (`started_at`, `ended_at`) are NOT included in the webhook payload today. Fetch the call record via the REST API if you need them.

## Outcome enum

The platform's call-outcome enum (`CallOutcome`):

* `payment_agreed`
* `plan_agreed`
* `dispute_raised`
* `callback_requested`
* `hostile`
* `no_outcome`
* `voicemail_left`
* `wrong_contact`
* `no_answer`
* `failed`

The enum may grow — treat unknown values as informational rather than erroring.

## Follow-up events

* A call that produced a payment commitment also fires [`payment.commitment_made`](/webhooks/events/payment.commitment_made.md).
* A call that raised a dispute also fires [`placement.disputed`](/webhooks/events/placement.disputed.md).
* The placement's first completed call also fires [`placement.first_contact`](/webhooks/events/placement.first_contact.md).

## See also

* [`payment.commitment_made`](/webhooks/events/payment.commitment_made.md)
* [`placement.disputed`](/webhooks/events/placement.disputed.md)
* [`placement.first_contact`](/webhooks/events/placement.first_contact.md)


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://docs.moderncollections.io/webhooks/events/call.completed.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
