Esta é a lista completa das rotas /v1. O contrato exato de cada request/response é a combinação desta referência com os exemplos testados nas páginas de guia (Enviar mensagens, Webhooks, Transmissões e limites). Cada exemplo roda contra o handler real antes de ser publicado, então request e resposta mostrados nunca divergem do comportamento em produção.
Convenções
Base URL de todas as rotas:
https://botozap.com.br/api/v1Toda requisição leva a sua chave de API no header, como Authorization: Bearer ou como X-API-Key. A conta é derivada da chave, então você nunca passa um id de conta (o isolamento multi-tenant é garantido no servidor). Detalhes de autenticação e escopos em Autenticação.
Authorization: Bearer $BOTOZAP_KEY
# ou
X-API-Key: $BOTOZAP_KEYAs respostas seguem um envelope fixo:
- Sucesso singular:
{ "data": <objeto> }. - Lista:
{ "data": [...], "paging" | "meta": {...} }. - Exceção:
POST /api/v1/messagesretorna direto{ id, wamid, to, status }, sem envelope.
Erros vêm num envelope estruturado com código e mensagem:
{
"error": {
"code": "forbidden_scope",
"message": "Esta chave de API não tem o escopo 'messages:send'."
}
}Escopos
Cada rota exige um escopo específico (coluna Escopo nas tabelas abaixo). Uma chave criada com a lista de escopos vazia tem acesso total a todas as rotas: é o comportamento legado para chaves criadas antes de o sistema de escopos existir. Veja a explicação completa em Autenticação.
Ambiente sandbox
Uma chave bz_sandbox_ só pode acessar uma allow-list fail-closed de rotas. Hoje, apenas POST /api/v1/messages, GET /api/v1/messages, GET /api/v1/messages/{id}, GET /api/v1/media/{id} e GET /api/v1/media/{id}/download(marcadas "sandbox" nas tabelas abaixo; nas rotas de mídia, uma chave sandbox só consulta a mídia sintética sandbox-media-0001). Qualquer outra rota responde 403 sandbox_forbidden para uma chave sandbox. Veja Sandbox vs. produção.
Paginação
Dois modelos coexistem, dependendo do recurso, nunca os dois na mesma rota:
Por cursor
Para coleções grandes e de append (mensagens, contatos, conversas, webhooks, entregas de webhook, logs de API, destinatários de transmissão). Query params: limit (padrão 20, máximo 100), after e before. A resposta traz:
{
"data": [...],
"paging": {
"cursors": { "before": "...", "after": "..." },
"next": "...",
"previous": "..."
}
}Rotas por cursor: /api/v1/messages, /api/v1/contacts, /api/v1/conversations, /api/v1/webhooks, /api/v1/webhook_deliveries, /api/v1/api_logs, /api/v1/broadcasts/{id}/recipients.
Por página (offset)
Para coleções pequenas e estáveis (clientes, números, templates, usuários, transmissões, flows, links de onboarding, atribuições de conversa). Query params: page e per_page (padrão 20, máximo 100). A resposta traz:
{
"data": [...],
"meta": { "page": 1, "per_page": 20, "total_pages": 3, "total_count": 42 }
}Os mesmos números também vêm nos headers X-Page, X-Per-Page, X-Total-Pages e X-Total. Rotas por página: /api/v1/customers, /api/v1/phone_numbers, /api/v1/templates, /api/v1/users, /api/v1/broadcasts, /api/v1/flows, /api/v1/flows/{id}/versions, /api/v1/customers/{id}/setup_links, /api/v1/conversations/{id}/assignments.
Mensagens
| Método | Caminho | Escopo | Descrição |
|---|---|---|---|
| POST | /api/v1/messages | messages:send | Envia uma mensagem (texto ou template). Aceita chave sandbox. |
| GET | /api/v1/messages | messages:read | Lista as mensagens da conta, paginada por cursor. Aceita chave sandbox. |
| GET | /api/v1/messages/{id} | messages:read | Consulta uma mensagem por UUID interno ou wamid. Aceita chave sandbox. |
Clientes
| Método | Caminho | Escopo | Descrição |
|---|---|---|---|
| GET | /api/v1/customers | customers:read | Lista os seus clientes, paginado por página. |
| POST | /api/v1/customers | customers:write | Cria um cliente. |
| GET | /api/v1/customers/{id} | customers:read | Consulta um cliente. |
| PATCH | /api/v1/customers/{id} | customers:write | Atualiza um cliente. |
| DELETE | /api/v1/customers/{id} | customers:write | Remove um cliente. |
| GET | /api/v1/customers/{id}/setup_links | customers:read | Lista os links de onboarding do cliente, paginado por página. |
| POST | /api/v1/customers/{id}/setup_links | customers:write | Cria um link de onboarding (Embedded Signup). |
| PATCH | /api/v1/customers/{id}/setup_links/{linkId} | customers:write | Atualiza status (active/expired/revoked) ou expires_at do link, inclusive para revogá-lo. Não há GET nem DELETE individuais para um link específico. |
Templates
| Método | Caminho | Escopo | Descrição |
|---|---|---|---|
| GET | /api/v1/templates | templates:read | Lista os templates sincronizados da conta, paginado por página. |
| POST | /api/v1/templates | templates:write | Cria um template e o submete à Meta para análise. |
| GET | /api/v1/templates/{id} | templates:read | Consulta um template. |
Hoje não existe PATCH nem DELETE de template pela API. Para editar ou remover, use o painel.
Transmissões
| Método | Caminho | Escopo | Descrição |
|---|---|---|---|
| GET | /api/v1/broadcasts | broadcasts:read | Lista as transmissões, paginado por página. |
| POST | /api/v1/broadcasts | broadcasts:write | Cria uma transmissão em rascunho. |
| GET | /api/v1/broadcasts/{id} | broadcasts:read | Consulta uma transmissão e seus contadores de progresso. |
| PATCH | /api/v1/broadcasts/{id} | broadcasts:write | Transição de estado, não edição de conteúdo: { status: "stopped" } interrompe uma transmissão sending, scheduled ou warming_up (uma transmissão em ondas, aquecendo entre lotes); { status: "draft" } cancela um agendamento, devolvendo uma scheduled para draft. Uma transmissão warming_up só pode ser interrompida com stopped; ela não volta para draft. |
| GET | /api/v1/broadcasts/{id}/recipients | broadcasts:read | Lista os destinatários, paginado por cursor. |
| POST | /api/v1/broadcasts/{id}/recipients | broadcasts:write | Adiciona destinatários (só em rascunho). |
| DELETE | /api/v1/broadcasts/{id}/recipients | broadcasts:write | Remove todos os destinatários (só em rascunho). |
| POST | /api/v1/broadcasts/{id}/schedule | broadcasts:write | Agenda o envio. |
| POST | /api/v1/broadcasts/{id}/send | broadcasts:write | Dispara o envio (assíncrono, responde 202). |
| POST | /api/v1/broadcasts/{id}/cancel | broadcasts:write | Cancela uma transmissão agendada ou em rascunho (não interrompe um envio já em curso nem uma transmissão warming_up; para pará-las use o PATCH acima). |
Limites de destinatários por transmissão, quota mensal, rate limit e o messaging limit da Meta (quatro coisas diferentes) estão detalhados em Transmissões e limites.
Contatos
| Método | Caminho | Escopo | Descrição |
|---|---|---|---|
| GET | /api/v1/contacts | contacts:read | Lista os contatos, paginado por cursor. Filtre por campo personalizado com metadata[chave]=valor. |
| POST | /api/v1/contacts | contacts:write | Cria um contato. Aceita metadata (campos personalizados) na criação. |
| GET | /api/v1/contacts/{id} | contacts:read | Consulta um contato. |
| PATCH | /api/v1/contacts/{id} | contacts:write | Atualiza um contato. Campos editáveis: profile_name, username, notes, stage_id (etapa do funil; null limpa) e metadata (campos personalizados; merge raso, null remove a chave). |
| DELETE | /api/v1/contacts/{id} | contacts:write | Remove um contato. |
| GET | /api/v1/contact-stages | contacts:read | Lista as etapas do funil da conta, ordenadas por posição. |
| POST | /api/v1/contact-stages | contacts:write | Cria uma etapa custom (label + color token). |
| PATCH | /api/v1/contact-stages/{id} | contacts:write | Renomeia/recolore/reordena uma etapa (label, color, position). |
| DELETE | /api/v1/contact-stages/{id} | contacts:write | Exclui uma etapa custom (as de sistema respondem 422). |
| GET | /api/v1/contact-fields | contacts:read | Lista os campos personalizados da conta, ordenados por posição. |
| POST | /api/v1/contact-fields | contacts:write | Cria um campo personalizado (label; key opcional, derivada do label). |
| PATCH | /api/v1/contact-fields/{id} | contacts:write | Renomeia/reordena um campo (label, position; key imutável). |
| DELETE | /api/v1/contact-fields/{id} | contacts:write | Exclui a definição do campo (não apaga o dado já gravado no metadata). |
Conversas
| Método | Caminho | Escopo | Descrição |
|---|---|---|---|
| GET | /api/v1/conversations | conversations:read | Lista as conversas, paginado por cursor. |
| GET | /api/v1/conversations/{id} | conversations:read | Consulta uma conversa. |
| PATCH | /api/v1/conversations/{id} | conversations:write | Atualiza o estado de uma conversa. |
| GET | /api/v1/conversations/{id}/assignments | conversations:read | Lista as atribuições da conversa, paginado por página. |
| POST | /api/v1/conversations/{id}/assignments | conversations:write | Atribui a conversa a um usuário. |
| GET | /api/v1/conversations/{id}/assignments/{assignmentId} | conversations:read | Consulta uma atribuição. |
| PATCH | /api/v1/conversations/{id}/assignments/{assignmentId} | conversations:write | Atualiza uma atribuição. |
Webhooks
| Método | Caminho | Escopo | Descrição |
|---|---|---|---|
| GET | /api/v1/webhooks | webhooks:read | Lista os webhooks. |
| POST | /api/v1/webhooks | webhooks:write | Registra um webhook. |
| GET | /api/v1/webhooks/{id} | webhooks:read | Consulta um webhook. |
| PATCH | /api/v1/webhooks/{id} | webhooks:write | Atualiza um webhook. |
| DELETE | /api/v1/webhooks/{id} | webhooks:write | Remove um webhook. |
| POST | /api/v1/webhooks/{id}/test | webhooks:write | Dispara um evento de teste. |
Números
| Método | Caminho | Escopo | Descrição |
|---|---|---|---|
| GET | /api/v1/phone_numbers | numbers:read | Lista os números conectados, paginado por página. |
| GET | /api/v1/phone_numbers/{id} | numbers:read | Consulta um número. |
| PATCH | /api/v1/phone_numbers/{id} | numbers:write | Hoje sempre responde 422 no_updatable_fields: o schema atual de números não tem nenhum campo local editável (os demais campos são identidade ou sincronizados da Meta). A rota existe para o contrato ficar estável quando um campo editável for adicionado. |
| DELETE | /api/v1/phone_numbers/{id} | numbers:write | Desconecta o número do nosso sistema (não desregistra na Meta). Recusa com 409 phone_in_use se houver conversas, mensagens, contatos ou transmissões associados. |
| GET | /api/v1/phone_numbers/{id}/health | numbers:read | Consulta a saúde e a qualidade do número. |
Mídia
| Método | Caminho | Escopo | Descrição |
|---|---|---|---|
| POST | /api/v1/media | media:write | Faz upload de um arquivo para envio. |
| GET | /api/v1/media/{id} | media:read | Consulta uma mídia recebida por id (o media_id da Cloud API): devolve mime_type, file_size, sha256, uma download_url assinada (validade de 1 hora) e expires_at. Se a mídia ainda está sendo espelhada, responde 202 media_not_ready (com Retry-After); tente de novo em instantes. No ambiente sandbox, só o id sandbox-media-0001 responde (mídia sintética de exemplo). |
| GET | /api/v1/media/{id}/download | media:read | Redireciona (302) direto para a URL de download da mídia recebida. Mesmos estados da rota acima (incluindo 202 media_not_ready). No sandbox, redireciona para a mídia sintética do id sandbox-media-0001. |
Flows
| Método | Caminho | Escopo | Descrição |
|---|---|---|---|
| GET | /api/v1/flows | flows:read | Lista os flows, paginado por página. |
| POST | /api/v1/flows | flows:write | Cria um flow. |
| GET | /api/v1/flows/{id} | flows:read | Consulta um flow. |
| DELETE | /api/v1/flows/{id} | flows:write | Remove um flow. |
| POST | /api/v1/flows/{id}/publish | flows:write | Publica o flow. |
| GET | /api/v1/flows/{id}/versions | flows:read | Lista as versões do flow, paginado por página. |
| POST | /api/v1/flows/{id}/versions | flows:write | Cria uma nova versão. |
| POST | /api/v1/flows/{id}/setup_encryption | flows:write | Configura a criptografia do flow. |
| GET | /api/v1/flows/{id}/data_endpoint | flows:read | Consulta o data endpoint do flow. |
| POST | /api/v1/flows/{id}/data_endpoint | flows:write | Configura o data endpoint do flow. |
Usuários
| Método | Caminho | Escopo | Descrição |
|---|---|---|---|
| GET | /api/v1/users | logs:read | Lista os membros do workspace. Note que o escopo exigido é o mesmo de logs (logs:read), não um escopo próprio de usuários. |
Logs de API
| Método | Caminho | Escopo | Descrição |
|---|---|---|---|
| GET | /api/v1/api_logs | logs:read | Lista as requisições feitas à API, paginado por cursor. |
Entregas de webhook
| Método | Caminho | Escopo | Descrição |
|---|---|---|---|
| GET | /api/v1/webhook_deliveries | webhooks:read | Lista as tentativas de entrega de webhook, paginado por cursor. |
Shapes exatos
Esta referência lista os endpoints, o escopo e o que cada um faz. O contrato exato de campos (o que realmente entra e sai de cada chamada) é a própria API REST, documentada nos exemplos testados das páginas de guia: cada exemplo mostrado neste site roda de verdade contra o handler correspondente antes de ser publicado, então nunca há divergência entre o que você lê aqui e o que a API faz.
