What "Dry Powder" Actually Means On-Chain
Every market commentator throws around the phrase "stablecoin dry powder." Few of them measure it. The intuition is simple: stablecoins parked on exchanges are capital staged to buy risk assets — USDT or USDC sitting in a Binance, Coinbase, or Bybit hot wallet is one click away from BTC or an alt.
When that pool grows, the market is being loaded with bid potential. When it shrinks, capital has either deployed (bullish executed) or off-ramped (bearish departed). Either way, the balance change is a meaningful signal that AI trading agents can read directly from RPC nodes — not scraped, not estimated.
Crypto Data API ships this as /api/v1/on-chain/stablecoin-reserves and a z-scored summary at /api/v1/on-chain/stablecoin-reserves/dry-powder. This post shows how an LLM-driven trading agent should consume both.
What the Reserves Endpoint Returns
One call gives you the aggregate stablecoin position across five tracked CEXs (Binance, Coinbase, Kraken, Bybit, OKX) and three chains (Ethereum, Tron, BSC):
curl -H "X-API-Key: cdk_live_yourkey" \
"https://cryptodataapi.com/api/v1/on-chain/stablecoin-reserves"Real-world response (live numbers at time of writing):
{
"as_of": 1716928800,
"total_usd": 2435395205,
"by_exchange": {
"binance": {"total_usd": 1688549490, "symbols": {"USDT": 1319754276, "USDC": 365187809}},
"bybit": {"total_usd": 680239949, "symbols": {"USDT": 620420075}},
"coinbase": {"total_usd": 66605485}
},
"by_chain": {"eth": {...}, "tron": {"USDT": 664357508}, "bsc": {...}},
"tracked_exchanges": ["binance", "coinbase", "kraken", "bybit", "okx"]
}This is the raw position. The signal lives in how it's moving.
The Dry-Powder Z-Score: One Number, Clear Action
For agents that want a single regime read, the companion endpoint distills the position into a 30-day z-score and a verbal signal:
curl -H "X-API-Key: cdk_live_yourkey" \
"https://cryptodataapi.com/api/v1/on-chain/stablecoin-reserves/dry-powder"{
"current_usd": 2435395205,
"mean_30d": 2300000000,
"stdev_30d": 50000000,
"zscore": 1.7,
"signal": "accumulating",
"samples": 96
}Decision matrix:
- z > +1 → "accumulating": capital staging on exchanges. Bullish setup — agents should lean toward longs and reduce hedge weights.
- -1 ≤ z ≤ +1 → "neutral": normal range. No regime change to react to.
- z < -1 → "depleting": capital deployed or off-ramped. Bearish for fresh longs; if pairs with a price drop, often signals exhaustion of bid.
- signal = "unknown": insufficient history (less than ~8 samples). Skip the component in your composite read.
The z-score is computed against the trailing 30 days, so seasonal effects (weekend lull, month-end rebalancing) wash out naturally.
Wiring the Dry-Powder Signal Into an LLM Agent
The signal updates every 15 minutes (matching the collector cadence). A practical agent loop:
import asyncio, httpx
API = "https://cryptodataapi.com/api/v1"
KEY = "cdk_live_yourkey"
HEADERS = {"X-API-Key": KEY}
async def dry_powder() -> dict:
async with httpx.AsyncClient(timeout=10) as c:
r = await c.get(
f"{API}/on-chain/stablecoin-reserves/dry-powder",
headers=HEADERS,
)
return r.json()
def to_prompt_fragment(d: dict) -> str | None:
signal, z = d.get("signal"), d.get("zscore")
if signal in ("unknown", "neutral"):
return None # don't waste tokens describing baseline
direction = "bullish bias" if signal == "accumulating" else "bearish bias"
return (
f"On-chain dry-powder: {signal} (z={z:+.2f}). "
f"Current CEX stables ${d['current_usd']:,.0f} vs 30d mean "
f"${d['mean_30d']:,.0f}. Lean: {direction}."
)
async def loop():
while True:
frag = to_prompt_fragment(await dry_powder())
if frag:
await inject_into_agent_context(frag)
await asyncio.sleep(900) # 15 minThe to_prompt_fragment helper produces text designed for direct injection into a Claude or GPT system prompt. Notice it returns None on neutral / unknown — the agent shouldn't carry stale or non-informative context in its window.
How Dry Powder Pairs With Other On-Chain Signals
Dry-powder accumulation is most powerful when it confirms or contradicts another signal. Three high-value combinations:
| Dry powder | Exchange flow (net 24h) | MVRV zone | Net read |
|---|---|---|---|
| Accumulating (z > 1) | Net outflow | Accumulation / Capitulation | Strong bull setup |
| Accumulating | Net inflow | Neutral | Mixed — wait for confirmation |
| Neutral | Net inflow spike (z > 2) | Elevated | Tactical bearish — hedge |
| Depleting (z < -1) | Net inflow | Euphoria | Top warning |
| Depleting | Net outflow | Capitulation | Capital fleeing — defensive |
The combinations are why agents that consume only one on-chain signal underperform agents that synthesize several. The /on-chain/score endpoint folds all of these into a single 0-100 composite — useful as a backstop, but agents that read components individually retain more interpretive power.
Why This Beats Aggregate Stablecoin Mcap Numbers
You may already be reading total stablecoin market cap from DeFiLlama. That number is useful but misses the directional question agents care about. Stablecoin mcap rising tells you new supply is being minted somewhere; it does not tell you whether that supply landed at a CEX (ready to buy) or in a DeFi protocol (already deployed).
The CEX-scoped reserves answer the specific question: "Is bid-ready capital piling up?" That's different from "Is there more stablecoin in the world?"
- Aggregate mcap includes DeFi TVL, bridged supply, and treasury balances. Useful for macro narrative; weak for trading.
- CEX-scoped reserves isolate the wallets that can sweep into spot in a single transaction. Useful for short-horizon agents.
For best results, watch both. A rising aggregate without rising CEX reserves means stablecoin issuance is going to DeFi or chain bridges — bullish for DeFi tokens, neutral for BTC/ETH spot.
When Should an AI Agent Distrust the Dry-Powder Signal?
Three known failure modes:
- Hot-wallet rotation events. Binance periodically moves balances between hot wallets and our tracked addresses. A $200M shift might look like a +1.5σ accumulation but is purely internal. Confirm by cross-checking per-exchange breakdown — if only one exchange jumped while others stayed flat, treat with skepticism.
- Stablecoin issuance cycles. When Tether mints fresh USDT to Binance Treasury, reserves jump but no new bidders arrived. Cross-reference Tether minting events.
- Registry gaps. The tracked address list covers top-5 CEXs but misses smaller venues and OTC desks. If Coinbase shows neutral but on-chain inflow to known OTC clusters is spiking, dry powder may be growing off-radar.
A robust agent treats the signal as weight of evidence, not as a deterministic trigger. Combine with at least one other on-chain reading (whale accumulation, exchange flows) and a macro overlay (MVRV, Hash Ribbon) for institutional-grade decisions.
How to Plug Dry Powder Into Your Agent Today
Three steps for the minimum integration:
- Get a free API key at cryptodataapi.com.
- Add a 15-minute polling job hitting
/api/v1/on-chain/stablecoin-reserves/dry-powder. - Inject the prompt fragment into your LLM context only when
signal != "neutral".
For a fuller stack, layer this with companion endpoints:
/on-chain/exchange-flows/spike-alertsfor tactical entry/exit timing./on-chain/dormancy/btcfor MVRV-zone macro context./on-chain/whales/accumulation-scorefor confirmation that real money is moving./on-chain/scorefor the all-in composite read.
Partners like Cabal Trader already consume this feed because the source is RPC-level — no scraping, no third-party UI delays. The balance you read is the balance on chain.



