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

# Quickstart

> Register a bank account and get the address that pays it, in about five minutes.

By the end of this page you will have registered a real bank account and
received the on-chain address that pays it.

## Before you start

You need an API key for your business. Export it so the examples below can pick
it up:

```bash theme={null}
export PAJ_API_KEY="your-api-key"
```

## 1. Check the rate

Start with the cheapest call, to confirm the key works:

<CodeGroup>
  ```bash cURL theme={null}
  curl "https://api.paj.cash/pub/v2/rate?currency=NGN" \
    -H "x-api-key: $PAJ_API_KEY"
  ```

  ```ts TypeScript theme={null}
  const res = await fetch('https://api.paj.cash/pub/v2/rate?currency=NGN', {
    headers: { 'x-api-key': process.env.PAJ_API_KEY! },
  });
  const { onRampRate, offRampRate } = await res.json();
  ```

  ```python Python theme={null}
  import os, requests

  res = requests.get(
      "https://api.paj.cash/pub/v2/rate",
      params={"currency": "NGN"},
      headers={"x-api-key": os.environ["PAJ_API_KEY"]},
  )
  rates = res.json()
  ```
</CodeGroup>

```json Response theme={null}
{
  "onRampRate": {
    "id": "673a42e547e586bcd37fb0d7",
    "rate": 1650,
    "type": "onRamp",
    "baseCurrency": "USD",
    "targetCurrency": "NGN",
    "createdAt": "2026-08-03T09:12:44.000Z"
  },
  "offRampRate": {
    "id": "673a42e547e586bcd37fb0e2",
    "rate": 1610,
    "type": "offRamp",
    "baseCurrency": "USD",
    "targetCurrency": "NGN",
    "createdAt": "2026-08-03T09:12:44.000Z"
  }
}
```

A `401` here means the key is wrong — see [Authentication](/authentication).

## 2. Find the bank code

Registration is keyed on a bank **code**, not a bank name. Bank codes are
available from the public bank list:

```bash theme={null}
curl "https://api.paj.cash/pub/bank?name=First%20Bank"
```

The list is stable, so most integrations fetch it once and cache it rather than
calling it per registration.

## 3. Register the bank account

<CodeGroup>
  ```bash cURL theme={null}
  curl -X POST "https://api.paj.cash/pub/v2/bank-account" \
    -H "x-api-key: $PAJ_API_KEY" \
    -H "Content-Type: application/json" \
    -d '{
      "bankCode": "000016",
      "accountNumber": "0025635480"
    }'
  ```

  ```ts TypeScript theme={null}
  const res = await fetch('https://api.paj.cash/pub/v2/bank-account', {
    method: 'POST',
    headers: {
      'x-api-key': process.env.PAJ_API_KEY!,
      'Content-Type': 'application/json',
    },
    body: JSON.stringify({
      bankCode: '000016',
      accountNumber: '0025635480',
    }),
  });
  const account = await res.json();
  ```

  ```python Python theme={null}
  res = requests.post(
      "https://api.paj.cash/pub/v2/bank-account",
      headers={"x-api-key": os.environ["PAJ_API_KEY"]},
      json={"bankCode": "000016", "accountNumber": "0025635480"},
  )
  account = res.json()
  ```
</CodeGroup>

```json Response theme={null}
{
  "id": "68ff3a4ee9834db8927f61ed",
  "accountName": "John Doe",
  "accountNumber": "0025635480",
  "bank": "First Bank",
  "address": "FsXpXq8wVTM13NDXxrf2X6PpgJWg9jCxRVuHhtfnojUa"
}
```

Two fields matter here:

* **`accountName`** came from the bank, not from your request. Show it to the
  user so they can catch a mistyped account number before any money moves.
* **`address`** is the on-chain address that pays this bank account. Store it
  against the user — it will not change.

<Tip>
  This call is idempotent. Running it again with the same bank code and account
  number returns the same record and the same address, so you can safely call it
  on every sign-in instead of tracking whether you have registered before.
</Tip>

## 4. Pay the address

Send USDC to the `address` from any wallet or exchange. Paj observes the
deposit, converts it at the prevailing offramp rate, and disburses naira to the
bank account. Nothing further is required from your API integration — the
deposit itself is the instruction.

## Next steps

<CardGroup cols={2}>
  <Card title="Bank account addresses" icon="link" href="/concepts/bank-account-addresses">
    How the address is derived, and what happens after a deposit lands.
  </Card>

  <Card title="Rates" icon="chart-line" href="/concepts/rates">
    Quoting an amount, and how long a rate is good for.
  </Card>

  <Card title="Errors" icon="triangle-exclamation" href="/concepts/errors">
    What each status code means and which are worth retrying.
  </Card>

  <Card title="API reference" icon="code" href="/api-reference/register-bank-account">
    Full schemas for all three endpoints.
  </Card>
</CardGroup>
