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

# Deposits

> Get ready-to-sign calldata to fund an exchange account

[`GET /deposit`](/docs/api-reference/deposit/get-deposit-transactions-for-signing) returns one or more unsigned EVM transactions that move USDC (or another supported stablecoin) into the target exchange. You sign and broadcast them yourself — VOOI never holds the user's key.

<Info>
  **Prerequisites:** an active VOOI API token. See [API Tokens](/docs/tokens) if you don't have one.
</Info>

## Request

```bash theme={null}
GET https://perps-api.vooi.io/deposit?exchange=hyperliquid&chainId=42161&amount=5&address=0xYourWalletAddress
Authorization: Bearer <token>
```

Query parameters are documented on the [API reference page](/docs/api-reference/deposit/get-deposit-transactions-for-signing). The `tokenAddress` parameter is optional — omit it to deposit the venue's default stablecoin on that chain (USDC for Hyperliquid, Lighter, Extended, and Ondo; USDG for Robinhood; the first listed token for Aster). Extended and Ondo accept USDC only — any other `tokenAddress` is rejected.

## Response shape

```json theme={null}
{
  "transactions": [
    {
      "calldata": { "chainId": 42161, "data": "0x...", "to": "0x..." },
      "meta": { "amount": "5.0", "type": "transfer" }
    }
  ]
}
```

Sign each entry's `calldata` and submit it to the target chain **in the order returned**. When the response contains multiple transactions, wait for each to confirm before sending the next — each one is a dependency of the one that follows.

Bridge-based deposits (Extended) may also include a top-level `fee` alongside `transactions`.

`meta.type` tells you what the transaction is for:

| `type` | Meaning |
| - | - |
| `approve` | ERC-20 `approve` against the deposit contract or bridge. |
| `transfer` | ERC-20 `transfer` of the stablecoin to the venue's bridge/intent address. |
| `contract-call` | Deposit via a venue-specific contract function (e.g. Aster). |

## Per-venue patterns

Supported chains and tokens are enforced per venue — they are not enumerated in the response, which carries only the deposit `transactions` (and, for bridge-based venues, a top-level `fee`). An unsupported `chainId` or `tokenAddress` is rejected with an error (see [Errors](#errors)). The table below is a behavioral summary:

| Venue | Chain(s) | Tokens | Transactions returned |
| - | - | - | - |
| Hyperliquid | Arbitrum One (`42161`) | USDC | 1: `transfer` to the Hyperliquid bridge |
| Lighter | Arbitrum One (`42161`) | USDC | 1: `transfer` to a per-deposit intent address |
| Robinhood | Chain `4663` | USDG | 1: `transfer` to a per-deposit intent address |
| Aster | Ethereum (`1`), BNB Chain (`56`), Arbitrum One (`42161`) | USDT, USDC, USD1, and venue-specific stablecoins per chain | 2: `approve` followed by `contract-call` |
| Extended | Ethereum (`1`), BNB Chain (`56`), Polygon (`137`), Base (`8453`), Arbitrum One (`42161`), Avalanche (`43114`) | USDC | 2: `approve` followed by `contract-call` |
| Ondo | Ethereum (`1`), Arbitrum One (`42161`) | USDC | 1: `transfer` to the deposit address the venue provisions for your account |

<Note>
  VOOI does not expose deposits, withdrawals, or transfers for **Binance, Bybit, or MEXC**. Move funds through those venues directly.
</Note>

<Note>
  The Lighter and Robinhood `transfer` `to` field is a per-deposit **intent address** — it differs for each deposit request, so don't cache it. Request fresh deposit transactions for each deposit.
</Note>

<Note>
  Extended deposits bridge USDC to your Extended account. Request fresh deposit transactions for each deposit — don't reuse old calldata.
</Note>

## After the deposit confirms

There is **no callback endpoint** to post a transaction hash back. To know when the deposit has landed, watch the balance on the target venue:

* [`GET /exchange/accounts`](/docs/api-reference/exchange/get-account-balances) — poll until the new balance is visible.
* [Real-time updates](/docs/trading-streams) — subscribe to the `accounts` SSE event and react when the balance changes.

Hyperliquid typically reflects deposits within 1–3 minutes. Lighter usually takes up to 10 minutes. Aster processing time varies by source chain. Extended deposits bridge from your source chain, so settlement depends on that chain's finality. Ondo credits the account once the transfer confirms on the chain you sent it from.

## Abandoning a multi-step deposit

If the user submits transaction 1 (for example, `approve`) and abandons transaction 2, there is no reserved quote to expire and no cleanup endpoint to call — the state of the deposit is whatever the chain reflects. To resume, call [`GET /deposit`](/docs/api-reference/deposit/get-deposit-transactions-for-signing) again and submit whichever transactions the wallet still needs to send.

## Errors

| Scenario | HTTP | Body `message` |
| - | - | - |
| Unsupported `chainId` for the venue | 503 | `<exchange>: Unsupported chain ID for <venue> deposit: <id>` (Extended: `extended: Unsupported chain ID for Extended bridge: <id>`) |
| `tokenAddress` not in the venue's allow-list for that chain | 503 | `<exchange>: Unsupported token address for <venue> deposit: ...` (Extended accepts USDC only: `extended: Extended supports USDC deposits only`) |
| Missing or invalid `address` | 400 | Validation error from the query schema |

Deposit error messages are prefixed with the lowercase venue code (e.g. `hyperliquid: Unsupported chain ID for Hyperliquid deposit: <id>`).

## Next steps

<CardGroup cols={2}>
  <Card title="Register on Hyperliquid" icon="plug" href="/docs/register-hyperliquid">
    Authorize a VOOI-managed agent once USDC is on Hyperliquid
  </Card>

  <Card title="Register on Lighter" icon="plug" href="/docs/register-lighter">
    Authorize a VOOI-managed key once USDC is on Lighter
  </Card>

  <Card title="Register on Extended" icon="plug" href="/docs/register-extended">
    Set up an Extended account from your EVM wallet
  </Card>

  <Card title="Withdrawals" icon="arrow-up" href="/docs/withdrawals">
    Move funds back out to your wallet
  </Card>
</CardGroup>


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.