Orange DOCS
Merchants

Who receives the money

A merchant is a saved payout destination — a bank account, a mobile-money number, or a Lightning Address. Create one once, then reference its id from any payment. The fields you provide depend on the destination country.

🏦
Bank account
SA · Nigeria · Kenya
📱
Mobile money
M-Pesa (Kenya)
Lightning
Address or LNURL

The merchant object

Two fields are always required; the rest depend on country. Use the selector on the right to see exactly what each destination needs.

Always required
name*
string
Friendly label for the recipient
country*
enum
SouthAfrica · Nigeria · Kenya · BTC
Conditional — by destination
bankName
string
Bank name — SA & Nigeria bank payouts
accountNumber
string
Recipient account number (bank payouts)
bankCodeoptional
string
Nigeria: in place of (or with) bankName
networkProvider
string
Mobile network, e.g. MPESA (Kenya)
contactNumber
string
Recipient phone, +254… (Kenya)
lnurl
string
Lightning Address or LNURL (BTC)
Returned in responses
id
string
Reference this from payments
bankCode
string
Resolved bank code (where applicable)
merchant
{
  "name": "My SA Merchant",
  "country": "SouthAfrica",
  "bankName": "CAPITEC BANK",
  "accountNumber": "1325558779"
}
Field set changes with the tab — bankName/accountNumber, networkProvider/contactNumber, or lnurl.

Endpoints

4 calls
POST /merchants

Create a merchant

Register a payout destination. The payload varies by destination country; for bank merchants, bankName must match a valid name for that country.

  • country is the literal "SouthAfrica" (no space).
  • name must match /^[a-zA-Z0-9 @/().,_-]{0,254}$/.
  • Accounts are check-digit (CDV) validated on creation, catching mistyped account numbers.
  • Pull valid bank names from Utils.
⚠️
An unrecognised bankName returns 400. Pull the canonical list from Utils.
POST /merchants
{
  "name": "Test Merchant",
  "country": "SouthAfrica",
  "bankName": "CAPITEC BANK",
  "accountNumber": "1325558779"
}
GET /merchants

List merchants

Paginated, like payments. Feed the offsetMarker back as offset to page; null means the end.

Query parameters
limitoptional
integer
Items per page (default 100, max 100)
offsetoptional
string
Marker from previous response
GET /merchants
{
  "items": [
    {
      "id": "0c83ca77-c1e2-4e04-9932-9541e535b3e6",
      "name": "My SA Merchant",
      "country": "SouthAfrica",
      "bankName": "CAPITEC BANK",
      "accountNumber": "1325558779"
    }
  ],
  "offsetMarker": "%7B%22id%22%3A%220c83...%22%7D"
}
GET /merchants/:id

Retrieve a merchant

Fetch a single merchant by ID — same shape as a list item.

GET /merchants/:id
{
  "id": "0c83ca77-c1e2-4e04-9932-9541e535b3e6",
  "name": "My SA Merchant",
  "country": "SouthAfrica",
  "bankName": "CAPITEC BANK",
  "bankCode": "470010",
  "accountNumber": "1325558779"
}
PATCH /merchants/:id

Update a merchant

Send only the fields you want to change — it's a partial update. The response is the updated merchant. (There is no delete endpoint; merchants are updated, not removed.)

PATCH /merchants/:id
{
  "name": "Renamed Merchant"
}