Skip to main content
Glama

Server Details

Real-time whale trades, Smart Money Radar, market snapshots, news sentiment, signal outcomes.

Glama couldn't complete the latest health check. If this server requires authentication, missing or expired test credentials may be the cause. A test profile lets Glama authenticate for health checks and discover tools; it is separate from your personal connections.

If you are the author, claim ownership, then add or update a test profile under Admin → Test Profile.

Status
Unhealthy
Uptime
68.6% over 56 days
Last Tested
Transport
Streamable HTTP · MCP 2025-11-25
URL

TDQS

A3.6/5.0

Scored across 21 tools

Disambiguation2/5

Several tools overlap in purpose: big_catch and situations both describe current one-coin setups with phases, while whale_radar and market_now both surface coins with unusual whale flow. coin_brief also bundles data that news, liquidations, and whale_activity provide separately, creating ambiguous boundaries. Explicit cross-references help in a few cases, but many tools appear to do similar things with subtly different defaults.

Naming Consistency4/5

All names use lowercase snake_case and mostly follow a noun or noun-qualifier pattern like coin_brief, market_now, and whale_activity. Minor deviations such as big_catch, watch, and plural-only liquidations/news/options slightly break the pattern, but no naming conventions are mixed. Overall the naming is predictable and readable.

Tool Count3/5

With 21 tools, the set is on the heavy side and many tools internally pack multiple views—market_now has six views, traders has six, and whale_activity has seven. This makes the count feel bloated and harder to navigate, though not extreme enough for a 2. Most tools earn their place, but the surface area exceeds a tight, minimal scope.

Completeness4/5

The server covers the core read-only crypto intelligence workflow well: coin discovery, price and funding/OI history, whale-flow activity, liquidations, news, signals, orderbook, options, sectors, and personal watchlists/alerts. Minor gaps exist, such as no historical options data or an explicit comprehensive coin-list endpoint, but these can be worked around. Overall, most expected workflows have no dead ends.

Available Tools

21 tools
big_catchLive whale setupsB
Read-onlyIdempotent
Inspect

The whale-flow setups tracked right now, one coin each, with state (forming, confirmed, accelerating), direction, age and the price move since it started.

ParametersJSON Schema
NameRequiredDescriptionDefault
coinNoCoin symbol, e.g. BTC. A pair like ETH/USD works too.
limitNoRows to return (usually up to 100; more is clamped and said).
cursorNoNext page: the cursor from the previous answer.
detailNobrief (default): the answer, key numbers and top rows. full: every row, paged with cursor.

Output Schema

ParametersJSON Schema
NameRequiredDescription
as_ofNoData time, ISO.
caveatNoA real limit, when non-null.
cursorNoNext page (detail full).
delayedNoSet when not live.
summaryNoThe answer in one sentence.
as_of_msNoData time, Unix ms.
availableNoFalse: no data; note says why.
truncatedNoRows held back; see trimmed.
next_toolsNoFollow-up calls {tool,args,why}.
access_noteNoWhat this connection could not return.

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds that results are live ('right now') and that detail can be brief or full, but it does not disclose clamping behavior or pagination details beyond what the schema already says. No contradiction with annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, compact sentence that front-loads the core purpose and lists the key output fields. It is efficient and easy to scan, though it could be slightly more explicit about usage boundaries.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the output schema exists and annotations cover safety, the description is adequate for a read-only list tool. However, it does not clarify how this tool differs from whale_activity or whale_radar, and it leaves the agent to infer when to use it. For a tool with 4 optional parameters and a paging mechanism, a bit more context would help.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents all four parameters. The description adds minimal semantic value beyond the schema, only reinforcing that the tool is live and that detail controls row granularity. Baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('tracked right now') and resource ('whale-flow setups'), and lists the key fields (state, direction, age, price move). It is clear what the tool returns, though it does not explicitly distinguish it from sibling tools like whale_activity or whale_radar.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies real-time tracking ('right now') and mentions optional filtering by coin and pagination via cursor, but it does not explicitly state when to use this tool versus alternatives like whale_activity or whale_radar. The usage context is implied rather than spelled out.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

coin_briefCoin brief: why it is movingA
Read-onlyIdempotent
Inspect

The one-call answer for ONE coin, in causal order: price and 24h move, the news read (summary, mood, headlines), whale flow against its own normal, forced closes, funding and open interest, with recorded-history context. Answers "why is X moving" without a second call. view: brief (default), quick (price, funding, open interest only), funding (rate per exchange), crowding (0-100 crowding read, Pro).

ParametersJSON Schema
NameRequiredDescriptionDefault
coinNoCoin symbol, e.g. BTC. A pair like ETH/USD works too.
viewNoWhich lane; see the description.
cursorNoNext page: the cursor from the previous answer.
detailNobrief (default): the answer, key numbers and top rows. full: every row, paged with cursor.
compactNotrue: one line of text instead of JSON.
position_usdNoPosition size in USD, to price the funding cost.

Output Schema

ParametersJSON Schema
NameRequiredDescription
as_ofNoData time, ISO.
caveatNoA real limit, when non-null.
cursorNoNext page (detail full).
delayedNoSet when not live.
summaryNoThe answer in one sentence.
as_of_msNoData time, Unix ms.
availableNoFalse: no data; note says why.
truncatedNoRows held back; see trimmed.
next_toolsNoFollow-up calls {tool,args,why}.
access_noteNoWhat this connection could not return.

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover readOnlyHint, idempotentHint, and destructiveHint, lowering the burden. The description adds meaningful behavioral context beyond those: the response is organized 'in causal order', the output is guaranteed to avoid a second call, view variants alter what is returned, and crowding is gated to Pro users. No contradiction with annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two dense sentences with the core promise front-loaded ('one-call answer for ONE coin, in causal order') before the content list and view lanes. Every clause earns its place, and the view enumeration is necessary because the schema explicitly defers to the description for lane meanings.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need not be explained. The description covers the data categories, the single-call behavior, all view variants with their contents, and the Pro restriction. The only minor gap is not naming sibling alternatives for routing, but for a well-scoped read-only analysis tool this is near-complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3, but the description genuinely expands on the view parameter: it defines what quick (price, funding, OI only), funding (rate per exchange), and crowding (0-100, Pro) each return, while the schema merely says 'Which lane; see the description.' This makes the description the canonical source for view semantics beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb/resource: 'one-call answer for ONE coin' that answers 'why is X moving', enumerating exact content (price, 24h move, news read, whale flow, forced closes, funding, open interest). The single-coin causal framing distinguishes it from market-wide siblings like market_screener, market_now, and watchlist_brief without them being named.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives clear context: use this when the question is 'why is X moving' for one coin and you want it without a second call. Scope is explicit with 'ONE coin', implying it is not for portfolio scans or multi-coin comparisons, but no alternative tool is named and there is no when-not-to-use exclusion.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

historyPrice and funding historyA
Read-onlyIdempotent
Inspect

History for one coin. series: price (default: near-live hourly or daily bars, oldest first), funding_oi (the intraday open interest and funding path), daily (the recorded daily archive of funding, open interest, price and liquidations for the coin), whale_daily (the recorded daily whale buy and sell flow for the coin).

ParametersJSON Schema
NameRequiredDescriptionDefault
coinNoCoin symbol, e.g. BTC. A pair like ETH/USD works too.
daysNoHow many days back to read.
hoursNoHow many hours back to read.
limitNoRows to return (usually up to 720; more is clamped and said).
cursorNoNext page: the cursor from the previous answer.
detailNobrief (default): the answer, key numbers and top rows. full: every row, paged with cursor.
seriesNoWhich lane; see the description.
intervalNoprice only: 1h (default) or 1d.

Output Schema

ParametersJSON Schema
NameRequiredDescription
as_ofNoData time, ISO.
caveatNoA real limit, when non-null.
cursorNoNext page (detail full).
delayedNoSet when not live.
summaryNoThe answer in one sentence.
as_of_msNoData time, Unix ms.
availableNoFalse: no data; note says why.
truncatedNoRows held back; see trimmed.
next_toolsNoFollow-up calls {tool,args,why}.
access_noteNoWhat this connection could not return.

TDQS

A3.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, covering safety. The description adds useful behavioral context: the default series (price), the default interval (hourly or daily), ordering (oldest first), and the nature of each series (e.g., intraday funding/OI, daily archive, whale flows). This goes beyond annotations without contradicting them.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single sentence that efficiently packs the core purpose and all four series definitions. It's front-loaded with 'History for one coin' and avoids filler. While dense, every phrase adds information, making it appropriately concise for the complexity.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only tool with an output schema and fully documented parameters, the description covers the main decision point (which series to use) and default behavior. It doesn't mention pagination or detail modes, but those are described in the parameter fields. The description is sufficient for an agent to call the tool correctly without missing key information.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so parameters like coin, days, limit, etc., are already documented. The description enriches the 'series' parameter by explaining what each enum value returns (e.g., 'near-live hourly or daily bars', 'intraday open interest and funding path'). This adds semantic value beyond the schema's simple 'Which lane; see the description.'

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states 'History for one coin' and enumerates the available series (price, funding_oi, daily, whale_daily), each with a brief explanation. This is specific and goes beyond a mere tautology. It doesn't explicitly contrast with sibling tools, but as the only 'history' tool it's distinct enough.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is provided on when to use this tool versus alternatives. The description only explains what it does, not the conditions for selecting it over other tools like market_now or coin_brief. There's no mention of when to prefer this tool or exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

liquidationsForced closes (liquidations)A
Read-onlyIdempotent
Inspect

Forced closes. scope: coin (recorded long vs short closes for one coin, the default when a coin is named), market (the whole market, long/short split, the default otherwise), lending (on-chain lending liquidations with both wallets, never added to perp), projected (modelled levels, not trades), heat (where closes hit by price band). A long is force-closed by selling.

ParametersJSON Schema
NameRequiredDescriptionDefault
coinNoCoin symbol, e.g. BTC. A pair like ETH/USD works too.
chainNoethereum, base or arbitrum. Omit for all.
hoursNoHow many hours back to read.
limitNoRows to return (usually up to 1000; more is clamped and said).
scopeNoWhich lane; see the description.
cursorNoNext page: the cursor from the previous answer.
detailNobrief (default): the answer, key numbers and top rows. full: every row, paged with cursor.
since_msNoOnly rows newer than this Unix-ms time (polling cursor).

Output Schema

ParametersJSON Schema
NameRequiredDescription
as_ofNoData time, ISO.
caveatNoA real limit, when non-null.
cursorNoNext page (detail full).
delayedNoSet when not live.
summaryNoThe answer in one sentence.
as_of_msNoData time, Unix ms.
availableNoFalse: no data; note says why.
truncatedNoRows held back; see trimmed.
next_toolsNoFollow-up calls {tool,args,why}.
access_noteNoWhat this connection could not return.

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover read-only, idempotent, and non-destructive behavior. The description adds useful behavioral context beyond that: lending closes are on-chain and excluded from perp, projected levels are modelled rather than actual trades, and long closes are executed by selling. No contradiction with annotations exists.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is dense and efficient: a two-word subject followed by a compact scope legend, with a final clarifying sentence about long liquidations. Every clause adds information, and there is no repetition of schema content or annotations.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only query tool with eight optional parameters and an output schema, the description covers the meaning of every scope lane and the relevant defaults. It does not discuss pagination or polling parameters, but those are fully documented in the schema, so the description is sufficiently complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3, but the description adds real meaning for the scope parameter, which the schema explicitly defers to the description ('see the description'). It also explains default behavior per scope, going beyond the property names and enum values.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly identifies the resource as forced closes/liquidations and enumerates the distinct scope lanes. It is unambiguous about what the tool exposes, though it does not explicitly contrast itself with sibling tools like history or market_now.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear selection context within the tool: which scope is the default when a coin is named versus otherwise, and that lending liquidations are never added to perp. It does not mention alternative tools, but the internal scope guidance is concrete and actionable.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

market_nowMarket now: what changedA
Read-onlyIdempotent
Inspect

The whole market in one call. view: changes (default: what changed since your last check or since_ms, ranked by how unusual, with plain state labels, what whales net bought and sold, coins that turned unusual, biggest movers, forced closes, the market news read; pass back next_since_ms on a timer), overview (totals, whale net flow, top coins; pass coin for one row), movers (24h gainers and losers with volume), extremes (pairs at a record or their own top or bottom 5% for funding, open interest or liquidations), defi (DEX volume and TVL per chain).

ParametersJSON Schema
NameRequiredDescriptionDefault
coinNoCoin symbol, e.g. BTC. A pair like ETH/USD works too.
onlyNomovers only: one side.
viewNoWhich lane; see the description.
limitNoRows to return (usually up to 50; more is clamped and said).
cursorNoNext page: the cursor from the previous answer.
detailNobrief (default): the answer, key numbers and top rows. full: every row, paged with cursor.
since_msNochanges only: only changes after this Unix-ms time. Omit for everything since your last check.

Output Schema

ParametersJSON Schema
NameRequiredDescription
as_ofNoData time, ISO.
caveatNoA real limit, when non-null.
cursorNoNext page (detail full).
delayedNoSet when not live.
summaryNoThe answer in one sentence.
as_of_msNoData time, Unix ms.
availableNoFalse: no data; note says why.
truncatedNoRows held back; see trimmed.
next_toolsNoFollow-up calls {tool,args,why}.
access_noteNoWhat this connection could not return.

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description adds meaningful behavioral context beyond the annotations: stateful behavior ('since your last check', 'pass back next_since_ms on a timer'), result clamping ('more is clamped and said' in the limit param), unusualness ranking, and the brief/full detail split. Annotations already cover the read-only, idempotent safety profile, so no contradiction exists; the description enriches the operational picture.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The opener 'The whole market in one call' front-loads the purpose well and every clause adds information rather than padding. But the body is a single run-on sentence with nested parentheticals and semicolons exceeding 80 words, making it notably hard to parse; per-view bullets or line breaks would drastically improve scannability.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 5-view, 7-parameter tool with an output schema and safety annotations, the description covers all views, the stateful since-last-check behavior, pagination via cursor/next_since_ms, and the brief/full detail split. Minor gaps like explicit auth/rate-limit mentions and error behavior are not critical for a read-only aggregator.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3. The description carries real semantic weight for the central view parameter — the schema explicitly defers ('Which lane; see the description') and the description defines each lane's payload. It also adds the since_ms/next_since_ms timer protocol and cross-parameter behavior ('overview ... pass coin for one row') that the schema does not.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The opener 'The whole market in one call' names the verb-resource pair and positions this as the market-wide aggregator tool, and each of the five view descriptions states exactly what that lane returns. This clearly distinguishes it from siblings like coin_brief (single coin), market_screener (screening), and news (news feed).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The per-view breakdown gives clear implied context for when each lane is appropriate (changes for what moved since last check, movers for 24h gainers/losers, defi for DEX volume/TVL). However, no sibling alternatives are named and there are no explicit when-not-to-use or exclusion statements, so deciding between market_now, market_screener, and coin_brief is left to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

market_screenerMarket screenerA
Read-onlyIdempotent
Inspect

Screen every recorded pair at once: funding_band and oi_band against each pair's own recorded days (record high, top 5%, top 25%, typical, bottom 25%, bottom 5%, record low), a minimum whale-flow multiple, and unusual-only.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoRows to return (usually up to 50; more is clamped and said).
cursorNoNext page: the cursor from the previous answer.
detailNobrief (default): the answer, key numbers and top rows. full: every row, paged with cursor.
compactNotrue: one line per coin.
oi_bandNoOpen interest band(s).
funding_bandNoFunding band(s), e.g. "top 5%".
unusual_onlyNoOnly coins with unusual whale activity now.
whale_mult_minNoMinimum whale flow as a multiple of the coin's own average.

Output Schema

ParametersJSON Schema
NameRequiredDescription
as_ofNoData time, ISO.
caveatNoA real limit, when non-null.
cursorNoNext page (detail full).
delayedNoSet when not live.
summaryNoThe answer in one sentence.
as_of_msNoData time, Unix ms.
availableNoFalse: no data; note says why.
truncatedNoRows held back; see trimmed.
next_toolsNoFollow-up calls {tool,args,why}.
access_noteNoWhat this connection could not return.

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already mark this as read-only and idempotent.te, lowering the bar. The description adds meaningful behavioral context by stating that bands are evaluated 'against each pair's own recorded days' and by listing the exact band thresholds. This helps the agent understand that results are relative per pair, not global.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, front-loaded sentence: 'Screen every recorded pair at once' followed by a compact list of criteria. No filler or redundant phrases. The band list is dense but necessary, and each element earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present, the description doesn't need to cover return shapes. It fully explains the screening logic, the key parameter semantics, and the tool's scope. Pagination and output-detail parameters are already documented in the schema, so an agent has everything needed to call this tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Although schema coverage is 100%, the description adds crucial meaning beyond the schema: it explains that funding_band and oi_band are interpreted relative to each pair's own recorded days, and it clearly maps 'minimum whale-flow multiple' to whale_mult_min and 'unusual-only' to unusual_only. This resolves ambiguity that the bare schema leaves.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb and resource: 'Screen every recorded pair at once.' It then enumerates the screening criteria (funding_band, oi_band, whale-flow multiple, unusual-only), making it unmistakable what the tool does. This distinguishes it clearly from siblings like coin_brief or watchlist_brief, which target narrower scopes.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The phrase 'every recorded pair at once' makes the tool's use case explicit: whole-market screening rather than single-coin or watchlist inspection. It doesn't name alternative tools or list exclusion conditions, but the context is clear enough for an agent to decide when to invoke it.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

my_accessMy plan and answers leftA
Read-onlyIdempotent
Inspect

Your plan, what it includes, roughly how many answers are left, and the next plan up. Free, never counted.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
as_ofNoData time, ISO.
caveatNoA real limit, when non-null.
cursorNoNext page (detail full).
delayedNoSet when not live.
summaryNoThe answer in one sentence.
as_of_msNoData time, Unix ms.
availableNoFalse: no data; note says why.
truncatedNoRows held back; see trimmed.
next_toolsNoFollow-up calls {tool,args,why}.
access_noteNoWhat this connection could not return.

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds valuable behavioral context: 'Free, never counted' clarifies that using this tool does not consume plan answers, which is a meaningful behavioral trait beyond the annotations. It also discloses the approximate nature of the answer count ('roughly').

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, compact sentence that front-loads the core purpose ('Your plan, what it includes, roughly how many answers are left, and the next plan up') and ends with a useful behavioral note ('Free, never counted'). Every word earns its place; no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a zero-parameter, read-only status tool with a rich output schema, the description is nearly complete. It explains what the user will see and the key behavioral caveat (not counted). The only minor gap is that it doesn't explicitly say 'use this to check your plan status,' but the purpose is obvious from the description and title.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has zero parameters, so the schema provides no parameter semantics. The description compensates by explaining what the tool returns (plan details, answer count, next plan), which is the relevant semantic content. With 0 params, the baseline is 4, and the description meets it.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states what the tool does: it shows the user's plan, what it includes, roughly how many answers are left, and the next plan up. It uses a specific verb ('Your plan...') and resource, and the title reinforces the purpose. It doesn't explicitly distinguish from siblings, but the resource ('my plan') is unique among the listed siblings.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage context: it's a read-only status check for the user's plan and remaining answers. It doesn't explicitly state when to use it vs alternatives, but the sibling list contains no other plan-related tool, so the context is clear enough. No exclusions or alternatives are mentioned.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

my_alertsMy fired alertsB
Read-onlyIdempotent
Inspect

What your CoinLobster alerts fired since a time, newest first, with the move since each. Needs a signed-in connection (free).

ParametersJSON Schema
NameRequiredDescriptionDefault
coinNoCoin symbol, e.g. BTC. A pair like ETH/USD works too.
cursorNoNext page: the cursor from the previous answer.
detailNobrief (default): the answer, key numbers and top rows. full: every row, paged with cursor.
since_msNoOnly rows newer than this Unix-ms time (polling cursor).

Output Schema

ParametersJSON Schema
NameRequiredDescription
as_ofNoData time, ISO.
caveatNoA real limit, when non-null.
cursorNoNext page (detail full).
delayedNoSet when not live.
summaryNoThe answer in one sentence.
as_of_msNoData time, Unix ms.
availableNoFalse: no data; note says why.
truncatedNoRows held back; see trimmed.
next_toolsNoFollow-up calls {tool,args,why}.
access_noteNoWhat this connection could not return.

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds that a signed-in connection is needed and that it returns alerts that have 'fired' since a time, which is useful context. However, it does not elaborate on pagination behavior or response structure, but with annotations and an output schema present, the description adds sufficient supplementary context.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single sentence, front-loaded with the main function, and includes the key prerequisite (signed-in connection). Every word earns its place; no fluff or redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the output schema exists, the annotations cover safety, and the schema documents all parameters, the description is fairly complete. It covers the core behavior, sorting, and the time constraint. The main gap is lack of usage guidance to differentiate from sibling tools, but that is addressed under usage_guidelines. Overall, an agent can call this tool correctly based on the information provided.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% – every parameter has a description in the schema. The description itself only mentions 'since a time', which mirrors the since_ms parameter, but adds no new meaning beyond the schema. The baseline of 3 is appropriate because the schema handles parameter documentation.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a clear purpose: list fired alerts since a time, sorted newest first, with the move since each. It uses a specific verb ('fired') and resource (alerts), and is not a tautology. However, it does not explicitly distinguish itself from sibling alert-related tools like 'signals' or 'watchlist_brief', though the phrase 'fired alerts' gives some distinction.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance on when to use this tool versus alternatives. It mentions the requirement for a signed-in connection, but does not state under what circumstances an agent should choose this over other alert/notification tools. No exclusions or alternative tool names are provided.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

newsCrypto newsA
Read-onlyIdempotent
Inspect

Headlines for one coin with the mood score (-100 to +100), the written points behind it and the market-wide read. For "why is X moving" use coin_brief: it already carries this.

ParametersJSON Schema
NameRequiredDescriptionDefault
coinNoCoin symbol, e.g. BTC. A pair like ETH/USD works too.
limitNoRows to return (usually up to 20; more is clamped and said).
cursorNoNext page: the cursor from the previous answer.
detailNobrief (default): the answer, key numbers and top rows. full: every row, paged with cursor.

Output Schema

ParametersJSON Schema
NameRequiredDescription
as_ofNoData time, ISO.
caveatNoA real limit, when non-null.
cursorNoNext page (detail full).
delayedNoSet when not live.
summaryNoThe answer in one sentence.
as_of_msNoData time, Unix ms.
availableNoFalse: no data; note says why.
truncatedNoRows held back; see trimmed.
next_toolsNoFollow-up calls {tool,args,why}.
access_noteNoWhat this connection could not return.

TDQS

A4.3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already mark it read-only, idempotent, and non-destructive, so the safety profile is covered. The description adds useful output-composition context but no additional behavioral traits such as rate limits or side effects. No contradiction exists.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences with no filler; the output highlights are front-loaded and the alternative routing is a short second sentence. Every sentence earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, and the parameter schema covers clamping, paging, cursor use, and detail modes. Combined with the description's clear purpose and sibling routing, nothing an agent needs for correct invocation is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the parameters are already well documented with examples, defaults, and paging behavior. The description reinforces that the tool targets one coin but adds no new parameter-level semantics.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names the exact resource (news for one coin) and lists distinctive outputs: headline, mood score with range, written points, and market-wide read. It also distinguishes itself from coin_brief, so an agent can select it without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It explicitly says not to use this tool for 'why is X moving' and routes to coin_brief as the alternative. The tool's own use case—single-coin headlines with sentiment and market context—is clear from the first sentence.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

optionsOptions (BTC, ETH)A
Read-onlyIdempotent
Inspect

BTC or ETH options: open interest by strike, put/call balance, max pain per expiry, implied volatility and recent large option trades.

ParametersJSON Schema
NameRequiredDescriptionDefault
coinNoBTC (default) or ETH.
cursorNoNext page: the cursor from the previous answer.
detailNobrief (default): the answer, key numbers and top rows. full: every row, paged with cursor.

Output Schema

ParametersJSON Schema
NameRequiredDescription
as_ofNoData time, ISO.
caveatNoA real limit, when non-null.
cursorNoNext page (detail full).
delayedNoSet when not live.
summaryNoThe answer in one sentence.
as_of_msNoData time, Unix ms.
availableNoFalse: no data; note says why.
truncatedNoRows held back; see trimmed.
next_toolsNoFollow-up calls {tool,args,why}.
access_noteNoWhat this connection could not return.

TDQS

A3.6/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description itself adds no behavioral context such as pagination behavior, defaults, or side effects; it only lists data content, which does not go beyond the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, front-loaded sentence that packs the resource and the key delivered data fields with no filler or redundant wording. Every part earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The full input schema, output schema, and annotations cover the calling contract well, and the description supplies the domain content. The only notable gap is explicit usage routing versus sibling tools, but that is already captured under the usage-guidelines dimension.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%: coin, cursor, and detail are all documented in the schema, including defaults and the brief/full enum. The description adds no parameter-specific meaning beyond that, so the baseline of 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names the specific resource (BTC or ETH options) and enumerates exactly what data is provided: open interest by strike, put/call balance, max pain per expiry, implied volatility, and large trades. This clearly distinguishes it from sibling tools like orderbook or liquidations.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies a clear use case for fetching BTC/ETH options data, but gives no explicit when-to-use versus when-not-to-use guidance and does not name any alternatives or exclusions. The context is clear but the routing guidance is only implicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

orderbookOrder bookA
Read-onlyIdempotent
Inspect

The order book for one coin merged across exchanges: best bid and ask, the gap between them, and the dollars resting on each side with the exchanges holding each level.

ParametersJSON Schema
NameRequiredDescriptionDefault
coinNoCoin symbol, e.g. BTC. A pair like ETH/USD works too.
cursorNoNext page: the cursor from the previous answer.
detailNobrief (default): the answer, key numbers and top rows. full: every row, paged with cursor.
levelsNoPrice levels per side.

Output Schema

ParametersJSON Schema
NameRequiredDescription
as_ofNoData time, ISO.
caveatNoA real limit, when non-null.
cursorNoNext page (detail full).
delayedNoSet when not live.
summaryNoThe answer in one sentence.
as_of_msNoData time, Unix ms.
availableNoFalse: no data; note says why.
truncatedNoRows held back; see trimmed.
next_toolsNoFollow-up calls {tool,args,why}.
access_noteNoWhat this connection could not return.

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already establish read-only, idempotent, non-destructive behavior, and the description adds meaningful context by disclosing that the data is merged across exchanges and showing exactly what is computed: bid/ask, spread, side dollar amounts, and holding exchanges. This goes beyond simply restating the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single densely informative sentence that front-loads the core subject ('order book for one coin merged across exchanges') and then lists the returned quantities in a natural order. There is no redundant wording or filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only tool with no required parameters and an output schema, the description plus schema covers the coin scope, aggregation behavior, and key returned items. The only real shortfall is explicit routing guidance among sibling tools, which was already penalized under usage guidelines.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and the schema already documents coin, cursor, detail, and levels. The description focuses on output content rather than parameter meaning, so it does not need to compensate for schema gaps; the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly specifies the tool returns a consolidated per-coin order book and enumerates its key contents: best bid and ask, the gap, dollars resting on each side, and the exchanges at each level. It stops short of a 5 because it is a noun-phrase definition rather than a verb-led instruction and does not explicitly name sibling tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The intended use is easy to infer: call this when the user wants a single coin's aggregated order book. However, there is no explicit when/when-not guidance or comparison to related tools such as market_now or coin_brief.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

sectorsSector rotationA
Read-onlyIdempotent
Inspect

Where whale money is moving between sectors (L1, L2, DeFi, memes, AI and others): net direction, share of flow and the coins carrying it.

ParametersJSON Schema
NameRequiredDescriptionDefault
cursorNoNext page: the cursor from the previous answer.
detailNobrief (default): the answer, key numbers and top rows. full: every row, paged with cursor.
windowNoTime window: 1h, 4h or 24h.

Output Schema

ParametersJSON Schema
NameRequiredDescription
as_ofNoData time, ISO.
caveatNoA real limit, when non-null.
cursorNoNext page (detail full).
delayedNoSet when not live.
summaryNoThe answer in one sentence.
as_of_msNoData time, Unix ms.
availableNoFalse: no data; note says why.
truncatedNoRows held back; see trimmed.
next_toolsNoFollow-up calls {tool,args,why}.
access_noteNoWhat this connection could not return.

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, covering the safety profile. The description adds that it provides net direction, share of flow, and coins, which is useful context about the data returned. However, it does not disclose any additional behavioral traits such as pagination limits or data freshness, but the annotations lower the burden.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, concise sentence that front-loads the core purpose and key outputs. There is zero fluff or redundancy, and every word contributes to understanding the tool's function.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool has an output schema, so return values are already documented. The description states the key data points (net direction, share of flow, coins) and the scope (sectors). It is complete for an agent to decide when to call it, though it lacks explicit mention of pagination (handled by cursor) or usage conditions, which is minor given the simplicity and existing schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, with all three parameters (cursor, detail, window) having descriptions in the schema. The description does not add any additional meaning beyond what the schema already provides. Baseline 3 is appropriate since the schema handles the parameter documentation.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's function: tracking where whale money moves between sectors, with specific outputs like net direction, share of flow, and coins. It uses a specific verb ('moving') and resource ('sectors'), making the purpose unambiguous and distinct from siblings like whale_activity which focus on individual whales rather than sector-level flow.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives. It does not mention any conditions, exclusions, or comparisons to sibling tools. The only implied usage is that it answers sector rotation queries, but no explicit when-to-use or when-not-to-use information is given.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

signalsSignal track recordA
Read-onlyIdempotent
Inspect

Signals logged live when they fired, never backfilled, with the price after. view: recent (default: the latest signals and their outcomes), record (the last N firings of one type on one coin: how many rose, median move), scorecard (the totals only).

ParametersJSON Schema
NameRequiredDescriptionDefault
coinNoCoin symbol, e.g. BTC. A pair like ETH/USD works too.
typeNoSignal type; an unknown one lists the valid types.
viewNoWhich lane; see the description.
hoursNoHow many hours back to read.
limitNoRows to return (usually up to 500; more is clamped and said).
cursorNoNext page: the cursor from the previous answer.
detailNobrief (default): the answer, key numbers and top rows. full: every row, paged with cursor.

