---
title: "Update a conversation"
description: "Change a conversation's title, summary, metadata, contact or subject, or close it (`status: closed`), which starts its analysis. A title or summary written here always wins over the generated one. A call closes by itself (CALL_IN_PROGRESS); a web chat cannot close while the Agent is replying (REPLY_IN_PROGRESS, retry shortly). On WhatsApp, `aiEnabled` activates or pauses AI only for this open conversation and leaves future episodes unchanged; `aiPaused` pauses or resumes the Agent for this person until their open conversation closes. Activating or resuming answers what the contact wrote after the last real answer, the team's or the Agent's (a wait notice is not one).\n\n- **Scope:** `raiz:conversations: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 32 KB, response up to 1 MB\n- **CLI:** `arbol raiz conversations update` · **MCP tool:** `raiz_conversations_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 › Conversations

`PATCH /v1/raiz/conversations/{conversationId}`

Change a conversation's title, summary, metadata, contact or subject, or close it (`status: closed`), which starts its analysis. A title or summary written here always wins over the generated one. A call closes by itself (CALL_IN_PROGRESS); a web chat cannot close while the Agent is replying (REPLY_IN_PROGRESS, retry shortly). On WhatsApp, `aiEnabled` activates or pauses AI only for this open conversation and leaves future episodes unchanged; `aiPaused` pauses or resumes the Agent for this person until their open conversation closes. Activating or resuming answers what the contact wrote after the last real answer, the team's or the Agent's (a wait notice is not one).

