Buy now pay later returns and disputes
- POST
/bnpl/plan/{reference}/cancelCancel a plan inside its cooling-off window - GET
/bnpl/plan/{reference}/disputeList the disputes raised on a plan - POST
/bnpl/plan/{reference}/disputeRaise a dispute on a plan - POST
/bnpl/plan/{reference}/returnRecord a return against a plan
POST Cancel a plan inside its cooling-off window
POST /bnpl/plan/{reference}/cancel
Free of charge and without the merchant's agreement, which is what makes it a right rather than a concession. The balance goes, every charge on the plan goes with it, and any down payment comes back.
Headers
| Name | Notes |
|---|---|
Authorization | Bearer token |
X-Tenant | Your tenant |
X-Environment | test or live |
Path parameters
| Name |
|---|
reference |
Example
Response: GenericResponsePlanResponse
curl -X POST "https://api.bridgemoni.com/bnpl/plan/b3f1c2d4-5e6a-4b7c-8d9e-0f1a2b3c4d5e/cancel" \
-H "Authorization: Bearer $BRIDGEMONI_TOKEN" \
-H "X-Tenant: $BRIDGEMONI_TENANT" \
-H "X-Environment: $BRIDGEMONI_ENV" {
"data": {
"reference": "b3f1c2d4-5e6a-4b7c-8d9e-0f1a2b3c4d5e",
"customerReference": "b3f1c2d4-5e6a-4b7c-8d9e-0f1a2b3c4d5e",
"merchantReference": "b3f1c2d4-5e6a-4b7c-8d9e-0f1a2b3c4d5e",
"productReference": "b3f1c2d4-5e6a-4b7c-8d9e-0f1a2b3c4d5e",
"fundingModel": "MERCHANT_FUNDED",
"currencyCode": "string",
"status": "OFFERED",
"basketAmount": 0,
"downPaymentAmount": 0,
"totalPayable": 0,
"totalCostOfCredit": 0,
"aprBasisPoints": 0,
"outstandingBalance": 0,
"allocationOrder": "OLDEST_FIRST",
"termsHash": "string",
"paymentCode": "string",
"activatedAt": "2026-09-25T10:00:00Z",
"coolingOffExpiresAt": "2026-09-25T10:00:00Z",
"daysPastDue": 0,
"settledAt": "2026-09-25T10:00:00Z",
"schedule": [
{
"reference": "b3f1c2d4-5e6a-4b7c-8d9e-0f1a2b3c4d5e",
"sequence": 0,
"dueDate": "2026-09-25",
"amountDue": 0,
"amountPaid": 0,
"outstanding": 0,
"status": "SCHEDULED",
"daysPastDue": 0
}
]
},
"description": "Plan cancelled"
} Responses
| Status | When |
|---|---|
200 | Plan cancelled |
GET List the disputes raised on a plan
GET /bnpl/plan/{reference}/dispute
Headers
| Name | Notes |
|---|---|
Authorization | Bearer token |
X-Tenant | Your tenant |
X-Environment | test or live |
Path parameters
| Name |
|---|
reference |
Example
Response: GenericResponseListDisputeResponse
curl -X GET "https://api.bridgemoni.com/bnpl/plan/b3f1c2d4-5e6a-4b7c-8d9e-0f1a2b3c4d5e/dispute" \
-H "Authorization: Bearer $BRIDGEMONI_TOKEN" \
-H "X-Tenant: $BRIDGEMONI_TENANT" \
-H "X-Environment: $BRIDGEMONI_ENV" {
"data": [
{
"reference": "b3f1c2d4-5e6a-4b7c-8d9e-0f1a2b3c4d5e",
"ticketReference": "b3f1c2d4-5e6a-4b7c-8d9e-0f1a2b3c4d5e",
"status": "OPEN",
"creationDateTime": "2026-09-25T10:00:00Z"
}
],
"description": "Disputes retrieved successfully"
} Responses
| Status | When |
|---|---|
200 | Disputes retrieved successfully |
POST Raise a dispute on a plan
POST /bnpl/plan/{reference}/dispute
While a dispute stands the plan stops ageing: it takes no payment, accrues no late charge, is not contacted about arrears and is not furnished to a bureau. A customer should not acquire a credit record for refusing to pay for goods they never received.
Headers
| Name | Notes |
|---|---|
Authorization | Bearer token |
X-Tenant | Your tenant |
X-Environment | test or live |
Content-Type | application/json |
Path parameters
| Name |
|---|
reference |
Example
Request body: RaiseDisputeRequest · Response: GenericResponseDisputeResponse
curl -X POST "https://api.bridgemoni.com/bnpl/plan/b3f1c2d4-5e6a-4b7c-8d9e-0f1a2b3c4d5e/dispute" \
-H "Authorization: Bearer $BRIDGEMONI_TOKEN" \
-H "X-Tenant: $BRIDGEMONI_TENANT" \
-H "X-Environment: $BRIDGEMONI_ENV" \
-H "Content-Type: application/json" \
-d '{
"reason": "string"
}' {
"reason": "string"
} {
"data": {
"reference": "b3f1c2d4-5e6a-4b7c-8d9e-0f1a2b3c4d5e",
"ticketReference": "b3f1c2d4-5e6a-4b7c-8d9e-0f1a2b3c4d5e",
"status": "OPEN",
"creationDateTime": "2026-09-25T10:00:00Z"
},
"description": "Dispute raised"
} Responses
| Status | When |
|---|---|
200 | Dispute raised |
POST Record a return against a plan
POST /bnpl/plan/{reference}/return
The funder is made whole before the customer sees a cent: the refund clears what is still owed on the plan, the schedule shrinks from the back so the next payment date does not move, and only what is left over is paid out. It goes to the wallet the plan is held against and nowhere else - there is no destination on the request, because a refund whose destination is an input is a payout instruction wearing a refund's name. Requires the REFUNDER role on the merchant.
Headers
| Name | Notes |
|---|---|
Authorization | Bearer token |
X-Tenant | Your tenant |
X-Environment | test or live |
Content-Type | application/json |
Path parameters
| Name |
|---|
reference |
Example
Request body: RecordReturnRequest · Response: GenericResponseReturnResponse
curl -X POST "https://api.bridgemoni.com/bnpl/plan/b3f1c2d4-5e6a-4b7c-8d9e-0f1a2b3c4d5e/return" \
-H "Authorization: Bearer $BRIDGEMONI_TOKEN" \
-H "X-Tenant: $BRIDGEMONI_TENANT" \
-H "X-Environment: $BRIDGEMONI_ENV" \
-H "Content-Type: application/json" \
-d '{
"amount": 0,
"reason": "string",
"merchantReturnReference": "b3f1c2d4-5e6a-4b7c-8d9e-0f1a2b3c4d5e",
"idempotencyKey": "string"
}' {
"amount": 0,
"reason": "string",
"merchantReturnReference": "b3f1c2d4-5e6a-4b7c-8d9e-0f1a2b3c4d5e",
"idempotencyKey": "string"
} {
"data": {
"adjustmentReference": "b3f1c2d4-5e6a-4b7c-8d9e-0f1a2b3c4d5e",
"planReference": "b3f1c2d4-5e6a-4b7c-8d9e-0f1a2b3c4d5e",
"refundAmount": 0,
"outstandingBefore": 0,
"appliedToFunder": 0,
"paidToCustomer": 0,
"discountUnwound": 0,
"customerRefundTransactionReference": "b3f1c2d4-5e6a-4b7c-8d9e-0f1a2b3c4d5e",
"planStatusAfter": "OFFERED",
"outstandingAfter": 0,
"supersededInstalments": [
0
]
},
"description": "Return recorded"
} Responses
| Status | When |
|---|---|
200 | Return recorded |
Generated from the OpenAPI document. Branch on the HTTP status: there is no machine-readable error code on the wire. Errors