Feito para pessoas e agentes de IA
Cada página aqui é legível por humanos — guias por tarefa e conceitos — apoiada por um contrato OpenAPI completo. A mesma referência vem em um cookbook aberto que você clona no seu projeto em segundos.
Trabalhando com um agente de IA? Clone o cookbook
RecomendadoAponte seu agente para o PLAYBOOK.md — um guia passo a passo para a referência da API e exemplos prontos, para ele ler só o necessário em cada etapa.
Ver o cookbook no GitHubPrefere colar como contexto? Baixe a documentação completa em um único arquivo Markdown, ou pegue só a spec.
Todas as requisições à API exigem uma chave de API no header X-API-Key.
Crie uma chave na página API Keys do portal. A chave completa é exibida apenas uma vez — guarde-a com segurança. Chaves perdidas não podem ser recuperadas; revogue e crie uma nova.
curl https://fiwano.com/api/v1/channels \
-H "X-API-Key: YOUR_API_KEY"
Todas as chaves começam com mip_live_. As chaves são armazenadas como hash do nosso lado.
Toda resposta de erro tem um campo detail. A maioria dos erros de domínio usa uma descrição legível:
{ "detail": "Human-readable error description" }
A validação de esquema (422) usa uma lista de erros de campo. Alguns erros de
validação de domínio usam um objeto detail estruturado com um campo code — por
exemplo text_too_long ao enviar um texto longo demais, invalid_recipient (400)
quando recipient está vazio, não contém dígitos ou não é um PSID/IGSID numérico em
um canal do Messenger/Instagram (reason indica qual; hint diz o que enviar no
lugar), ou recipient_equals_sender (400) quando um envio de WhatsApp é endereçado
ao próprio número do canal. Os formatos por endpoint estão na
Referência da API.
| Código | Significado | O que fazer |
|---|---|---|
200 |
Sucesso | — |
201 |
Criado | — |
400 |
Requisição inválida | Verifique o campo detail |
401 |
Não autorizado | Verifique seu header X-API-Key |
402 |
Pagamento necessário | Período de teste encerrado ou assinatura inativa — veja Assinaturas e Cobrança |
404 |
Não encontrado | O recurso não existe ou pertence a outra conta |
422 |
Erro de validação | Verifique campos obrigatórios, tipos e restrições de campo em detail |
429 |
Limite de taxa excedido | Reduza o ritmo e tente novamente após Retry-After — veja limites de taxa |
502 |
Erro da API da Meta | Falha no upstream. Verifique detail. Tentar novamente pode ajudar. |
503 |
Sobrecarregado temporariamente | Descarte de carga transitório. Tente novamente após Retry-After. |
Os três endpoints de envio respondem 200 mesmo quando o envio falha — o
resultado está em success, status e error_code. Veja
Entrega e novas tentativas.
error_code é o código de erro da Meta, repassado sem alteração. Ele só está
presente quando a falha veio da Meta; uma rejeição pelo próprio Fiwano usa um
código de status HTTP da tabela acima. error sempre traz uma descrição
legível e, em envios de mídia, uma dica sobre a causa provável.
error_code |
Significado | Nova tentativa pelo Fiwano | O que fazer |
|---|---|---|---|
10, 200 |
A Meta nega esta ação para a conta | não | Não é problema de token: o canal continua conectado e recebendo. Leia error (texto da própria Meta) e verifique a conta nas Configurações do Negócio da Meta |
10 com another app is controlling this thread |
Instagram/Messenger: outro app conectado controla a conversa | não | Defina o Fiwano como app de roteamento padrão ou desconecte o outro app — veja Pré-requisitos |
100 |
Parâmetro inválido — a Meta reutiliza este código para causas distintas, incluindo arquivo acima do limite de tamanho | não | Leia error para a causa específica; verifique media_url, media_type, formato do destinatário e o tamanho do arquivo |
190 |
Token de acesso expirado ou revogado | não | Reconecte o canal |
368 |
Conta temporariamente bloqueada por violação de políticas | não | Resolva no Meta Business Manager |
551 |
Messenger/Instagram: esta pessoa não pode receber mensagens agora — bloqueou a Página, encerrou a conversa, restringiu mensagens de empresas ou nunca escreveu para a Página | não | Nada a fazer do seu lado; só a pessoa pode reverter. Não reenvie automaticamente |
803 |
Objeto não existe ou está indisponível | não | Verifique o identificador do destinatário |
131008 |
Parâmetro obrigatório ausente | não | Corrija o payload |
131009 |
Valor de parâmetro inválido para este canal | não | Corrija o payload |
131026 |
Destinatário não acessível nesta plataforma | não | Verifique o destinatário |
131047 |
Janela de reengajamento de 24h fechada | não | Envie um modelo aprovado do WhatsApp — veja janelas de mensagens |
131051 |
Tipo de mensagem não suportado neste canal | não | Verifique as capacidades do canal |
131052 |
A Meta não conseguiu baixar a media_url |
não | Verifique se a URL retorna 200, se o Content-Type corresponde ao media_type e se a assinatura não expirou |
131053 |
A Meta não conseguiu processar a mídia | sim | Geralmente transitório; verifique formato e tamanho se persistir |
131056 |
Limite de taxa entre este remetente e destinatário | sim | Reduza o ritmo de mensagens para esse destinatário |
131057 |
Conta do WhatsApp Business em modo de manutenção (por exemplo, upgrade de throughput) | sim | Geralmente temporário; nenhuma ação |
Códigos fora desta tabela são repassados como a Meta os retorna. Tudo que não for reconhecido como permanente é tratado como transitório e repetido.
Ocasionalmente a Meta leva mais de 30 segundos — às vezes mais de um minuto —
para responder a um envio, na maioria das vezes enquanto baixa um arquivo de
mídia grande. O Fiwano não marca a mensagem como falha: a chamada retorna
success: true, status: "queued", e o message_id é definitivo. O Fiwano
então conclui o envio junto à Meta por você. O que você vê:
message.sent / message.delivered / message.read
para esse message_id, exatamente como para uma mensagem que retornou sent
de imediato.failed
e o dono do canal recebe o e-mail de resumo de entrega.Não reenvie do seu lado enquanto a mensagem estiver queued. O mesmo vale
se o seu próprio cliente HTTP atingir o timeout — veja
Tempo de resposta.
A Fiwano não tem números de versão. O contrato da API é o v1 (https://fiwano.com/api/v1), estável desde o lançamento público em março de 2026. O serviço é atualizado continuamente; os novos recursos aparecem no changelog (com feed Atom).
Toda mudança no v1 é aditiva:
O que não muda: endpoints existentes, nomes, tipos e significados dos campos; a autenticação por X-API-Key; o esquema de assinatura dos webhooks. Novos tipos de evento de webhook nunca são ativados nos seus canais sem uma ação sua — você faz opt-in por canal via webhook_events.
O que sua integração precisa fazer para continuar compatível: ignorar campos que não conhece e ignorar tipos de evento que não ativou. Não trate um campo desconhecido ou um novo valor em um conjunto aberto como erro.
Se uma mudança incompatível um dia for inevitável, ela sairá como uma nova versão da API ao lado do v1, anunciada no changelog e por e-mail com antecedência. O v1 continua funcionando.