---
title: "Update a channel"
description: "Assign the Agent that answers on a channel, switch its traffic, or change what people see. `agentId` assigns an Agent whose modality fits the channel (`null` stops inbound automation and preserves WhatsApp outbound traffic). Inbound traffic and outbound traffic on voice or web channels require an Agent; WhatsApp outbound notifications do not. WhatsApp channels accept `profile` (the business profile people see in WhatsApp); web channels accept `widget` (the complete new widget configuration) and `widgetLogo` (PNG, JPEG or WebP up to 256 KiB; `null` removes it). Omitted fields stay.\n\n- **Scope:** `raiz:channels:write`\n- **Credentials:** an API key, a client-credentials token or a person's access token\n- **Effect:** writes; idempotent, safe to retry\n- **Limits:** request body up to 512 KB, response up to 1 MB\n- **CLI:** `arbol raiz channels update` · **MCP tool:** `raiz_channels_update`"
---

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

Path: Raíz API › Channels

`PATCH /v1/raiz/channels/{channelId}`

Assign the Agent that answers on a channel, switch its traffic, or change what people see. `agentId` assigns an Agent whose modality fits the channel (`null` stops inbound automation and preserves WhatsApp outbound traffic). Inbound traffic and outbound traffic on voice or web channels require an Agent; WhatsApp outbound notifications do not. WhatsApp channels accept `profile` (the business profile people see in WhatsApp); web channels accept `widget` (the complete new widget configuration) and `widgetLogo` (PNG, JPEG or WebP up to 256 KiB; `null` removes it). Omitted fields stay.

- **Scope:** `raiz:channels:write`
- **Credentials:** an API key, a client-credentials token or a person's access token
- **Effect:** writes; idempotent, safe to retry
- **Limits:** request body up to 512 KB, response up to 1 MB
- **CLI:** `arbol raiz channels update` · **MCP tool:** `raiz_channels_update`

## Authentication

Requires one of the following:

- `arbolHuman`, oauth2, scopes: `raiz:channels:write`
- `arbolMachine`, oauth2, scopes: `raiz:channels:write`
- `arbolApiKey`, http, header `Authorization`

## Path parameters

- `channelId` (`raiz.channels.update.path.channelId`; string, required) — Channel id.
  - pattern `^(?:chn_(?:[0-7][0-9a-hjkmnp-tv-z]{25}|(?:[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}|[a-f0-9]{32}))|(?:agc)_(?:[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}|[a-f0-9]{32}))$`

## Request body

_Required._

- `aiCoveragePercent` (`raiz.channels.update.aiCoveragePercent`; integer, optional)
  - min 0; max 100
- `businessHours` (`raiz.channels.update.businessHours`; any of, optional)
  - any of: `RaizBusinessHours`, `null`
- `agentId` (`raiz.channels.update.agentId`; string | null, optional) — The Agent to assign; null stops inbound automation. WhatsApp outbound notifications may remain enabled.
  - pattern `^agt_(?:[0-7][0-9a-hjkmnp-tv-z]{25}|(?:[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}|[a-f0-9]{32}))$`
- `expectedVersion` (`raiz.channels.update.expectedVersion`; integer, optional) — The `version` you read. When present, the change applies only if nobody changed the resource since; otherwise it fails with VERSION_CONFLICT.
  - min 1
- `inboundEnabled` (`raiz.channels.update.inboundEnabled`; boolean, optional) — Inbound traffic needs an assigned Agent. WhatsApp outbound traffic can send notifications without one; other channel types require an Agent. Defaults to on when created with an Agent.
- `name` (`raiz.channels.update.name`; string | null, optional)
  - minLength 1; maxLength 120
- `outboundEnabled` (`raiz.channels.update.outboundEnabled`; boolean, optional) — Inbound traffic needs an assigned Agent. WhatsApp outbound traffic can send notifications without one; other channel types require an Agent. Defaults to on when created with an Agent.
- `profile` (`raiz.channels.update.profile`; object, optional) — WhatsApp channels only: changes to the business profile, applied at WhatsApp.
  - `about` (`raiz.channels.update.profile.about`; string, optional)
    - minLength 1; maxLength 139
  - `address` (`raiz.channels.update.profile.address`; string, optional)
    - maxLength 256
  - `description` (`raiz.channels.update.profile.description`; string, optional)
    - maxLength 512
  - `email` (`raiz.channels.update.profile.email`; string, optional)
    - format `email`; maxLength 128
  - `vertical` (`raiz.channels.update.profile.vertical`; string, optional) — The business category.
    - one of `"ALCOHOL"`, `"APPAREL"`, `"AUTO"`, `"BEAUTY"`, `"EDU"`, `"ENTERTAIN"`, `"EVENT_PLAN"`, `"FINANCE"`, `"GOVT"`, `"GROCERY"`, `"HEALTH"`, `"HOTEL"`, `"NONPROFIT"`, `"ONLINE_GAMBLING"`, `"OTC_DRUGS"`, `"OTHER"`, `"PHYSICAL_GAMBLING"`, `"PROF_SERVICES"`, `"RESTAURANT"`, `"RETAIL"`, `"TRAVEL"`
  - `websites` (`raiz.channels.update.profile.websites`; array<string>, optional)
    - maxLength 256; pattern `^https?://`
