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

# Supported Chains

> Complete list of all supported blockchains with chain IDs, deposit modes, and integration examples

Hypermid supports 90+ blockchains across EVM and non-EVM networks. Every chain has a **slug** (human-readable string) and a **numeric ID**. Both are accepted in all API params, widget config, and SDK methods.

You can also fetch the full list programmatically via [`GET /v1/chains`](/api-reference/chains).

***

## EVM Chains

EVM chains support **wallet mode** — the execute endpoint returns a `transactionRequest` that you sign and broadcast directly from your app. No manual steps needed.

| Chain           | Slug          | Chain ID | Native Token |
| --------------- | ------------- | -------- | ------------ |
| Ethereum        | `ethereum`    | `1`      | ETH          |
| Optimism        | `optimism`    | `10`     | ETH          |
| Flare           | `flare`       | `14`     | FLR          |
| Cronos          | `cronos`      | `25`     | CRO          |
| Rootstock       | `rootstock`   | `30`     | RBTC         |
| Telos           | `telos`       | `40`     | TLOS         |
| BNB Chain       | `bsc`         | `56`     | BNB          |
| Gnosis          | `gnosis`      | `100`    | xDAI         |
| Unichain        | `unichain`    | `130`    | ETH          |
| Polygon         | `polygon`     | `137`    | POL          |
| Sonic           | `sonic`       | `146`    | S            |
| X Layer         | `x-layer`     | `196`    | OKB          |
| opBNB           | `opbnb`       | `204`    | BNB          |
| Fraxtal         | `fraxtal`     | `252`    | frxETH       |
| Boba            | `boba`        | `288`    | ETH          |
| zkSync Era      | `zksync`      | `324`    | ETH          |
| PulseChain      | `pulsechain`  | `369`    | PLS          |
| World Chain     | `world-chain` | `480`    | ETH          |
| Flow            | `flow`        | `747`    | FLOW         |
| HyperEVM        | `hyperevm`    | `999`    | HYPE         |
| Plasma          | `plasma`      | `1012`   | ETH          |
| Metis           | `metis`       | `1088`   | METIS        |
| Lisk            | `lisk`        | `1135`   | ETH          |
| Moonbeam        | `moonbeam`    | `1284`   | GLMR         |
| Sei             | `sei`         | `1329`   | SEI          |
| Gravity         | `gravity`     | `1625`   | G            |
| Soneium         | `soneium`     | `1868`   | ETH          |
| Ronin           | `ronin`       | `2020`   | RON          |
| Abstract        | `abstract`    | `2741`   | ETH          |
| Mantle          | `mantle`      | `5000`   | MNT          |
| Base            | `base`        | `8453`   | ETH          |
| Monad           | `monad`       | `10143`  | MON          |
| Immutable zkEVM | `immutable`   | `13371`  | IMX          |
| Apechain        | `apechain`    | `33139`  | APE          |
| Mode            | `mode`        | `34443`  | ETH          |
| Arbitrum        | `arbitrum`    | `42161`  | ETH          |
| Celo            | `celo`        | `42220`  | CELO         |
| Avalanche       | `avalanche`   | `43114`  | AVAX         |
| Ink             | `ink`         | `57073`  | ETH          |
| Linea           | `linea`       | `59144`  | ETH          |
| BOB             | `bob`         | `60808`  | ETH          |
| Berachain       | `berachain`   | `80094`  | BERA         |
| Blast           | `blast`       | `81457`  | ETH          |
| Taiko           | `taiko`       | `167000` | ETH          |
| Scroll          | `scroll`      | `534352` | ETH          |

### EVM Example (Wallet Mode)

All EVM swaps return a `transactionRequest` — sign it and broadcast:

