Developers

Move money with a few lines of code.

A predictable REST API, typed SDKs, an MCP server and a sandbox that behaves like production, for collections, payouts and cards across 14 African markets.

{{ cur.file }}{{ cur.lang }}
{{ cur.code }}
API reference

One consistent model for every product

Full API reference

{{ r.t }}

{{ r.p }}

{{ r.d }}

{{ e.m }}{{ e.p }}
MCP server

A controlled wallet for any assistant

The assistant never sees your live keys or your balance. It only gets what the agent's policy allows.

{{ l.alt }}
{{ m.n }}
{{ m.d }}
Sandbox

Test every scenario before going live

With a sk_test_ key, magic values trigger specific outcomes. No real card is issued and no real funds move.

{{ s.a }}{{ s.r }}
Errors

Errors that people and agents can act on

Every decline returns a stable code and a readable message, so your code or your agent knows whether to retry, ask for less or stop.

{{ errCode }}
{{ p.k }}

{{ p.t }}

{{ p.d }}

Get your sandbox keys

The sandbox is free and opens with test balances in XAF, XOF, NGN, KES and USD.

Open an accountRead the documentation
Developers

Move money with a few lines of code.

A predictable REST API, typed SDKs, an MCP server and a sandbox that behaves like production, for collections, payouts and cards across 14 African markets.

terminalbash
# Node.js
npm install @monerail/node

# Python
pip install monerail

# MCP server (Claude, Cursor…)
npx -y @monerail/mcp

# Environment
export MONERAIL_API_KEY=sk_test_••••
API reference

One consistent model for every product

Full API reference

Payment links

Collect

Shareable links and hosted checkout pages.

POST/v1/payment_links
GET/v1/payment_links/:id
PATCH/v1/payment_links/:id

Collections

Collect

Mobile money payments, with refunds.

POST/v1/collections
GET/v1/collections/:id
POST/v1/collections/:id/refund

Payouts

Payouts

Single and batch payouts to mobile money wallets and bank accounts.

POST/v1/payouts
POST/v1/payout_batches
GET/v1/payouts/:id

Recipients

Payouts

Verified mobile money and bank recipients.

POST/v1/recipients
GET/v1/recipients/:id
DELETE/v1/recipients/:id

Cards

Cards

Issue, fund, freeze, reveal and close any card.

POST/v1/cards
POST/v1/cards/:id/fund
DELETE/v1/cards/:id

Cardholders

Cards

Teammates and customers, with their identity checks.

POST/v1/cardholders
GET/v1/cardholders/:id
POST/v1/cardholders/:id/kyc_link

Agents and policies

Agent cards

Agent identities, limits, merchants and approval thresholds.

POST/v1/agents
POST/v1/policies
POST/v1/agents/:id/freeze

Spend requests

Agent cards

The agent asks; the policy or a human decides.

POST/v1/spend_requests
POST/v1/spend_requests/:id/approve
POST/v1/spend_requests/:id/decline

Transactions and events

Shared

One ledger for every movement, and signed webhooks retried for 72 hours.

GET/v1/transactions
POST/v1/webhook_endpoints
POST/v1/events/:id/replay
MCP server

A controlled wallet for any assistant

The assistant never sees your live keys or your balance. It only gets what the agent's policy allows.

ClaudeChatGPTCursor
request_payment
Ask for an amount at a merchant, with a reason.
get_card
Retrieve the approved card to complete a checkout.
get_budget
Tell the agent how much it has left to spend.
list_payments
List the agent’s recent payments.
cancel_request
Cancel a request that is no longer needed.
Sandbox

Test every scenario before going live

With a sk_test_ key, magic values trigger specific outcomes. No real card is issued and no real funds move.

phone: +254 700 000 001Mobile money payment succeeds
iban: DE00 TEST 0000 0002Payout returned: account closed
amount: 4242Card payment requires 3-D Secure
$1.00 – $250.00Agent request approved
$250.01 – $499.99Agent request pending approval
$666.00Declined: blocked merchant
Errors

Errors that people and agents can act on

Every decline returns a stable code and a readable message, so your code or your agent knows whether to retry, ask for less or stop.

HTTP 402
{
  "error": {
    "code": "limit_exceeded",
    "message": "The amount exceeds this agent's
                daily limit.",
    "remaining_today": 1850,
    "retry": "reduce_amount"
  }
}
idempotency

Idempotent requests

Retry safely with an Idempotency-Key, never charging, paying or issuing twice.

versioning

Dated versions

Your integration stays pinned to the version you chose.

test / live

Separate keys

Distinct test and live keys, revocable at any time.

scopes

Restricted keys

One key per service or agent, limited to the actions it needs.

Get your sandbox keys

The sandbox is free and opens with test balances in XAF, XOF, NGN, KES and USD.