---
title: "Add a channel"
description: "Add a channel. `web` creates a website chat or form (the widget) from its complete configuration (`widget`: mode, texts, fields, colors and fonts, allowed origins, `publicLink` for its own hosted page); it is the one kind an AI tool creates. Create it with `inboundEnabled: false` to review it before publishing, then publish or pause it with `update_channel`; `publication` says whether visitors can reach it and where. `whatsapp` creates a pending channel and a setup link (`setup.url`) where the business connects its WhatsApp number; call `verify_channel` once that is done. `voice` connects a platform phone number (`platform_number`) or the organization's own carrier over SIP (`sip_trunk`) at once (SIP credentials are passed on once and never stored). A person adds WhatsApp and voice channels in Settings → Channels or with the REST API: over MCP they fail with CHANNEL_CREATION_IN_APP. With an Agent, traffic is on by default. Not idempotent: after an unknown outcome, `list_channels` before trying again.\n\n- **Scope:** `raiz:channels:write`\n- **Credentials:** an API key, a client-credentials token or a person's access token\n- **Effect:** writes; not idempotent: check the outcome before you retry\n- **Limits:** request body up to 32 KB, response up to 1 MB\n- **CLI:** `arbol raiz channels create` · **MCP tool:** `raiz_channels_create`"
---

> 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

`POST /v1/raiz/channels`

Add a channel. `web` creates a website chat or form (the widget) from its complete configuration (`widget`: mode, texts, fields, colors and fonts, allowed origins, `publicLink` for its own hosted page); it is the one kind an AI tool creates. Create it with `inboundEnabled: false` to review it before publishing, then publish or pause it with `update_channel`; `publication` says whether visitors can reach it and where. `whatsapp` creates a pending channel and a setup link (`setup.url`) where the business connects its WhatsApp number; call `verify_channel` once that is done. `voice` connects a platform phone number (`platform_number`) or the organization's own carrier over SIP (`sip_trunk`) at once (SIP credentials are passed on once and never stored). A person adds WhatsApp and voice channels in Settings → Channels or with the REST API: over MCP they fail with CHANNEL_CREATION_IN_APP. With an Agent, traffic is on by default. Not idempotent: after an unknown outcome, `list_channels` before trying again.

- **Scope:** `raiz:channels:write`
- **Credentials:** an API key, a client-credentials token or a person's access token
- **Effect:** writes; not idempotent: check the outcome before you retry
- **Limits:** request body up to 32 KB, response up to 1 MB
- **CLI:** `arbol raiz channels create` · **MCP tool:** `raiz_channels_create`

## Authentication

Requires one of the following:

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

## Request body

_Required._

Any of:

- `object`
- `object`
- `object`

## Example request

```json
{
  "agentId": "agt_01m45h8q2rf3t9w6y7z0b1c2d3",
  "inboundEnabled": true,
  "name": "string",
  "outboundEnabled": true,
  "channelType": "whatsapp"
}
```

## Code samples

### cURL

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

### 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.create({
  channelType: "whatsapp",
});
```

### Rust

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

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

let input: types::RaizChannelsCreateInput = serde_json::from_value(serde_json::json!({
    "channelType": "whatsapp"
}))?;
let data = arbol.raiz().channels().create(&input).await?;
```

### CLI

```bash
arbol raiz channels create --input - <<'JSON'
{
  "channelType": "whatsapp"
}
JSON
```

### MCP

```json
{
  "name": "raiz_channels_create",
  "arguments": {
    "channelType": "whatsapp"
  }
}
```

## 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.create.response.200.success`; boolean, required)
- `data` (`raiz.channels.create.response.200.data`; object, required)
  - `address` (`raiz.channels.create.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.create.response.200.data.agent`; any of, required)
    - any of: `RaizChannelAgent`, `null`
  - `channelType` (`raiz.channels.create.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.create.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.create.response.200.data.businessHours`; any of, required)
    - any of: `RaizBusinessHours`, `null`
  - `createdAt` (`raiz.channels.create.response.200.data.createdAt`; string, required) — An instant in RFC 3339 format, in UTC.
    - format `date-time`
  - `id` (`raiz.channels.create.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.create.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.create.response.200.data.name`; string | null, required)
  - `outboundEnabled` (`raiz.channels.create.response.200.data.outboundEnabled`; boolean, required) — The organization may start calls or WhatsApp conversations from this channel.
  - `provider` (`raiz.channels.create.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.create.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.create.response.200.data.ready`; boolean, required) — Active with enabled traffic; WhatsApp outbound notifications do not need an Agent.
  - `setupExpiresAt` (`raiz.channels.create.response.200.data.setupExpiresAt`; string | null, required) — An instant in RFC 3339 format, in UTC.
    - format `date-time`
  - `status` (`raiz.channels.create.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.create.response.200.data.updatedAt`; string, required) — An instant in RFC 3339 format, in UTC.
    - format `date-time`
  - `version` (`raiz.channels.create.response.200.data.version`; integer, required)
    - min 1
  - `publication` (`raiz.channels.create.response.200.data.publication`; any of, required)
    - any of: `RaizWidgetPublication`, `null`
  - `widget` (`raiz.channels.create.response.200.data.widget`; any of, required)
    - any of: `RaizWidgetSettings`, `null`
  - `profile` (`raiz.channels.create.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.create.response.200.data.profile.about`; string | null, required)
    - `address` (`raiz.channels.create.response.200.data.profile.address`; string | null, required)
    - `description` (`raiz.channels.create.response.200.data.profile.description`; string | null, required)
    - `email` (`raiz.channels.create.response.200.data.profile.email`; string | null, required)
    - `pictureUrl` (`raiz.channels.create.response.200.data.profile.pictureUrl`; string | null, required) — The profile picture (read only).
    - `vertical` (`raiz.channels.create.response.200.data.profile.vertical`; string | null, required) — The business category.
    - `websites` (`raiz.channels.create.response.200.data.profile.websites`; array<string>, required)
  - `setup` (`raiz.channels.create.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.create.response.200.data.setup.expiresAt`; string | null, required) — An instant in RFC 3339 format, in UTC.
      - format `date-time`
    - `url` (`raiz.channels.create.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.create.response.200.error`; null, required)
- `metadata` (`raiz.channels.create.response.200.metadata`; object, required)
  - `requestId` (`raiz.channels.create.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.create.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.create.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.create.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.create.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.create.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.create.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.create.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.create.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.create.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.create.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.create.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.create.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.create.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.create.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/create/index.md
