SaqSaq Docs

Webhooks

O sistema de webhooks da Saq envia notificações em tempo real sobre mudanças de status das suas transações. Quando você cria uma transação e fornece um callbackUrl, nosso sistema envia atualizações para essa URL toda vez que houver mudança de status.

O que é um webhook (callback)

Um webhook (também chamado de callback) é uma requisição POST que a Saq envia para o seu servidor quando algo acontece. Ao contrário da API normal (onde você chama a Saq), aqui é o oposto: a Saq chama você.

Pensa numa cobrança Pix. Você criou ela, exibiu o QR ao cliente, e agora precisa saber quando o cliente paga. Duas opções:

  1. Polling, ficar perguntando a cada X segundos "já pagou? já pagou?" (custoso, lento, desnecessário).
  2. Webhook, deixar a Saq te avisar assim que o pagamento entrar (instantâneo, eficiente, recomendado).

Como configurar

Não existe endpoint separado para "cadastrar webhook". A URL é informada a cada transação criada, no campo callbackUrl do body:

{
  "amount": 99.90,
  "callbackUrl": "https://seusite.com.br/webhooks/saq",
  "clientReference": "pedido-2025-001"
}

A Saq vai enviar o callback para essa URL toda vez que aquela transação mudar de status (PENDING → COMPLETED, COMPLETED → REFUNDED, etc).

Crie um endpoint público no seu servidor

Algum lugar acessível pela internet que aceite POST com JSON. Exemplos: https://seusite.com.br/webhooks/saq, https://api.suaempresa.com/saq/callback.

Durante desenvolvimento local, use túneis como ngrok ou Cloudflare Tunnel pra expor o localhost.

Passe a URL ao criar a transação

Em todo POST /pix, POST /withdraw, POST /internal-transfer, inclua o campo callbackUrl. Pode ser a mesma URL pra todos.

Implemente o handler

Receba o POST, leia o JSON, processe e responda 2xx em até 5 segundos. Veja exemplos em Receber Pix · passo 3.

Header obrigatório no POST enviado pela Saq: Content-Type: application/json.

Sistema de retry

Os webhooks da Saq têm um sistema robusto de retentativa que garante a entrega mesmo em falhas temporárias. A Saq reenvia até 72 vezes o mesmo callback com backoff exponencial e jitter, distribuindo melhor a carga e evitando picos de requisições.

Tempo de resposta: o webhook deve responder com HTTP 200 OK em até 5 segundos. Se exceder esse tempo, o sistema considera timeout e inicia o processo de retentativa.

Segurança

Para garantir integridade e segurança, restrinja o acesso ao seu endpoint de webhook. Solicite o IP oficial da Saq ao suporte e aceite callbacks apenas dessa origem.

Campos do payload

Identificação

CampoTipoDescrição
idstringID da transação
clientReferencestringReferência externa que você forneceu
virtualAccountstringSubconta virtual (até 50 caracteres). Volta no callback para correlacionar lojas, filiais, marketplaces.
callbackUrlstringURL configurada para receber este webhook

Status e valores

CampoTipoDescrição
statusstringPENDING, COMPLETED, CANCELED, WAITING_FOR_REFUND, REFUNDED, EXPIRED, ERROR
typestringDEPOSIT, WITHDRAW, INTERNAL_TRANSFER
amountnumberValor em BRL
serviceFeeChargednumberTarifa cobrada

Cobrança gerada (depósito)

CampoTipoDescrição
qrCodeTextstringCódigo Pix copia-e-cola
qrCodeUrlstringURL da imagem do QR Code
qrCodeBase64stringImagem do QR Code em formato Base64
generatedNamestringNome de referência
generatedDocumentstringCPF ou CNPJ
generatedEmailstringEmail vinculado à transação

Pagador

CampoTipoDescrição
payerNamestringNome do pagador
payerDocumentstringDocumento do pagador
payerInstitutionIspbstringISPB do banco do pagador
payerInstitutionNamestringNome do banco do pagador
payerAccountNumberstringConta Saq do pagador (6 dígitos). Presente apenas em transferências internas.

Recebedor

CampoTipoDescrição
receiverNamestringNome do destinatário
receiverDocumentstringDocumento do destinatário
receiverInstitutionIspbstringISPB do banco do destinatário
receiverInstitutionNamestringNome do banco do destinatário
receiverAccountNumberstringConta Saq do destinatário (6 dígitos). Presente apenas em transferências internas.

Saque via chave Pix

CampoTipoDescrição
withdrawPixKeystringChave Pix usada no saque
withdrawPixTypestringcpf, cnpj, phone, email, evp

Liquidação e estorno

CampoTipoDescrição
endToEndIdstringEndToEnd ID do Pix
paidAtstringTimestamp do pagamento (ISO 8601)
cancellationReasonstringMotivo do cancelamento
refundEndToEndIdstringEndToEnd ID do estorno
refundAmountstringValor estornado
refundStatusstringPENDING, COMPLETED, CANCELED
refundReasonstringMotivo do estorno
refundDescriptionstringDescrição do estorno
refundedAtstringTimestamp do estorno (ISO 8601)

Timestamps

CampoTipoDescrição
createdAtstringTimestamp de criação (ISO 8601)
updatedAtstringTimestamp de atualização (ISO 8601)

Infração (disputa Pix)

CampoTipoDescrição
infractionobjectDetalhes da infração quando aberta (ver MED)

Boas práticas

  • Responda rápido: devolva 2xx em menos de 5s. Processe pesado em fila/worker, não no handler.
  • Idempotência: armazene id + status para deduplicar. O mesmo callback pode chegar mais de uma vez (retentativa, mudanças sucessivas).
  • Use clientReference: passe um identificador externo na criação da transação. Volta no callback e facilita correlacionar com seu pedido.
  • Restrinja por IP: aceite callbacks apenas do IP oficial da Saq.

Inspeção e reenvio

A API expõe a lista completa de callbacks enviados:

On this page