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

# Update workflow notification channel

> Update workflow-scoped notification channel. Only provided fields are updated.

Channels that have not been [verified](/api-reference/api/workflow/verify-workflow-notification-channel) cannot be updated.

## Path parameters

<ParamField path="workflow_id" type="string" required>
  The unique identifier of the workflow.
</ParamField>

<ParamField path="channel_id" type="string" required>
  The unique identifier of the notification channel to update.
</ParamField>

## Body

<ParamField body="channel_type" type="string">
  The existing channel type: `webhook` or `email`. This field is immutable. If provided, it must match the channel's current type.
</ParamField>

<ParamField body="description" type="string">
  Updated channel description. Maximum 255 characters.
</ParamField>

<ParamField body="event_types" type="array">
  Updated list of event types to subscribe to.

  | Value             | Description                                           |
  | ----------------- | ----------------------------------------------------- |
  | `job.scheduled`   | Job queued to run                                     |
  | `job.in_progress` | Job has started                                       |
  | `job.progress`    | Job has reached approximately 25% progress            |
  | `job.completed`   | Job finished processing                               |
  | `job.stopped`     | Job has stopped                                       |
  | `job.failed`      | Job failed to initialize without processing any files |
</ParamField>

<ParamField body="enabled" type="boolean">
  Whether the channel is active.
</ParamField>

<ParamField body="url" type="string">
  Updated webhook endpoint URL. Applies when `channel_type` is `webhook`.
</ParamField>

<ParamField body="secret" type="string">
  Updated signing secret for verifying incoming webhook requests. Must be between 24 and 75 bytes. Applies when `channel_type` is `webhook`. Omit to keep the current value, or pass an empty string to remove the custom secret.

  Use this secret to [verify incoming webhook requests](/api-reference/webhooks#verify-webhook-requests).
</ParamField>

<ParamField body="email_config" type="object">
  Updated email delivery configuration. Applies when `channel_type` is `email`.

  | Value             | Required | Description                                                                  |
  | ----------------- | -------- | ---------------------------------------------------------------------------- |
  | `recipient_email` | yes      | Email address to deliver notifications to.                                   |
  | `reply_to`        |          | Email address set as the reply-to header in notification emails.             |
  | `cc`              |          | Additional email addresses to copy on notification emails. Array of strings. |
</ParamField>

## Response

<ResponseField name="id" type="string" required>
  Unique identifier for the channel.
</ResponseField>

<ResponseField name="channel_type" type="string" required>
  Channel type: `webhook` or `email`.

  For more information, see [Webhooks](/api-reference/webhooks) and [Email notifications](/api-reference/email).
</ResponseField>

<ResponseField name="event_types" type="array" required>
  Subscribed event types.
</ResponseField>

<ResponseField name="enabled" type="boolean" required>
  Whether the channel is active.
</ResponseField>

<ResponseField name="created_at" type="string" required>
  ISO 8601 timestamp when the channel was created.
</ResponseField>

<ResponseField name="updated_at" type="string" required>
  ISO 8601 timestamp when the channel was last updated.
</ResponseField>

<ResponseField name="description" type="string">
  Channel description.
</ResponseField>

<ResponseField name="url" type="string">
  Webhook endpoint URL. Present when `channel_type` is `webhook`.
</ResponseField>

<ResponseField name="email_config" type="object">
  Email delivery configuration. Present when `channel_type` is `email`.
</ResponseField>

<RequestExample>
  ```bash cURL theme={null}
  curl --request PATCH \
    --url "${UNSTRUCTURED_API_URL}/api/v1/workflows/f0a1b2c3-4d5e-6f7a-8b9c-0d1e2f3a4b5c/notifications/channels/c1d2e3f4-5a6b-7c8d-9e0f-1a2b3c4d5e6f" \
    --header "unstructured-api-key: ${UNSTRUCTURED_API_KEY}" \
    --header "Content-Type: application/json" \
    --data '{
      "event_types": ["job.completed", "job.failed", "job.in_progress"],
      "enabled": true
    }'
  ```
</RequestExample>

<ResponseExample>
  ```json Response theme={null}
  {
    "id": "c1d2e3f4-5a6b-7c8d-9e0f-1a2b3c4d5e6f",
    "channel_type": "webhook",
    "description": "Job status alerts",
    "event_types": ["job.completed", "job.failed", "job.in_progress"],
    "enabled": true,
    "url": "https://hooks.example.com/notify",
    "created_at": "2026-04-29T10:00:00Z",
    "updated_at": "2026-04-29T11:00:00Z"
  }
  ```
</ResponseExample>
