Conectar pela API oficial da Meta

POST /inbox/cloud

Liga uma inbox nova, nunca conectada pelo QR code, a uma API oficial: WhatsApp (padrão), Messenger ou Instagram, da Meta, ou um bot do Telegram. Confere o token no canal, grava a conta e devolve o webhook. Pode ser chamada de novo para trocar o token ou os dados.

  • WhatsApp: phone_number_id e token. A api tenta apontar o webhook do número para esta inbox; se webhook_configured vier false, configure no painel da Meta ou do parceiro com webhook_url e verify_token.
  • Messenger e Instagram: channel, page_id e o token da Página, do seu próprio app na Meta (sem App Review: o app atende só as suas contas). No painel do app, em Webhooks, cole webhook_url e verify_token (objeto Page; no Instagram, também o objeto Instagram). A api assina a Página nos eventos de mensagem. O Instagram precisa ser profissional e estar ligado à Página.
  • Telegram: channel: telegram e o token do bot (do @BotFather). A api aponta o webhook do bot para esta inbox sozinha; não há nada a colar. Com business_username (o @ da sua conta), quando você ligar o bot à sua conta pelo Telegram Business, a mesma inbox recebe e responde também as conversas da conta.

O token nunca volta nas respostas. O passo a passo está em Conectar a inbox.

Autenticação

[
  {
    "token": []
  }
]
{
  "token": {
    "name": "token",
    "type": "apiKey",
    "in": "header"
  }
}

Corpo da requisição

{
  "required": true,
  "content": {
    "application/json": {
      "schema": {
        "type": "object",
        "required": [
          "token"
        ],
        "properties": {
          "channel": {
            "type": "string",
            "enum": [
              "whatsapp_cloud",
              "messenger",
              "instagram",
              "telegram"
            ],
            "default": "whatsapp_cloud",
            "description": "O canal, com os nomes de `Inbox.channel`: `whatsapp_cloud` (padrão, com `phone_number_id`), `messenger` ou `instagram` (os dois com `page_id`) ou `telegram` (só o `token`)."
          },
          "phone_number_id": {
            "type": "string",
            "pattern": "^[0-9]+
quot;
, "description": "WhatsApp: ID do número na Meta (só dígitos). Obrigatório com `channel: whatsapp_cloud`.", "example": "106737339089002" }, "page_id": { "type": "string", "pattern": "^[0-9]+
quot;
, "description": "Messenger e Instagram: ID da Página do Facebook (só dígitos). No Instagram, a Página ligada à conta profissional.", "example": "110198307512345" }, "token": { "type": "string", "description": "WhatsApp: token com acesso ao número (system user do seu app na Meta ou a chave do parceiro). Messenger e Instagram: o token da Página, gerado no seu app. Telegram: o token do bot, do @BotFather." }, "waba_id": { "type": "string", "description": "WhatsApp: ID da conta WhatsApp Business. Necessário para listar e enviar templates.", "example": "102692966164644" }, "app_secret": { "type": "string", "description": "App Secret do app na Meta. Com ele, a assinatura dos webhooks da Meta também é conferida (recomendado)." }, "base_url": { "type": "string", "description": "WhatsApp: endereço da API, só `https` em `graph.facebook.com`, `api.kapso.ai` ou `app.kapso.ai`. Vazio: Graph da Meta.", "example": "https://api.kapso.ai/meta/whatsapp/v24.0" }, "auth_header": { "type": "string", "description": "WhatsApp: header que leva o token. Vazio: `Authorization: Bearer`. Kapso: `X-API-Key`.", "example": "X-API-Key" }, "business_username": { "type": "string", "description": "Telegram: o @ da sua conta no Telegram, para atender também pelo Telegram Business. Só a ligação desta conta é aceita: o bot é público, e outra pessoa que o escolha como chatbot da conta dela é ignorada. Depois da primeira ligação, a inbox fica presa a essa conta (pelo id, mesmo que o @ mude de dono); para trocar de conta, chame de novo com o novo @. Ao ligar de novo (token novo, por exemplo), mande o mesmo `business_username`: sem ele, o Telegram Business desliga. Sem ele, a inbox atende só as conversas com o bot.", "example": "minhaloja" } }, "oneOf": [ { "description": "WhatsApp (padrão): `phone_number_id`.", "required": [ "phone_number_id" ], "properties": { "channel": { "const": "whatsapp_cloud" } } }, { "description": "Messenger ou Instagram: `channel` e `page_id`.", "required": [ "channel", "page_id" ], "properties": { "channel": { "enum": [ "messenger", "instagram" ] } } }, { "description": "Telegram: `channel` e o `token` do bot.", "required": [ "channel" ], "properties": { "channel": { "const": "telegram" } } } ] }, "examples": { "meta": { "summary": "App próprio na Meta", "value": { "phone_number_id": "1375523705642891", "token": "EAAG...", "waba_id": "1234567890", "app_secret": "..." } }, "kapso": { "summary": "Kapso (coexistência)", "value": { "phone_number_id": "106737339089002", "token": "kapso-api-key", "waba_id": "102692966164644", "base_url": "https://api.kapso.ai/meta/whatsapp/v24.0", "auth_header": "X-API-Key" } }, "messenger": { "summary": "Messenger (Página do Facebook)", "value": { "channel": "messenger", "page_id": "110198307512345", "token": "EAAG...", "app_secret": "..." } }, "instagram": { "summary": "Instagram (pela Página ligada)", "value": { "channel": "instagram", "page_id": "110198307512345", "token": "EAAG...", "app_secret": "..." } } } } } }

