Getting started

Hold balances in multiple currencies, pay recipients across borders and collect payments from your customers.

Start in Sandbox with a test key. Switch to a live key once your integration works and your business account is approved.

Prerequisites

  • A MigraPay business account. Sign up from the business dashboard.
  • An API key. Create one in the dashboard under Developers → API keys and choose the scopes it needs. The key is shown only once, so store it in your server's secret manager.
  • A server. API keys are secret and must never be sent from a browser or a mobile app.

Quickstart

Set your key and base URL

Every endpoint lives under one base URL. Sandbox and Live share it: the key you send decides the environment.

Base URL
https://business-api.migrapay.com/v1/api
export MIGRAPAY_API_KEY="mpb_test_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"

Make your first request

List your wallets. The key needs the wallet.view scope.

curl https://business-api.migrapay.com/v1/api/wallets \
  -H "Authorization: Bearer $MIGRAPAY_API_KEY"
200 OK
{
  "status": "success",
  "message": "Wallets retrieved successfully.",
  "data": {
    "wallets": [
      {
        "id": "3f6c2a10-8b1d-4e5f-9a7c-000000000001",
        "businessId": "b7e4d2c1-5a3f-4c8e-8d2b-000000000001",
        "currency": "CAD",
        "country": "CA",
        "balance": 12584.5,
        "ledgerBalance": 12584.5,
        "primary": true,
        "enabled": true,
        "status": "active",
        "createdAt": "2026-08-01T10:15:30.000Z",
        "updatedAt": "2026-08-01T10:15:30.000Z"
      }
    ]
  }
}

Send a payout

Save a recipient once, then pay them from a wallet. Here a CAD wallet pays a bank account in Nigeria; the conversion to NGN happens as part of the payout. The key needs recipient.create and payment.create.

curl -X POST https://business-api.migrapay.com/v1/api/recipients \
  -H "Authorization: Bearer $MIGRAPAY_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "displayName": "Ada Okafor",
    "ownerType": "individual",
    "rail": "bank",
    "currency": "NGN",
    "destination": {
      "bankCode": "058",
      "accountNumber": "0123456789",
      "accountName": "Ada Okafor"
    }
  }'

The payout response carries the transaction and its status. See Payouts for the full object.

Receive webhooks

Add a webhook endpoint in the dashboard under Developers → Webhooks to be told when payouts settle or fail and when collections are paid. See Webhooks.

Next steps