<CodeGroup>
  ```typescript TypeScript theme={"system"}
  const exec = await client.execute({
    fromChain: 1,       // Ethereum
    toChain: 42161,     // Arbitrum
    fromToken: "0x0000000000000000000000000000000000000000",
    toToken: "0xaf88d065e77c8cC2239327C5EDb3A432268e5831",
    fromAmount: "1000000000000000000",
    fromAddress: "0xYourWallet",
    toAddress: "0xYourWallet",
  });

  // Sign and broadcast — that's it
  const tx = await wallet.sendTransaction(exec.transactionRequest);
  ```

  ```bash cURL theme={"system"}
  curl -X POST "https://api.hypermid.io/v1/execute" \
    -H "Content-Type: application/json" \
    -H "X-API-Key: your-api-key" \
    -d '{
      "fromChain": 1,
      "toChain": 42161,
      "fromToken": "0x0000000000000000000000000000000000000000",
      "toToken": "0xaf88d065e77c8cC2239327C5EDb3A432268e5831",
      "fromAmount": "1000000000000000000",
      "fromAddress": "0xYourWallet",
      "toAddress": "0xYourWallet"
    }'
  ```
</CodeGroup>

<Tip>
  **PulseChain swaps** use the same wallet mode but may require an extra confirmation step for inbound multi-step routes. See the [SuperSwap guide](/guides/superswap) for details.
</Tip>

***

## Non-EVM Chains

Non-EVM chains support two deposit modes depending on the chain:

* **Wallet** — Returns a `transactionRequest` you can sign programmatically (same as EVM). Works for Solana, Bitcoin, TON, and Tron.
* **Manual** — Returns a `depositAddress` (and optional `memo`). The user sends tokens from their native wallet app.

| Chain        | Slug           | Chain ID           | Native Token | Deposit Mode |
| ------------ | -------------- | ------------------ | ------------ | ------------ |
| Solana       | `solana`       | `1151111081099710` | SOL          | Wallet       |
| Bitcoin      | `bitcoin`      | `20000000000001`   | BTC          | Wallet       |
| Sui          | `sui`          | `9270000000000000` | SUI          | Wallet       |
| TON          | `ton`          | `900000002`        | TON          | Wallet       |
| Tron         | `tron`         | `900000003`        | TRX          | Wallet       |
| NEAR         | `near`         | `900000001`        | NEAR         | Manual       |
| XRP Ledger   | `xrp`          | `900000004`        | XRP          | Manual       |
| Dogecoin     | `doge`         | `900000005`        | DOGE         | Manual       |
| Litecoin     | `litecoin`     | `900000006`        | LTC          | Manual       |
| Bitcoin Cash | `bitcoin-cash` | `900000007`        | BCH          | Manual       |
| Stellar      | `stellar`      | `900000008`        | XLM          | Manual       |
| Cardano      | `cardano`      | `900000009`        | ADA          | Manual       |
| Aptos        | `aptos`        | `900000010`        | APT          | Manual       |
| StarkNet     | `starknet`     | `900000011`        | STRK         | Manual       |
| Dash         | `dash`         | `900000012`        | DASH         | Manual       |
| Zcash        | `zcash`        | `900000013`        | ZEC          | Manual       |
| Aleo         | `aleo`         | `900000014`        | ALEO         | Manual       |
| ADI          | `adi`          | `900000015`        | ADI          | Manual       |

<Note>
  **Wallet chains can also use manual mode.** Pass `depositMode: "manual"` in your execute request to force a deposit address for any chain. Useful if your app doesn't have a native wallet integration for that chain.
</Note>

### Wallet Mode Example (Solana)

Wallet-mode non-EVM chains work the same as EVM — you get a `transactionRequest`:

<CodeGroup>
  ```typescript TypeScript theme={"system"}
  const exec = await client.execute({
    fromChain: "solana",
    toChain: 1,
    fromToken: "11111111111111111111111111111111", // native SOL
    toToken: "0x0000000000000000000000000000000000000000",
    fromAmount: "1000000000", // 1 SOL in lamports
    fromAddress: "YourSolanaAddress",
    toAddress: "0xYourEVMWallet",
  });

  // Sign with your Solana wallet
  const tx = await solanaWallet.signAndSendTransaction(
    exec.transactionRequest
  );
  ```

  ```bash cURL theme={"system"}
  curl -X POST "https://api.hypermid.io/v1/execute" \
    -H "Content-Type: application/json" \
    -H "X-API-Key: your-api-key" \
    -d '{
      "fromChain": "solana",
      "toChain": 1,
      "fromToken": "11111111111111111111111111111111",
      "toToken": "0x0000000000000000000000000000000000000000",
      "fromAmount": "1000000000",
      "fromAddress": "YourSolanaAddress",
      "toAddress": "0xYourEVMWallet"
    }'
  ```
</CodeGroup>

### Manual Deposit Example (XRP)

Manual-mode chains return a `depositAddress` and optional `memo`. Show these to the user so they can send from their native wallet:

<CodeGroup>
  ```typescript TypeScript theme={"system"}
  const exec = await client.execute({
    fromChain: "xrp",
    toChain: 1,
    fromToken: "XRP",
    toToken: "0x0000000000000000000000000000000000000000",
    fromAmount: "50000000", // 50 XRP in drops
    fromAddress: "rYourXRPAddress",
    toAddress: "0xYourEVMWallet",
  });

  // Display to user — they send manually from their XRP wallet
  console.log("Send to:", exec.depositAddress);
  console.log("Memo:", exec.memo);         // Required for XRP
  console.log("Deposit ID:", exec.depositId);

  // Track with deposit status endpoint
  const status = await client.getDepositStatus({
    depositId: exec.depositId,
  });
  ```

  ```bash cURL theme={"system"}
  curl -X POST "https://api.hypermid.io/v1/execute" \
    -H "Content-Type: application/json" \
    -H "X-API-Key: your-api-key" \
    -d '{
      "fromChain": "xrp",
      "toChain": 1,
      "fromToken": "XRP",
      "toToken": "0x0000000000000000000000000000000000000000",
      "fromAmount": "50000000",
      "fromAddress": "rYourXRPAddress",
      "toAddress": "0xYourEVMWallet"
    }'
  ```
</CodeGroup>

<Warning>
  **Memo is required** for XRP and Stellar deposits. If the user omits the memo, the funds may be lost. Always display the memo prominently in your UI.
</Warning>

### Forcing Manual Mode

Any wallet-mode chain can be switched to manual deposit by passing `depositMode: "manual"`:

```typescript theme={"system"}
const exec = await client.execute({
  fromChain: "solana",
  toChain: 1,
  fromToken: "11111111111111111111111111111111",
  toToken: "0x0000000000000000000000000000000000000000",
  fromAmount: "1000000000",
  fromAddress: "YourSolanaAddress",
  toAddress: "0xYourEVMWallet",
  depositMode: "manual", // Force deposit address instead of transactionRequest
});

// Now returns depositAddress instead of transactionRequest
console.log("Send to:", exec.depositAddress);
```

***

## Using Chain Identifiers

Both slugs and numeric IDs work in all API endpoints:

<CodeGroup>
  ```bash cURL theme={"system"}
  # Using numeric ID (common for EVM chains)
  curl "https://api.hypermid.io/v1/quote?fromChain=1&toChain=42161&..."

  # Using slug (recommended for non-EVM chains)
  curl "https://api.hypermid.io/v1/quote?fromChain=ethereum&toChain=solana&..."
  ```

  ```typescript SDK theme={"system"}
  import { ChainSlug, ChainId } from "@hypermid/sdk";

  const quote = await hm.getQuote({
    fromChain: ChainSlug.SOLANA,    // "solana"
    toChain: ChainId.ARBITRUM,      // 42161
    ...
  });
  ```

  ```javascript Widget theme={"system"}
  HypermidWidget.init({
    defaultFromChain: "solana",     // slug
    defaultToChain: 42161,          // numeric ID
  });
  ```
</CodeGroup>

<Tip>
  **Use slugs for non-EVM chains** — `"solana"` is much easier to read than `1151111081099710`.
</Tip>