Respostas

{
  "200": {
    "description": "Inbox ligada ao canal oficial: a inbox (`channel`, `phone` no WhatsApp, `profile_name` com o nome verificado, da Página, da conta ou o @ do bot) e o webhook.",
    "content": {
      "application/json": {
        "schema": {
          "type": "object",
          "additionalProperties": false,
          "required": [
            "inbox",
            "webhook_url",
            "verify_token",
            "webhook_configured"
          ],
          "properties": {
            "inbox": {
              "$ref": "#/components/schemas/Inbox"
            },
            "webhook_url": {
              "type": "string",
              "description": "URL de entrada que a Meta chama (no painel dela, URL de callback): do número (WhatsApp) ou do app (Messenger e Instagram, em Webhooks, objetos Page e Instagram). Telegram: a api já aponta o webhook do bot para ela. Não é um dos seus [`/webhooks`](/endpoint/get/webhooks)."
            },
            "verify_token": {
              "type": "string",
              "description": "Token de verificação do webhook (`hub.verify_token`)."
            },
            "webhook_configured": {
              "type": "boolean",
              "description": "WhatsApp: se a API apontou o webhook do número para `webhook_url`. Messenger e Instagram: se a Página foi assinada nos eventos do app; a URL do webhook do app você cola no painel da Meta. Telegram: se o webhook do bot foi apontado para esta inbox."
            }
          }
        },
        "example": {
          "inbox": {
            "id": "r183e2ef9597845",
            "name": "loja-centro",
            "status": "connected",
            "channel": "whatsapp_cloud",
            "phone": "558005910375",
            "profile_name": "Minha Empresa",
            "created_at": "2026-09-01T12:00:00.000Z",
            "updated_at": "2026-10-17T12:00:00.000Z"
          },
          "webhook_url": "https://api.exemplo.com/channel/webhook/9f2c...",
          "verify_token": "9f2c...",
          "webhook_configured": true
        }
      }
    }
  },
  "400": {
    "description": "Dados ausentes ou inválidos, `base_url` fora da lista ou token recusado pela Meta ou pelo Telegram",
    "content": {
      "application/json": {
        "schema": {
          "$ref": "#/components/schemas/OrkesioError"
        },
        "example": {
          "error": "invalid_request",
          "message": "phone_number_id e token são obrigatórios."
        }
      }
    }
  },
  "401": {
    "description": "Token ausente ou inválido.",
    "content": {
      "application/json": {
        "schema": {
          "$ref": "#/components/schemas/OrkesioError"
        },
        "example": {
          "error": "unauthorized",
          "message": "Token inválido."
        }
      }
    }
  },
  "409": {
    "description": "A inbox já foi conectada pelo WhatsApp Web (`inbox_uses_whatsapp_web`) ou já é de outro canal (`conflict`): crie uma inbox nova.",
    "content": {
      "application/json": {
        "schema": {
          "$ref": "#/components/schemas/OrkesioError"
        },
        "example": {
          "error": "inbox_uses_whatsapp_web",
          "message": "A inbox já foi conectada pelo WhatsApp Web; crie uma inbox nova para a API oficial."
        }
      }
    }
  },
  "429": {
    "$ref": "#/components/responses/RateLimited"
  },
  "500": {
    "description": "Falha ao gravar a inbox",
    "content": {
      "application/json": {
        "schema": {
          "$ref": "#/components/schemas/OrkesioError"
        },
        "example": {
          "error": "save_failed",
          "message": "Falha ao gravar a inbox."
        }
      }
    }
  },
  "502": {
    "description": "A Meta (`meta_error`) ou o Telegram (`telegram_error`) não respondeu ao conferir o token ou o número. Tente de novo em instantes.",
    "content": {
      "application/json": {
        "schema": {
          "$ref": "#/components/schemas/OrkesioError"
        },
        "example": {
          "error": "telegram_error",
          "message": "O Telegram não respondeu. Tente de novo em instantes."
        }
      }
    }
  }
}

