Skip to main content
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: 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

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.

Get the events

Events are returned oldest first, in execution order:

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

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

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

Next step

Last modified on November 4, 2026