URL base
https://api.flowella.io/v1/messages. Use-a mesmo quando a aplicação mostra um endereço terminado em /api/v1, como API base URL no Developer hub.
Os pedidos para o anfitrião da aplicação,
https://app.flowella.io/api/v1/..., são redirecionados permanentemente (308) para https://api.flowella.io/v1/.... Muitos clientes HTTP descartam o cabeçalho Authorization quando seguem um redirecionamento para outro anfitrião, por isso o pedido redirecionado pode falhar com 401. Chame diretamente https://api.flowella.io/v1.Autenticação
Envie um bearer token no cabeçalhoAuthorization de cada pedido:
Use uma chave de API para os seus próprios scripts e integrações. Use uma aplicação OAuth quando outras organizações Flowella instalam a sua integração.
Verificar as suas credenciais
Chame o endpoint ping para confirmar que uma chave ou token funciona:200 OK significa que está autenticado. organizationId é o ID numérico da sua organização:
401 tem o código UNAUTHORIZED e uma destas mensagens: Missing bearer token, Invalid or expired API key, Invalid or expired access token ou Unsupported bearer token.
Âmbitos
Cada endpoint precisa de um âmbito. As chaves de API criadas na aplicação têm todos os âmbitos. Os tokens de acesso OAuth têm apenas os âmbitos concedidos na autorização.GET /v1/ping e GET /v1/rate-limits não precisam de âmbito. GET /v1/capabilities (âmbito account:read) lista os âmbitos que o seu token tem.
Um pedido sem o âmbito necessário devolve 403 com o código INSUFFICIENT_SCOPE. details.required lista os âmbitos em falta:
Erros
Os erros usam o mesmo envelope.requestId identifica o pedido quando contacta o suporte, e details contém informação adicional, como problemas de validação, quando existe:
O valor
error.code é estável, por isso o seu código pode depender dele. O texto error.message destina-se a pessoas e pode mudar.
Limites de taxa
Cada chave de API e cada token de acesso OAuth tem o seu próprio limite de pedidos por minuto. O Flowella conta os pedidos em janelas fixas de um minuto que começam no início de cada minuto (UTC). As respostas a pedidos que passam as verificações de autenticação e de âmbito incluem estes cabeçalhos:
Quando ultrapassa o limite, o Flowella devolve
429 com o código RATE_LIMITED e um cabeçalho Retry-After com o número de segundos a aguardar. GET /v1/rate-limits devolve os seus valores limit, remaining e reset em JSON.
Para envios grandes, use POST /v1/templates/send, que aceita até 50.000 destinatários num único pedido. O pedido também aceita um campo opcional throttlePerHour, um número inteiro de 1 a 100.000, mas de momento não controla o ritmo dos envios, por isso não dependa dele. Para distribuir um envio grande ao longo do tempo, divida a lista de destinatários em lotes mais pequenos e envie cada lote separadamente.
IDs de pedido
As respostas incluem um cabeçalhoX-Request-Id, e os corpos de erro repetem-no como error.requestId. POST /v1/templates/send é a exceção: consulte Envios de modelos em massa. Para usar o seu próprio ID, envie um cabeçalho X-Request-Id com até 128 caracteres e o Flowella reutiliza-o.
Indique o ID do pedido quando contactar o suporte. Para consultar um pedido por si próprio, chame GET /v1/requests/{requestId} (âmbito account:read): devolve o pedido registado com os eventos, tarefas e entregas de webhook associados. O Developer hub lista os seus pedidos recentes e os respetivos IDs.
Idempotência
As chaves de idempotência permitem-lhe repetir um pedido de escrita após um tempo limite ou um erro de rede sem fazer o trabalho duas vezes.POST /v1/templates/send segue regras próprias, descritas abaixo.
A maioria dos pedidos de escrita
Os pedidosPOST, PATCH, PUT e DELETE aceitam um cabeçalho opcional Idempotency-Key:
- A chave tem de ter entre 8 e 255 caracteres. Outros comprimentos devolvem
400. - O Flowella memoriza cada chave da sua organização durante 24 horas.
- Uma repetição com a mesma chave, método, caminho e corpo devolve a resposta guardada sem executar novamente o pedido.
- Uma repetição com a mesma chave, mas um método, caminho ou corpo diferente, devolve
409 IDEMPOTENCY_KEY_CONFLICT. - Uma repetição enviada enquanto o primeiro pedido ainda está em execução devolve
409 IDEMPOTENCY_KEY_IN_FLIGHT. Aguarde e tente novamente. - As respostas repetem a chave num cabeçalho
Idempotency-Key.
Envios de modelos em massa
Os envios de modelos em massa são assíncronos.POST /v1/templates/send valida o pedido, coloca-o numa fila persistente e devolve imediatamente 202 Accepted:
Idempotency-Key que identifique cada lote:
- A chave pode ter até 200 caracteres. Uma chave mais longa devolve
400. - Uma repetição com a mesma chave dentro de 7 dias devolve o
idoriginal e não envia nada, mesmo que o corpo tenha mudado. - Sem o cabeçalho, o Flowella usa um hash do corpo do pedido como chave. Se voltar a enviar um corpo idêntico byte a byte dentro de 7 dias, recebe de volta o
idoriginal e nada é enviado. Use uma nova chave para cada lote que pretende enviar.
- Chame-o com uma chave de API. Os tokens de acesso OAuth são recusados com
401. - As suas respostas não incluem os cabeçalhos
X-Request-Id,API-VersionouX-RateLimit-*. Os seus pedidos continuam a contar para o limite de taxa da chave.
Versionamento
Pode fixar a versão da API com o cabeçalhoAPI-Version:
2026-08-11 é a única versão suportada e a predefinição quando omite o cabeçalho. Qualquer outro valor, ou um valor que não seja uma data YYYY-MM-DD, devolve 400 com a mensagem Unsupported API-Version. As respostas repetem a versão nos cabeçalhos API-Version e X-Flowella-Api-Version.
Sandbox
A sandbox permite-lhe testar uma integração sem enviar nada para o WhatsApp. Funciona na sua organização real: não existe uma conta de teste separada. Pode usá-la de duas formas:- Uma chave de sandbox, que afeta apenas os pedidos feitos com essa chave. Consulte Chaves de sandbox.
- A API sandbox ao nível da organização no Developer hub, que um Owner ou Admin pode ativar. Consulte API sandbox.
POST /v1/messages guarda a mensagem e devolve "sandbox": true sem contactar a Meta, e a submissão de modelos devolve uma decisão simulada instantânea. As ferramentas de teste da sandbox em /v1/test/ e /v1/sandbox precisam do âmbito sandbox:manage.
Paginação
Os endpoints de listagem, como/v1/conversations, /v1/contacts e /v1/templates, usam paginação por cursor:
- Passe
limit(1 a 100, predefinição 25) e umcursoropcional. - A resposta contém
itemse, quando há mais resultados, umnextCursor. - Passe
nextCursorde volta como parâmetrocursorpara obter a página seguinte. - Quando
nextCursorestá em falta ou énull, chegou ao fim.
Data e hora
Todos os carimbos de data/hora são strings ISO 8601 em UTC, por exemplo2025-01-15T14:30:00.000Z. Quando a API aceita datas, funcionam tanto valores só com data (2025-01-15) como valores ISO 8601 completos.
Números de telefone
Passe os números de telefone no formato E.164 (+15551234567) sempre que possível. O Flowella normaliza as variações comuns, mas o E.164 é o mais seguro.
Canais
Muitos endpoints aceitam umwhatsappChannelId. Se a sua organização tiver um único canal e o omitir, o Flowella usa o seu canal predefinido. Se tiver vários canais, passe o ID explicitamente para não enviar a partir do número errado.
Para o padrão de URL completo e a troca de canal, consulte Multicanal.
Especificação OpenAPI
A especificação em tempo real, legível por máquina, é pública:Recursos para programadores
A aplicação tem mais material para programadores. Estas páginas são públicas, por isso pode abri-las sem iniciar sessão:
O Developer hub em Settings reúne estes links com os seus pedidos de API recentes e o interruptor da API sandbox.