- `widget` (`raiz.channels.update.widget`; object, optional) — The web chat widget's configuration.
  - `allowedOrigins` (`raiz.channels.update.widget.allowedOrigins`; array<string>, required) — Exact origins allowed to embed the widget. The Dashboard may always preview it.
    - maxLength 256; pattern `^(https://[a-z0-9]([a-z0-9-]*[a-z0-9])?(\.[a-z0-9]([a-z0-9-]*[a-z0-9])?)*|http://(localhost|127\.0\.0\.1))(:[0-9]{1,5})?$`
  - `title` (`raiz.channels.update.widget.title`; string, required)
    - minLength 1; maxLength 80
  - `agents` (`raiz.channels.update.widget.agents`; array<object>, optional) — Up to 6 more Agents the visitor may pick; each Agent at most once.
    - default `[]`
    - `agentId` (`raiz.channels.update.widget.agents.agentId`; string, required) — A text Agent of the same organization.
      - pattern `^agt_(?:[0-7][0-9a-hjkmnp-tv-z]{25}|(?:[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}|[a-f0-9]{32}))$`
    - `label` (`raiz.channels.update.widget.agents.label`; string, required)
      - minLength 1; maxLength 60
    - `description` (`raiz.channels.update.widget.agents.description`; string, optional)
      - maxLength 120; default `""`
  - `allowBusinessTools` (`raiz.channels.update.widget.allowBusinessTools`; boolean, optional) — Let the Agent use its business tools (its integration tools) with anonymous visitors.
    - default `false`
  - `animation` (`raiz.channels.update.widget.animation`; string, optional)
    - one of `"slide"`, `"fade"`, `"scale"`, `"none"`; default `"slide"`
  - `askFirstMessage` (`raiz.channels.update.widget.askFirstMessage`; boolean, optional) — The pre-chat form asks for the first message, which opens the conversation.
    - default `true`
  - `assistantColor` (`raiz.channels.update.widget.assistantColor`; string, optional) — Background behind the Agent's messages; the background color shows them as plain text. A color in `#RRGGBB` form.
    - pattern `^#[0-9a-fA-F]{6}$`; default `"#FFFFFF"`
  - `assistantTextColor` (`raiz.channels.update.widget.assistantTextColor`; string | null, optional) — Text of the Agent's messages; null: `textColor`. A color in `#RRGGBB` form, or null to derive it.
    - pattern `^#[0-9a-fA-F]{6}$`; default `null`
  - `attachmentsEnabled` (`raiz.channels.update.widget.attachmentsEnabled`; boolean, optional)
    - default `false`
  - `attachmentTypes` (`raiz.channels.update.widget.attachmentTypes`; array<string>, optional)
    - one of `"image/png"`, `"image/jpeg"`, `"application/pdf"`, `"text/plain"`; default `["image/png","image/jpeg","application/pdf","text/plain"]`
  - `avatarUrl` (`raiz.channels.update.widget.avatarUrl`; any of, optional)
    - default `null`
    - any of: `RaizHttpsUrl`, `null`
  - `backgroundColor` (`raiz.channels.update.widget.backgroundColor`; string, optional) — A color in `#RRGGBB` form.
    - pattern `^#[0-9a-fA-F]{6}$`; default `"#F6F8F5"`
  - `borderColor` (`raiz.channels.update.widget.borderColor`; string, optional) — A color in `#RRGGBB` form.
    - pattern `^#[0-9a-fA-F]{6}$`; default `"#CAD4CD"`
  - `borderWidth` (`raiz.channels.update.widget.borderWidth`; integer, optional)
    - min 0; max 4; default `1`
  - `clientTools` (`raiz.channels.update.widget.clientTools`; array<object>, optional) — Up to 8 browser tools with unique names.
    - default `[]`
    - `description` (`raiz.channels.update.widget.clientTools.description`; string, required)
      - minLength 1; maxLength 400
    - `name` (`raiz.channels.update.widget.clientTools.name`; string, required)
      - pattern `^[a-z][a-z0-9_]{0,39}$`
    - `parameters` (`raiz.channels.update.widget.clientTools.parameters`; array<object>, required)
      - `name` (`raiz.channels.update.widget.clientTools.parameters.name`; string, required)
        - pattern `^[a-zA-Z][a-zA-Z0-9_]{0,39}$`
      - `required` (`raiz.channels.update.widget.clientTools.parameters.required`; boolean, required)
      - `type` (`raiz.channels.update.widget.clientTools.parameters.type`; string, required)
        - one of `"string"`, `"number"`, `"boolean"`
  - `controlRadius` (`raiz.channels.update.widget.controlRadius`; integer | null, optional) — Corner radius of fields and buttons, in pixels; 24 makes pill-shaped buttons. Null: derived from `radius`.
    - min 0; max 24; default `null`
  - `consentText` (`raiz.channels.update.widget.consentText`; string, optional)
    - minLength 1; maxLength 500; default `"Acepto compartir estos datos y esta conversación con esta organización."`
  - `customCss` (`raiz.channels.update.widget.customCss`; string, optional) — A stylesheet applied inside the panel only; the launcher uses the style fields.
    - maxLength 8000; default `""`
  - `errorColor` (`raiz.channels.update.widget.errorColor`; string, optional) — Field errors and failures the visitor must see. A color in `#RRGGBB` form.
    - pattern `^#[0-9a-fA-F]{6}$`; default `"#B42318"`
  - `fields` (`raiz.channels.update.widget.fields`; array<object>, optional) — Up to 40 form fields with unique names, asked before the conversation (or alone, in `form` mode).
    - default `[]`
    - `label` (`raiz.channels.update.widget.fields.label`; string, required)
      - minLength 1; maxLength 80
    - `name` (`raiz.channels.update.widget.fields.name`; string, required)
      - pattern `^[a-zA-Z][a-zA-Z0-9_]{0,39}$`
    - `required` (`raiz.channels.update.widget.fields.required`; boolean, required)
    - `type` (`raiz.channels.update.widget.fields.type`; string, required)
      - one of `"text"`, `"textarea"`, `"email"`, `"tel"`, `"number"`, `"date"`, `"select"`, `"radio"`, `"checkbox"`, `"url"`
    - `description` (`raiz.channels.update.widget.fields.description`; string, optional) — Help shown under the label.
      - maxLength 300; default `""`
    - `options` (`raiz.channels.update.widget.fields.options`; array<string>, optional)
      - minLength 1; maxLength 80; default `[]`
    - `placeholder` (`raiz.channels.update.widget.fields.placeholder`; string, optional)
      - maxLength 120; default `""`
    - `width` (`raiz.channels.update.widget.fields.width`; string, optional) — `half` sets two consecutive half fields side by side on wide screens.
      - one of `"full"`, `"half"`; default `"full"`
  - `firstMessageLabel` (`raiz.channels.update.widget.firstMessageLabel`; string, optional)
    - minLength 1; maxLength 60; default `"Mensaje"`
  - `font` (`raiz.channels.update.widget.font`; string, optional) — The text typeface: `arbol` (bundled), `system` (the device's), `serif`, `rounded`, `page` (the embedding page's) or `custom` (`fontFamily`, with an optional `fontUrl`).
    - one of `"arbol"`, `"system"`, `"serif"`, `"rounded"`, `"page"`, `"custom"`; default `"arbol"`
  - `fontFamily` (`raiz.channels.update.widget.fontFamily`; string, optional) — The CSS font-family of `font: custom`.
    - maxLength 200; pattern `^[a-zA-Z0-9 ,"'_-]*$`; default `""`
  - `fontSize` (`raiz.channels.update.widget.fontSize`; integer, optional)
    - min 12; max 20; default `15`
  - `fontUrl` (`raiz.channels.update.widget.fontUrl`; any of, optional)
    - default `null`
    - any of: `RaizHttpsUrl`, `null`
  - `formTitle` (`raiz.channels.update.widget.formTitle`; string, optional)
    - maxLength 120; default `"Antes de empezar"`
  - `greeting` (`raiz.channels.update.widget.greeting`; string, optional)
    - maxLength 500; default `"¡Hola! ¿En qué te podemos ayudar?"`
  - `headerColor` (`raiz.channels.update.widget.headerColor`; string, optional) — A color in `#RRGGBB` form.
    - pattern `^#[0-9a-fA-F]{6}$`; default `"#F6F8F5"`
  - `headerTextColor` (`raiz.channels.update.widget.headerTextColor`; string, optional) — A color in `#RRGGBB` form.
    - pattern `^#[0-9a-fA-F]{6}$`; default `"#182D24"`
  - `headingFont` (`raiz.channels.update.widget.headingFont`; string, optional) — The headings' typeface: `text` (the same as `font`) or one of `font`'s choices, with `headingFontFamily` and `headingFontUrl` for `custom`.
    - one of `"text"`, `"arbol"`, `"system"`, `"serif"`, `"rounded"`, `"page"`, `"custom"`; default `"text"`
  - `headingFontFamily` (`raiz.channels.update.widget.headingFontFamily`; string, optional) — The CSS font-family of `headingFont: custom`.
    - maxLength 200; pattern `^[a-zA-Z0-9 ,"'_-]*$`; default `""`
  - `headingFontUrl` (`raiz.channels.update.widget.headingFontUrl`; any of, optional)
    - default `null`
    - any of: `RaizHttpsUrl`, `null`
  - `headingWeight` (`raiz.channels.update.widget.headingWeight`; integer, optional) — The headings' weight, from 300 (light) to 800 (heavy).
    - min 300; max 800; default `500`
  - `inputBorderColor` (`raiz.channels.update.widget.inputBorderColor`; string | null, optional) — The border of form fields and of the message box. A color in `#RRGGBB` form, or null to derive it.
    - pattern `^#[0-9a-fA-F]{6}$`; default `null`
  - `inputColor` (`raiz.channels.update.widget.inputColor`; string | null, optional) — The background of form fields and of the message box. A color in `#RRGGBB` form, or null to derive it.
    - pattern `^#[0-9a-fA-F]{6}$`; default `null`
  - `language` (`raiz.channels.update.widget.language`; string, optional) — The visitor interface language when the browser asks for none of the translated ones.
    - one of `"es"`, `"en"`; default `"es"`
  - `launcherIcon` (`raiz.channels.update.widget.launcherIcon`; string, optional)
    - one of `"chat"`, `"sparkle"`, `"question"`, `"logo"`; default `"chat"`
  - `launcherLabel` (`raiz.channels.update.widget.launcherLabel`; string, optional)
    - minLength 1; maxLength 60; default `"Escríbenos"`
  - `launcherStyle` (`raiz.channels.update.widget.launcherStyle`; string, optional) — `label` shows the launcher text next to the icon; `icon` keeps it as the accessible name.
    - one of `"icon"`, `"label"`; default `"icon"`
  - `linkColor` (`raiz.channels.update.widget.linkColor`; string | null, optional) — Links; null: `primaryColor`. A color in `#RRGGBB` form, or null to derive it.
    - pattern `^#[0-9a-fA-F]{6}$`; default `null`
  - `logoObjectKey` (`raiz.channels.update.widget.logoObjectKey`; string | null, optional) — The stored logo, managed by Raíz: `updateChannel`'s `widgetLogo` sets it. Send back the value you read, or null to remove the logo; any other key is refused.
    - maxLength 512; pattern `^[A-Za-z0-9][A-Za-z0-9/_.-]{0,511}$`; default `null`
  - `maxTurns` (`raiz.channels.update.widget.maxTurns`; integer, optional) — Visitor messages per session.
    - min 1; max 100; default `30`
  - `mutedTextColor` (`raiz.channels.update.widget.mutedTextColor`; string | null, optional) — Secondary text: descriptions, hints and times. A color in `#RRGGBB` form, or null to derive it.
    - pattern `^#[0-9a-fA-F]{6}$`; default `null`
  - `mobileMode` (`raiz.channels.update.widget.mobileMode`; string, optional)
    - one of `"sheet"`, `"fullscreen"`; default `"fullscreen"`
  - `mode` (`raiz.channels.update.widget.mode`; string, optional) — `chat`: conversation only. `form`: the form only, no conversation. `form-chat`: the form, then the conversation.
    - one of `"chat"`, `"form"`, `"form-chat"`; default `"chat"`
  - `position` (`raiz.channels.update.widget.position`; string, optional)
    - one of `"left"`, `"right"`; default `"right"`
  - `primaryColor` (`raiz.channels.update.widget.primaryColor`; string, optional) — A color in `#RRGGBB` form.
    - pattern `^#[0-9a-fA-F]{6}$`; default `"#24664C"`
  - `privacyUrl` (`raiz.channels.update.widget.privacyUrl`; any of, optional)
    - default `null`
    - any of: `RaizHttpsUrl`, `null`
  - `publicLink` (`raiz.channels.update.widget.publicLink`; boolean, optional) — Also serve the widget on its own hosted page, outside any embedding site.
    - default `false`
  - `radius` (`raiz.channels.update.widget.radius`; integer, optional)
    - min 0; max 28; default `20`
  - `sessionMinutes` (`raiz.channels.update.widget.sessionMinutes`; integer, optional)
    - min 5; max 60; default `30`
  - `sessionsPerDay` (`raiz.channels.update.widget.sessionsPerDay`; integer, optional)
    - min 1; max 10000; default `100`
  - `sharePageContext` (`raiz.channels.update.widget.sharePageContext`; boolean, optional) — Send the embedding page's title, URL and visible text with each message.
    - default `false`
  - `showBranding` (`raiz.channels.update.widget.showBranding`; boolean, optional)
    - default `true`
  - `speakReplies` (`raiz.channels.update.widget.speakReplies`; boolean, optional)
    - default `false`
  - `speechInput` (`raiz.channels.update.widget.speechInput`; boolean, optional)
    - default `false`
  - `streaming` (`raiz.channels.update.widget.streaming`; boolean, optional)
    - default `true`
  - `style` (`raiz.channels.update.widget.style`; string, optional) — `flat` removes shadows and tightens corners for minimal sites.
    - one of `"soft"`, `"flat"`; default `"soft"`
  - `submitLabel` (`raiz.channels.update.widget.submitLabel`; string, optional)
    - minLength 1; maxLength 60; default `"Continuar"`
  - `subtitle` (`raiz.channels.update.widget.subtitle`; string, optional)
    - maxLength 180; default `"¿Cómo te podemos ayudar?"`
  - `suggestions` (`raiz.channels.update.widget.suggestions`; array<string>, optional) — Starter questions offered before the first message.
    - minLength 1; maxLength 80; default `[]`
  - `textColor` (`raiz.channels.update.widget.textColor`; string, optional) — A color in `#RRGGBB` form.
    - pattern `^#[0-9a-fA-F]{6}$`; default `"#182D24"`
  - `thankYou` (`raiz.channels.update.widget.thankYou`; string, optional)
    - maxLength 500; default `"Gracias. Recibimos tu información."`
  - `translations` (`raiz.channels.update.widget.translations`; object, optional) — Copy overrides per language.
    - default `{}`
    - `en` (`raiz.channels.update.widget.translations.en`; object, optional)
      - `consentText` (`raiz.channels.update.widget.translations.en.consentText`; string, optional)
        - minLength 1; maxLength 500
      - `firstMessageLabel` (`raiz.channels.update.widget.translations.en.firstMessageLabel`; string, optional)
        - minLength 1; maxLength 60
      - `formTitle` (`raiz.channels.update.widget.translations.en.formTitle`; string, optional)
        - maxLength 120
      - `greeting` (`raiz.channels.update.widget.translations.en.greeting`; string, optional)
        - maxLength 500
      - `launcherLabel` (`raiz.channels.update.widget.translations.en.launcherLabel`; string, optional)
        - minLength 1; maxLength 60
      - `submitLabel` (`raiz.channels.update.widget.translations.en.submitLabel`; string, optional)
        - minLength 1; maxLength 60
      - `subtitle` (`raiz.channels.update.widget.translations.en.subtitle`; string, optional)
        - maxLength 180
      - `thankYou` (`raiz.channels.update.widget.translations.en.thankYou`; string, optional)
        - maxLength 500
      - `title` (`raiz.channels.update.widget.translations.en.title`; string, optional)
        - minLength 1; maxLength 80
      - `welcomeText` (`raiz.channels.update.widget.translations.en.welcomeText`; string, optional)
        - maxLength 300
      - `welcomeTitle` (`raiz.channels.update.widget.translations.en.welcomeTitle`; string, optional)
        - maxLength 80
    - `es` (`raiz.channels.update.widget.translations.es`; object, optional)
      - `consentText` (`raiz.channels.update.widget.translations.es.consentText`; string, optional)
        - minLength 1; maxLength 500
      - `firstMessageLabel` (`raiz.channels.update.widget.translations.es.firstMessageLabel`; string, optional)
        - minLength 1; maxLength 60
      - `formTitle` (`raiz.channels.update.widget.translations.es.formTitle`; string, optional)
        - maxLength 120
      - `greeting` (`raiz.channels.update.widget.translations.es.greeting`; string, optional)
        - maxLength 500
      - `launcherLabel` (`raiz.channels.update.widget.translations.es.launcherLabel`; string, optional)
        - minLength 1; maxLength 60
      - `submitLabel` (`raiz.channels.update.widget.translations.es.submitLabel`; string, optional)
        - minLength 1; maxLength 60
      - `subtitle` (`raiz.channels.update.widget.translations.es.subtitle`; string, optional)
        - maxLength 180
      - `thankYou` (`raiz.channels.update.widget.translations.es.thankYou`; string, optional)
        - maxLength 500
      - `title` (`raiz.channels.update.widget.translations.es.title`; string, optional)
        - minLength 1; maxLength 80
      - `welcomeText` (`raiz.channels.update.widget.translations.es.welcomeText`; string, optional)
        - maxLength 300
      - `welcomeTitle` (`raiz.channels.update.widget.translations.es.welcomeTitle`; string, optional)
        - maxLength 80
  - `turnsPerDay` (`raiz.channels.update.widget.turnsPerDay`; integer, optional)
    - min 1; max 100000; default `1000`
  - `userTextColor` (`raiz.channels.update.widget.userTextColor`; string, optional) — Text on `primaryColor`: buttons and the launcher. A color in `#RRGGBB` form.
    - pattern `^#[0-9a-fA-F]{6}$`; default `"#FFFFFF"`
  - `visitorColor` (`raiz.channels.update.widget.visitorColor`; string | null, optional) — Background of the visitor's own messages; null: a light tint of `textColor`. A color in `#RRGGBB` form, or null to derive it.
    - pattern `^#[0-9a-fA-F]{6}$`; default `null`
  - `visitorTextColor` (`raiz.channels.update.widget.visitorTextColor`; string | null, optional) — Text of the visitor's own messages; null: `textColor`. A color in `#RRGGBB` form, or null to derive it.
    - pattern `^#[0-9a-fA-F]{6}$`; default `null`
  - `voiceMessages` (`raiz.channels.update.widget.voiceMessages`; boolean, optional) — Let visitors record a voice message; Raíz transcribes it and the Agent answers the transcript.
    - default `false`
  - `welcomeText` (`raiz.channels.update.widget.welcomeText`; string, optional)
    - maxLength 300; default `"Pregúntanos lo que necesites. Solemos responder en minutos."`
  - `welcomeTitle` (`raiz.channels.update.widget.welcomeTitle`; string, optional)
    - maxLength 80; default `"¡Hola! 👋"`
