DOCUMENTAÇÃO DA API
Referência da API FlowBridge
150 endpoints em 12 áreas, do envio de mensagens a grupos, canais, CRM e webhooks. Esta página segue a especificação OpenAPI 3.1 do projeto; uma verificação automática confere que toda rota do código está nela.
https://api.flowbridge.com.br é provisório e pode mudar antes da abertura. 13 rotas respondem 501 porque o WhatsApp Web não oferece o recurso; elas estão marcadas abaixo. Nas rotas de um número, {número} quer dizer /v1/workspaces/{workspaceId}/instances/{instanceId}.
Início rápido
Tenha uma chave de API
No console, em Integrações, o proprietário ou um administrador da organização cria a chave, que aparece uma única vez: guarde-a como segredo. Dê só os escopos necessários e, se quiser, prenda a chave a uma área de trabalho ou a um número.
Os IDs da área de trabalho (
$WORKSPACE) e do número ($NUMERO) ficam na mesma tela, com botão de copiar.Envie a primeira mensagem
Idempotency-Keyé obrigatória: se a rede cair e o seu sistema repetir o pedido com a mesma chave, a mensagem sai uma vez só.expires_até o prazo para o envio acontecer (no máximo 7 dias à frente).Pedido curl -X POST https://api.flowbridge.com.br/v1/workspaces/$WORKSPACE/instances/$NUMERO/messages \ -H "Authorization: Bearer $FLOWBRIDGE_KEY" \ -H "Idempotency-Key: pedido-4821-confirmacao" \ -H "Content-Type: application/json" \ -d '{ "to": { "kind": "phone", "value": "+5511912345678" }, "type": "text", "text": { "body": "Seu pedido 4821 saiu para entrega." }, "client_reference": "pedido-4821", "expires_at": "2026-10-01T18:00:00Z" }'Resposta202 Accepted { "data": { "id": "e7a1c3d9-0b4f-4e62-9a85-1d3c7b2f6e04", "state": "queued", "provider_message_id": "3EB0A1B2C3D4E5F6071829", "client_reference": "pedido-4821", "expires_at": "2026-10-01T18:00:00.000Z", "created_at": "2026-10-01T12:00:00.000Z" } }Acompanhe o resultado
O 202 confirma que a mensagem entrou na fila. Para saber se saiu, foi entregue ou lida, consulte o envio ou cadastre um webhook: cada mudança chega como
message.provider_accepted,message.delivered,message.readou, se der errado,message.failed.Pedido # Consultar o envio (escopo messages:read) curl https://api.flowbridge.com.br/v1/messages/e7a1c3d9-0b4f-4e62-9a85-1d3c7b2f6e04 \ -H "Authorization: Bearer $FLOWBRIDGE_KEY" # Ou receber avisos a cada mudança (webhooks:write, chave da área de trabalho) curl -X POST https://api.flowbridge.com.br/v1/webhook-endpoints \ -H "Authorization: Bearer $FLOWBRIDGE_KEY" \ -H "Content-Type: application/json" \ -d '{ "workspace_id": "'$WORKSPACE'", "url": "https://seu-sistema.com.br/flowbridge" }'
Autenticação e escopos
Toda chamada leva a chave de API no cabeçalho Authorization. A chave pertence a uma organização e pode ficar presa a uma área de trabalho ou a um único número: fora desse alcance, a resposta é 404. Cada rota exige um escopo; sem ele, 403 scope_denied. A única exceção é o webhook chamado pelo Chatwoot, identificado por um token no endereço.
Authorization: Bearer fbk_XXXXXXXXXXXX_...| Escopo | O que permite |
|---|---|
workspaces:read | Ler as áreas de trabalho. |
instances:write | Criar números e reservar a vaga para conectar. |
instances:read | Aceito na chave; nenhuma rota pública usa ainda. |
messages:send | Enviar mensagens e mídia, cancelar a fila e criar campanhas. |
messages:read | Consultar envios, baixar mídia, ler conversas, a fila e as campanhas. |
engine:read | Ler dados do WhatsApp (grupos, contatos, perfil, canais), eventos, CRM, Chatwoot e operações. |
engine:write | Mudar algo no WhatsApp ou nos dados do número: grupos, perfil, conversas, CRM, Chatwoot. |
webhooks:read | Listar webhooks e o histórico de entregas. |
webhooks:write | Cadastrar e remover webhooks. |
Operações, erros e limites
Operações no WhatsApp
Rotas que precisam do WhatsApp (grupos, perfil, contatos, conversas, canais) são executadas pelo número conectado. A API espera até 15 segundos: responde 200 com o resultado em data ou 202 com o endereço da operação em Location. Consulte GET /v1/operations/{id} até terminar. 422 quer dizer que o WhatsApp recusou; 502, que o resultado é incerto (confira antes de repetir); 504, que a operação venceu sem ser executada.
Enviar mensagem é diferente: a resposta é sempre 202 com o envio na fila, e o resultado chega pelos eventos message.*.
HTTP/1.1 202 Accepted
Location: /v1/operations/0b8f4d2e-6c1a-4f37-9e50-a2d7c3b1e864
{
"data": {
"operation_id": "0b8f4d2e-6c1a-4f37-9e50-a2d7c3b1e864",
"state": "running"
}
}HTTP/1.1 403 Forbidden
{
"error": {
"code": "scope_denied",
"message": "scope_denied",
"request_id": "7f1e2d3c-4b5a-4968-8776-5a4b3c2d1e0f",
"retryable": false
}
}Idempotência
Idempotency-Key é obrigatória para enviar mensagens, criar campanhas e criar números, e aceita nas operações. Repetir o pedido com a mesma chave devolve o mesmo resultado, com o cabeçalho Idempotent-Replay: true, sem fazer de novo. A mesma chave com outro conteúdo recebe 409 idempotency_conflict.
Limites
Envio: 60 mensagens por minuto, com rajada de 10, por chave e número (429 rate_limited com Retry-After). Com 1000 envios aguardando na fila do número, novos pedidos recebem 429 queue_full. Corpo JSON até 1 MB; mídia até 16 MiB, enviada como arquivo binário.
| Código | Significado |
|---|---|
200 | Pronto; data traz o resultado. |
201 | Criado. |
202 | Aceito: mensagem na fila, ou operação ainda em andamento (cabeçalho Location). |
204 | Feito, sem corpo. |
400 | Pedido inválido (invalid_input e outros códigos). |
401 | Chave ausente, inválida, revogada ou vencida. |
403 | Falta o escopo na chave (scope_denied). |
404 | Não existe, ou a chave não alcança esse recurso. |
409 | Conflito, como a mesma Idempotency-Key com outro conteúdo. |
422 | O WhatsApp ou uma regra do serviço recusou. |
429 | Limite de envio (rate_limited) ou fila cheia (queue_full); espere o Retry-After. |
501 | O WhatsApp Web não oferece o recurso (not_supported_by_engine). Não adianta repetir. |
502 | Resultado incerto: confira o estado antes de repetir. |
503 | Número desconectado ou serviço indisponível; tente mais tarde. |
504 | A operação venceu sem ser executada; pode repetir. |
Áreas de trabalho e operações
Uma organização tem áreas de trabalho, e cada área tem números. Rotas que dependem do WhatsApp podem responder 202; o resultado fica em /v1/operations/{id}.
- GET
/v1 /workspaces Listar áreas de trabalho
- GET
/v1 /workspaces /{workspaceId} Ler uma área de trabalho
- GET
/v1 /operations /{id} Consultar uma operação
Exemplo: Listar áreas de trabalho
curl https://api.flowbridge.com.br/v1/workspaces \
-H "Authorization: Bearer $FLOWBRIDGE_KEY"{
"data": [
{
"id": "8d3f2a61-4b7e-4c1a-9f0d-2e6b5c4a7d10",
"organization_id": "5b0c9e7a-2f41-4d8b-a6c3-7e1f0d9b4a25",
"name": "Atendimento"
}
]
}Números
Crie o número, reserve a vaga, leia o QR code e conecte pelo celular. Aqui também ficam a fila de envios, a pausa entre envios e o proxy próprio.
- POST
/v1 /workspaces /{workspaceId} /instances Criar número
- POST
{número}/reservations Reservar vaga para conectar
- GET
{número}/status Situação do número
- PATCH
{número}Renomear número
- DELETE
{número}Excluir número
- POST
{número}/connect Iniciar conexão por QR code
- GET
{número}/qr Ler o QR code de pareamento
- POST
{número}/disconnect Desconectar (sair do WhatsApp)
- POST
{número}/restart Reconectar a sessão
- GET
{número}/limits Limites de novas conversas
- GET
{número}/queue Ver a fila de envios
- DELETE
{número}/queue Cancelar envios na fila
- GET
{número}/settings /delay Ler intervalo entre envios
- PUT
{número}/settings /delay Definir intervalo entre envios
- GET
{número}/settings /signature Ler assinatura do atendente
- PUT
{número}/settings /signature Ligar ou desligar assinatura do atendente
- GET
{número}/proxy /managed Proxy gerenciado
- GET
{número}/proxy Ler proxy do número
- PUT
{número}/proxy Definir proxy do número
- DELETE
{número}/proxy Remover proxy
Exemplo: Ver a situação do número
curl https://api.flowbridge.com.br/v1/workspaces/$WORKSPACE/instances/$NUMERO/status \
-H "Authorization: Bearer $FLOWBRIDGE_KEY"{
"data": {
"id": "c41e9b27-6a3d-4f58-b0e2-91d7f3a5c8e4",
"name": "Vendas",
"state": "active",
"session_state": "connected",
"connected": true,
"phone_masked": "+55 11 9****-5678",
"worker_alive": true,
"lease_until": "2026-10-01T12:00:30.000Z",
"reservation_state": "occupied",
"reservation_expires_at": null,
"created_at": "2026-09-28T14:03:11.000Z"
}
}Mensagens e mídia
Um único endpoint envia todos os tipos: texto, imagem, vídeo, áudio, documento, figurinha, localização, contato, reação, enquete, botões, lista, edição, apagar e status. Mídia pode ir por upload, base64 ou link https.
- POST
{número}/messages Enviar mensagem
- GET
/v1 /messages /{id} Consultar um envio
- POST
{número}/media Enviar arquivo de mídia (upload)
- GET
{número}/media /{id} Ler dados de uma mídia
- GET
{número}/media /{id} /content Baixar uma mídia enviada
- DELETE
{número}/media /{id} Apagar uma mídia
- GET
{número}/inbound /{inboxId} /media Baixar mídia recebida
Exemplo: Enviar uma imagem já carregada
# 1. Envie o arquivo (corpo binário, até 16 MiB)
curl -X POST "https://api.flowbridge.com.br/v1/workspaces/$WORKSPACE/instances/$NUMERO/media?kind=image" \
-H "Authorization: Bearer $FLOWBRIDGE_KEY" \
-H "Content-Type: image/jpeg" \
--data-binary @cardapio.jpg
# 2. Envie a mensagem com o id devolvido
curl -X POST https://api.flowbridge.com.br/v1/workspaces/$WORKSPACE/instances/$NUMERO/messages \
-H "Authorization: Bearer $FLOWBRIDGE_KEY" \
-H "Idempotency-Key: cardapio-cliente-4821" \
-H "Content-Type: application/json" \
-d '{
"to": { "kind": "phone", "value": "+5511912345678" },
"type": "image",
"media": { "id": "3f9d0c52-8e1b-4a7f-b6d4-0c2e9a1f5b73" },
"caption": "Cardápio de hoje",
"expires_at": "2026-10-01T18:00:00Z"
}'{
"data": {
"id": "e7a1c3d9-0b4f-4e62-9a85-1d3c7b2f6e04",
"state": "queued",
"provider_message_id": "3EB0A1B2C3D4E5F6071829",
"client_reference": null,
"expires_at": "2026-10-01T18:00:00.000Z",
"created_at": "2026-10-01T12:00:00.000Z"
}
}Conversas e etiquetas
A leitura usa o histórico guardado pelo FlowBridge (as 2000 mensagens mais recentes de cada origem). As ações (arquivar, fixar, silenciar, etiquetar) são feitas no WhatsApp do número.
- GET
{número}/chats Listar conversas
- GET
{número}/chats /count Contar conversas
- GET
{número}/chats /{jid} /messages Mensagens de uma conversa
- GET
{número}/messages /search Buscar mensagens por texto
- POST
{número}/chats /{jid} /archive Arquivar ou desarquivar
- POST
{número}/chats /{jid} /read Marcar conversa como lida ou não lida
- POST
{número}/chats /{jid} /pin Fixar ou desafixar conversa
- POST
{número}/chats /{jid} /mute Silenciar conversa
- DELETE
{número}/chats /{jid} Apagar conversa no WhatsApp
- POST
{número}/chats /{jid} /ephemeral Mensagens temporárias da conversa
- POST
{número}/chats /{jid} /history-sync Pedir mensagens antigas ao celular
- POST
{número}/messages /read Marcar mensagens como lidas
- POST
{número}/messages /{messageId} /star Favoritar mensagem
- POST
{número}/messages /{messageId} /pin Fixar mensagem na conversa
- GET
{número}/labels Listar etiquetas do WhatsApp
- POST
{número}/labels Criar ou editar etiqueta
- DELETE
{número}/labels /{labelId} Apagar etiqueta
- POST
{número}/labels /refresh Sincronizar etiquetas com o celular
- GET
{número}/chats /{jid} /labels Etiquetas de uma conversa
- POST
{número}/chats /{jid} /labels Aplicar ou tirar etiqueta da conversa
Exemplo: Listar a conversa mais recente
curl "https://api.flowbridge.com.br/v1/workspaces/$WORKSPACE/instances/$NUMERO/chats?limit=1" \
-H "Authorization: Bearer $FLOWBRIDGE_KEY"{
"data": [
{
"jid": "5511912345678@s.whatsapp.net",
"alt_jid": null,
"is_group": false,
"name": "Mariana Souza",
"last_message": {
"id": "3A5F09C2B1E4D7A8C6F0",
"direction": "in",
"kind": "text",
"text": "Vocês abrem no sábado?",
"timestamp": "2026-10-01T11:58:02.000Z"
},
"inbound_count": 4,
"outbound_count": 3,
"unread_count": 1,
"last_activity_at": "2026-10-01T11:58:02.000Z"
}
],
"next_cursor": "WyIyMDI2LTEwLTAxVDExOjU4OjAyLjAwMFoiLCI1NTExOTEyMzQ1Njc4QHMud2hhdHNhcHAubmV0Il0",
"window": { "rows_per_source": 2000, "truncated": false, "skipped": 0 }
}Grupos e comunidades
Criar e administrar grupos e comunidades. Cada rota é executada pelo número conectado e responde com o resultado do WhatsApp.
- POST
{número}/groups Criar grupo
- GET
{número}/groups Listar grupos do número
- POST
{número}/groups /join Entrar em grupo por convite
- GET
{número}/groups /invites /{code} Ver grupo pelo convite
- GET
{número}/groups /{jid} Dados do grupo e participantes
- GET
{número}/groups /{jid} /invite-link Link de convite
- POST
{número}/groups /{jid} /invite-link /reset Gerar novo link de convite
- POST
{número}/groups /{jid} /leave Sair do grupo
- PUT
{número}/groups /{jid} /name Renomear grupo
- PUT
{número}/groups /{jid} /description Alterar descrição do grupo
- PUT
{número}/groups /{jid} /announce Só administradores enviam
- PUT
{número}/groups /{jid} /locked Só administradores editam o grupo
- PUT
{número}/groups /{jid} /join-approval Aprovar entrada pelo link
- PUT
{número}/groups /{jid} /member-add-mode Quem pode adicionar membros
- PUT
{número}/groups /{jid} /ephemeral Mensagens temporárias do grupo
- PUT
{número}/groups /{jid} /image Trocar foto do grupo
- POST
{número}/groups /{jid} /participants Adicionar, remover, promover ou rebaixar
- GET
{número}/groups /{jid} /requests Pedidos de entrada pendentes
- POST
{número}/groups /{jid} /requests Aprovar ou recusar pedidos de entrada
- POST
{número}/communities Criar comunidade
- GET
{número}/communities /{jid} /groups Grupos de uma comunidade
- POST
{número}/communities /{jid} /groups Vincular ou desvincular grupos
Exemplo: Criar um grupo
curl -X POST https://api.flowbridge.com.br/v1/workspaces/$WORKSPACE/instances/$NUMERO/groups \
-H "Authorization: Bearer $FLOWBRIDGE_KEY" \
-H "Idempotency-Key: grupo-clientes-vip" \
-H "Content-Type: application/json" \
-d '{ "name": "Clientes VIP", "participants": ["+5511912345678"] }'{
"data": {
"jid": "120363025246125888@g.us",
"name": "Clientes VIP",
"topic": "",
"owner": "5511955554444@s.whatsapp.net",
"owner_phone": "+5511955554444",
"created_at": "2026-10-01T12:00:00Z",
"participant_count": 2,
"announce": false,
"locked": false,
"join_approval": false,
"member_add_mode": "admins",
"ephemeral_seconds": 0,
"is_community": false,
"parent_jid": null,
"is_default_subgroup": false,
"suspended": false,
"participants": [
{
"jid": "5511955554444@s.whatsapp.net",
"phone": "+5511955554444",
"is_admin": true,
"is_super_admin": true
},
{
"jid": "5511912345678@s.whatsapp.net",
"phone": "+5511912345678",
"is_admin": false,
"is_super_admin": false
}
]
}
}Contatos e perfil
Verifique quem tem WhatsApp, leia contatos e fotos, bloqueie, recuse chamadas e ajuste perfil, privacidade e presença do número.
- GET
{número}/contacts Listar contatos da agenda
- POST
{número}/contacts /check Verificar se telefones têm WhatsApp
- POST
{número}/contacts Adicionar contato à agenda
- DELETE
{número}/contacts /{jid} Remover contato da agenda
- GET
{número}/contacts /{jid} Dados de um contato
- GET
{número}/contacts /{jid} /avatar Foto de perfil de um contato
- POST
{número}/contacts /{jid} /block Bloquear ou desbloquear
- GET
{número}/blocklist Lista de bloqueados
- POST
{número}/calls /{callId} /reject Recusar chamada recebida
- POST
{número}/calls Fazer chamada
- GET
{número}/profile Perfil do próprio número
- PUT
{número}/profile /name Alterar nome de exibição
- PUT
{número}/profile /status Alterar recado (sobre)
- PUT
{número}/profile /image Trocar foto de perfil
- GET
{número}/privacy Ler configurações de privacidade
- PUT
{número}/privacy Alterar uma configuração de privacidade
- POST
{número}/presence Ficar online ou offline
- POST
{número}/presence /chat Mostrar digitando ou gravando
- POST
{número}/presence /subscribe Acompanhar presença de um contato
Exemplo: Verificar quem tem WhatsApp
curl -X POST https://api.flowbridge.com.br/v1/workspaces/$WORKSPACE/instances/$NUMERO/contacts/check \
-H "Authorization: Bearer $FLOWBRIDGE_KEY" \
-H "Content-Type: application/json" \
-d '{ "phones": ["+5511912345678", "+5511900000000"] }'{
"data": {
"items": [
{
"phone": "+5511912345678",
"exists": true,
"jid": "5511912345678@s.whatsapp.net",
"lid": null,
"verified_name": null
},
{
"phone": "+5511900000000",
"exists": false,
"jid": null,
"lid": null,
"verified_name": null
}
]
}
}Canais
Canais (newsletters) do WhatsApp: seguir, ler, reagir, criar e publicar texto. Pesquisa pública e administração de canais não existem no WhatsApp Web.
- GET
{número}/newsletters /search Pesquisar canais públicos
- POST
{número}/newsletters /{jid} /admins Convidar administrador do canal
- POST
{número}/newsletters Criar canal
- GET
{número}/newsletters Canais que o número segue
- GET
{número}/newsletters /invites /{code} Ver canal pelo convite
- GET
{número}/newsletters /{jid} Dados do canal
- GET
{número}/newsletters /{jid} /messages Publicações do canal
- GET
{número}/newsletters /{jid} /updates Novidades (visualizações e reações)
- POST
{número}/newsletters /{jid} /follow Seguir ou deixar de seguir
- POST
{número}/newsletters /{jid} /mute Silenciar canal
- POST
{número}/newsletters /{jid} /viewed Marcar publicações como vistas
- POST
{número}/newsletters /{jid} /reaction Reagir a uma publicação
- POST
{número}/newsletters /{jid} /live Receber novidades ao vivo
- POST
{número}/newsletters /{jid} /posts Publicar texto no canal
- PUT
{número}/newsletters /{jid} /posts /{serverId} Editar publicação
- DELETE
{número}/newsletters /{jid} /posts /{serverId} Apagar publicação
Exemplo: Publicar texto num canal seu
curl -X POST https://api.flowbridge.com.br/v1/workspaces/$WORKSPACE/instances/$NUMERO/newsletters/120363144038483540@newsletter/posts \
-H "Authorization: Bearer $FLOWBRIDGE_KEY" \
-H "Idempotency-Key: canal-promo-sexta" \
-H "Content-Type: application/json" \
-d '{ "text": "Sexta tem frete grátis para todo o Brasil." }'{
"data": {
"jid": "120363144038483540@newsletter",
"id": "3EB0B7C2D9E4F1A6038571",
"server_id": 128,
"timestamp": "2026-10-01T12:00:01Z"
}
}Perfil comercial
Leitura do perfil comercial do número ou de um contato. Catálogo e edição do perfil não existem no WhatsApp Web: as rotas respondem 501.
- PUT
{número}/business /profile Editar perfil comercial
- GET
{número}/business /catalog Listar catálogo
- POST
{número}/business /catalog Criar produto
- GET
{número}/business /catalog /{productId} Ler produto
- PUT
{número}/business /catalog /{productId} Editar produto
- DELETE
{número}/business /catalog /{productId} Apagar produto
- GET
{número}/business /profile Perfil comercial do próprio número
- GET
{número}/business /profile /{jid} Perfil comercial de um contato
Exemplo: Ler o perfil comercial de um contato
curl https://api.flowbridge.com.br/v1/workspaces/$WORKSPACE/instances/$NUMERO/business/profile/5511955554444@s.whatsapp.net \
-H "Authorization: Bearer $FLOWBRIDGE_KEY"{
"data": {
"jid": "5511955554444@s.whatsapp.net",
"address": "Rua das Flores, 100 — São Paulo",
"email": "contato@loja.example",
"categories": [{ "id": "1001", "name": "Loja de roupas" }],
"profile_options": {},
"business_hours": null
}
}Eventos, webhooks e SSE
Três formas de acompanhar o que acontece: webhook assinado, fluxo SSE ou leitura em ordem por número. Os avisos trazem só o tipo e os IDs; o conteúdo é lido pela API.
- GET
/v1 /events /stream Receber eventos ao vivo (SSE)
- GET
/v1 /events /{id} Ler um evento do motor
- GET
{número}/events Eventos de um número, em ordem
- GET
{número}/inbound Mensagens recebidas
- GET
{número}/inbound /{id} Ler uma mensagem recebida
- POST
/v1 /webhook-endpoints Cadastrar endereço de webhook
- GET
/v1 /webhook-endpoints Listar endereços de webhook
- DELETE
/v1 /webhook-endpoints /{id} Remover endereço de webhook
- GET
/v1 /webhook-deliveries Histórico de entregas de webhook
Exemplo: Conferir a assinatura de um webhook (Node.js)
import { createHmac, timingSafeEqual } from "node:crypto";
// raw: corpo exato recebido (Buffer); secret: o "secret" do cadastro
export function assinaturaValida(headers, raw, secret) {
const timestamp = headers["x-flow-timestamp"];
const eventId = headers["x-flow-event-id"];
const [versao, , hex] = String(headers["x-flow-signature"]).split(":");
const idade = Math.abs(Date.now() / 1000 - Number(timestamp));
if (versao !== "v1" || !(idade <= 300)) return false;
const esperado = createHmac("sha256", Buffer.from(secret, "base64url"))
.update(`${timestamp}.${eventId}.`)
.update(raw)
.digest();
const recebido = Buffer.from(hex ?? "", "hex");
return (
recebido.length === esperado.length && timingSafeEqual(recebido, esperado)
);
}{
"event_id": "4c2b8e1f-7a93-4d05-b6e8-2f1a0c9d3b57",
"schema_version": "1.0",
"type": "message.received",
"occurred_at": "2026-10-01T12:00:00.000Z",
"organization_id": "5b0c9e7a-2f41-4d8b-a6c3-7e1f0d9b4a25",
"workspace_id": "8d3f2a61-4b7e-4c1a-9f0d-2e6b5c4a7d10",
"instance_id": "c41e9b27-6a3d-4f58-b0e2-91d7f3a5c8e4",
"sequence": 42,
"data": { "resource_id": "9e3d7c1a-5b2f-4e80-a4c6-0d8b1f2e7a39" }
}CRM e respostas rápidas
Leads por número, com consentimento registrado (data e origem), etiquetas de lead, anotações e respostas rápidas. São dados do FlowBridge, cifrados, e não mudam nada no WhatsApp.
- GET
{número}/crm /leads Listar leads
- GET
{número}/crm /leads /{contact} Ler um lead
- PUT
{número}/crm /leads /{contact} Criar ou atualizar lead
- DELETE
{número}/crm /leads /{contact} Apagar lead
- POST
{número}/crm /leads /{contact} /opt-out Registrar saída da lista (opt-out)
- GET
{número}/crm /leads /{contact} /notes Anotações do lead
- POST
{número}/crm /leads /{contact} /notes Criar anotação
- DELETE
{número}/crm /notes /{id} Apagar anotação
- GET
{número}/crm /tags Listar etiquetas de lead
- POST
{número}/crm /tags Criar etiqueta de lead
- DELETE
{número}/crm /tags /{id} Apagar etiqueta de lead
- GET
{número}/quick-replies Listar respostas rápidas
- POST
{número}/quick-replies Criar resposta rápida
- PUT
{número}/quick-replies /{id} Editar resposta rápida
- DELETE
{número}/quick-replies /{id} Apagar resposta rápida
Exemplo: Registrar um lead com consentimento
curl -X PUT https://api.flowbridge.com.br/v1/workspaces/$WORKSPACE/instances/$NUMERO/crm/leads/%2B5511912345678 \
-H "Authorization: Bearer $FLOWBRIDGE_KEY" \
-H "Content-Type: application/json" \
-d '{
"name": "Mariana Souza",
"status": "cliente",
"opted_in": { "at": "2026-09-30T15:20:00Z", "source": "formulário do site" }
}'{
"data": {
"id": "a6f0d2c4-91b3-4e7a-8c15-3d9e2b7f0a61",
"contact": "+5511912345678",
"name": "Mariana Souza",
"status": "cliente",
"assigned_user_id": null,
"tags": [],
"fields": {},
"opted_in": { "at": "2026-09-30T15:20:00.000Z", "source": "formulário do site" },
"opted_out_at": null,
"consented": true,
"created_at": "2026-10-01T12:00:00.000Z",
"updated_at": "2026-10-01T12:00:00.000Z"
}
}Campanhas
Envio em massa só para quem deu consentimento, com pausa aleatória entre envios, horário comercial opcional, pausar, retomar e cancelar.
- POST
{número}/campaigns Criar campanha
- GET
{número}/campaigns Listar campanhas
- GET
{número}/campaigns /{id} Ler campanha e contagens
- GET
{número}/campaigns /{id} /recipients Destinatários e resultado
- POST
{número}/campaigns /{id} /pause Pausar campanha
- POST
{número}/campaigns /{id} /resume Retomar campanha
- POST
{número}/campaigns /{id} /cancel Cancelar campanha
Exemplo: Agendar uma campanha para uma etiqueta de leads
curl -X POST https://api.flowbridge.com.br/v1/workspaces/$WORKSPACE/instances/$NUMERO/campaigns \
-H "Authorization: Bearer $FLOWBRIDGE_KEY" \
-H "Idempotency-Key: campanha-reabertura-outubro" \
-H "Content-Type: application/json" \
-d '{
"name": "Aviso de reabertura",
"message": { "type": "text", "text": { "body": "Reabrimos no sábado, das 9h às 18h." } },
"recipients": { "tag_id": "d1b7e4a2-6c30-4f9e-8a51-2e7c0b9d4f36" },
"scheduled_at": "2026-10-02T12:00:00Z",
"respect_business_hours": true
}'{
"data": {
"id": "f2c8a0e6-3d71-4b95-9e24-7a1c5d0b8e43",
"name": "Aviso de reabertura",
"message_type": "text",
"state": "scheduled",
"pause_reason": null,
"scheduled_at": "2026-10-02T12:00:00.000Z",
"next_send_at": "2026-10-02T12:00:00.000Z",
"delay_ms": { "min": 5000, "max": 15000 },
"respect_business_hours": true,
"total_recipients": 120,
"skipped_unconsented": 0,
"created_at": "2026-10-01T12:00:00.000Z",
"started_at": null,
"finished_at": null
}
}Chatwoot, n8n e Make
O Chatwoot se liga por número: as mensagens chegam na caixa de entrada e as respostas dos atendentes saem pelo WhatsApp. n8n e Make usam os webhooks e a API: recebem o aviso, conferem a assinatura, buscam a mensagem e respondem.
- GET
{número}/chatwoot Ler integração com o Chatwoot
- PUT
{número}/chatwoot Ligar ou alterar integração com o Chatwoot
- DELETE
{número}/chatwoot Remover integração com o Chatwoot
- POST
/v1 /chatwoot /hooks /{token} Webhook chamado pelo Chatwoot
Exemplo: Ligar o Chatwoot a um número
curl -X PUT https://api.flowbridge.com.br/v1/workspaces/$WORKSPACE/instances/$NUMERO/chatwoot \
-H "Authorization: Bearer $FLOWBRIDGE_KEY" \
-H "Content-Type: application/json" \
-d '{
"url": "https://chatwoot.suaempresa.com.br",
"account_id": 1,
"inbox_id": 7,
"api_access_token": "<token de acesso do Chatwoot>",
"enabled": true
}'{
"data": {
"instance_id": "c41e9b27-6a3d-4f58-b0e2-91d7f3a5c8e4",
"url": "https://chatwoot.suaempresa.com.br",
"account_id": 1,
"inbox_id": 7,
"api_access_token": "****x9Qa",
"enabled": true,
"sign_messages": false,
"reopen_conversation": true,
"ignore_groups": true,
"webhook_url": "https://api.flowbridge.com.br/v1/chatwoot/hooks/<token>",
"last_error_code": null,
"last_error_at": null,
"created_at": "2026-10-01T12:00:00.000Z",
"updated_at": "2026-10-01T12:00:00.000Z"
}
}