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

# Event: Outreach failed

> Receive terminal outreach failures and route leads that need manual review.

Fired when an automated outbound follow-up or recontact attempt cannot reach a lead. Examples include missing contact data, an opt-out, an invalid number, an unavailable channel, or an unknown delivery outcome. Use this event to route the lead for manual review.

This event also surfaces an Instagram recontact that cannot be sent because the reply window is closed.

## Payload

```json theme={null}
{
  "event_type": "outreach.failed",
  "event_id": "...",
  "webhook_id": "...",
  "delivery_id": "...",
  "timestamp": "2026-04-17T16:30:00.000Z",
  "client_id": "...",
  "test": false,
  "data": {
    "outreach": {
      "channel": "whatsapp",
      "reason": "invalid_number",
      "detail": "INVALID_PHONE:too_short",
      "source": "futurology_tasks",
      "failed_at": "2026-04-17T16:30:00.000Z"
    },
    "lead": {
      "id": "uuid",
      "first_name": "Tony",
      "last_name": "Stark",
      "email": null,
      "phone": null,
      "company": "Stark Industries",
      "source": "api",
      "external_id": null,
      "metadata": {}
    },
    "workflow": {
      "id": "uuid",
      "name": "Lead to purchase intent"
    }
  }
}
```

## Fields

### `data.outreach`

| Field       | Type              | Description                                                                                  |
| ----------- | ----------------- | -------------------------------------------------------------------------------------------- |
| `channel`   | string \| null    | Channel recorded for the attempt, such as `whatsapp`, `instagram`, `email`, `call`, or `sms` |
| `reason`    | string            | Why the attempt failed. See [Reasons](#reasons).                                             |
| `detail`    | string \| null    | Diagnostic detail when recorded. It is `null` for the generic `delivery_failed` fallback.    |
| `source`    | string            | Where the failure was detected: `futurology_tasks` or `recontact_log`                        |
| `failed_at` | string (ISO 8601) | When the attempt failed                                                                      |

### Reasons

| `reason`               | Meaning                                                                                                             |
| ---------------------- | ------------------------------------------------------------------------------------------------------------------- |
| `missing_contact_data` | The lead had no contact value for the selected channel                                                              |
| `opt_out`              | The lead opted out or is marked as not contactable                                                                  |
| `invalid_number`       | The phone number was rejected as invalid or undeliverable                                                           |
| `channel_down`         | The channel could not send, such as an account problem or a closed Instagram reply window                           |
| `unreachable`          | Nexor marked the lead as unreachable on that channel                                                                |
| `ambiguous_delivery`   | The provider request may have succeeded, but Nexor could not confirm the outcome and suppressed an automatic resend |
| `delivery_failed`      | Generic fallback for an uncategorized failure. `detail` is `null`.                                                  |

### `data.lead`

| Field         | Type           | Description                |
| ------------- | -------------- | -------------------------- |
| `id`          | string (uuid)  | Lead ID                    |
| `first_name`  | string \| null | Lead's first name          |
| `last_name`   | string \| null | Lead's last name           |
| `email`       | string \| null | Lead's email               |
| `phone`       | string \| null | Lead's phone               |
| `company`     | string \| null | Lead's company             |
| `source`      | string         | Source stored for the lead |
| `external_id` | string \| null | ID from an external system |
| `metadata`    | object         | Lead metadata              |

### `data.workflow`

The `workflow` value can be `null` if the failed task has no associated workflow.

| Field  | Type          | Description   |
| ------ | ------------- | ------------- |
| `id`   | string (uuid) | Workflow ID   |
| `name` | string        | Workflow name |

## Filtering

Use the **Agent** selector in the dashboard to receive this event for every agent or only one agent.