- `widgetLogo` (`raiz.channels.update.widgetLogo`; object | null, optional) — A new logo for the web widget, stored by Raíz; its key becomes `widget.logoObjectKey`. Null removes the logo.
  - `data` (`raiz.channels.update.widgetLogo.data`; string, required) — The image, base64-encoded (at most 256 KiB decoded).
    - minLength 4; maxLength 349528
  - `mediaType` (`raiz.channels.update.widgetLogo.mediaType`; string, required)
    - one of `"image/png"`, `"image/jpeg"`, `"image/webp"`

## Example request

```json
{
  "aiCoveragePercent": 0,
  "businessHours": {
    "closedDates": [
      "2019-08-24"
    ],
    "closingGraceMinutes": 15,
    "outsideHoursMessage": "string",
    "timeZone": "America/Bogota",
    "windows": [
      {
        "days": [
          "MO"
        ],
        "from": "08:00",
        "to": "18:00"
      }
    ],
    "outsideHoursTemplate": {
      "language": "es",
      "name": "outside_hours_notice"
    }
  },
  "agentId": "agt_01m45h8q2rf3t9w6y7z0b1c2d3",
  "expectedVersion": 1,
  "inboundEnabled": true,
  "name": "string",
  "outboundEnabled": true,
  "profile": {
    "about": "string",
    "address": "string",
    "description": "string",
    "email": "user@example.com",
    "vertical": "ALCOHOL",
    "websites": [
      "string"
    ]
  },
  "widget": {
    "agents": [],
    "allowBusinessTools": false,
    "allowedOrigins": [
      "string"
    ],
    "animation": "slide",
    "askFirstMessage": true,
    "assistantColor": "#FFFFFF",
    "assistantTextColor": null,
    "attachmentsEnabled": false,
    "attachmentTypes": [
      "image/png",
      "image/jpeg",
      "application/pdf",
      "text/plain"
    ],
    "avatarUrl": null,
    "backgroundColor": "#F6F8F5",
    "borderColor": "#CAD4CD",
    "borderWidth": 1,
    "clientTools": [],
    "controlRadius": null,
    "consentText": "Acepto compartir estos datos y esta conversación con esta organización.",
    "customCss": "",
    "errorColor": "#B42318",
    "fields": [],
    "firstMessageLabel": "Mensaje",
    "font": "arbol",
    "fontFamily": "",
    "fontSize": 15,
    "fontUrl": null,
    "formTitle": "Antes de empezar",
    "greeting": "¡Hola! ¿En qué te podemos ayudar?",
    "headerColor": "#F6F8F5",
    "headerTextColor": "#182D24",
    "headingFont": "text",
    "headingFontFamily": "",
    "headingFontUrl": null,
    "headingWeight": 500,
    "inputBorderColor": null,
    "inputColor": null,
    "language": "es",
    "launcherIcon": "chat",
    "launcherLabel": "Escríbenos",
    "launcherStyle": "icon",
    "linkColor": null,
    "logoObjectKey": null,
    "maxTurns": 30,
    "mutedTextColor": null,
    "mobileMode": "sheet",
    "mode": "chat",
    "position": "left",
    "primaryColor": "#24664C",
    "privacyUrl": null,
    "publicLink": false,
    "radius": 20,
    "sessionMinutes": 30,
    "sessionsPerDay": 100,
    "sharePageContext": false,
    "showBranding": true,
    "speakReplies": false,
    "speechInput": false,
    "streaming": true,
    "style": "soft",
    "submitLabel": "Continuar",
    "subtitle": "¿Cómo te podemos ayudar?",
    "suggestions": [],
    "textColor": "#182D24",
    "thankYou": "Gracias. Recibimos tu información.",
    "title": "string",
    "translations": {},
    "turnsPerDay": 1000,
    "userTextColor": "#FFFFFF",
    "visitorColor": null,
    "visitorTextColor": null,
    "voiceMessages": false,
    "welcomeText": "Pregúntanos lo que necesites. Solemos responder en minutos.",
    "welcomeTitle": "¡Hola! 👋"
  },
  "widgetLogo": {
    "data": "string",
    "mediaType": "image/png"
  }
}
```

