Docs
ENFR
Dashboard
API reference

Beneficiaries

Saved recipients for your payouts, shared with the dashboard (Payouts › Beneficiaries). Test and live beneficiaries are separate, by the mode of the key. A destination (number or account) can be saved once per mode, and a business can keep up to 500 beneficiaries per mode. To pay one, create a payout with beneficiary.

The beneficiary object

Attributes
idstring

Unique identifier (UUID).

livemodeboolean

true for live objects, false for test objects.

objectstring

Always beneficiary.

typestring

Mobile money wallet or bank account.

mobile_moneybank
namestring

Beneficiary name, used as the recipient name of payouts.

nicknamestring | null

Your own label, up to 40 characters.

countrystring

ISO 3166-1 alpha-2 country code.

currencystring

Currency of payouts to this beneficiary (the currency of the country).

operatorstring | null

Mobile money only: operator code.

phonestring | null

Mobile money only: number in E.164 format.

bank_codestring | null

Bank only: bank code from List banks.

bank_namestring | null

Bank only: bank name.

accountstring | null

Bank only: masked account number.

last_used_atstring | null

Time of the last payout created with this beneficiary.

created_atstring

Creation time, ISO 8601 (UTC).

updated_atstring

Last change, ISO 8601 (UTC).

The beneficiary object
{
  "id": "4c2e9a17-6b3d-4f58-a0e1-8d7c5b2f9e34",
  "object": "beneficiary",
  "livemode": false,
  "type": "mobile_money",
  "name": "Kossi Mensah",
  "nickname": "Akwa supplier",
  "country": "CM",
  "currency": "XAF",
  "operator": "MTN",
  "phone": "+237670000777",
  "bank_code": null,
  "bank_name": null,
  "account": null,
  "last_used_at": null,
  "created_at": "2026-10-30T13:47:06.394Z",
  "updated_at": "2026-10-30T13:47:06.394Z"
}

Create a beneficiary

POST/v1/beneficiaries

Checks the details with the same rules as payouts (country open to payouts, operator of the country, international number, test numbers in test mode, exact bank code) and saves them. Nothing is sent to the recipient.

Key roles: Owner, Finance or Approver

Body
typestringRequired
mobile_moneybank
namestringRequired

Beneficiary name, 2 to 80 characters.

countrystringRequired

ISO 3166-1 alpha-2 code of a country open to payouts.

currencystringOptional

ISO 4217 code. Defaults to the currency of the country.

nicknamestringOptional

Your own label, up to 40 characters.

phonestringOptional

Mobile money: number in international format (+237670000777).

operatorstringOptional

Mobile money: operator code from List operators.

bank_codestringOptional

Bank: a code from List banks, exactly as returned.

accountstringOptional

Bank: account number, 6 to 34 letters or digits.

Returns

Returns the new beneficiary object with 201.

Errors worth handling
HTTPCodeDescription
400country_unsupportedThis country is not open for this currency. See Coverage.
400operator_unsupportedUnknown operator, or refused by the payment partner for this currency.
400phone_invalidThe number cannot be read as an international number.
400test_phone_requiredTest mode: use one of the test phone numbers of this country. See Testing.
400bank_account_invalidbank_code does not exactly match a code from List banks, or the account number is too short.
400bank_transfer_unsupportedBank payouts are not available in this country: pay to a mobile money wallet.
400limit_reachedA limit is reached: 10 webhook endpoints per business (test and live together), or 500 beneficiaries per mode.
403permission_deniedThe key’s creator does not have the role required for this operation.
409beneficiary_existsA beneficiary with this number or account already exists in this mode.
curl https://api.monerail.com/v1/beneficiaries \
  -H "Authorization: Bearer $MONERAIL_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "type": "mobile_money",
    "name": "Kossi Mensah",
    "nickname": "Akwa supplier",
    "country": "CM",
    "phone": "+237670000777",
    "operator": "MTN"
  }'
Response201
{
  "id": "4c2e9a17-6b3d-4f58-a0e1-8d7c5b2f9e34",
  "object": "beneficiary",
  "livemode": false,
  "type": "mobile_money",
  "name": "Kossi Mensah",
  "nickname": "Akwa supplier",
  "country": "CM",
  "currency": "XAF",
  "operator": "MTN",
  "phone": "+237670000777",
  "bank_code": null,
  "bank_name": null,
  "account": null,
  "last_used_at": null,
  "created_at": "2026-10-30T13:47:06.394Z",
  "updated_at": "2026-10-30T13:47:06.394Z"
}

Retrieve a beneficiary

GET/v1/beneficiaries/{id}

Key roles: Owner, Finance, Approver or Developer

Path parameters
idstringRequired

ID of the beneficiary.

Returns

Returns the beneficiary object.

Errors worth handling
HTTPCodeDescription
403permission_deniedThe key’s creator does not have the role required for this operation.
404resource_missingNo object with this ID in this mode.
curl https://api.monerail.com/v1/beneficiaries/4c2e9a17-6b3d-4f58-a0e1-8d7c5b2f9e34 \
  -H "Authorization: Bearer $MONERAIL_KEY"
