Propose an alternative payment currency — used for FX negotiation.
POST /api/v1/vouchers/:voucherId/negotiate-voucher
If the payer doesn’t hold the currency the payee requested, their wallet can negotiate by proposing an alternative currency they do hold. The system calculates the exchange rate and fills in the required amount.
This only applies to SIMPLE vouchers. The negotiation happens on the payer’s side — the payee’s expectedPayment remains unchanged, and a suppliedPayment is added to the voucher.
Parameters
Path
| Name | Type | Required | Description |
|---|---|---|---|
voucherId | string | Yes | The voucher ID to negotiate |
Body
| Name | Type | Required | Description |
|---|---|---|---|
suppliedPayment | object | Yes | The payment the payer is offering |
suppliedPayment.network | string | Yes | Blockchain network |
suppliedPayment.currency | string | Yes | Currency symbol (e.g. USDC) |
suppliedPayment.currencyAddress | string | Yes | Contract address of the offered token |
suppliedPayment.amount | string | Yes | Amount the payer is offering |
suppliedPayment.wallet | object | Yes | Payer’s wallet |
suppliedPayment.wallet.address | string | Yes | Payer’s wallet address |
Request example
Response
Response schema
| Field | Type | Description |
|---|---|---|
id | string | Voucher identifier |
status | string | Voucher status |
expectedPayment | object | The payee’s original request (unchanged) |
suppliedPayment | object | The payer’s proposed alternative, with FX-adjusted amount |
Example response
Error responses
| Status | Code | Description |
|---|---|---|
400 | not_simple | Negotiation is only available for SIMPLE vouchers |
400 | different_network | The supplied currency must be on the same network as the expected currency |
401 | unauthorized | Missing or invalid bearer token |
404 | not_found | Voucher not found |