## Code samples

### cURL

```bash
curl https://api.getarbol.com/v1/raiz/channels/chn_01m45h8q2rf3t9w6y7z0b1c2d3 \
  --request PATCH \
  --header "Authorization: Bearer $ARBOL_API_KEY" \
  --header "Content-Type: application/json" \
  --data '{}'
```

### TypeScript

```typescript
import { createClient } from "@arbol-ai/sdk";

const arbol = createClient({
  baseUrl: "https://api.getarbol.com",
  token: process.env.ARBOL_API_KEY!,
});

const { data } = await arbol.raiz.channels.update({
  channelId: "chn_01m45h8q2rf3t9w6y7z0b1c2d3",
});
```

### Rust

```rust
use arbol_sdk::{types, Client, Credential};

let arbol = Client::new(Credential::ApiKey(std::env::var("ARBOL_API_KEY")?))?;

let data = arbol
    .raiz()
    .channels()
    .update(&types::RaizChannelsUpdateInput {
        channel_id: "chn_01m45h8q2rf3t9w6y7z0b1c2d3".into(),
        ai_coverage_percent: None,
        business_hours: None,
        agent_id: None,
        expected_version: None,
        inbound_enabled: None,
        name: None,
        outbound_enabled: None,
        profile: None,
        widget: None,
        widget_logo: None,
    })
    .await?;
```

