Collect, convert and pay outwith one REST API.

Open accounts, quote FX, pay out on local rails and get a webhook on every status. One integration reaches African rails, and SWIFT to 180+ countries.

POST /v1/quote
{
  "sourceCurrency": "NGN",
  "targetCurrency": "EUR",
  "sourceRail": "NIP",
  "targetRail": "SEPA",
  "amount": 2500000,
  "side": "SELL"
}
// returns the quote id, FX rate and rail fee

API reference

Endpoints, fields, errors and webhook payloads.

Open nilos.readme.io(opens in a new tab)

System status

Live and past incidents across the API and rails.

Open status.nilos.io(opens in a new tab)

Dashboard

Balances, payments and statuses for your ops team.

Open app.nilos.io(opens in a new tab)

Sandbox keys to first payout,in five steps.

Production uses the same flow. Most teams finish integration in about two weeks.

  1. Get sandbox keys

    Request keys from our team.

  2. Create an account

    Open an account for your company or a client with POST /v1/account.

  3. Request a quote

    Get the FX rate and rail fee with POST /v1/quote. Read it back with GET /v1/quote/{id}.

  4. Send a payout

    Pay a recipient on a local rail or SWIFT with POST /v1/payout/transfer.

  5. Listen to webhooks

    Get incoming transactions, resolved payouts and new accounts as they happen.

Open an account per client.

Create an account in one currency, on one rail. It is in your client's name where the local rail allows. Otherwise it is in Nilos's name, with a unique reference per client.

  • One account per client or currency
  • Balance by API and in the dashboard
  • An Account created webhook when it is ready
POST /v1/account
{
  "name": "Your client's legal name",
  "currency": "KES",
  "rail": "KENYA_BANK"
}

WEBHOOK Account created
{
  "accountId": "acc_…",
  "name": "Your client's legal name",
  "currency": "KES",
  "status": "…"
}

Quote before you send.

Start any payment with a quote. It shows the FX rate and rail fee, so you see the all-in cost before money moves.

  • Quote by API before each payment
  • Read any quote back by id
GET /v1/quote/{id}
// FX rate, rail fee, currencies and amount

POST /v1/payout/transfer
{
  "accountId": "acc_…",
  "recipientId": "rcp_…",
  "sourceCurrency": "EUR",
  "targetCurrency": "NGN",
  "targetRail": "NIP",
  "amount": 10000,
  "side": "SELL",
  "reference": "INV-2041"
}

Three webhookscover the money movement.

Subscribe once. Your system hears about every inbound payment, resolved payout and new account.

WebhookFires when
Incoming transactionMoney arrives in one of your accounts
Payout resolvedA payout ends as paid or returned
Account createdA new account is ready to receive funds
WEBHOOK Incoming transaction
{
  "accountId": "acc_…",
  "amount": 1500000,
  "currency": "NGN",
  "reference": "…",
  "isInbound": true,
  "status": "…"
}
// full payload and signature check: see the docs

Build in the sandbox first.

The sandbox runs the same endpoints and webhooks as production. The code you test is the code you ship.

  • Accounts, quotes, payouts and webhooks

Integration questionsfrom engineers.

Is there a sandbox?

Yes. It runs the same endpoints and webhooks as production. Ask our team for access.

How long does integration take?

About two weeks for most teams. Compliance runs in parallel. Go-live is about six weeks from kickoff.

Do we get the receipt by API?

Yes. The Payout resolved webhook carries the status and rail reference. SWIFT payouts include the MT103.

Is it API only, or is there a web interface?

Both. You can create payouts, accounts and recipients in the dashboard at app.nilos.io, or upload a CSV batch. Everything you do by API shows there too.

Read the docs today.Integrate in about two weeks.

Ask for sandbox access when you are ready to build.