Set the payment terms for a reserved voucher — creates a SIMPLE or CUSTOM voucher.
POST /api/v1/vouchers/:voucherId/redeem-voucher
Redeeming defines what the payee expects to receive. The voucher type is automatically determined:
- Provide
expectedPayment→ SIMPLE voucher (automatic network selection, supports FX) - Provide
networks,payments, orextras→ CUSTOM voucher (full control, no FX)
expectedPayment and networks/payments/extras — the system picks one based on what you supply.
Parameters
Path
| Name | Type | Required | Description |
|---|---|---|---|
voucherId | string | Yes | The voucher ID from the reserve response |
Body — SIMPLE voucher
UseexpectedPayment for straightforward token transfers:
| Name | Type | Required | Description |
|---|---|---|---|
expectedPayment | object | See note | The payment the payee expects to receive |
expectedPayment.network | string | Yes | Blockchain network (e.g. polygon, ethereum) |
expectedPayment.currency | string | Yes | Settlement currency symbol (e.g. EURC, USDC) |
expectedPayment.currencyAddress | string | Yes | Contract address of the settlement token on-chain |
expectedPayment.amount | string | Yes | Amount to receive, as a decimal string (e.g. "100") |
expectedPayment.wallet | object | Yes | Destination wallet |
expectedPayment.wallet.address | string | Yes | Payee’s wallet address where funds are sent |
Body — CUSTOM voucher
Usenetworks, payments, and extras for smart contract interactions:
| Name | Type | Required | Description |
|---|---|---|---|
networks | array | Yes | 1–3 blockchain network specifications |
networks[].network | string | Yes | Network name (e.g. ethereum) |
networks[].type | string | Yes | Network type (evm, solana) |
networks[].chainId | string | Yes | Chain ID (e.g. "1") |
payments | array | Yes | 1 payment instruction |
payments[].type | string | Yes | send_transaction |
payments[].input.from | string | Yes | {payer} — substituted by the wallet at resolution |
payments[].input.to | string | Yes | Contract address to call |
payments[].input.value | string | Yes | Native currency value to send ("0" for contract calls) |
payments[].input.data | string | Yes | ABI-encoded calldata |
extras | array | No | 0–5 additional instructions (e.g. call_transaction for reads) |
payeeInfo | object | No | Additional payee information |
Request examples
SIMPLE voucher (EURC payment)
CUSTOM voucher (staking contract call)
Response
Response schema
| Field | Type | Description |
|---|---|---|
id | string | Voucher identifier |
status | string | Voucher status — REDEEMED |
type | string | SIMPLE or CUSTOM |
expectedPayment | object | Present for SIMPLE vouchers (see body parameters) |
networks | array | Present for CUSTOM vouchers |
payments | array | Present for CUSTOM vouchers |
extras | array | Present for CUSTOM vouchers |
Example response (SIMPLE)
Error responses
| Status | Code | Description |
|---|---|---|
400 | already_redeemed | The voucher has already been redeemed |
400 | validation_failed | Invalid parameters — check that expectedPayment and networks/payments are not both provided |
401 | unauthorized | Missing or invalid bearer token |
404 | not_found | Voucher not found |