### CLI

```bash
arbol raiz channels update chn_01m45h8q2rf3t9w6y7z0b1c2d3
```

### MCP

```json
{
  "name": "raiz_channels_update",
  "arguments": {
    "channelId": "chn_01m45h8q2rf3t9w6y7z0b1c2d3"
  }
}
```

## Responses

### 200

Successful operation.

#### Example

```json
{
  "success": true,
  "data": {
    "address": "string",
    "agent": {
      "id": "agt_01m45h8q2rf3t9w6y7z0b1c2d3",
      "name": "string"
    },
    "channelType": "voice",
    "aiCoveragePercent": 0,
    "businessHours": {
      "closedDates": [
        "2019-08-24"
      ],
      "closingGraceMinutes": 15,
      "outsideHoursMessage": "string",
      "timeZone": "America/Bogota",
      "windows": [
        {
          "days": [
            "MO"
          ],
          "from": "08:00",
          "to": "18:00"
        }
      ],
      "outsideHoursTemplate": {
        "language": "es",
        "name": "outside_hours_notice"
      }
    },
    "createdAt": "2019-08-24T14:15:22Z",
    "id": "chn_01m45h8q2rf3t9w6y7z0b1c2d3",
    "inboundEnabled": true,
    "name": "string",
    "outboundEnabled": true,
    "provider": "phone",
    "providerAccountId": "pac_01m45h8q2rf3t9w6y7z0b1c2d3",
    "ready": true,
    "setupExpiresAt": "2019-08-24T14:15:22Z",
    "status": "pending",
    "updatedAt": "2019-08-24T14:15:22Z",
    "version": 1,
    "profile": {
      "about": "string",
      "address": "string",
      "description": "string",
      "email": "string",
      "pictureUrl": "string",
      "vertical": "string",
      "websites": [
        "string"
      ]
    },
    "publication": {
      "live": true,
      "problems": [
        "CHANNEL_INACTIVE"
      ],
      "url": "string"
    },
    "setup": {
      "expiresAt": "2019-08-24T14:15:22Z",
      "url": "string"
    },
    "widget": {
      "agents": [],
      "allowBusinessTools": false,
      "allowedOrigins": [
        "string"
      ],
      "animation": "slide",
      "askFirstMessage": true,
      "assistantColor": "#FFFFFF",
      "assistantTextColor": null,
      "attachmentsEnabled": false,
      "attachmentTypes": [
        "image/png",
        "image/jpeg",
        "application/pdf",
        "text/plain"
      ],
      "avatarUrl": null,
      "backgroundColor": "#F6F8F5",
      "borderColor": "#CAD4CD",
      "borderWidth": 1,
      "clientTools": [],
      "controlRadius": null,
      "consentText": "Acepto compartir estos datos y esta conversación con esta organización.",
      "customCss": "",
      "errorColor": "#B42318",
      "fields": [],
      "firstMessageLabel": "Mensaje",
      "font": "arbol",
      "fontFamily": "",
      "fontSize": 15,
      "fontUrl": null,
      "formTitle": "Antes de empezar",
      "greeting": "¡Hola! ¿En qué te podemos ayudar?",
      "headerColor": "#F6F8F5",
      "headerTextColor": "#182D24",
      "headingFont": "text",
      "headingFontFamily": "",
      "headingFontUrl": null,
      "headingWeight": 500,
      "inputBorderColor": null,
      "inputColor": null,
      "language": "es",
      "launcherIcon": "chat",
      "launcherLabel": "Escríbenos",
      "launcherStyle": "icon",
      "linkColor": null,
      "logoObjectKey": null,
      "maxTurns": 30,
      "mutedTextColor": null,
      "mobileMode": "sheet",
      "mode": "chat",
      "position": "left",
      "primaryColor": "#24664C",
      "privacyUrl": null,
      "publicLink": false,
      "radius": 20,
      "sessionMinutes": 30,
      "sessionsPerDay": 100,
      "sharePageContext": false,
      "showBranding": true,
      "speakReplies": false,
      "speechInput": false,
      "streaming": true,
      "style": "soft",
      "submitLabel": "Continuar",
      "subtitle": "¿Cómo te podemos ayudar?",
      "suggestions": [],
      "textColor": "#182D24",
      "thankYou": "Gracias. Recibimos tu información.",
      "title": "string",
      "translations": {},
      "turnsPerDay": 1000,
      "userTextColor": "#FFFFFF",
      "visitorColor": null,
      "visitorTextColor": null,
      "voiceMessages": false,
      "welcomeText": "Pregúntanos lo que necesites. Solemos responder en minutos.",
      "welcomeTitle": "¡Hola! 👋",
      "policyRevision": 1
    }
  },
  "error": null,
  "metadata": {
    "requestId": "string"
  }
}
```