Output Schema

ParametersJSON Schema
NameRequiredDescription
as_ofNoData time, ISO.
caveatNoA real limit, when non-null.
cursorNoNext page (detail full).
delayedNoSet when not live.
summaryNoThe answer in one sentence.
as_of_msNoData time, Unix ms.
availableNoFalse: no data; note says why.
truncatedNoRows held back; see trimmed.
next_toolsNoFollow-up calls {tool,args,why}.
access_noteNoWhat this connection could not return.

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With readOnlyHint and openWorldHint already in annotations, the description adds valuable context: signals are logged live when fired and never backfilled, each entry includes the price after, record shows how many rose and median move, and scorecard returns totals only. This goes beyond annotations, though it does not mention rate limits or pagination behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences with no filler. The first covers the core data provenance (live, never backfilled, price after), and the second lists the three views with their distinguishing outputs. Every clause earns its place and information is front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (7 optional parameters, 3 views, paginated detail mode), the description combined with full schema coverage and output schema gives an agent enough to call it correctly. The main missing piece is explicit when-to-use versus siblings, which is already reflected in the usage-guidelines score.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3. The description adds meaning for the view parameter by explaining each enum value (recent, record, scorecard) in terms of returned data, and implicitly clarifies the roles of type and coin for the record view. Other parameters are adequately described in the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool exposes signals with their outcomes and enumerates three distinct views (recent, record, scorecard) with their specific outputs. This identifies the resource and operation well, though it does not explicitly name sibling tools for differentiation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives internal guidance by explaining what each view is for, which helps choose among the view parameter values. However, it does not state when to use this tool instead of related siblings like history or market_now, so cross-tool usage guidance is only implicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

situationsWhat is developingA
Read-onlyIdempotent
Inspect

What is going on right now, in stages (emerging, confirmed, escalating, cooling, contested): one coin, one story each, with the evidence behind it and the price move since it started.

ParametersJSON Schema
NameRequiredDescriptionDefault
coinNoCoin symbol, e.g. BTC. A pair like ETH/USD works too.
limitNoRows to return (usually up to 50; more is clamped and said).
cursorNoNext page: the cursor from the previous answer.
detailNobrief (default): the answer, key numbers and top rows. full: every row, paged with cursor.
include_resolvedNoAlso finished ones with their outcome (Pro).

Output Schema

ParametersJSON Schema
NameRequiredDescription
as_ofNoData time, ISO.
caveatNoA real limit, when non-null.
cursorNoNext page (detail full).
delayedNoSet when not live.
summaryNoThe answer in one sentence.
as_of_msNoData time, Unix ms.
availableNoFalse: no data; note says why.
truncatedNoRows held back; see trimmed.
next_toolsNoFollow-up calls {tool,args,why}.
access_noteNoWhat this connection could not return.

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds context about the output structure (stages, evidence, price move) which is useful behavioral detail. However, it doesn't disclose any additional behaviors like pagination limits, rate limits, or specific handling of edge cases. Given the annotations, a 3 is appropriate.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, front-loaded sentence that efficiently conveys the purpose and key output elements. It includes the stages, the 'one coin, one story' format, evidence, and price move without redundancy. It could arguably be slightly more structured (e.g., listing the parameters) but is concise and to the point.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description covers the core purpose and output format. An output schema exists, so return values are documented there. The parameter schema is complete. The description does not explicitly mention pagination, but the 'detail' and 'cursor' parameters imply it. Overall, it is sufficient for an agent to understand what the tool does and how to invoke it, though it could add a note on when to use 'full' vs 'brief'.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, meaning all five parameters are documented in the input schema. The description does not add any parameter-specific meaning beyond what the schema already provides. It mentions the stages but not how parameters like 'coin' or 'limit' map to the output. This matches the baseline of 3 when the schema handles the heavy lifting.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states what the tool does: it provides a snapshot of current situations categorized by stages (emerging, confirmed, escalating, cooling, contested), with one coin and story each, including evidence and price move. This is specific about the resource and output format, though it lacks an explicit verb like 'list' or 'get'. It is distinct from siblings like 'market_now' or 'signals' in that it focuses on stage-based situation tracking, but it doesn't explicitly differentiate itself.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies its use case (monitoring current developments) but provides no explicit guidance on when to use it versus alternatives, nor any exclusions. There is no mention of alternative tools or conditions that would favor another tool. The context is clear enough that an agent could infer usage, but it lacks direct routing information.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

tradersSmart money and big tradersA
Read-onlyIdempotent
Inspect

Smart money here means the PROVEN cohort: Hyperliquid accounts screened for real profit and verified by their own fills. view: smart_money (default: what that cohort holds and trades per coin), proven (who they are, by trader number), screened (every wallet screened from closing fills, a weaker claim), board (tracked big accounts: equity, leverage, bias), moves (opens, adds, trims, closes, flips just now), dex (wallets moving the most on DEXes).

ParametersJSON Schema
NameRequiredDescriptionDefault
coinNoCoin symbol, e.g. BTC. A pair like ETH/USD works too.
kindNomoves only: open, add, trim, close or flip.
viewNoWhich lane; see the description.
chainNoethereum, base or arbitrum. Omit for all.
limitNoRows to return (usually up to 100; more is clamped and said).
tokenNodex only: one token.
cursorNoNext page: the cursor from the previous answer.
detailNobrief (default): the answer, key numbers and top rows. full: every row, paged with cursor.
walletNomoves only: one account address.
windowNoTime window: 1h, 4h or 24h.
since_msNoOnly rows newer than this Unix-ms time (polling cursor).

Output Schema

ParametersJSON Schema
NameRequiredDescription
as_ofNoData time, ISO.
caveatNoA real limit, when non-null.
cursorNoNext page (detail full).
delayedNoSet when not live.
summaryNoThe answer in one sentence.
as_of_msNoData time, Unix ms.
availableNoFalse: no data; note says why.
truncatedNoRows held back; see trimmed.
next_toolsNoFollow-up calls {tool,args,why}.
access_noteNoWhat this connection could not return.

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the readOnly/idempotent/destructive annotations, the description discloses data provenance and trust levels ('verified by their own fills', screened is 'a weaker claim') and temporal behavior ('moves... just now', dex wallets moving the most). It doesn't discuss auth or rate limits, but annotations already cover the safety profile, so the added semantics are meaningful.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact and front-loads the defining cohort before the view list. It is dense but not padded; a more structured bullet list would aid scanability, but every clause carries information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For an 11-parameter tool with a rich output schema and full schema parameter descriptions, the description covers the key conceptual dimension (view meanings and cohort definition) that would otherwise be opaque. It leaves cross-tool comparison to siblings out, but the read-only, non-destructive profile is already annotated, so the agent has enough to call it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so baseline is 3, but the description adds real semantics to the view parameter by explaining each enum value and marking smart_money as the default, which the schema does not do. Other parameters are sufficiently covered by the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description defines the tool's core subject precisely ('PROVEN cohort: Hyperliquid accounts screened for real profit and verified by their own fills') and enumerates six views with their specific outputs (e.g., moves: opens/adds/trims/closes/flips just now). This clearly differentiates traders from generic whale/screener siblings by establishing the unique cohort definition, even without naming alternatives.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives clear per-view usage guidance: smart_money is default cohort holdings/trades, proven identifies accounts by trader number, screened is explicitly a 'weaker claim', moves covers live position changes, dex covers on-chain movers. What's missing is explicit routing against sibling tools such as whale_radar or big_catch, so it is strong on context but not on exclusions/alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

walletOne wallet or accountA
Read-onlyIdempotent
Inspect

One address. A Hyperliquid account returns its live positions, leverage, liquidation prices and recent fills; an Ethereum, Base or Arbitrum wallet returns its DEX swaps and net flow per token. chain: auto (default: tries Hyperliquid, then on-chain), hyperliquid, or evm.

ParametersJSON Schema
NameRequiredDescriptionDefault
chainNoauto (default), hyperliquid, or evm (ethereum, base, arbitrum).
limitNoRows to return (usually up to 200; more is clamped and said).
cursorNoNext page: the cursor from the previous answer.
detailNobrief (default): the answer, key numbers and top rows. full: every row, paged with cursor.
addressYes0x followed by 40 hex characters.

Output Schema

ParametersJSON Schema
NameRequiredDescription
as_ofNoData time, ISO.
caveatNoA real limit, when non-null.
cursorNoNext page (detail full).
delayedNoSet when not live.
summaryNoThe answer in one sentence.
as_of_msNoData time, Unix ms.
availableNoFalse: no data; note says why.
truncatedNoRows held back; see trimmed.
next_toolsNoFollow-up calls {tool,args,why}.
access_noteNoWhat this connection could not return.

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already establish readOnly, idempotent, non-destructive behavior. The description adds genuine behavioral context by explaining what each chain type returns and how auto mode falls back from Hyperliquid to on-chain. It does not contradict annotations and covers the main behavioral variation an agent must know.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences carry substantial meaning: scope ('One address'), per-chain output differences, and the chain parameter's behavior and values. It is front-loaded and free of filler, though the fragment 'One address.' is slightly cryptic and could be more explicit.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only lookup tool with a rich output schema and detailed parameter descriptions, the description covers the key invocation decision: which chain to use and what to expect. Pagination, limits, and address format are already handled by the schema and output schema, so nothing critical is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3. The description adds value beyond the schema by explaining the chain parameter's auto behavior ('tries Hyperliquid, then on-chain') and by mapping chain values to the kinds of data returned. It does not over-explain fields already well described in the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states that a single address yields account or wallet data, and clearly differentiates Hyperliquid accounts (positions, leverage, liquidation prices, fills) from EVM wallets (DEX swaps, net flow). The verb 'returns' and resource are present, though the opening 'One address' is terse and relies on the title for full framing.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage: pass one address, optionally choose a chain, and get account/wallet data. It explains the chain auto-resolution order, which is useful, but it never explicitly says when to prefer this tool over alternatives like whale_activity, traders, or watch, and gives no exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

watchAlerts to a webhookA
Destructive
Inspect

Alerts checked continuously and posted to your webhook when they trigger. action: list (default), create (coin + trigger: radar_unusual, flag_fired or funding_band with band, + webhook_url), delete (id). Starter and up to create.

ParametersJSON Schema
NameRequiredDescriptionDefault
idNodelete only: the alert id.
bandNocreate with funding_band: the band, e.g. "top 5%".
coinNoCoin symbol, e.g. BTC. A pair like ETH/USD works too.
actionNoWhich lane; see the description.
triggerNocreate only: what triggers it.
webhook_urlNocreate only: a public https URL you control.

Output Schema

ParametersJSON Schema
NameRequiredDescription
as_ofNoData time, ISO.
caveatNoA real limit, when non-null.
cursorNoNext page (detail full).
delayedNoSet when not live.
summaryNoThe answer in one sentence.
as_of_msNoData time, Unix ms.
availableNoFalse: no data; note says why.
truncatedNoRows held back; see trimmed.
next_toolsNoFollow-up calls {tool,args,why}.
access_noteNoWhat this connection could not return.

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already provide destructiveHint=true and idempotentHint=false, so the bar is lower; the description adds genuinely useful context about continuous monitoring, webhook delivery, and the creation plan requirement. It doesn't elaborate on delete effects, but that side is already signaled by the destructive annotation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two dense sentences with the core behavior front-loaded and a compact action grammar. Every clause earns its place, and there is no filler or repetition of schema details.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a multi-action tool it covers the behavioral model, action routes, conditional parameter requirements, and the plan limitation, with an output schema available to explain returns. It doesn't address edge cases like duplicate alert creation, but annotations and the output schema absorb most of that burden.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3; the description adds value by encoding cross-parameter contracts: create needs coin + trigger + webhook_url, funding_band needs band, and delete takes id. This is more meaningful than the flat per-field schema descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The opening sentence states a clear behavior: alerts are continuously checked and posted to a webhook, and the action list defines list/create/delete. However, it does not explicitly distinguish itself from nearby alert-related siblings such as my_alerts or signals, so it stops short of a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives clear action routing (list default, create with coin+trigger+webhook_url, delete by id) and the plan gate 'Starter and up to create', so usage context is implied. But it never explicitly says when NOT to use this tool or names an alternative for simpler alert viewing, leaving the agent to infer the decision boundary.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

watchlist_briefMy watchlistA
Read-onlyIdempotent
Inspect

Every coin on your watchlist through the whale read in one call: flow against each coin's normal, buy or sell lean, and whether it is unusual now. Needs a signed-in connection (free).

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
as_ofNoData time, ISO.
caveatNoA real limit, when non-null.
cursorNoNext page (detail full).
delayedNoSet when not live.
summaryNoThe answer in one sentence.
as_of_msNoData time, Unix ms.
availableNoFalse: no data; note says why.
truncatedNoRows held back; see trimmed.
next_toolsNoFollow-up calls {tool,args,why}.
access_noteNoWhat this connection could not return.

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, and non-destructive behavior, so the description does not need to repeat those. It adds useful context beyond annotations: an authentication requirement and the kind of analytical output provided. No contradiction exists.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two concise sentences with no filler. The primary purpose and output are front-loaded, and the auth note is brief but relevant.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description is complete for a zero-parameter read-only tool: it states what data is returned, the auth requirement, and the scope. The output schema covers return structure, and annotations cover the behavior profile, so nothing important is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has zero parameters and schema description coverage is 100%, so the schema fully documents the input surface. The description adds no parameter-specific meaning, but none is needed; the baseline for zero-parameter tools is 4.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool returns every coin on the user's watchlist with specific metrics: flow against normal, buy/sell lean, and unusualness. It names the resource (watchlist) and differentiates itself from sibling tools like 'watch' by focusing on a per-coin brief in one call.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives a clear context: use this to get watchlist coins with whale-flow analysis in a single call. It also states the prerequisite of a signed-in connection. It does not explicitly name alternatives or when-not-to-use, but the context is strong enough for an agent to know when it applies.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

whale_activityWhale activity on a coinA
Read-onlyIdempotent
Inspect

What whales are doing, per coin. view: summary (default with a coin: net flow over 1h/4h/24h/7d, exchange vs on-chain vs Hyperliquid split, flow against price), hourly (buy and sell dollars per hour), trades (individual whale trades, newest first), venues (which exchanges hold the flow), context (is this unusual for THIS coin, accepts a list), hyperliquid (fills with both wallets named), onchain (DEX swaps on Ethereum, Base, Arbitrum with the signer).

ParametersJSON Schema
NameRequiredDescriptionDefault
coinNoCoin symbol, e.g. BTC. A pair like ETH/USD works too.
viewNoWhich lane; see the description.
chainNoethereum, base or arbitrum. Omit for all.
coinsNoSeveral coins in one call (list or "BTC,ETH"), up to 10.
hoursNoHow many hours back to read.
limitNoRows to return (usually up to 200; more is clamped and said).
cursorNoNext page: the cursor from the previous answer.
detailNobrief (default): the answer, key numbers and top rows. full: every row, paged with cursor.
sourceNotrades only: exchanges, DEX swaps or both.
min_usdNoSmallest trade in USD.
since_msNoOnly rows newer than this Unix-ms time (polling cursor).
breakdownNohourly only: split each hour by exchange or wallet (Pro).

Output Schema

ParametersJSON Schema
NameRequiredDescription
as_ofNoData time, ISO.
caveatNoA real limit, when non-null.
cursorNoNext page (detail full).
delayedNoSet when not live.
summaryNoThe answer in one sentence.
as_of_msNoData time, Unix ms.
availableNoFalse: no data; note says why.
truncatedNoRows held back; see trimmed.
next_toolsNoFollow-up calls {tool,args,why}.
access_noteNoWhat this connection could not return.

TDQS

A3.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Despite readOnlyHint and idempotentHint already covering safety, the description discloses substantial behavior: default summary contents, timeframes, flow splits, trade ordering, chain coverage, and context/unusualness semantics. This goes well beyond what annotations alone provide and makes the tool's behavior predictable.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is dense but efficient: one leading statement plus a compressed view-by-view enumeration. It earns its length by covering seven distinct modes, though a little more structural formatting would improve skimmability.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the 12-parameter surface and seven view variants, the description covers the semantic heart of each mode while leaving mechanical details like pagination and clamping to the schema. With an output schema present, this is reasonably complete, though it does not explain how the many filters interact.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, but the description adds meaning beyond the schema by specifying what each view mode computes (e.g., 'net flow over 1h/4h/24h/7d', 'fills with both wallets named', 'DEX swaps ... with the signer'). It clarifies that context accepts a list and which parameter modes are exclusive, improving selection confidence.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states the tool's core purpose concretely: 'What whales are doing, per coin,' and enumerates all seven views with the data each returns. It is clearly scoped to per-coin whale activity, though it does not explicitly contrast with sibling tools like whale_radar.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The view list maps to sub-modes, but there is no guidance on when to choose this tool versus sibling tools or which view fits a user's question. No exclusions or alternatives are mentioned, so an agent must infer usage from the view names.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

whale_radarUnusual whale activityA
Read-onlyIdempotent
Inspect

Which coins have UNUSUAL whale flow right now, each against its own normal, over 1h, 4h and 24h, ranked by how far above normal (not by dollar size). For discovery when no coin is named.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoRows to return (usually up to 100; more is clamped and said).
cursorNoNext page: the cursor from the previous answer.
detailNobrief (default): the answer, key numbers and top rows. full: every row, paged with cursor.
windowNoOne window only. Omit for all three.

Output Schema

