Documentação
MCP Painel →

WhatsApp chave ace_

Conecte o número da empresa por QR, envie textos e mídias, e receba mensagens por webhook. A instância é provisionada automaticamente na primeira chamada. Só o envio cobra 1 unidade; QR, status e webhook são grátis. Requer o produto whatsapp vinculado.

Endpoints
GET  /whatsapp/qrcode
GET  /whatsapp/status
POST /whatsapp/mensagens   # texto  (cobra 1)
POST /whatsapp/midia       # mídia  (cobra 1)
GET/PUT /whatsapp/webhook
POST /whatsapp/desconectar

1 · Conectar

GET /whatsapp/qrcode

Gera o QR code para parear o WhatsApp (validade ~2 min). Exiba qrcode direto num <img src>; ou use o pairing_code para parear por código.

Erro 409 ja_conectado: o número já está conectado (chame POST /whatsapp/desconectar antes de trocar de aparelho).

Requisição
curl .../api/v1/whatsapp/qrcode \
  -H "Authorization: Bearer ace_SEU_TOKEN"
$qr = $cli->whatsapp()->qrcode();
// echo '<img src="'.$qr['qrcode'].'">';
R := Api.Get('whatsapp/qrcode');
200 · data
{ "qrcode": "data:image/png;base64,iVBOR...",
  "expira_em": "2026-07-14 02:31:00",
  "pairing_code": "ABCD-1234",
  "status": "conectando" }

2 · Status da conexão

GET /whatsapp/status

Confirme a conexão depois do usuário escanear (faça polling a cada poucos segundos).

200 · data
{ "status": "conectado",   // conectando|desconectado
  "conectado": true,
  "telefone": "5531999998888",
  "webhook_url": "https://..." }

3 · Enviar texto cobra 1 un.

POST /whatsapp/mensagens
CampoDescrição
paraobrig.Número com DDI+DDD, só dígitos (5531999998888)
mensagemobrig.Texto (emojis suportados)
Instabilidade → 202: status "reenvio_automatico" com tentar_em_segundos — a mensagem entra na fila e é reenviada sozinha. Não reenvie, senão duplica.
Requisição
curl -X POST .../api/v1/whatsapp/mensagens \
  -H "Authorization: Bearer ace_SEU_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "para": "5531999998888",
    "mensagem": "Olá! Seu pedido foi aprovado. 🎉"
  }'
$cli->whatsapp()->enviarTexto(
  '5531999998888', 'Olá! Pedido aprovado.');
Api.EnviarWhatsAppTexto(
  '5531999998888', 'Olá! Pedido aprovado.').Free;
200 · data
{ "message_id": "3EB0...",
  "status": "enviada" }

4 · Enviar mídia cobra 1 un.

POST /whatsapp/midia
CampoDescrição
paraobrig.Número (só dígitos)
arquivoobrig.URL pública — imagem JPG/PNG, PDF, áudio ou vídeo
legendaopc.Texto junto da mídia
nome_arquivoopc.Nome exibido (para documentos)
Requisição
curl -X POST .../api/v1/whatsapp/midia \
  -H "Authorization: Bearer ace_SEU_TOKEN" \
  -d '{
    "para": "5531999998888",
    "arquivo": "https://.../danfe.pdf",
    "legenda": "Segue a nota",
    "nome_arquivo": "nota-1234.pdf"
  }'
$cli->whatsapp()->enviarMidia([
  'para'=>'5531999998888',
  'arquivo'=>'https://.../danfe.pdf',
  'nome_arquivo'=>'nota-1234.pdf',
]);
P := JSONFromStr('{"para":"5531999998888",'+
  '"arquivo":"https://.../danfe.pdf"}');
Api.Post('whatsapp/midia', P);

5 · Webhook · receber mensagens

GET /whatsapp/webhook
PUT /whatsapp/webhook

Defina sua URL ({"url":"https://..."}; envie "" para remover). A partir daí, toda mensagem recebida e eventos de conexão são entregues na sua URL via POST JSON, num formato limpo padronizado (não é o payload cru do WhatsApp). Responda 200 rápido e processe em background.

Cabeçalhos de cada entrega

  • X-AceleraAPI-Evento — tipo do evento (ex.: mensagem_recebida)
  • X-AceleraAPI-Assinaturasha256=<hmac> (HMAC-SHA256 do corpo cru com o secret)
Valide a assinatura antes de confiar no payload — garante que veio da AceleraAPI. A URL precisa de HTTPS com certificado válido.

evento: mensagem_recebida, mensagem_enviada, status_mensagem ou conexao. Guarde o secret (whsec_…).

Corpo entregue · mensagem_recebida
{ "empresa_id": 12,
  "evento": "mensagem_recebida",
  "de": "5531988887777",
  "nome": "Cliente Fulano",
  "tipo": "texto",
  "mensagem": "Quero saber do meu pedido",
  "id_mensagem": "MSG123",
  "de_mim": false,
  "timestamp": 1789350000 }
Validar assinatura
# header:
X-AceleraAPI-Assinatura: sha256=<hmac>
# hmac = HMAC-SHA256(corpo_bruto, secret)
$corpo = file_get_contents('php://input');
$assin = $_SERVER['HTTP_X_ACELERAAPI_ASSINATURA'];
$ok = hash_equals(
  'sha256='.hash_hmac('sha256', $corpo, $SECRET),
  $assin);
if (!$ok) { http_response_code(401); exit; }
// HMAC-SHA256 do corpo cru com o secret
// e compare com o header, formato sha256=...
// (System.Hash.THashSHA2.GetHMAC)