Skip to main content
GET
cURL
This is the deprecated alias of Sharp money flows. It takes the same parameters and returns the same rows and the same ETag, plus 2 headers that say it is deprecated. Use the canonical route for anything new. This one stays live and is never removed.

Parameters

The parameters are exactly those of Sharp money flows: timeframe, limit, cursor, category, platform, min_grade, and direction. The names, the values, and the defaults are all unchanged, and the spec below lists them in full.

Key response fields

The rows are exactly those of Sharp money flows. Each one carries a canonical sharp_money object and a smart_money copy of it, field for field the same.

Headers the alias adds

No Sunset header is sent, because no removal is planned. The canonical route sends neither header.

Migrate

  1. Replace /api/v1/markets/smart-money-flows with /api/v1/markets/sharp-money-flows.
  2. Read sharp_money instead of smart_money. Both routes return both objects, field for field the same.
  3. Keep every query parameter as it is. None of the names or values changed.
On the remote MCP server the pair is get_sharp_money_flows and the deprecated get_smart_money_flows.

When a cursor expires

A cursor stops working when your filters change, when the wallet rankings are rebuilt, or when the flow totals are recomputed. It then answers 400 with error.reason cursor_expired and error.param cursor. Any cursor you stored before September 22, 2026 is refused the same way. Discard the cursor and request the first page again. There is no Retry-After on this error, because waiting does not fix it.

Example

The -i flag prints the Deprecation and Link headers above the body.

What it does not return

  • Anything the canonical route does not. The rows are the same, field for field.
  • A Sunset date. None is planned.
  • A smart_money object that differs from sharp_money. It is a copy of it, on this route and on the canonical one.

Caching

Send the ETag from a response back in an If-None-Match header. If the ranking has not changed, you get 304 Not Modified with an empty body.

Authorizations

Authorization
string
header
required

Legacy default or named integration API key, or OAuth 2.1 access token, in the Authorization header as Bearer oxi_sk_live_... or Bearer oxi_at_.... Default keys retain full access; integration keys are limited to their approved read, webhooks, export and usage scopes and expire within 90 days. All credentials share the owner's account limits. Data calls require an active Pro subscription and return live data. A 401 carries WWW-Authenticate: Bearer resource_metadata="https://api.0xinsider.com/.well-known/oauth-protected-resource" (RFC 6750 section 3, RFC 9728).

Headers

X-Query-Validation
enum<string>

Opt into strict query-name validation. The default is compatible: unknown names are ignored and reported in X-Query-Ignored. With strict, an unknown name returns 400 bad_request with error.reason unknown_query_parameter before the handler runs, including when its percent escape is incomplete.

Available options:
strict
If-None-Match
string

Conditional GET validator from a previous ETag. Matching values return 304 Not Modified with an empty body.

Query Parameters

timeframe
enum<string>
default:24h

Lookback window for grade-filtered whale flow aggregation.

Available options:
1h,
4h,
24h,
7d
limit
integer
default:20

Page size. Out-of-range values are clamped to 1..100.

Required range: 1 <= x <= 100
cursor
string

Opaque cursor from previous response's next_cursor. Encodes the first-page as_of timestamp, normalized effective filters, ranking and aggregate collection revisions, plus the last row's absolute net flow and condition_id. A changed filter or collection returns cursor_expired; request the first page again.

category
string

Filter by market category (case-insensitive). A canonical bucket name (e.g. Basketball) matches every provider member that folds into it (NBA, WNBA, NCAAB); a raw provider value also resolves to its bucket.

platform
enum<string>
default:all

Filter by source platform. all is a request-side no-op.

Available options:
polymarket,
all
min_grade
enum<string>
default:B

Minimum latest trader grade included in the flow. Default B means S/A/B only; unranked traders are excluded.

Available options:
S,
A,
B,
C,
D,
F
direction
enum<string>

Optional post-aggregate flow direction filter.

Available options:
YES,
NO

Response

Ranked market sharp-money flows

object
string
required
Allowed value: "list"
data
object[]
required
has_more
boolean
required
meta
object
required
next_cursor
string
total
integer