Estado: Prévia

Compatibilidade de canais

CanalCompatívelObservação
WhatsApp (Web)NãoSó na API oficial.
WhatsApp (API oficial)Sim
InstagramSimCom channel e page_id.
MessengerSimCom channel e page_id.
TelegramSimCom channel: telegram e o token do bot.

Eventos que esta rota gera

Nenhum. Esta rota não gera evento no webhook (nem em GET /events): o resultado vem só na resposta.

Antes e depois (uazapi → Orkesio)

Rota nova: não tem equivalente na uazapi.

  • Não existe na uazapi: a API oficial do WhatsApp é só da Orkesio.

#/components/schemas/Inbox

{
  "type": "object",
  "required": [
    "id",
    "name",
    "status",
    "channel"
  ],
  "description": "Uma inbox: um número conectado a um canal.",
  "properties": {
    "id": {
      "type": "string",
      "description": "Id da inbox (ex.: `r0269625d29bfbd`). É o `inbox_id` que o admin manda em `PATCH /inbox/admin-fields` e `POST /inbox/token/rotate`."
    },
    "name": {
      "type": "string",
      "description": "Nome da inbox, para você reconhecer. O WhatsApp não mostra este nome (o do celular é `system_name`)."
    },
    "token": {
      "type": "string",
      "description": "Token da inbox (header `token`). Só nas rotas do `admintoken` (`GET /inbox/all`, `POST /inbox/create`, `PATCH /inbox/admin-fields`); em `GET /inbox/status` não vem."
    },
    "status": {
      "type": "string",
      "enum": [
        "disconnected",
        "connecting",
        "connected",
        "hibernated"
      ],
      "description": "`disconnected`, `connecting` (esperando o QR code ou reconectando), `connected` ou `hibernated` (pausada pelo servidor). O mesmo valor do evento `inbox.status`; o porquê vem em `reason`. Na API oficial da Meta (WhatsApp, Messenger e Instagram), `disconnected` também quando a Meta recusou o token da inbox (vencido ou revogado) na última chamada: o `reason` é `token_expired`, o `last_disconnect_reason` começa com `190:` e volta a `connected` quando uma chamada passa ou com `POST /inbox/cloud` e um token novo. As duas viradas geram o evento `inbox.status`. Depois de um reinício do servidor, a inbox aparece `connected` até a próxima recusa."
    },
    "channel": {
      "type": "string",
      "enum": [
        "whatsapp_web",
        "whatsapp_cloud",
        "messenger",
        "instagram",
        "telegram"
      ],
      "description": "`whatsapp_web` (pareada por QR code ou código), `whatsapp_cloud` (API oficial do WhatsApp), `messenger` (uma Página do Facebook), `instagram` (um Instagram profissional, pela Página ligada a ele) ou `telegram` (um bot do Telegram e, com o Telegram Business, a conta ligada a ele)."
    },
    "phone": {
      "type": "string",
      "description": "Número conectado (só dígitos), quando conectada. Só WhatsApp: nos outros canais, `account_id`."
    },
    "account_id": {
      "type": "string",
      "description": "Messenger: o id da Página. Instagram: o id da conta profissional. Telegram: o id do bot. No WhatsApp não vem (o número está em `phone`)."
    },
    "profile_name": {
      "type": "string",
      "description": "Nome do perfil, quando conectada."
    },
    "profile_picture_url": {
      "type": "string",
      "description": "Foto do perfil, quando conectada."
    },
    "is_business": {
      "type": "boolean",
      "description": "Conta do WhatsApp Business."
    },
    "platform": {
      "type": "string",
      "description": "Aparelho principal (`android`, `ios`, `smba`...)."
    },
    "system_name": {
      "type": "string",
      "description": "**Só WhatsApp.** Nome que aparece no celular, em \"aparelhos conectados\".",
      "x-only": "whatsapp"
    },
    "admin_field_01": {
      "type": "string",
      "description": "Campo livre do administrador (referência do seu sistema). A inbox vê, só o `admintoken` altera."
    },
    "admin_field_02": {
      "type": "string",
      "description": "Segundo campo livre do administrador."
    },
    "last_disconnect_at": {
      "type": "string",
      "format": "date-time",
      "description": "Quando foi a última desconexão. ISO 8601 em UTC com milissegundos."
    },
    "last_disconnect_reason": {
      "type": "string",
      "description": "Motivo da última desconexão, em texto livre, sem formato estável (ex.: `connection attempt canceled by API`). Para tratar por código, use `reason`. O do banimento temporário começa com `402/` e traz o prazo (`expira em ...`) em português."
    },
    "created_at": {
      "type": "string",
      "format": "date-time",
      "description": "Criação. ISO 8601 em UTC com milissegundos."
    },
    "updated_at": {
      "type": "string",
      "format": "date-time",
      "description": "Última alteração. ISO 8601 em UTC com milissegundos."
    },
    "presence": {
      "type": "string",
      "enum": [
        "available",
        "unavailable"
      ],
      "description": "**Só WhatsApp.** Presença: `available` (aparece online) ou `unavailable`. Muda com `PATCH /inbox`.",
      "x-only": "whatsapp"
    },
    "reason": {
      "type": "string",
      "enum": [
        "qr",
        "pair_code",
        "logged_out",
        "banned",
        "plan_limit",
        "token_expired"
      ],
      "description": "Por que a inbox está nesse `status`, quando a api sabe: `qr` (conectando, esperando o QR code), `pair_code` (conectando, esperando o código de pareamento; o QR code vem junto), `logged_out` (desconectada porque o aparelho saiu: pelo celular, pelo WhatsApp ou por `POST /inbox/disconnect`; precisa de QR code de novo), `banned` (bloqueio temporário do WhatsApp), `token_expired` (na API oficial da Meta, a Meta recusou o token da inbox, vencido ou revogado: conecte de novo com `POST /inbox/cloud` e um token novo) ou `plan_limit` (hibernada porque o plano tem mais inboxes conectadas do que permite: troque de plano ou apague uma inbox). Sem ele, não há o que fazer além de esperar (reconectando, por exemplo). A lista pode crescer."
    },
    "qr_code": {
      "type": "string",
      "description": "**Só WhatsApp Web.** Só enquanto `status` é `connecting`. QR code para ler no celular (imagem PNG em base64, `data:image/png;base64,...`). Muda a cada poucos segundos: busque de novo em `GET /inbox/status`.",
      "x-only": "whatsapp_web"
    },
    "pair_code": {
      "type": "string",
      "description": "**Só WhatsApp Web.** Só enquanto `status` é `connecting`. Código de pareamento, quando a conexão foi pedida com `phone`. Digite no celular em \"Conectar com número de telefone\". O `qr_code` continua vindo junto: vale o que for usado primeiro.",
      "x-only": "whatsapp_web"
    },
    "history_request_id": {
      "type": "string",
      "description": "**Só WhatsApp Web.** Só na resposta de `POST /inbox/connect`: id desta tentativa de pareamento, o mesmo dos lotes de histórico e de `GET /inbox/history-sync`.",
      "x-only": "whatsapp_web"
    },
    "webhook_url": {
      "type": "string",
      "description": "Só nas inboxes oficiais, nas respostas da inbox do token (`GET /inbox/status`, `PATCH /inbox`, connect e disconnect): a URL de entrada que a Meta (ou o Telegram) chama, a mesma da resposta do `POST /inbox/cloud`. No painel da Meta, é a URL de callback. Não é um dos seus [`/webhooks`](/endpoint/get/webhooks)."
    },
    "verify_token": {
      "type": "string",
      "description": "Só nas inboxes oficiais, nas respostas da inbox do token (`GET /inbox/status`, `PATCH /inbox`, connect e disconnect): o token de verificação do webhook, o mesmo da resposta do `POST /inbox/cloud`."
    },
    "quality_rating": {
      "type": "string",
      "enum": [
        "green",
        "yellow",
        "red",
        "unknown"
      ],
      "description": "**Só API oficial.** No `GET /inbox/status` da inbox conectada, a qualidade do número na Meta (`green` alta, `yellow` média, `red` baixa, `unknown` ainda sem avaliação). Com `red` por 7 dias, a Meta baixa o nível de limite. Lida da Meta a cada 10 minutos; sem resposta dela, o campo não vem. A lista pode crescer.",
      "x-only": "whatsapp_cloud"
    },
    "messaging_limit_tier": {
      "type": "string",
      "example": "tier_2k",
      "description": "**Só API oficial.** No `GET /inbox/status` da inbox conectada, quantas pessoas a conta pode contatar primeiro (com modelo) em 24 horas, como a Meta informa: `tier_250`, `tier_2k`, `tier_10k`, `tier_100k` ou `tier_unlimited`. O nível é da conta da empresa na Meta e vale para todos os números dela. Lido a cada 10 minutos; sem resposta da Meta, o campo não vem.",
      "x-only": "whatsapp_cloud"
    },
    "resetting": {
      "type": "boolean",
      "description": "`true` enquanto o `POST /inbox/reset` roda; ausente fora dele."
    },
    "ai": {
      "allOf": [
        {
          "$ref": "#/components/schemas/AISettings"
        }
      ],
      "description": "Só no `GET /inbox/all`: a configuração da IA da inbox (a do `GET /chatbot/settings`, sem `last_error`)."
    },
    "queue": {
      "type": "object",
      "additionalProperties": false,
      "description": "Só no `GET /inbox/all`: a espera da fila (a do `GET /messages/queue/settings`).",
      "properties": {
        "delay_min_seconds": {
          "type": "integer",
          "minimum": 0
        },
        "delay_max_seconds": {
          "type": "integer",
          "minimum": 0
        }
      }
    },
    "lead_fields": {
      "type": "array",
      "description": "Só no `GET /inbox/all`: os campos do lead que têm nome (os do `GET /leads/fields`).",
      "items": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "key",
          "name"
        ],
        "properties": {
          "key": {
            "type": "string",
            "description": "`field01` a `field20`."
          },
          "name": {
            "type": "string"
          }
        }
      }
    }
  }
}

