Documentação API

Integração ChefePay · Zappaz API

Documentação da API ChefePay

Esta é a documentação completa para desenvolvedores. A API ChefePay permite consultar saldo, gerar cobranças PIX e solicitar saques direto do seu sistema. Por padrão, as transações via API são processadas na carteira Pix'M (você pode informar outra carteira no campo provider da requisição). Para começar, faça login para gerar sua chave de acesso.

Base URL
https://chefepay.com/api/public/v1

Autenticação

Faça login e gere uma chave na aba Chaves e envie-a no header Authorization. A chave é exibida apenas uma vez — guarde-a em local seguro e nunca a exponha no frontend.

Authorization: Bearer cp_live_xxxxxxxxxxxxxxxxxxxxxxxx
Content-Type: application/json
http

Parâmetro t= (timestamp)

Obrigatório: valide o timestamp e rejeite requisições antigas

Toda requisição e todo webhook do ChefePay carregam o parâmetro t=, que é o timestamp Unix em segundos (UTC) do momento em que a mensagem foi gerada. Ele também entra na base da assinatura HMAC, então não pode ser alterado sem invalidar a assinatura.

Por que isso importa: sem essa checagem, um atacante que capture uma requisição válida (por logs, proxy ou histórico) pode reenviá-la mais tarde — o chamado replay attack — e provocar créditos, saques ou confirmações duplicadas. Como a cópia é byte a byte idêntica, a assinatura continua válida; só o tempo denuncia a fraude.

Como usar corretamente:

  1. Leia o t da query string (ou do header X-Chefepay-Timestamp).
  2. Compare com o horário atual do seu servidor em UTC — nunca com o horário do navegador do cliente.
  3. Rejeite com 400 qualquer requisição em que |agora − t| > 300 segundos (5 minutos). A margem absoluta também barra timestamps no futuro, que indicam relógio adulterado.
  4. Só depois de aprovar o timestamp, valide a assinatura HMAC sobre t + "." + corpo e processe o evento.
  5. Mantenha o relógio do seu servidor sincronizado por NTP; um desvio maior que 5 minutos fará requisições legítimas serem recusadas.
  6. Guarde o id do evento já processado por 5 minutos para também bloquear reenvios dentro da janela válida (idempotência).
const MAX_SKEW = 300; // 5 minutos, em segundos

function verificarTimestamp(t) {
  const enviado = Number(t);
  if (!Number.isFinite(enviado)) return false;
  const agora = Math.floor(Date.now() / 1000);
  return Math.abs(agora - enviado) <= MAX_SKEW;
}

// dentro do seu webhook
const t = new URL(req.url).searchParams.get("t");
if (!verificarTimestamp(t)) {
  return new Response("Requisição expirada", { status: 400 });
}
javascript

GET /balance

GEThttps://chefepay.com/api/public/v1/balance

Retorna o saldo disponível e o saldo pendente da conta, em centavos.

curl -X GET "https://chefepay.com/api/public/v1/balance?t=$(date +%s)" \
  -H "Authorization: Bearer cp_live_sua_chave"
bash
200OK
{
  "available_cents": 1284530,
  "pending_cents": 45000,
  "currency": "BRL",
  "updated_at": "2026-08-13T03:41:12.000Z"
}
json

POST /deposits

POSThttps://chefepay.com/api/public/v1/deposits

Gera uma cobrança PIX e devolve o código copia-e-cola e o QR Code.

CampoTipoDescrição
amount_cents*integerValor em centavos. Mínimo 100.
descriptionstringDescrição exibida na cobrança.
customer_namestringNome do pagador.
callback_urlstringURL que receberá o webhook de pagamento.
t*integerTimestamp Unix (query string).
curl -X POST "https://chefepay.com/api/public/v1/deposits?t=$(date +%s)" \
  -H "Authorization: Bearer cp_live_sua_chave" \
  -H "Content-Type: application/json" \
  -d '{
    "amount_cents": 4990,
    "description": "Pedido #1042",
    "customer_name": "Maria Silva",
    "callback_url": "https://seusite.com/webhooks/chefepay"
  }'
bash

Try It Out

simulado

A resposta simulada aparecerá aqui.

POST /withdrawals

POSThttps://chefepay.com/api/public/v1/withdrawals

Solicita um saque PIX a partir do saldo disponível.

CampoTipoDescrição
amount_cents*integerValor do saque em centavos.
pix_key*stringChave PIX de destino.
pix_key_type*enumcpf | email | telefone | aleatoria
holder_namestringNome do titular da chave.
t*integerTimestamp Unix (query string).
curl -X POST "https://chefepay.com/api/public/v1/withdrawals?t=$(date +%s)" \
  -H "Authorization: Bearer cp_live_sua_chave" \
  -H "Content-Type: application/json" \
  -d '{
    "amount_cents": 25000,
    "pix_key": "maria@email.com",
    "pix_key_type": "email",
    "holder_name": "Maria Silva"
  }'
bash
202Accepted
{
  "id": "wd_9f2c71ab44d0",
  "status": "pendente",
  "amount_cents": 25000,
  "pix_key": "maria@email.com",
  "created_at": "2026-08-13T03:41:12.000Z"
}
json

WhatsApp (Zappaz)

Dica de Administrador

Você pode usar o botão "Listar Grupos" na aba de Notificações do painel para encontrar e selecionar o ID do grupo (JID) visualmente, sem precisar de chamadas manuais à API.

Para integração manual via código, faça uma requisição para listar os seus grupos e copie o jid do grupo desejado (exemplo: 120363023847293847@g.us).

Comandos via WhatsApp:

Usuarios tambem conseguem gerar cobrancas através do WhatsApp usando o comando /depositar+(valor) e tambem sacar usando o /sacar +(valor) e o bot deve solicitar a chave pix para saque

const response = await fetch('https://api.zappaz.io/api/v1/session/ab43074f-50da-4fc9-9823-cc0398b44b1c/group', {
  method: 'GET',
  headers: {
    'Authorization': 'SEU_TOKEN_AQUI'
  }
});

const grupos = await response.json();
console.log(grupos);
javascript

Utilize o endpoint de envio de mensagem passando o jid no campo number

const response = await fetch('https://api.zappaz.io/api/v1/session/ab43074f-50da-4fc9-9823-cc0398b44b1c/message/text', {
  method: 'POST',
  headers: {
    'Content-Type': 'application/json',
    'Authorization': 'SEU_TOKEN_AQUI'
  },
  body: JSON.stringify({
    number: '120363023847293847@g.us', // JID do seu grupo aqui
    message: '🚀 Notificação de teste enviada via Lovable!'
  })
});

const data = await response.json();
console.log(data);
javascript

Resumo de Implementação:

  • Substitua SEU_TOKEN_AQUI pelo token gerado na sua plataforma Zappaz.
  • Certifique-se de usar o sessionId da sua sessão (ab43074f-50da-4fc9-9823-cc0398b44b1c).
  • Verifique se o ID do grupo termina com @g.us.

Códigos de resposta

200OKRequisição processada com sucesso.
201CreatedCobrança criada.
202AcceptedSaque aceito e em processamento.
400Bad RequestCampos inválidos ou timestamp t= expirado.
401UnauthorizedChave de API ausente, inválida ou revogada.
403ForbiddenOperação bloqueada para esta conta.
422UnprocessableSaldo insuficiente ou limite excedido.
429Too Many RequestsLimite de requisições atingido.
500Server ErrorFalha interna. Tente novamente com backoff.
Todas as chamadas devem partir do seu servidor. Nunca exponha a chave cp_live_ em código de navegador ou aplicativo.