Escrow-backed collections
- POST
/collection/escrow/{reference}/fundFund a held collection - POST
/collection/escrow/{reference}/gate/{gateReference}/claimClaim a gate and serve the payer - POST
/collector/{reference}/collection/escrowCreate a collection whose money is held behind gates
POST Fund a held collection
POST /collection/escrow/{reference}/fund
The checkpoint where the release rule is settled. If the payer has not proved a contact we can reach, the agreement funds as MUTUAL_VOTE instead of the rule the collector asked for - the payment still succeeds, because refusing money over a notification concern is the wrong trade, and MUTUAL_VOTE is strictly more protective than what was disclosed. Checked here rather than at release so the collector learns before the payer pays rather than a week afterwards. A policy may only ever move in the payer's favour; there is no operation that moves it the other way.
Headers
| Name | Notes |
|---|---|
Authorization | Bearer token |
X-Tenant | Your tenant |
X-Environment | test or live |
Idempotency-Key | Reuse the same value on every retry of this request |
Path parameters
| Name |
|---|
reference |
Example
Response: GenericResponseEscrowBackedCollectionResponse
curl -X POST "https://api.bridgemoni.com/collection/escrow/b3f1c2d4-5e6a-4b7c-8d9e-0f1a2b3c4d5e/fund" \
-H "Authorization: Bearer $BRIDGEMONI_TOKEN" \
-H "X-Tenant: $BRIDGEMONI_TENANT" \
-H "X-Environment: $BRIDGEMONI_ENV" \
-H "Idempotency-Key: $(uuidgen)" {
"data": {
"request": {
"reference": "b3f1c2d4-5e6a-4b7c-8d9e-0f1a2b3c4d5e",
"collectorReference": "b3f1c2d4-5e6a-4b7c-8d9e-0f1a2b3c4d5e",
"collectorOwnReference": "b3f1c2d4-5e6a-4b7c-8d9e-0f1a2b3c4d5e",
"form": "string",
"status": "string",
"currencyCode": "string",
"amountMode": "string",
"amount": "string",
"minAmount": "string",
"maxAmount": "string",
"amountAllocated": "string",
"requestDescription": "string",
"usageMode": "string",
"payerBinding": "string",
"underpaymentPolicy": "string",
"overpaymentPolicy": "string",
"allowedRails": [
"string"
],
"returnUrl": "string",
"expiresAt": "string",
"creationDateTime": "string",
"addresses": [
{
"railCode": "string",
"addressType": "string",
"addressValue": "string",
"financialInstitutionCode": "string",
"accountName": "ADA OKAFOR"
}
],
"metadata": "string"
},
"escrowReference": "b3f1c2d4-5e6a-4b7c-8d9e-0f1a2b3c4d5e",
"gateCount": 0,
"escrowFundingFee": "string",
"releasePolicy": "string",
"requestedReleasePolicy": "string",
"challengeWindowHours": 0,
"payerContactAssurance": "string",
"policyDowngradeReason": "string"
},
"description": "Held collection funded successfully"
} Responses
| Status | When |
|---|---|
200 | Held collection funded successfully |
POST Claim a gate and serve the payer
POST /collection/escrow/{reference}/gate/{gateReference}/claim
Under a release on silence the collector's claim starts the payer's clock, so claiming and serving the payer are one operation: a claim that could not reach the payer is refused rather than left as a clock nobody can see. The notice is sent on every channel the payer has proved, and the deadline it states is the earliest one possible - the real window opens when a provider confirms delivery, so the payer can only ever get more time than the notice promised, never less.
Headers
| Name | Notes |
|---|---|
Authorization | Bearer token |
X-Tenant | Your tenant |
X-Environment | test or live |
Content-Type | application/json |
Path parameters
| Name |
|---|
reference |
gateReference |
Example
Request body: ClaimEscrowGateRequest · Response: GenericResponseEscrowGateClaimResponse
curl -X POST "https://api.bridgemoni.com/collection/escrow/b3f1c2d4-5e6a-4b7c-8d9e-0f1a2b3c4d5e/gate/b3f1c2d4-5e6a-4b7c-8d9e-0f1a2b3c4d5e/claim" \
-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": {
"gateReference": "b3f1c2d4-5e6a-4b7c-8d9e-0f1a2b3c4d5e",
"gateStatus": "string",
"noticesSent": 0,
"channelsAttempted": 0,
"earliestDeadline": "string"
},
"description": "Gate claimed and the payer served"
} Responses
| Status | When |
|---|---|
200 | Gate claimed and the payer served |
409 | There is no way to reach this payer |
POST Create a collection whose money is held behind gates
POST /collector/{reference}/collection/escrow
The payer's money sits in escrow until they say they got what they paid for, gate by gate. The gates must add up to the amount - a shortfall would leave money nothing could release, an excess would promise the collector more than was paid - and every allowed rail must be one that can be refunded to its origin, because a rail that cannot honour a rejected gate cannot honour the promise the gates make. Escrow charges no funding fee on a collection: the cost of the gates is already in the collector's rate card. A released gate lands in the collections holding pocket and then settles by the ordinary rule, including the rail's delay - the gate and the delay are two independent holds and they compose, so a collector is never paid card money a payer can still charge back.
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: CreateEscrowBackedCollectionRequest · Response: GenericResponseEscrowBackedCollectionResponse
curl -X POST "https://api.bridgemoni.com/collector/b3f1c2d4-5e6a-4b7c-8d9e-0f1a2b3c4d5e/collection/escrow" \
-H "Authorization: Bearer $BRIDGEMONI_TOKEN" \
-H "X-Tenant: $BRIDGEMONI_TENANT" \
-H "X-Environment: $BRIDGEMONI_ENV" \
-H "Content-Type: application/json" \
-d '{
"request": {
"form": "string",
"collectorOwnReference": "b3f1c2d4-5e6a-4b7c-8d9e-0f1a2b3c4d5e",
"currencyCode": "string",
"countryCode": "string",
"amountMode": "string",
"amount": "string",
"minAmount": "string",
"maxAmount": "string",
"requestDescription": "string",
"usageMode": "string",
"payerBinding": "string",
"boundPayerReference": "b3f1c2d4-5e6a-4b7c-8d9e-0f1a2b3c4d5e",
"underpaymentPolicy": "string",
"overpaymentPolicy": "string",
"allowedRails": [
"string"
],
"returnUrl": "string",
"expiresAt": "string",
"metadata": "string",
"splits": [
{
"recipientCollectorReference": "b3f1c2d4-5e6a-4b7c-8d9e-0f1a2b3c4d5e",
"splitType": "string",
"splitRole": "string",
"percentage": "string",
"fixedAmount": "string",
"narrative": "string"
}
]
},
"payerReference": "b3f1c2d4-5e6a-4b7c-8d9e-0f1a2b3c4d5e",
"externalPayerName": "string",
"gates": [
{
"name": "string",
"criteriaDescription": "string",
"amount": "string",
"dueAt": "string"
}
],
"releasePolicy": "string",
"challengeWindowHours": 0,
"disclosedTerms": "string",
"disclosedTermsVersion": "string",
"disclosedAt": "string"
}' {
"request": {
"form": "string",
"collectorOwnReference": "b3f1c2d4-5e6a-4b7c-8d9e-0f1a2b3c4d5e",
"currencyCode": "string",
"countryCode": "string",
"amountMode": "string",
"amount": "string",
"minAmount": "string",
"maxAmount": "string",
"requestDescription": "string",
"usageMode": "string",
"payerBinding": "string",
"boundPayerReference": "b3f1c2d4-5e6a-4b7c-8d9e-0f1a2b3c4d5e",
"underpaymentPolicy": "string",
"overpaymentPolicy": "string",
"allowedRails": [
"string"
],
"returnUrl": "string",
"expiresAt": "string",
"metadata": "string",
"splits": [
{
"recipientCollectorReference": "b3f1c2d4-5e6a-4b7c-8d9e-0f1a2b3c4d5e",
"splitType": "string",
"splitRole": "string",
"percentage": "string",
"fixedAmount": "string",
"narrative": "string"
}
]
},
"payerReference": "b3f1c2d4-5e6a-4b7c-8d9e-0f1a2b3c4d5e",
"externalPayerName": "string",
"gates": [
{
"name": "string",
"criteriaDescription": "string",
"amount": "string",
"dueAt": "string"
}
],
"releasePolicy": "string",
"challengeWindowHours": 0,
"disclosedTerms": "string",
"disclosedTermsVersion": "string",
"disclosedAt": "string"
} {
"data": {
"request": {
"reference": "b3f1c2d4-5e6a-4b7c-8d9e-0f1a2b3c4d5e",
"collectorReference": "b3f1c2d4-5e6a-4b7c-8d9e-0f1a2b3c4d5e",
"collectorOwnReference": "b3f1c2d4-5e6a-4b7c-8d9e-0f1a2b3c4d5e",
"form": "string",
"status": "string",
"currencyCode": "string",
"amountMode": "string",
"amount": "string",
"minAmount": "string",
"maxAmount": "string",
"amountAllocated": "string",
"requestDescription": "string",
"usageMode": "string",
"payerBinding": "string",
"underpaymentPolicy": "string",
"overpaymentPolicy": "string",
"allowedRails": [
"string"
],
"returnUrl": "string",
"expiresAt": "string",
"creationDateTime": "string",
"addresses": [
{
"railCode": "string",
"addressType": "string",
"addressValue": "string",
"financialInstitutionCode": "string",
"accountName": "ADA OKAFOR"
}
],
"metadata": "string"
},
"escrowReference": "b3f1c2d4-5e6a-4b7c-8d9e-0f1a2b3c4d5e",
"gateCount": 0,
"escrowFundingFee": "string",
"releasePolicy": "string",
"requestedReleasePolicy": "string",
"challengeWindowHours": 0,
"payerContactAssurance": "string",
"policyDowngradeReason": "string"
},
"description": "Escrow-backed collection created successfully"
} Responses
| Status | When |
|---|---|
200 | Escrow-backed collection created successfully |
Generated from the OpenAPI document. Branch on the HTTP status: there is no machine-readable error code on the wire. Errors