Response200
{
  "id": "4c2e9a17-6b3d-4f58-a0e1-8d7c5b2f9e34",
  "object": "beneficiary",
  "livemode": false,
  "type": "mobile_money",
  "name": "Kossi Mensah",
  "nickname": "Akwa supplier",
  "country": "CM",
  "currency": "XAF",
  "operator": "MTN",
  "phone": "+237670000777",
  "bank_code": null,
  "bank_name": null,
  "account": null,
  "last_used_at": null,
  "created_at": "2026-10-30T13:47:06.394Z",
  "updated_at": "2026-10-30T13:47:06.394Z"
}

Update a beneficiary

POST/v1/beneficiaries/{id}

Changes the parameters you send; the others keep their value. type cannot change. Send nickname: null to remove the nickname. The same checks as at creation apply.

Key roles: Owner, Finance or Approver

Path parameters
idstringRequired

ID of the beneficiary.

Body
namestringOptional

2 to 80 characters.

nicknamestringOptional

Up to 40 characters, or null.

countrystringOptional
phonestringOptional
operatorstringOptional
bank_codestringOptional
accountstringOptional
Returns

Returns the beneficiary object.

Errors worth handling
HTTPCodeDescription
400parameter_invalidA parameter has the wrong type or value. See param.
403permission_deniedThe key’s creator does not have the role required for this operation.
404resource_missingNo object with this ID in this mode.
409beneficiary_existsA beneficiary with this number or account already exists in this mode.
curl https://api.monerail.com/v1/beneficiaries/4c2e9a17-6b3d-4f58-a0e1-8d7c5b2f9e34 \
  -H "Authorization: Bearer $MONERAIL_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "nickname": "Douala courier"
  }'
Response200
{
  "id": "4c2e9a17-6b3d-4f58-a0e1-8d7c5b2f9e34",
  "object": "beneficiary",
  "livemode": false,
  "type": "mobile_money",
  "name": "Kossi Mensah",
  "nickname": "Douala courier",
  "country": "CM",
  "currency": "XAF",
  "operator": "MTN",
  "phone": "+237670000777",
  "bank_code": null,
  "bank_name": null,
  "account": null,
  "last_used_at": null,
  "created_at": "2026-10-30T13:47:06.394Z",
  "updated_at": "2026-10-30T13:47:09.807Z"
}

List beneficiaries

GET/v1/beneficiaries

Newest first.

Key roles: Owner, Finance, Approver or Developer

Query parameters
limitintegerOptionalDefault 20

Number of objects to return, 1 to 100.

starting_afterstringOptional

Cursor: the ID of the last object of the previous page.

typestringOptional

Only this type.

mobile_moneybank
countrystringOptional

Only this country (ISO 3166-1 alpha-2).

Returns

Returns a list object: data holds up to limit beneficiary objects, and has_more tells whether more follow.

Errors worth handling
HTTPCodeDescription
403permission_deniedThe key’s creator does not have the role required for this operation.
curl "https://api.monerail.com/v1/beneficiaries?limit=10" \
  -H "Authorization: Bearer $MONERAIL_KEY"
Response200
{
  "object": "list",
  "url": "/v1/beneficiaries",
  "data": [
    {
      "id": "4c2e9a17-6b3d-4f58-a0e1-8d7c5b2f9e34",
      "object": "beneficiary",
      "livemode": false,
      "type": "mobile_money",
      "name": "Kossi Mensah",
      "nickname": "Akwa supplier",
      "country": "CM",
      "currency": "XAF",
      "operator": "MTN",
      "phone": "+237670000777",
      "bank_code": null,
      "bank_name": null,
      "account": null,
      "last_used_at": null,
      "created_at": "2026-10-30T13:47:06.394Z",
      "updated_at": "2026-10-30T13:47:06.394Z"
    },
    {
      "id": "4c2e9a17-6b3d-4f58-a0e1-8d7c5b2f9e34",
      "object": "beneficiary",
      "livemode": false,
      "type": "bank",
      "name": "Kossi Mensah",
      "nickname": null,
      "country": "CM",
      "currency": "XAF",
      "operator": null,
      "phone": null,
      "bank_code": "10005",
      "bank_name": "Example Bank",
      "account": "••••4821",
      "last_used_at": "2026-10-30T13:47:09.807Z",
      "created_at": "2026-10-30T13:47:06.394Z",
      "updated_at": "2026-10-30T13:47:06.394Z"
    }
  ],
  "has_more": false
}

Delete a beneficiary

DELETE/v1/beneficiaries/{id}

Removes the beneficiary from the list. Payouts already created are not affected.

Key roles: Owner, Finance or Approver

Path parameters
idstringRequired

ID of the beneficiary.

Returns

Returns { id, object, deleted: true }.

Errors worth handling
HTTPCodeDescription
403permission_deniedThe key’s creator does not have the role required for this operation.
404resource_missingNo object with this ID in this mode.
curl -X DELETE https://api.monerail.com/v1/beneficiaries/4c2e9a17-6b3d-4f58-a0e1-8d7c5b2f9e34 \
  -H "Authorization: Bearer $MONERAIL_KEY"
Response200
{
  "id": "4c2e9a17-6b3d-4f58-a0e1-8d7c5b2f9e34",
  "object": "beneficiary",
  "deleted": true
}