#/components/schemas/AISettings

{
  "type": "object",
  "description": "Configuração da IA na inbox.",
  "required": [
    "enabled",
    "ignore_groups",
    "stop_keyword",
    "stop_minutes",
    "pause_minutes_on_manual_reply",
    "has_openai_api_key",
    "notify_number",
    "notify_url",
    "max_replies_per_hour"
  ],
  "properties": {
    "enabled": {
      "type": "boolean",
      "description": "Liga ou desliga toda a automação: agentes, respostas rápidas por gatilho e fluxos. Desligada, `POST /chatbot/flows/start` e o webhook do fluxo respondem `409 chatbot_disabled`. Começa desligada."
    },
    "ignore_groups": {
      "type": "boolean",
      "description": "Não responde em grupos."
    },
    "stop_keyword": {
      "type": "string",
      "description": "Mensagem que, enviada inteira (sem diferença de maiúsculas) pelo contato ou por você à mão, pausa a IA naquele chat por `stop_minutes` e cancela os fluxos agendados para ele. Vazio desativa."
    },
    "stop_minutes": {
      "type": "integer",
      "minimum": 0,
      "description": "Por quantos minutos a `stop_keyword` pausa a IA no chat."
    },
    "pause_minutes_on_manual_reply": {
      "type": "integer",
      "minimum": 0,
      "description": "Quando alguém responde à mão (pelo celular ou WhatsApp Web), a IA pausa naquele chat por esses minutos. Mensagens enviadas pela API, inclusive as da própria IA, não pausam. `0` desativa."
    },
    "has_openai_api_key": {
      "type": "boolean",
      "description": "Se a chave da OpenAI da inbox está configurada. A chave nunca é devolvida."
    },
    "notify_number": {
      "type": "string",
      "description": "Número da equipe (com DDI) que recebe no WhatsApp o aviso de \"chamar humano\" (da IA ou do bloco do fluxo), do limite de respostas e da falha do provedor da IA, enviado pela própria inbox. A conversa com esse número fica fora de toda automação (não pausa, não arma silêncio, não responde). Vazio desliga.",
      "example": "5521999990000"
    },
    "notify_url": {
      "type": "string",
      "description": "URL que recebe o mesmo aviso por `POST`. Num tópico do ntfy (`https://ntfy.sh/seu-topico`), o aviso chega como notificação no celular; em outra URL, vai o JSON `{event, chatid, name, reason, owner, timestamp}`, com `event` `handoff` (chamaram uma pessoa), `reply_limit` (limite de respostas) ou `ai_error` (o provedor da IA falhou; no máximo um aviso por hora). Vazio desliga.",
      "example": "https://ntfy.sh/orkesio-seu-topico"
    },
    "max_replies_per_hour": {
      "type": "integer",
      "minimum": 0,
      "description": "Máximo de respostas da IA por conversa em uma hora (só conta resposta enviada). Ao passar, a automação daquela conversa (IA, gatilhos e fluxos) pausa por 1 hora, com o motivo em `chatbot_summary` enquanto durar, e a equipe é avisada. Protege de loop entre robôs e de abuso. `0` desliga; o padrão é `20`.",
      "example": 20
    },
    "last_error": {
      "type": "object",
      "description": "A última falha do provedor da IA (sem crédito, chave inválida, modelo inexistente…), em português. Some quando a IA volta a responder. Ausente sem falha.",
      "properties": {
        "at": {
          "type": "string",
          "format": "date-time",
          "description": "Quando. ISO 8601 em UTC com milissegundos."
        },
        "reason": {
          "type": "string",
          "description": "O motivo, em português.",
          "example": "A conta do provedor da IA está sem crédito."
        },
        "chat_id": {
          "type": "string",
          "description": "A conversa que ficou sem resposta."
        }
      },
      "required": [
        "at",
        "reason",
        "chat_id"
      ]
    }
  }
}

