> For the complete documentation index, see [llms.txt](https://sodex.com/documentation/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://sodex.com/documentation/for-developers/developers/mirror-protocol/quickstart.md).

# Quickstart

Move supported assets between an external network and ValueChain, or move a ValueChain balance into a trading account. Routes, limits, and fees come from the API at runtime.

**Mainnet base URL:** `https://mainnet-gw.sodex.dev/api/v1`

There is no Testnet Mirror API.

Use the SoDEX user's EVM address to create or verify a custody deposit address. This address identifies the user; custody deposits credit the user's **Spot account**, not the EVM wallet. Contract addresses are on [Contracts](/documentation/for-developers/developers/mirror-protocol/contracts.md).

## 1. Choose the asset and network

Call Asset Configuration and use the exact `chainName`. Check `custody.allowDeposit` / `allowWithdraw` or the bridge flags, plus minimum amounts and withdrawal fees.

```bash
curl -sS 'https://mainnet-gw.sodex.dev/api/v1/asset/config?name=USDC' \
  -H 'Accept: application/json'
```

Replace `USDC` with the user-facing asset name. An unknown name returns an empty `data` array.

## 2. Choose the operation

| Situation                                                 | Path                                                                                                                                                                                                                                                                                                                                  |
| --------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Deposit from a custody route (non-EVM or custodial chain) | [Generate Custody Address](/documentation/for-developers/developers/mirror-protocol/generate-address.md), then [Custody Deposits](/documentation/for-developers/developers/mirror-protocol/lifecycle/custody-deposits.md). Do not send until `status` is `Enabled` and the address is in `getDepositWalletList` on SoDexTokenCustody. |
| Deposit from an EVM source chain through a bridge         | [Bridge Deposits](/documentation/for-developers/developers/mirror-protocol/lifecycle/deposits.md). Approve the source token and call the configured bridge contract. Set `toClob` to `true` for Spot or `false` for ValueChain EVM.                                                                                                   |
| Funds already on ValueChain EVM, move into Spot or Perps  | [ValueChain to Spot or Perps](/documentation/for-developers/developers/mirror-protocol/lifecycle/valuechain-transfers.md). This is not an external deposit.                                                                                                                                                                           |

## 3. Withdraw to an external network

A withdrawal spends the user's **ValueChain EVM** balance, not a Spot or Perps balance. Move funds to EVM first, confirming each hop:

| Current balance | Required route                |
| --------------- | ----------------------------- |
| Perps           | Perps → Spot → ValueChain EVM |
| Spot            | Spot → ValueChain EVM         |
| ValueChain EVM  | No trading-account transfer   |

Then follow [Withdrawals](/documentation/for-developers/developers/mirror-protocol/lifecycle/withdrawals.md): encode the destination (include memo/tag when required), sign the permit, and submit. See [Contracts](/documentation/for-developers/developers/mirror-protocol/contracts.md) for permit and withdrawer addresses.

## 4. Confirm delivery

A successful submission is not arrival. Save the source-chain transaction hash for a deposit, or the ValueChain request hash and withdrawal ID for a withdrawal. Track them with [History & Status](/documentation/for-developers/api-reference/mirror-api/history-and-status.md). Empty records or `Processing` do not confirm credit; check the destination balance before starting a dependent transfer or trade.

{% content-ref url="/pages/na8o9MAsQDanoJmg0eZW" %}
[Mirror Protocol Lifecycle](/documentation/for-developers/developers/mirror-protocol/lifecycle.md)
{% endcontent-ref %}

{% content-ref url="/pages/VQrCeIw34VwMJ9G024Wy" %}
[Mirror Protocol API](/documentation/for-developers/api-reference/mirror-api.md)
{% endcontent-ref %}