- **Scope:** `raiz:conversations: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 32 KB, response up to 1 MB
- **CLI:** `arbol raiz conversations update` · **MCP tool:** `raiz_conversations_update`

## Authentication

Requires one of the following:

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

## Path parameters

- `conversationId` (`raiz.conversations.update.path.conversationId`; string, required) — Conversation id.
  - pattern `^cnv_(?:[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}))$`

## Request body

_Required._

- `aiEnabled` (`raiz.conversations.update.aiEnabled`; boolean, optional) — WhatsApp only: activate or pause AI for this open conversation alone. Activation answers what the contact wrote after the last real answer, the team's or the Agent's (a wait notice is not one).
- `aiPaused` (`raiz.conversations.update.aiPaused`; boolean, optional) — WhatsApp only: pause or resume automatic replies for this recipient until their open conversation closes. Resuming answers what the contact wrote in this conversation after the last real answer.
- `contactId` (`raiz.conversations.update.contactId`; string | null, optional) — Reassign the counterpart. Facts already recorded stay with the previous contact.
  - pattern `^cnt_(?:[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.conversations.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
- `metadata` (`raiz.conversations.update.metadata`; object, optional) — Your own keys and labels for this resource (up to 50 keys of 40 characters; values up to 500 characters). Raíz never interprets them.
- `status` (`raiz.conversations.update.status`; string, optional) — Close the conversation (`closeReason: manual`); its analysis then runs. A closed conversation stays closed. Calls close by themselves when they end.
- `subjectContactId` (`raiz.conversations.update.subjectContactId`; string | null, optional) — Reassign whom the conversation is about.
  - pattern `^cnt_(?:[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}))$`
- `summary` (`raiz.conversations.update.summary`; string | null, optional) — A summary written by a person; the AI never replaces it. `null` clears it and keeps it clear.
  - maxLength 8000
- `title` (`raiz.conversations.update.title`; string | null, optional) — A title written by a person; it wins over the generated one, which never replaces it. `null` clears it and keeps it clear.
  - maxLength 200

## Example request

```json
{
  "aiEnabled": true,
  "aiPaused": true,
  "contactId": "cnt_01m45h8q2rf3t9w6y7z0b1c2d3",
  "expectedVersion": 1,
  "metadata": {},
  "status": "closed",
  "subjectContactId": "cnt_01m45h8q2rf3t9w6y7z0b1c2d3",
  "summary": "string",
  "title": "string"
}
```

## Code samples

### cURL

```bash
curl https://api.getarbol.com/v1/raiz/conversations/cnv_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.conversations.update({
  conversationId: "cnv_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()
    .conversations()
    .update(&types::RaizConversationsUpdateInput {
        conversation_id: "cnv_01m45h8q2rf3t9w6y7z0b1c2d3".into(),
        ai_enabled: None,
        ai_paused: None,
        contact_id: None,
        expected_version: None,
        metadata: None,
        status: None,
        subject_contact_id: None,
        summary: None,
        title: None,
    })
    .await?;
```

### CLI

```bash
arbol raiz conversations update cnv_01m45h8q2rf3t9w6y7z0b1c2d3
```

### MCP

```json
{
  "name": "raiz_conversations_update",
  "arguments": {
    "conversationId": "cnv_01m45h8q2rf3t9w6y7z0b1c2d3"
  }
}
```

## Responses

### 200

Successful operation.

#### Example

```json
{
  "success": true,
  "data": {
    "agentId": "agt_01m45h8q2rf3t9w6y7z0b1c2d3",
    "agentName": "string",
    "agentReplied": true,
    "aiCoveragePercent": 0,
    "aiEnabled": true,
    "aiPaused": true,
    "aiPausedBy": "agent",
    "analyzedAt": "2019-08-24T14:15:22Z",
    "campaignId": "cmp_01m45h8q2rf3t9w6y7z0b1c2d3",
    "campaignRecipientId": "rcp_01m45h8q2rf3t9w6y7z0b1c2d3",
    "channelAddress": "string",
    "channelId": "chn_01m45h8q2rf3t9w6y7z0b1c2d3",
    "channelName": "string",
    "channelType": "voice",
    "closeReason": "completed",
    "contactId": "cnt_01m45h8q2rf3t9w6y7z0b1c2d3",
    "contactName": "string",
    "contactProfileName": "string",
    "counterpartAddress": "string",
    "createdAt": "2019-08-24T14:15:22Z",
    "deletedAt": "2019-08-24T14:15:22Z",
    "direction": "inbound",
    "durationSeconds": 0,
    "endedAt": "2019-08-24T14:15:22Z",
    "id": "cnv_01m45h8q2rf3t9w6y7z0b1c2d3",
    "language": "string",
    "lastMessageAt": "2019-08-24T14:15:22Z",
    "messageCount": 0,
    "metadata": {},
    "operatorReplied": true,
    "origin": "inbound",
    "outcome": "success",
    "profileId": "prf_01m45h8q2rf3t9w6y7z0b1c2d3",
    "recordingAvailable": true,
    "requestedBy": "string",
    "sentiment": "positive",
    "startedAt": "2019-08-24T14:15:22Z",
    "status": "open",
    "subjectContactId": "cnt_01m45h8q2rf3t9w6y7z0b1c2d3",
    "summary": "string",
    "summaryAuthor": "person",
    "title": "string",
    "titleAuthor": "person",
    "updatedAt": "2019-08-24T14:15:22Z",
    "version": 1,
    "workers": [
      {
        "agentId": "agt_01m45h8q2rf3t9w6y7z0b1c2d3",
        "answering": true,
        "kind": "agent",
        "name": "string",
        "firstMessageAt": "2019-08-24T14:15:22Z",
        "lastMessageAt": "2019-08-24T14:15:22Z",
        "messageCount": 0
      }
    ],
    "toolCalls": {
      "count": 0,
      "failed": 0,
      "lastFailure": {
        "errorCode": "string",
        "errorMessage": "string",
        "toolName": "string"
      }
    },
    "analysisErrorCode": "string",
    "facts": [
      {
        "author": "person",
        "confidence": 0,
        "contactId": "cnt_01m45h8q2rf3t9w6y7z0b1c2d3",
        "conversationId": "cnv_01m45h8q2rf3t9w6y7z0b1c2d3",
        "createdAt": "2019-08-24T14:15:22Z",
        "definition": {
          "id": "def_01m45h8q2rf3t9w6y7z0b1c2d3",
          "key": "string",
          "kind": "attribute",
          "name": "string",
          "valueType": "text"
        },
        "id": "fct_01m45h8q2rf3t9w6y7z0b1c2d3",
        "observedAt": "2019-08-24T14:15:22Z",
        "optionLabel": "string",
        "reviewStatus": "unreviewed",
        "value": "string",
        "valueStatus": "known"
      }
    ],
    "messages": {
      "data": [
        {
          "agentId": "agt_01m45h8q2rf3t9w6y7z0b1c2d3",
          "content": "string",
          "createdAt": "2019-08-24T14:15:22Z",
          "deliveredAt": "2019-08-24T14:15:22Z",
          "deliveryErrorCode": "string",
          "deliveryStatus": "sending",
          "generation": {
            "firstTokenMs": 0,
            "inputCachedTokens": 0,
            "inputTokens": 0,
            "model": "arbolito/agile",
            "modelCalls": 0,
            "outputTokens": 0,
            "reasoningTokens": 0,
            "responseMs": 0,
            "speechToTextMs": 0,
            "textToSpeechMs": 0
          },
          "id": "msg_01m45h8q2rf3t9w6y7z0b1c2d3",
          "memberId": "string",
          "occurredAt": "2019-08-24T14:15:22Z",
          "origin": "business_app",
          "parts": [
            {
              "format": "plain",
              "interrupted": true,
              "text": "string",
              "type": "text"
            }
          ],
          "position": 0,
          "readAt": "2019-08-24T14:15:22Z",
          "replyTo": {
            "content": "string",
            "messageId": "msg_01m45h8q2rf3t9w6y7z0b1c2d3",
            "role": "string"
          },
          "role": "contact"
        }
      ],
      "object": "list",
      "pageInfo": {
        "hasNextPage": true,
        "hasPreviousPage": true,
        "nextCursor": "string",
        "previousCursor": "string"
      }
    },
    "recording": {
      "url": "http://example.com",
      "expiresAt": "2019-08-24T14:15:22Z"
    }
  },
  "error": null,
  "metadata": {
    "requestId": "string"
  }
}
```

- `success` (`raiz.conversations.update.response.200.success`; boolean, required)
- `data` (`raiz.conversations.update.response.200.data`; object, required)
  - `agentId` (`raiz.conversations.update.response.200.data.agentId`; string | null, required) — Agent id.
    - 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}))$`
  - `agentName` (`raiz.conversations.update.response.200.data.agentName`; string | null, required)
  - `agentReplied` (`raiz.conversations.update.response.200.data.agentReplied`; boolean, required) — The Agent said something to the contact.
  - `aiCoveragePercent` (`raiz.conversations.update.response.200.data.aiCoveragePercent`; integer, required)
    - min 0; max 100
  - `aiEnabled` (`raiz.conversations.update.response.200.data.aiEnabled`; boolean, required) — AI assignment for this episode. Manual changes affect only this conversation; recipient pauses still apply.
  - `aiPaused` (`raiz.conversations.update.response.200.data.aiPaused`; boolean, required) — WhatsApp automatic replies are paused for this recipient. A pause ends when their open conversation closes, so the next one starts with the AI; a closed conversation keeps the state it ended with.
  - `aiPausedBy` (`raiz.conversations.update.response.200.data.aiPausedBy`; string | null, required) — Who paused automatic replies for the recipient: the Agent, handing the conversation to a person, or an operator (a person of the organization who wrote to the contact or paused the AI). Null when not paused or unknown.
    - one of `"agent"`, `"operator"`, `null`
  - `analyzedAt` (`raiz.conversations.update.response.200.data.analyzedAt`; string | null, required) — An instant in RFC 3339 format, in UTC.
    - format `date-time`
  - `campaignId` (`raiz.conversations.update.response.200.data.campaignId`; string | null, required) — Campaign of a campaign attempt.
    - pattern `^cmp_(?:[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}))$`
  - `campaignRecipientId` (`raiz.conversations.update.response.200.data.campaignRecipientId`; string | null, required) — Campaign recipient of a campaign attempt.
    - pattern `^rcp_(?:[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}))$`
  - `channelAddress` (`raiz.conversations.update.response.200.data.channelAddress`; string | null, required) — The organization's side: its number or URL.
  - `channelId` (`raiz.conversations.update.response.200.data.channelId`; string | null, 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}))$`
  - `channelName` (`raiz.conversations.update.response.200.data.channelName`; string | null, required)
  - `channelType` (`raiz.conversations.update.response.200.data.channelType`; string, required)
    - one of `"voice"`, `"whatsapp"`, `"web"`
  - `closeReason` (`raiz.conversations.update.response.200.data.closeReason`; string | null, required)
    - one of `"completed"`, `"inactivity"`, `"handoff"`, `"migration"`, `"error"`, `"manual"`, `null`
  - `contactId` (`raiz.conversations.update.response.200.data.contactId`; string | null, required) — Contact id.
    - pattern `^cnt_(?:[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}))$`
  - `contactName` (`raiz.conversations.update.response.200.data.contactName`; string | null, required)
  - `contactProfileName` (`raiz.conversations.update.response.200.data.contactProfileName`; string | null, required) — The name the contact shows on WhatsApp (their profile name), as WhatsApp shares it; unverified. `contactName` is the contact's own name.
  - `counterpartAddress` (`raiz.conversations.update.response.200.data.counterpartAddress`; string | null, required) — The contact's side: their number or address.
  - `createdAt` (`raiz.conversations.update.response.200.data.createdAt`; string, required) — An instant in RFC 3339 format, in UTC.
    - format `date-time`
  - `deletedAt` (`raiz.conversations.update.response.200.data.deletedAt`; string | null, required) — When the conversation was deleted. Only the changed feed (`listConversations?sort=changed`) lists deleted conversations, once, as tombstones; everywhere else this is null.
    - format `date-time`
  - `direction` (`raiz.conversations.update.response.200.data.direction`; string, required)
    - one of `"inbound"`, `"outbound"`
  - `durationSeconds` (`raiz.conversations.update.response.200.data.durationSeconds`; integer | null, required)
    - min 0
  - `endedAt` (`raiz.conversations.update.response.200.data.endedAt`; string | null, required) — An instant in RFC 3339 format, in UTC.
    - format `date-time`
  - `id` (`raiz.conversations.update.response.200.data.id`; string, required) — Conversation id.
    - pattern `^cnv_(?:[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}))$`
  - `language` (`raiz.conversations.update.response.200.data.language`; string | null, required)
  - `lastMessageAt` (`raiz.conversations.update.response.200.data.lastMessageAt`; string | null, required) — An instant in RFC 3339 format, in UTC.
    - format `date-time`
  - `messageCount` (`raiz.conversations.update.response.200.data.messageCount`; integer, required)
    - min 0
  - `metadata` (`raiz.conversations.update.response.200.data.metadata`; object, required) — Your own keys and labels for this resource (up to 50 keys of 40 characters; values up to 500 characters). Raíz never interprets them.
  - `operatorReplied` (`raiz.conversations.update.response.200.data.operatorReplied`; boolean, required) — A person of the organization wrote to the contact, in Raíz or in the WhatsApp Business app.
  - `origin` (`raiz.conversations.update.response.200.data.origin`; string, required) — How it started: the contact reached out (`inbound`), a person of the organization started it (`manual`: in the Dashboard, or on WhatsApp in the WhatsApp Business app), a client through the API (`api`), a campaign, an import or a person-owned WhatsApp Agent trial (`test`).
    - one of `"inbound"`, `"manual"`, `"api"`, `"campaign"`, `"import"`, `"test"`
  - `outcome` (`raiz.conversations.update.response.200.data.outcome`; string | null, required)
    - one of `"success"`, `"failure"`, `"unknown"`, `null`
  - `profileId` (`raiz.conversations.update.response.200.data.profileId`; string | null, required) — The communication profile it was started from.
    - pattern `^prf_(?:[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}))$`
  - `recordingAvailable` (`raiz.conversations.update.response.200.data.recordingAvailable`; boolean, required)
  - `requestedBy` (`raiz.conversations.update.response.200.data.requestedBy`; string | null, required) — Who started it with `createConversation`: the token's subject, a person's user id or `<client id>@clients` for a machine client. Null for inbound, campaign and imported conversations.
  - `sentiment` (`raiz.conversations.update.response.200.data.sentiment`; string | null, required)
    - one of `"positive"`, `"neutral"`, `"negative"`, `null`
  - `startedAt` (`raiz.conversations.update.response.200.data.startedAt`; string, required) — An instant in RFC 3339 format, in UTC.
    - format `date-time`
  - `status` (`raiz.conversations.update.response.200.data.status`; string, required)
    - one of `"open"`, `"closed"`
  - `subjectContactId` (`raiz.conversations.update.response.200.data.subjectContactId`; string | null, required) — The contact the conversation is about when it is not the counterpart (a patient a relative calls for).
    - pattern `^cnt_(?:[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}))$`
  - `summary` (`raiz.conversations.update.response.200.data.summary`; string | null, required)
  - `summaryAuthor` (`raiz.conversations.update.response.200.data.summaryAuthor`; string | null, required) — Who wrote the value.
    - one of `"person"`, `"ai"`, `"system"`, `"import"`, `"provider"`, `null`
  - `title` (`raiz.conversations.update.response.200.data.title`; string | null, required) — The stored intent title, or null while there is insufficient context or generation is pending. Clients can show a localized placeholder from status and messageCount. A person's title is never replaced automatically.
  - `titleAuthor` (`raiz.conversations.update.response.200.data.titleAuthor`; string | null, required) — Who wrote the value.
    - one of `"person"`, `"ai"`, `"system"`, `"import"`, `"provider"`, `null`
  - `updatedAt` (`raiz.conversations.update.response.200.data.updatedAt`; string, required) — An instant in RFC 3339 format, in UTC.
    - format `date-time`
  - `version` (`raiz.conversations.update.response.200.data.version`; integer, required)
    - min 1
  - `workers` (`raiz.conversations.update.response.200.data.workers`; array<any of>, required) — Who works the conversation for the organization, in the order each first wrote something the contact saw (those who have not yet, last): each Agent and the team that wrote in it and, while it is open or when nobody answered it, whoever has it (the assigned Agent while the AI handles it, the team otherwise). `agentId` is the Agent assigned now.
    - any of: `object`, `object`
  - `toolCalls` (`raiz.conversations.update.response.200.data.toolCalls`; object, required)
    - `count` (`raiz.conversations.update.response.200.data.toolCalls.count`; integer, required) — The Agent's tool calls in the conversation.
      - min 0
    - `failed` (`raiz.conversations.update.response.200.data.toolCalls.failed`; integer, required) — How many of them failed.
      - min 0
    - `lastFailure` (`raiz.conversations.update.response.200.data.toolCalls.lastFailure`; any of, required)
      - any of: `RaizConversationToolFailure`, `null`
  - `analysisErrorCode` (`raiz.conversations.update.response.200.data.analysisErrorCode`; string | null, required) — The stable code of the latest failed analysis attempt; null before a failure or after a successful analysis. A failed attempt may be retried automatically.
  - `facts` (`raiz.conversations.update.response.200.data.facts`; array<object>, required) — The current value of each definition for this subject (the newest assertion that was not rejected).
    - `author` (`raiz.conversations.update.response.200.data.facts.author`; string, required) — Who wrote the value.
      - one of `"person"`, `"ai"`, `"system"`, `"import"`, `"provider"`
    - `confidence` (`raiz.conversations.update.response.200.data.facts.confidence`; number | null, required) — How sure the AI was, from 0 to 1. Null for people.
      - min 0; max 1
    - `contactId` (`raiz.conversations.update.response.200.data.facts.contactId`; string | null, required) — The contact the fact is about, for contact facts.
      - pattern `^cnt_(?:[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}))$`
    - `conversationId` (`raiz.conversations.update.response.200.data.facts.conversationId`; string | null, required) — The conversation the fact is about, for conversation facts.
      - pattern `^cnv_(?:[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}))$`
    - `createdAt` (`raiz.conversations.update.response.200.data.facts.createdAt`; string, required) — An instant in RFC 3339 format, in UTC.
      - format `date-time`
    - `definition` (`raiz.conversations.update.response.200.data.facts.definition`; object, required)
      - `id` (`raiz.conversations.update.response.200.data.facts.definition.id`; string, required) — Definition id.
        - pattern `^def_(?:[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}))$`
      - `key` (`raiz.conversations.update.response.200.data.facts.definition.key`; string, required)
      - `kind` (`raiz.conversations.update.response.200.data.facts.definition.kind`; string, required) — What the definition captures: an `attribute` (a datum), an `assessment` (a yes/no check of the conversation), a `category` (a classification such as the reason for contact) or a `metric`.
        - one of `"attribute"`, `"assessment"`, `"category"`, `"metric"`
      - `name` (`raiz.conversations.update.response.200.data.facts.definition.name`; string, required)
      - `valueType` (`raiz.conversations.update.response.200.data.facts.definition.valueType`; string, required)
        - one of `"text"`, `"number"`, `"boolean"`, `"date"`, `"option"`
    - `id` (`raiz.conversations.update.response.200.data.facts.id`; string, required) — Fact id.
      - pattern `^fct_(?:[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}))$`
    - `observedAt` (`raiz.conversations.update.response.200.data.facts.observedAt`; string, required) — An instant in RFC 3339 format, in UTC.
      - format `date-time`
    - `optionLabel` (`raiz.conversations.update.response.200.data.facts.optionLabel`; string | null, required) — The option's label, for option facts.
    - `reviewStatus` (`raiz.conversations.update.response.200.data.facts.reviewStatus`; string, required)
      - one of `"unreviewed"`, `"confirmed"`, `"rejected"`
    - `value` (`raiz.conversations.update.response.200.data.facts.value`; any of, required) — A string (text), number, boolean, ISO date `YYYY-MM-DD` (date) or option key (option), per the definition's value type.
      - any of: `string`, `number`, `boolean`, `null`
    - `valueStatus` (`raiz.conversations.update.response.200.data.facts.valueStatus`; string, required)
      - one of `"known"`, `"unknown"`, `"not_applicable"`
  - `messages` (`raiz.conversations.update.response.200.data.messages`; object, optional) — The transcript, oldest first, with tool calls and quoted replies. Present only when expanded.
    - `data` (`raiz.conversations.update.response.200.data.messages.data`; array<object>, required) — Items admitted by this resource contract within the verified organization.
      - `agentId` (`raiz.conversations.update.response.200.data.messages.data.agentId`; string | null, required) — The Agent that wrote an Agent message. Null for every other role.
        - 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}))$`
      - `content` (`raiz.conversations.update.response.200.data.messages.data.content`; string, required) — The plain text of the parts.
      - `createdAt` (`raiz.conversations.update.response.200.data.messages.data.createdAt`; string, required) — An instant in RFC 3339 format, in UTC.
        - format `date-time`
      - `deliveredAt` (`raiz.conversations.update.response.200.data.messages.data.deliveredAt`; string | null, required) — An instant in RFC 3339 format, in UTC.
        - format `date-time`
      - `deliveryErrorCode` (`raiz.conversations.update.response.200.data.messages.data.deliveryErrorCode`; string | null, required)
      - `deliveryStatus` (`raiz.conversations.update.response.200.data.messages.data.deliveryStatus`; string | null, required) — Delivery of an Agent or operator message on channels that report it; it only moves forward. `uncertain`: the provider did not confirm, and Raíz asks it again.
        - one of `"sending"`, `"uncertain"`, `"sent"`, `"delivered"`, `"read"`, `"played"`, `"failed"`, `null`
      - `generation` (`raiz.conversations.update.response.200.data.messages.data.generation`; object | null, required) — How the AI produced an Agent message.
        - `firstTokenMs` (`raiz.conversations.update.response.200.data.messages.data.generation.firstTokenMs`; number | null, required)
        - `inputCachedTokens` (`raiz.conversations.update.response.200.data.messages.data.generation.inputCachedTokens`; number | null, required)
        - `inputTokens` (`raiz.conversations.update.response.200.data.messages.data.generation.inputTokens`; number | null, required)
        - `model` (`raiz.conversations.update.response.200.data.messages.data.generation.model`; string | null, required) — The tier that wrote the message.
          - one of `"arbolito/agile"`, `"arbolito/balanced"`, `"arbolito/advanced"`, `"arbolito/top"`, `null`
        - `modelCalls` (`raiz.conversations.update.response.200.data.messages.data.generation.modelCalls`; number | null, required)
        - `outputTokens` (`raiz.conversations.update.response.200.data.messages.data.generation.outputTokens`; number | null, required)
        - `reasoningTokens` (`raiz.conversations.update.response.200.data.messages.data.generation.reasoningTokens`; number | null, required)
        - `responseMs` (`raiz.conversations.update.response.200.data.messages.data.generation.responseMs`; number | null, required)
        - `speechToTextMs` (`raiz.conversations.update.response.200.data.messages.data.generation.speechToTextMs`; number | null, required)
        - `textToSpeechMs` (`raiz.conversations.update.response.200.data.messages.data.generation.textToSpeechMs`; number | null, required)
      - `id` (`raiz.conversations.update.response.200.data.messages.data.id`; string, required) — Message id.
        - pattern `^msg_(?:[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}))$`
      - `memberId` (`raiz.conversations.update.response.200.data.messages.data.memberId`; string | null, required) — The person of the organization who wrote an operator message in Raíz: their member id, as Arbol Account lists it (`account.members.list`). Null when Raíz does not know who wrote it (the WhatsApp Business app, a machine client) and for every other role.
        - minLength 1; maxLength 255
      - `occurredAt` (`raiz.conversations.update.response.200.data.messages.data.occurredAt`; string, required) — An instant in RFC 3339 format, in UTC.
        - format `date-time`
      - `origin` (`raiz.conversations.update.response.200.data.messages.data.origin`; string | null, required) — - `business_app`: Where an operator message was written: `business_app` is the WhatsApp Business app (the phone app or WhatsApp Web) on a number Raíz shares. Null for messages written in Raíz and for every other role.
        - one of `"business_app"`, `null`
      - `parts` (`raiz.conversations.update.response.200.data.messages.data.parts`; array<any of>, required)
        - any of: `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`
      - `position` (`raiz.conversations.update.response.200.data.messages.data.position`; integer, required) — Order in the transcript, from 0.
        - min 0
      - `readAt` (`raiz.conversations.update.response.200.data.messages.data.readAt`; string | null, required) — An instant in RFC 3339 format, in UTC.
        - format `date-time`
      - `replyTo` (`raiz.conversations.update.response.200.data.messages.data.replyTo`; object | null, required) — The message this one quotes.
        - `content` (`raiz.conversations.update.response.200.data.messages.data.replyTo.content`; string | null, required) — Up to 280 characters.
        - `messageId` (`raiz.conversations.update.response.200.data.messages.data.replyTo.messageId`; string, required) — Message id.
          - pattern `^msg_(?:[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}))$`
        - `role` (`raiz.conversations.update.response.200.data.messages.data.replyTo.role`; string | null, required)
      - `role` (`raiz.conversations.update.response.200.data.messages.data.role`; string, required)
        - one of `"contact"`, `"agent"`, `"operator"`, `"system"`
    - `object` (`raiz.conversations.update.response.200.data.messages.object`; string, required) — Discriminator for a resource list response.
    - `pageInfo` (`raiz.conversations.update.response.200.data.messages.pageInfo`; object, required) — Opaque navigation cursors for this page’s stable keyset order.
      - `hasNextPage` (`raiz.conversations.update.response.200.data.messages.pageInfo.hasNextPage`; boolean, required) — Whether a later page exists in the current ordering.
      - `hasPreviousPage` (`raiz.conversations.update.response.200.data.messages.pageInfo.hasPreviousPage`; boolean, required) — Whether an earlier page exists in the current ordering.
      - `nextCursor` (`raiz.conversations.update.response.200.data.messages.pageInfo.nextCursor`; string | null, required) — Opaque cursor for the next page, or null when there is none.
      - `previousCursor` (`raiz.conversations.update.response.200.data.messages.pageInfo.previousCursor`; string | null, required) — Opaque cursor for the previous page, or null when there is none.
  - `recording` (`raiz.conversations.update.response.200.data.recording`; any of, optional)
    - any of: `RaizSignedUrl`, `null`
- `error` (`raiz.conversations.update.response.200.error`; null, required)
- `metadata` (`raiz.conversations.update.response.200.metadata`; object, required)
  - `requestId` (`raiz.conversations.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.
