Ler fluxos
Lista os fluxos de conversa do bot de WhatsApp, lê um fluxo e confere a estrutura dele.
Um fluxo é um roteiro de conversa: o bot recebe a mensagem do cliente, segue de bloco em bloco e responde. Estas rotas leem os fluxos da loja e conferem se a estrutura está certa.
Listar fluxos
Devolve os fluxos da loja, do mais novo ao mais antigo. Fluxos apagados não aparecem.
/api/v1/admin/whatsapp/flowsAdminLista os fluxos de conversa do bot
Parâmetros de consulta
vendor_iduuidFiltra por seller.
statusstringdraftactiveinactivearchivedFiltra por estado. Aceita a palavra ou a letra.
channelstringFiltra por canal.
searchstringTrecho a procurar no nome e na descrição.
limitintegerpadrão: 50Itens por página. Sem teto máximo.
offsetintegerpadrão: 0Quantos itens pular.
Exemplo de requisição (Listar fluxos)
bash
curl "$BASE_URL/api/v1/admin/whatsapp/flows?status=active&limit=20" \
-H "Authorization: Bearer $TOKEN"Resposta (Listar fluxos)
200Fluxos devolvidos
json
{
"flows": [
{
"id": "fa4b0c91-2883-43c6-94ef-86e5b540a2aa",
"vendor_id": "9d9d9d56-eb43-4719-889d-055632f7c7da",
"name": "Boas-vindas",
"description": "Recebe o cliente novo e mostra o menu.",
"start_block_id": "5cf73b43-5e23-480c-8037-7a7385251a22",
"status": "A",
"channel": "whatsapp",
"metadata": {},
"trigger_type": "keyword",
"trigger_keywords": [
"oi"
],
"trigger_match_mode": "contains",
"trigger_case_sensitive": false,
"trigger_priority": 0,
"created_at": "2026-05-07T06:53:05.104529Z",
"updated_at": "2026-07-21T15:42:56.298575Z"
}
],
"limit": 20,
"offset": 0
}Campos da resposta
flowsarrayFluxos da página.
iduuidIdentificador do fluxo.
vendor_iduuidSeller dono do fluxo. Ausente quando o fluxo é da loja toda.
namestringNome do fluxo.
descriptionstringDescrição livre. Ausente quando vazia.
start_block_iduuidBloco por onde o fluxo começa. Ausente enquanto não definido: sem ele o fluxo não roda.
statusstringdraftactiveinactivearchivedEstado do fluxo, como está gravado: pode vir como letra (
A ativo, P inativo, R rascunho, H arquivado) ou como palavra (active, inactive, draft, archived), conforme a loja. Ao escrever, envie sempre a palavra.channelstringCanal. Hoje sempre
whatsapp.modestringTexto livre opcional guardado com o fluxo. Ausente quando vazio.
metadataobjectObjeto JSON livre para uso do integrador.
{} quando vazio.trigger_typestringmanualkeywordinbound_defaultO que dispara o fluxo.
trigger_keywordsarrayPalavras-chave do gatilho
keyword. Lista vazia quando não há.trigger_match_modestringexactstarts_withcontainsregexComo comparar a mensagem com as palavras-chave.
trigger_case_sensitivebooleantrue distingue maiúsculas de minúsculas (não vale para regex).trigger_priorityintegerDesempate entre fluxos que casam: o maior valor vence.
created_atstringCriação (RFC 3339, UTC).
updated_atstringÚltima alteração (RFC 3339, UTC).
limitintegerLimite aplicado.
offsetintegerDeslocamento aplicado.
Erros (Listar fluxos)
| Status | Quando | Corpo |
|---|---|---|
| 401 | Sem token, token inválido ou expirado. | {"error":"missing authorization header"} |
| 403 | O módulo WhatsApp Commerce está desligado na loja, o usuário não é administrador ou não tem o privilégio exigido. | {"error":"module_disabled","module":"whatsapp-commerce"} ou {"error":"insufficient privileges","required":"manage_settings"} ou {"error":"admin access required"} |
| 500 | Falha ao consultar. | {"error":"Failed to list flows: ..."} |
Ver um fluxo
Devolve só os dados do fluxo. Os blocos e as ligações têm rotas próprias.
/api/v1/admin/whatsapp/flows/{id}AdminLê um fluxo
Parâmetros de caminho
iduuidobrigatórioId do fluxo.
Exemplo de requisição (Ver um fluxo)
bash
curl "$BASE_URL/api/v1/admin/whatsapp/flows/fa4b0c91-2883-43c6-94ef-86e5b540a2aa" \
-H "Authorization: Bearer $TOKEN"Resposta (Ver um fluxo)
200Fluxo devolvido
json
{
"id": "fa4b0c91-2883-43c6-94ef-86e5b540a2aa",
"vendor_id": "9d9d9d56-eb43-4719-889d-055632f7c7da",
"name": "Boas-vindas",
"description": "Recebe o cliente novo e mostra o menu.",
"start_block_id": "5cf73b43-5e23-480c-8037-7a7385251a22",
"status": "A",
"channel": "whatsapp",
"metadata": {},
"trigger_type": "keyword",
"trigger_keywords": [
"oi"
],
"trigger_match_mode": "contains",
"trigger_case_sensitive": false,
"trigger_priority": 0,
"created_at": "2026-05-07T06:53:05.104529Z",
"updated_at": "2026-07-21T15:42:56.298575Z"
}Campos da resposta
iduuidIdentificador do fluxo.
vendor_iduuidSeller dono do fluxo. Ausente quando o fluxo é da loja toda.
namestringNome do fluxo.
descriptionstringDescrição livre. Ausente quando vazia.
start_block_iduuidBloco por onde o fluxo começa. Ausente enquanto não definido: sem ele o fluxo não roda.
statusstringdraftactiveinactivearchivedEstado do fluxo, como está gravado: pode vir como letra (
A ativo, P inativo, R rascunho, H arquivado) ou como palavra (active, inactive, draft, archived), conforme a loja. Ao escrever, envie sempre a palavra.channelstringCanal. Hoje sempre
whatsapp.modestringTexto livre opcional guardado com o fluxo. Ausente quando vazio.
metadataobjectObjeto JSON livre para uso do integrador.
{} quando vazio.trigger_typestringmanualkeywordinbound_defaultO que dispara o fluxo.
trigger_keywordsarrayPalavras-chave do gatilho
keyword. Lista vazia quando não há.trigger_match_modestringexactstarts_withcontainsregexComo comparar a mensagem com as palavras-chave.
trigger_case_sensitivebooleantrue distingue maiúsculas de minúsculas (não vale para regex).trigger_priorityintegerDesempate entre fluxos que casam: o maior valor vence.
created_atstringCriação (RFC 3339, UTC).
updated_atstringÚltima alteração (RFC 3339, UTC).
Erros (Ver um fluxo)
| Status | Quando | Corpo |
|---|---|---|
| 401 | Sem token, token inválido ou expirado. | {"error":"missing authorization header"} |
| 403 | O módulo WhatsApp Commerce está desligado na loja, o usuário não é administrador ou não tem o privilégio exigido. | {"error":"module_disabled","module":"whatsapp-commerce"} ou {"error":"insufficient privileges","required":"manage_settings"} ou {"error":"admin access required"} |
| 404 | Fluxo não encontrado (ou de outro seller, para administrador restrito a um seller). | {"error":"Flow not found"} |
| 500 | O id não é um UUID válido (a plataforma devolve 500 em vez de 400). | {"error":"Failed to load flow: whatsapp/flows: query flow: pq: invalid input syntax for type uuid: \"xyz\" (22P02)"} |
Conferir um fluxo
Percorre o grafo do fluxo e aponta erros de forma (sem entrada, bloco solto, ligação duplicada). Não altera nada. Rode antes de ativar.
/api/v1/admin/whatsapp/flows/{id}/validateAdminConfere a estrutura de um fluxo
Parâmetros de caminho
iduuidobrigatórioId do fluxo.
Exemplo de requisição (Conferir um fluxo)
bash
curl "$BASE_URL/api/v1/admin/whatsapp/flows/fa4b0c91-2883-43c6-94ef-86e5b540a2aa/validate" \
-H "Authorization: Bearer $TOKEN"Resposta (Conferir um fluxo)
200Com problemas
json
{
"flow_id": "fa4b0c91-2883-43c6-94ef-86e5b540a2aa",
"issues": [
{
"code": "no_entry",
"message": "flow has blocks but no start_block_id is set"
},
{
"code": "orphan_block",
"block_id": "b8c1057a-d5b6-448f-af73-31734882b110",
"message": "block has no inbound connections and is not the entry block"
}
],
"valid": false
}200Sem problemas
json
{
"flow_id": "fa4b0c91-2883-43c6-94ef-86e5b540a2aa",
"issues": [],
"valid": true
}Campos da resposta
flow_iduuidO fluxo conferido.
validbooleantrue quando issues está vazia.issuesarrayProblemas achados.
codestringno_entrystart_block_not_in_floworphan_blockdangling_outboundduplicate_edgeself_loopunknown_block_refTipo do problema.
block_iduuidBloco envolvido, quando há.
edge_iduuidLigação envolvida, quando há.
messagestringExplicação em inglês.
Erros (Conferir um fluxo)
| Status | Quando | Corpo |
|---|---|---|
| 400 | Outra falha ao conferir (inclusive id que não é UUID). | {"error":"whatsapp/flows: ..."} |
| 401 | Sem token, token inválido ou expirado. | {"error":"missing authorization header"} |
| 403 | O módulo WhatsApp Commerce está desligado na loja, o usuário não é administrador ou não tem o privilégio exigido. | {"error":"module_disabled","module":"whatsapp-commerce"} ou {"error":"insufficient privileges","required":"manage_settings"} ou {"error":"admin access required"} |
| 404 | Fluxo não encontrado. | {"error":"flow not found"} |