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

# Read client

> Chains, tokens, quotes, status and balances. Safe to use anywhere.

```typescript theme={"system"}
import { Hypermid } from "@hypermid/sdk";

const hypermid = new Hypermid();          // anonymous works
// const hypermid = new Hypermid({ apiKey: process.env.HYPERMID_PUBLISHABLE_KEY });
```

| Method                | Returns                                              |
| --------------------- | ---------------------------------------------------- |
| `getChains()`         | Supported chains that currently have routable tokens |
| `getTokens(params?)`  | Token catalog with inline USD prices                 |
| `getStatus(params)`   | State of a submitted transfer                        |
| `getBalances(params)` | A wallet's token balances                            |

<Warning>
  `Hypermid.getQuote()` is a deprecated compatibility adapter. Use
  [`quoteSwap()`](/sdk/swap) for new integrations; it returns a discriminated
  transaction-or-deposit result and cannot expose inert placeholder calldata.
</Warning>

## Building a picker

```typescript theme={"system"}
const { chains } = await hypermid.getChains();
const { tokens } = await hypermid.getTokens({ chains: [8453, 42161] });
```

Filter by chain. The full catalog spans every supported chain and is large
enough to be worth not fetching in a dropdown.

<Note>
  These endpoints are **environment-aware**. With a sandbox key they return only
  testnets and testnet tokens, even if you ask for mainnet — so a picker built on
  them is automatically right in both environments with no branching on your
  side. See [Environments](/environments).
</Note>

## Balances

```typescript theme={"system"}
const balances = await hypermid.getBalances({ address: userAddress });
```

`cacheHit` and `cachedAt` tell you whether the answer came from cache. Balances
are cached briefly, so a freshly-landed transfer may take a moment to appear —
do not treat a stale balance as a failed transfer.

## About the API key

```typescript theme={"system"}
interface HypermidConfig {
  apiKey?: string;   // sent as X-API-Key. Optional — anonymous traffic is served fully.
  baseUrl?: string;
}
```

<Warning>
  Do not bake a key into a browser bundle. A key set at build time is
  extractable by every visitor. These endpoints serve anonymous traffic
  completely, so a browser needs no key at all — attach yours server-side when
  you want your negotiated rates applied.
</Warning>

## Prices are indicative

`priceUSD`, `balanceUSD` and the catalog's inline prices are for **display**.
They are cached and approximate. Never settle, invoice or reconcile against
them — quote the route instead.