- `success` (`raiz.channels.update.response.200.success`; boolean, required)
- `data` (`raiz.channels.update.response.200.data`; object, required)
  - `address` (`raiz.channels.update.response.200.data.address`; string | null, required) — E.164 number for voice and WhatsApp; for web, the first https origin the widget may be embedded in. Null while a WhatsApp setup is pending.
  - `agent` (`raiz.channels.update.response.200.data.agent`; any of, required)
    - any of: `RaizChannelAgent`, `null`
  - `channelType` (`raiz.channels.update.response.200.data.channelType`; string, required) — `voice`: a phone number or the organization's own carrier, for calls. `whatsapp`: a WhatsApp number. `web`: the chat widget on the organization's sites.
    - one of `"voice"`, `"whatsapp"`, `"web"`
  - `aiCoveragePercent` (`raiz.channels.update.response.200.data.aiCoveragePercent`; integer, required) — Percentage of new inbound WhatsApp conversations assigned to AI. Zero keeps conversations human-managed until explicitly activated. Existing assignments stay unchanged.
    - min 0; max 100
  - `businessHours` (`raiz.channels.update.response.200.data.businessHours`; any of, required)
    - any of: `RaizBusinessHours`, `null`
  - `createdAt` (`raiz.channels.update.response.200.data.createdAt`; string, required) — An instant in RFC 3339 format, in UTC.
    - format `date-time`
  - `id` (`raiz.channels.update.response.200.data.id`; string, required) — Channel id.
    - pattern `^(?:chn_(?:[0-7][0-9a-hjkmnp-tv-z]{25}|(?:[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}|[a-f0-9]{32}))|(?:agc)_(?:[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}|[a-f0-9]{32}))$`
  - `inboundEnabled` (`raiz.channels.update.response.200.data.inboundEnabled`; boolean, required) — Calls and messages from people are answered. Off: inbound traffic is ignored (a web widget is switched off).
  - `name` (`raiz.channels.update.response.200.data.name`; string | null, required)
  - `outboundEnabled` (`raiz.channels.update.response.200.data.outboundEnabled`; boolean, required) — The organization may start calls or WhatsApp conversations from this channel.
  - `provider` (`raiz.channels.update.response.200.data.provider`; string, required) — What the endpoint is: `phone` (a phone number: the platform's, or one on the organization's own telephony account when `providerAccountId` is set), `sip` (the organization's own number and carrier, over SIP), `whatsapp` (a WhatsApp number) or `web` (the chat widget, served by Raíz).
    - one of `"phone"`, `"sip"`, `"whatsapp"`, `"web"`
  - `providerAccountId` (`raiz.channels.update.response.200.data.providerAccountId`; string | null, required) — The organization's own account the endpoint runs on (its own telephony account, for example); null: the platform's.
    - pattern `^pac_(?:[0-7][0-9a-hjkmnp-tv-z]{25}|(?:[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}|[a-f0-9]{32}))$`
  - `ready` (`raiz.channels.update.response.200.data.ready`; boolean, required) — Active with enabled traffic; WhatsApp outbound notifications do not need an Agent.
  - `setupExpiresAt` (`raiz.channels.update.response.200.data.setupExpiresAt`; string | null, required) — An instant in RFC 3339 format, in UTC.
    - format `date-time`
  - `status` (`raiz.channels.update.response.200.data.status`; string, required) — `pending`: a WhatsApp number whose setup the customer has not finished. `active`: connected. `degraded`: connected, but the last provider check failed; `verifyChannel` checks again.
    - one of `"pending"`, `"active"`, `"degraded"`
  - `updatedAt` (`raiz.channels.update.response.200.data.updatedAt`; string, required) — An instant in RFC 3339 format, in UTC.
    - format `date-time`
  - `version` (`raiz.channels.update.response.200.data.version`; integer, required)
    - min 1
  - `publication` (`raiz.channels.update.response.200.data.publication`; any of, required)
    - any of: `RaizWidgetPublication`, `null`
  - `widget` (`raiz.channels.update.response.200.data.widget`; any of, required)
    - any of: `RaizWidgetSettings`, `null`
  - `profile` (`raiz.channels.update.response.200.data.profile`; object | null, optional) — What people see when they tap the business's name in WhatsApp. Present only when expanded; null for channels that are not connected WhatsApp numbers.
    - `about` (`raiz.channels.update.response.200.data.profile.about`; string | null, required)
    - `address` (`raiz.channels.update.response.200.data.profile.address`; string | null, required)
    - `description` (`raiz.channels.update.response.200.data.profile.description`; string | null, required)
    - `email` (`raiz.channels.update.response.200.data.profile.email`; string | null, required)
    - `pictureUrl` (`raiz.channels.update.response.200.data.profile.pictureUrl`; string | null, required) — The profile picture (read only).
    - `vertical` (`raiz.channels.update.response.200.data.profile.vertical`; string | null, required) — The business category.
    - `websites` (`raiz.channels.update.response.200.data.profile.websites`; array<string>, required)
  - `setup` (`raiz.channels.update.response.200.data.setup`; object, optional) — Present only in the response of the action that issued the link: `createChannel`, `renewChannelSetup`, or a `verifyChannel` that replaced an expired one.
    - `expiresAt` (`raiz.channels.update.response.200.data.setup.expiresAt`; string | null, required) — An instant in RFC 3339 format, in UTC.
      - format `date-time`
    - `url` (`raiz.channels.update.response.200.data.setup.url`; string, required) — Send the customer here to connect their WhatsApp number. Anyone with the link can connect a number to this channel: share it only with the customer.
- `error` (`raiz.channels.update.response.200.error`; null, required)
- `metadata` (`raiz.channels.update.response.200.metadata`; object, required)
  - `requestId` (`raiz.channels.update.response.200.metadata.requestId`; string, required) — Request correlation identifier, also sent as X-Request-Id.

### 400

- `INVALID_INPUT`: The request does not match the published schema.
- `REPORT_FILTER_UNSUPPORTED`: A filter does not apply to the selected report.
- `REPORT_RANGE_INVALID`: The report range is invalid: `from` must not be after `to`.
- `INVALID_CURSOR`: The cursor is malformed or belongs to a different list.

#### Example

```json
{
  "error": {
    "code": "INVALID_INPUT"
  }
}
```

- `error` (`raiz.channels.update.response.400.error`; object, required)
  - any of: `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`

### 401

`UNAUTHORIZED`: A valid access token is required.

#### Example

```json
{
  "error": {
    "code": "UNAUTHORIZED"
  }
}
```

- `error` (`raiz.channels.update.response.401.error`; object, required)
  - any of: `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`

### 403

- `FORBIDDEN`: The token does not authorize this operation.
- `CHANNEL_CREATION_IN_APP`: An AI tool creates website chats and forms only. A person adds WhatsApp numbers and phone numbers in Settings → Channels, or through the REST API.
- `CONVERSATION_VIEW_AUTHOR_ONLY`: Only the person who saved this view can make it private; it would disappear for the rest of the team.
- `WHATSAPP_CHANNEL_REFUSED`: Only the WhatsApp Agent Worker delivers through this service, and only Agent messages of a WhatsApp conversation.
- `WIDGET_REFUSED`: This widget session is unavailable.

#### Example

```json
{
  "error": {
    "code": "FORBIDDEN"
  }
}
```

- `error` (`raiz.channels.update.response.403.error`; object, required)
  - any of: `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`

### 404

- `NOT_FOUND`: The requested operation does not exist.
- `TEMPLATE_NOT_FOUND`: The template does not exist in this channel's WhatsApp Business Account.
- `RESOURCE_NOT_FOUND`: The requested resource does not exist in this organization.

#### Example

```json
{
  "error": {
    "code": "NOT_FOUND"
  }
}
```

- `error` (`raiz.channels.update.response.404.error`; object, required)
  - any of: `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`

### 405

`HTTP_METHOD_NOT_ALLOWED`: The HTTP method is not supported for this resource.

#### Example

```json
{
  "error": {
    "code": "HTTP_METHOD_NOT_ALLOWED"
  }
}
```

- `error` (`raiz.channels.update.response.405.error`; object, required)
  - any of: `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`

### 409

- `AGENT_NOT_TEXT`: Only a text Agent can hold a web conversation.
- `CALL_IN_PROGRESS`: A voice conversation closes by itself when its call ends; it cannot be closed by hand.
- `CONVERSATION_CLOSED`: The conversation is closed. Start a new conversation to write again.
- `CONVERSATION_NOT_HANDED_OFF`: The AI has not handed this conversation to the team, so there is nothing to give back to it.
- `CONVERSATION_OPEN`: The conversation is still open. Close it first.
- `DAILY_REPORT_IN_PROGRESS`: The daily report you asked for is still on its way; it arrives within a minute.
- `DEFINITION_NOT_ACTIVE`: Facts can be asserted only under an active definition.
- `DEFINITION_RETIRED`: The definition is retired and can no longer change.
- `DEFINITION_TYPE_LOCKED`: The value type and subject of a definition cannot change once it has facts. Retire it and create a new one instead.
- `HANDOFF_ALREADY_CONTINUED`: This handoff was already given back to the AI to continue. It continues once per handoff; a new escalation can be given back again.
- `REPLY_IN_PROGRESS`: The Agent is still replying in this conversation. Try again once the reply is delivered.
- `OUTSIDE_CONTACT_HOURS`: The profile's contact hours do not allow starting a conversation now. Try again within them.
- `PROVIDER_ACCOUNT_EXISTS`: This provider account is already registered.
- `PROVIDER_ACCOUNT_IN_USE`: Channels or Agents still use this provider account. Move them to another account first.
- `SOURCE_CONVERSATION_OPEN`: A fact can cite only a closed conversation as its source.
- `SUPPRESSION_EXISTS`: This organization already has this suppression rule.
- `TASK_NOT_RETRYABLE`: This task cannot be retried: its kind never retries, or it already used every attempt. Start it again from its resource.
- `CHANNEL_AGENT_REQUIRED`: Inbound traffic requires an assigned Agent. Outbound traffic requires one except on WhatsApp notification channels.
- `CHANNEL_ENDPOINT_IN_USE`: Another channel already uses this number or endpoint.
- `CHANNEL_NOT_READY`: The channel is not connected yet, or this kind of traffic is not enabled on it.
- `CHANNEL_TYPE_MISMATCH`: This operation or field does not apply to this channel's type.
- `CONVERSATION_VIEW_LIMIT_REACHED`: The organization already has 200 saved views. Delete one before saving another.
- `CONVERSATION_VIEW_NAME_TAKEN`: Another saved view already has this name. Choose a different name.
- `TEMPLATE_NOT_APPROVED`: The template is not approved for sending: it is pending review, rejected, paused or disabled.
- `WHATSAPP_AI_PAUSED`: Automatic replies are paused or this conversation can no longer receive them.
- `WHATSAPP_MARKETING_STOPPED`: The contact chose to stop receiving marketing messages from this business.
- `WHATSAPP_WINDOW_CLOSED`: More than 24 hours passed since the contact last wrote. Start the conversation with an approved template.
- `PROVIDER_ACCOUNT_MISMATCH`: The number and the Agent belong to different voice accounts. A voice Agent answers and dials only numbers of its own account.
- `PROVIDER_SECRET_UNAVAILABLE`: The organization's connection to this integration couldn't complete the request. Don't retry it automatically; if it keeps happening, contact your Arbol team.
- `VOICE_AGENT_NOT_READY`: The Agent cannot take calls yet: it must be an active voice Agent with instructions, published for calls.
- `VOICE_LINE_UNAVAILABLE`: No voice line can place this call. Give an active outbound voice channel, or assign one to the Agent.
- `VOICE_NUMBER_IN_USE`: This number is already connected to another voice service. Release it there first.
- `AGENT_IN_USE`: The Agent still has channels or active campaigns. Unassign them before deleting it.
- `AGENT_MODALITY_LOCKED`: The Agent's modality cannot change while it has channels or is published for calls. Create a new Agent instead.
- `BULLETIN_LIMIT_REACHED`: The organization already has 30 bulletins in force or scheduled. End or delete one before adding another.
- `EVAL_CASES_UNAVAILABLE`: The Agent has no kept evaluation case to replay, or a named case is not one of its kept cases.
- `EVAL_GATE_UNMET`: This Agent requires a completed evaluation run of exactly this content, in which every case passed, before what its model reads changes. Create one with createEvalRun and send its id as evalRunId.
- `WIDGET_CONFLICT`: The request cannot be repeated or another turn is active.
- `ADDRESS_IN_USE`: Another contact in this organization already uses this address.
- `IDENTIFIER_IN_USE`: Another contact in this organization already has this identity document.
- `INVALID_STATE`: The resource is not in a state that allows this operation.
- `KEY_IN_USE`: Another active resource in this organization already uses this key.
- `CONTACT_SUPPRESSED`: A suppression rule of this organization forbids contacting this address.
- `VERSION_CONFLICT`: The resource changed after it was read. Read it again and retry with the new version.

#### Example

```json
{
  "error": {
    "code": "AGENT_NOT_TEXT"
  }
}
```

- `error` (`raiz.channels.update.response.409.error`; object, required)
  - any of: `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`

### 413

- `REQUEST_TOO_LARGE`: The request exceeds the allowed size.
- `IMPORT_FILE_TOO_LARGE`: The import file is larger than 12 MB. Split it into several files.

#### Example

```json
{
  "error": {
    "code": "REQUEST_TOO_LARGE"
  }
}
```

- `error` (`raiz.channels.update.response.413.error`; object, required)
  - any of: `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`

### 415

`UNSUPPORTED_MEDIA_TYPE`: The request content type is not supported.

#### Example

```json
{
  "error": {
    "code": "UNSUPPORTED_MEDIA_TYPE"
  }
}
```

- `error` (`raiz.channels.update.response.415.error`; object, required)
  - any of: `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`

### 422

- `CONTACT_UNREACHABLE`: The contact has no phone number. Give the destination number in `to`.
- `DAILY_REPORT_RECIPIENTS_MISSING`: The daily report has no recipients. Add them in `settings.dailyReport.recipients` first.
- `DEFINITION_OPTIONS_INVALID`: Only a definition whose value type is `option` has options; it needs at least one, and option keys must be unique.
- `FACT_SUBJECT_MISMATCH`: The fact's subject (a contact or a conversation) does not match what its definition describes.
- `FACT_VALUE_INVALID`: The value does not match the definition's value type, or names no active option.
- `IMPORT_FILE_INVALID`: The import file is not valid base64 of UTF-8 text. Save the spreadsheet as CSV UTF-8 and try again.
- `IP_NETWORK_INVALID`: The IP network is not a valid IPv4 or IPv6 address or CIDR block.
- `PROFILE_VARIABLE_MISSING`: The profile's template parameters reference a variable that `variables` does not give.
- `TIME_ZONE_UNKNOWN`: The time zone is not in the IANA time zone database.
- `CHANNEL_AGENT_MISMATCH`: This Agent cannot serve this channel: voice channels need a voice Agent; WhatsApp and web channels need a text Agent.
- `TEMPLATE_HEADER_MISMATCH`: The header file does not fit the template: a document header takes a PDF, an image header a JPEG or PNG, a video header an MP4, and a template without a media header takes no file.
- `TEMPLATE_HEADER_REQUIRED`: The template's header is a document, image or video: send its file with the template.
- `TEMPLATE_PARAMETERS_MISMATCH`: The number of parameters does not match the variables of the template's body.
- `TEMPLATE_UNSUPPORTED`: The template needs header text variables, a location header or button parameters, which cannot be sent yet.
- `WHATSAPP_MEDIA_REJECTED`: WhatsApp could not use the attachment. Check its type and size limits.
- `WHATSAPP_MESSAGE_UNSUPPORTED`: This message cannot be sent on WhatsApp: it allows one attachment per message, up to three buttons or ten list options, and text of up to 4096 characters.
- `WHATSAPP_RECIPIENT_UNAVAILABLE`: The recipient cannot receive WhatsApp messages from this number.
- `CALL_REJECTED`: The call could not be placed. Check the destination number and the line.
- `PROVIDER_ACCOUNT_UNSUPPORTED`: This deployment cannot use provider accounts of this provider yet; the platform's own account is used instead.
- `PROVIDER_CREDENTIALS_REJECTED`: The organization's connection to this integration couldn't complete the request. Don't retry it automatically; if it keeps happening, contact your Arbol team.
- `VOICE_NUMBER_NOT_OWNED`: The platform's telephony account does not own a voice-capable number with this value.
- `AGENT_PROCEDURES_INVALID`: A procedure is incomplete, references a tool, document or procedure the Agent does not have, or breaks the structured step rules. `issues` says where.
- `AGENT_SETTINGS_INVALID`: The settings do not apply to this Agent's modality, or two settings contradict each other.
- `BULLETIN_PERIOD_INVALID`: A bulletin must end after it starts, and a new one must end in the future.
- `INTEGRATION_PROCEDURE_UNAVAILABLE`: A procedure does not exist in this organization's connections, Raíz cannot run its connection, or the Agent is not a text Agent.
- `INTEGRATION_TOOL_UNAVAILABLE`: An integration tool does not exist in this organization's connections, or Raíz cannot run it.
- `KNOWLEDGE_DOCUMENT_UNAVAILABLE`: A Knowledge document does not exist in this organization.
- `KNOWLEDGE_FILE_INVALID`: The file is not valid base64, exceeds the size limit or does not match its declared type.
- `KNOWLEDGE_KIND_MISMATCH`: The change does not apply to this kind of Knowledge document.
- `WEBSITE_NOT_APPROVED`: This website's origin is not approved for crawling in this deployment.
- `WIDGET_VOICE_UNHEARD`: The voice message could not be understood. Record it again or write the message.
- `PROVIDER_REJECTED`: The provider refused the request. Check the configuration and try again.

#### Example

```json
{
  "error": {
    "code": "CONTACT_UNREACHABLE"
  }
}
```

- `error` (`raiz.channels.update.response.422.error`; object, required)
  - any of: `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`

### 429

- `RATE_LIMITED`: The request rate limit was exceeded. Try again later.
- `WHATSAPP_RATE_LIMITED`: WhatsApp is limiting messages from this number. Try again later.
- `WIDGET_LIMIT_REACHED`: This widget reached its conversations or messages for today. It takes visitors again after 00:00 UTC.

#### Example

```json
{
  "error": {
    "code": "RATE_LIMITED"
  }
}
```

- `error` (`raiz.channels.update.response.429.error`; object, required)
  - any of: `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`

### 500

- `INTERNAL_ERROR`: The service could not complete the operation.
- `WHATSAPP_CHANNEL_INTERNAL`: The delivery outcome could not be read back. Asking again never sends the message twice.
- `WHATSAPP_NOT_SENT`: The message was stored but never handed to WhatsApp. It was not sent.
- `WIDGET_INTERNAL`: The request outcome could not be confirmed. Do not repeat it with a new identifier.

#### Example

```json
{
  "error": {
    "code": "INTERNAL_ERROR"
  }
}
```

- `error` (`raiz.channels.update.response.500.error`; object, required)
  - any of: `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`

### 502

- `OUTCOME_UNKNOWN`: The operation may have been applied; check its result before repeating it.
- `WHATSAPP_DELIVERY_FAILED`: WhatsApp did not deliver the message.

#### Example

```json
{
  "error": {
    "code": "OUTCOME_UNKNOWN"
  }
}
```

- `error` (`raiz.channels.update.response.502.error`; object, required)
  - any of: `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`

### 503

- `UPSTREAM_UNAVAILABLE`: The upstream service could not complete the request.
- `VOICE_UNAVAILABLE`: Calls are unavailable right now. Try again in a few minutes.
- `FEEDBACK_PROPOSAL_UNAVAILABLE`: A usable improvement could not be prepared. The Agent has not changed. Try again later.
- `INTEGRATIONS_UNAVAILABLE`: The organization's integrations cannot be read right now. Try again shortly.

#### Example

```json
{
  "error": {
    "code": "UPSTREAM_UNAVAILABLE"
  }
}
```

- `error` (`raiz.channels.update.response.503.error`; object, required)
  - any of: `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`

### 504

- `UPSTREAM_TIMEOUT`: The upstream service did not respond before its deadline.
- `WHATSAPP_DELIVERY_UNCONFIRMED`: WhatsApp never confirmed whether the message was sent. It was not sent again.

#### Example

```json
{
  "error": {
    "code": "UPSTREAM_TIMEOUT"
  }
}
```

- `error` (`raiz.channels.update.response.504.error`; object, required)
  - any of: `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`


Source: https://docs.getarbol.com/api/raiz/channels/update/index.md
