Skip to main content
Use WebSocket quando sua aplicação não tem URL HTTPS pública (bot Discord/Telegram, worker em VPS, processo atrás de NAT). A REST API continua responsável por criar pagamentos e transferências; o WebSocket só notifica que algo aconteceu.
Sem porta pública? Prefira WebSocket. Tem servidor HTTPS? Webhooks com HMAC e retries automáticos.

Configurar

1

1. Chave de API

Use uma chave wp_live_... com as permissões necessárias para as operações que você cria via REST (ex.: payment-pix/create).
2

2. Conectar ao gateway

Abra uma conexão WSS em wss://ws.wovepay.com/v1 a partir do seu servidor (nunca no browser).
3

3. Autenticar

Envie a API key na URL, no header do upgrade ou na primeira mensagem (veja Autenticação).
4

4. Inscrever-se

Use subscribe com pattern (payment.*) ou paymentId específico.
5

5. Processar eventos

Trate cada mensagem pelo id (idempotência) e opcionalmente envie ack.

Escopo por API key

Conexões autenticadas com wp_live_... recebem eventos das transações criadas pela mesma API key. Eventos de outra chave da mesma conta não são entregues nessa conexão. Exceção importante (igual aos webhooks): transfer.internal.received é emitido para a conta destino. Só chega se a API key usada na conexão tiver criado operações relevantes ou se você estiver inscrito na conta correta com a chave que recebe transferências internas.

Teste

  1. Conecte com sua wp_live_...
  2. Inscreva-se em payment.*
  3. Crie um PIX com POST /payment-pix/create usando a mesma API key
  4. Você deve receber payment.created e, após pagar, payment.paid
Tutorial passo a passo: WebSocket na prática.

Endpoint

Protocolo

Toda mensagem do cliente é um JSON com campo action. Toda mensagem do servidor usa o campo event.

Mensagens do cliente

Mensagens do servidor

Autenticação

Escolha uma das três formas: Resposta de sucesso:
Rode a conexão no servidor (bot, worker, backend). Nunca exponha wp_live_... em frontend, app mobile ou repositório público.
Se não autenticar em 10 segundos, a conexão fecha com código WebSocket 1008. Chaves com restrição de IP na API key só autenticam se o IP de origem estiver na allowlist configurada na chave. Ao revogar a API key, todas as conexões abertas com ela são encerradas imediatamente.

Subscribe

Por pattern (wildcards)

Resposta:
Regras:
  • Pattern válido: letras minúsculas, números, _, ., * — até 64 caracteres
  • Máximo 100 inscrições por conexão (patterns + paymentId somados)
  • Re-subscribe no mesmo pattern é idempotente

Por pagamento específico

Use o id retornado em POST /payment-pix/create ou GET /payment-pix/get.

Unsubscribe

Resposta:
Remover uma inscrição não fecha o socket — você pode inscrever-se em outros patterns na mesma conexão.

Formato do evento

Cada evento de negócio segue o envelope abaixo. O campo data é idêntico ao corpo JSON dos webhooks para o mesmo tipo de evento.

Tipos de data

Campos úteis em transações PIX

Para exemplos JSON completos de cada evento, consulte a seção Eventos do guia de webhooks — os payloads são os mesmos; apenas o transporte muda (WSS em vez de POST HTTPS).

ACK (opcional)

Confirme que processou o evento:
O ACK é usado para rastreamento de entrega. A WovePay registra o recebimento; não há reenvio automático pelo gateway se você não enviar ACK (diferente dos webhooks HTTP com retry). Recomendações:
  • Persista o id antes de processar o data
  • Envie ack após enfileirar ou concluir o processamento
  • Duplicatas do mesmo id devem ser ignoradas no seu lado

Heartbeat

Sem resposta ao ping do servidor dentro de 15s, a conexão é fechada. Implemente o handler de ping antes de ir para produção.

Reconexão

O gateway não mantém estado entre desconexões. Após queda de rede ou deploy:
  1. Reconecte com backoff exponencial: 1s → 2s → 4s → 8s → 16s → 30s (máximo)
  2. Autentique novamente
  3. Re-inscreva nos patterns necessários
  4. Consulte a REST API para eventos perdidos durante a janela offline (GET /payment-pix/get/:id, etc.)
Não use WebSocket como única fonte de verdade. Combine com consultas REST para recuperar estado após downtime prolongado.

Rate limits

Ao exceder limites de conexão ou auth, o servidor envia { "event": "error", "code": "RATE_LIMIT" } e pode fechar a conexão (1008).

Segurança

  • Conexão criptografada — use somente wss:// em produção (nunca ws://)
  • Ownershipsubscribe com paymentId valida que a transação pertence à conta da API key
  • Revogação — API key revogada desconecta todas as sockets imediatamente
  • Allowlist de IP — respeitada na autenticação, igual à REST API
  • Ações permitidas — cliente só envia: authenticate, subscribe, unsubscribe, ack, ping
  • Payload acima de 64 KB → close 1009

Checklist

  • Conexão apenas no servidor (nunca browser)
  • API key em variável de ambiente (WovePay_API_KEY)
  • Handler de ping implementado
  • Idempotência pelo id da entrega
  • Reconexão com backoff + re-subscribe
  • REST API como fallback após downtime
  • Patterns mínimos necessários (payment.* em vez de * se possível)

Códigos de erro

Erros são enviados como:

Códigos de close WebSocket

Eventos

O catálogo é o mesmo dos webhooks. Inscreva-se com patterns (payment.*) ou eventos exatos via * (todos).

Catálogo (ativos)

Eventos de cripto e boleto existem no código mas não estão ativos na API pública no momento.

PIX recebido

Disparados por POST /payment-pix/create. data.type = PIX_IN. Exemplo payment.created:
Mais exemplos: PIX recebido (webhooks).

Estorno PIX

Disparados após POST /refunds/create. O data é o depósito original com bloco refund. Exemplos completos: Estorno PIX (webhooks).

PIX enviado

Disparados por POST /transfer-pix/create. data.type = PIX_OUT. Exemplos completos: PIX enviado (webhooks).

Transferência interna

Disparados por POST /transfer-internal/create. Exemplos completos: Transferência interna (webhooks).

MED

Disputas no trilho PADRAO. data segue GET /meds/get. Exemplos completos: MED (webhooks). Para links pagos via PIX, payment.paid também pode ser emitido. Para checkout de link, inscreva-se em payment_link.paid ou payment.*. Exemplo completo: Links de pagamento (webhooks).

Nota fiscal

Emitidos quando a cobrança usa emissão automática. O WebSocket traz apenas invoiceId no data.

Fluxos comuns

Exemplo completo (Node.js)

Cliente de produção com auth, subscribe, heartbeat, ACK e reconexão:
Dependência: npm install ws

Exemplo completo (Python)

Dependência: pip install websockets

WebSocket vs Webhook vs Polling

Quando usar cada um

Veja também: Tutorial prático · Webhooks · Criar cobrança PIX