> ## 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.

# Going Live

> Environments, idempotency, and how to request go-live when you're ready for real money.

Build against sandbox, then request go-live from the dashboard when you're ready.
This page covers the differences between the two environments and the steps to
switch.

## Environments

Sandbox and production share the same API structure — only the base URL and
credentials differ.

| Environment    | Base URL                            |
| -------------- | ----------------------------------- |
| **Sandbox**    | `https://sandbox-api.kotanipay.com` |
| **Production** | `https://api.kotanipay.com`         |

Sandbox API keys do not work in production, or the reverse. Generate
environment-specific credentials for each.

## Authentication

Every request needs an `Authorization: Bearer` header. API keys and JWTs both go in
the same header.

**API keys** are what you want for server-to-server work — they don't expire unless
revoked. **JWTs** are short-lived and mainly used while generating a key over the
API.

[Creating API keys →](/v3/getting-started/api-keys)

## Idempotency

Always send a reference ID on deposits and withdrawals. The field name differs by
flow:

* Deposits use `reference_id` (snake\_case)
* Withdrawals use `referenceId` (camelCase)

Reference IDs must be unique per integrator. If a request times out or fails at the
network level, retrying with the same reference ID will not create a duplicate
transaction — which is the whole point of sending one.

## Webhooks

Use webhooks rather than polling; polling for status is the most common cause of
hitting rate limits. Configure your endpoint in the dashboard under **Settings**.

[Webhooks & Events →](/v3/essentials/webhooks) — both delivery modes, every event,
and signature verification.

## Errors and limits

Status codes, error body shapes and the request limits you need to design around are
all on one page.

[Errors & Limits →](/v3/essentials/error-handling)

## Requesting go-live

Going live is a request you make from the dashboard. You don't need to email anyone.

<Steps>
  <Step title="Finish onboarding">
    Complete every onboarding step in the dashboard. The go-live request is blocked
    until they're all done, so clear this first.
  </Step>

  <Step title="Submit your compliance documents">
    Your dashboard shows a compliance checklist for the countries and services you
    use. Upload each document and wait for approval — you can retract and re-submit
    if you sent the wrong file.
  </Step>

  <Step title="Request go-live">
    With onboarding complete, submit the request. A production account is created for
    you straight away in a pending-review state, and our team is notified.
  </Step>

  <Step title="Track the status">
    Your status reads **not started**, **requested** or **active**, alongside your
    compliance progress, so you can see what's still outstanding. You'll be notified
    when the review completes.
  </Step>

  <Step title="Switch over">
    Once active, point your base URL at production, generate a production API key,
    and update your webhook endpoint to your production server.
  </Step>
</Steps>

<Note>
  Your sandbox configuration can be exported so your production account starts from
  the same setup rather than being rebuilt by hand. Ask support if you want this.
</Note>

<Warning>
  Confirm which environment you're in before your first live transaction. The
  dashboard shows this in the environment selector, top right.
</Warning>

## Pick your product

<CardGroup cols={2}>
  <Card title="Deposits & Collections" icon="arrow-down" href="/v3/flows/deposit-flow">
    Mobile money, bank checkout, and card collections
  </Card>

  <Card title="Withdrawals & Payouts" icon="arrow-up" href="/v3/flows/withdrawal-flow">
    Mobile money and bank disbursements
  </Card>

  <Card title="Onramp: Buy Crypto" icon="coins" href="/v3/flows/onramp-flow">
    Local currency in, crypto out to a wallet
  </Card>

  <Card title="Offramp: Sell Crypto" icon="arrow-right-arrow-left" href="/v3/flows/offramp-flow">
    Crypto in, local currency out
  </Card>

  <Card title="Payment Links" icon="link" href="/v3/essentials/payment-links">
    Hosted checkout pages, no frontend to build
  </Card>

  <Card title="Bulk Payments" icon="list" href="/v3/flows/bulk-payments-flow">
    CSV-based mass disbursements with batch tracking
  </Card>
</CardGroup>
