<Hero title="Introduction" eyebrow="Multigate API · Africa's trade and treasury infrastructure" headline="Move money across Africa and the world through one API.">
Collect, hold, convert and pay out in the currencies your business runs on. Multigate connects you to partner banks across Africa and to international banks over SWIFT, picks the right payment network for each payment, records every movement in a ledger, and tells your systems the moment something happens.

<HeroActions>
[Start in the sandbox](03-quickstart.md) [Browse the API reference](/reference) [Talk to us](https://multigate.io/contact)
</HeroActions>
</Hero>

<Facts>
<Fact icon="lucide-key-round" label="One credential">
An API key in the `mp-api-key` header is all your software sends. The same API serves the sandbox and production.
</Fact>
<Fact icon="lucide-route" label="Local rails and SWIFT">
Domestic transfers through partner banks across Africa, international ones over SWIFT. You name the beneficiary; we choose the rail.
</Fact>
<Fact icon="lucide-repeat" label="Safe to retry">
Every money-moving request carries your own `uniqueRequestId`, so a retry is recognised and never executed again.
</Fact>
<Fact icon="lucide-webhook" label="Told the moment it happens">
Signed webhooks for every state change, from a credited inflow to a settled conversion, with the IDs you need to reconcile.
</Fact>
</Facts>

Multigate is a treasury management and cross-border infrastructure provider, building Africa's trusted trade infrastructure. The Multigate API is the single integration point for our **Cross-border Financial Infrastructure** and **Automated Treasury Management** solutions. Fintechs, remittance companies, corporates, SMEs and banks build on it, for their own money and for the businesses they serve.

## Built for the people who move the money

<Pillars>
<Pillar icon="lucide-briefcase" title="Finance and treasury teams">
- Every balance in one place: your wallets, your customers' accounts and the bank accounts you already hold.
- Local and cross-border payouts with maker-checker approval, where a second person approves what another created.
- Conversions at a rate you lock first, and statements and reports that reconcile against the ledger.
- A `transactionId` and your own reference on every movement, for support and reconciliation.
</Pillar>
<Pillar icon="lucide-code-2" title="Developers">
- One REST API, JSON in and out, with an OpenAPI document you can import into your own tools.
- Idempotent requests, predictable errors with reference IDs, and paginated lists with a stable order.
- Signed webhooks, and a sandbox with simulated banks where no real money moves.
- Code samples on every endpoint, and a **Try it** console that calls the sandbox from your browser.
</Pillar>
<Pillar icon="lucide-shield-check" title="Compliance and operations">
- Compliance screening before funds leave, and statuses that never call an unconfirmed payment failed.
- Customer onboarding (KYB, know-your-business checks) with documents and approvals, so you can serve businesses under your licence.
- Trade finance over SWIFT: letters of credit and guarantees with amendments, documents and expiry reminders.
</Pillar>
</Pillars>

## Your first payout is one request

<Showcase>
<Columns>
<Column>
Give a payout your own `uniqueRequestId`, the account to pay from and the beneficiary's bank details. Multigate does the rest: your approval rules, compliance screening, choosing the rail, the debit, the bank call and the webhook.

The response comes back at once with a `transactionId` and a status. When the bank confirms, you receive a `transfer_completed` webhook; if it can't be paid, `transfer_failed` with the reason, and the money back in the source account.

The [Quickstart](03-quickstart.md) takes you from credentials to this call, with the webhook, in about 15 minutes.
</Column>
<Column>
```bash
curl -X POST "$MG_BASE_URL/payment-service/api/v1/transfer/single-transfer" \
  -H "mp-api-key: $MG_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "uniqueRequestId": "acme_po_9f2a",
    "reference": "Invoice 2026-0412",
    "amount": 25000,
    "sourceCurrencyIso3Code": "NGN",
    "sourceAccountNumber": "0034567812",
    "beneficiaryDetails": {
      "name": "Ada Okafor",
      "accountName": "Ada Okafor",
      "accountNumber": "0123456789",
      "bankBicOrCode": "058",
      "currencyIso3Code": "NGN",
      "countryIso3Code": "NGA",
      "addressLine1": "12 Marina Road",
      "city": "Lagos",
      "state": "Lagos"
    }
  }'
```
</Column>
</Columns>
</Showcase>

## What you can build

<CardGroup cols={2}>
<Card title="Payouts" icon="lucide-send" href="../04-products/05-payouts.md">
Send local and international bank transfers, one at a time or in bulk, with fees you can quote first and a status for every step.
</Card>
<Card title="Accounts and collections" icon="lucide-landmark" href="../04-products/02-accounts.md">
Hold balances in multi-currency wallets and give payers virtual account numbers in your name or your customer's. Know the moment money arrives.
</Card>
<Card title="FX conversions" icon="lucide-arrow-left-right" href="../04-products/09-fx-conversions.md">
Get a live quote, lock the rate, and convert between your accounts at the price you were shown.
</Card>
<Card title="Linked accounts (multi-bank)" icon="lucide-link" href="../04-products/02-accounts.md#linked-accounts">
Connect the bank accounts you already hold, see their balances and statements, and pay out from any of them: the API side of the Multi-Bank Connector.
</Card>
<Card title="Customer onboarding" icon="lucide-building-2" href="../04-products/01-customers.md">
Onboard the businesses you serve with KYB checks, then open accounts and move money on their behalf.
</Card>
<Card title="Receivables" icon="lucide-receipt" href="../04-products/11-receivables.md">
Give every invoice its own account number and let payments reconcile themselves to invoices.
</Card>
<Card title="Remittance" icon="lucide-globe" href="../04-products/07-remittance.md">
For remittance companies (IMTOs, international money transfer operators): pay out remittances with full sender and beneficiary details.
</Card>
<Card title="Trade finance" icon="lucide-ship" href="../04-products/12-trade-finance.md">
Run letters of credit and bank guarantees over SWIFT: advise the ones you receive, apply for new ones, handle amendments and documents with maker-checker approval, and get expiry reminders and reports.
</Card>
</CardGroup>

## How these docs are organised

| Section | Use it to |
|---|---|
| **Get started** | Understand the platform, get sandbox access, make your first payout. |
| **Concepts** | Learn the rules every endpoint follows: errors, idempotency, pagination, acting for customers. |
| **Webhooks and emails** | Receive and verify real-time notifications, and see which emails Multigate sends you. |
| **Products** | Follow end-to-end guides for each product, with diagrams, statuses and examples. |
| **Use cases** | See how products combine for common businesses (remittance, cross-border payouts, collections). |
| **Reference** | Look up every status, term and common question in one place. |
| **API reference** | Look up every endpoint, field, error and webhook payload. Try requests against the sandbox. |

:::tip[New to Multigate?]
Go straight to the [Quickstart](03-quickstart.md). It takes you from credentials to a completed sandbox payout, with a webhook, in about 15 minutes.
:::

:::warning[The sandbox isn't production]
A few checks are off and some jobs are slower in the sandbox. For example, FX conversions don't check your balance, any NGN account number can be saved as a beneficiary, and payout results can take 15 minutes. Read [Sandbox vs production](05-sandbox-vs-production.md) before you write tests.
:::

## Getting access

From the first conversation to live payments in four stages. The first and the last happen with the Multigate team; the two in between are yours, at your pace.

<Journey>
<Stage title="Talk to us" icon="lucide-messages-square">
<span class="mg-stage-who">With Multigate</span>

Tell us what you're building. [Request a demo](https://multigate.io/contact) or email enquiries@multigate.io, and we agree the products and currencies you need.

We set up your business on the platform (your **client** profile) and give your team the dashboard: [uat.multigate.app](https://uat.multigate.app) for the sandbox and [multigate.app](https://multigate.app) for production.
</Stage>
<Stage title="Get sandbox credentials" icon="lucide-key-round">
<span class="mg-stage-who">You, in the dashboard</span>

We create an **API user** for you: an account for your software, separate from the people who sign in to the dashboard.

In the sandbox dashboard, under **Developer Tool › API Configuration**, generate its **API key** (sent in the `mp-api-key` header of every request) and copy your **client secret**, which signs the webhooks we send you. See [Authentication](06-authentication.md#your-credentials).
</Stage>
<Stage title="Build and test" icon="lucide-flask-conical">
<span class="mg-stage-who">You, in the sandbox</span>

The sandbox is a separate copy of the platform with simulated banks: the same API, no real money. The [Quickstart](03-quickstart.md) gets you to a completed payout with a webhook in about 15 minutes.

Then build against the product guides, with the **Try it** console and code samples on every endpoint. Read [Sandbox vs production](05-sandbox-vs-production.md) before you write your tests.
</Stage>
<Stage title="Go live" icon="lucide-rocket">
<span class="mg-stage-who">With Multigate</span>

When your integration passes the [go-live checklist](07-go-live-checklist.md), we enable production for your business.

Generate a production API key there (it starts with `mgk_live_`), point your servers at the production address, and keep that key on your servers only: it is never used in a browser or shared by email.
</Stage>
</Journey>

## Key terms

Thirteen words do most of the work in these docs. The [glossary](../06-reference/02-glossary.md) has the full list.

<Terms>
<Term name="Client">
Your business, as registered with Multigate. In these docs, *you* are the client.
</Term>
<Term name="Customer (sub-client)">
A business you serve, or a subsidiary or partner in your group, onboarded by you and linked to your client. The API calls these *sub-clients*.
</Term>
<Term name="Wallet">
The account that holds a balance in one currency, for you or for a customer.
</Term>
<Term name="Virtual account">
A dedicated bank account number in your name (or your customer's), issued by a partner bank and linked to a wallet. Payers send money to it.
</Term>
<Term name="Linked account">
A bank account your business already holds elsewhere, connected to Multigate so you can pay out from it and read its balance and statements.
</Term>
<Term name="Beneficiary">
A person or business you pay. Save beneficiaries once and reuse them.
</Term>
<Term name="Transfer (payout)">
Money sent from one of your accounts to a beneficiary.
</Term>
<Term name="Inflow">
Money received into one of your accounts.
</Term>
<Term name="Conversion (FX trade)">
Exchanging money between two of your accounts in different currencies, at a rate you locked first.
</Term>
<Term name="Webhook">
An HTTPS request Multigate sends to your server when something happens, such as a transfer completing.
</Term>
<Term name="Idempotency key">
The unique ID you send with a request (`uniqueRequestId`), so a retry is recognised and never executed twice.
</Term>
<Term name="Sandbox">
The test environment: the same API as production, simulated banks, no real money.
</Term>
<Term name="API key">
The secret your software sends on every request, in the `mp-api-key` header. You generate it in the dashboard.
</Term>
</Terms>

## Support

<Support>
<Columns>
<Column>
<p class="mg-support-lead">A person who knows your integration answers.</p>

Write to your Multigate integration contact. If you don't have one yet, email enquiries@multigate.io and we'll route you. Check the [FAQ](../06-reference/03-faq-and-troubleshooting.md) first for the questions we hear most.

<HeroActions>
[Email support](mailto:enquiries@multigate.io?subject=Multigate%20API%20support) [Read the FAQ](../06-reference/03-faq-and-troubleshooting.md)
</HeroActions>
</Column>
<Column>
<p class="mg-support-lead">Include these, and we can act straight away.</p>

- The environment: sandbox or production.
- The endpoint, and the time of the request in UTC.
- Your `uniqueRequestId`, or the `transactionId` from the response.
- The reference ID from any error message.
</Column>
</Columns>

:::caution[Never by email]
API keys and client secrets stay out of email, chat and screenshots. We never ask for them, and a request that includes one is treated as compromised: rotate the key in the dashboard.
:::
</Support>

<p class="mg-legal">Legal: <a href="https://multigate.io/terms-of-use">Terms of Service</a> · <a href="https://multigate.io/privacy-policy">Privacy Policy</a> · <a href="https://multigate.io/licensing">Licensing</a></p>
