API reference · Accounts & ledger

Payment instruments

POST Save something to pay with

POST /instrument

A wallet is usable straight away - it labels an account you already own, so there is nothing to verify. Anything held elsewhere comes back PENDING_VERIFICATION with what to do next. Never send a card number: cards are captured by the provider and saved here as a token, and anything card-shaped is refused before it is stored.

Headers

NameNotes
AuthorizationBearer token
X-TenantYour tenant
X-Environmenttest or live
Content-Typeapplication/json

Example

Request body: LinkInstrumentRequest · Response: PaymentInstrumentResponse

curl -X POST "https://api.bridgemoni.com/instrument" \
  -H "Authorization: Bearer $BRIDGEMONI_TOKEN" \
  -H "X-Tenant: $BRIDGEMONI_TENANT" \
  -H "X-Environment: $BRIDGEMONI_ENV" \
  -H "Content-Type: application/json" \
  -d '{
    "kind": "WALLET",
    "nickname": "Ada Obi",
    "currencyCode": "NGN",
    "countryCode": "text",
    "accountNumber": "0123456789",
    "externalIdentifier": "text",
    "providerCode": "text",
    "financialInstitutionCode": "text",
    "capabilities": [
      "FUND"
    ],
    "token": {
      "tokenReference": "text",
      "scheme": "text",
      "bin": "text",
      "lastFour": "text",
      "expiryMonth": 1,
      "expiryYear": 1,
      "cardholderName": "Ada Obi"
    },
    "cryptoAddress": {
      "networkAssetCode": "text",
      "address": "text",
      "addressMemo": "text",
      "settlementCurrencyCode": "NGN"
    },
    "setAsDefault": {
      "purpose": "ANY",
      "currencyCode": "NGN"
    },
    "tokenReference": "text",
    "scheme": "text",
    "bin": "text",
    "lastFour": "text",
    "expiryMonth": 1,
    "expiryYear": 1,
    "cardholderName": "Ada Obi",
    "networkAssetCode": "text",
    "address": "text",
    "addressMemo": "text",
    "settlementCurrencyCode": "NGN",
    "purpose": "ANY"
  }'

Responses

StatusWhen
200Instrument saved
400A card number was sent, or the kind's own required fields are missing
403The tenant has this kind disabled, or your verification tier is too low
409You have already saved this one

GET What could pay for this

GET /instrument/options

Every instrument you have, with whether it works for this particular payment and - when it does not - a reason you can show without rewording it. Answered from what Bridge already knows, so it is safe to call while rendering a payment screen: no provider is contacted and a balance held elsewhere is reported as last seen or as unknown rather than fetched.

Headers

NameNotes
AuthorizationBearer token
X-TenantYour tenant
X-Environmenttest or live

Query parameters

NameDefault
purposeOptional
capabilityOptional
currencyCodeOptional

Example

Response: InstrumentOptionsResponse

curl -X GET "https://api.bridgemoni.com/instrument/options?purpose=value&capability=value&currencyCode=value" \
  -H "Authorization: Bearer $BRIDGEMONI_TOKEN" \
  -H "X-Tenant: $BRIDGEMONI_TENANT" \
  -H "X-Environment: $BRIDGEMONI_ENV"

Responses

StatusWhen
200Instrument options retrieved successfully
409That instrument cannot be used right now

DELETE Remove an instrument

DELETE /instrument/{reference}

Permanent, and it stops being usable immediately. The record itself is kept, because a payment that has already settled must always be able to name what paid for it - so this does not erase your history. You can save the same instrument again later.

Headers

NameNotes
AuthorizationBearer token
X-TenantYour tenant
X-Environmenttest or live

Path parameters

Name
reference

Example

Response: Void

curl -X DELETE "https://api.bridgemoni.com/instrument/b3f1c2d4-5e6a-4b7c-8d9e-0f1a2b3c4d5e" \
  -H "Authorization: Bearer $BRIDGEMONI_TOKEN" \
  -H "X-Tenant: $BRIDGEMONI_TENANT" \
  -H "X-Environment: $BRIDGEMONI_ENV"

Responses

StatusWhen
200Instrument removed successfully
404Instrument not found

