> ## Documentation Index
> Fetch the complete documentation index at: https://developers.kotanipay.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Quickstart Guide

> Get a key, prove it works, and pick the product you're building.

Three steps to your first authenticated call. Everything else has its own page —
this one just gets you moving.

<Note>
  **Sandbox accounts are self-service.** <a href="https://backoffice.kotanipay.com/register?env=sandbox" target="_blank">Register on the backoffice</a> and you can start immediately. When you're ready for real money, you [request go-live](/v3/development) from the dashboard — you don't need to email anyone.
</Note>

## 1. Generate an API key

In the dashboard: **API Keys → Generate New Key**. Copy it straight away — it isn't
shown again.

You'll be asked to pick a key type. For your main server-to-server integration,
choose **integrator level** — it has full access and is what you want here. Come
back for **user bound** keys later when you want to restrict what a key can do.

[Creating API keys →](/v3/getting-started/api-keys) — key types in full, secure keys
with a signing secret for webhook verification, and generating keys over the API.

## 2. Prove the key works

List your fiat wallets. It's read-only, it changes nothing, and it only succeeds
with a valid key:

```bash theme={null}
curl -X GET https://sandbox-api.kotanipay.com/api/v3/wallet/fiat \
  -H "Authorization: Bearer <your-api-key>"
```

You'll get your wallets back, or an empty list if you haven't created one yet —
either way, the key is good.

<Warning>
  Don't use `GET /health` as your first call. It's unauthenticated, so it returns
  `200` whether your key is right, wrong, or missing entirely.
</Warning>

A `401` here means the key is wrong or the environment doesn't match — sandbox keys
don't work against production, or the reverse.

<Card title="Or try it in Postman" icon="external-link" href="https://app.getpostman.com/run-collection/30841547-726e952e-e744-45ec-9204-1df4aba5e919?action=collection%2Ffork&source=rip_markdown">
  Fork the collection — both environments come pre-configured, so you only set your
  API key
</Card>

## 3. Pick what you're building

<CardGroup cols={2}>
  <Card title="Collect payments" icon="arrow-down" href="/v3/flows/deposit-flow">
    Your customer pays you by mobile money, bank, or card
  </Card>

  <Card title="Pay people out" icon="arrow-up" href="/v3/flows/withdrawal-flow">
    Send money to a mobile money wallet or bank account
  </Card>

  <Card title="Buy crypto" icon="coins" href="/v3/flows/onramp-flow">
    Take local currency, deliver crypto to a wallet
  </Card>

  <Card title="Sell crypto" icon="arrow-right-arrow-left" href="/v3/flows/offramp-flow">
    Take crypto, pay out local currency
  </Card>

  <Card title="Payment links" icon="link" href="/v3/essentials/payment-links">
    A hosted checkout page — no frontend to build
  </Card>

  <Card title="Bulk payments" icon="list" href="/v3/flows/bulk-payments-flow">
    Pay hundreds of recipients from one CSV
  </Card>
</CardGroup>

## Before you send money out

Your **deposit balance** and **payout balance** are separate. Collections credit the
first; payouts draw from the second, so you need to move funds between them before
you can disburse — in the dashboard under **Wallets → Transfer Deposit Balance**.

[Balances & Settlement →](/v3/essentials/balances-and-settlement)

## Then

* [Webhooks & Events →](/v3/essentials/webhooks) — get told when a transaction
  settles instead of polling for it
* [Fees & Billing →](/v3/essentials/billing-types) — who pays the fee, and what the
  amounts in your responses mean
* [Going to Production →](/v3/development) — when you're ready to move off sandbox
