Referência da API
A fonte única é o OpenAPI (packages/sdk/openapi.yaml), que gera o SDK
TypeScript e esta referência. Abaixo, os endpoints do núcleo com exemplos reais.
Autentique com Authorization: Bearer bz_live_....
Enviar texto — POST /messages/text
Só to e body são obrigatórios. Não informe o número de origem e o bZapper escolhe
um do seu pool (distribuição + afinidade de conversa):
curl -X POST https://api.bzapper.com.br/messages/text \
-H "Authorization: Bearer $BZ_KEY" -H "Content-Type: application/json" \
-d '{"to":"+5511988888888","body":"Olá","client_reference":"lead-42"}'
import requests
requests.post("https://api.bzapper.com.br/messages/text",
headers={"Authorization": f"Bearer {key}"},
json={"to": "+5511988888888", "body": "Olá"})
await fetch("https://api.bzapper.com.br/messages/text", {
method: "POST",
headers: { Authorization: `Bearer ${key}`, "Content-Type": "application/json" },
body: JSON.stringify({ to: "+5511988888888", body: "Olá" }),
});
<?php
$ch = curl_init("https://api.bzapper.com.br/messages/text");
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_HTTPHEADER => ["Authorization: Bearer $key", "Content-Type: application/json"],
CURLOPT_POSTFIELDS => json_encode(["to" => "+5511988888888", "body" => "Olá"]),
CURLOPT_RETURNTRANSFER => true,
]);
$res = curl_exec($ch);
Resposta 202: { "message_id": "...", "status": "queued", "client_reference": "lead-42" }.
instance_id é opcionalinstance_id (e pool_id) não são obrigatórios. Omita-os e o gateway escolhe o número
(rotação/sticky). Informe instance_id apenas para forçar um número específico —
ex.: {"instance_id":"<id>","to":"...","body":"..."}. Veja Listar números
para obter os ids. Detalhes do comportamento em Atendimento.
Listar números — GET /instances
Lista as instâncias (números) do projeto, com o id que você usa como instance_id em
envios direcionados. Requer o escopo instances:read.
curl https://api.bzapper.com.br/instances -H "Authorization: Bearer $BZ_KEY"
{ "data": [
{ "id": "ce…", "phone": "+5511…", "nickname": "Suporte", "status": "connected", "health_score": 100 }
] }
No admin, a tela Números mostra o
instance_idde cada número com um botão de copiar.
Outros do núcleo
POST /messages/{image,video,document,audio,sticker,location,contact,poll,reaction,buttons,list}POST /messages/otp— código de verificação em 2 mensagens (texto + balão do código); conta como 1 envio. O código nunca é persistido nem exibido no inbox (mascarado + echoguard). Omitindobody, a API gera o texto no idioma da conta. Detalhes em Tipos de mensagem → OTP.POST /contacts/check—IsOnWhatsApp(trata@lid)GET /conversations?instance_id=eGET /conversations/{jid}/messages— inboxGET /media/{id}— referência estável da mídia recebida (privada): responde 302 para uma URL pré-assinada fresca. Ver Tipos de mensagem.POST /webhooks— registrar webhook (HMAC); ver o guia de webhooksGET /stream— SSE em tempo realGET /usage— telemetria de usoGET /me/entitlements·GET /me/subscription·GET /me/invoices— plano, limites e faturas da conta; ver Cobrança
Erros
Todo erro tem código neutro estável + mensagem traduzida:
{ "code": "instance_not_connected", "message": "Número desconectado...", "locale": "pt-BR" }
Use o code na lógica. Comuns: unauthorized, forbidden, rate_limited,
not_connected, no_number_available, not_supported (experimental).