> For clean Markdown of any page, append .md to the page URL.
> For a complete documentation index, see https://docs.rightbrain.ai/llms.txt.
> For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://docs.rightbrain.ai/_mcp/server.

# Webhooks & forwarders

> Create webhook and email task forwarders, attach one to a task, and deliver each run result to an external system.

A task forwarder delivers a task's run result to somewhere outside Rightbrain automatically, every time the task runs. Two types exist: **webhook** (an HTTP POST to a URL you control) and **email** (a templated message to one or more recipients).

A forwarder is a project-level resource. You create it once, then attach it to a task by setting the task revision's `task_forwarder_id`. From then on, each run of that task fires the forwarder.

All requests use bearer authentication — see [Authentication](/docs/api/authentication).

## List forwarder types

Fetch the available types and their config schemas. This endpoint returns a plain array, not a paginated result set.

**`cURL`**

```bash title="cURL"
curl https://app.rightbrain.ai/api/v1/org/{org_id}/project/{project_id}/task_forwarder_type \
  -H "Authorization: Bearer YOUR_TOKEN"
```

## Create a forwarder

#### Webhook

Delivers the run result as an HTTP POST to `destination_url`, which must be an HTTPS URL. Optionally set a `signing_key` under `config_sensitive` — Rightbrain uses it to sign the forwarded payload so your receiver can verify authenticity. The signing key is encrypted at rest.

**`cURL`**

```bash title="cURL"
curl -X POST https://app.rightbrain.ai/api/v1/org/{org_id}/project/{project_id}/task_forwarder \
  -H "Authorization: Bearer YOUR_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "forwarder_type": "webhook",
    "name": "Post results to our ingest endpoint",
    "config": {
      "destination_url": "https://api.example.com/rightbrain/ingest"
    },
    "config_sensitive": {
      "signing_key": "your-shared-secret"
    }
  }'
```

#### Email

Sends a templated email to `recipient_emails` (with optional `cc_emails` and `bcc_emails`). The `subject_template` and `body_template` support `{variable}` placeholders that are filled from the task's run data.

**`cURL`**

```bash title="cURL"
curl -X POST https://app.rightbrain.ai/api/v1/org/{org_id}/project/{project_id}/task_forwarder \
  -H "Authorization: Bearer YOUR_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "forwarder_type": "email",
    "name": "Email the summary to the ops team",
    "config": {
      "recipient_emails": ["ops@example.com"],
      "cc_emails": [],
      "subject_template": "New summary for {customer_name}",
      "body_template": "Summary:\n\n{summary}"
    }
  }'
```

## Attach a forwarder to a task

Set the forwarder's ID as `task_forwarder_id` on the task revision when you create or update the task. Every run served by that revision then delivers its result through the forwarder.

**`cURL`**

```bash title="cURL"
curl -X POST https://app.rightbrain.ai/api/v1/org/{org_id}/project/{project_id}/task/{task_id} \
  -H "Authorization: Bearer YOUR_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"task_forwarder_id": "0190a234-8dc6-6d08-aea9-928fcecad8f1"}'
```

Updating a task creates a new revision, and new revisions start inactive — the forwarder takes effect once that revision is active. The attachment is versioned like any other task change. See [Versioning & revisions](/docs/production/revisions).

## Manage forwarders

**`Forwarder endpoints`**

```text title="Forwarder endpoints"
GET   .../task_forwarder             list forwarders (paginated)
POST  .../task_forwarder             create a forwarder
GET   .../task_forwarder/{id}        fetch a forwarder
POST  .../task_forwarder/{id}        update a forwarder
```

## Common patterns

* **Notify a channel.** Point a webhook forwarder at an automation platform (Zapier, Make, n8n) that relays into Slack, Teams, or a database.
* **Human-readable digest.** Use an email forwarder with a `body_template` that renders the fields your task outputs.
* **Verified delivery.** Set a `signing_key` on a webhook forwarder and verify the signature at your endpoint before trusting the payload.

#### [Triggers & runs](/docs/concepts/triggers-and-runs)

Start runs from webhooks, schedules, and inboxes.

#### [Run tasks via the API](/docs/api/run-tasks)

The run endpoint whose results forwarders deliver.