API reference · Getting paid

Escrow-backed collections

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

NameNotes
AuthorizationBearer token
X-TenantYour tenant
X-Environmenttest or live
Idempotency-KeyReuse 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)"

Responses

StatusWhen
200Held 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

NameNotes
AuthorizationBearer token
X-TenantYour tenant
X-Environmenttest or live
Content-Typeapplication/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"
}'

Responses

StatusWhen
200Gate claimed and the payer served
409There 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

NameNotes
AuthorizationBearer token
X-TenantYour tenant
X-Environmenttest or live
Content-Typeapplication/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"
}'

Responses

StatusWhen
200Escrow-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