ParametersJSON Schema
NameRequiredDescription
as_ofNoData time, ISO.
caveatNoA real limit, when non-null.
cursorNoNext page (detail full).
delayedNoSet when not live.
summaryNoThe answer in one sentence.
as_of_msNoData time, Unix ms.
availableNoFalse: no data; note says why.
truncatedNoRows held back; see trimmed.
next_toolsNoFollow-up calls {tool,args,why}.
access_noteNoWhat this connection could not return.

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds meaningful behavioral context beyond annotations: it explains that results are 'ranked by how far above normal (not by dollar size)' and that each coin is compared 'against its own normal'. This clarifies the output ordering and normalization logic without contradicting the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, no filler. The first sentence front-loads the core query and key qualifiers (unusual, own normal, timeframes, ranking), while the second sentence gives the use case. Every word earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description is complete for a read-only discovery tool: it states the purpose, ranking logic, timeframes, and use case. The output schema covers return structure, and the input schema fully documents parameters. The only minor omission is a more explicit explanation of how 'unusual' is statistically measured, but 'against its own normal' is sufficient for an agent to call the tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the baseline is 3. The description mentions the time windows (1h, 4h, 24h) which map to the window parameter, but it does not add anything beyond what the schema already states (e.g., 'Omit for all three'). No extra semantics are provided for limit, cursor, or detail, so the parameter meaning comes almost entirely from the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb and resource: 'Which coins have UNUSUAL whale flow right now'. It clearly defines the scope (unusual relative to each coin's own normal), the timeframes (1h, 4h, 24h), and the ranking criterion (by how far above normal, not dollar size). The closing phrase 'For discovery when no coin is named' distinguishes it from sibling tools like whale_activity, which likely requires a coin name.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly states the primary use case: 'For discovery when no coin is named.' This gives clear context for when to choose this tool over others. However, it does not explicitly name an alternative or state a when-not condition, leaving the distinction from whale_activity implicit rather than direct.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 63 tool updates
    • Changedbig_catch26 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • addedInput schema / additionalProperties
        Added value: +{}
      • changedInput schema / properties / coin / description
        Previous value: -"Only the setup on this coin. Omit for every live setup."New value: +"Coin symbol, e.g. BTC. A pair like ETH/USD works too."
      • addedInput schema / properties / cursor
        Added value: +{
        +  "description": "Next page: the cursor from the previous answer.",
        +  "type": "string"
        +}
      • addedInput schema / properties / detail
        Added value: +{
        +  "description": "brief (default): the answer, key numbers and top rows. full: every row, paged with cursor.",
        +  "enum": [
        +    "brief",
        +    "full"
        +  ],
        +  "type": "string"
        +}
      • changedInput schema / properties / limit / description
        Previous value: -"Max setups. Defaults to 10, hard ceiling 50 for everyone."New value: +"Rows to return (usually up to 100; more is clamped and said)."
      • removedInput schema / properties / limit / maximum
        Removed value: -9007199254740991
      • removedInput schema / properties / limit / minimum
        Removed value: --9007199254740991
      • removedInput schema / properties / pair
        Removed value: -{
        -  "description": "Alias for coin.",
        -  "type": "string"
        -}
      • removedOutput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • addedOutput schema / properties / access_note
        Added value: +{
        +  "description": "What this connection could not return."
        +}
      • addedOutput schema / properties / as_of
        Added value: +{
        +  "description": "Data time, ISO."
        +}
      • addedOutput schema / properties / as_of_ms
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "number"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "Data time, Unix ms."
        +}
      • removedOutput schema / properties / available / anyOf
        Removed value: -[
        -  {
        -    "type": "boolean"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • changedOutput schema / properties / available / description
        Previous value: -"False when the engine has not published (building:true)."New value: +"False: no data; note says why."
      • addedOutput schema / properties / available / type
        Added value: +"boolean"
      • addedOutput schema / properties / caveat
        Added value: +{
        +  "description": "A real limit, when non-null."
        +}
      • removedOutput schema / properties / count
        Removed value: -{
        -  "anyOf": [
        -    {
        -      "type": "number"
        -    },
        -    {
        -      "type": "null"
        -    }
        -  ],
        -  "description": "Rows returned."
        -}
      • addedOutput schema / properties / cursor
        Added value: +{
        +  "description": "Next page (detail full)."
        +}
      • addedOutput schema / properties / delayed
        Added value: +{
        +  "description": "Set when not live."
        +}
      • addedOutput schema / properties / next_tools
        Added value: +{
        +  "description": "Follow-up calls {tool,args,why}.",
        +  "items": {
        +    "additionalProperties": {},
        +    "properties": {},
        +    "type": "object"
        +  },
        +  "type": "array"
        +}
      • removedOutput schema / properties / setups
        Removed value: -{
        -  "anyOf": [
        -    {
        -      "items": {},
        -      "type": "array"
        -    },
        -    {
        -      "type": "null"
        -    }
        -  ],
        -  "description": "coin, state, tier, direction, direction_label, catch_type, severity, age_minutes, price_move_pct; Starter and up adds score, max_score, breakdown, fire_price, price."
        -}
      • changedOutput schema / properties / summary / description
        Previous value: -"The answer in one plain sentence, computed from the fields below. Open the reply with this, then let the numbers back it up. Null only when there was nothing to summarise."New value: +"The answer in one sentence."
      • removedOutput schema / properties / total
        Removed value: -{
        -  "anyOf": [
        -    {
        -      "type": "number"
        -    },
        -    {
        -      "type": "null"
        -    }
        -  ],
        -  "description": "Live setups matching the filter."
        -}
      • addedOutput schema / properties / truncated
        Added value: +{
        +  "description": "Rows held back; see trimmed."
        +}
      • removedOutput schema / properties / upgrade
        Removed value: -{
        -  "anyOf": [
        -    {
        -      "additionalProperties": {},
        -      "propertyNames": {
        -        "type": "string"
        -      },
        -      "type": "object"
        -    },
        -    {
        -      "type": "null"
        -    }
        -  ],
        -  "description": "Present only when the score layer was withheld."
        -}
    • Addedcoin_brief
    • Removedcoin_liquidations
    • Changedcoin_search27 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • addedInput schema / additionalProperties
        Added value: +{}
      • changedInput schema / properties / coin / description
        Previous value: -"Alias for query."New value: +"Coin symbol, e.g. BTC. A pair like ETH/USD works too."
      • addedInput schema / properties / cursor
        Added value: +{
        +  "description": "Next page: the cursor from the previous answer.",
        +  "type": "string"
        +}
      • addedInput schema / properties / detail
        Added value: +{
        +  "description": "brief (default): the answer, key numbers and top rows. full: every row, paged with cursor.",
        +  "enum": [
        +    "brief",
        +    "full"
        +  ],
        +  "type": "string"
        +}
      • changedInput schema / properties / limit / description
        Previous value: -"Max matches. Defaults to 10, hard ceiling 20 for everyone."New value: +"Rows to return (usually up to 20; more is clamped and said)."
      • removedInput schema / properties / limit / maximum
        Removed value: -9007199254740991
      • removedInput schema / properties / limit / minimum
        Removed value: --9007199254740991
      • removedInput schema / properties / pair
        Removed value: -{
        -  "description": "Alias for query (a pair like SOL/USD searches its base).",
        -  "type": "string"
        -}
      • changedInput schema / properties / query / description
        Previous value: -"Symbol or part of a name, for example \"sol\" or \"pepe\"."New value: +"Symbol or part of a name, e.g. \"sol\"."
      • removedOutput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • addedOutput schema / properties / access_note
        Added value: +{
        +  "description": "What this connection could not return."
        +}
      • addedOutput schema / properties / as_of
        Added value: +{
        +  "description": "Data time, ISO."
        +}
      • addedOutput schema / properties / as_of_ms
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "number"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "Data time, Unix ms."
        +}
      • removedOutput schema / properties / available / anyOf
        Removed value: -[
        -  {
        -    "type": "boolean"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • changedOutput schema / properties / available / description
        Previous value: -"False when nothing was searched (no query) or the catalog has not loaded."New value: +"False: no data; note says why."
      • addedOutput schema / properties / available / type
        Added value: +"boolean"
      • addedOutput schema / properties / caveat
        Added value: +{
        +  "description": "A real limit, when non-null."
        +}
      • removedOutput schema / properties / count
        Removed value: -{
        -  "anyOf": [
        -    {
        -      "type": "number"
        -    },
        -    {
        -      "type": "null"
        -    }
        -  ],
        -  "description": "Rows returned."
        -}
      • addedOutput schema / properties / cursor
        Added value: +{
        +  "description": "Next page (detail full)."
        +}
      • addedOutput schema / properties / delayed
        Added value: +{
        +  "description": "Set when not live."
        +}
      • removedOutput schema / properties / matches
        Removed value: -{
        -  "anyOf": [
        -    {
        -      "items": {},
        -      "type": "array"
        -    },
        -    {
        -      "type": "null"
        -    }
        -  ],
        -  "description": "symbol, name, pair (when streamed), streamed, free, price, change_24h_pct, volume_24h_usd, market_cap_usd, rank."
        -}
      • addedOutput schema / properties / next_tools
        Added value: +{
        +  "description": "Follow-up calls {tool,args,why}.",
        +  "items": {
        +    "additionalProperties": {},
        +    "properties": {},
        +    "type": "object"
        +  },
        +  "type": "array"
        +}
      • removedOutput schema / properties / query
        Removed value: -{
        -  "anyOf": [
        -    {
        -      "type": "string"
        -    },
        -    {
        -      "type": "null"
        -    }
        -  ],
        -  "description": "The query as searched."
        -}
      • changedOutput schema / properties / summary / description
        Previous value: -"The answer in one plain sentence, computed from the fields below. Open the reply with this, then let the numbers back it up. Null only when there was nothing to summarise."New value: +"The answer in one sentence."
      • removedOutput schema / properties / total
        Removed value: -{
        -  "anyOf": [
        -    {
        -      "type": "number"
        -    },
        -    {
        -      "type": "null"
        -    }
        -  ],
        -  "description": "Total catalog matches."
        -}
      • addedOutput schema / properties / truncated
        Added value: +{
        +  "description": "Rows held back; see trimmed."
        +}
    • Removedcrypto_news
    • Removeddefi_liquidations
    • Removeddefi_summary
    • Removeddex_board
    • Removeddex_wallet
    • Removedflag_outcomes
    • Removedfunding_matrix
    • Addedhistory
    • Removedhl_board
    • Removedhl_moves
    • Removedhl_traders
    • Removedhl_wallet
    • Removedhl_whales
    • Removedliq_heat
    • Removedliq_zones
    • Changedliquidations49 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • addedInput schema / additionalProperties
        Added value: +{}
      • addedInput schema / properties / chain
        Added value: +{
        +  "description": "ethereum, base or arbitrum. Omit for all.",
        +  "type": "string"
        +}
      • changedInput schema / properties / coin / description
        Previous value: -"Alias for pair."New value: +"Coin symbol, e.g. BTC. A pair like ETH/USD works too."
      • addedInput schema / properties / cursor
        Added value: +{
        +  "description": "Next page: the cursor from the previous answer.",
        +  "type": "string"
        +}
      • addedInput schema / properties / detail
        Added value: +{
        +  "description": "brief (default): the answer, key numbers and top rows. full: every row, paged with cursor.",
        +  "enum": [
        +    "brief",
        +    "full"
        +  ],
        +  "type": "string"
        +}
      • changedInput schema / properties / hours / description
        Previous value: -"Look back this many hours, up to 720. Omit for the most recent events."New value: +"How many hours back to read."
      • changedInput schema / properties / hours / type
        Previous value: -"number"New value: +"integer"
      • changedInput schema / properties / limit / description
        Previous value: -"Max rows returned. Capped at 25 on the free plans and 1000 on a paid plan; asking for more returns the cap, and the payload says so in `capped`. count and the *_usd totals always cover the whole window regardless."New value: +"Rows to return (usually up to 1000; more is clamped and said)."
      • removedInput schema / properties / limit / maximum
        Removed value: -9007199254740991
      • removedInput schema / properties / limit / minimum
        Removed value: --9007199254740991
      • removedInput schema / properties / pair
        Removed value: -{
        -  "description": "e.g. ETH/USD. A bare symbol like ETH also works.",
        -  "type": "string"
        -}
      • addedInput schema / properties / scope
        Added value: +{
        +  "description": "Which lane; see the description.",
        +  "enum": [
        +    "coin",
        +    "market",
        +    "lending",
        +    "projected",
        +    "heat"
        +  ],
        +  "type": "string"
        +}
      • changedInput schema / properties / since_ms / description
        Previous value: -"Polling cursor: only rows newer than this Unix-ms timestamp, applied before the row cap. Pass back the next_since_ms from the previous answer so a timer never re-reads the same rows."New value: +"Only rows newer than this Unix-ms time (polling cursor)."
      • removedInput schema / properties / since_ms / maximum
        Removed value: -9007199254740991
      • removedInput schema / properties / since_ms / minimum
        Removed value: --9007199254740991
      • removedOutput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • removedOutput schema / properties / access_note / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • changedOutput schema / properties / access_note / description
        Previous value: -"What this connection could not return and what lifts it. Always pass this on to the user: it is the only place that information appears."New value: +"What this connection could not return."
      • addedOutput schema / properties / as_of
        Added value: +{
        +  "description": "Data time, ISO."
        +}
      • addedOutput schema / properties / as_of_ms
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "number"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "Data time, Unix ms."
        +}
      • removedOutput schema / properties / available / anyOf
        Removed value: -[
        -  {
        -    "type": "boolean"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • changedOutput schema / properties / available / description
        Previous value: -"False when this lane could not answer: a producer is dark, the pair sits outside this plan, or the argument named something we do not carry. Absent or true means the numbers are a real reading, not a guess."New value: +"False: no data; note says why."
      • addedOutput schema / properties / available / type
        Added value: +"boolean"
      • removedOutput schema / properties / capped
        Removed value: -{
        -  "anyOf": [
        -    {
        -      "additionalProperties": false,
        -      "properties": {
        -        "applied": {
        -          "description": "The value actually used.",
        -          "type": "number"
        -        },
        -        "argument": {
        -          "description": "Which argument was cut down, for example limit or hours.",
        -          "type": "string"
        -        },
        -        "by": {
        -          "description": "Why it was cut: keyless for the free ceiling, plan_max for a paid ceiling, tool_max for a ceiling no plan raises.",
        -          "type": "string"
        -        },
        -        "max": {
        -          "description": "The ceiling that applied.",
        -          "type": "number"
        -        },
        -        "requested": {
        -          "description": "The value the caller asked for.",
        -          "type": "number"
        -        }
        -      },
        -      "required": [
        -        "argument",
        -        "requested",
        -        "applied",
        -        "max",
        -        "by"
        -      ],
        -      "type": "object"
        -    },
        -    {
        -      "type": "null"
        -    }
        -  ],
        -  "description": "Present only when an argument was cut down to a ceiling. Absent means nothing was clamped, so a smaller number than you asked for is the data and not a limit."
        -}
      • addedOutput schema / properties / caveat
        Added value: +{
        +  "description": "A real limit, when non-null."
        +}
      • removedOutput schema / properties / count
        Removed value: -{
        -  "anyOf": [
        -    {
        -      "type": "number"
        -    },
        -    {
        -      "type": "null"
        -    }
        -  ],
        -  "description": "How many events fired in the whole window, not how many rows came back."
        -}
      • addedOutput schema / properties / cursor
        Added value: +{
        +  "description": "Next page (detail full)."
        +}
      • addedOutput schema / properties / delayed
        Added value: +{
        +  "description": "Set when not live."
        +}
      • removedOutput schema / properties / history_included
        Removed value: -{
        -  "anyOf": [
        -    {
        -      "type": "boolean"
        -    },
        -    {
        -      "type": "null"
        -    }
        -  ],
        -  "description": "True when the recorded series was merged in, so a restart has not erased earlier events."
        -}
      • removedOutput schema / properties / liquidations
        Removed value: -{
        -  "anyOf": [
        -    {
        -      "items": {},
        -      "type": "array"
        -    },
        -    {
        -      "type": "null"
        -    }
        -  ],
        -  "description": "The events themselves, newest first: price, size in base and quote, side (long_liquidated or short_liquidated), exchange and time. A sample of the window when truncated is true."
        -}
      • removedOutput schema / properties / long_liquidations
        Removed value: -{
        -  "anyOf": [
        -    {
        -      "type": "number"
        -    },
        -    {
        -      "type": "null"
        -    }
        -  ],
        -  "description": "COUNT of longs force-closed. For dollars read long_usd."
        -}
      • removedOutput schema / properties / long_usd
        Removed value: -{
        -  "anyOf": [
        -    {
        -      "type": "number"
        -    },
        -    {
        -      "type": "null"
        -    }
        -  ],
        -  "description": "Dollars of longs force-closed across the window."
        -}
      • addedOutput schema / properties / next_tools
        Added value: +{
        +  "description": "Follow-up calls {tool,args,why}.",
        +  "items": {
        +    "additionalProperties": {},
        +    "properties": {},
        +    "type": "object"
        +  },
        +  "type": "array"
        +}
      • removedOutput schema / properties / note
        Removed value: -{
        -  "anyOf": [
        -    {
        -      "type": "string"
        -    },
        -    {
        -      "type": "null"
        -    }
        -  ],
        -  "description": "One line saying what the numbers cover, or why there are none. Read it before reporting any zero as a market reading."
        -}
      • removedOutput schema / properties / pair
        Removed value: -{
        -  "anyOf": [
        -    {
        -      "type": "string"
        -    },
        -    {
        -      "type": "null"
        -    }
        -  ],
        -  "description": "The pair these events belong to."
        -}
      • removedOutput schema / properties / requested_hours
        Removed value: -{
        -  "anyOf": [
        -    {
        -      "type": "number"
        -    },
        -    {
        -      "type": "null"
        -    }
        -  ],
        -  "description": "The period asked for, so a page can be told apart from a period."
        -}
      • removedOutput schema / properties / rows_returned
        Removed value: -{
        -  "anyOf": [
        -    {
        -      "type": "number"
        -    },
        -    {
        -      "type": "null"
        -    }
        -  ],
        -  "description": "How many event rows are actually in this reply."
        -}
      • removedOutput schema / properties / rows_span_minutes
        Removed value: -{
        -  "anyOf": [
        -    {
        -      "type": "number"
        -    },
        -    {
        -      "type": "null"
        -    }
        -  ],
        -  "description": "How far back the returned rows themselves reach."
        -}
      • removedOutput schema / properties / short_liquidations
        Removed value: -{
        -  "anyOf": [
        -    {
        -      "type": "number"
        -    },
        -    {
        -      "type": "null"
        -    }
        -  ],
        -  "description": "COUNT of shorts force-closed. For dollars read short_usd."
        -}
      • removedOutput schema / properties / short_usd
        Removed value: -{
        -  "anyOf": [
        -    {
        -      "type": "number"
        -    },
        -    {
        -      "type": "null"
        -    }
        -  ],
        -  "description": "Dollars of shorts force-closed across the window."
        -}
      • removedOutput schema / properties / sources
        Removed value: -{
        -  "anyOf": [
        -    {
        -      "additionalProperties": {},
        -      "propertyNames": {
        -        "type": "string"
        -      },
        -      "type": "object"
        -    },
        -    {
        -      "type": "null"
        -    }
        -  ],
        -  "description": "How the events split between the streamed exchanges and Hyperliquid, and whether the Hyperliquid part is a sample."
        -}
      • addedOutput schema / properties / summary
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "The answer in one sentence."
        +}
      • removedOutput schema / properties / total_in_window
        Removed value: -{
        -  "anyOf": [
        -    {
        -      "type": "number"
        -    },
        -    {
        -      "type": "null"
        -    }
        -  ],
        -  "description": "How many events the window holds in total."
        -}
      • removedOutput schema / properties / total_volume_usd
        Removed value: -{
        -  "anyOf": [
        -    {
        -      "type": "number"
        -    },
        -    {
        -      "type": "null"
        -    }
        -  ],
        -  "description": "Dollars forced out across the whole window."
        -}
      • removedOutput schema / properties / truncated / anyOf
        Removed value: -[
        -  {
        -    "type": "boolean"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • changedOutput schema / properties / truncated / description
        Previous value: -"True when more rows matched than were returned, so what you have is a page and not the whole set."New value: +"Rows held back; see trimmed."
      • removedOutput schema / properties / window_hours
        Removed value: -{
        -  "anyOf": [
        -    {
        -      "type": "number"
        -    },
        -    {
        -      "type": "null"
        -    }
        -  ],
        -  "description": "The period the totals cover, in hours."
        -}
      • removedOutput schema / properties / window_minutes
        Removed value: -{
        -  "anyOf": [
        -    {
        -      "type": "number"
        -    },
        -    {
        -      "type": "null"
        -    }
        -  ],
        -  "description": "The same period in minutes."
        -}
    • Removedmarket_brief
    • Removedmarket_changes
    • Removedmarket_digest
    • Removedmarket_extremes
    • Removedmarket_history
    • Removedmarket_liquidations
    • Removedmarket_movers
    • Addedmarket_now
    • Removedmarket_overview
    • Changedmarket_screener38 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • addedInput schema / additionalProperties
        Added value: +{}
      • changedInput schema / properties / compact / description
        Previous value: -"Return one plain-text line per matching pair rather than the JSON rows. Defaults to false."New value: +"true: one line per coin."
      • addedInput schema / properties / cursor
        Added value: +{
        +  "description": "Next page: the cursor from the previous answer.",
        +  "type": "string"
        +}
      • addedInput schema / properties / detail
        Added value: +{
        +  "description": "brief (default): the answer, key numbers and top rows. full: every row, paged with cursor.",
        +  "enum": [
        +    "brief",
        +    "full"
        +  ],
        +  "type": "string"
        +}
      • changedInput schema / properties / funding_band / description
        Previous value: -"One of: record high, top 5%, top 25%, typical, bottom 25%, bottom 5%, record low."New value: +"Funding band(s), e.g. \"top 5%\"."
      • changedInput schema / properties / limit / description
        Previous value: -"Max rows returned. Defaults to 20, hard ceiling 50 for everyone and no plan raises it. `matched` counts every pair that passed the filters regardless, and truncated says whether the rows are a shortened list."New value: +"Rows to return (usually up to 50; more is clamped and said)."
      • removedInput schema / properties / limit / maximum
        Removed value: -9007199254740991
      • removedInput schema / properties / limit / minimum
        Removed value: --9007199254740991
      • changedInput schema / properties / oi_band / description
        Previous value: -"Same values as funding_band."New value: +"Open interest band(s)."
      • changedInput schema / properties / unusual_only / description
        Previous value: -"Keep only coins the radar currently marks unusual in its 1h, 4h or 24h window. Defaults to false."New value: +"Only coins with unusual whale activity now."
      • changedInput schema / properties / whale_mult_min / description
        Previous value: -"Keep only coins whose 24h whale flow is at least this multiple of their own logged daily average, for example 3 for 3x and up. Coins with no logged multiple are dropped rather than treated as zero. Omit for no flow filter."New value: +"Minimum whale flow as a multiple of the coin's own average."
      • removedOutput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • removedOutput schema / properties / access_note / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • changedOutput schema / properties / access_note / description
        Previous value: -"What this connection could not return and what lifts it. Always pass this on to the user: it is the only place that information appears."New value: +"What this connection could not return."
      • addedOutput schema / properties / as_of
        Added value: +{
        +  "description": "Data time, ISO."
        +}
      • addedOutput schema / properties / as_of_ms
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "number"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "Data time, Unix ms."
        +}
      • removedOutput schema / properties / available / anyOf
        Removed value: -[
        -  {
        -    "type": "boolean"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • changedOutput schema / properties / available / description
        Previous value: -"False when this lane could not answer: a producer is dark, the pair sits outside this plan, or the argument named something we do not carry. Absent or true means the numbers are a real reading, not a guess."New value: +"False: no data; note says why."
      • addedOutput schema / properties / available / type
        Added value: +"boolean"
      • removedOutput schema / properties / capped
        Removed value: -{
        -  "anyOf": [
        -    {
        -      "additionalProperties": false,
        -      "properties": {
        -        "applied": {
        -          "description": "The value actually used.",
        -          "type": "number"
        -        },
        -        "argument": {
        -          "description": "Which argument was cut down, for example limit or hours.",
        -          "type": "string"
        -        },
        -        "by": {
        -          "description": "Why it was cut: keyless for the free ceiling, plan_max for a paid ceiling, tool_max for a ceiling no plan raises.",
        -          "type": "string"
        -        },
        -        "max": {
        -          "description": "The ceiling that applied.",
        -          "type": "number"
        -        },
        -        "requested": {
        -          "description": "The value the caller asked for.",
        -          "type": "number"
        -        }
        -      },
        -      "required": [
        -        "argument",
        -        "requested",
        -        "applied",
        -        "max",
        -        "by"
        -      ],
        -      "type": "object"
        -    },
        -    {
        -      "type": "null"
        -    }
        -  ],
        -  "description": "Present only when an argument was cut down to a ceiling. Absent means nothing was clamped, so a smaller number than you asked for is the data and not a limit."
        -}
      • addedOutput schema / properties / caveat
        Added value: +{
        +  "description": "A real limit, when non-null."
        +}
      • removedOutput schema / properties / compact
        Removed value: -{
        -  "anyOf": [
        -    {
        -      "type": "boolean"
        -    },
        -    {
        -      "type": "null"
        -    }
        -  ],
        -  "description": "Present and true only on a compact:true call, where the whole answer is the text in `line`."
        -}
      • removedOutput schema / properties / criteria
        Removed value: -{
        -  "anyOf": [
        -    {
        -      "additionalProperties": {},
        -      "propertyNames": {
        -        "type": "string"
        -      },
        -      "type": "object"
        -    },
        -    {
        -      "type": "null"
        -    }
        -  ],
        -  "description": "The filters as they were actually applied, so a misread argument is visible."
        -}
      • addedOutput schema / properties / cursor
        Added value: +{
        +  "description": "Next page (detail full)."
        +}
      • addedOutput schema / properties / delayed
        Added value: +{
        +  "description": "Set when not live."
        +}
      • removedOutput schema / properties / line
        Removed value: -{
        -  "anyOf": [
        -    {
        -      "type": "string"
        -    },
        -    {
        -      "type": "null"
        -    }
        -  ],
        -  "description": "One plain-text line per matching pair, returned only when compact:true was asked for."
        -}
      • removedOutput schema / properties / matched
        Removed value: -{
        -  "anyOf": [
        -    {
        -      "type": "number"
        -    },
        -    {
        -      "type": "null"
        -    }
        -  ],
        -  "description": "How many pairs passed every filter, counted before the row cap. Null when nothing was screened."
        -}
      • addedOutput schema / properties / next_tools
        Added value: +{
        +  "description": "Follow-up calls {tool,args,why}.",
        +  "items": {
        +    "additionalProperties": {},
        +    "properties": {},
        +    "type": "object"
        +  },
        +  "type": "array"
        +}
      • removedOutput schema / properties / note
        Removed value: -{
        -  "anyOf": [
        -    {
        -      "type": "string"
        -    },
        -    {
        -      "type": "null"
        -    }
        -  ],
        -  "description": "One line saying what the numbers cover, or why there are none. Read it before reporting any zero as a market reading."
        -}
      • removedOutput schema / properties / returned
        Removed value: -{
        -  "anyOf": [
        -    {
        -      "type": "number"
        -    },
        -    {
        -      "type": "null"
        -    }
        -  ],
        -  "description": "How many rows are in this reply."
        -}
      • removedOutput schema / properties / rows
        Removed value: -{
        -  "anyOf": [
        -    {
        -      "items": {},
        -      "type": "array"
        -    },
        -    {
        -      "type": "null"
        -    }
        -  ],
        -  "description": "One row per matching pair: pair, coin, price, 24h change, the funding and open interest bands against the same pair recorded days with the day counts behind them, the whale multiple, and whether the ranking currently calls it unusual."
        -}
      • removedOutput schema / properties / scanned_pairs
        Removed value: -{
        -  "anyOf": [
        -    {
        -      "type": "number"
        -    },
        -    {
        -      "type": "null"
        -    }
        -  ],
        -  "description": "How many pairs were examined."
        -}
      • addedOutput schema / properties / summary
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "The answer in one sentence."
        +}
      • removedOutput schema / properties / truncated / anyOf
        Removed value: -[
        -  {
        -    "type": "boolean"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • changedOutput schema / properties / truncated / description
        Previous value: -"True when more rows matched than were returned, so what you have is a page and not the whole set."New value: +"Rows held back; see trimmed."
      • removedOutput schema / properties / unknown_band
        Removed value: -{
        -  "anyOf": [
        -    {
        -      "items": {
        -        "type": "string"
        -      },
        -      "type": "array"
        -    },
        -    {
        -      "type": "null"
        -    }
        -  ],
        -  "description": "Set when a band was named that this screen does not know. Nothing was screened, so this is not no matches."
        -}
      • removedOutput schema / properties / valid_bands
        Removed value: -{
        -  "anyOf": [
        -    {
        -      "items": {
        -        "type": "string"
        -      },
        -      "type": "array"
        -    },
        -    {
        -      "type": "null"
        -    }
        -  ],
        -  "description": "The bands that do exist, returned alongside unknown_band."
        -}
    • Removedmarket_snapshot
    • Changedmy_access24 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • addedInput schema / additionalProperties
        Added value: +{}
      • removedOutput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • removedOutput schema / properties / access_note / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • changedOutput schema / properties / access_note / description
        Previous value: -"What this connection could not return and what lifts it. Always pass this on to the user: it is the only place that information appears."New value: +"What this connection could not return."
      • addedOutput schema / properties / as_of
        Added value: +{
        +  "description": "Data time, ISO."
        +}
      • addedOutput schema / properties / as_of_ms
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "number"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "Data time, Unix ms."
        +}
      • removedOutput schema / properties / authenticated
        Removed value: -{
        -  "anyOf": [
        -    {
        -      "type": "boolean"
        -    },
        -    {
        -      "type": "null"
        -    }
        -  ],
        -  "description": "True when any valid sign-in or key was presented."
        -}
      • addedOutput schema / properties / available
        Added value: +{
        +  "description": "False: no data; note says why.",
        +  "type": "boolean"
        +}
      • removedOutput schema / properties / caps
        Removed value: -{
        -  "anyOf": [
        -    {
        -      "additionalProperties": {},
        -      "propertyNames": {
        -        "type": "string"
        -      },
        -      "type": "object"
        -    },
        -    {
        -      "type": "null"
        -    }
        -  ],
        -  "description": "The row cap and time window every capped tool applies right now, each with the free value and the paid-plan value beside it."
        -}
      • addedOutput schema / properties / caveat
        Added value: +{
        +  "description": "A real limit, when non-null."
        +}
      • removedOutput schema / properties / credits
        Removed value: -{
        -  "anyOf": [
        -    {
        -      "additionalProperties": {},
        -      "propertyNames": {
        -        "type": "string"
        -      },
        -      "type": "object"
        -    },
        -    {
        -      "type": "null"
        -    }
        -  ],
        -  "description": "The balance: credits_remaining, plan, plan_active, credits_per_call, calls_left_estimate and where to top up. A null credits_remaining always carries a note saying WHY, because could not read and spent to zero send a user to two different places."
        -}
      • addedOutput schema / properties / cursor
        Added value: +{
        +  "description": "Next page (detail full)."
        +}
      • addedOutput schema / properties / delayed
        Added value: +{
        +  "description": "Set when not live."
        +}
      • removedOutput schema / properties / free_pairs
        Removed value: -{
        -  "anyOf": [
        -    {
        -      "anyOf": [
        -        {
        -          "type": "string"
        -        },
        -        {
        -          "items": {
        -            "type": "string"
        -          },
        -          "type": "array"
        -        }
        -      ]
        -    },
        -    {
        -      "type": "null"
        -    }
        -  ],
        -  "description": "The pairs this connection can read. A list when keyless, the words every streamed pair on a paid plan, or a short sentence when the market lane could not be read."
        -}
      • removedOutput schema / properties / how_to_lift
        Removed value: -{
        -  "anyOf": [
        -    {
        -      "additionalProperties": {},
        -      "propertyNames": {
        -        "type": "string"
        -      },
        -      "type": "object"
        -    },
        -    {
        -      "type": "null"
        -    }
        -  ],
        -  "description": "What lifts the caps, where to get it, and (as not_this) the two things people buy by mistake that change nothing here."
        -}
      • removedOutput schema / properties / locked_here
        Removed value: -{
        -  "anyOf": [
        -    {
        -      "items": {
        -        "type": "string"
        -      },
        -      "type": "array"
        -    },
        -    {
        -      "type": "null"
        -    }
        -  ],
        -  "description": "What this connection cannot reach right now. Empty on a paid plan."
        -}
      • removedOutput schema / properties / metered
        Removed value: -{
        -  "anyOf": [
        -    {
        -      "type": "string"
        -    },
        -    {
        -      "type": "null"
        -    }
        -  ],
        -  "description": "Whether calls cost credits on this connection, and how much."
        -}
      • addedOutput schema / properties / next_tools
        Added value: +{
        +  "description": "Follow-up calls {tool,args,why}.",
        +  "items": {
        +    "additionalProperties": {},
        +    "properties": {},
        +    "type": "object"
        +  },
        +  "type": "array"
        +}
      • removedOutput schema / properties / on_free_plan
        Removed value: -{
        -  "anyOf": [
        -    {
        -      "type": "boolean"
        -    },
        -    {
        -      "type": "null"
        -    }
        -  ],
        -  "description": "True when this connection reads free-shaped data. The single fact most users are asking for."
        -}
      • removedOutput schema / properties / plain
        Removed value: -{
        -  "anyOf": [
        -    {
        -      "type": "string"
        -    },
        -    {
        -      "type": "null"
        -    }
        -  ],
        -  "description": "One sentence describing this tier in the user own words rather than ours."
        -}
      • addedOutput schema / properties / summary
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "The answer in one sentence."
        +}
      • removedOutput schema / properties / tier
        Removed value: -{
        -  "anyOf": [
        -    {
        -      "type": "string"
        -    },
        -    {
        -      "type": "null"
        -    }
        -  ],
        -  "description": "Which state this connection is in: keyless, signed_in_free, or the plan key (starter, pro, alpha, scale)."
        -}
      • addedOutput schema / properties / truncated
        Added value: +{
        +  "description": "Rows held back; see trimmed."
        +}
    • Changedmy_alerts28 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • addedInput schema / additionalProperties
        Added value: +{}
      • changedInput schema / properties / coin / description
        Previous value: -"Only alerts on this coin. Omit for every coin."New value: +"Coin symbol, e.g. BTC. A pair like ETH/USD works too."
      • addedInput schema / properties / cursor
        Added value: +{
        +  "description": "Next page: the cursor from the previous answer.",
        +  "type": "string"
        +}
      • addedInput schema / properties / detail
        Added value: +{
        +  "description": "brief (default): the answer, key numbers and top rows. full: every row, paged with cursor.",
        +  "enum": [
        +    "brief",
        +    "full"
        +  ],
        +  "type": "string"
        +}
      • removedInput schema / properties / pair
        Removed value: -{
        -  "description": "Alias for coin.",
        -  "type": "string"
        -}
      • changedInput schema / properties / since_ms / description
        Previous value: -"Only alerts fired after this Unix-ms timestamp. Defaults to the last 24 hours. Pass back next_since_ms from the previous answer to read only what is new."New value: +"Only rows newer than this Unix-ms time (polling cursor)."
      • removedInput schema / properties / since_ms / maximum
        Removed value: -9007199254740991
      • removedInput schema / properties / since_ms / minimum
        Removed value: --9007199254740991
      • removedOutput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • addedOutput schema / properties / access_note
        Added value: +{
        +  "description": "What this connection could not return."
        +}
      • removedOutput schema / properties / alerts
        Removed value: -{
        -  "anyOf": [
        -    {
        -      "items": {},
        -      "type": "array"
        -    },
        -    {
        -      "type": "null"
        -    }
        -  ],
        -  "description": "Starter and up: fired_at, type, coin, pair, side, usd, price_at_fire, exchange, wallet, since_pct."
        -}
      • addedOutput schema / properties / as_of
        Added value: +{
        +  "description": "Data time, ISO."
        +}
      • addedOutput schema / properties / as_of_ms
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "number"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "Data time, Unix ms."
        +}
      • removedOutput schema / properties / available / anyOf
        Removed value: -[
        -  {
        -    "type": "boolean"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • changedOutput schema / properties / available / description
        Previous value: -"False keyless (reason no_owner: sign in, free) or when history is not wired."New value: +"False: no data; note says why."
      • addedOutput schema / properties / available / type
        Added value: +"boolean"
      • addedOutput schema / properties / caveat
        Added value: +{
        +  "description": "A real limit, when non-null."
        +}
      • removedOutput schema / properties / coins
        Removed value: -{
        -  "anyOf": [
        -    {
        -      "items": {},
        -      "type": "array"
        -    },
        -    {
        -      "type": "null"
        -    }
        -  ],
        -  "description": "Per coin: coin, fired."
        -}
      • addedOutput schema / properties / cursor
        Added value: +{
        +  "description": "Next page (detail full)."
        +}
      • addedOutput schema / properties / delayed
        Added value: +{
        +  "description": "Set when not live."
        +}
      • removedOutput schema / properties / fired
        Removed value: -{
        -  "anyOf": [
        -    {
        -      "type": "number"
        -    },
        -    {
        -      "type": "null"
        -    }
        -  ],
        -  "description": "Alerts that fired since since_ms."
        -}
      • removedOutput schema / properties / next_since_ms
        Removed value: -{
        -  "anyOf": [
        -    {
        -      "type": "number"
        -    },
        -    {
        -      "type": "null"
        -    }
        -  ],
        -  "description": "Pass back as since_ms to read only what is new."
        -}
      • addedOutput schema / properties / next_tools
        Added value: +{
        +  "description": "Follow-up calls {tool,args,why}.",
        +  "items": {
        +    "additionalProperties": {},
        +    "properties": {},
        +    "type": "object"
        +  },
        +  "type": "array"
        +}
      • removedOutput schema / properties / rows_withheld
        Removed value: -{
        -  "anyOf": [
        -    {
        -      "type": "number"
        -    },
        -    {
        -      "type": "null"
        -    }
        -  ],
        -  "description": "Free: rows held back (the counts above are complete)."
        -}
      • changedOutput schema / properties / summary / description
        Previous value: -"The answer in one plain sentence, computed from the fields below. Open the reply with this, then let the numbers back it up. Null only when there was nothing to summarise."New value: +"The answer in one sentence."
      • addedOutput schema / properties / truncated
        Added value: +{
        +  "description": "Rows held back; see trimmed."
        +}
      • removedOutput schema / properties / upgrade
        Removed value: -{
        -  "anyOf": [
        -    {
        -      "additionalProperties": {},
        -      "propertyNames": {
        -        "type": "string"
        -      },
        -      "type": "object"
        -    },
        -    {
        -      "type": "null"
        -    }
        -  ],
        -  "description": "Present only when rows were withheld: the cheapest plan that returns them."
        -}
    • Addednews
    • Removedoi_funding_history
    • Removedonchain_whales
    • Changedoptions35 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • addedInput schema / additionalProperties
        Added value: +{}
      • changedInput schema / properties / coin / description
        Previous value: -"BTC or ETH (the only coins Deribit lists options for). A pair like BTC/USD works too, the quote leg is dropped. Defaults to BTC."New value: +"BTC (default) or ETH."
      • addedInput schema / properties / cursor
        Added value: +{
        +  "description": "Next page: the cursor from the previous answer.",
        +  "type": "string"
        +}
      • addedInput schema / properties / detail
        Added value: +{
        +  "description": "brief (default): the answer, key numbers and top rows. full: every row, paged with cursor.",
        +  "enum": [
        +    "brief",
        +    "full"
        +  ],
        +  "type": "string"
        +}
      • removedInput schema / properties / pair
        Removed value: -{
        -  "description": "Alias for coin.",
        -  "type": "string"
        -}
      • removedOutput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • addedOutput schema / properties / access_note
        Added value: +{
        +  "description": "What this connection could not return."
        +}
      • addedOutput schema / properties / as_of
        Added value: +{
        +  "description": "Data time, ISO."
        +}
      • addedOutput schema / properties / as_of_ms
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "number"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "Data time, Unix ms."
        +}
      • removedOutput schema / properties / available / anyOf
        Removed value: -[
        -  {
        -    "type": "boolean"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • changedOutput schema / properties / available / description
        Previous value: -"False when this lane could not answer: a producer is dark, the pair sits outside this plan, or the argument named something we do not carry. Absent or true means the numbers are a real reading, not a guess."New value: +"False: no data; note says why."
      • addedOutput schema / properties / available / type
        Added value: +"boolean"
      • removedOutput schema / properties / callOiUsd
        Removed value: -{
        -  "anyOf": [
        -    {
        -      "type": "number"
        -    },
        -    {
        -      "type": "null"
        -    }
        -  ],
        -  "description": "Open interest sitting in calls (upside bets), in USD."
        -}
      • addedOutput schema / properties / caveat
        Added value: +{
        +  "description": "A real limit, when non-null."
        +}
      • removedOutput schema / properties / coin
        Removed value: -{
        -  "anyOf": [
        -    {
        -      "type": "string"
        -    },
        -    {
        -      "type": "null"
        -    }
        -  ],
        -  "description": "The coin these options are for (BTC or ETH)."
        -}
      • removedOutput schema / properties / coins_covered
        Removed value: -{
        -  "anyOf": [
        -    {
        -      "items": {
        -        "type": "string"
        -      },
        -      "type": "array"
        -    },
        -    {
        -      "type": "null"
        -    }
        -  ],
        -  "description": "The coins options are carried for (BTC, ETH)."
        -}
      • addedOutput schema / properties / cursor
        Added value: +{
        +  "description": "Next page (detail full)."
        +}
      • addedOutput schema / properties / delayed
        Added value: +{
        +  "description": "Set when not live."
        +}
      • removedOutput schema / properties / dvol
        Removed value: -{
        -  "anyOf": [
        -    {
        -      "type": "number"
        -    },
        -    {
        -      "type": "null"
        -    }
        -  ],
        -  "description": "Implied-vol index: how big a swing the market is pricing in. Lower is calmer."
        -}
      • removedOutput schema / properties / expiries
        Removed value: -{
        -  "anyOf": [
        -    {
        -      "items": {},
        -      "type": "array"
        -    },
        -    {
        -      "type": "null"
        -    }
        -  ],
        -  "description": "Open interest grouped by expiry date, with days to go."
        -}
      • removedOutput schema / properties / gammaWalls
        Removed value: -{
        -  "anyOf": [
        -    {
        -      "items": {},
        -      "type": "array"
        -    },
        -    {
        -      "type": "null"
        -    }
        -  ],
        -  "description": "The strikes holding the most open interest, biggest first, with the call and put split. These often act as magnets into expiry."
        -}
      • removedOutput schema / properties / maxPain
        Removed value: -{
        -  "anyOf": [
        -    {
        -      "items": {},
        -      "type": "array"
        -    },
        -    {
        -      "type": "null"
        -    }
        -  ],
        -  "description": "Per near expiry, the strike where the most options expire worthless."
        -}
      • addedOutput schema / properties / next_tools
        Added value: +{
        +  "description": "Follow-up calls {tool,args,why}.",
        +  "items": {
        +    "additionalProperties": {},
        +    "properties": {},
        +    "type": "object"
        +  },
        +  "type": "array"
        +}
      • removedOutput schema / properties / note
        Removed value: -{
        -  "anyOf": [
        -    {
        -      "type": "string"
        -    },
        -    {
        -      "type": "null"
        -    }
        -  ],
        -  "description": "One line saying what the numbers cover, or why there are none. Read it before reporting any zero as a market reading."
        -}
      • removedOutput schema / properties / openInterestUsd
        Removed value: -{
        -  "anyOf": [
        -    {
        -      "type": "number"
        -    },
        -    {
        -      "type": "null"
        -    }
        -  ],
        -  "description": "Total open interest in USD across all listed options."
        -}
      • removedOutput schema / properties / putCallRatio
        Removed value: -{
        -  "anyOf": [
        -    {
        -      "type": "number"
        -    },
        -    {
        -      "type": "null"
        -    }
        -  ],
        -  "description": "Put open interest divided by call open interest. Above ~1.15 is put-heavy, below ~0.7 is call-heavy."
        -}
      • removedOutput schema / properties / putOiUsd
        Removed value: -{
        -  "anyOf": [
        -    {
        -      "type": "number"
        -    },
        -    {
        -      "type": "null"
        -    }
        -  ],
        -  "description": "Open interest sitting in puts (downside protection), in USD."
        -}
      • removedOutput schema / properties / recentLargeTrades
        Removed value: -{
        -  "anyOf": [
        -    {
        -      "items": {},
        -      "type": "array"
        -    },
        -    {
        -      "type": "null"
        -    }
        -  ],
        -  "description": "Large option buys and sells above a size floor, newest first. Deeper on a paid plan."
        -}
      • removedOutput schema / properties / recentTradesTruncated
        Removed value: -{
        -  "anyOf": [
        -    {
        -      "type": "boolean"
        -    },
        -    {
        -      "type": "null"
        -    }
        -  ],
        -  "description": "True when the large-trade list was shortened for a keyless caller."
        -}
      • changedOutput schema / properties / summary / description
        Previous value: -"The answer in one plain sentence, computed from the fields below. Open the reply with this, then let the numbers back it up. Null only when there was nothing to summarise."New value: +"The answer in one sentence."
      • addedOutput schema / properties / truncated
        Added value: +{
        +  "description": "Rows held back; see trimmed."
        +}
      • removedOutput schema / properties / underlyingPrice
        Removed value: -{
        -  "anyOf": [
        -    {
        -      "type": "number"
        -    },
        -    {
        -      "type": "null"
        -    }
        -  ],
        -  "description": "Spot price of the coin, from the venue."
        -}
      • removedOutput schema / properties / updatedAt
        Removed value: -{
        -  "anyOf": [
        -    {
        -      "anyOf": [
        -        {
        -          "type": "string"
        -        },
        -        {
        -          "type": "number"
        -        }
        -      ]
        -    },
        -    {
        -      "type": "null"
        -    }
        -  ],
        -  "description": "When this snapshot was published."
        -}
      • removedOutput schema / properties / venue
        Removed value: -{
        -  "anyOf": [
        -    {
        -      "type": "string"
        -    },
        -    {
        -      "type": "null"
        -    }
        -  ],
        -  "description": "Always Deribit."
        -}
    • Changedorderbook31 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • addedInput schema / additionalProperties
        Added value: +{}
      • changedInput schema / properties / coin / description
        Previous value: -"Alias for pair."New value: +"Coin symbol, e.g. BTC. A pair like ETH/USD works too."
      • addedInput schema / properties / cursor
        Added value: +{
        +  "description": "Next page: the cursor from the previous answer.",
        +  "type": "string"
        +}
      • addedInput schema / properties / detail
        Added value: +{
        +  "description": "brief (default): the answer, key numbers and top rows. full: every row, paged with cursor.",
        +  "enum": [
        +    "brief",
        +    "full"
        +  ],
        +  "type": "string"
        +}
      • changedInput schema / properties / levels / description
        Previous value: -"Price levels per side. Defaults to 10; the ceiling is 5 on the free plans, 10 on Starter, 25 on Pro (hard)."New value: +"Price levels per side."
      • removedInput schema / properties / levels / maximum
        Removed value: -9007199254740991
      • removedInput schema / properties / levels / minimum
        Removed value: --9007199254740991
      • removedInput schema / properties / pair
        Removed value: -{
        -  "description": "Trading pair, for example ETH/USD. A bare symbol like ETH is read as ETH/USD. Defaults to BTC/USD when omitted.",
        -  "type": "string"
        -}
      • removedOutput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • addedOutput schema / properties / access_note
        Added value: +{
        +  "description": "What this connection could not return."
        +}
      • addedOutput schema / properties / as_of
        Added value: +{
        +  "description": "Data time, ISO."
        +}
      • addedOutput schema / properties / as_of_ms
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "number"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "Data time, Unix ms."
        +}
      • removedOutput schema / properties / ask_usd_in_levels
        Removed value: -{
        -  "anyOf": [
        -    {
        -      "type": "number"
        -    },
        -    {
        -      "type": "null"
        -    }
        -  ],
        -  "description": "Dollars resting on the ask side in the returned levels."
        -}
      • removedOutput schema / properties / available / anyOf
        Removed value: -[
        -  {
        -    "type": "boolean"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • changedOutput schema / properties / available / description
        Previous value: -"False when the pair is not covered, not in the free set on this plan, or has no snapshot."New value: +"False: no data; note says why."
      • addedOutput schema / properties / available / type
        Added value: +"boolean"
      • removedOutput schema / properties / best_ask
        Removed value: -{
        -  "anyOf": [
        -    {
        -      "type": "number"
        -    },
        -    {
        -      "type": "null"
        -    }
        -  ],
        -  "description": "Best ask across venues."
        -}
      • removedOutput schema / properties / best_bid
        Removed value: -{
        -  "anyOf": [
        -    {
        -      "type": "number"
        -    },
        -    {
        -      "type": "null"
        -    }
        -  ],
        -  "description": "Best bid across venues."
        -}
      • removedOutput schema / properties / bid_usd_in_levels
        Removed value: -{
        -  "anyOf": [
        -    {
        -      "type": "number"
        -    },
        -    {
        -      "type": "null"
        -    }
        -  ],
        -  "description": "Dollars resting on the bid side in the returned levels."
        -}
      • addedOutput schema / properties / caveat
        Added value: +{
        +  "description": "A real limit, when non-null."
        +}
      • removedOutput schema / properties / combined
        Removed value: -{
        -  "anyOf": [
        -    {
        -      "additionalProperties": {},
        -      "propertyNames": {
        -        "type": "string"
        -      },
        -      "type": "object"
        -    },
        -    {
        -      "type": "null"
        -    }
        -  ],
        -  "description": "bids and asks aggregated by price, each level listing the venues holding it."
        -}
      • addedOutput schema / properties / cursor
        Added value: +{
        +  "description": "Next page (detail full)."
        +}
      • addedOutput schema / properties / delayed
        Added value: +{
        +  "description": "Set when not live."
        +}
      • removedOutput schema / properties / exchange_count
        Removed value: -{
        -  "anyOf": [
        -    {
        -      "type": "number"
        -    },
        -    {
        -      "type": "null"
        -    }
        -  ],
        -  "description": "Venues merged."
        -}
      • removedOutput schema / properties / levels
        Removed value: -{
        -  "anyOf": [
        -    {
        -      "type": "number"
        -    },
        -    {
        -      "type": "null"
        -    }
        -  ],
        -  "description": "Levels per side returned."
        -}
      • addedOutput schema / properties / next_tools
        Added value: +{
        +  "description": "Follow-up calls {tool,args,why}.",
        +  "items": {
        +    "additionalProperties": {},
        +    "properties": {},
        +    "type": "object"
        +  },
        +  "type": "array"
        +}
      • removedOutput schema / properties / per_exchange
        Removed value: -{
        -  "anyOf": [
        -    {
        -      "additionalProperties": {},
        -      "propertyNames": {
        -        "type": "string"
        -      },
        -      "type": "object"
        -    },
        -    {
        -      "type": "null"
        -    }
        -  ],
        -  "description": "Each venue's own top levels."
        -}
      • removedOutput schema / properties / spread_pct
        Removed value: -{
        -  "anyOf": [
        -    {
        -      "type": "number"
        -    },
        -    {
        -      "type": "null"
        -    }
        -  ],
        -  "description": "Spread as a percent of the ask."
        -}
      • changedOutput schema / properties / summary / description
        Previous value: -"The answer in one plain sentence, computed from the fields below. Open the reply with this, then let the numbers back it up. Null only when there was nothing to summarise."New value: +"The answer in one sentence."
      • addedOutput schema / properties / truncated
        Added value: +{
        +  "description": "Rows held back; see trimmed."
        +}
    • Removedprice_candles
    • Removedproven_traders
    • Addedsectors
    • Removedsignal_outcomes
    • Removedsignal_record
    • Addedsignals
    • Changedsituations27 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • addedInput schema / additionalProperties
        Added value: +{}
      • changedInput schema / properties / coin / description
        Previous value: -"One coin symbol to filter to. Omit for every coin."New value: +"Coin symbol, e.g. BTC. A pair like ETH/USD works too."
      • addedInput schema / properties / cursor
        Added value: +{
        +  "description": "Next page: the cursor from the previous answer.",
        +  "type": "string"
        +}
      • addedInput schema / properties / detail
        Added value: +{
        +  "description": "brief (default): the answer, key numbers and top rows. full: every row, paged with cursor.",
        +  "enum": [
        +    "brief",
        +    "full"
        +  ],
        +  "type": "string"
        +}
      • changedInput schema / properties / include_resolved / description
        Previous value: -"Also return situations that resolved in the last 48h, with their outcomes. Pro and up."New value: +"Also finished ones with their outcome (Pro)."
      • addedInput schema / properties / limit
        Added value: +{
        +  "description": "Rows to return (usually up to 50; more is clamped and said).",
        +  "type": "integer"
        +}
      • removedInput schema / properties / pair
        Removed value: -{
        -  "description": "Alias for coin.",
        -  "type": "string"
        -}
      • removedOutput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • addedOutput schema / properties / access_note
        Added value: +{
        +  "description": "What this connection could not return."
        +}
      • removedOutput schema / properties / active_total
        Removed value: -{
        -  "anyOf": [
        -    {
        -      "type": "number"
        -    },
        -    {
        -      "type": "null"
        -    }
        -  ],
        -  "description": "Live situations before the free cap."
        -}
      • addedOutput schema / properties / as_of
        Added value: +{
        +  "description": "Data time, ISO."
        +}
      • addedOutput schema / properties / as_of_ms
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "number"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "Data time, Unix ms."
        +}
      • removedOutput schema / properties / available / anyOf
        Removed value: -[
        -  {
        -    "type": "boolean"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • changedOutput schema / properties / available / description
        Previous value: -"False when the engine has not published (building:true)."New value: +"False: no data; note says why."
      • addedOutput schema / properties / available / type
        Added value: +"boolean"
      • addedOutput schema / properties / caveat
        Added value: +{
        +  "description": "A real limit, when non-null."
        +}
      • removedOutput schema / properties / count
        Removed value: -{
        -  "anyOf": [
        -    {
        -      "type": "number"
        -    },
        -    {
        -      "type": "null"
        -    }
        -  ],
        -  "description": "Rows returned."
        -}
      • addedOutput schema / properties / cursor
        Added value: +{
        +  "description": "Next page (detail full)."
        +}
      • addedOutput schema / properties / delayed
        Added value: +{
        +  "description": "Set when not live."
        +}
      • addedOutput schema / properties / next_tools
        Added value: +{
        +  "description": "Follow-up calls {tool,args,why}.",
        +  "items": {
        +    "additionalProperties": {},
        +    "properties": {},
        +    "type": "object"
        +  },
        +  "type": "array"
        +}
      • removedOutput schema / properties / resolved
        Removed value: -{
        -  "anyOf": [
        -    {
        -      "items": {},
        -      "type": "array"
        -    },
        -    {
        -      "type": "null"
        -    }
        -  ],
        -  "description": "Pro and up, when include_resolved: situations resolved in the last 48h with outcomes."
        -}
      • removedOutput schema / properties / situations
        Removed value: -{
        -  "anyOf": [
        -    {
        -      "items": {},
        -      "type": "array"
        -    },
        -    {
        -      "type": "null"
        -    }
        -  ],
        -  "description": "id, coin, type, type_label, direction, stage, headline, extreme, started_at, last_material_at, price_move_pct, families, supporting, conflicting, changes."
        -}
      • changedOutput schema / properties / summary / description
        Previous value: -"The answer in one plain sentence, computed from the fields below. Open the reply with this, then let the numbers back it up. Null only when there was nothing to summarise."New value: +"The answer in one sentence."
      • addedOutput schema / properties / truncated
        Added value: +{
        +  "description": "Rows held back; see trimmed."
        +}
      • removedOutput schema / properties / upgrade
        Removed value: -{
        -  "anyOf": [
        -    {
        -      "additionalProperties": {},
        -      "propertyNames": {
        -        "type": "string"
        -      },
        -      "type": "object"
        -    },
        -    {
        -      "type": "null"
        -    }
        -  ],
        -  "description": "Present only when something was withheld: the cheapest plan that lifts it."
        -}
      • removedOutput schema / properties / withheld
        Removed value: -{
        -  "anyOf": [
        -    {
        -      "type": "number"
        -    },
        -    {
        -      "type": "null"
        -    }
        -  ],
        -  "description": "Live situations held back on this plan."
        -}
    • Removedsmart_money
    • Removedsqueeze_score
    • Removedtrade_context
    • Addedtraders
    • Addedwallet
    • Addedwatch
    • Removedwatch_create
    • Removedwatch_delete
    • Removedwatch_list
    • Changedwatchlist_brief19 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • addedInput schema / additionalProperties
        Added value: +{}
      • removedOutput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • addedOutput schema / properties / access_note
        Added value: +{
        +  "description": "What this connection could not return."
        +}
      • addedOutput schema / properties / as_of
        Added value: +{
        +  "description": "Data time, ISO."
        +}
      • addedOutput schema / properties / as_of_ms
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "number"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "Data time, Unix ms."
        +}
      • removedOutput schema / properties / available / anyOf
        Removed value: -[
        -  {
        -    "type": "boolean"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • changedOutput schema / properties / available / description
        Previous value: -"False keyless (reason no_owner) or when the watchlist is empty (empty:true)."New value: +"False: no data; note says why."
      • addedOutput schema / properties / available / type
        Added value: +"boolean"
      • addedOutput schema / properties / caveat
        Added value: +{
        +  "description": "A real limit, when non-null."
        +}
      • removedOutput schema / properties / coins
        Removed value: -{
        -  "anyOf": [
        -    {
        -      "items": {},
        -      "type": "array"
        -    },
        -    {
        -      "type": "null"
        -    }
        -  ],
        -  "description": "Per watchlist coin: the whale-context read (multiple vs average, records, buy share), direction, unusual_now, and the dollar flow on Starter and up."
        -}
      • removedOutput schema / properties / count
        Removed value: -{
        -  "anyOf": [
        -    {
        -      "type": "number"
        -    },
        -    {
        -      "type": "null"
        -    }
        -  ],
        -  "description": "Coins read (up to 10)."
        -}
      • addedOutput schema / properties / cursor
        Added value: +{
        +  "description": "Next page (detail full)."
        +}
      • addedOutput schema / properties / delayed
        Added value: +{
        +  "description": "Set when not live."
        +}
      • addedOutput schema / properties / next_tools
        Added value: +{
        +  "description": "Follow-up calls {tool,args,why}.",
        +  "items": {
        +    "additionalProperties": {},
        +    "properties": {},
        +    "type": "object"
        +  },
        +  "type": "array"
        +}
      • removedOutput schema / properties / radar
        Removed value: -{
        -  "anyOf": [
        -    {
        -      "additionalProperties": {},
        -      "propertyNames": {
        -        "type": "string"
        -      },
        -      "type": "object"
        -    },
        -    {
        -      "type": "null"
        -    }
        -  ],
        -  "description": "The radar rows for these coins per window, in the same shape whale_radar returns on this plan."
        -}
      • changedOutput schema / properties / summary / description
        Previous value: -"The answer in one plain sentence, computed from the fields below. Open the reply with this, then let the numbers back it up. Null only when there was nothing to summarise."New value: +"The answer in one sentence."
      • addedOutput schema / properties / truncated
        Added value: +{
        +  "description": "Rows held back; see trimmed."
        +}
      • removedOutput schema / properties / upgrade
        Removed value: -{
        -  "anyOf": [
        -    {
        -      "additionalProperties": {},
        -      "propertyNames": {
        -        "type": "string"
        -      },
        -      "type": "object"
        -    },
        -    {
        -      "type": "null"
        -    }
        -  ],
        -  "description": "Present on the free shape: the cheapest plan that adds the dollar flow."
        -}
    • Changedwhale_activity41 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • addedInput schema / additionalProperties
        Added value: +{}
      • addedInput schema / properties / breakdown
        Added value: +{
        +  "description": "hourly only: split each hour by exchange or wallet (Pro).",
        +  "enum": [
        +    "none",
        +    "venues",
        +    "wallets",
        +    "all"
        +  ],
        +  "type": "string"
        +}
      • addedInput schema / properties / chain
        Added value: +{
        +  "description": "ethereum, base or arbitrum. Omit for all.",
        +  "type": "string"
        +}
      • changedInput schema / properties / coin / description
        Previous value: -"Coin symbol, for example BTC. A pair like ETH/USD works too, the quote leg is dropped. Required: with nothing to look up the call is refused rather than answered about a different coin."New value: +"Coin symbol, e.g. BTC. A pair like ETH/USD works too."
      • changedInput schema / properties / coins / description
        Previous value: -"Portfolio read: a list of coin symbols (or a comma-separated string) answered side by side in one call, up to 10. Omit for one coin."New value: +"Several coins in one call (list or \"BTC,ETH\"), up to 10."
      • addedInput schema / properties / cursor
        Added value: +{
        +  "description": "Next page: the cursor from the previous answer.",
        +  "type": "string"
        +}
      • addedInput schema / properties / detail
        Added value: +{
        +  "description": "brief (default): the answer, key numbers and top rows. full: every row, paged with cursor.",
        +  "enum": [
        +    "brief",
        +    "full"
        +  ],
        +  "type": "string"
        +}
      • changedInput schema / properties / hours / description
        Previous value: -"How far back to read the record (min 168, i.e. 7 days). The reported windows are always 1h, 4h, 24h and 7d."New value: +"How many hours back to read."
      • removedInput schema / properties / hours / maximum
        Removed value: -9007199254740991
      • removedInput schema / properties / hours / minimum
        Removed value: --9007199254740991
      • addedInput schema / properties / limit
        Added value: +{
        +  "description": "Rows to return (usually up to 200; more is clamped and said).",
        +  "type": "integer"
        +}
      • addedInput schema / properties / min_usd
        Added value: +{
        +  "description": "Smallest trade in USD.",
        +  "type": "number"
        +}
      • removedInput schema / properties / pair
        Removed value: -{
        -  "description": "Alias for coin.",
        -  "type": "string"
        -}
      • addedInput schema / properties / since_ms
        Added value: +{
        +  "description": "Only rows newer than this Unix-ms time (polling cursor).",
        +  "type": "integer"
        +}
      • addedInput schema / properties / source
        Added value: +{
        +  "description": "trades only: exchanges, DEX swaps or both.",
        +  "enum": [
        +    "cex",
        +    "dex",
        +    "all"
        +  ],
        +  "type": "string"
        +}
      • addedInput schema / properties / view
        Added value: +{
        +  "description": "Which lane; see the description.",
        +  "enum": [
        +    "summary",
        +    "hourly",
        +    "trades",
        +    "venues",
        +    "context",
        +    "hyperliquid",
        +    "onchain"
        +  ],
        +  "type": "string"
        +}
      • removedOutput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • removedOutput schema / properties / access_note / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • changedOutput schema / properties / access_note / description
        Previous value: -"What this connection could not return and what lifts it. Always pass this on to the user: it is the only place that information appears."New value: +"What this connection could not return."
      • addedOutput schema / properties / as_of
        Added value: +{
        +  "description": "Data time, ISO."
        +}
      • addedOutput schema / properties / as_of_ms
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "number"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "Data time, Unix ms."
        +}
      • removedOutput schema / properties / available / anyOf
        Removed value: -[
        -  {
        -    "type": "boolean"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • changedOutput schema / properties / available / description
        Previous value: -"False when this lane could not answer: a producer is dark, the pair sits outside this plan, or the argument named something we do not carry. Absent or true means the numbers are a real reading, not a guess."New value: +"False: no data; note says why."
      • addedOutput schema / properties / available / type
        Added value: +"boolean"
      • removedOutput schema / properties / capped
        Removed value: -{
        -  "anyOf": [
        -    {
        -      "additionalProperties": false,
        -      "properties": {
        -        "applied": {
        -          "description": "The value actually used.",
        -          "type": "number"
        -        },
        -        "argument": {
        -          "description": "Which argument was cut down, for example limit or hours.",
        -          "type": "string"
        -        },
        -        "by": {
        -          "description": "Why it was cut: keyless for the free ceiling, plan_max for a paid ceiling, tool_max for a ceiling no plan raises.",
        -          "type": "string"
        -        },
        -        "max": {
        -          "description": "The ceiling that applied.",
        -          "type": "number"
        -        },
        -        "requested": {
        -          "description": "The value the caller asked for.",
        -          "type": "number"
        -        }
        -      },
        -      "required": [
        -        "argument",
        -        "requested",
        -        "applied",
        -        "max",
        -        "by"
        -      ],
        -      "type": "object"
        -    },
        -    {
        -      "type": "null"
        -    }
        -  ],
        -  "description": "Present only when an argument was cut down to a ceiling. Absent means nothing was clamped, so a smaller number than you asked for is the data and not a limit."
        -}
      • removedOutput schema / properties / caveat / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • changedOutput schema / properties / caveat / description
        Previous value: -"A real limit on this answer, in one clause. Present only when something genuinely narrows what can be said."New value: +"A real limit, when non-null."
      • removedOutput schema / properties / coin
        Removed value: -{
        -  "anyOf": [
        -    {
        -      "type": "string"
        -    },
        -    {
        -      "type": "null"
        -    }
        -  ],
        -  "description": "The coin this profile describes."
        -}
      • removedOutput schema / properties / coverage
        Removed value: -{
        -  "description": "How much of the window carries a recorded reading."
        -}
      • addedOutput schema / properties / cursor
        Added value: +{
        +  "description": "Next page (detail full)."
        +}
      • addedOutput schema / properties / delayed
        Added value: +{
        +  "description": "Set when not live."
        +}
      • removedOutput schema / properties / depth_note
        Removed value: -{
        -  "anyOf": [
        -    {
        -      "type": "string"
        -    },
        -    {
        -      "type": "null"
        -    }
        -  ],
        -  "description": "How far back the data behind this answer reaches."
        -}
      • addedOutput schema / properties / next_tools
        Added value: +{
        +  "description": "Follow-up calls {tool,args,why}.",
        +  "items": {
        +    "additionalProperties": {},
        +    "properties": {},
        +    "type": "object"
        +  },
        +  "type": "array"
        +}
      • removedOutput schema / properties / note
        Removed value: -{
        -  "anyOf": [
        -    {
        -      "type": "string"
        -    },
        -    {
        -      "type": "null"
        -    }
        -  ],
        -  "description": "One line saying what the numbers cover, or why there are none. Read it before reporting any zero as a market reading."
        -}
      • removedOutput schema / properties / pressure
        Removed value: -{
        -  "description": "Flow measured against price. state is absorption, distribution or confirming. When there is no state, reason names why (price-coverage, flow-too-small, price-flat), which means not enough to say, never no activity."
        -}
      • removedOutput schema / properties / sources
        Removed value: -{
        -  "description": "The CEX, on-chain and Hyperliquid split, including sourceSplit when those markets sit on opposite sides."
        -}
      • changedOutput schema / properties / summary / description
        Previous value: -"The answer in one plain sentence, computed from the fields below. Open the reply with this, then let the numbers back it up. Null only when there was nothing to summarise."New value: +"The answer in one sentence."
      • addedOutput schema / properties / truncated
        Added value: +{
        +  "description": "Rows held back; see trimmed."
        +}
      • removedOutput schema / properties / venues
        Removed value: -{
        -  "description": "Which of the streamed exchanges the flow actually sits on and how concentrated it is. split marks two exchanges on opposite sides; partial marks a window whose exchange dollars are unknown rather than zero."
        -}
      • removedOutput schema / properties / windows
        Removed value: -{
        -  "anyOf": [
        -    {
        -      "additionalProperties": {},
        -      "propertyNames": {
        -        "type": "string"
        -      },
        -      "type": "object"
        -    },
        -    {
        -      "type": "null"
        -    }
        -  ],
        -  "description": "Net flow per window, keyed 1h, 4h, 24h and 7d. A window states hoursCovered only when it holds fewer hours than it spans."
        -}
    • Removedwhale_context
    • Removedwhale_flow
    • Removedwhale_profile
    • Changedwhale_radar28 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • addedInput schema / additionalProperties
        Added value: +{}
      • addedInput schema / properties / cursor
        Added value: +{
        +  "description": "Next page: the cursor from the previous answer.",
        +  "type": "string"
        +}
      • addedInput schema / properties / detail
        Added value: +{
        +  "description": "brief (default): the answer, key numbers and top rows. full: every row, paged with cursor.",
        +  "enum": [
        +    "brief",
        +    "full"
        +  ],
        +  "type": "string"
        +}
      • addedInput schema / properties / limit
        Added value: +{
        +  "description": "Rows to return (usually up to 100; more is clamped and said).",
        +  "type": "integer"
        +}
      • addedInput schema / properties / window
        Added value: +{
        +  "description": "One window only. Omit for all three.",
        +  "enum": [
        +    "1h",
        +    "4h",
        +    "24h"
        +  ],
        +  "type": "string"
        +}
      • removedOutput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • addedOutput schema / properties / access_note
        Added value: +{
        +  "description": "What this connection could not return."
        +}
      • addedOutput schema / properties / as_of
        Added value: +{
        +  "description": "Data time, ISO."
        +}
      • addedOutput schema / properties / as_of_ms
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "number"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "Data time, Unix ms."
        +}
      • removedOutput schema / properties / available / anyOf
        Removed value: -[
        -  {
        -    "type": "boolean"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • changedOutput schema / properties / available / description
        Previous value: -"False when this lane could not answer: a producer is dark, the pair sits outside this plan, or the argument named something we do not carry. Absent or true means the numbers are a real reading, not a guess."New value: +"False: no data; note says why."
      • addedOutput schema / properties / available / type
        Added value: +"boolean"
      • removedOutput schema / properties / blurredMagnitude
        Removed value: -{
        -  "anyOf": [
        -    {
        -      "type": "boolean"
        -    },
        -    {
        -      "type": "null"
        -    }
        -  ],
        -  "description": "Keyless only: true because dollar sizes on held-back coins are rounded away."
        -}
      • removedOutput schema / properties / building
        Removed value: -{
        -  "anyOf": [
        -    {
        -      "type": "boolean"
        -    },
        -    {
        -      "type": "null"
        -    }
        -  ],
        -  "description": "True while the ranking has not been published yet."
        -}
      • addedOutput schema / properties / caveat
        Added value: +{
        +  "description": "A real limit, when non-null."
        +}
      • addedOutput schema / properties / cursor
        Added value: +{
        +  "description": "Next page (detail full)."
        +}
      • addedOutput schema / properties / delayed
        Added value: +{
        +  "description": "Set when not live."
        +}
      • removedOutput schema / properties / freeCoins
        Removed value: -{
        -  "anyOf": [
        -    {
        -      "items": {
        -        "type": "string"
        -      },
        -      "type": "array"
        -    },
        -    {
        -      "type": "null"
        -    }
        -  ],
        -  "description": "Keyless only: the coins whose numbers come through unblurred."
        -}
      • removedOutput schema / properties / freshness
        Removed value: -{
        -  "anyOf": [
        -    {
        -      "type": "string"
        -    },
        -    {
        -      "type": "null"
        -    }
        -  ],
        -  "description": "How often the ranking is rebuilt."
        -}
      • removedOutput schema / properties / generatedAt
        Removed value: -{
        -  "anyOf": [
        -    {
        -      "anyOf": [
        -        {
        -          "type": "string"
        -        },
        -        {
        -          "type": "number"
        -        }
        -      ]
        -    },
        -    {
        -      "type": "null"
        -    }
        -  ],
        -  "description": "When the ranking was computed."
        -}
      • removedOutput schema / properties / lockedCount
        Removed value: -{
        -  "anyOf": [
        -    {
        -      "type": "number"
        -    },
        -    {
        -      "type": "null"
        -    }
        -  ],
        -  "description": "Keyless only: how many coins were held back."
        -}
      • removedOutput schema / properties / lockedUnusualCount
        Removed value: -{
        -  "anyOf": [
        -    {
        -      "type": "number"
        -    },
        -    {
        -      "type": "null"
        -    }
        -  ],
        -  "description": "Keyless only: how many of the held-back coins are the unusual ones."
        -}
      • addedOutput schema / properties / next_tools
        Added value: +{
        +  "description": "Follow-up calls {tool,args,why}.",
        +  "items": {
        +    "additionalProperties": {},
        +    "properties": {},
        +    "type": "object"
        +  },
        +  "type": "array"
        +}
      • removedOutput schema / properties / note
        Removed value: -{
        -  "anyOf": [
        -    {
        -      "type": "string"
        -    },
        -    {
        -      "type": "null"
        -    }
        -  ],
        -  "description": "One line saying what the numbers cover, or why there are none. Read it before reporting any zero as a market reading."
        -}
      • changedOutput schema / properties / summary / description
        Previous value: -"The answer in one plain sentence, computed from the fields below. Open the reply with this, then let the numbers back it up. Null only when there was nothing to summarise."New value: +"The answer in one sentence."
      • addedOutput schema / properties / truncated
        Added value: +{
        +  "description": "Rows held back; see trimmed."
        +}
      • removedOutput schema / properties / windows
        Removed value: -{
        -  "description": "The ranked coins per window, keyed 1h, 4h and 24h. Each row names the coin, its dollars in the window and how that compares with the same coin trailing hours."
        -}
    • Removedwhale_sectors
    • Removedwhale_tape
    • Removedwhale_trades
  2. 4 tool updates
    • Changedcrypto_news2 fields changed
      • addedOutput schema / properties / key_level
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "The one level or figure the written read points at, or null."
        +}
      • addedOutput schema / properties / points
        Added value: +{
        +  "anyOf": [
        +    {
        +      "items": {},
        +      "type": "array"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "The written points behind the summary, each with a kind (signal, data, risk or macro) and its text. Empty when nothing was recorded."
        +}
    • Changedmarket_brief1 field changed
      • addedOutput schema / properties / news
        Added value: +{
        +  "anyOf": [
        +    {
        +      "additionalProperties": {},
        +      "propertyNames": {
        +        "type": "string"
        +      },
        +      "type": "object"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "What is being said about this coin, so a \"why is it moving\" question is answered in this one call: summary (the written one-liner), sentiment and sentiment_score (minus 100 to plus 100, NULL when nothing was recorded, which is not the same as neutral), points (the written points behind the summary, each with a kind), key_level, headlines (title, source, published, link) and macro (the same read for the market as a whole). available:false with covered:true means the coin is recorded and this plan reaches BTC and macro only."
        +}
    • Changedmarket_liquidations1 field changed
      • changedOutput schema / properties / perp_liquidations / description
        Previous value: -"The 24h forced-close picture on leveraged markets: count, total_usd, the long and short split in both dollars and counts, hour by hour, the peak hour, the ranked coins, the biggest single event, and which exchanges are behind the totals. Long dollars are sell-side pressure."New value: +"The 24h forced-close picture on leveraged markets: count, total_usd, the long and short split in both dollars and counts, hour by hour, the peak hour, the ranked coins, the biggest single event, and which exchanges are behind the totals. Long dollars are sell-side pressure. held_out names anything removed before these numbers were built (how many rows, how many dollars, on which symbols and why), or is null when nothing was; those dollars are NOT inside any figure here."
    • Changedtrade_context1 field changed
      • addedOutput schema / properties / news
        Added value: +{
        +  "anyOf": [
        +    {
        +      "additionalProperties": {},
        +      "propertyNames": {
        +        "type": "string"
        +      },
        +      "type": "object"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "What is being said about this coin, so a \"why is it moving\" question is answered in this one call: summary (the written one-liner), sentiment and sentiment_score (minus 100 to plus 100, NULL when nothing was recorded, which is not the same as neutral), points (the written points behind the summary, each with a kind), key_level, headlines (title, source, published, link) and macro (the same read for the market as a whole). available:false with covered:true means the coin is recorded and this plan reaches BTC and macro only."
        +}
  3. 1 tool update
    • Changedmarket_history1 field changed
      • changedInput schema / properties / days / description
        Previous value: -"How many recorded days to return. Defaults to the whole window, which is also the ceiling: 1 on the free plans and 400 on a paid plan. Asking for more returns the cap, and the payload says so in `capped`. Both lanes settle several days behind live by design, so read as_of and data_age_days before calling any of it current."New value: +"How many recorded days to return. Defaults to the whole window, which is also the ceiling: 1 on the free plans and 400 on Pro (Starter sits between). Asking for more returns the cap, and the payload says so in `capped`. Both lanes settle several days behind live by design, so read as_of and data_age_days before calling any of it current."
  4. 17 tool updates
    • Changedcoin_liquidations1 field changed
      • changedInput schema / properties / limit / description
        Previous value: -"Max rows returned. Capped at 25 keyless and 1000 on a paid plan; asking for more returns the cap, and the payload says so in `capped`. count and the *_usd totals always cover the whole window regardless."New value: +"Max rows returned. Capped at 25 on the free plans and 1000 on a paid plan; asking for more returns the cap, and the payload says so in `capped`. count and the *_usd totals always cover the whole window regardless."
    • Changedflag_outcomes2 fields changed
      • changedInput schema / properties / hours / description
        Previous value: -"How far back to look, in hours. Defaults to 48. Capped at 168 keyless and 720 on a paid plan; asking for more returns the cap, and the payload says so in `capped`. The all_time block is unaffected by this window."New value: +"How far back to look, in hours. Defaults to 48. Capped at 168 on the free plans and 720 on a paid plan; asking for more returns the cap, and the payload says so in `capped`. The all_time block is unaffected by this window."
      • changedInput schema / properties / limit / description
        Previous value: -"Max rows returned. Capped at 25 keyless and 500 on a paid plan; asking for more returns the cap, and the payload says so in `capped`."New value: +"Max rows returned. Capped at 25 on the free plans and 500 on a paid plan; asking for more returns the cap, and the payload says so in `capped`."
    • Changedfunding_matrix1 field changed
      • changedInput schema / properties / pair / description
        Previous value: -"Trading pair, for example ETH/USD. A bare symbol like ETH is read as ETH/USD. Defaults to BTC/USD when omitted. Every streamed pair answers keyless. Rates come back per exchange at that exchange's own interval_h, so magnitudes are not comparable across rows without normalising first."New value: +"Trading pair, for example ETH/USD. A bare symbol like ETH is read as ETH/USD. Defaults to BTC/USD when omitted. On the free plans BTC answers in full and any other coin as a headline. Rates come back per exchange at that exchange's own interval_h, so magnitudes are not comparable across rows without normalising first."
    • Changedhl_wallet1 field changed
      • changedInput schema / properties / limit / description
        Previous value: -"Max recent fills returned for this account. Defaults to 50, hard ceiling 200 for everyone and no plan raises it. Keyless calls receive 3 of them whatever is asked for, and the live positions come back either way."New value: +"Max recent fills returned for this account. Defaults to 50, hard ceiling 200 for everyone and no plan raises it. The free plans receive 3 of them whatever is asked for, and the live positions come back either way."
    • Changedliq_zones1 field changed
      • changedInput schema / properties / pair / description
        Previous value: -"Trading pair, for example ETH/USD. A bare symbol like ETH is read as ETH/USD. Defaults to BTC/USD when omitted. Keyless calls reach the free pairs and get the projected levels without the cascade chains; a paid plan reaches any streamed pair with the full snapshot."New value: +"Trading pair, for example ETH/USD. A bare symbol like ETH is read as ETH/USD. Defaults to BTC/USD when omitted. The free plans get BTC's projected levels without the cascade chains and a headline for any other coin; a paid plan reaches any streamed pair with the full snapshot."
    • Changedliquidations1 field changed
      • changedInput schema / properties / limit / description
        Previous value: -"Max rows returned. Capped at 25 keyless and 1000 on a paid plan; asking for more returns the cap, and the payload says so in `capped`. count and the *_usd totals always cover the whole window regardless."New value: +"Max rows returned. Capped at 25 on the free plans and 1000 on a paid plan; asking for more returns the cap, and the payload says so in `capped`. count and the *_usd totals always cover the whole window regardless."
    • Changedmarket_brief1 field changed
      • changedInput schema / properties / pair / description
        Previous value: -"Trading pair, for example ETH/USD. A bare symbol like ETH is read as ETH/USD. Defaults to BTC/USD when omitted. Any streamed pair answers keyless; off the free pairs a keyless reply is the lite shape and names what it withheld in locked_layers."New value: +"Trading pair, for example ETH/USD. A bare symbol like ETH is read as ETH/USD. Defaults to BTC/USD when omitted. On the free plans BTC answers in full and any other coin as a headline."
    • Changedmarket_history1 field changed
      • changedInput schema / properties / days / description
        Previous value: -"How many recorded days to return. Defaults to the whole window, which is also the ceiling: 30 keyless and 400 on a paid plan. Asking for more returns the cap, and the payload says so in `capped`. Both lanes settle several days behind live by design, so read as_of and data_age_days before calling any of it current."New value: +"How many recorded days to return. Defaults to the whole window, which is also the ceiling: 1 on the free plans and 400 on a paid plan. Asking for more returns the cap, and the payload says so in `capped`. Both lanes settle several days behind live by design, so read as_of and data_age_days before calling any of it current."
    • Changedmarket_snapshot1 field changed
      • changedInput schema / properties / pair / description
        Previous value: -"Trading pair, for example ETH/USD. A bare symbol like ETH is read as ETH/USD. Defaults to BTC/USD when omitted. Keyless calls reach the free pairs only; a paid plan reaches every streamed pair. A pair this server does not stream comes back covered:false, and no plan adds it."New value: +"Trading pair, for example ETH/USD. A bare symbol like ETH is read as ETH/USD. Defaults to BTC/USD when omitted. On the free plans BTC answers in full and any other coin as a headline; a paid plan reaches every streamed pair. A pair this server does not stream comes back covered:false, and no plan adds it."
    • Changedoi_funding_history1 field changed
      • changedInput schema / properties / hours / description
        Previous value: -"How many hours back. Defaults to 24; keyless ceiling 24, then the plan's flow window. Asking for more returns the cap, and the payload says so in `capped`."New value: +"How many hours back. Defaults to 24; the ceiling on the free plans is 24, then the plan's history window. Asking for more returns the cap, and the payload says so in `capped`."
    • Changedorderbook1 field changed
      • changedInput schema / properties / levels / description
        Previous value: -"Price levels per side. Defaults to 10; the ceiling is 5 keyless, 10 on Starter, 25 on Pro (hard)."New value: +"Price levels per side. Defaults to 10; the ceiling is 5 on the free plans, 10 on Starter, 25 on Pro (hard)."
    • Changedprice_candles2 fields changed
      • changedInput schema / properties / limit / description
        Previous value: -"How many bars, newest-ending. Capped at 168 keyless and 720 on a paid plan; asking for more returns the cap, and the payload says so in `capped`."New value: +"How many bars, newest-ending. Capped at 24 on the free plans and 720 on a paid plan; asking for more returns the cap, and the payload says so in `capped`."
      • changedInput schema / properties / pair / description
        Previous value: -"Trading pair, for example ETH/USD. A bare symbol like ETH is read as ETH/USD. Defaults to BTC/USD when omitted. Keyless calls reach the free pairs only; a paid plan reaches every streamed pair. A pair this server does not stream comes back covered:false."New value: +"Trading pair, for example ETH/USD. A bare symbol like ETH is read as ETH/USD. Defaults to BTC/USD when omitted. On the free plans BTC answers in full and any other coin as a headline; a paid plan reaches every streamed pair. A pair this server does not stream comes back covered:false."
    • Changedsignal_outcomes2 fields changed
      • changedInput schema / properties / hours / description
        Previous value: -"How far back to look, in hours. Defaults to 48. Capped at 168 keyless and 720 on a paid plan; asking for more returns the cap, and the payload says so in `capped`. The all_time block is unaffected by this window."New value: +"How far back to look, in hours. Defaults to 48. Capped at 168 on the free plans and 720 on a paid plan; asking for more returns the cap, and the payload says so in `capped`. The all_time block is unaffected by this window."
      • changedInput schema / properties / limit / description
        Previous value: -"Max rows returned. Capped at 25 keyless and 500 on a paid plan; asking for more returns the cap, and the payload says so in `capped`."New value: +"Max rows returned. Capped at 25 on the free plans and 500 on a paid plan; asking for more returns the cap, and the payload says so in `capped`."
    • Changedtrade_context1 field changed
      • changedInput schema / properties / pair / description
        Previous value: -"Trading pair, for example ETH/USD. A bare symbol like ETH is read as ETH/USD. Defaults to BTC/USD when omitted. Any streamed pair answers keyless; off the free pairs a keyless reply is the lite shape and names what it withheld in locked_layers."New value: +"Trading pair, for example ETH/USD. A bare symbol like ETH is read as ETH/USD. Defaults to BTC/USD when omitted. On the free plans BTC answers in full and any other coin as a headline."
    • Changedwhale_flow1 field changed
      • changedInput schema / properties / hours / description
        Previous value: -"How many hours of hourly buckets to read back. Defaults to the whole window, which is also the ceiling: 168 keyless, 336 on Starter and 720 on Pro. Asking for more returns the cap, and the payload says so in `capped`."New value: +"How many hours of hourly buckets to read back. Defaults to the whole window, which is also the ceiling: 24 on the free plans, 336 on Starter and 720 on Pro. Asking for more returns the cap, and the payload says so in `capped`."
    • Changedwhale_tape2 fields changed
      • changedInput schema / properties / limit / description
        Previous value: -"Max rows returned. Capped at 25 keyless and 500 on a paid plan; asking for more returns the cap, and the payload says so in `capped`."New value: +"Max rows returned. Capped at 25 on the free plans and 500 on a paid plan; asking for more returns the cap, and the payload says so in `capped`."
      • changedInput schema / properties / min_usd / description
        Previous value: -"Smallest trade to return, in US dollars, for example 5000000 for $5M and up. Omit for everything already large enough to count as whale-sized. Keyless calls hold on-chain swaps to $250K and up regardless. A size filter runs after the fetch, so scan_capped in the payload states whether the search reached its own ceiling and older matches may exist."New value: +"Smallest trade to return, in US dollars, for example 5000000 for $5M and up. Omit for everything already large enough to count as whale-sized. The free plans hold on-chain swaps to $250K and up regardless. A size filter runs after the fetch, so scan_capped in the payload states whether the search reached its own ceiling and older matches may exist."
    • Changedwhale_trades2 fields changed
      • changedInput schema / properties / limit / description
        Previous value: -"Max rows returned. Capped at 25 keyless and 500 on a paid plan; asking for more returns the cap, and the payload says so in `capped`."New value: +"Max rows returned. Capped at 25 on the free plans and 500 on a paid plan; asking for more returns the cap, and the payload says so in `capped`."
      • changedInput schema / properties / min_usd / description
        Previous value: -"Smallest trade to return, in US dollars, for example 5000000 for $5M and up. Omit for everything already large enough to count as whale-sized. Keyless calls hold on-chain swaps to $250K and up regardless. A size filter runs after the fetch, so scan_capped in the payload states whether the search reached its own ceiling and older matches may exist."New value: +"Smallest trade to return, in US dollars, for example 5000000 for $5M and up. Omit for everything already large enough to count as whale-sized. The free plans hold on-chain swaps to $250K and up regardless. A size filter runs after the fetch, so scan_capped in the payload states whether the search reached its own ceiling and older matches may exist."
  5. 1 tool update
    • Changedliq_zones2 fields changed
      • addedOutput schema / properties / retry_after_seconds
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "number"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "How long to wait before asking again when warming is true."
        +}
      • addedOutput schema / properties / warming
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "boolean"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "True when the projection is not built yet for this pair. Asking started it. Not a wall, and not a claim that the pair has no liquidation levels."
        +}
  6. 25 tool updates
    • Addedbig_catch
    • Changedcoin_liquidations1 field changed
      • addedInput schema / properties / since_ms
        Added value: +{
        +  "description": "Polling cursor: only rows newer than this Unix-ms timestamp, applied before the row cap. Pass back the next_since_ms from the previous answer so a timer never re-reads the same rows.",
        +  "maximum": 9007199254740991,
        +  "minimum": -9007199254740991,
        +  "type": "integer"
        +}
    • Addedcoin_search
    • Addeddex_board
    • Addedhl_moves
    • Changedhl_traders1 field changed
      • changedOutput schema / properties / reconciliation / description
        Previous value: -"For wallets also on hl:proven, both numbers side by side with comparable:false. NOT like-for-like: a realized-closes figure over this window vs the venue leaderboard figure."New value: +"For wallets also on the proven-trader board, both numbers side by side with comparable:false. NOT like-for-like: a realized-closes figure over this window vs the venue leaderboard figure."
    • Changedhl_whales1 field changed
      • addedInput schema / properties / since_ms
        Added value: +{
        +  "description": "Polling cursor: only rows newer than this Unix-ms timestamp, applied before the row cap. Pass back the next_since_ms from the previous answer so a timer never re-reads the same rows.",
        +  "maximum": 9007199254740991,
        +  "minimum": -9007199254740991,
        +  "type": "integer"
        +}
    • Addedliq_heat
    • Changedliquidations1 field changed
      • addedInput schema / properties / since_ms
        Added value: +{
        +  "description": "Polling cursor: only rows newer than this Unix-ms timestamp, applied before the row cap. Pass back the next_since_ms from the previous answer so a timer never re-reads the same rows.",
        +  "maximum": 9007199254740991,
        +  "minimum": -9007199254740991,
        +  "type": "integer"
        +}
    • Changedmy_access1 field changed
      • changedOutput schema / properties / tier / description
        Previous value: -"Which of four states this connection is in: keyless, signed_in_free, coinlobster_pro or developer_plan."New value: +"Which state this connection is in: keyless, signed_in_free, or the plan key (starter, pro, alpha, scale)."
    • Addedmy_alerts
    • Addedoi_funding_history
    • Changedonchain_whales1 field changed
      • addedInput schema / properties / since_ms
        Added value: +{
        +  "description": "Polling cursor: only rows newer than this Unix-ms timestamp, applied before the row cap. Pass back the next_since_ms from the previous answer so a timer never re-reads the same rows.",
        +  "maximum": 9007199254740991,
        +  "minimum": -9007199254740991,
        +  "type": "integer"
        +}
    • Addedorderbook
    • Addedproven_traders
    • Addedsignal_record
    • Addedsituations
    • Addedwatch_create
    • Addedwatch_delete
    • Addedwatch_list
    • Addedwatchlist_brief
    • Changedwhale_activity1 field changed
      • addedInput schema / properties / coins
        Added value: +{
        +  "anyOf": [
        +    {
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    {
        +      "type": "string"
        +    }
        +  ],
        +  "description": "Portfolio read: a list of coin symbols (or a comma-separated string) answered side by side in one call, up to 10. Omit for one coin."
        +}
    • Changedwhale_flow3 fields changed
      • addedInput schema / properties / coins
        Added value: +{
        +  "anyOf": [
        +    {
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    {
        +      "type": "string"
        +    }
        +  ],
        +  "description": "Portfolio read: a list of coin symbols (or a comma-separated string) answered side by side in one call, up to 10. Omit for one coin."
        +}
      • addedInput schema / properties / detail
        Added value: +{
        +  "description": "Extra per-hour detail: venues adds the per-venue dollar split, wallets adds the wallets behind each hour, all adds both. Off by default (a week of wallet lists is large). Pro and up; below that the payload names the plan.",
        +  "enum": [
        +    "none",
        +    "venues",
        +    "wallets",
        +    "all"
        +  ],
        +  "type": "string"
        +}
      • changedInput schema / properties / hours / description
        Previous value: -"How many hours of hourly buckets to read back. Defaults to the whole window, which is also the ceiling: 168 keyless and 720 on a paid plan. Asking for more returns the cap, and the payload says so in `capped`."New value: +"How many hours of hourly buckets to read back. Defaults to the whole window, which is also the ceiling: 168 keyless, 336 on Starter and 720 on Pro. Asking for more returns the cap, and the payload says so in `capped`."
    • Changedwhale_profile1 field changed
      • addedInput schema / properties / coins
        Added value: +{
        +  "anyOf": [
        +    {
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    {
        +      "type": "string"
        +    }
        +  ],
        +  "description": "Portfolio read: a list of coin symbols (or a comma-separated string) answered side by side in one call, up to 10. Omit for one coin."
        +}
    • Addedwhale_sectors
  7. 22 tool updates
    • Addedcoin_liquidations
    • Changedflag_outcomes2 fields changed
      • changedInput schema / properties / hours / description
        Previous value: -"How far back to look, in hours. Defaults to 48. Capped at 168 keyless and 720 on a developer plan; asking for more returns the cap, and the payload says so in `capped`. The all_time block is unaffected by this window."New value: +"How far back to look, in hours. Defaults to 48. Capped at 168 keyless and 720 on a paid plan; asking for more returns the cap, and the payload says so in `capped`. The all_time block is unaffected by this window."
      • changedInput schema / properties / limit / description
        Previous value: -"Max rows returned. Capped at 25 keyless and 500 on a developer plan; asking for more returns the cap, and the payload says so in `capped`."New value: +"Max rows returned. Capped at 25 keyless and 500 on a paid plan; asking for more returns the cap, and the payload says so in `capped`."
    • Changedhl_board1 field changed
      • changedOutput schema / properties / withheld / description
        Previous value: -"How many rows a keyless connection did not receive. Zero on a developer plan."New value: +"How many rows a keyless connection did not receive. Zero on a paid plan."
    • Changedhl_traders1 field changed
      • changedOutput schema / properties / withheld / description
        Previous value: -"How many rows a keyless connection did not receive. Zero on a developer plan."New value: +"How many rows a keyless connection did not receive. Zero on a paid plan."
    • Changedhl_wallet1 field changed
      • changedOutput schema / properties / locked_layers / description
        Previous value: -"Keyless only: which computed blocks a developer plan adds."New value: +"Keyless only: which computed blocks a paid plan adds."
    • Changedliq_zones2 fields changed
      • changedInput schema / properties / pair / description
        Previous value: -"Trading pair, for example ETH/USD. A bare symbol like ETH is read as ETH/USD. Defaults to BTC/USD when omitted. Keyless calls reach the free pairs and get the projected levels without the cascade chains; a developer plan reaches any streamed pair with the full snapshot."New value: +"Trading pair, for example ETH/USD. A bare symbol like ETH is read as ETH/USD. Defaults to BTC/USD when omitted. Keyless calls reach the free pairs and get the projected levels without the cascade chains; a paid plan reaches any streamed pair with the full snapshot."
      • changedOutput schema / properties / projection / description
        Previous value: -"The projected levels: where forced closes would sit under the modeled leverage assumptions, plus the cascade chains on a developer plan. Modeled levels, NOT trades that happened."New value: +"The projected levels: where forced closes would sit under the modeled leverage assumptions, plus the cascade chains on a paid plan. Modeled levels, NOT trades that happened."
    • Changedliquidations1 field changed
      • changedInput schema / properties / limit / description
        Previous value: -"Max rows returned. Capped at 25 keyless and 1000 on a developer plan; asking for more returns the cap, and the payload says so in `capped`. count and the *_usd totals always cover the whole window regardless."New value: +"Max rows returned. Capped at 25 keyless and 1000 on a paid plan; asking for more returns the cap, and the payload says so in `capped`. count and the *_usd totals always cover the whole window regardless."
    • Addedmarket_brief
    • Addedmarket_changes
    • Changedmarket_history1 field changed
      • changedInput schema / properties / days / description
        Previous value: -"How many recorded days to return. Defaults to the whole window, which is also the ceiling: 30 keyless and 400 on a developer plan. Asking for more returns the cap, and the payload says so in `capped`. Both lanes settle several days behind live by design, so read as_of and data_age_days before calling any of it current."New value: +"How many recorded days to return. Defaults to the whole window, which is also the ceiling: 30 keyless and 400 on a paid plan. Asking for more returns the cap, and the payload says so in `capped`. Both lanes settle several days behind live by design, so read as_of and data_age_days before calling any of it current."
    • Addedmarket_movers
    • Changedmarket_snapshot1 field changed
      • changedInput schema / properties / pair / description
        Previous value: -"Trading pair, for example ETH/USD. A bare symbol like ETH is read as ETH/USD. Defaults to BTC/USD when omitted. Keyless calls reach the free pairs only; a developer plan reaches every streamed pair. A pair this server does not stream comes back covered:false, and no plan adds it."New value: +"Trading pair, for example ETH/USD. A bare symbol like ETH is read as ETH/USD. Defaults to BTC/USD when omitted. Keyless calls reach the free pairs only; a paid plan reaches every streamed pair. A pair this server does not stream comes back covered:false, and no plan adds it."
    • Changedmy_access3 fields changed
      • changedOutput schema / properties / caps / description
        Previous value: -"The row cap and time window every capped tool applies right now, each with the free value and the developer-plan value beside it."New value: +"The row cap and time window every capped tool applies right now, each with the free value and the paid-plan value beside it."
      • changedOutput schema / properties / free_pairs / description
        Previous value: -"The pairs this connection can read. A list when keyless, the words every streamed pair on a developer plan, or a short sentence when the market lane could not be read."New value: +"The pairs this connection can read. A list when keyless, the words every streamed pair on a paid plan, or a short sentence when the market lane could not be read."
      • changedOutput schema / properties / locked_here / description
        Previous value: -"What this connection cannot reach right now. Empty on a developer plan."New value: +"What this connection cannot reach right now. Empty on a paid plan."
    • Changedoptions2 fields changed
      • addedInput schema / properties / pair
        Added value: +{
        +  "description": "Alias for coin.",
        +  "type": "string"
        +}
      • changedOutput schema / properties / recentLargeTrades / description
        Previous value: -"Large option buys and sells above a size floor, newest first. Deeper on a developer plan."New value: +"Large option buys and sells above a size floor, newest first. Deeper on a paid plan."
    • Addedprice_candles
    • Addedsignal_outcomes
    • Changedsqueeze_score1 field changed
      • changedInput schema / properties / pair / description
        Previous value: -"Trading pair, for example ETH/USD. A bare symbol like ETH is read as ETH/USD. Defaults to BTC/USD when omitted. A developer plan is needed for any pair here: without one the call is refused before the pair is even read."New value: +"Trading pair, for example ETH/USD. A bare symbol like ETH is read as ETH/USD. Defaults to BTC/USD when omitted. A paid plan is needed for any pair here: without one the call is refused before the pair is even read."
    • Changedtrade_context3 fields changed
      • changedOutput schema / properties / crowding / description
        Previous value: -"The crowding read and the overexposed side. Null without a developer plan."New value: +"The crowding read and the overexposed side. Null without a paid plan."
      • addedOutput schema / properties / price_reads
        Added value: +{
        +  "anyOf": [
        +    {
        +      "additionalProperties": {},
        +      "propertyNames": {
        +        "type": "string"
        +      },
        +      "type": "object"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "Plain descriptions of price against its own recent hours, computed from hourly candles: vs_recent_average (above or below its 50-hour and 200-hour average, and which way it is drifting), recent_move (how stretched the latest move is, plus the change against 7 days ago) and choppiness (calm, normal or choppy). Each block is available:true with values or available:false with a plain reason; a leg with too few recorded hours is null with a note, never a made-up neutral. Descriptive, not a trade signal."
        +}
      • changedOutput schema / properties / whale_flow / description
        Previous value: -"Whale direction against the same coin logged baseline: the multiple, days logged, record and N-day-high flags, and buy share now versus 7 days. Dollar sizes are added on a developer plan."New value: +"Whale direction against the same coin logged baseline: the multiple, days logged, record and N-day-high flags, and buy share now versus 7 days. Dollar sizes are added on a paid plan."
    • Addedwhale_activity
    • Changedwhale_flow1 field changed
      • changedInput schema / properties / hours / description
        Previous value: -"How many hours of hourly buckets to read back. Defaults to the whole window, which is also the ceiling: 168 keyless and 720 on a developer plan. Asking for more returns the cap, and the payload says so in `capped`."New value: +"How many hours of hourly buckets to read back. Defaults to the whole window, which is also the ceiling: 168 keyless and 720 on a paid plan. Asking for more returns the cap, and the payload says so in `capped`."
    • Changedwhale_tape1 field changed
      • changedInput schema / properties / limit / description
        Previous value: -"Max rows returned. Capped at 25 keyless and 500 on a developer plan; asking for more returns the cap, and the payload says so in `capped`."New value: +"Max rows returned. Capped at 25 keyless and 500 on a paid plan; asking for more returns the cap, and the payload says so in `capped`."
    • Changedwhale_trades1 field changed
      • changedInput schema / properties / limit / description
        Previous value: -"Max rows returned. Capped at 25 keyless and 500 on a developer plan; asking for more returns the cap, and the payload says so in `capped`."New value: +"Max rows returned. Capped at 25 keyless and 500 on a paid plan; asking for more returns the cap, and the payload says so in `capped`."
  8. 1 tool update
    • Addedoptions
  9. 6 tool updates
    • Changedmarket_overview1 field changed
      • addedOutput schema / properties / summary
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "The answer in one plain sentence, computed from the fields below. Open the reply with this, then let the numbers back it up. Null only when there was nothing to summarise."
        +}
    • Changedsmart_money1 field changed
      • addedOutput schema / properties / summary
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "The answer in one plain sentence, computed from the fields below. Open the reply with this, then let the numbers back it up. Null only when there was nothing to summarise."
        +}
    • Changedwhale_context1 field changed
      • addedOutput schema / properties / summary
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "The answer in one plain sentence, computed from the fields below. Open the reply with this, then let the numbers back it up. Null only when there was nothing to summarise."
        +}
    • Changedwhale_flow2 fields changed
      • changedOutput schema / properties / rows / description
        Previous value: -"One row per recorded hour: the hour stamp plus buy and sell dollars, split CEX and on-chain."New value: +"One row per recorded hour: the hour stamp, buy and sell dollars, and the CEX / on-chain / Hyperliquid split. The per-hour wallet list and per-exchange table are not carried here (see whale_profile and hl_whales for those); this tool is the hourly timeline."
      • addedOutput schema / properties / summary
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "The answer in one plain sentence, computed from the fields below. Open the reply with this, then let the numbers back it up. Null only when there was nothing to summarise."
        +}
    • Changedwhale_profile1 field changed
      • addedOutput schema / properties / summary
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "The answer in one plain sentence, computed from the fields below. Open the reply with this, then let the numbers back it up. Null only when there was nothing to summarise."
        +}
    • Changedwhale_radar1 field changed
      • addedOutput schema / properties / summary
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "The answer in one plain sentence, computed from the fields below. Open the reply with this, then let the numbers back it up. Null only when there was nothing to summarise."
        +}
  10. 5 tool updates
    • Changedflag_outcomes1 field changed
      • changedInput schema / properties / limit / description
        Previous value: -"Max rows returned. Capped at 50 keyless and 500 on a developer plan; asking for more returns the cap, and the payload says so in `capped`."New value: +"Max rows returned. Capped at 25 keyless and 500 on a developer plan; asking for more returns the cap, and the payload says so in `capped`."
    • Changedliquidations1 field changed
      • changedInput schema / properties / limit / description
        Previous value: -"Max rows returned. Capped at 50 keyless and 1000 on a developer plan; asking for more returns the cap, and the payload says so in `capped`. count and the *_usd totals always cover the whole window regardless."New value: +"Max rows returned. Capped at 25 keyless and 1000 on a developer plan; asking for more returns the cap, and the payload says so in `capped`. count and the *_usd totals always cover the whole window regardless."
    • Addedmarket_digest
    • Changedwhale_tape1 field changed
      • changedInput schema / properties / limit / description
        Previous value: -"Max rows returned. Capped at 50 keyless and 500 on a developer plan; asking for more returns the cap, and the payload says so in `capped`."New value: +"Max rows returned. Capped at 25 keyless and 500 on a developer plan; asking for more returns the cap, and the payload says so in `capped`."
    • Changedwhale_trades1 field changed
      • changedInput schema / properties / limit / description
        Previous value: -"Max rows returned. Capped at 50 keyless and 500 on a developer plan; asking for more returns the cap, and the payload says so in `capped`."New value: +"Max rows returned. Capped at 25 keyless and 500 on a developer plan; asking for more returns the cap, and the payload says so in `capped`."
  11. 1 tool update
    • Addedhl_traders
  12. 28 tool updates
    • Changedcrypto_news2 fields changed
      • addedInput schema / properties / coin / description
        Added value: +"Coin symbol, for example BTC. A pair like ETH/USD works too, the quote leg is dropped. Defaults to BTC. News coverage is not every coin: where nothing was recorded the reply carries covered:false and a null sentiment_score, which is absence and not a neutral reading."
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": {},
        +  "properties": {
        +    "coin": {
        +      "anyOf": [
        +        {
        +          "type": "string"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "The coin the headlines and score are about."
        +    },
        +    "covered": {
        +      "anyOf": [
        +        {
        +          "type": "boolean"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "False when nothing was recorded for this coin, which is why sentiment_score is null. Not a neutral reading."
        +    },
        +    "headlines": {
        +      "anyOf": [
        +        {
        +          "items": {},
        +          "type": "array"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "Up to 20 recent headlines, each with title, source, published time and link."
        +    },
        +    "macro": {
        +      "anyOf": [
        +        {
        +          "additionalProperties": {},
        +          "propertyNames": {
        +            "type": "string"
        +          },
        +          "type": "object"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "The same three fields for the market as a whole: sentiment, sentiment_score and summary."
        +    },
        +    "note": {
        +      "anyOf": [
        +        {
        +          "type": "string"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "One line saying what the numbers cover, or why there are none. Read it before reporting any zero as a market reading."
        +    },
        +    "realtime": {
        +      "anyOf": [
        +        {
        +          "type": "boolean"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "True when the headlines are live. Keyless connections get the delayed set."
        +    },
        +    "sentiment": {
        +      "anyOf": [
        +        {
        +          "type": "string"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "The wording that goes with the score, or unknown."
        +    },
        +    "sentiment_score": {
        +      "anyOf": [
        +        {
        +          "type": "number"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "Minus 100 to plus 100. Null means nothing was measured, which is not the same as zero."
        +    },
        +    "summary": {
        +      "anyOf": [
        +        {
        +          "type": "string"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "The pre-written summary for this coin, or null."
        +    }
        +  },
        +  "type": "object"
        +}
    • Changeddefi_liquidations3 fields changed
      • addedInput schema / properties / chain / description
        Added value: +"Restrict to one chain: ethereum, base, arbitrum. Anything else is refused by name rather than answered as nothing happening there. Omit for all of them."
      • addedInput schema / properties / limit / description
        Added value: +"Max rows returned. Defaults to 50, hard ceiling 200 for everyone and no plan raises it. count and total_usd cover exactly the rows returned, and window states the period those rows span, so neither is a fixed 24h figure."
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": {},
        +  "properties": {
        +    "access_note": {
        +      "anyOf": [
        +        {
        +          "type": "string"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "What this connection could not return and what lifts it. Always pass this on to the user: it is the only place that information appears."
        +    },
        +    "available": {
        +      "anyOf": [
        +        {
        +          "type": "boolean"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "False when this lane could not answer: a producer is dark, the pair sits outside this plan, or the argument named something we do not carry. Absent or true means the numbers are a real reading, not a guess."
        +    },
        +    "capped": {
        +      "anyOf": [
        +        {
        +          "additionalProperties": false,
        +          "properties": {
        +            "applied": {
        +              "description": "The value actually used.",
        +              "type": "number"
        +            },
        +            "argument": {
        +              "description": "Which argument was cut down, for example limit or hours.",
        +              "type": "string"
        +            },
        +            "by": {
        +              "description": "Why it was cut: keyless for the free ceiling, plan_max for a paid ceiling, tool_max for a ceiling no plan raises.",
        +              "type": "string"
        +            },
        +            "max": {
        +              "description": "The ceiling that applied.",
        +              "type": "number"
        +            },
        +            "requested": {
        +              "description": "The value the caller asked for.",
        +              "type": "number"
        +            }
        +          },
        +          "required": [
        +            "argument",
        +            "requested",
        +            "applied",
        +            "max",
        +            "by"
        +          ],
        +          "type": "object"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "Present only when an argument was cut down to a ceiling. Absent means nothing was clamped, so a smaller number than you asked for is the data and not a limit."
        +    },
        +    "chains_covered": {
        +      "anyOf": [
        +        {
        +          "items": {
        +            "type": "string"
        +          },
        +          "type": "array"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "The chains this lane indexes."
        +    },
        +    "count": {
        +      "anyOf": [
        +        {
        +          "type": "number"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "How many rows this reply carries."
        +    },
        +    "duplicates_dropped": {
        +      "anyOf": [
        +        {
        +          "type": "number"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "How many repeat rows for the same event were removed before counting, so the dollars are not doubled."
        +    },
        +    "liquidations": {
        +      "anyOf": [
        +        {
        +          "items": {},
        +          "type": "array"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "The events, each naming BOTH wallets: the one liquidated and the one that repaid the debt and took the collateral."
        +    },
        +    "matched": {
        +      "anyOf": [
        +        {
        +          "type": "number"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "How many rows matched the chain filter before the row cap."
        +    },
        +    "note": {
        +      "anyOf": [
        +        {
        +          "type": "string"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "One line saying what the numbers cover, or why there are none. Read it before reporting any zero as a market reading."
        +    },
        +    "protocols_covered": {
        +      "anyOf": [
        +        {
        +          "items": {
        +            "type": "string"
        +          },
        +          "type": "array"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "The lending protocols behind these rows."
        +    },
        +    "total_usd": {
        +      "anyOf": [
        +        {
        +          "type": "number"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "Dollars across exactly the rows returned. A page sum, not a fixed 24h total: the window field says what period those rows span."
        +    },
        +    "truncated": {
        +      "anyOf": [
        +        {
        +          "type": "boolean"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "True when more rows matched than were returned, so what you have is a page and not the whole set."
        +    },
        +    "unknown_chain": {
        +      "anyOf": [
        +        {
        +          "type": "string"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "Set when a chain was named that this lane does not index. Nothing was searched, so this is not no liquidations there."
        +    },
        +    "window": {
        +      "anyOf": [
        +        {
        +          "additionalProperties": {},
        +          "propertyNames": {
        +            "type": "string"
        +          },
        +          "type": "object"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "The period the returned rows actually span: from, to and hours."
        +    }
        +  },
        +  "type": "object"
        +}
    • Changeddefi_summary1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": {},
        +  "properties": {
        +    "available": {
        +      "anyOf": [
        +        {
        +          "type": "boolean"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "False when this lane could not answer: a producer is dark, the pair sits outside this plan, or the argument named something we do not carry. Absent or true means the numbers are a real reading, not a guess."
        +    },
        +    "chains": {
        +      "anyOf": [
        +        {
        +          "items": {},
        +          "type": "array"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "One row per chain: the chain, tokens tracked, 24h volume and total value locked."
        +    },
        +    "coverage_note": {
        +      "anyOf": [
        +        {
        +          "type": "string"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "What the numbers do and do not cover."
        +    },
        +    "note": {
        +      "anyOf": [
        +        {
        +          "type": "string"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "One line saying what the numbers cover, or why there are none. Read it before reporting any zero as a market reading."
        +    },
        +    "tokens_withheld": {
        +      "anyOf": [
        +        {
        +          "type": "number"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "Keyless only: how many tokens were cut from top_tokens."
        +    },
        +    "top_tokens": {
        +      "anyOf": [
        +        {
        +          "items": {},
        +          "type": "array"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "The highest-volume tokens: chain, symbol, name, address, price, 24h change, volume and value locked. Shortened on a keyless connection."
        +    },
        +    "totals": {
        +      "anyOf": [
        +        {
        +          "additionalProperties": {},
        +          "propertyNames": {
        +            "type": "string"
        +          },
        +          "type": "object"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "Across all chains: 24h volume, total value locked, how many chains and how many tokens are tracked."
        +    },
        +    "updated_at": {
        +      "anyOf": [
        +        {
        +          "anyOf": [
        +            {
        +              "type": "string"
        +            },
        +            {
        +              "type": "number"
        +            }
        +          ]
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "When the on-chain token snapshot was published."
        +    },
        +    "whale_activity": {
        +      "anyOf": [
        +        {
        +          "additionalProperties": {},
        +          "propertyNames": {
        +            "type": "string"
        +          },
        +          "type": "object"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "Large swaps in the window: how many, buy and sell dollars, net, the largest, unique and repeat wallets, and the split per exchange and per chain. A keyless connection gets the counts with magnitudes_withheld set instead of the dollars."
        +    }
        +  },
        +  "type": "object"
        +}
    • Changeddex_wallet3 fields changed
      • addedInput schema / properties / address / description
        Added value: +"Ethereum, Base or Arbitrum address, 0x followed by 40 hex characters. Required. This is the on-chain wallet, not the Hyperliquid account that can sit at the same 0x string: use hl_wallet for that one. An address outside the followed set answers tracked:false, which is a coverage fact and not a wallet doing nothing."
      • addedInput schema / properties / limit / description
        Added value: +"Max recorded swaps returned for this address. Defaults to 25, hard ceiling 100 for everyone and no plan raises it."
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": {},
        +  "properties": {
        +    "access_note": {
        +      "anyOf": [
        +        {
        +          "type": "string"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "What this connection could not return and what lifts it. Always pass this on to the user: it is the only place that information appears."
        +    },
        +    "address": {
        +      "anyOf": [
        +        {
        +          "type": "string"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "The address, normalised."
        +    },
        +    "available": {
        +      "anyOf": [
        +        {
        +          "type": "boolean"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "False when this lane could not answer: a producer is dark, the pair sits outside this plan, or the argument named something we do not carry. Absent or true means the numbers are a real reading, not a guess."
        +    },
        +    "capped": {
        +      "anyOf": [
        +        {
        +          "additionalProperties": false,
        +          "properties": {
        +            "applied": {
        +              "description": "The value actually used.",
        +              "type": "number"
        +            },
        +            "argument": {
        +              "description": "Which argument was cut down, for example limit or hours.",
        +              "type": "string"
        +            },
        +            "by": {
        +              "description": "Why it was cut: keyless for the free ceiling, plan_max for a paid ceiling, tool_max for a ceiling no plan raises.",
        +              "type": "string"
        +            },
        +            "max": {
        +              "description": "The ceiling that applied.",
        +              "type": "number"
        +            },
        +            "requested": {
        +              "description": "The value the caller asked for.",
        +              "type": "number"
        +            }
        +          },
        +          "required": [
        +            "argument",
        +            "requested",
        +            "applied",
        +            "max",
        +            "by"
        +          ],
        +          "type": "object"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "Present only when an argument was cut down to a ceiling. Absent means nothing was clamped, so a smaller number than you asked for is the data and not a limit."
        +    },
        +    "error": {
        +      "anyOf": [
        +        {
        +          "type": "string"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "invalid_address when the address is not 0x plus 40 hex characters. Nothing was looked up."
        +    },
        +    "events": {
        +      "anyOf": [
        +        {
        +          "items": {},
        +          "type": "array"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "Its recorded swaps, newest first."
        +    },
        +    "note": {
        +      "anyOf": [
        +        {
        +          "type": "string"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "One line saying what the numbers cover, or why there are none. Read it before reporting any zero as a market reading."
        +    },
        +    "profile": {
        +      "description": "What this address has been doing: net flow per token and its activity pattern."
        +    },
        +    "tracked": {
        +      "anyOf": [
        +        {
        +          "type": "boolean"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "False when this address is outside the followed set. A coverage fact, not a wallet doing nothing."
        +    },
        +    "venue": {
        +      "anyOf": [
        +        {
        +          "type": "string"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "Always on-chain. This is NOT the Hyperliquid account that can sit at the same 0x string."
        +    }
        +  },
        +  "type": "object"
        +}
    • Changedflag_outcomes4 fields changed
      • addedInput schema / properties / coin / description
        Added value: +"Filter to one coin, for example BTC. A pair like ETH/USD works too, the quote leg is dropped. One symbol, not a list. Omit for every coin."
      • addedInput schema / properties / hours / description
        Added value: +"How far back to look, in hours. Defaults to 48. Capped at 168 keyless and 720 on a developer plan; asking for more returns the cap, and the payload says so in `capped`. The all_time block is unaffected by this window."
      • addedInput schema / properties / type / description
        Added value: +"Filter to one signal type. One of: whale-spike, funding-extreme, squeeze-flip, liq-cascade, flow-divergence, major-pctile, major-block, deriv-record. The underscore spellings used by alert rules (for example funding_extreme, or spike for whale-spike) are accepted too. Anything else is refused by name rather than answered as every signal. Omit for all types."
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": {},
        +  "properties": {
        +    "access_note": {
        +      "anyOf": [
        +        {
        +          "type": "string"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "What this connection could not return and what lifts it. Always pass this on to the user: it is the only place that information appears."
        +    },
        +    "aggregates": {
        +      "anyOf": [
        +        {
        +          "additionalProperties": {},
        +          "propertyNames": {
        +            "type": "string"
        +          },
        +          "type": "object"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "byType: how many fired per signal type inside the window."
        +    },
        +    "all_time": {
        +      "anyOf": [
        +        {
        +          "additionalProperties": {},
        +          "propertyNames": {
        +            "type": "string"
        +          },
        +          "type": "object"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "Permanent counters from the archive, independent of the window asked for: fired, scored_h24, since, through and by_type."
        +    },
        +    "available": {
        +      "anyOf": [
        +        {
        +          "type": "boolean"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "False when this lane could not answer: a producer is dark, the pair sits outside this plan, or the argument named something we do not carry. Absent or true means the numbers are a real reading, not a guess."
        +    },
        +    "capped": {
        +      "anyOf": [
        +        {
        +          "additionalProperties": false,
        +          "properties": {
        +            "applied": {
        +              "description": "The value actually used.",
        +              "type": "number"
        +            },
        +            "argument": {
        +              "description": "Which argument was cut down, for example limit or hours.",
        +              "type": "string"
        +            },
        +            "by": {
        +              "description": "Why it was cut: keyless for the free ceiling, plan_max for a paid ceiling, tool_max for a ceiling no plan raises.",
        +              "type": "string"
        +            },
        +            "max": {
        +              "description": "The ceiling that applied.",
        +              "type": "number"
        +            },
        +            "requested": {
        +              "description": "The value the caller asked for.",
        +              "type": "number"
        +            }
        +          },
        +          "required": [
        +            "argument",
        +            "requested",
        +            "applied",
        +            "max",
        +            "by"
        +          ],
        +          "type": "object"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "Present only when an argument was cut down to a ceiling. Absent means nothing was clamped, so a smaller number than you asked for is the data and not a limit."
        +    },
        +    "coin": {
        +      "anyOf": [
        +        {
        +          "type": "string"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "The coin filter applied, or null for all coins."
        +    },
        +    "count": {
        +      "anyOf": [
        +        {
        +          "type": "number"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "How many rows this reply carries."
        +    },
        +    "depth_note": {
        +      "anyOf": [
        +        {
        +          "type": "string"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "How far back the data behind this answer reaches."
        +    },
        +    "hours": {
        +      "anyOf": [
        +        {
        +          "type": "number"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "The window actually read, in hours."
        +    },
        +    "note": {
        +      "anyOf": [
        +        {
        +          "type": "string"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "One line saying what the numbers cover, or why there are none. Read it before reporting any zero as a market reading."
        +    },
        +    "signals": {
        +      "anyOf": [
        +        {
        +          "items": {},
        +          "type": "array"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "The signals that fired in the window, each with its type, coin, fire time, price at fire time and later price outcomes where they have been scored."
        +    },
        +    "total_in_window": {
        +      "anyOf": [
        +        {
        +          "type": "number"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "How many signals fired in the whole window, before the row cap."
        +    },
        +    "type": {
        +      "anyOf": [
        +        {
        +          "type": "string"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "The signal type filter applied, or null for all types."
        +    },
        +    "unknown_type": {
        +      "anyOf": [
        +        {
        +          "type": "string"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "Set when the type asked for is not one this record keeps. Nothing was filtered and nothing was searched."
        +    },
        +    "valid_types": {
        +      "anyOf": [
        +        {
        +          "items": {
        +            "type": "string"
        +          },
        +          "type": "array"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "The signal types that do exist, returned alongside unknown_type."
        +    }
        +  },
        +  "type": "object"
        +}
    • Changedfunding_matrix2 fields changed
      • addedInput schema / properties / pair / description
        Added value: +"Trading pair, for example ETH/USD. A bare symbol like ETH is read as ETH/USD. Defaults to BTC/USD when omitted. Every streamed pair answers keyless. Rates come back per exchange at that exchange's own interval_h, so magnitudes are not comparable across rows without normalising first."
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": {},
        +  "properties": {
        +    "available": {
        +      "anyOf": [
        +        {
        +          "type": "boolean"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "False when this lane could not answer: a producer is dark, the pair sits outside this plan, or the argument named something we do not carry. Absent or true means the numbers are a real reading, not a guess."
        +    },
        +    "note": {
        +      "anyOf": [
        +        {
        +          "type": "string"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "One line saying what the numbers cover, or why there are none. Read it before reporting any zero as a market reading."
        +    },
        +    "pair": {
        +      "anyOf": [
        +        {
        +          "type": "string"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "The pair these rates belong to."
        +    },
        +    "per_venue": {
        +      "anyOf": [
        +        {
        +          "items": {},
        +          "type": "array"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "One row per exchange: the exchange name, its current funding rate, its predicted next rate where it publishes one, the next payout time, and interval_h. Rates are per that exchange own interval, so magnitudes are not comparable across rows until they are normalised."
        +    },
        +    "updated_at": {
        +      "anyOf": [
        +        {
        +          "anyOf": [
        +            {
        +              "type": "string"
        +            },
        +            {
        +              "type": "number"
        +            }
        +          ]
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "When these rates were read."
        +    }
        +  },
        +  "type": "object"
        +}
    • Changedhl_board1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": {},
        +  "properties": {
        +    "access_note": {
        +      "anyOf": [
        +        {
        +          "type": "string"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "What this connection could not return and what lifts it. Always pass this on to the user: it is the only place that information appears."
        +    },
        +    "available": {
        +      "anyOf": [
        +        {
        +          "type": "boolean"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "False when this lane could not answer: a producer is dark, the pair sits outside this plan, or the argument named something we do not carry. Absent or true means the numbers are a real reading, not a guess."
        +    },
        +    "crowding": {
        +      "description": "Per-coin crowding across the tracked accounts."
        +    },
        +    "note": {
        +      "anyOf": [
        +        {
        +          "type": "string"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "One line saying what the numbers cover, or why there are none. Read it before reporting any zero as a market reading."
        +    },
        +    "rows": {
        +      "anyOf": [
        +        {
        +          "items": {},
        +          "type": "array"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "The accounts: wallet, equity, dollars open, leverage and which way they lean. Shortened on a keyless connection."
        +    },
        +    "tracked": {
        +      "anyOf": [
        +        {
        +          "type": "number"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "How many accounts are tracked."
        +    },
        +    "tracked_notional_usd": {
        +      "anyOf": [
        +        {
        +          "type": "number"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "Total dollar value of everything those accounts hold open."
        +    },
        +    "updated_at": {
        +      "anyOf": [
        +        {
        +          "anyOf": [
        +            {
        +              "type": "string"
        +            },
        +            {
        +              "type": "number"
        +            }
        +          ]
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "When the board was published."
        +    },
        +    "venue": {
        +      "anyOf": [
        +        {
        +          "type": "string"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "Always Hyperliquid."
        +    },
        +    "with_open_positions": {
        +      "anyOf": [
        +        {
        +          "type": "number"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "How many of them currently hold something."
        +    },
        +    "withheld": {
        +      "anyOf": [
        +        {
        +          "type": "number"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "How many rows a keyless connection did not receive. Zero on a developer plan."
        +    }
        +  },
        +  "type": "object"
        +}
    • Changedhl_wallet3 fields changed
      • addedInput schema / properties / address / description
        Added value: +"Hyperliquid account address, 0x followed by 40 hex characters. Required. Every hl_whales row carries the wallet that filled it, so it can be passed straight in. An address outside the tracked set answers tracked:false, which is a coverage fact and not an account holding nothing."
      • addedInput schema / properties / limit / description
        Added value: +"Max recent fills returned for this account. Defaults to 50, hard ceiling 200 for everyone and no plan raises it. Keyless calls receive 3 of them whatever is asked for, and the live positions come back either way."
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": {},
        +  "properties": {
        +    "access_note": {
        +      "anyOf": [
        +        {
        +          "type": "string"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "What this connection could not return and what lifts it. Always pass this on to the user: it is the only place that information appears."
        +    },
        +    "address": {
        +      "anyOf": [
        +        {
        +          "type": "string"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "The account address, normalised."
        +    },
        +    "capped": {
        +      "anyOf": [
        +        {
        +          "additionalProperties": false,
        +          "properties": {
        +            "applied": {
        +              "description": "The value actually used.",
        +              "type": "number"
        +            },
        +            "argument": {
        +              "description": "Which argument was cut down, for example limit or hours.",
        +              "type": "string"
        +            },
        +            "by": {
        +              "description": "Why it was cut: keyless for the free ceiling, plan_max for a paid ceiling, tool_max for a ceiling no plan raises.",
        +              "type": "string"
        +            },
        +            "max": {
        +              "description": "The ceiling that applied.",
        +              "type": "number"
        +            },
        +            "requested": {
        +              "description": "The value the caller asked for.",
        +              "type": "number"
        +            }
        +          },
        +          "required": [
        +            "argument",
        +            "requested",
        +            "applied",
        +            "max",
        +            "by"
        +          ],
        +          "type": "object"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "Present only when an argument was cut down to a ceiling. Absent means nothing was clamped, so a smaller number than you asked for is the data and not a limit."
        +    },
        +    "error": {
        +      "anyOf": [
        +        {
        +          "type": "string"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "invalid_address when the address is not 0x plus 40 hex characters. Nothing was looked up."
        +    },
        +    "locked_layers": {
        +      "anyOf": [
        +        {
        +          "items": {
        +            "type": "string"
        +          },
        +          "type": "array"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "Keyless only: which computed blocks a developer plan adds."
        +    },
        +    "note": {
        +      "anyOf": [
        +        {
        +          "type": "string"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "One line saying what the numbers cover, or why there are none. Read it before reporting any zero as a market reading."
        +    },
        +    "prints": {
        +      "anyOf": [
        +        {
        +          "items": {},
        +          "type": "array"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "Recent whale-sized fills for this account. Keyless connections receive 3 of them whatever was asked for."
        +    },
        +    "profile": {
        +      "description": "The live account: what it holds, equity, dollars open, leverage, which way it leans and unrealized profit. Public on Hyperliquid, so it stays keyless."
        +    },
        +    "tracked": {
        +      "anyOf": [
        +        {
        +          "type": "boolean"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "False when this account is outside the tracked set. A coverage fact, not an account holding nothing."
        +    }
        +  },
        +  "type": "object"
        +}
    • Changedhl_whales3 fields changed
      • addedInput schema / properties / coin / description
        Added value: +"Filter to one coin, for example PEPE. Matched against the parsed symbol as well as the raw market name, so the 1000-unit markets (kPEPE, kSHIB, kBONK) are found under PEPE, SHIB and BONK. One symbol, not a list. Omit for every coin."
      • addedInput schema / properties / limit / description
        Added value: +"Max fills returned. Defaults to 50, hard ceiling 200 for everyone and no plan raises it."
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": {},
        +  "properties": {
        +    "access_note": {
        +      "anyOf": [
        +        {
        +          "type": "string"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "What this connection could not return and what lifts it. Always pass this on to the user: it is the only place that information appears."
        +    },
        +    "available": {
        +      "anyOf": [
        +        {
        +          "type": "boolean"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "False when this lane could not answer: a producer is dark, the pair sits outside this plan, or the argument named something we do not carry. Absent or true means the numbers are a real reading, not a guess."
        +    },
        +    "capped": {
        +      "anyOf": [
        +        {
        +          "additionalProperties": false,
        +          "properties": {
        +            "applied": {
        +              "description": "The value actually used.",
        +              "type": "number"
        +            },
        +            "argument": {
        +              "description": "Which argument was cut down, for example limit or hours.",
        +              "type": "string"
        +            },
        +            "by": {
        +              "description": "Why it was cut: keyless for the free ceiling, plan_max for a paid ceiling, tool_max for a ceiling no plan raises.",
        +              "type": "string"
        +            },
        +            "max": {
        +              "description": "The ceiling that applied.",
        +              "type": "number"
        +            },
        +            "requested": {
        +              "description": "The value the caller asked for.",
        +              "type": "number"
        +            }
        +          },
        +          "required": [
        +            "argument",
        +            "requested",
        +            "applied",
        +            "max",
        +            "by"
        +          ],
        +          "type": "object"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "Present only when an argument was cut down to a ceiling. Absent means nothing was clamped, so a smaller number than you asked for is the data and not a limit."
        +    },
        +    "coin": {
        +      "anyOf": [
        +        {
        +          "type": "string"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "The coin filter applied, or null for every coin."
        +    },
        +    "count": {
        +      "anyOf": [
        +        {
        +          "type": "number"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "How many rows this reply carries."
        +    },
        +    "note": {
        +      "anyOf": [
        +        {
        +          "type": "string"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "One line saying what the numbers cover, or why there are none. Read it before reporting any zero as a market reading."
        +    },
        +    "trades": {
        +      "anyOf": [
        +        {
        +          "items": {},
        +          "type": "array"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "The fills, each carrying the wallet on both sides, the coin, the direction, the size and the time. Pass a wallet to hl_wallet for that account live positions."
        +    },
        +    "venue": {
        +      "anyOf": [
        +        {
        +          "type": "string"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "Always Hyperliquid."
        +    }
        +  },
        +  "type": "object"
        +}
    • Changedliq_zones2 fields changed
      • addedInput schema / properties / pair / description
        Added value: +"Trading pair, for example ETH/USD. A bare symbol like ETH is read as ETH/USD. Defaults to BTC/USD when omitted. Keyless calls reach the free pairs and get the projected levels without the cascade chains; a developer plan reaches any streamed pair with the full snapshot."
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": {},
        +  "properties": {
        +    "access_note": {
        +      "anyOf": [
        +        {
        +          "type": "string"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "What this connection could not return and what lifts it. Always pass this on to the user: it is the only place that information appears."
        +    },
        +    "available": {
        +      "anyOf": [
        +        {
        +          "type": "boolean"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "False when this lane could not answer: a producer is dark, the pair sits outside this plan, or the argument named something we do not carry. Absent or true means the numbers are a real reading, not a guess."
        +    },
        +    "covered": {
        +      "anyOf": [
        +        {
        +          "type": "boolean"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "False when this server does not stream the pair at all. No plan adds it."
        +    },
        +    "free_pairs": {
        +      "anyOf": [
        +        {
        +          "items": {
        +            "type": "string"
        +          },
        +          "type": "array"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "The pairs a keyless connection can read, returned when the pair asked for is not one of them."
        +    },
        +    "note": {
        +      "anyOf": [
        +        {
        +          "type": "string"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "One line saying what the numbers cover, or why there are none. Read it before reporting any zero as a market reading."
        +    },
        +    "pair": {
        +      "anyOf": [
        +        {
        +          "type": "string"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "The pair this projection covers."
        +    },
        +    "projection": {
        +      "description": "The projected levels: where forced closes would sit under the modeled leverage assumptions, plus the cascade chains on a developer plan. Modeled levels, NOT trades that happened."
        +    }
        +  },
        +  "type": "object"
        +}
    • Changedliquidations1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": {},
        +  "properties": {
        +    "access_note": {
        +      "anyOf": [
        +        {
        +          "type": "string"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "What this connection could not return and what lifts it. Always pass this on to the user: it is the only place that information appears."
        +    },
        +    "available": {
        +      "anyOf": [
        +        {
        +          "type": "boolean"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "False when this lane could not answer: a producer is dark, the pair sits outside this plan, or the argument named something we do not carry. Absent or true means the numbers are a real reading, not a guess."
        +    },
        +    "capped": {
        +      "anyOf": [
        +        {
        +          "additionalProperties": false,
        +          "properties": {
        +            "applied": {
        +              "description": "The value actually used.",
        +              "type": "number"
        +            },
        +            "argument": {
        +              "description": "Which argument was cut down, for example limit or hours.",
        +              "type": "string"
        +            },
        +            "by": {
        +              "description": "Why it was cut: keyless for the free ceiling, plan_max for a paid ceiling, tool_max for a ceiling no plan raises.",
        +              "type": "string"
        +            },
        +            "max": {
        +              "description": "The ceiling that applied.",
        +              "type": "number"
        +            },
        +            "requested": {
        +              "description": "The value the caller asked for.",
        +              "type": "number"
        +            }
        +          },
        +          "required": [
        +            "argument",
        +            "requested",
        +            "applied",
        +            "max",
        +            "by"
        +          ],
        +          "type": "object"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "Present only when an argument was cut down to a ceiling. Absent means nothing was clamped, so a smaller number than you asked for is the data and not a limit."
        +    },
        +    "count": {
        +      "anyOf": [
        +        {
        +          "type": "number"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "How many events fired in the whole window, not how many rows came back."
        +    },
        +    "history_included": {
        +      "anyOf": [
        +        {
        +          "type": "boolean"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "True when the recorded series was merged in, so a restart has not erased earlier events."
        +    },
        +    "liquidations": {
        +      "anyOf": [
        +        {
        +          "items": {},
        +          "type": "array"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "The events themselves, newest first: price, size in base and quote, side (long_liquidated or short_liquidated), exchange and time. A sample of the window when truncated is true."
        +    },
        +    "long_liquidations": {
        +      "anyOf": [
        +        {
        +          "type": "number"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "COUNT of longs force-closed. For dollars read long_usd."
        +    },
        +    "long_usd": {
        +      "anyOf": [
        +        {
        +          "type": "number"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "Dollars of longs force-closed across the window."
        +    },
        +    "note": {
        +      "anyOf": [
        +        {
        +          "type": "string"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "One line saying what the numbers cover, or why there are none. Read it before reporting any zero as a market reading."
        +    },
        +    "pair": {
        +      "anyOf": [
        +        {
        +          "type": "string"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "The pair these events belong to."
        +    },
        +    "requested_hours": {
        +      "anyOf": [
        +        {
        +          "type": "number"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "The period asked for, so a page can be told apart from a period."
        +    },
        +    "rows_returned": {
        +      "anyOf": [
        +        {
        +          "type": "number"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "How many event rows are actually in this reply."
        +    },
        +    "rows_span_minutes": {
        +      "anyOf": [
        +        {
        +          "type": "number"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "How far back the returned rows themselves reach."
        +    },
        +    "short_liquidations": {
        +      "anyOf": [
        +        {
        +          "type": "number"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "COUNT of shorts force-closed. For dollars read short_usd."
        +    },
        +    "short_usd": {
        +      "anyOf": [
        +        {
        +          "type": "number"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "Dollars of shorts force-closed across the window."
        +    },
        +    "sources": {
        +      "anyOf": [
        +        {
        +          "additionalProperties": {},
        +          "propertyNames": {
        +            "type": "string"
        +          },
        +          "type": "object"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "How the events split between the streamed exchanges and Hyperliquid, and whether the Hyperliquid part is a sample."
        +    },
        +    "total_in_window": {
        +      "anyOf": [
        +        {
        +          "type": "number"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "How many events the window holds in total."
        +    },
        +    "total_volume_usd": {
        +      "anyOf": [
        +        {
        +          "type": "number"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "Dollars forced out across the whole window."
        +    },
        +    "truncated": {
        +      "anyOf": [
        +        {
        +          "type": "boolean"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "True when more rows matched than were returned, so what you have is a page and not the whole set."
        +    },
        +    "window_hours": {
        +      "anyOf": [
        +        {
        +          "type": "number"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "The period the totals cover, in hours."
        +    },
        +    "window_minutes": {
        +      "anyOf": [
        +        {
        +          "type": "number"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "The same period in minutes."
        +    }
        +  },
        +  "type": "object"
        +}
    • Changedmarket_extremes1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": {},
        +  "properties": {
        +    "as_of_day": {
        +      "anyOf": [
        +        {
        +          "type": "string"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "The day the rows actually describe. This is the honest date, and it is usually not today."
        +    },
        +    "computed_at": {
        +      "anyOf": [
        +        {
        +          "anyOf": [
        +            {
        +              "type": "string"
        +            },
        +            {
        +              "type": "number"
        +            }
        +          ]
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "When the daily scan ran."
        +    },
        +    "coverage_note": {
        +      "anyOf": [
        +        {
        +          "type": "string"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "Present when stale is false: why these extremes are from as_of_day rather than today."
        +    },
        +    "data_age_days": {
        +      "anyOf": [
        +        {
        +          "type": "number"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "How many days back as_of_day sits."
        +    },
        +    "expected_lag_days": {
        +      "anyOf": [
        +        {
        +          "type": "number"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "How far behind live this archive is meant to run."
        +    },
        +    "note": {
        +      "anyOf": [
        +        {
        +          "type": "string"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "One line saying what the numbers cover, or why there are none. Read it before reporting any zero as a market reading."
        +    },
        +    "records": {
        +      "anyOf": [
        +        {
        +          "items": {},
        +          "type": "array"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "Pairs sitting at a record high or low for funding, open interest or forced closes, each against the same pair recorded days, with a ready phrase and next-day outcome stats where enough past cases exist."
        +    },
        +    "stale": {
        +      "anyOf": [
        +        {
        +          "type": "boolean"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "True only when the rows are further back than the settle horizon explains."
        +    },
        +    "stale_note": {
        +      "anyOf": [
        +        {
        +          "type": "string"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "Present when stale is true: how far past the horizon the scan has fallen."
        +    },
        +    "top5": {
        +      "anyOf": [
        +        {
        +          "items": {},
        +          "type": "array"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "The same, for pairs in their own top or bottom 5 percent rather than at a record."
        +    }
        +  },
        +  "type": "object"
        +}
    • Changedmarket_history4 fields changed
      • addedInput schema / properties / coin / description
        Added value: +"Read the daily whale buy and sell flow lane for one coin instead, for example BTC, recorded since 2026-06-18. Passing coin selects that lane and pair is then ignored. This is the one tool here where coin and pair are different questions, not two spellings of one."
      • addedInput schema / properties / days / description
        Added value: +"How many recorded days to return. Defaults to the whole window, which is also the ceiling: 30 keyless and 400 on a developer plan. Asking for more returns the cap, and the payload says so in `capped`. Both lanes settle several days behind live by design, so read as_of and data_age_days before calling any of it current."
      • addedInput schema / properties / pair / description
        Added value: +"Read the daily market lane for one pair: funding, open interest, price and liquidation totals, recorded since 2026-03-18. For example ETH/USD; a bare symbol like ETH is read as ETH/USD, and BTC/USD is the default. Ignored when coin is passed, because coin selects the other lane."
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": {},
        +  "properties": {
        +    "access_note": {
        +      "anyOf": [
        +        {
        +          "type": "string"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "What this connection could not return and what lifts it. Always pass this on to the user: it is the only place that information appears."
        +    },
        +    "as_of": {
        +      "anyOf": [
        +        {
        +          "type": "string"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "The newest day in this reply. Not today: both lanes settle several days behind live by design."
        +    },
        +    "available": {
        +      "anyOf": [
        +        {
        +          "type": "boolean"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "False when this lane could not answer: a producer is dark, the pair sits outside this plan, or the argument named something we do not carry. Absent or true means the numbers are a real reading, not a guess."
        +    },
        +    "capped": {
        +      "anyOf": [
        +        {
        +          "additionalProperties": false,
        +          "properties": {
        +            "applied": {
        +              "description": "The value actually used.",
        +              "type": "number"
        +            },
        +            "argument": {
        +              "description": "Which argument was cut down, for example limit or hours.",
        +              "type": "string"
        +            },
        +            "by": {
        +              "description": "Why it was cut: keyless for the free ceiling, plan_max for a paid ceiling, tool_max for a ceiling no plan raises.",
        +              "type": "string"
        +            },
        +            "max": {
        +              "description": "The ceiling that applied.",
        +              "type": "number"
        +            },
        +            "requested": {
        +              "description": "The value the caller asked for.",
        +              "type": "number"
        +            }
        +          },
        +          "required": [
        +            "argument",
        +            "requested",
        +            "applied",
        +            "max",
        +            "by"
        +          ],
        +          "type": "object"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "Present only when an argument was cut down to a ceiling. Absent means nothing was clamped, so a smaller number than you asked for is the data and not a limit."
        +    },
        +    "coin": {
        +      "anyOf": [
        +        {
        +          "type": "string"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "The coin, when the daily whale-flow lane was read."
        +    },
        +    "coverage_note": {
        +      "anyOf": [
        +        {
        +          "type": "string"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "Present when stale is false: why the newest day is not today, and that these days must not be described as current."
        +    },
        +    "data_age_days": {
        +      "anyOf": [
        +        {
        +          "type": "number"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "How many days back as_of sits."
        +    },
        +    "days_returned": {
        +      "anyOf": [
        +        {
        +          "type": "number"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "How many recorded days came back."
        +    },
        +    "depth_note": {
        +      "anyOf": [
        +        {
        +          "type": "string"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "How far back the data behind this answer reaches."
        +    },
        +    "expected_lag_days": {
        +      "anyOf": [
        +        {
        +          "type": "number"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "How far behind live this lane is meant to run, so a healthy lag can be told from a stopped one."
        +    },
        +    "funding": {
        +      "anyOf": [
        +        {
        +          "items": {},
        +          "type": "array"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "Daily funding readings, oldest first, each carrying its own coverage evidence."
        +    },
        +    "hour_of_day_utc": {
        +      "description": "What a typical hour looks like for this coin, as medians per UTC hour. Absent under 14 recorded days."
        +    },
        +    "liquidations": {
        +      "anyOf": [
        +        {
        +          "items": {},
        +          "type": "array"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "Daily forced-close totals."
        +    },
        +    "open_interest": {
        +      "anyOf": [
        +        {
        +          "items": {},
        +          "type": "array"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "Daily open interest readings."
        +    },
        +    "pair": {
        +      "anyOf": [
        +        {
        +          "type": "string"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "The pair, when the daily market lane was read."
        +    },
        +    "price": {
        +      "anyOf": [
        +        {
        +          "items": {},
        +          "type": "array"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "Daily price readings."
        +    },
        +    "stale": {
        +      "anyOf": [
        +        {
        +          "type": "boolean"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "True only when the lane is further back than its own settle horizon explains."
        +    },
        +    "stale_note": {
        +      "anyOf": [
        +        {
        +          "type": "string"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "Present when stale is true: how far past the horizon it has fallen."
        +    },
        +    "whale_flow_daily": {
        +      "anyOf": [
        +        {
        +          "items": {},
        +          "type": "array"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "Daily whale buy and sell dollars, when the coin lane was read."
        +    }
        +  },
        +  "type": "object"
        +}
    • Changedmarket_liquidations1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": {},
        +  "properties": {
        +    "as_of": {
        +      "anyOf": [
        +        {
        +          "type": "string"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "When the combined snapshot was taken, as an ISO stamp."
        +    },
        +    "available": {
        +      "anyOf": [
        +        {
        +          "type": "boolean"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "False when this lane could not answer: a producer is dark, the pair sits outside this plan, or the argument named something we do not carry. Absent or true means the numbers are a real reading, not a guess."
        +    },
        +    "coverage": {
        +      "description": "Which feeds fed this snapshot."
        +    },
        +    "lending_liquidations": {
        +      "anyOf": [
        +        {
        +          "additionalProperties": {},
        +          "propertyNames": {
        +            "type": "string"
        +          },
        +          "type": "object"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "A SEPARATE 24h lane: on-chain debts repaid and collateral seized. count, total_usd, protocols, chains and recent rows. Never add these to the leveraged numbers."
        +    },
        +    "named_liquidations": {
        +      "anyOf": [
        +        {
        +          "items": {},
        +          "type": "array"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "Hyperliquid closures with the wallet named, which no other market publishes."
        +    },
        +    "note": {
        +      "anyOf": [
        +        {
        +          "type": "string"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "One line saying what the numbers cover, or why there are none. Read it before reporting any zero as a market reading."
        +    },
        +    "perp_liquidations": {
        +      "anyOf": [
        +        {
        +          "additionalProperties": {},
        +          "propertyNames": {
        +            "type": "string"
        +          },
        +          "type": "object"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "The 24h forced-close picture on leveraged markets: count, total_usd, the long and short split in both dollars and counts, hour by hour, the peak hour, the ranked coins, the biggest single event, and which exchanges are behind the totals. Long dollars are sell-side pressure."
        +    },
        +    "stale": {
        +      "anyOf": [
        +        {
        +          "type": "boolean"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "True when the snapshot is older than it should be."
        +    }
        +  },
        +  "type": "object"
        +}
    • Changedmarket_overview3 fields changed
      • addedInput schema / properties / coin / description
        Added value: +"Return this coin's row on its own, for example BTC, instead of the whole board. Only coins in the streamed overview (roughly the top 300 by volume) are there; anything else comes back available:false rather than as an empty board."
      • addedInput schema / properties / limit / description
        Added value: +"Max board rows returned. Defaults to 20, hard ceiling 50 for everyone and no plan raises it. total_rows reports the size of the whole board so a shortened list is visible. Ignored when coin is passed, since that returns a single row."
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": {},
        +  "properties": {
        +    "access_note": {
        +      "anyOf": [
        +        {
        +          "type": "string"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "What this connection could not return and what lifts it. Always pass this on to the user: it is the only place that information appears."
        +    },
        +    "available": {
        +      "anyOf": [
        +        {
        +          "type": "boolean"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "False when this lane could not answer: a producer is dark, the pair sits outside this plan, or the argument named something we do not carry. Absent or true means the numbers are a real reading, not a guess."
        +    },
        +    "capped": {
        +      "anyOf": [
        +        {
        +          "additionalProperties": false,
        +          "properties": {
        +            "applied": {
        +              "description": "The value actually used.",
        +              "type": "number"
        +            },
        +            "argument": {
        +              "description": "Which argument was cut down, for example limit or hours.",
        +              "type": "string"
        +            },
        +            "by": {
        +              "description": "Why it was cut: keyless for the free ceiling, plan_max for a paid ceiling, tool_max for a ceiling no plan raises.",
        +              "type": "string"
        +            },
        +            "max": {
        +              "description": "The ceiling that applied.",
        +              "type": "number"
        +            },
        +            "requested": {
        +              "description": "The value the caller asked for.",
        +              "type": "number"
        +            }
        +          },
        +          "required": [
        +            "argument",
        +            "requested",
        +            "applied",
        +            "max",
        +            "by"
        +          ],
        +          "type": "object"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "Present only when an argument was cut down to a ceiling. Absent means nothing was clamped, so a smaller number than you asked for is the data and not a limit."
        +    },
        +    "coin": {
        +      "anyOf": [
        +        {
        +          "type": "string"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "The symbol asked for, when a single row was requested."
        +    },
        +    "coverage_note": {
        +      "anyOf": [
        +        {
        +          "type": "string"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "The same in one sentence, present only when something is missing."
        +    },
        +    "note": {
        +      "anyOf": [
        +        {
        +          "type": "string"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "One line saying what the numbers cover, or why there are none. Read it before reporting any zero as a market reading."
        +    },
        +    "regime": {
        +      "anyOf": [
        +        {
        +          "additionalProperties": {},
        +          "propertyNames": {
        +            "type": "string"
        +          },
        +          "type": "object"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "The Bitcoin risk state: state, btc_price and breadth_pct. A null state means the field is absent, not neutral."
        +    },
        +    "returned": {
        +      "anyOf": [
        +        {
        +          "type": "number"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "How many rows are in this reply."
        +    },
        +    "row": {
        +      "anyOf": [
        +        {
        +          "additionalProperties": {},
        +          "propertyNames": {
        +            "type": "string"
        +          },
        +          "type": "object"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "That one symbol row: base, price_usd, chg_24h_pct, vol_usd_24h and oi_usd."
        +    },
        +    "rows": {
        +      "anyOf": [
        +        {
        +          "items": {},
        +          "type": "array"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "The board, ranked by volume: base symbol, price, 24h change, 24h volume and open interest."
        +    },
        +    "total_rows": {
        +      "anyOf": [
        +        {
        +          "type": "number"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "How many rows the whole board holds."
        +    },
        +    "totals": {
        +      "description": "Market-wide totals: volume, open interest, forced closes and market cap."
        +    },
        +    "truncated": {
        +      "anyOf": [
        +        {
        +          "type": "boolean"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "True when more rows matched than were returned, so what you have is a page and not the whole set."
        +    },
        +    "unavailable_fields": {
        +      "anyOf": [
        +        {
        +          "items": {
        +            "type": "string"
        +          },
        +          "type": "array"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "Fields this snapshot is not carrying. They are null because the field is absent, NOT because the value is zero."
        +    },
        +    "updated_at": {
        +      "anyOf": [
        +        {
        +          "anyOf": [
        +            {
        +              "type": "string"
        +            },
        +            {
        +              "type": "number"
        +            }
        +          ]
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "When the snapshot was published."
        +    },
        +    "whale_net_usd_24h": {
        +      "anyOf": [
        +        {
        +          "type": "number"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "Buys minus sells across the board over 24h. Null means the field is absent from this snapshot, not that flow was balanced."
        +    }
        +  },
        +  "type": "object"
        +}
    • Changedmarket_screener5 fields changed
      • addedInput schema / properties / compact / description
        Added value: +"Return one plain-text line per matching pair rather than the JSON rows. Defaults to false."
      • addedInput schema / properties / limit / description
        Added value: +"Max rows returned. Defaults to 20, hard ceiling 50 for everyone and no plan raises it. `matched` counts every pair that passed the filters regardless, and truncated says whether the rows are a shortened list."
      • addedInput schema / properties / unusual_only / description
        Added value: +"Keep only coins the radar currently marks unusual in its 1h, 4h or 24h window. Defaults to false."
      • addedInput schema / properties / whale_mult_min / description
        Added value: +"Keep only coins whose 24h whale flow is at least this multiple of their own logged daily average, for example 3 for 3x and up. Coins with no logged multiple are dropped rather than treated as zero. Omit for no flow filter."
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": {},
        +  "properties": {
        +    "access_note": {
        +      "anyOf": [
        +        {
        +          "type": "string"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "What this connection could not return and what lifts it. Always pass this on to the user: it is the only place that information appears."
        +    },
        +    "available": {
        +      "anyOf": [
        +        {
        +          "type": "boolean"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "False when this lane could not answer: a producer is dark, the pair sits outside this plan, or the argument named something we do not carry. Absent or true means the numbers are a real reading, not a guess."
        +    },
        +    "capped": {
        +      "anyOf": [
        +        {
        +          "additionalProperties": false,
        +          "properties": {
        +            "applied": {
        +              "description": "The value actually used.",
        +              "type": "number"
        +            },
        +            "argument": {
        +              "description": "Which argument was cut down, for example limit or hours.",
        +              "type": "string"
        +            },
        +            "by": {
        +              "description": "Why it was cut: keyless for the free ceiling, plan_max for a paid ceiling, tool_max for a ceiling no plan raises.",
        +              "type": "string"
        +            },
        +            "max": {
        +              "description": "The ceiling that applied.",
        +              "type": "number"
        +            },
        +            "requested": {
        +              "description": "The value the caller asked for.",
        +              "type": "number"
        +            }
        +          },
        +          "required": [
        +            "argument",
        +            "requested",
        +            "applied",
        +            "max",
        +            "by"
        +          ],
        +          "type": "object"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "Present only when an argument was cut down to a ceiling. Absent means nothing was clamped, so a smaller number than you asked for is the data and not a limit."
        +    },
        +    "compact": {
        +      "anyOf": [
        +        {
        +          "type": "boolean"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "Present and true only on a compact:true call, where the whole answer is the text in `line`."
        +    },
        +    "criteria": {
        +      "anyOf": [
        +        {
        +          "additionalProperties": {},
        +          "propertyNames": {
        +            "type": "string"
        +          },
        +          "type": "object"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "The filters as they were actually applied, so a misread argument is visible."
        +    },
        +    "line": {
        +      "anyOf": [
        +        {
        +          "type": "string"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "One plain-text line per matching pair, returned only when compact:true was asked for."
        +    },
        +    "matched": {
        +      "anyOf": [
        +        {
        +          "type": "number"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "How many pairs passed every filter, counted before the row cap. Null when nothing was screened."
        +    },
        +    "note": {
        +      "anyOf": [
        +        {
        +          "type": "string"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "One line saying what the numbers cover, or why there are none. Read it before reporting any zero as a market reading."
        +    },
        +    "returned": {
        +      "anyOf": [
        +        {
        +          "type": "number"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "How many rows are in this reply."
        +    },
        +    "rows": {
        +      "anyOf": [
        +        {
        +          "items": {},
        +          "type": "array"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "One row per matching pair: pair, coin, price, 24h change, the funding and open interest bands against the same pair recorded days with the day counts behind them, the whale multiple, and whether the ranking currently calls it unusual."
        +    },
        +    "scanned_pairs": {
        +      "anyOf": [
        +        {
        +          "type": "number"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "How many pairs were examined."
        +    },
        +    "truncated": {
        +      "anyOf": [
        +        {
        +          "type": "boolean"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "True when more rows matched than were returned, so what you have is a page and not the whole set."
        +    },
        +    "unknown_band": {
        +      "anyOf": [
        +        {
        +          "items": {
        +            "type": "string"
        +          },
        +          "type": "array"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "Set when a band was named that this screen does not know. Nothing was screened, so this is not no matches."
        +    },
        +    "valid_bands": {
        +      "anyOf": [
        +        {
        +          "items": {
        +            "type": "string"
        +          },
        +          "type": "array"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "The bands that do exist, returned alongside unknown_band."
        +    }
        +  },
        +  "type": "object"
        +}
    • Changedmarket_snapshot2 fields changed
      • addedInput schema / properties / pair / description
        Added value: +"Trading pair, for example ETH/USD. A bare symbol like ETH is read as ETH/USD. Defaults to BTC/USD when omitted. Keyless calls reach the free pairs only; a developer plan reaches every streamed pair. A pair this server does not stream comes back covered:false, and no plan adds it."
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": {},
        +  "properties": {
        +    "access_note": {
        +      "anyOf": [
        +        {
        +          "type": "string"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "What this connection could not return and what lifts it. Always pass this on to the user: it is the only place that information appears."
        +    },
        +    "available": {
        +      "anyOf": [
        +        {
        +          "type": "boolean"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "False when this lane could not answer: a producer is dark, the pair sits outside this plan, or the argument named something we do not carry. Absent or true means the numbers are a real reading, not a guess."
        +    },
        +    "covered": {
        +      "anyOf": [
        +        {
        +          "type": "boolean"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "False when this server does not stream the pair at all. No plan adds it."
        +    },
        +    "exchanges_streaming": {
        +      "anyOf": [
        +        {
        +          "type": "number"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "How many exchanges are currently streaming this pair."
        +    },
        +    "free_pairs": {
        +      "anyOf": [
        +        {
        +          "items": {
        +            "type": "string"
        +          },
        +          "type": "array"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "The pairs a keyless connection can read, returned when the pair asked for is not one of them."
        +    },
        +    "funding": {
        +      "anyOf": [
        +        {
        +          "additionalProperties": {},
        +          "propertyNames": {
        +            "type": "string"
        +          },
        +          "type": "object"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "average_rate across the exchanges that publish one, and exchange_count behind that average."
        +    },
        +    "liquidations_recent": {
        +      "anyOf": [
        +        {
        +          "additionalProperties": {},
        +          "propertyNames": {
        +            "type": "string"
        +          },
        +          "type": "object"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "Recent forced closes for this pair: count, total_usd, the long and short split in counts and dollars, and window_minutes, without which a count cannot be read. available:false here means no reading, not zero."
        +    },
        +    "note": {
        +      "anyOf": [
        +        {
        +          "type": "string"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "One line saying what the numbers cover, or why there are none. Read it before reporting any zero as a market reading."
        +    },
        +    "open_interest_usd": {
        +      "anyOf": [
        +        {
        +          "type": "number"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "Open interest in dollars, summed across the exchanges that publish it."
        +    },
        +    "pair": {
        +      "anyOf": [
        +        {
        +          "type": "string"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "The pair this snapshot describes."
        +    },
        +    "price": {
        +      "anyOf": [
        +        {
        +          "type": "number"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "Last traded price."
        +    },
        +    "stats_24h": {
        +      "description": "The 24h statistics block: open, high, low, close, change and volume."
        +    },
        +    "vs_history": {
        +      "anyOf": [
        +        {
        +          "additionalProperties": {},
        +          "propertyNames": {
        +            "type": "string"
        +          },
        +          "type": "object"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "Where funding and open interest sit against the same pair recorded days: a phrase, a band and how many days back the comparison reaches. Null under 30 recorded days."
        +    }
        +  },
        +  "type": "object"
        +}
    • Changedmy_access1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": {},
        +  "properties": {
        +    "access_note": {
        +      "anyOf": [
        +        {
        +          "type": "string"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "What this connection could not return and what lifts it. Always pass this on to the user: it is the only place that information appears."
        +    },
        +    "authenticated": {
        +      "anyOf": [
        +        {
        +          "type": "boolean"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "True when any valid sign-in or key was presented."
        +    },
        +    "caps": {
        +      "anyOf": [
        +        {
        +          "additionalProperties": {},
        +          "propertyNames": {
        +            "type": "string"
        +          },
        +          "type": "object"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "The row cap and time window every capped tool applies right now, each with the free value and the developer-plan value beside it."
        +    },
        +    "credits": {
        +      "anyOf": [
        +        {
        +          "additionalProperties": {},
        +          "propertyNames": {
        +            "type": "string"
        +          },
        +          "type": "object"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "The balance: credits_remaining, plan, plan_active, credits_per_call, calls_left_estimate and where to top up. A null credits_remaining always carries a note saying WHY, because could not read and spent to zero send a user to two different places."
        +    },
        +    "free_pairs": {
        +      "anyOf": [
        +        {
        +          "anyOf": [
        +            {
        +              "type": "string"
        +            },
        +            {
        +              "items": {
        +                "type": "string"
        +              },
        +              "type": "array"
        +            }
        +          ]
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "The pairs this connection can read. A list when keyless, the words every streamed pair on a developer plan, or a short sentence when the market lane could not be read."
        +    },
        +    "how_to_lift": {
        +      "anyOf": [
        +        {
        +          "additionalProperties": {},
        +          "propertyNames": {
        +            "type": "string"
        +          },
        +          "type": "object"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "What lifts the caps, where to get it, and (as not_this) the two things people buy by mistake that change nothing here."
        +    },
        +    "locked_here": {
        +      "anyOf": [
        +        {
        +          "items": {
        +            "type": "string"
        +          },
        +          "type": "array"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "What this connection cannot reach right now. Empty on a developer plan."
        +    },
        +    "metered": {
        +      "anyOf": [
        +        {
        +          "type": "string"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "Whether calls cost credits on this connection, and how much."
        +    },
        +    "on_free_plan": {
        +      "anyOf": [
        +        {
        +          "type": "boolean"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "True when this connection reads free-shaped data. The single fact most users are asking for."
        +    },
        +    "plain": {
        +      "anyOf": [
        +        {
        +          "type": "string"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "One sentence describing this tier in the user own words rather than ours."
        +    },
        +    "tier": {
        +      "anyOf": [
        +        {
        +          "type": "string"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "Which of four states this connection is in: keyless, signed_in_free, coinlobster_pro or developer_plan."
        +    }
        +  },
        +  "type": "object"
        +}
    • Changedonchain_whales5 fields changed
      • addedInput schema / properties / chain / description
        Added value: +"Restrict to one chain: ethereum, base, arbitrum. Anything else is refused by name rather than answered as nothing happening there. Omit for all of them."
      • addedInput schema / properties / coin / description
        Added value: +"Filter to one token symbol, for example PEPE. A pair like ETH/USD works too, the quote leg is dropped. One symbol, not a list. Omit for every token."
      • addedInput schema / properties / limit / description
        Added value: +"Max swaps returned. Defaults to 50, hard ceiling 200 for everyone and no plan raises it."
      • addedInput schema / properties / min_usd / description
        Added value: +"Smallest swap to return, in US dollars, for example 500000 for $500K and up. Omit for everything above the size floor this feed already records, which is not every swap on chain."
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": {},
        +  "properties": {
        +    "access_note": {
        +      "anyOf": [
        +        {
        +          "type": "string"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "What this connection could not return and what lifts it. Always pass this on to the user: it is the only place that information appears."
        +    },
        +    "available": {
        +      "anyOf": [
        +        {
        +          "type": "boolean"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "False when this lane could not answer: a producer is dark, the pair sits outside this plan, or the argument named something we do not carry. Absent or true means the numbers are a real reading, not a guess."
        +    },
        +    "capped": {
        +      "anyOf": [
        +        {
        +          "additionalProperties": false,
        +          "properties": {
        +            "applied": {
        +              "description": "The value actually used.",
        +              "type": "number"
        +            },
        +            "argument": {
        +              "description": "Which argument was cut down, for example limit or hours.",
        +              "type": "string"
        +            },
        +            "by": {
        +              "description": "Why it was cut: keyless for the free ceiling, plan_max for a paid ceiling, tool_max for a ceiling no plan raises.",
        +              "type": "string"
        +            },
        +            "max": {
        +              "description": "The ceiling that applied.",
        +              "type": "number"
        +            },
        +            "requested": {
        +              "description": "The value the caller asked for.",
        +              "type": "number"
        +            }
        +          },
        +          "required": [
        +            "argument",
        +            "requested",
        +            "applied",
        +            "max",
        +            "by"
        +          ],
        +          "type": "object"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "Present only when an argument was cut down to a ceiling. Absent means nothing was clamped, so a smaller number than you asked for is the data and not a limit."
        +    },
        +    "chains_covered": {
        +      "anyOf": [
        +        {
        +          "items": {
        +            "type": "string"
        +          },
        +          "type": "array"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "The chains this feed indexes."
        +    },
        +    "count": {
        +      "anyOf": [
        +        {
        +          "type": "number"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "How many rows this reply carries."
        +    },
        +    "note": {
        +      "anyOf": [
        +        {
        +          "type": "string"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "One line saying what the numbers cover, or why there are none. Read it before reporting any zero as a market reading."
        +    },
        +    "swaps": {
        +      "anyOf": [
        +        {
        +          "items": {},
        +          "type": "array"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "The swaps, each carrying the wallet that signed it, the exchange it went through, the token and the dollar size."
        +    },
        +    "unknown_chain": {
        +      "anyOf": [
        +        {
        +          "type": "string"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "Set when a chain was named that this feed does not index. Nothing was searched, so this is not no swaps there."
        +    }
        +  },
        +  "type": "object"
        +}
    • Changedsmart_money2 fields changed
      • addedInput schema / properties / window / description
        Added value: +"Which window flow_traded covers: 1h, 4h or 24h. Defaults to 24h. It does not move positions_held, which is always what the cohort holds right now, and windows_available in the reply lists what the roll-up actually published."
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": {},
        +  "properties": {
        +    "access_note": {
        +      "anyOf": [
        +        {
        +          "type": "string"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "What this connection could not return and what lifts it. Always pass this on to the user: it is the only place that information appears."
        +    },
        +    "available": {
        +      "anyOf": [
        +        {
        +          "type": "boolean"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "False when this lane could not answer: a producer is dark, the pair sits outside this plan, or the argument named something we do not carry. Absent or true means the numbers are a real reading, not a guess."
        +    },
        +    "cohort": {
        +      "description": "Who is in the cohort and how it was screened, including rosterAgeHours, the age of the membership screen."
        +    },
        +    "coverage": {
        +      "description": "Which wallets could be read, and which are reported as unprofiled rather than counted as holding nothing."
        +    },
        +    "flow_traded": {
        +      "anyOf": [
        +        {
        +          "items": {},
        +          "type": "array"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "Dollars EXECUTED inside the window per coin, same row shape. A different unit from positions_held and never added to it."
        +    },
        +    "flow_withheld": {
        +      "anyOf": [
        +        {
        +          "type": "number"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "How many traded rows were not returned at this access level."
        +    },
        +    "note": {
        +      "anyOf": [
        +        {
        +          "type": "string"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "One line saying what the numbers cover, or why there are none. Read it before reporting any zero as a market reading."
        +    },
        +    "positions_held": {
        +      "anyOf": [
        +        {
        +          "items": {},
        +          "type": "array"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "Dollars currently OPEN per coin, with the wallet count behind each row and a thin flag under 3 wallets."
        +    },
        +    "positions_withheld": {
        +      "anyOf": [
        +        {
        +          "type": "number"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "How many holding rows were not returned at this access level."
        +    },
        +    "updated_at": {
        +      "anyOf": [
        +        {
        +          "anyOf": [
        +            {
        +              "type": "string"
        +            },
        +            {
        +              "type": "number"
        +            }
        +          ]
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "When the roll-up was published. Separate from how old the membership screen is."
        +    },
        +    "venue": {
        +      "anyOf": [
        +        {
        +          "type": "string"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "Which market the cohort trades on."
        +    },
        +    "window": {
        +      "anyOf": [
        +        {
        +          "type": "string"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "Which window flow_traded covers: 1h, 4h or 24h."
        +    },
        +    "windows_available": {
        +      "anyOf": [
        +        {
        +          "items": {
        +            "type": "string"
        +          },
        +          "type": "array"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "The windows the roll-up actually published."
        +    }
        +  },
        +  "type": "object"
        +}
    • Changedsqueeze_score2 fields changed
      • addedInput schema / properties / pair / description
        Added value: +"Trading pair, for example ETH/USD. A bare symbol like ETH is read as ETH/USD. Defaults to BTC/USD when omitted. A developer plan is needed for any pair here: without one the call is refused before the pair is even read."
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": {},
        +  "properties": {
        +    "access_note": {
        +      "anyOf": [
        +        {
        +          "type": "string"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "What this connection could not return and what lifts it. Always pass this on to the user: it is the only place that information appears."
        +    },
        +    "available": {
        +      "anyOf": [
        +        {
        +          "type": "boolean"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "False when this lane could not answer: a producer is dark, the pair sits outside this plan, or the argument named something we do not carry. Absent or true means the numbers are a real reading, not a guess."
        +    },
        +    "by_exchange": {
        +      "description": "The same read broken out per exchange."
        +    },
        +    "crowded_side": {
        +      "anyOf": [
        +        {
        +          "type": "string"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "Which side is overexposed, long or short."
        +    },
        +    "long_short_ratio": {
        +      "anyOf": [
        +        {
        +          "type": "number"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "Long accounts against short accounts."
        +    },
        +    "note": {
        +      "anyOf": [
        +        {
        +          "type": "string"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "One line saying what the numbers cover, or why there are none. Read it before reporting any zero as a market reading."
        +    },
        +    "pair": {
        +      "anyOf": [
        +        {
        +          "type": "string"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "The pair this crowding read describes."
        +    },
        +    "squeeze_score": {
        +      "anyOf": [
        +        {
        +          "type": "number"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "Crowding from 0 to 100. Descriptive, not a trade signal."
        +    },
        +    "taker_buy_sell_ratio": {
        +      "anyOf": [
        +        {
        +          "type": "number"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "Aggressive buying against aggressive selling."
        +    },
        +    "updated_at": {
        +      "anyOf": [
        +        {
        +          "anyOf": [
        +            {
        +              "type": "string"
        +            },
        +            {
        +              "type": "number"
        +            }
        +          ]
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "When the read was computed."
        +    }
        +  },
        +  "type": "object"
        +}
    • Changedtrade_context4 fields changed
      • addedInput schema / properties / compact / description
        Added value: +"Return one line of plain text rather than the JSON blob, about 30 tokens instead of 800. Same facts, same windows, same dates, no structured fields to read. Defaults to false."
      • addedInput schema / properties / pair / description
        Added value: +"Trading pair, for example ETH/USD. A bare symbol like ETH is read as ETH/USD. Defaults to BTC/USD when omitted. Any streamed pair answers keyless; off the free pairs a keyless reply is the lite shape and names what it withheld in locked_layers."
      • addedInput schema / properties / position_usd / description
        Added value: +"Position size in US dollars, for example 25000. Above zero only. When given, carry_cost adds per_day_usd_at_current_rate, the dollars a day the current funding average across exchanges works out to at that size. Arithmetic on the rate as it stands now, not a projection of future rates. Omit and carry_cost still carries the percentage and APR figures."
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": {},
        +  "properties": {
        +    "available": {
        +      "anyOf": [
        +        {
        +          "type": "boolean"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "False when this lane could not answer: a producer is dark, the pair sits outside this plan, or the argument named something we do not carry. Absent or true means the numbers are a real reading, not a guess."
        +    },
        +    "carry_cost": {
        +      "anyOf": [
        +        {
        +          "additionalProperties": {},
        +          "propertyNames": {
        +            "type": "string"
        +          },
        +          "type": "object"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "Arithmetic on the current funding average: percent per day, the same as an annual rate, which side pays, and dollars a day when position_usd was passed. Not a projection of future rates."
        +    },
        +    "compact": {
        +      "anyOf": [
        +        {
        +          "type": "boolean"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "Present and true only on a compact:true call, where the whole answer is the single line in `line`."
        +    },
        +    "crowding": {
        +      "anyOf": [
        +        {
        +          "additionalProperties": {},
        +          "propertyNames": {
        +            "type": "string"
        +          },
        +          "type": "object"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "The crowding read and the overexposed side. Null without a developer plan."
        +    },
        +    "depth": {
        +      "anyOf": [
        +        {
        +          "type": "string"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "Which shape came back: lite, free-pair or keyed."
        +    },
        +    "funding": {
        +      "anyOf": [
        +        {
        +          "additionalProperties": {},
        +          "propertyNames": {
        +            "type": "string"
        +          },
        +          "type": "object"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "average_rate across exchanges, how many exchanges are in it, the interval in hours, and minutes to the next funding time."
        +    },
        +    "line": {
        +      "anyOf": [
        +        {
        +          "type": "string"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "The composed one-line answer, returned only when compact:true was asked for. The same facts, the same windows and the same dates as the full shape."
        +    },
        +    "liquidations_recent": {
        +      "anyOf": [
        +        {
        +          "additionalProperties": {},
        +          "propertyNames": {
        +            "type": "string"
        +          },
        +          "type": "object"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "Forced closes visible right now: count, long_usd, short_usd and window_minutes. A timing series, market-wide totals run higher."
        +    },
        +    "locked_layers": {
        +      "anyOf": [
        +        {
        +          "items": {
        +            "type": "string"
        +          },
        +          "type": "array"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "Named rather than silently missing: which blocks this connection did not receive."
        +    },
        +    "note": {
        +      "anyOf": [
        +        {
        +          "type": "string"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "One line saying what the numbers cover, or why there are none. Read it before reporting any zero as a market reading."
        +    },
        +    "open_interest_usd": {
        +      "anyOf": [
        +        {
        +          "type": "number"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "Open interest in dollars across the exchanges that publish it."
        +    },
        +    "pair": {
        +      "anyOf": [
        +        {
        +          "type": "string"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "The pair this context describes."
        +    },
        +    "price": {
        +      "anyOf": [
        +        {
        +          "type": "number"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "Last traded price."
        +    },
        +    "stats_24h": {
        +      "description": "The 24h statistics block. Absent on the lite shape, where locked_layers names it."
        +    },
        +    "vs_own_history": {
        +      "anyOf": [
        +        {
        +          "additionalProperties": {},
        +          "propertyNames": {
        +            "type": "string"
        +          },
        +          "type": "object"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "Where funding and open interest sit against the same pair recorded days: phrase, band, day count, the date the reading is from, and how past cases resolved."
        +    },
        +    "whale_flow": {
        +      "anyOf": [
        +        {
        +          "additionalProperties": {},
        +          "propertyNames": {
        +            "type": "string"
        +          },
        +          "type": "object"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "Whale direction against the same coin logged baseline: the multiple, days logged, record and N-day-high flags, and buy share now versus 7 days. Dollar sizes are added on a developer plan."
        +    }
        +  },
        +  "type": "object"
        +}
    • Changedwhale_context2 fields changed
      • addedInput schema / properties / coin / description
        Added value: +"Coin symbol, for example BTC, or a comma-separated list of up to 15 for a portfolio in one call. A single coin returns a flat object, a list returns {coins:[...]} with an available:false entry for any member with no logged history. Omit for the 15 coins sitting at the highest multiple right now."
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": {},
        +  "properties": {
        +    "available": {
        +      "anyOf": [
        +        {
        +          "type": "boolean"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "False when this lane could not answer: a producer is dark, the pair sits outside this plan, or the argument named something we do not carry. Absent or true means the numbers are a real reading, not a guess."
        +    },
        +    "breadth": {
        +      "description": "How wide the buying or selling is across the coins with logged history."
        +    },
        +    "buy_share_24h": {
        +      "anyOf": [
        +        {
        +          "type": "number"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "Share of the last 24h dollars that were buys, 0 to 1."
        +    },
        +    "buy_share_7d": {
        +      "anyOf": [
        +        {
        +          "type": "number"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "Share of the last 7 days dollars that were buys, 0 to 1."
        +    },
        +    "coin": {
        +      "anyOf": [
        +        {
        +          "type": "string"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "The coin this row describes, when one coin was asked for."
        +    },
        +    "coins": {
        +      "anyOf": [
        +        {
        +          "items": {},
        +          "type": "array"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "One row per coin when a comma-separated list was asked for. A member with no logged history comes back as available:false."
        +    },
        +    "days_logged": {
        +      "anyOf": [
        +        {
        +          "type": "number"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "How many days wide the baseline window is."
        +    },
        +    "highest_in_days": {
        +      "anyOf": [
        +        {
        +          "type": "number"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "Highest flow in this many days, or null."
        +    },
        +    "mult_vs_avg_24h": {
        +      "anyOf": [
        +        {
        +          "type": "number"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "How many times its own logged daily average the last 24h of flow is."
        +    },
        +    "net_usd_24h": {
        +      "anyOf": [
        +        {
        +          "type": "number"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "Buys minus sells in the last 24h."
        +    },
        +    "note": {
        +      "anyOf": [
        +        {
        +          "type": "string"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "One line saying what the numbers cover, or why there are none. Read it before reporting any zero as a market reading."
        +    },
        +    "ranking_note": {
        +      "anyOf": [
        +        {
        +          "type": "string"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "How the list is sorted, and why a thin_baseline row can sit near the top without meaning anything."
        +    },
        +    "record_high_day": {
        +      "anyOf": [
        +        {
        +          "type": "boolean"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "True when this is the highest recorded day for the coin."
        +    },
        +    "since_day": {
        +      "anyOf": [
        +        {
        +          "anyOf": [
        +            {
        +              "type": "string"
        +            },
        +            {
        +              "type": "number"
        +            }
        +          ]
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "The first day this baseline covers."
        +    },
        +    "thin_baseline": {
        +      "anyOf": [
        +        {
        +          "type": "boolean"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "True when about one day of flow sits in the whole window, so the multiple is close to the day count by construction and is not evidence of unusual activity."
        +    },
        +    "top_by_multiple": {
        +      "anyOf": [
        +        {
        +          "items": {},
        +          "type": "array"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "The coins sitting at the highest multiple right now, when no coin was asked for."
        +    },
        +    "usd_24h": {
        +      "anyOf": [
        +        {
        +          "type": "number"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "Total whale dollars in the last 24h."
        +    },
        +    "valid_days": {
        +      "anyOf": [
        +        {
        +          "type": "number"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "How many days of the baseline hold usable readings."
        +    }
        +  },
        +  "type": "object"
        +}
    • Changedwhale_flow3 fields changed
      • addedInput schema / properties / coin / description
        Added value: +"Coin symbol, for example BTC. A pair like ETH/USD works too, the quote leg is dropped. Required: with nothing to look up the call is refused rather than answered about a different coin."
      • addedInput schema / properties / hours / description
        Added value: +"How many hours of hourly buckets to read back. Defaults to the whole window, which is also the ceiling: 168 keyless and 720 on a developer plan. Asking for more returns the cap, and the payload says so in `capped`."
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": {},
        +  "properties": {
        +    "access_note": {
        +      "anyOf": [
        +        {
        +          "type": "string"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "What this connection could not return and what lifts it. Always pass this on to the user: it is the only place that information appears."
        +    },
        +    "available": {
        +      "anyOf": [
        +        {
        +          "type": "boolean"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "False when this lane could not answer: a producer is dark, the pair sits outside this plan, or the argument named something we do not carry. Absent or true means the numbers are a real reading, not a guess."
        +    },
        +    "capped": {
        +      "anyOf": [
        +        {
        +          "additionalProperties": false,
        +          "properties": {
        +            "applied": {
        +              "description": "The value actually used.",
        +              "type": "number"
        +            },
        +            "argument": {
        +              "description": "Which argument was cut down, for example limit or hours.",
        +              "type": "string"
        +            },
        +            "by": {
        +              "description": "Why it was cut: keyless for the free ceiling, plan_max for a paid ceiling, tool_max for a ceiling no plan raises.",
        +              "type": "string"
        +            },
        +            "max": {
        +              "description": "The ceiling that applied.",
        +              "type": "number"
        +            },
        +            "requested": {
        +              "description": "The value the caller asked for.",
        +              "type": "number"
        +            }
        +          },
        +          "required": [
        +            "argument",
        +            "requested",
        +            "applied",
        +            "max",
        +            "by"
        +          ],
        +          "type": "object"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "Present only when an argument was cut down to a ceiling. Absent means nothing was clamped, so a smaller number than you asked for is the data and not a limit."
        +    },
        +    "coin": {
        +      "anyOf": [
        +        {
        +          "type": "string"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "The coin these hours belong to."
        +    },
        +    "count": {
        +      "anyOf": [
        +        {
        +          "type": "number"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "How many hours carry a recorded reading. Fewer than hours means the rest were never recorded, not that they were quiet."
        +    },
        +    "depth_note": {
        +      "anyOf": [
        +        {
        +          "type": "string"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "How far back the data behind this answer reaches."
        +    },
        +    "hours": {
        +      "anyOf": [
        +        {
        +          "type": "number"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "How many hours back were read."
        +    },
        +    "note": {
        +      "anyOf": [
        +        {
        +          "type": "string"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "One line saying what the numbers cover, or why there are none. Read it before reporting any zero as a market reading."
        +    },
        +    "rows": {
        +      "anyOf": [
        +        {
        +          "items": {},
        +          "type": "array"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "One row per recorded hour: the hour stamp plus buy and sell dollars, split CEX and on-chain."
        +    }
        +  },
        +  "type": "object"
        +}
    • Changedwhale_profile2 fields changed
      • addedInput schema / properties / coin / description
        Added value: +"Coin symbol, for example BTC. A pair like ETH/USD works too, the quote leg is dropped. Required: with nothing to look up the call is refused rather than answered about a different coin."
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": {},
        +  "properties": {
        +    "access_note": {
        +      "anyOf": [
        +        {
        +          "type": "string"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "What this connection could not return and what lifts it. Always pass this on to the user: it is the only place that information appears."
        +    },
        +    "available": {
        +      "anyOf": [
        +        {
        +          "type": "boolean"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "False when this lane could not answer: a producer is dark, the pair sits outside this plan, or the argument named something we do not carry. Absent or true means the numbers are a real reading, not a guess."
        +    },
        +    "capped": {
        +      "anyOf": [
        +        {
        +          "additionalProperties": false,
        +          "properties": {
        +            "applied": {
        +              "description": "The value actually used.",
        +              "type": "number"
        +            },
        +            "argument": {
        +              "description": "Which argument was cut down, for example limit or hours.",
        +              "type": "string"
        +            },
        +            "by": {
        +              "description": "Why it was cut: keyless for the free ceiling, plan_max for a paid ceiling, tool_max for a ceiling no plan raises.",
        +              "type": "string"
        +            },
        +            "max": {
        +              "description": "The ceiling that applied.",
        +              "type": "number"
        +            },
        +            "requested": {
        +              "description": "The value the caller asked for.",
        +              "type": "number"
        +            }
        +          },
        +          "required": [
        +            "argument",
        +            "requested",
        +            "applied",
        +            "max",
        +            "by"
        +          ],
        +          "type": "object"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "Present only when an argument was cut down to a ceiling. Absent means nothing was clamped, so a smaller number than you asked for is the data and not a limit."
        +    },
        +    "caveat": {
        +      "anyOf": [
        +        {
        +          "type": "string"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "A real limit on this answer, in one clause. Present only when something genuinely narrows what can be said."
        +    },
        +    "coin": {
        +      "anyOf": [
        +        {
        +          "type": "string"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "The coin this profile describes."
        +    },
        +    "coverage": {
        +      "description": "How much of the window carries a recorded reading."
        +    },
        +    "depth_note": {
        +      "anyOf": [
        +        {
        +          "type": "string"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "How far back the data behind this answer reaches."
        +    },
        +    "note": {
        +      "anyOf": [
        +        {
        +          "type": "string"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "One line saying what the numbers cover, or why there are none. Read it before reporting any zero as a market reading."
        +    },
        +    "pressure": {
        +      "description": "Flow measured against price. state is absorption, distribution or confirming. When there is no state, reason names why (price-coverage, flow-too-small, price-flat), which means not enough to say, never no activity."
        +    },
        +    "sources": {
        +      "description": "The CEX, on-chain and Hyperliquid split, including sourceSplit when those markets sit on opposite sides."
        +    },
        +    "venues": {
        +      "description": "Which of the streamed exchanges the flow actually sits on and how concentrated it is. split marks two exchanges on opposite sides; partial marks a window whose exchange dollars are unknown rather than zero."
        +    },
        +    "windows": {
        +      "anyOf": [
        +        {
        +          "additionalProperties": {},
        +          "propertyNames": {
        +            "type": "string"
        +          },
        +          "type": "object"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "Net flow per window, keyed 1h, 4h, 24h and 7d. A window states hoursCovered only when it holds fewer hours than it spans."
        +    }
        +  },
        +  "type": "object"
        +}
    • Changedwhale_radar1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": {},
        +  "properties": {
        +    "available": {
        +      "anyOf": [
        +        {
        +          "type": "boolean"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "False when this lane could not answer: a producer is dark, the pair sits outside this plan, or the argument named something we do not carry. Absent or true means the numbers are a real reading, not a guess."
        +    },
        +    "blurredMagnitude": {
        +      "anyOf": [
        +        {
        +          "type": "boolean"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "Keyless only: true because dollar sizes on held-back coins are rounded away."
        +    },
        +    "building": {
        +      "anyOf": [
        +        {
        +          "type": "boolean"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "True while the ranking has not been published yet."
        +    },
        +    "freeCoins": {
        +      "anyOf": [
        +        {
        +          "items": {
        +            "type": "string"
        +          },
        +          "type": "array"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "Keyless only: the coins whose numbers come through unblurred."
        +    },
        +    "freshness": {
        +      "anyOf": [
        +        {
        +          "type": "string"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "How often the ranking is rebuilt."
        +    },
        +    "generatedAt": {
        +      "anyOf": [
        +        {
        +          "anyOf": [
        +            {
        +              "type": "string"
        +            },
        +            {
        +              "type": "number"
        +            }
        +          ]
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "When the ranking was computed."
        +    },
        +    "lockedCount": {
        +      "anyOf": [
        +        {
        +          "type": "number"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "Keyless only: how many coins were held back."
        +    },
        +    "lockedUnusualCount": {
        +      "anyOf": [
        +        {
        +          "type": "number"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "Keyless only: how many of the held-back coins are the unusual ones."
        +    },
        +    "note": {
        +      "anyOf": [
        +        {
        +          "type": "string"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "One line saying what the numbers cover, or why there are none. Read it before reporting any zero as a market reading."
        +    },
        +    "windows": {
        +      "description": "The ranked coins per window, keyed 1h, 4h and 24h. Each row names the coin, its dollars in the window and how that compares with the same coin trailing hours."
        +    }
        +  },
        +  "type": "object"
        +}
    • Changedwhale_tape4 fields changed
      • addedInput schema / properties / coin / description
        Added value: +"Filter to one coin, for example BTC. A pair like ETH/USD works too, the quote leg is dropped. One symbol, not a list. Omit for every coin."
      • addedInput schema / properties / min_usd / description
        Added value: +"Smallest trade to return, in US dollars, for example 5000000 for $5M and up. Omit for everything already large enough to count as whale-sized. Keyless calls hold on-chain swaps to $250K and up regardless. A size filter runs after the fetch, so scan_capped in the payload states whether the search reached its own ceiling and older matches may exist."
      • addedInput schema / properties / source / description
        Added value: +"Which markets to read: cex for the 15 streamed exchanges, dex for on-chain swaps on Ethereum, Base and Arbitrum, all for both merged. Defaults to all."
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": {},
        +  "properties": {
        +    "access_note": {
        +      "anyOf": [
        +        {
        +          "type": "string"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "What this connection could not return and what lifts it. Always pass this on to the user: it is the only place that information appears."
        +    },
        +    "available": {
        +      "anyOf": [
        +        {
        +          "type": "boolean"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "False when this lane could not answer: a producer is dark, the pair sits outside this plan, or the argument named something we do not carry. Absent or true means the numbers are a real reading, not a guess."
        +    },
        +    "capped": {
        +      "anyOf": [
        +        {
        +          "additionalProperties": false,
        +          "properties": {
        +            "applied": {
        +              "description": "The value actually used.",
        +              "type": "number"
        +            },
        +            "argument": {
        +              "description": "Which argument was cut down, for example limit or hours.",
        +              "type": "string"
        +            },
        +            "by": {
        +              "description": "Why it was cut: keyless for the free ceiling, plan_max for a paid ceiling, tool_max for a ceiling no plan raises.",
        +              "type": "string"
        +            },
        +            "max": {
        +              "description": "The ceiling that applied.",
        +              "type": "number"
        +            },
        +            "requested": {
        +              "description": "The value the caller asked for.",
        +              "type": "number"
        +            }
        +          },
        +          "required": [
        +            "argument",
        +            "requested",
        +            "applied",
        +            "max",
        +            "by"
        +          ],
        +          "type": "object"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "Present only when an argument was cut down to a ceiling. Absent means nothing was clamped, so a smaller number than you asked for is the data and not a limit."
        +    },
        +    "coin": {
        +      "anyOf": [
        +        {
        +          "type": "string"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "The coin filter that was applied, or null for every coin."
        +    },
        +    "count": {
        +      "anyOf": [
        +        {
        +          "type": "number"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "How many rows this reply carries."
        +    },
        +    "covered": {
        +      "anyOf": [
        +        {
        +          "type": "boolean"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "False when the coin asked for is not one this feed streams, so nothing was searched. That is different from a quiet market."
        +    },
        +    "depth_note": {
        +      "anyOf": [
        +        {
        +          "type": "string"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "How far back the data behind this answer reaches."
        +    },
        +    "matched": {
        +      "anyOf": [
        +        {
        +          "type": "number"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "How many trades matched the filters before the row cap was applied."
        +    },
        +    "note": {
        +      "anyOf": [
        +        {
        +          "type": "string"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "One line saying what the numbers cover, or why there are none. Read it before reporting any zero as a market reading."
        +    },
        +    "scan_capped": {
        +      "anyOf": [
        +        {
        +          "type": "boolean"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "True when the search hit its own depth ceiling, so older matches may exist that were never looked at."
        +    },
        +    "scan_note": {
        +      "anyOf": [
        +        {
        +          "type": "string"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "Says the search stopped at its ceiling, so this is not the complete set for the window."
        +    },
        +    "scanned_rows": {
        +      "anyOf": [
        +        {
        +          "type": "number"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "How deep the search went before filtering. Present only when a coin or size filter ran."
        +    },
        +    "source": {
        +      "anyOf": [
        +        {
        +          "type": "string"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "Which markets were read: cex, dex or all."
        +    },
        +    "trades": {
        +      "anyOf": [
        +        {
        +          "items": {},
        +          "type": "array"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "The matching trades, newest first. A CEX row carries pair, exchange, price, size and side; an on-chain row carries the token, the wallet and the dollar size. Every row carries source."
        +    },
        +    "truncated": {
        +      "anyOf": [
        +        {
        +          "type": "boolean"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "True when more rows matched than were returned, so what you have is a page and not the whole set."
        +    }
        +  },
        +  "type": "object"
        +}
    • Changedwhale_trades4 fields changed
      • addedInput schema / properties / coin / description
        Added value: +"Filter to one coin, for example BTC. A pair like ETH/USD works too, the quote leg is dropped. One symbol, not a list. Omit for every coin."
      • addedInput schema / properties / min_usd / description
        Added value: +"Smallest trade to return, in US dollars, for example 5000000 for $5M and up. Omit for everything already large enough to count as whale-sized. Keyless calls hold on-chain swaps to $250K and up regardless. A size filter runs after the fetch, so scan_capped in the payload states whether the search reached its own ceiling and older matches may exist."
      • addedInput schema / properties / source / description
        Added value: +"Which markets to read: cex for the 15 streamed exchanges, dex for on-chain swaps on Ethereum, Base and Arbitrum, all for both merged. Defaults to all."
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": {},
        +  "properties": {
        +    "access_note": {
        +      "anyOf": [
        +        {
        +          "type": "string"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "What this connection could not return and what lifts it. Always pass this on to the user: it is the only place that information appears."
        +    },
        +    "available": {
        +      "anyOf": [
        +        {
        +          "type": "boolean"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "False when this lane could not answer: a producer is dark, the pair sits outside this plan, or the argument named something we do not carry. Absent or true means the numbers are a real reading, not a guess."
        +    },
        +    "capped": {
        +      "anyOf": [
        +        {
        +          "additionalProperties": false,
        +          "properties": {
        +            "applied": {
        +              "description": "The value actually used.",
        +              "type": "number"
        +            },
        +            "argument": {
        +              "description": "Which argument was cut down, for example limit or hours.",
        +              "type": "string"
        +            },
        +            "by": {
        +              "description": "Why it was cut: keyless for the free ceiling, plan_max for a paid ceiling, tool_max for a ceiling no plan raises.",
        +              "type": "string"
        +            },
        +            "max": {
        +              "description": "The ceiling that applied.",
        +              "type": "number"
        +            },
        +            "requested": {
        +              "description": "The value the caller asked for.",
        +              "type": "number"
        +            }
        +          },
        +          "required": [
        +            "argument",
        +            "requested",
        +            "applied",
        +            "max",
        +            "by"
        +          ],
        +          "type": "object"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "Present only when an argument was cut down to a ceiling. Absent means nothing was clamped, so a smaller number than you asked for is the data and not a limit."
        +    },
        +    "coin": {
        +      "anyOf": [
        +        {
        +          "type": "string"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "The coin filter that was applied, or null for every coin."
        +    },
        +    "count": {
        +      "anyOf": [
        +        {
        +          "type": "number"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "How many rows this reply carries."
        +    },
        +    "covered": {
        +      "anyOf": [
        +        {
        +          "type": "boolean"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "False when the coin asked for is not one this feed streams, so nothing was searched. That is different from a quiet market."
        +    },
        +    "depth_note": {
        +      "anyOf": [
        +        {
        +          "type": "string"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "How far back the data behind this answer reaches."
        +    },
        +    "matched": {
        +      "anyOf": [
        +        {
        +          "type": "number"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "How many trades matched the filters before the row cap was applied."
        +    },
        +    "note": {
        +      "anyOf": [
        +        {
        +          "type": "string"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "One line saying what the numbers cover, or why there are none. Read it before reporting any zero as a market reading."
        +    },
        +    "scan_capped": {
        +      "anyOf": [
        +        {
        +          "type": "boolean"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "True when the search hit its own depth ceiling, so older matches may exist that were never looked at."
        +    },
        +    "scan_note": {
        +      "anyOf": [
        +        {
        +          "type": "string"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "Says the search stopped at its ceiling, so this is not the complete set for the window."
        +    },
        +    "scanned_rows": {
        +      "anyOf": [
        +        {
        +          "type": "number"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "How deep the search went before filtering. Present only when a coin or size filter ran."
        +    },
        +    "source": {
        +      "anyOf": [
        +        {
        +          "type": "string"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "Which markets were read: cex, dex or all."
        +    },
        +    "trades": {
        +      "anyOf": [
        +        {
        +          "items": {},
        +          "type": "array"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "The matching trades, newest first. A CEX row carries pair, exchange, price, size and side; an on-chain row carries the token, the wallet and the dollar size. Every row carries source."
        +    },
        +    "truncated": {
        +      "anyOf": [
        +        {
        +          "type": "boolean"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "True when more rows matched than were returned, so what you have is a page and not the whole set."
        +    }
        +  },
        +  "type": "object"
        +}
  13. 28 tool updates
    • First observedcrypto_news
    • First observeddefi_liquidations
    • First observeddefi_summary
    • First observeddex_wallet
    • First observedflag_outcomes
    • First observedfunding_matrix
    • First observedhl_board
    • First observedhl_wallet
    • First observedhl_whales
    • First observedliq_zones
    • First observedliquidations
    • First observedmarket_extremes
    • First observedmarket_history
    • First observedmarket_liquidations
    • First observedmarket_overview
    • First observedmarket_screener
    • First observedmarket_snapshot
    • First observedmy_access
    • First observedonchain_whales
    • First observedsmart_money
    • First observedsqueeze_score
    • First observedtrade_context
    • First observedwhale_context
    • First observedwhale_flow
    • First observedwhale_profile
    • First observedwhale_radar
    • First observedwhale_tape
    • First observedwhale_trades

Related MCP Connectors

Related MCP Servers

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources