Ir para o conteúdo
Sharkpay

Documentação da API

Integre pagamentos, saques e webhooks ao seu sistema com uma API HTTP/JSON aberta e documentada.

API 2026-10-14

Testes e solução de problemas

Roteiro para validar sua integração e tabela de diagnóstico dos problemas mais comuns.

Roteiro de testes

  1. 1. Autenticação

    Token com chaves corretas (200); com chave errada (401); sem cabeçalho (401). Renove o token ao receber 401.

  2. 2. Webhook

    PUT /api/webhook → POST /api/webhook/test → confira no seu receptor e em GET /api/webhook/deliveries. Teste também assinatura inválida e timestamp antigo (devem ser rejeitados).

  3. 3. Criação

    Crie com dados válidos; com campo faltando (422); com valor 0 ou negativo (422); com método desabilitado (400).

  4. 4. Idempotência

    Repita a mesma chamada com a mesma chave: mesma resposta e Idempotent-Replayed: true. Troque o corpo mantendo a chave: 422.

  5. 5. Estados

    Simule no seu código eventos invoice.paid, duplicado e fora de ordem. O pedido deve ser liberado uma única vez.

  6. 6. Falhas

    Force timeout, 429 e 500 no seu cliente (mocks) e confira o backoff e a reutilização da chave.

Teste unitário da assinatura

Use o vetor de teste da página de Webhooks. Exemplo em Node.js:

verify.test.mjs
import { createHmac, timingSafeEqual } from 'node:crypto';
import assert from 'node:assert/strict';

const assinar = (segredo, t, corpo) => createHmac('sha256', segredo).update(`${t}.${corpo}`).digest('hex');

const v1 = assinar('whsec_test_secret', 1700000000, '{"id":"evt_test","type":"ping"}');
assert.equal(v1, '76e93d7667b36f8aab799377027b5ad5c17365edfaca34f11cc7c9f570f94a2a');
assert.ok(timingSafeEqual(Buffer.from(v1), Buffer.from(v1)));
console.log('ok');

Problemas comuns

SintomaCausa provávelSolução
401 em /api/auth Chaves trocadas, com espaço, ou conta sem chaves geradas. Copie PUB-… e SEC-… do painel; Basic = base64(pub:sec).
401 depois de dias Token expirou (expires_in). Renove ao receber 401.
400 “método não habilitado” Pix/boleto/cartão desligado na conta. Habilite o método no painel.
422 com campos Corpo fora do contrato. Leia error por campo e a Referência.
422 idempotency_key_reused Mesma chave com outro corpo/rota. Gere nova chave para nova operação.
409 idempotency_in_progress Reenvio enquanto a primeira chamada roda. Aguarde 1–2 s.
429 Mais de 60 req/min. Respeite Retry-After; reduza polling.
Webhook não chega URL não https, porta ≠ 443/8443, IP privado, sem 2xx. Veja last_status/last_error em /api/webhook/deliveries.
Assinatura não confere Corpo reserializado; segredo errado ou rotacionado; relógio fora de hora. Use o corpo bruto; confira o segredo; sincronize o relógio (NTP).
Valor diferente do esperado Esqueceu quantity, tax ou discount. Total = amount×quantity + tax% − discount%.
404 em uma cobrança que existe É de outra conta/instalação. Use as chaves da conta dona da cobrança.