One call reads every timeframe — and tells you when they disagree.
POST /v1/multi returns a token-compact market-state brief for each timeframe you ask for, plus a cross-timeframe alignment read: do the trends agree, or split? The divergence is spelled out — 1h up / 4h up / 1d down — so your model sees a lower-timeframe bounce inside a higher-timeframe downtrend for exactly what it is. Stocks, ETFs and crypto, one schema, one round trip.
One /v1/multi call. The lower timeframes are climbing while the daily still points down — a counter-trend bounce, made explicit as data (aligned:false, direction:"range"). Descriptive market state, never a directive.
One POST /v1/multi (or the MCP tool patternfetch_multi) with { ticker, timeframes[] } returns a compact views array — trend, strength and a one-line nl per timeframe — the full briefs alongside, and an alignment object: the trend per timeframe, an aligned boolean, the shared direction, and a divergence string like "1h up / 4h up / 1d down" when they conflict. Default timeframes 1h, 4h, 1d (up to four). One schema for stocks, ETFs and crypto. $0.025 a call — less than three separate briefs.
The signal isn't any one timeframe — it's whether they agree.
A trend that shows up on the 1h, the 4h and the 1d is a different animal from a 1h pop against a falling daily. Reading them one at a time hides the relationship. The alignment read surfaces it in a single call.
All timeframes point the same way
When 1h, 4h and 1d agree, a setup on the lower timeframe is running with the higher-timeframe tide, not against it. aligned:true, and direction is the shared trend. Fewer surprises from a bigger-picture move you weren't looking at.
A lower timeframe fights the higher one
A 1h up-move while the daily is down is often a counter-trend bounce inside a larger decline — the classic trap for a model that only looked at the short timeframe. aligned:false, direction:"range", and the split is named.
This is exposed as descriptive data: patternfetch surfaces the agreement or the split and stops there. What to do with it is your model's call, not ours — the alignment read is impersonal market state, not a signal to act on.
Request in, three briefs + an alignment read out.
A real /v1/multi shape for NVDA across 1h, 4h, 1d. The full per-timeframe briefs travel in briefs; the compact views and alignment are the cross-timeframe summary.
POST https://patternfetch.com/v1/multi
Authorization: Bearer pf_…
Content-Type: application/json
{ "ticker": "NVDA",
"timeframes": ["1h", "4h", "1d"] }
{ "sym": "NVDA",
"views": [
{ "tf": "1h", "trend": "up", "strength": 0.34 },
{ "tf": "4h", "trend": "up", "strength": 0.52 },
{ "tf": "1d", "trend": "down", "strength": 0.28 }
],
"alignment": {
"trends": { "1h": "up", "4h": "up", "1d": "down" },
"aligned": false,
"direction": "range",
"divergence": "1h up / 4h up / 1d down"
},
"nl": "NVDA: timeframes diverge — 1h up / 4h up / 1d down." }
Each views[i] also carries the per-timeframe one-line nl, and the full brief for every timeframe (candles, patterns with base rates, levels, regime, indicators) rides along in briefs — so one round trip gives your model both the detail and the cross-timeframe read. See it live →
aligned is computedThe timeframes are aligned unless at least one is up while another is down. Ranging timeframes never create a conflict on their own. When aligned, direction is the shared trend (up, down or range) and divergence is null; when conflicting, direction is range and divergence lists each timeframe and its trend, shortest to longest. Deterministic and impersonal — no new data source, just the per-timeframe regimes stacked.
Same call for a stock, an ETF or a coin.
Swap the ticker and the alignment logic is identical. Here the higher and lower timeframes agree — an aligned-up read on BTC/USDT.
# POST /v1/multi { "ticker": "BTC/USDT", "timeframes": ["1h","4h","1d"] }
{ "sym": "BTC/USDT",
"alignment": {
"trends": { "1h": "up", "4h": "up", "1d": "up" },
"aligned": true, "direction": "up", "divergence": null },
"nl": "BTC/USDT: trend aligned up across 1h, 4h, 1d." }
- Stocks & ETFs come from Yahoo, split & dividend adjusted (delayed / EOD); crypto from Binance in real time. Examples:
AAPL,SPY,NVDA,QQQ,BTC/USDT,ETH/USDT. - Timeframes span
1m → 1w; pick up to four per call. A common trio is1h, 4h, 1d; a swing view might use4h, 1d, 1w. - The per-timeframe briefs carry the same evidence-calibrated patterns as
/v1/brief— so an aligned trend that also has a real pattern base rate behind it reads differently from one that doesn't.
One call, cheaper than three.
The multi view bundles a brief per timeframe and the alignment read into a single metered call — fewer round trips and fewer tokens than firing three briefs and diffing them yourself.
| Endpoint | Returns | Price |
|---|---|---|
| POST /v1/multi | Brief per timeframe + cross-timeframe alignment | $0.025 |
| POST /v1/brief | Single-timeframe market-state brief | $0.01 |
| POST /v1/demo | No-signup brief (rate-limited) | free |
Try the cross-timeframe view on the free demo — no signup. Then a free key with $0.05 starter credit from one call, no card. Pay with x402 (USDC on Base, no account) or Stripe. Credits never expire. Full pricing →
patternfetch_multi over MCP.
Streamable HTTP at /mcp. Discovery (tools/list) is free — no key; a tools/call is billed like the REST route.
# one line — OAuth mints a free key
claude mcp add --transport http \
patternfetch https://patternfetch.com/mcp
# then call the tool
patternfetch_multi({
ticker: "AAPL",
timeframes: ["4h", "1d", "1w"] })
x402 settles each call in USDC on Base — no account, no card, no key — discoverable at /.well-known/x402.json. The agent pays for its own multi-timeframe reads autonomously. A tools/call is billed exactly like POST /v1/multi.
Questions.
What does /v1/multi return?
views array with a compact per-timeframe read (tf, trend, strength, one-line nl), the full briefs alongside, and an alignment object: trends per timeframe, an aligned boolean, the shared direction, and a divergence string like "1h up / 4h up / 1d down" when they conflict. Default timeframes are 1h, 4h, 1d; request up to four.When does alignment or divergence matter?
How is aligned computed?
up while another is down. Ranging timeframes never create a conflict on their own. When aligned, direction is the shared trend and divergence is null; when conflicting, direction is range and divergence lists each timeframe and its trend, shortest to longest.Stocks as well as crypto? And the price?
POST /v1/multi is $0.025 per call — cheaper than three separate briefs — and there's a free no-signup demo. The MCP tool patternfetch_multi returns the same view.