Pular para o conteúdo

Seu primeiro resgate

  1. Obtenha suas chaves

    Crie uma chave de teste no portal de empresas. Você vê a chave completa uma única vez; a parte final dela também é o segredo com que você assina as requisições.

  2. Reserve o voucher

    Envie o código, a moeda e a referência do seu cliente. O voucher fica bloqueado para esse cliente e não pode ser usado em nenhum outro lugar.

  3. Credite e depois capture

    Credite o saldo do seu lado e depois faça a captura. Se a recarga falhar, cancele em vez disso e o voucher é liberado.

  4. Escute os webhooks

    Registre um endpoint para receber eventos assinados de capturas, cancelamentos, expirações e checkouts.

Resgates · exemplo
POST /v1/redemptions
Authorization: Bearer vch_test_…
Idempotency-Key: topup-88213
Vouchereto-Signature: t=1790500000,v1=9c1e5f07…
Content-Type: application/json

{ "code": "7K2M-9QXR-4HTB-2WNZ", "customer_ref": "acct_48213", "currency": "USD" }

# 201 Created
{ "id": "5f0c2a7e-…", "object": "redemption", "status": "reserved",
  "amount_minor": 5000, "currency": "USD", "voucher_last4": "2WNZ",
  "customer_ref": "acct_48213", "livemode": false,
  "expires_at": "2026-09-27T14:12:00Z", "captured_at": null }

O ciclo de vida de um resgate

voucher ativoreservado
  • capturadoO voucher foi usado. Irreversível.
  • canceladoVocê cancelou. O voucher volta a ficar ativo.
  • reserva expiradaNão foi capturado a tempo (15 minutos por padrão). O voucher volta a ficar ativo.

Referência para a integração

Assinatura das requisições

Toda requisição leva um cabeçalho Vouchereto-Signature: um timestamp e um HMAC-SHA256 do timestamp, do método, do caminho e do corpo, gerado com o segredo da sua chave de API. Aceitamos uma diferença de relógio de até 300 segundos.

sign.js
// Sign every request with the secret part of your API key (the text after the last "_")
const t = Math.floor(Date.now() / 1000);
const payload = `${t}.${method} ${pathWithQuery}\n${body}`;
const v1 = crypto.createHmac("sha256", keySecret).update(payload).digest("hex");
headers["Vouchereto-Signature"] = `t=${t},v1=${v1}`;

Idempotência

Todo POST exige um cabeçalho Idempotency-Key. Repita uma requisição com a mesma chave e você recebe a resposta original, marcada com Idempotent-Replayed: true. As chaves são guardadas por pelo menos 30 dias.

Vouchers de sandbox

Com uma chave de teste, POST /v1/sandbox/vouchers cria um voucher de teste no estado que você pedir (active, reserved, redeemed, expired, risk_hold ou void) e retorna o código dele. As chaves de teste só enxergam dados de teste.

Eventos de webhook

Eventos que enviamos para o seu endpoint
EventoQuando é enviado
redemption.capturedUm voucher reservado foi capturado. Pode manter o saldo creditado com segurança.
redemption.cancelledUma reserva foi cancelada. O voucher volta a ficar ativo.
redemption.expiredUma reserva expirou sem captura.
checkout.completedUm checkout hospedado foi pago e o voucher aplicado.
checkout.expiredUma sessão de checkout hospedado expirou sem pagamento.
checkout.failedUm checkout pago foi revertido, por exemplo após um reembolso.

Erros

Códigos de erro e o que dizer ao cliente
StatusCódigoO que dizer ao cliente
404VOUCHER_INVALIDNão encontramos esse código. Confira e tente novamente.
409VOUCHER_ALREADY_REDEEMEDEste voucher já foi usado.
409VOUCHER_RESERVEDEste voucher está sendo usado em outro pagamento neste momento.
422VOUCHER_EXPIREDEste voucher expirou.
422UNIVERSAL_NOT_ACCEPTEDNão aceitamos vouchers universais. Use um voucher deste site.
422CURRENCY_MISMATCHEste voucher está em outra moeda.
429TOO_MANY_INVALID_ATTEMPTSMuitas tentativas. Aguarde alguns minutos e tente novamente.

Os erros seguem a RFC 7807 (application/problem+json), com um código estável e um request_id.

Esta página resume a API. A referência completa, com todos os campos, está publicada em www.vouchereto.com/docs/reference.

Travou em alguma coisa?

Escreva para [DEVELOPER SUPPORT EMAIL]. Um desenvolvedor lê cada mensagem.