GET One instrument

GET /instrument/{reference}

Identifiers come back masked. There is no form of this call that returns them in full.

Headers

NameNotes
AuthorizationBearer token
X-TenantYour tenant
X-Environmenttest or live

Path parameters

Name
reference

Example

Response: PaymentInstrumentResponse

curl -X GET "https://api.bridgemoni.com/instrument/b3f1c2d4-5e6a-4b7c-8d9e-0f1a2b3c4d5e" \
  -H "Authorization: Bearer $BRIDGEMONI_TOKEN" \
  -H "X-Tenant: $BRIDGEMONI_TENANT" \
  -H "X-Environment: $BRIDGEMONI_ENV"

Responses

StatusWhen
404No such instrument, or it is not yours - the two are deliberately the same answer

POST Make this your default

POST /instrument/{reference}/default

Defaults are per currency and per purpose, so "my card for bills, my wallet for everything else" is two settings rather than one compromise. A default that later stops working is skipped at payment time rather than failing the payment, so a stale preference can never lock you out.

Headers

NameNotes
AuthorizationBearer token
X-TenantYour tenant
X-Environmenttest or live
Content-Typeapplication/json

Path parameters

Name
reference

Example

Request body: SetInstrumentDefaultRequest · Response: PaymentInstrumentResponse

curl -X POST "https://api.bridgemoni.com/instrument/b3f1c2d4-5e6a-4b7c-8d9e-0f1a2b3c4d5e/default" \
  -H "Authorization: Bearer $BRIDGEMONI_TOKEN" \
  -H "X-Tenant: $BRIDGEMONI_TENANT" \
  -H "X-Environment: $BRIDGEMONI_ENV" \
  -H "Content-Type: application/json" \
  -d '{
    "purpose": "ANY",
    "currencyCode": "NGN"
  }'

Responses

StatusWhen
200Default instrument set successfully
404Instrument not found
409That instrument cannot be used right now

POST Use it again

POST /instrument/{reference}/resume

Returns it to whatever it was before it was paused - which is not always usable. An instrument paused while it was still being verified goes back to being verified.

Headers

NameNotes
AuthorizationBearer token
X-TenantYour tenant
X-Environmenttest or live

Path parameters

Name
reference

Example

Response: PaymentInstrumentResponse

curl -X POST "https://api.bridgemoni.com/instrument/b3f1c2d4-5e6a-4b7c-8d9e-0f1a2b3c4d5e/resume" \
  -H "Authorization: Bearer $BRIDGEMONI_TOKEN" \
  -H "X-Tenant: $BRIDGEMONI_TENANT" \
  -H "X-Environment: $BRIDGEMONI_ENV"

Responses

StatusWhen
200Instrument resumed successfully
404Instrument not found

POST Pause an instrument

POST /instrument/{reference}/suspend

Reversible. Nothing is lost and resuming puts it back exactly as it was.

Headers

NameNotes
AuthorizationBearer token
X-TenantYour tenant
X-Environmenttest or live

Path parameters

Name
reference

Example

Response: PaymentInstrumentResponse

curl -X POST "https://api.bridgemoni.com/instrument/b3f1c2d4-5e6a-4b7c-8d9e-0f1a2b3c4d5e/suspend" \
  -H "Authorization: Bearer $BRIDGEMONI_TOKEN" \
  -H "X-Tenant: $BRIDGEMONI_TENANT" \
  -H "X-Environment: $BRIDGEMONI_ENV"

Responses

StatusWhen
200Instrument suspended successfully
404Instrument not found

GET Everything you have saved

GET /instruments

Headers

NameNotes
AuthorizationBearer token
X-TenantYour tenant
X-Environmenttest or live

Example

Response: List<PaymentInstrumentResponse>

curl -X GET "https://api.bridgemoni.com/instruments" \
  -H "Authorization: Bearer $BRIDGEMONI_TOKEN" \
  -H "X-Tenant: $BRIDGEMONI_TENANT" \
  -H "X-Environment: $BRIDGEMONI_ENV"

Generated from the OpenAPI document. Branch on the HTTP status: there is no machine-readable error code on the wire. Errors