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

# Quickstart

> First access token, balance, and sticky deposit address.

# Quickstart

Base URL: `https://api.imbawallet.com`

## Prerequisites

* `partner_id` from IMBA
* Ed25519 keypair; public key registered with a `kid`
* Scopes including at least `balance:read` and `deposit_address:read`

## 1. Sign an assertion JWT

Sign with your **private** Ed25519 key (`alg: EdDSA`).

| Claim        | Value                                       |
| ------------ | ------------------------------------------- |
| `iss`        | your `partner_id` as a string, e.g. `"100"` |
| `aud`        | `imba-partner-api`                          |
| `iat`        | now (unix seconds)                          |
| `exp`        | ≤ 60 seconds after `iat`                    |
| `jti`        | unique UUID (one-time use)                  |
| header `kid` | registered key id, e.g. `key_1`             |

## 2. Exchange for an access token

```http theme={null}
POST https://api.imbawallet.com/auth/v1/partner/token
Content-Type: application/json

{
  "assertion": "<signed JWT>"
}
```

```json theme={null}
{
  "access_token": "<EdDSA JWT from IMBA>",
  "token_type": "Bearer",
  "expires_in": 900
}
```

TTL is **900 seconds**. No refresh token — mint a new assertion when needed.

## 3. Read balance

```http theme={null}
GET https://api.imbawallet.com/partner/balance?currency=USDT&network=TRON
Authorization: Bearer <access_token>
```

```json theme={null}
{
  "currency": "USDT",
  "network": "TRON",
  "ledger_balance": "0.00",
  "reserved": "0.00",
  "available_balance": "0.00",
  "pending_credit": "0.00",
  "as_of": "2026-07-10T09:15:30.123Z",
  "request_id": "019d0120-7b59-7eab-b837-a7af38ea3db2"
}
```

## 4. Get your sticky deposit address

```http theme={null}
GET https://api.imbawallet.com/partner/deposit-address?currency=USDT&network=TRON
Authorization: Bearer <access_token>
```

```json theme={null}
{
  "currency": "USDT",
  "network": "TRON",
  "address": "TExamplePartnerDepositAddr111111",
  "memo": null,
  "confirmations_required": 19,
  "request_id": "019d0120-7b59-7eab-b837-a7af38ea3db2"
}
```

Call it again — you must get the **same** `address`. You can hardcode it in your systems. Send USDT TRC-20 to that address; after confirmations, `available_balance` increases.

## Typical product flow

1. Ensure `available_balance` covers price + fees
2. `POST` create with a unique `ext_id` → `202`
3. Wait for webhook **or** poll `GET /partner/documents/{ext_id}`
4. Fetch secrets only via product GET (card JWE, eSIM LPA, gift epin)

## Next

* [Authentication](/guides/authentication)
* [Cards](/guides/cards)
* [Webhooks](/guides/webhooks)