- `INVALID_CURSOR`: The cursor is malformed or belongs to a different list.

#### Example

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

- `error` (`raiz.conversations.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.conversations.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.

#### Example

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

- `error` (`raiz.conversations.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.
- `RESOURCE_NOT_FOUND`: The requested resource does not exist in this organization.

#### Example

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

- `error` (`raiz.conversations.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.conversations.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

- `CALL_IN_PROGRESS`: A voice conversation closes by itself when its call ends; it cannot be closed by hand.
- `CONVERSATION_OPEN`: The conversation is still open. Close it first.
- `REPLY_IN_PROGRESS`: The Agent is still replying in this conversation. Try again once the reply is delivered.
- `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.
- `VERSION_CONFLICT`: The resource changed after it was read. Read it again and retry with the new version.

#### Example

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

- `error` (`raiz.conversations.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.

#### Example

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

- `error` (`raiz.conversations.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.conversations.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`

### 429

`RATE_LIMITED`: The request rate limit was exceeded. Try again later.

#### Example

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

- `error` (`raiz.conversations.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.

#### Example

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

- `error` (`raiz.conversations.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.

#### Example

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

- `error` (`raiz.conversations.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.
- `INTEGRATIONS_UNAVAILABLE`: The organization's integrations cannot be read right now. Try again shortly.

#### Example

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

- `error` (`raiz.conversations.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.

#### Example

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

- `error` (`raiz.conversations.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/conversations/update/index.md
