Vai al contenuto

Il tuo primo riscatto

  1. Ottieni le chiavi

    Crea una chiave di test nel portale esercenti. Vedi la chiave completa una sola volta; la sua ultima parte è anche il segreto con cui firmi le richieste.

  2. Prenota il voucher

    Invia il codice, la valuta e il riferimento del tuo cliente. Il voucher viene bloccato per quel cliente e non può essere usato altrove.

  3. Accredita, poi cattura

    Accredita il saldo dal tuo lato, poi cattura. Se la ricarica fallisce, annulla invece di catturare e il voucher viene rilasciato.

  4. Ascolta i webhook

    Registra un endpoint per ricevere eventi firmati per catture, annullamenti, scadenze e checkout.

Riscatti · esempio
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 }

Il ciclo di vita di un riscatto

voucher attivoprenotato
  • catturatoIl voucher è stato speso. Irreversibile.
  • annullatoL’hai annullato tu. Il voucher è di nuovo attivo.
  • prenotazione scadutaNon catturato in tempo (15 minuti per impostazione predefinita). Il voucher è di nuovo attivo.

Su cosa basare l’integrazione

Firma delle richieste

Ogni richiesta include un header Vouchereto-Signature: un timestamp e un HMAC-SHA256 di timestamp, metodo, percorso e corpo, calcolato con il segreto della tua chiave API. Accettiamo uno scarto di orologio fino a 300 secondi.

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}`;

Idempotenza

Ogni POST richiede un header Idempotency-Key. Se ripeti una richiesta con la stessa chiave ricevi la risposta originale, contrassegnata con Idempotent-Replayed: true. Le chiavi vengono conservate per almeno 30 giorni.

Voucher della sandbox

Con una chiave di test, POST /v1/sandbox/vouchers crea un voucher di test nello stato che richiedi (active, reserved, redeemed, expired, risk_hold o void) e ne restituisce il codice. Le chiavi di test vedono solo dati di test.

Eventi webhook

Eventi che inviamo al tuo endpoint
EventoQuando viene inviato
redemption.capturedUn voucher prenotato è stato catturato. Puoi mantenere il saldo accreditato.
redemption.cancelledUna prenotazione è stata annullata. Il voucher è di nuovo attivo.
redemption.expiredUna prenotazione è scaduta senza cattura.
checkout.completedUn checkout ospitato è stato pagato e il voucher applicato.
checkout.expiredUna sessione di checkout ospitato è scaduta senza pagamento.
checkout.failedUn checkout pagato è stato stornato, per esempio dopo un rimborso.

Errori

Codici di errore e cosa dire al cliente
StatoCodiceCosa dire al cliente
404VOUCHER_INVALIDNon abbiamo trovato quel codice. Controllalo e riprova.
409VOUCHER_ALREADY_REDEEMEDQuesto voucher è già stato usato.
409VOUCHER_RESERVEDQuesto voucher è in uso in un altro pagamento in questo momento.
422VOUCHER_EXPIREDQuesto voucher è scaduto.
422UNIVERSAL_NOT_ACCEPTEDNon accettiamo voucher universali. Usa un voucher per questo sito.
422CURRENCY_MISMATCHQuesto voucher è in un’altra valuta.
429TOO_MANY_INVALID_ATTEMPTSTroppi tentativi. Attendi qualche minuto e riprova.

Gli errori seguono RFC 7807 (application/problem+json) con un codice stabile e un request_id.

Questa pagina riassume l’API. Il riferimento completo con ogni campo è pubblicato su www.vouchereto.com/docs/reference.

Bloccato su qualcosa?

Scrivi a [DEVELOPER SUPPORT EMAIL]. Uno sviluppatore legge ogni messaggio.