Começando com a PliVant API
A PliVant API fornece uma camada REST simplificada, padronizada e de altíssimo desempenho para a Meta WhatsApp Business Cloud API. Todas as requisições autenticadas devem enviar o header Authorization: Bearer plv_live_.... A chave já nasce vinculada a um projeto: não envie X-Project-Id. Em todo envio, use também Idempotency-Key (UUID ou ID do pedido). Para conciliar com CRM, ERP ou automações, envie opcionalmente metadata (até 20 chaves) e tags (até 20). Esses campos voltam nos webhooks messages.status e não são enviados à Meta. A API devolve headers X-RateLimit-Limit, X-RateLimit-Remaining e X-RateLimit-Reset.
O número deve conter DDI + DDD + Telefone, somente números (ex: 5511999998888).
Dentro de 24h da última mensagem do cliente, qualquer texto livre e mídia podem ser enviados. Fora da janela, utilize templates.
Qual tela do painel eu uso?
Se você não quer ler documentação técnica, use este mapa. Clique na tarefa que quer fazer e vá direto para a tela certa.
Autorize a empresa e conecte o número oficial.
Faça: Conectar → login Meta → escolha empresa/WABA/número → confirme que ficou Conectado.
Defina qual número e quais chaves pertencem a cada projeto.
Faça: crie o projeto → vincule o número → depois gere as chaves que usarão esse projeto.
Gere a chave que n8n, Make, ERP ou seu sistema vai usar.
Faça: escolha projeto, scopes e números → gerar → copie a chave e guarde no sistema que vai integrar.
Crie, edite, sincronize, teste e exclua sem sair do Studio.
Novo: escolha WABA → monte → enviar → sincronizar. Existente: Abrir no Studio → editar → enviar atualização → sincronizar. Para remover: Excluir Meta.
Configure o atendimento automático sem precisar de n8n.
Faça: escolha o modelo do seu negócio → Cérebro → Conhecimento → Ferramentas → Rotinas → Regras → Testar → Ativar no número.
Abra o Inbox nativo para ver contatos, mídia, não lidas e responder como humano.
Faça: Conversas → escolha o contato → Assumir atendimento → responda por texto/áudio/arquivo → Devolver para IA quando quiser.
Leve as conversas para uma central de atendimento humano.
Faça: selecione o número → informe os dados pedidos pelo assistente → salve → use o teste da própria tela.
Autorize Codex, Claude, Cursor e outros clientes MCP.
Faça: copie o endpoint → autorize projeto, números e scopes → conecte no cliente MCP → revise autorizações quando quiser.
Use automação externa quando a lógica precisa ficar fora da PliVant.
Faça: escolha API/Automações → copie o exemplo ou workflow → coloque sua chave → conecte o webhook se precisar receber eventos.
Cadastre destinos, eventos e assinatura HMAC.
Faça: adicionar webhook → URL → escolher eventos → salvar → copie o segredo HMAC e valide no seu backend.
Faça um envio guiado antes de automatizar.
Faça: selecione o número → informe o destinatário → escolha o tipo → enviar → confirme o status nos Logs.
Consulte entrega, leitura, falhas e detalhes das mensagens.
Faça: filtre por número/status → abra a mensagem → veja erro Meta, timestamps e tentativas antes de alterar a automação.
Veja plano, capacidade, renovação e pagamentos.
Faça: confira números ativos e vencimento → renove ou adicione instâncias sem alterar os dias das atuais.
Envia uma mensagem de texto simples para um número de WhatsApp dentro da janela de 24 horas ou como resposta ativa.
curl -X POST https://api.plivant.com.br/v1/messages \
-H "Authorization: Bearer plv_live_sua_chave_aqui" \
-H "Idempotency-Key: pedido-123" \
-H "Content-Type: application/json" \
-d '{
"recipient": "5511999998888",
"type": "text",
"text": "Pedido confirmado.",
"metadata": { "order_id": "ord_123", "customer_id": "crm_42" },
"tags": ["ecommerce", "checkout"]
}'| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
| recipient | string | Sim | Número do destinatário com DDI + DDD (ex: 5511999998888). |
| type | string | Sim | Deve ser exatamente "text". |
| text | string | Sim | Conteúdo textual da mensagem (suporta emojis e até 4.096 caracteres). |
| phoneNumberId | string (UUID) | Opcional | ID do número específico. Obrigatório apenas se houver múltiplos números no mesmo projeto. |
{
"id": "c3f1a8e2-7b14-4d90-9c2a-1f6e8b0d4a21",
"status": "queued",
"recipient": "5511999998888",
"type": "text",
"metadata": {
"order_id": "ord_123",
"customer_id": "crm_42"
},
"tags": [
"ecommerce",
"checkout"
],
"created_at": "2026-09-20T01:30:00.000Z"
}O POST responde 202 com status: "queued" assim que a mensagem entra na fila. Use este GET (escopo messages:read) ou o webhook messages.status para sent, delivered, read ou failed.
curl https://api.plivant.com.br/v1/messages/<MESSAGE_ID> \
-H "Authorization: Bearer plv_live_SUA_CHAVE"Envie arquivos diretamente via URL pública HTTPS acessível pela Cloud API da Meta. O sistema realiza o download seguro e o repasse transparente para o cliente.
curl -X POST https://api.plivant.com.br/v1/messages \
-H "Authorization: Bearer plv_live_sua_chave_aqui" \
-H "Idempotency-Key: pedido-123" \
-H "Content-Type: application/json" \
-d '{
"recipient": "5511999998888",
"type": "image",
"mediaUrl": "https://meusite.com.br/uploads/recibo-pix.png",
"caption": "Segue o comprovante oficial de pagamento da sua fatura."
}'JPG, PNG, WebP
Máx. 16 MB
PDF, DOCX, XLSX
Máx. 100 MB
OGG (Opus), MP3
Máx. 16 MB
MP4 (H.264 + AAC)
Máx. 16 MB
Templates são obrigatórios para iniciar conversas ativas com clientes fora da janela de 24 horas (notificações de envio, alertas de segurança, cobranças Pix e recuperação de carrinho).
curl -X POST https://api.plivant.com.br/v1/messages \
-H "Authorization: Bearer plv_live_sua_chave_aqui" \
-H "Idempotency-Key: pedido-123" \
-H "Content-Type: application/json" \
-d '{
"recipient": "5511999998888",
"type": "template",
"templateName": "notificacao_pedido_v1",
"languageCode": "pt_BR",
"components": [
{
"type": "body",
"parameters": [
{ "type": "text", "text": "Carlos Alves" },
{ "type": "text", "text": "#4821" }
]
}
]
}'Aumente as taxas de conversão e simplifique o fluxo de atendimento com botões clicáveis (Quick Reply) e listas suspensas (List Messages).
curl -X POST https://api.plivant.com.br/v1/messages \
-H "Authorization: Bearer plv_live_sua_chave_aqui" \
-H "Idempotency-Key: pedido-123" \
-H "Content-Type: application/json" \
-d '{
"recipient": "5511999998888",
"type": "interactive_buttons",
"bodyText": "Deseja confirmar o agendamento da sua consulta para amanhã às 14h?",
"headerText": "Confirmação de Consulta",
"footerText": "Responda clicando em um dos botões abaixo",
"buttons": [
{ "id": "btn_sim", "title": "Confirmar Sim" },
{ "id": "btn_nao", "title": "Reagendar" },
{ "id": "btn_falar", "title": "Falar com Humano" }
]
}'6. Catálogo, Contato & Templates Avançados
A Send API também aceita mensagens comerciais de catálogo e solicitação de contato. No Template Studio, você cria de forma guiada Carousel de mídia ou produtos, SPM/MPM, cupom Copy Code, oferta por tempo limitado, Authentication Template com OTP/COPY_CODE e o botão oficial REQUEST_CONTACT_INFO.
Envia um produto do catálogo usando catalogId + productRetailerId.
Organiza produtos em seções e aceita até 30 itens no total.
Envia um catalog_message para o cliente navegar pelo catálogo no WhatsApp.
Solicita o compartilhamento do telefone e aceita destinatário E.164 ou BSUID.
Marca uma mensagem inbound como lida e pode iniciar o typing indicator oficial da Meta com showTypingIndicator.
curl -X POST https://api.plivant.com.br/v1/messages \
-H "Authorization: Bearer plv_live_sua_chave_aqui" \
-H "Idempotency-Key: produto-42" \
-H "Content-Type: application/json" \
-d '{
"recipient": "5511999998888",
"type": "interactive_product",
"catalogId": "catalog_123",
"productRetailerId": "sku_42",
"bodyText": "Confira este produto"
}'curl -X POST https://api.plivant.com.br/v1/messages \
-H "Authorization: Bearer plv_live_sua_chave_aqui" \
-H "Idempotency-Key: contato-lead-55" \
-H "Content-Type: application/json" \
-d '{
"recipient": "BR.2178496185888133",
"type": "request_contact",
"bodyText": "Compartilhe seu telefone para continuar."
}'curl -X POST https://api.plivant.com.br/v1/messages \
-H "Authorization: Bearer plv_live_sua_chave_aqui" \
-H "Content-Type: application/json" \
-d '{
"type": "read_receipt",
"messageId": "wamid.HBg...",
"showTypingIndicator": true
}'Carousel: 2–10 cards. Pode ser mídia IMAGE/VIDEO com URL/Quick Reply ou produto do catálogo com PRODUCT + SPM.
Authentication: estrutura OTP/COPY_CODE com recomendação de segurança e expiração configurável.
Request contact: botão oficial sem texto customizado, disponível em templates Utility/Marketing.
Oferta limitada: Marketing com Copy Code, CTA URL e countdown definido no momento do envio.
7. Sandbox, Meta-compatible, SDKs & Chatwoot
Recursos avançados para desenvolvimento e migração. Todos continuam passando pela autenticação, isolamento de projeto, scopes, rate limit, logs e auditoria da PliVant.
Sandbox sem número real
Projetos com environment=sandbox recebem chaveplv_test_... e não chamam a Meta. Envios simulamsent → delivered → read e usam os webhooks/HMAC reais.
Simula uma mensagem recebida e dispara messages.received.
Meta-compatible mode
Para migração de Cloud API direta/BSP, envie o JSON nativo da Meta sem adaptar para o wrapper normalizado. O access token e o phone number da Meta nunca são aceitos do cliente.
POST /v1/meta/messagesScope obrigatório: meta:raw. Se houver mais de um número, use X-PliVant-Phone-Number-Id com o UUID interno.
SDKs sincronizados pelo OpenAPI
Clientes Node/TypeScript, Python e PHP são versionados junto do contrato OpenAPI exportado pela própria API. O comando npm run sdk:contract regenera o snapshot e os paths consumidos pelos três SDKs.
Incluem mensagens, Sandbox e Meta-compatible. A publicação em registries públicos é separada do código local.
Chatwoot nativo
Pelo Dashboard, conecte URL do Chatwoot, Account ID, número oficial e Personal Access Token. A PliVant cria a API Inbox, registra o webhook assinado e faz a ponte de mensagens nos dois sentidos. O token fica criptografado e o Chatwoot continua sendo a interface de atendimento — a PliVant não vira CRM.
Custos: a PliVant não cobra por atendente. O Chatwoot Cloud possui planos com cobrança por agente, contratados separadamente. Na Community Edition auto-hospedada, não há licença por agente, mas servidor, manutenção e eventuais recursos pagos ficam por sua conta. A assinatura PliVant não inclui esses custos nem as tarifas de uso da Meta. Recursos variam conforme a edição e o plano.
Consulte os planos do Chatwoot Cloud e as edições auto-hospedadas.
Configuração, teste de conexão e desconexão ficam no painel. Mensagens recebidas criam/atualizam contato e conversa; respostas do Chatwoot voltam pela API oficial da PliVant.
8. Recebimento de Mensagens & Webhooks Assinados (HMAC)
A PliVant despacha requisições HTTP POST em tempo real para o seu servidor. Cada requisição acompanha o header criptográfico X-PliVant-Signature: t=<timestamp>,v1=<hmac> para validação inviolável de autenticidade.
id único do evento no payload para garantir idempotência do seu lado.O cliente enviou texto, áudio, foto, documento ou resposta a um botão.
Confirmação de envio: sent, delivered, read ou failed.
Histórico e contatos compartilhados pela Coexistência são repassados ao seu sistema sem virar CRM ou mensagem inbound.
Aprovação ou rejeição de templates submetidos para revisão da Meta.
Entrega o fragmento original do evento Meta dentro do envelope PliVant. Precisa ser selecionado explicitamente no endpoint; não entra nos eventos padrão.
import crypto from 'crypto';
// Express.js middleware para validar o header X-PliVant-Signature
export function verifyPliVantSignature(req, res, next) {
const header = req.headers['x-plivant-signature'];
const secret = process.env.PLIVANT_WEBHOOK_SECRET;
if (!header || !secret) {
return res.status(401).json({ error: 'Assinatura ausente ou webhook secret não configurado.' });
}
const parts = Object.fromEntries(header.split(',').map(p => p.split('=')));
const timestamp = parts['t'];
const receivedHmac = parts['v1'];
// Tolerância de tolerância a replay attack (5 minutos)
const toleranceSeconds = 300;
const now = Math.floor(Date.now() / 1000);
if (Math.abs(now - parseInt(timestamp, 10)) > toleranceSeconds) {
return res.status(401).json({ error: 'Timestamp expirado (replay attack detectado).' });
}
const payloadToSign = `${timestamp}.${req.rawBody || JSON.stringify(req.body)}`;
const expectedHmac = crypto.createHmac('sha256', secret).update(payloadToSign).digest('hex');
const isValid = crypto.timingSafeEqual(Buffer.from(receivedHmac, 'hex'), Buffer.from(expectedHmac, 'hex'));
if (!isValid) {
return res.status(403).json({ error: 'Assinatura HMAC inválida.' });
}
next();
}Templates — criar, editar e operar sem sair do painel
Template é a mensagem aprovada pela Meta que você pode usar para iniciar ou retomar uma conversa. A PliVant centraliza criação, aprovação, sincronização, teste e exemplos de integração.
Escolha a WABA/número e clique para criar um modelo ou usar um modelo pronto.
Preencha corpo, variáveis, mídia e botões. O painel valida as regras antes de enviar à Meta.
Use Sincronizar para trazer o status real. Templates pendentes ou rejeitados não podem ser enviados.
Use o botão de teste, REST API, MCP, n8n/Make/Typebot ou automações do seu sistema.
DISABLED.Texto, imagem, vídeo, PDF, localização, Quick Reply, URL, telefone, solicitar contato, catálogo, cupom Copy Code, produto único (SPM), multi-produto (MPM), Carousel de mídia, Carousel de produtos, oferta por tempo limitado (LTO) e autenticação OTP por copiar código ou one-tap.
No envio de SPM/MPM/Carousel de produtos você informa catálogo e SKUs; no LTO informa a data/hora final. Formatos de nicho ou liberados seletivamente pela Meta continuam acessíveis pelo modo Meta-compatible sem bloquear integrações externas.
Agente de IA — atendimento 24/7 sem n8n
Use este caminho quando você quer que o próprio número oficial responda clientes automaticamente. O computador pode ficar desligado: a fila da PliVant executa o agente no servidor.
:free quando disponíveis, adicionar conhecimento, testar e ativar. Abrir guia OpenRouter + WhatsApp →Escolha clínica, loja, serviços, imobiliária, restaurante, suporte, escola/curso ou outro negócio. A PliVant prepara uma base segura de comportamento e um checklist recomendado.
Conecte OpenRouter, OpenAI, Claude, Gemini ou xAI e escolha o modelo.
Adicione texto, XLSX/CSV/JSON, PDF, DOCX, PPTX/PPSX, TXT/MD, site ou Google Sheets. É daí que saem preços, políticas e dados de consulta.
Use integrações prontas ou ações de preço, estoque, pedido, agenda, rastreio, cobrança e qualquer API. Templates APPROVED do mesmo número entram automaticamente.
Monte processos confiáveis com sequência, SE/SENÃO, espera, retry, lotes, aprovação humana, webhook, evento e agendamento.
Defina memória, horário, handoff humano, retorno automático da IA após inatividade e limites de execução.
Converse com o agente no simulador e teste Rotinas em dry-run antes de publicar. Escritas reais ficam protegidas.
Ative um agente por número. A partir daí cada mensagem recebida entra no fluxo automático.
smb_message_echoes também assume a conversa automaticamente e impede resposta dupla da IA. O tempo de retorno é configurável por agente: a cada atividade humana ele é renovado e, quando expira, a IA só reassume na próxima mensagem do cliente. A PliVant não importa a agenda inteira do WhatsApp; ela aprende os contatos pelas conversas reais.Dúvidas, preços e explicações saem como texto quando essa é a melhor resposta.
Ex.: Comercial, Suporte ou Financeiro. O clique volta para o mesmo agente continuar.
O agente envia a lista nativa do WhatsApp em vez de uma parede de opções numeradas.
A própria IA pode chamar a ferramenta de transferência quando o cliente pedir humano ou quando a regra do atendimento exigir escalonamento.
Ele vê os templates aprovados da mesma WABA, preenche os campos e envia sem resposta duplicada.
Com IDs/SKUs vindos de conhecimento ou API confiável, ele pode enviar produto, lista de produtos ou abrir o catálogo nativo.
Quando tiver uma URL pública confiável, pode enviar imagem, documento, áudio, vídeo ou sticker pela mesma Send API.
Pode mandar localização conhecida, cartão de contato ou pedir ao cliente que compartilhe o próprio contato.
PliVant MCP — dê ferramentas da sua conta a um agente externo
MCP é para quando você quer usar Codex, Claude, Cursor ou outro cliente compatível para operar a PliVant. Para atendimento automático do WhatsApp sem aplicativo aberto, prefira o Agente de IA nativo.
https://api.plivant.com.br/mcpCom messages:send, o agente externo pode enviar texto, template, mídia, botões, listas, produtos, catálogo, localização, contatos, reação e leitura/typing. Com os scopes de templates ele também lista, cria rascunho, submete, sincroniza e exclui templates autorizados. O modo meta:raw fica separado para payloads Meta-compatible avançados.
OAuth ou Bearer define projeto, números e scopes. O cliente só enxerga as ferramentas que aquela autorização permite.
Integrações externas — qual caminho usar?
Use a REST API para enviar e Webhooks para receber. É o caminho certo quando a lógica fica fora da PliVant.
Use a página própria do Chatwoot para central de atendimento humano. A integração não precisa passar pelo n8n.
No Agente de IA, cadastre a API em Ferramentas. Fora do agente, use REST + Webhook normalmente.
Use quando outro agente de IA precisa descobrir e executar ferramentas da PliVant com permissões controladas.
13. Status HTTP & Tratamento de Erros da API
A PliVant utiliza códigos HTTP padronizados e códigos de erro específicos da Meta Graph API para que sua aplicação trate contingências de forma determinística.
| Código | Status | Significado e Ação Recomendada |
|---|---|---|
| 200 / 202 | OK / Accepted | Mensagem enfileirada no BullMQ e processada com sucesso. |
| 400 | Bad Request | Payload malformado, número fora do padrão E.164 ou número não autorizado para este projeto. |
| 401 | Unauthorized | Chave de API ausente, incorreta ou revogada no painel. |
| 403 | Forbidden | Organização sem assinatura ativa ou suspensa por estorno/chargeback. |
| 409 | Conflict | Idempotency-Key reutilizada com payload diferente. Use a mesma chave só para o mesmo envio. |
| 429 | Too Many Requests | Limite de taxa por minuto atingido. Respeite o header Retry-After. |
| 500 / 503 | Server Error | Indisponibilidade momentânea no upstream Meta. O worker reprocessará automaticamente. |
| Código Meta | Motivo | Como resolver |
|---|---|---|
| 131047 | Janela de 24 horas expirada | O cliente não enviou mensagem nas últimas 24h. Envie um Template Aprovado em vez de texto livre. |
| 131026 | Número inexistente | O telefone destinatário não possui conta no WhatsApp. Valide o número antes de enviar. |
| 131053 | Mídia inacessível | A URL do arquivo retornou 404, exigiu login ou bloqueou o IP dos servidores da Meta. Use URLs públicas HTTPS. |
| 130429 | Meta Rate Limit | Volume por segundo excedeu a faixa da conta de WhatsApp Business na Meta. Espalhe os disparos. |
{
"statusCode": 403,
"error": "Forbidden",
"message": "Acesso bloqueado: a organização não possui uma assinatura ativa (Status atual: sem assinatura). Acesse o painel para regularizar."
}