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

# USDC flows

> Every USDC deposit, withdrawal and HyperEVM transfer into and out of HyperCore, with the account, as paged events or totals per interval. Build plan and above.

Track the USDC that enters and leaves HyperCore: every Arbitrum bridge deposit and withdrawal, and every transfer from and to HyperEVM, with the HyperCore account it belongs to. Read the events one by one, or the totals per interval for a chart or a net-flow signal. Both routes cover Hyperliquid as a whole, not one market, and come with the Build, Pro, Scale and Enterprise plans.

## What counts as a flow

Each event has one of four kinds:

| Kind | Meaning |
| - | - |
| `deposit` | USDC bridged in from Arbitrum |
| `withdraw` | USDC bridged out to Arbitrum. `fee_usd` carries the 1 USDC withdrawal fee |
| `evm_in` | USDC moved from HyperEVM into HyperCore. CCTP transfers into Hyperliquid arrive this way |
| `evm_out` | USDC moved from HyperCore to HyperEVM. CCTP transfers out of Hyperliquid leave this way |

Deposits and HyperEVM inflows add to HyperCore's USDC; withdrawals and HyperEVM outflows take from it. Transfers between accounts inside HyperCore are not flows.

## Routes

| Dataset | Route and endpoint reference |
| - | - |
| Flow events | `/v1/hyperliquid/usdc-flows`: [Get Hyperliquid USDC flow events](https://docs.0xarchive.io/api-reference/hyperliquid--usdc-flows/get-hyperliquid-usdc-flow-events.md) |
| Totals per interval | `/v1/hyperliquid/usdc-flows/volume`: [Get Hyperliquid USDC flow volume](https://docs.0xarchive.io/api-reference/hyperliquid--usdc-flows/get-hyperliquid-usdc-flow-volume.md) |

USDC flows are exchange-wide, so there is no HIP-3, HIP-4 or Spot twin: those paths answer `404` with `error_code` `unsupported_for_venue`, naming the routes above.

## Plans and credits

USDC flows come with the Build, Pro, Scale and Enterprise plans. A Free key receives `403` with `error_code` `forbidden`, the `datatype` (`usdc_flows`), the `required_plans` and an `upgrade_url`. A refused request is not charged.

Both routes are billed like liquidations: 1 credit per 1,000 rows returned, with a minimum of 1 credit per request. See [Credits](https://docs.0xarchive.io/core-concepts/credits.md).

## Get the events

```bash theme={"theme":"github-dark"}
curl "https://api.0xarchive.io/v1/hyperliquid/usdc-flows?start=2026-10-24T00:00:00Z&end=2026-10-24T06:00:00Z&min_usd=1000000&limit=2" \
  -H "X-API-Key: $OXARCHIVE_API_KEY" \
  -H "0xArchive-Version: 2026-10-01"
```

| Parameter | Behavior |
| - | - |
| `start` | Optional, Unix milliseconds or RFC 3339. Inclusive. Defaults to 24 hours before `end` |
| `end` | Optional, Unix milliseconds or RFC 3339. Inclusive. Defaults to now |
| `min_usd` | Optional number, 0 to 1,000,000,000,000. Only events of at least this amount. Defaults to 0 |
| `kind` | Optional. One of `deposit`, `withdraw`, `evm_in`, `evm_out`. Defaults to every kind |
| `limit` | Optional. Events per page, default 100, maximum 1,000. A larger value is read as 1,000 |
| `cursor` | Optional. `meta.next_cursor` from the previous page, passed back unchanged with the same filters |

Events are returned oldest first, in execution order:

```json theme={"theme":"github-dark"}
{
  "success": true,
  "data": [
    {
      "id": "1194932733:0",
      "timestamp": "2026-10-24T00:35:30.560Z",
      "timestamp_ms": 1792802130560,
      "kind": "evm_out",
      "amount_usd": 7000000.0,
      "fee_usd": 0.0,
      "user": "0x7fdafde5cfb5465924316eced2d3715494c517d1",
      "tx_hash": "0x429c669731c25129441604473939fd0202a3007cccc56ffbe66511e9f0c62b13",
      "block_number": 1194932733,
      "event_index": 0
    },
    {
      "id": "1195108415:0",
      "timestamp": "2026-10-24T04:06:47.580Z",
      "timestamp_ms": 1792814807580,
      "kind": "evm_out",
      "amount_usd": 1120249.116496,
      "fee_usd": 0.001544,
      "user": "0x8de4e80e041a7c9b816c2c24519742c51deab9aa",
      "tx_hash": "0xfd0cddc58d53599cfe8604473be83f01fa00f5ab2856786fa0d589184c573387",
      "block_number": 1195108415,
      "event_index": 0
    }
  ],
  "meta": {
    "count": 2,
    "has_more": true,
    "next_cursor": "1792814807580_1195108415_0",
    "request_id": "ea2599d5-c770-4f61-baf7-0260b1a08daf"
  }
}
```

| Field | Meaning |
| - | - |
| `id` | String, `block_number:event_index`. The event's identity: deduplicate and join pages on it |
| `timestamp`, `timestamp_ms` | Execution time, RFC 3339 UTC and Unix milliseconds |
| `kind` | `deposit`, `withdraw`, `evm_in` or `evm_out` |
| `amount_usd` | USDC moved, zero or more. `kind` gives the direction |
| `fee_usd` | The withdrawal fee, or a transfer's fee charged in USDC, else 0 |
| `user` | The HyperCore account the USDC entered or left |
| `tx_hash` | The HyperCore transaction hash. Not unique: a bridge batch finalizes up to 10 withdrawals under one hash and one millisecond |
| `block_number`, `event_index` | The block and the event's position in it |

## Page through the events

Pages follow execution order, so a page boundary that falls inside a bridge batch neither repeats nor skips an event.

A page reads at most 31 days of history. With a selective `min_usd`, a page can hold fewer events than `limit`, or none, and still carry `meta.next_cursor`. Keep paging while `meta.has_more` is `true` and stop only when it is `false`; a short or empty page is not the end. The SDK iterators that follow the cursor already do this. Set `start` and `end` explicitly for a long walk, so the window does not move between requests.

## Re-read the last 3 hours

Events in the last 3 hours can still be added after you have read past them. When a gap in the live record is repaired, the repaired event takes its place in execution order, which can be before a cursor you already used. A consumer that keeps a running copy should re-read the last 3 hours on each pass and deduplicate on `id`. Totals from `/volume` for the last 3 hours can change for the same reason.

## Get totals per interval

```bash theme={"theme":"github-dark"}
curl "https://api.0xarchive.io/v1/hyperliquid/usdc-flows/volume?start=2026-10-24T00:00:00Z&end=2026-10-24T02:00:00Z&interval=1h" \
  -H "X-API-Key: $OXARCHIVE_API_KEY" \
  -H "0xArchive-Version: 2026-10-01"
```

| Parameter | Behavior |
| - | - |
| `start`, `end` | As on the events route |
| `interval` | Optional. One of `1m`, `5m`, `15m`, `30m`, `1h`, `4h`, `1d`. Defaults to `1h`. Buckets open on UTC epoch boundaries, so `1d` is the UTC day |
| `limit` | Optional. Buckets per page, default 100, maximum 1,000 |
| `cursor` | Optional. `meta.next_cursor` from the previous page, passed back with the same `start`, `end` and `interval` |

Totals count every flow, so `/volume` does not take `min_usd` or `kind`: sending either returns `400` with `error_code` `invalid_parameter`. The page holds the buckets whose open is in `[start, end]`, oldest first, with zeros where nothing flowed. It never goes past the bucket holding now, which is still filling.

```json theme={"theme":"github-dark"}
{
  "success": true,
  "data": [
    {
      "timestamp": "2026-10-24T00:00:00.000Z",
      "timestamp_ms": 1792800000000,
      "deposit_usd": 469653.6,
      "deposit_count": 54,
      "withdraw_usd": 1844442.5,
      "withdraw_count": 48,
      "evm_in_usd": 1628294.58,
      "evm_in_count": 363,
      "evm_out_usd": 8417715.29,
      "evm_out_count": 253,
      "net_usd": -8164209.61
    }
  ],
  "meta": {
    "count": 3,
    "has_more": false,
    "request_id": "68ad62ae-68c4-49e3-aaf2-aae0f50e7f2b"
  }
}
```

The response above is trimmed to its first bucket. Each `*_usd` total is in USD to the cent and each `*_count` is the number of events of that kind. `net_usd` is deposits plus HyperEVM inflows, less withdrawals and HyperEVM outflows.

## Available history

USDC flows start at the first recorded flow, 2025-09-27 09:33 UTC. A window that ends before it returns an empty page with `meta.coverage_from` and `meta.notice`. A window that straddles it is served from it, and on `/volume` the first bucket then counts only the flows from 09:33 on, which `meta.notice` states.

## Access

Each venue's start date, plans and page limit come from [`GET /v1/capabilities`](https://docs.0xarchive.io/capabilities), followed by the SDK, CLI and MCP names for the same data. Send `0xArchive-Version: 2026-10-01` for the current response contract; see [API conventions](https://docs.0xarchive.io/conventions.md).

| Venue | Availability |
| - | - |
| Hyperliquid | From 2025-09-27 09:33 UTC REST only, no WebSocket channel Plans: Build, Pro, Scale and Enterprise only Up to 1,000 rows a page USDC entering and leaving HyperCore: Arbitrum bridge deposits and withdrawals, and transfers to and from HyperEVM (which also carries CCTP), with the HyperCore account. Events page through the whole history by cursor and join on id; /volume totals every flow per interval. |

| Surface | Names |
| - | - |
| Python SDK | `client.hyperliquid.usdc_flows.history(...)`, `.usdc_flows.volume(...)` |
| TypeScript SDK | `client.hyperliquid.usdcFlows.history(...)`, `.usdcFlows.volume(...)` |
| Rust SDK | `client.hyperliquid.usdc_flows.history`, `.usdc_flows.volume` |
| CLI | `oxa usdc-flows history`, `oxa usdc-flows volume` |
| MCP tools | `get_usdc_flows`, `get_usdc_flow_volume` |

## Stream it live

There is no USDC flow WebSocket channel. Poll the events route with a cursor for new events, and re-read the last 3 hours as described above.

## Use it from an agent

**Ask for USDC flows in a window**

Through the [MCP server](https://docs.0xarchive.io/mcp-server.md), ask for USDC flow events above a size, or for totals per hour or day, on a Build plan or above.

[Connect your agent](https://docs.0xarchive.io/mcp-server.md)

## Next step

**Put the flows next to price**

Compare net USDC flow with candles for the same window to see whether money moved before or after the market did.

[Explore candles](https://docs.0xarchive.io/rest-api/candles.md)


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