#/components/schemas/OrkesioError

{
  "type": "object",
  "properties": {
    "error": {
      "type": "string",
      "description": "Código estável do erro, em inglês e `snake_case`. Os de uso geral: `invalid_request` (400): pedido inválido: JSON malformado, campo desconhecido ou valor fora do permitido (o detalhe em `message`; o campo em `field`, quando é um só); `unauthorized` (401): `token` ou `admintoken` ausente ou inválido; `forbidden` (403): o token não pode fazer isso (no servidor de demonstração, por exemplo); `not_admin` (403): o WhatsApp recusou por falta de permissão no grupo ou na newsletter; `account_restricted` (403): o WhatsApp restringiu a conta de iniciar conversas novas (mandar para quem já conversa continua valendo; até quando, em `GET /inbox/limits`); `new_chat_limit` (403): a conta atingiu a cota do WhatsApp de conversas novas neste ciclo (veja `GET /inbox/limits`); os dois também no `error` de `OrkesioMessage` e de `message.status`, e não adianta repetir o envio; `payment_required` (403): na API oficial, a Meta recusou o envio por um problema no pagamento da conta do WhatsApp Business (erro 131042 da Meta); acerte a forma de pagamento no gerenciador da Meta, porque repetir não adianta; também no `error` de `OrkesioMessage` e de `message.status`; `whatsapp_rejected` (400): o WhatsApp recusou a mudança pedida (o campo, em `field`, quando é um só); `not_found` (404): o recurso não existe nesta inbox; `conflict` (409): o recurso já existe ou mudou (id em uso, inbox de outro canal); `inbox_not_paired` (409): a inbox ainda não conectou um número; `payload_too_large` (413): o corpo passou do limite; `canceled` e `expired`: só no `error` de `OrkesioMessage` e de `message.status` (envio cancelado antes de sair, ou que passou do prazo na fila); `rate_limited` (429): muitos pedidos; espere o `Retry-After`; `internal_error` (500): falha inesperada na api; tente de novo; `send_failed` (500): o envio falhou (o motivo em `message`); também no `error` de `OrkesioMessage` e de `message.status`; `unsupported_for_channel` (501): o canal da inbox não atende esta rota ou este tipo de mensagem; `meta_error` (502): a Meta recusou ou não respondeu; `disconnected` (503): a inbox está desconectada (sem sessão do WhatsApp, ou token do canal oficial vencido); `unavailable` (503 ou 504): o WhatsApp não respondeu a tempo, ou algo em andamento impede agora; tente de novo. Cada rota lista os códigos próprios dela (`outside_window`, `number_invalid`, `flow_invalid`...). A lista pode crescer: trate código desconhecido pelo status HTTP."
    },
    "message": {
      "type": "string",
      "description": "Descrição para pessoas (às vezes o texto do WhatsApp ou da Meta). Não compare o texto: use `error`."
    },
    "field": {
      "type": "string",
      "description": "O campo do pedido que causou o erro, quando é um só (por exemplo, o campo que o WhatsApp recusou num `PATCH`)."
    }
  },
  "required": [
    "error",
    "message"
  ],
  "additionalProperties": true,
  "description": "O objeto de erro da Orkesio, o mesmo em todo lugar: o corpo das respostas de erro e o `error` de `OrkesioMessage`, `message.status` e `message.failed`. Algumas rotas juntam campos próprios (`request_id`, `errors`...)."
}

#/components/responses/RateLimited

{
  "description": "`rate_limited`: passou do limite de chamadas desta inbox (ou do admin); espere o tempo do header `Retry-After` e tente de novo.",
  "headers": {
    "Retry-After": {
      "description": "Segundos até poder chamar de novo.",
      "schema": {
        "type": "integer",
        "minimum": 1
      }
    }
  },
  "content": {
    "application/json": {
      "schema": {
        "$ref": "#/components/schemas/OrkesioError"
      },
      "example": {
        "error": "rate_limited",
        "message": "Muitas requisições."
      }
    }
  }
}

Guias relacionados

Visão geral · O que funciona em cada canal · O que muda da uazapi