Vouchers
Single-use, partial and cash-pickup vouchers on a code. About vouchers Live
- GET
/voucherList the caller's vouchers - POST
/voucherIssue a voucher - POST
/voucher/batchIssue a batch of vouchers - POST
/voucher/cashIssue a cash voucher - GET
/voucher/code/{voucherCode}Fetch a voucher by its code - POST
/voucher/redeemRedeem a voucher - POST
/voucher/verifyCheck a voucher without redeeming it - DELETE
/voucher/{reference}Close a voucher - GET
/voucher/{reference}Fetch one of the caller's vouchers - POST
/voucher/{reference}/blockBlock a voucher - GET
/voucher/{reference}/qrFetch a voucher's QR payload - POST
/voucher/{reference}/unblockUnblock a voucher
GET List the caller's vouchers
GET /voucher
Codes are masked. mode=SENT returns vouchers the caller issued, RECEIVED those bound to them, ALL both.
Headers
| Name | Notes |
|---|---|
Authorization | Bearer token |
X-Tenant | Your tenant |
X-Environment | test or live |
Query parameters
| Name | Default |
|---|---|
mode | Optional |
type | Optional |
status | Optional |
page | 0 |
size | 20 |
Example
Response: VoucherPageResponse
curl -X GET "https://api.bridgemoni.com/voucher?mode=value&type=value&status=value&page=0&size=20" \
-H "Authorization: Bearer $BRIDGEMONI_TOKEN" \
-H "X-Tenant: $BRIDGEMONI_TENANT" \
-H "X-Environment: $BRIDGEMONI_ENV" {
"data": {
"page": 1,
"size": 1,
"totalElements": 1,
"totalPages": 1,
"content": [
{
"voucherReference": "b3f1c2d4-5e6a-4b7c-8d9e-0f1a2b3c4d5e",
"voucherCode": "voucher code",
"voucherType": "ONLINE",
"status": "CREATED",
"faceValue": 250000.0,
"redeemedAmount": 250000.0,
"remainingAmount": 250000.0,
"currencyCode": "NGN",
"bearer": true,
"secretRequired": true,
"voucherSecret": "text",
"secretSource": "CALLER_SUPPLIED",
"partialRedemptionAllowed": true,
"maxRedemptions": 1,
"redemptionsCount": 1,
"receiverUserReference": "b3f1c2d4-5e6a-4b7c-8d9e-0f1a2b3c4d5e",
"receiverMsisdn": "+2348012345678",
"funderAccountNumber": "0123456789",
"escrowAccountNumber": "0123456789",
"qrCodeType": "ONLINE",
"qrCodeData": "qr code data",
"description": "March payroll",
"allowedChannels": [
"APP"
],
"batchReference": "b3f1c2d4-5e6a-4b7c-8d9e-0f1a2b3c4d5e",
"expiryDateTime": "2027-03-14T14:30:01",
"issuanceTransactionReference": "b3f1c2d4-5e6a-4b7c-8d9e-0f1a2b3c4d5e",
"refundTransactionReference": "b3f1c2d4-5e6a-4b7c-8d9e-0f1a2b3c4d5e",
"refundedAmount": 250000.0,
"blockedReason": "March payroll",
"blockedDateTime": "2027-03-14T14:30:01",
"redeemedDateTime": "2027-03-14T14:30:01",
"closedDateTime": "2027-03-14T14:30:01",
"creationDateTime": "2027-03-14T14:30:01"
}
]
},
"description": "List the caller's vouchers"
} Responses
| Status | When |
|---|---|
200 | Vouchers retrieved successfully |
POST Issue a voucher
POST /voucher
Escrows the full face value from the caller's main account up front. An ONLINE voucher is drawn once; a PARTIAL_OFFLINE voucher is a reusable code drawn down in parts at online terminals, PIN-validated on every draw. Cash vouchers use POST /voucher/cash. Omit voucherSecret to have a PIN generated - it is returned in this response only and is never retrievable again.
Headers
| Name | Notes |
|---|---|
Authorization | Bearer token |
X-Tenant | Your tenant |
X-Environment | test or live |
Content-Type | application/json |
Example
Request body: CreateVoucherRequest · Response: VoucherResponse
curl -X POST "https://api.bridgemoni.com/voucher" \
-H "Authorization: Bearer $BRIDGEMONI_TOKEN" \
-H "X-Tenant: $BRIDGEMONI_TENANT" \
-H "X-Environment: $BRIDGEMONI_ENV" \
-H "Content-Type: application/json" \
-d '{
"voucherType": "ONLINE",
"amount": 250000.0,
"currencyCode": "NGN",
"description": "March payroll",
"voucherSecret": "text",
"secretRequired": true,
"receiverUserReference": "b3f1c2d4-5e6a-4b7c-8d9e-0f1a2b3c4d5e",
"receiverMsisdn": "+2348012345678",
"receiverEmailAddress": "ada@example.com",
"partialRedemptionAllowed": true,
"maxRedemptions": 1,
"expiryDateTime": "2027-03-14T14:30:01",
"allowedChannels": [
"APP"
],
"idempotencyKey": "text"
}' {
"voucherType": "ONLINE",
"amount": 250000.0,
"currencyCode": "NGN",
"description": "March payroll",
"voucherSecret": "text",
"secretRequired": true,
"receiverUserReference": "b3f1c2d4-5e6a-4b7c-8d9e-0f1a2b3c4d5e",
"receiverMsisdn": "+2348012345678",
"receiverEmailAddress": "ada@example.com",
"partialRedemptionAllowed": true,
"maxRedemptions": 1,
"expiryDateTime": "2027-03-14T14:30:01",
"allowedChannels": [
"APP"
],
"idempotencyKey": "text"
} {
"data": {
"voucherReference": "b3f1c2d4-5e6a-4b7c-8d9e-0f1a2b3c4d5e",
"voucherCode": "voucher code",
"voucherType": "ONLINE",
"status": "CREATED",
"faceValue": 250000.0,
"redeemedAmount": 250000.0,
"remainingAmount": 250000.0,
"currencyCode": "NGN",
"bearer": true,
"secretRequired": true,
"voucherSecret": "text",
"secretSource": "CALLER_SUPPLIED",
"partialRedemptionAllowed": true,
"maxRedemptions": 1,
"redemptionsCount": 1,
"receiverUserReference": "b3f1c2d4-5e6a-4b7c-8d9e-0f1a2b3c4d5e",
"receiverMsisdn": "+2348012345678",
"funderAccountNumber": "0123456789",
"escrowAccountNumber": "0123456789",
"qrCodeType": "ONLINE",
"qrCodeData": "qr code data",
"description": "March payroll",
"allowedChannels": [
"APP"
],
"batchReference": "b3f1c2d4-5e6a-4b7c-8d9e-0f1a2b3c4d5e",
"expiryDateTime": "2027-03-14T14:30:01",
"issuanceTransactionReference": "b3f1c2d4-5e6a-4b7c-8d9e-0f1a2b3c4d5e",
"refundTransactionReference": "b3f1c2d4-5e6a-4b7c-8d9e-0f1a2b3c4d5e",
"refundedAmount": 250000.0,
"blockedReason": "March payroll",
"blockedDateTime": "2027-03-14T14:30:01",
"redeemedDateTime": "2027-03-14T14:30:01",
"closedDateTime": "2027-03-14T14:30:01",
"creationDateTime": "2027-03-14T14:30:01"
},
"description": "Issue a voucher"
} Responses
| Status | When |
|---|---|
200 | Voucher created successfully |
POST Issue a batch of vouchers
POST /voucher/batch
Each entry is a full independent voucher, not a denomination of a larger one. Entries are issued one at a time in their own transactions, so an entry that cannot be funded is reported under 'failures' rather than rolling back the rest. PINs are always generated here - supplying one for the whole batch is what the per-creator PIN-reuse guard exists to prevent.
Headers
| Name | Notes |
|---|---|
Authorization | Bearer token |
X-Tenant | Your tenant |
X-Environment | test or live |
Content-Type | application/json |
Example
Request body: CreateVoucherBatchRequest · Response: VoucherBatchResponse
curl -X POST "https://api.bridgemoni.com/voucher/batch" \
-H "Authorization: Bearer $BRIDGEMONI_TOKEN" \
-H "X-Tenant: $BRIDGEMONI_TENANT" \
-H "X-Environment: $BRIDGEMONI_ENV" \
-H "Content-Type: application/json" \
-d '{
"voucherType": "ONLINE",
"count": 1,
"unitAmount": 250000.0,
"currencyCode": "NGN",
"purpose": "March payroll",
"partialRedemptionAllowed": true,
"maxRedemptions": 1,
"secretRequired": true,
"expiryDateTime": "2027-03-14T14:30:01",
"allowedChannels": [
"APP"
],
"idempotencyKey": "text"
}' {
"voucherType": "ONLINE",
"count": 1,
"unitAmount": 250000.0,
"currencyCode": "NGN",
"purpose": "March payroll",
"partialRedemptionAllowed": true,
"maxRedemptions": 1,
"secretRequired": true,
"expiryDateTime": "2027-03-14T14:30:01",
"allowedChannels": [
"APP"
],
"idempotencyKey": "text"
} {
"data": {
"batchReference": "b3f1c2d4-5e6a-4b7c-8d9e-0f1a2b3c4d5e",
"status": "ISSUING",
"count": 1,
"issuedCount": 1,
"failedCount": 1,
"unitAmount": 250000.0,
"totalAmount": 250000.0,
"currencyCode": "NGN",
"vouchers": [
{
"voucherReference": "b3f1c2d4-5e6a-4b7c-8d9e-0f1a2b3c4d5e",
"voucherCode": "voucher code",
"voucherType": "ONLINE",
"status": "CREATED",
"faceValue": 250000.0,
"redeemedAmount": 250000.0,
"remainingAmount": 250000.0,
"currencyCode": "NGN",
"bearer": true,
"secretRequired": true,
"voucherSecret": "text",
"secretSource": "CALLER_SUPPLIED",
"partialRedemptionAllowed": true,
"maxRedemptions": 1,
"redemptionsCount": 1,
"receiverUserReference": "b3f1c2d4-5e6a-4b7c-8d9e-0f1a2b3c4d5e",
"receiverMsisdn": "+2348012345678",
"funderAccountNumber": "0123456789",
"escrowAccountNumber": "0123456789",
"qrCodeType": "ONLINE",
"qrCodeData": "qr code data",
"description": "March payroll",
"allowedChannels": [
"APP"
],
"batchReference": "b3f1c2d4-5e6a-4b7c-8d9e-0f1a2b3c4d5e",
"expiryDateTime": "2027-03-14T14:30:01",
"issuanceTransactionReference": "b3f1c2d4-5e6a-4b7c-8d9e-0f1a2b3c4d5e",
"refundTransactionReference": "b3f1c2d4-5e6a-4b7c-8d9e-0f1a2b3c4d5e",
"refundedAmount": 250000.0,
"blockedReason": "March payroll",
"blockedDateTime": "2027-03-14T14:30:01",
"redeemedDateTime": "2027-03-14T14:30:01",
"closedDateTime": "2027-03-14T14:30:01",
"creationDateTime": "2027-03-14T14:30:01"
}
],
"failures": [
{
"index": 1,
"failureReason": "March payroll"
}
]
},
"description": "Issue a batch of vouchers"
} Responses
| Status | When |
|---|---|
200 | Voucher batch issued |
POST Issue a cash voucher
POST /voucher/cash
For an agent who has just taken physical cash over the counter. Debits the calling agent's own main account and credits their voucher escrow, leaving them flat - the cash in the drawer is reimbursement for the float spent. At payout the escrow is debited and the redeeming agent's main credited. Restricted to agent/merchant roles; fails with INSUFFICIENT_AGENT_FLOAT if the agent is not pre-funded. A PIN is always issued and cannot be switched off - it is the only thing gating the held value, and the receiver may have no Bridge account at all.
Headers
| Name | Notes |
|---|---|
Authorization | Bearer token |
X-Tenant | Your tenant |
X-Environment | test or live |
Content-Type | application/json |
Example
Request body: CreateCashVoucherRequest · Response: VoucherResponse
curl -X POST "https://api.bridgemoni.com/voucher/cash" \
-H "Authorization: Bearer $BRIDGEMONI_TOKEN" \
-H "X-Tenant: $BRIDGEMONI_TENANT" \
-H "X-Environment: $BRIDGEMONI_ENV" \
-H "Content-Type: application/json" \
-d '{
"amount": 250000.0,
"currencyCode": "NGN",
"receiverMsisdn": "+2348012345678",
"receiverFirstName": "first name",
"receiverLastName": "last name",
"description": "March payroll",
"voucherSecret": "text",
"expiryDateTime": "2027-03-14T14:30:01",
"allowedRedeemerRole": "text",
"idempotencyKey": "text"
}' {
"amount": 250000.0,
"currencyCode": "NGN",
"receiverMsisdn": "+2348012345678",
"receiverFirstName": "first name",
"receiverLastName": "last name",
"description": "March payroll",
"voucherSecret": "text",
"expiryDateTime": "2027-03-14T14:30:01",
"allowedRedeemerRole": "text",
"idempotencyKey": "text"
} {
"data": {
"voucherReference": "b3f1c2d4-5e6a-4b7c-8d9e-0f1a2b3c4d5e",
"voucherCode": "voucher code",
"voucherType": "ONLINE",
"status": "CREATED",
"faceValue": 250000.0,
"redeemedAmount": 250000.0,
"remainingAmount": 250000.0,
"currencyCode": "NGN",
"bearer": true,
"secretRequired": true,
"voucherSecret": "text",
"secretSource": "CALLER_SUPPLIED",
"partialRedemptionAllowed": true,
"maxRedemptions": 1,
"redemptionsCount": 1,
"receiverUserReference": "b3f1c2d4-5e6a-4b7c-8d9e-0f1a2b3c4d5e",
"receiverMsisdn": "+2348012345678",
"funderAccountNumber": "0123456789",
"escrowAccountNumber": "0123456789",
"qrCodeType": "ONLINE",
"qrCodeData": "qr code data",
"description": "March payroll",
"allowedChannels": [
"APP"
],
"batchReference": "b3f1c2d4-5e6a-4b7c-8d9e-0f1a2b3c4d5e",
"expiryDateTime": "2027-03-14T14:30:01",
"issuanceTransactionReference": "b3f1c2d4-5e6a-4b7c-8d9e-0f1a2b3c4d5e",
"refundTransactionReference": "b3f1c2d4-5e6a-4b7c-8d9e-0f1a2b3c4d5e",
"refundedAmount": 250000.0,
"blockedReason": "March payroll",
"blockedDateTime": "2027-03-14T14:30:01",
"redeemedDateTime": "2027-03-14T14:30:01",
"closedDateTime": "2027-03-14T14:30:01",
"creationDateTime": "2027-03-14T14:30:01"
},
"description": "Issue a cash voucher"
} Responses
| Status | When |
|---|---|
200 | Cash voucher created successfully |
GET Fetch a voucher by its code
GET /voucher/code/{voucherCode}
Receiver-facing and redacted - the code itself is returned masked.
Headers
| Name | Notes |
|---|---|
Authorization | Bearer token |
X-Tenant | Your tenant |
X-Environment | test or live |
Path parameters
| Name |
|---|
voucherCode |
Example
Response: VoucherResponse
curl -X GET "https://api.bridgemoni.com/voucher/code/BRG-001" \
-H "Authorization: Bearer $BRIDGEMONI_TOKEN" \
-H "X-Tenant: $BRIDGEMONI_TENANT" \
-H "X-Environment: $BRIDGEMONI_ENV" {
"data": {
"voucherReference": "b3f1c2d4-5e6a-4b7c-8d9e-0f1a2b3c4d5e",
"voucherCode": "voucher code",
"voucherType": "ONLINE",
"status": "CREATED",
"faceValue": 250000.0,
"redeemedAmount": 250000.0,
"remainingAmount": 250000.0,
"currencyCode": "NGN",
"bearer": true,
"secretRequired": true,
"voucherSecret": "text",
"secretSource": "CALLER_SUPPLIED",
"partialRedemptionAllowed": true,
"maxRedemptions": 1,
"redemptionsCount": 1,
"receiverUserReference": "b3f1c2d4-5e6a-4b7c-8d9e-0f1a2b3c4d5e",
"receiverMsisdn": "+2348012345678",
"funderAccountNumber": "0123456789",
"escrowAccountNumber": "0123456789",
"qrCodeType": "ONLINE",
"qrCodeData": "qr code data",
"description": "March payroll",
"allowedChannels": [
"APP"
],
"batchReference": "b3f1c2d4-5e6a-4b7c-8d9e-0f1a2b3c4d5e",
"expiryDateTime": "2027-03-14T14:30:01",
"issuanceTransactionReference": "b3f1c2d4-5e6a-4b7c-8d9e-0f1a2b3c4d5e",
"refundTransactionReference": "b3f1c2d4-5e6a-4b7c-8d9e-0f1a2b3c4d5e",
"refundedAmount": 250000.0,
"blockedReason": "March payroll",
"blockedDateTime": "2027-03-14T14:30:01",
"redeemedDateTime": "2027-03-14T14:30:01",
"closedDateTime": "2027-03-14T14:30:01",
"creationDateTime": "2027-03-14T14:30:01"
},
"description": "Fetch a voucher by its code"
} Responses
| Status | When |
|---|---|
200 | Voucher retrieved successfully |
POST Redeem a voucher
POST /voucher/redeem
Draws value out of a voucher and credits the caller's main account. For a reusable PARTIAL_OFFLINE voucher this is called once per draw with the same code and PIN; the response carries the remaining balance. Supply an idempotencyKey - it is what stops a timed-out terminal retry consuming a second slice of the remainder. Every failure returns the same generic rejection by design.
Headers
| Name | Notes |
|---|---|
Authorization | Bearer token |
X-Tenant | Your tenant |
X-Environment | test or live |
Content-Type | application/json |
Example
Request body: RedeemVoucherRequest · Response: VoucherRedemptionResponse
curl -X POST "https://api.bridgemoni.com/voucher/redeem" \
-H "Authorization: Bearer $BRIDGEMONI_TOKEN" \
-H "X-Tenant: $BRIDGEMONI_TENANT" \
-H "X-Environment: $BRIDGEMONI_ENV" \
-H "Content-Type: application/json" \
-d '{
"voucherCode": "voucher code",
"voucherSecret": "text",
"amount": 250000.0,
"currencyCode": "NGN",
"payoutMode": "LEDGER",
"channel": "APP",
"deviceId": "a7f3-k2m9-4c1d-8e5b",
"terminalReference": "text",
"idempotencyKey": "text"
}' {
"voucherCode": "voucher code",
"voucherSecret": "text",
"amount": 250000.0,
"currencyCode": "NGN",
"payoutMode": "LEDGER",
"channel": "APP",
"deviceId": "a7f3-k2m9-4c1d-8e5b",
"terminalReference": "text",
"idempotencyKey": "text"
} {
"data": {
"redemptionReference": "b3f1c2d4-5e6a-4b7c-8d9e-0f1a2b3c4d5e",
"voucherReference": "b3f1c2d4-5e6a-4b7c-8d9e-0f1a2b3c4d5e",
"voucherCode": "voucher code",
"voucherType": "ONLINE",
"status": "CREATED",
"redemptionSequence": 1,
"amount": 250000.0,
"netAmount": 250000.0,
"faceValue": 250000.0,
"redeemedAmount": 250000.0,
"remainingAmount": 250000.0,
"redemptionsCount": 1,
"maxRedemptions": 1,
"currencyCode": "NGN",
"payoutMode": "LEDGER",
"redeemerAccountNumber": "0123456789",
"transactionReference": "financial transaction reference",
"postingDateTime": "2027-03-14T14:30:01"
},
"description": "Redeem a voucher"
} Responses
| Status | When |
|---|---|
200 | Voucher redeemed successfully |
POST Check a voucher without redeeming it
POST /voucher/verify
Moves no money. A terminal accepting a PARTIAL_OFFLINE voucher MUST call this before charging: the face value baked into the signed QR payload goes stale as soon as the first draw lands, and only remainingAmount here is safe to charge against. An unusable voucher returns redeemable=false with no reason - a bad code, a blocked voucher and an exhausted one are deliberately indistinguishable.
Headers
| Name | Notes |
|---|---|
Authorization | Bearer token |
X-Tenant | Your tenant |
X-Environment | test or live |
Content-Type | application/json |
Example
Request body: VerifyVoucherRequest · Response: VoucherVerificationResponse
curl -X POST "https://api.bridgemoni.com/voucher/verify" \
-H "Authorization: Bearer $BRIDGEMONI_TOKEN" \
-H "X-Tenant: $BRIDGEMONI_TENANT" \
-H "X-Environment: $BRIDGEMONI_ENV" \
-H "Content-Type: application/json" \
-d '{
"voucherCode": "voucher code",
"channel": "APP"
}' {
"voucherCode": "voucher code",
"channel": "APP"
} {
"data": {
"redeemable": true,
"voucherType": "ONLINE",
"status": "CREATED",
"faceValue": 250000.0,
"remainingAmount": 250000.0,
"currencyCode": "NGN",
"secretRequired": true,
"partialRedemptionAllowed": true,
"receiverName": "Ada Obi",
"expiryDateTime": "2027-03-14T14:30:01"
},
"description": "Check a voucher without redeeming it"
} Responses
| Status | When |
|---|---|
200 | Voucher verified |
DELETE Close a voucher
DELETE /voucher/{reference}
Terminal. Any unspent balance is returned to the creator's main account and the voucher can never be redeemed again. The row is retained for audit rather than removed.
Headers
| Name | Notes |
|---|---|
Authorization | Bearer token |
X-Tenant | Your tenant |
X-Environment | test or live |
Path parameters
| Name |
|---|
reference |
Example
Response: VoucherResponse
curl -X DELETE "https://api.bridgemoni.com/voucher/b3f1c2d4-5e6a-4b7c-8d9e-0f1a2b3c4d5e" \
-H "Authorization: Bearer $BRIDGEMONI_TOKEN" \
-H "X-Tenant: $BRIDGEMONI_TENANT" \
-H "X-Environment: $BRIDGEMONI_ENV" {
"data": {
"voucherReference": "b3f1c2d4-5e6a-4b7c-8d9e-0f1a2b3c4d5e",
"voucherCode": "voucher code",
"voucherType": "ONLINE",
"status": "CREATED",
"faceValue": 250000.0,
"redeemedAmount": 250000.0,
"remainingAmount": 250000.0,
"currencyCode": "NGN",
"bearer": true,
"secretRequired": true,
"voucherSecret": "text",
"secretSource": "CALLER_SUPPLIED",
"partialRedemptionAllowed": true,
"maxRedemptions": 1,
"redemptionsCount": 1,
"receiverUserReference": "b3f1c2d4-5e6a-4b7c-8d9e-0f1a2b3c4d5e",
"receiverMsisdn": "+2348012345678",
"funderAccountNumber": "0123456789",
"escrowAccountNumber": "0123456789",
"qrCodeType": "ONLINE",
"qrCodeData": "qr code data",
"description": "March payroll",
"allowedChannels": [
"APP"
],
"batchReference": "b3f1c2d4-5e6a-4b7c-8d9e-0f1a2b3c4d5e",
"expiryDateTime": "2027-03-14T14:30:01",
"issuanceTransactionReference": "b3f1c2d4-5e6a-4b7c-8d9e-0f1a2b3c4d5e",
"refundTransactionReference": "b3f1c2d4-5e6a-4b7c-8d9e-0f1a2b3c4d5e",
"refundedAmount": 250000.0,
"blockedReason": "March payroll",
"blockedDateTime": "2027-03-14T14:30:01",
"redeemedDateTime": "2027-03-14T14:30:01",
"closedDateTime": "2027-03-14T14:30:01",
"creationDateTime": "2027-03-14T14:30:01"
},
"description": "Close a voucher"
} Responses
| Status | When |
|---|---|
200 | Voucher closed successfully |
GET Fetch one of the caller's vouchers
GET /voucher/{reference}
Headers
| Name | Notes |
|---|---|
Authorization | Bearer token |
X-Tenant | Your tenant |
X-Environment | test or live |
Path parameters
| Name |
|---|
reference |
Example
Response: VoucherResponse
curl -X GET "https://api.bridgemoni.com/voucher/b3f1c2d4-5e6a-4b7c-8d9e-0f1a2b3c4d5e" \
-H "Authorization: Bearer $BRIDGEMONI_TOKEN" \
-H "X-Tenant: $BRIDGEMONI_TENANT" \
-H "X-Environment: $BRIDGEMONI_ENV" {
"data": {
"voucherReference": "b3f1c2d4-5e6a-4b7c-8d9e-0f1a2b3c4d5e",
"voucherCode": "voucher code",
"voucherType": "ONLINE",
"status": "CREATED",
"faceValue": 250000.0,
"redeemedAmount": 250000.0,
"remainingAmount": 250000.0,
"currencyCode": "NGN",
"bearer": true,
"secretRequired": true,
"voucherSecret": "text",
"secretSource": "CALLER_SUPPLIED",
"partialRedemptionAllowed": true,
"maxRedemptions": 1,
"redemptionsCount": 1,
"receiverUserReference": "b3f1c2d4-5e6a-4b7c-8d9e-0f1a2b3c4d5e",
"receiverMsisdn": "+2348012345678",
"funderAccountNumber": "0123456789",
"escrowAccountNumber": "0123456789",
"qrCodeType": "ONLINE",
"qrCodeData": "qr code data",
"description": "March payroll",
"allowedChannels": [
"APP"
],
"batchReference": "b3f1c2d4-5e6a-4b7c-8d9e-0f1a2b3c4d5e",
"expiryDateTime": "2027-03-14T14:30:01",
"issuanceTransactionReference": "b3f1c2d4-5e6a-4b7c-8d9e-0f1a2b3c4d5e",
"refundTransactionReference": "b3f1c2d4-5e6a-4b7c-8d9e-0f1a2b3c4d5e",
"refundedAmount": 250000.0,
"blockedReason": "March payroll",
"blockedDateTime": "2027-03-14T14:30:01",
"redeemedDateTime": "2027-03-14T14:30:01",
"closedDateTime": "2027-03-14T14:30:01",
"creationDateTime": "2027-03-14T14:30:01"
},
"description": "Fetch one of the caller's vouchers"
} Responses
| Status | When |
|---|---|
200 | Voucher retrieved successfully |
POST Block a voucher
POST /voucher/{reference}/block
Stops redemption without releasing the escrowed value. Reversible - unblock restores the status the voucher held before, which for a part-drawn voucher is PARTIALLY_REDEEMED rather than CREATED.
Headers
| Name | Notes |
|---|---|
Authorization | Bearer token |
X-Tenant | Your tenant |
X-Environment | test or live |
Path parameters
| Name |
|---|
reference |
Example
Response: VoucherResponse
curl -X POST "https://api.bridgemoni.com/voucher/b3f1c2d4-5e6a-4b7c-8d9e-0f1a2b3c4d5e/block" \
-H "Authorization: Bearer $BRIDGEMONI_TOKEN" \
-H "X-Tenant: $BRIDGEMONI_TENANT" \
-H "X-Environment: $BRIDGEMONI_ENV" {
"data": {
"voucherReference": "b3f1c2d4-5e6a-4b7c-8d9e-0f1a2b3c4d5e",
"voucherCode": "voucher code",
"voucherType": "ONLINE",
"status": "CREATED",
"faceValue": 250000.0,
"redeemedAmount": 250000.0,
"remainingAmount": 250000.0,
"currencyCode": "NGN",
"bearer": true,
"secretRequired": true,
"voucherSecret": "text",
"secretSource": "CALLER_SUPPLIED",
"partialRedemptionAllowed": true,
"maxRedemptions": 1,
"redemptionsCount": 1,
"receiverUserReference": "b3f1c2d4-5e6a-4b7c-8d9e-0f1a2b3c4d5e",
"receiverMsisdn": "+2348012345678",
"funderAccountNumber": "0123456789",
"escrowAccountNumber": "0123456789",
"qrCodeType": "ONLINE",
"qrCodeData": "qr code data",
"description": "March payroll",
"allowedChannels": [
"APP"
],
"batchReference": "b3f1c2d4-5e6a-4b7c-8d9e-0f1a2b3c4d5e",
"expiryDateTime": "2027-03-14T14:30:01",
"issuanceTransactionReference": "b3f1c2d4-5e6a-4b7c-8d9e-0f1a2b3c4d5e",
"refundTransactionReference": "b3f1c2d4-5e6a-4b7c-8d9e-0f1a2b3c4d5e",
"refundedAmount": 250000.0,
"blockedReason": "March payroll",
"blockedDateTime": "2027-03-14T14:30:01",
"redeemedDateTime": "2027-03-14T14:30:01",
"closedDateTime": "2027-03-14T14:30:01",
"creationDateTime": "2027-03-14T14:30:01"
},
"description": "Block a voucher"
} Responses
| Status | When |
|---|---|
200 | Voucher blocked successfully |
GET Fetch a voucher's QR payload
GET /voucher/{reference}/qr
For an OFFLINE payload the embedded faceValue is what the voucher was issued for and is signed at issuance - it is NOT the spendable balance once any draw has landed. A terminal must call POST /voucher/verify for the true remaining amount.
Headers
| Name | Notes |
|---|---|
Authorization | Bearer token |
X-Tenant | Your tenant |
X-Environment | test or live |
Path parameters
| Name |
|---|
reference |
Example
Response: VoucherQrResponse
curl -X GET "https://api.bridgemoni.com/voucher/b3f1c2d4-5e6a-4b7c-8d9e-0f1a2b3c4d5e/qr" \
-H "Authorization: Bearer $BRIDGEMONI_TOKEN" \
-H "X-Tenant: $BRIDGEMONI_TENANT" \
-H "X-Environment: $BRIDGEMONI_ENV" {
"data": {
"voucherReference": "b3f1c2d4-5e6a-4b7c-8d9e-0f1a2b3c4d5e",
"qrCodeType": "ONLINE",
"qrCodeData": "qr code data",
"faceValue": 250000.0,
"currencyCode": "NGN",
"expiryDateTime": "2027-03-14T14:30:01"
},
"description": "Fetch a voucher's QR payload"
} Responses
| Status | When |
|---|---|
200 | Voucher QR payload retrieved successfully |
POST Unblock a voucher
POST /voucher/{reference}/unblock
Headers
| Name | Notes |
|---|---|
Authorization | Bearer token |
X-Tenant | Your tenant |
X-Environment | test or live |
Path parameters
| Name |
|---|
reference |
Example
Response: VoucherResponse
curl -X POST "https://api.bridgemoni.com/voucher/b3f1c2d4-5e6a-4b7c-8d9e-0f1a2b3c4d5e/unblock" \
-H "Authorization: Bearer $BRIDGEMONI_TOKEN" \
-H "X-Tenant: $BRIDGEMONI_TENANT" \
-H "X-Environment: $BRIDGEMONI_ENV" {
"data": {
"voucherReference": "b3f1c2d4-5e6a-4b7c-8d9e-0f1a2b3c4d5e",
"voucherCode": "voucher code",
"voucherType": "ONLINE",
"status": "CREATED",
"faceValue": 250000.0,
"redeemedAmount": 250000.0,
"remainingAmount": 250000.0,
"currencyCode": "NGN",
"bearer": true,
"secretRequired": true,
"voucherSecret": "text",
"secretSource": "CALLER_SUPPLIED",
"partialRedemptionAllowed": true,
"maxRedemptions": 1,
"redemptionsCount": 1,
"receiverUserReference": "b3f1c2d4-5e6a-4b7c-8d9e-0f1a2b3c4d5e",
"receiverMsisdn": "+2348012345678",
"funderAccountNumber": "0123456789",
"escrowAccountNumber": "0123456789",
"qrCodeType": "ONLINE",
"qrCodeData": "qr code data",
"description": "March payroll",
"allowedChannels": [
"APP"
],
"batchReference": "b3f1c2d4-5e6a-4b7c-8d9e-0f1a2b3c4d5e",
"expiryDateTime": "2027-03-14T14:30:01",
"issuanceTransactionReference": "b3f1c2d4-5e6a-4b7c-8d9e-0f1a2b3c4d5e",
"refundTransactionReference": "b3f1c2d4-5e6a-4b7c-8d9e-0f1a2b3c4d5e",
"refundedAmount": 250000.0,
"blockedReason": "March payroll",
"blockedDateTime": "2027-03-14T14:30:01",
"redeemedDateTime": "2027-03-14T14:30:01",
"closedDateTime": "2027-03-14T14:30:01",
"creationDateTime": "2027-03-14T14:30:01"
},
"description": "Unblock a voucher"
} Responses
| Status | When |
|---|---|
200 | Voucher unblocked successfully |
Generated from the OpenAPI document. Branch on the HTTP status: there is no machine-readable error code on the wire. Errors