Stocks, ETFs & crypto, read as market state — not a wall of candles.
Fewer tokens. Fewer illusions.
Point it at any ticker and timeframe; get ~500 tokens of regime, levels and interpreted indicators back — where the raw candles behind them would cost ~400,000. And every chart pattern carries the number nobody prints: how often the shape actually beats its own market's baseline. Measured across 105 cases, the answer is the uncomfortable part just below.
StocksETFsCrypto1m → 1wBinance + YahooA real /v1/demo response, rendered — the same JSON your model receives. The hit rate reads bearish. It is what an arbitrary 10-day window does anyway. Measured lift: none.
Three textbook patterns. Three markets. Three times no lift.
Each shape scored a geometric 1.00 — picture-perfect. Here is how often each actually resolved in its own direction over the next 10 bars, and next to it the rate an arbitrary window in the same market hits without any pattern at all. The gap between the two is the only part the pattern is responsible for.
The same measurement, read against the right reference — bullish_engulfing · 1d · 0.75–1.00.
One POST in. One honest read out.
This is a live /v1/demo exchange — the same JSON your model receives. No charting to squint at, no number-wall to hallucinate over: the market state is already digested into regime, levels, indicator state, and one plain-language line.
The moment that matters is the pattern block. A textbook bearish engulfing — geometric shape a perfect 1.00 — resolved bearish 41.3% of the time across 12,842 occurrences in US stocks & ETFs. That reads like a finding until you measure the other number: an arbitrary 10-day window on the same universe closes lower 42.0% of the time, with no pattern involved. The candle's contribution is −0.7pp ± 2.6pp — nothing. The payload carries both numbers, because only the pair can be read. Ask any other pattern API for the second one.
- numbers the model miscounts
- invented indicator values
- a read the model acts on
- state, not arithmetic
# request — free, no key
curl -X POST https://patternfetch.com/v1/demo \
-H "content-type: application/json" \
-d '{ "ticker": "AAPL", "timeframe": "1d" }'
↓ response (abridged — real field names)
{
"header": { "sym": "AAPL", "tf": "1d", "src": "yahoo",
"n": 120, "adjusted": true },
"codec": { "rows": "251.01,256.08,249.34,254.94,55969200;…",
"sax": "ddcdeecd", "precision": 2 },
"analysis": {
"regime": { "trend": "up", "strength": 0.63,
"volPct": 2.83 },
"indicators": {
"rsi": { "v": 60.28, "state": "neutral" },
"ema": { "v": 311.63, "state": "above_20_50" } },
"levels": {
"resistance": [{ "price": 317.17, "strength": 0.67 }],
"support": [{ "price": 272.60, "strength": 0.67 }] },
"patterns": [{
"name": "bearish_engulfing",
"confidence": 1, "at": 10, "span": 2,
"evidence": {
"scope": "US stocks & ETFs",
"horizon": 10, "n": 12842,
"hitRate": 0.413,
"lift": {
"baseline": 0.420, "lift": -0.007,
"ci95Clustered": 0.026,
"informative": false,
"reading": "indistinguishable-from-baseline"
} } }],
"nl": "AAPL: uptrend (moderate), +4.84% last 1d,
RSI 60.28 (neutral), bearish_engulfing
(conf 1, hist 41.3% vs baseline 42.0% —
no measurable lift)." },
"methodologyUrl": "https://patternfetch.com/methodology"
}
evidence.hitRate is the realizable gross directional base rate: the fraction of non-overlapping historical occurrences whose close-to-close return over the 10 bars after the pattern became knowable went its expected direction. lift.baseline is the same measurement with no pattern required; lift.lift is the difference between the two, ci95Clustered its cluster-robust interval, and informative / reading say whether that difference clears the interval — read those two rather than the hit rate on its own. No lookahead, no stop, fees or slippage. Not a prediction.
One schema. Every asset.
Everything below comes back from a single /v1/brief call — identical whether the ticker is a stock, an ETF or a crypto pair.
Patterns + baseline & lift
Chart and candlestick patterns with a geometric shape score, the backtested hit rate, and the pattern-free baseline it has to beat — plus the cluster-robust interval on the difference. The useful part: it reports a null result as a null result.
Support & resistance
Clustered swing levels with a 0–1 strength, so your model weights the wall it's actually near.
Trend & regime
Direction (up / down / range), a 0–1 strength, and volatility as ATR percent — the market's mood in one row.
Interpreted indicators
RSI, EMA and ATR returned as state — "neutral", "above 20 & 50" — not a wall of decimals to miscount.
Multi-timeframe alignment
One /v1/multi call reads 1m → 1w together and tells you where the timeframes agree — and where they don't.
Historical analogs
Similar past windows returned as a full outcome distribution — winners and losers, mean and median. Not a prediction.
Compact candles
A token-efficient OHLCV codec plus a SAX shape fingerprint — the whole series, a fraction of the tokens.
Delta & one-line summary
Poll only what changed since your last brief, and read the whole state as a single natural-language line.
Turn lookup into discovery.
Every other endpoint answers about a ticker you already named. The screener flips it: scan US stocks, ETFs and crypto for the tickers currently in a given regime or printing a chart/candlestick pattern, ranked by the backtested base rate, with each row's baseline and lift alongside — so your model sorts by regime and level structure rather than by a shape score that means nothing on its own. Same rule as everywhere else: a null result is labelled null. Explore the screener →
Endpoints & MCP.
A small, honest REST surface — and the same tools over MCP for agents. Pay per call; the demo is free.
| Endpoint | Returns | Price |
|---|---|---|
| POST /v1/brief | Full market-state brief | $0.01 |
| POST /v1/multi | Multi-timeframe alignment (1m → 1w) | $0.025 |
| POST /v1/delta | Only what changed since your last brief | $0.008 |
| POST /v1/candles | Compact candle codec + SAX shape | $0.005 |
| POST /v1/analogs | Historical analogs + outcome distribution | $0.05 |
| POST /v1/scan | Screener — tickers by regime/pattern, ranked by base rate | $0.02 |
| POST /v1/demo | No-signup brief (rate-limited) | free |
Assets: US stocks, ETFs (Yahoo, adjusted) + crypto (Binance, realtime). Machine-readable OpenAPI · llms.txt · methodology.
Six MCP tools, one-click connect
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, nothing to paste
claude mcp add --transport http \
patternfetch https://patternfetch.com/mcp
{ "mcpServers": {
"patternfetch": {
"url": "https://patternfetch.com/mcp"
} } }
Or let the agent pay as it goes. x402 settles ~$0.01 per call in USDC on Base — no account, no card, no key — discoverable at /.well-known/x402.json.
Digest, not dump.
A raw OHLCV response is hundreds of thousands of tokens your model miscounts. The same market, read as state, is a few hundred. Watch the wall of candles collapse into one honest brief.
Real /v1/brief output — ~400K raw OHLCV tokens digested into a ~500-token read your agent can act on.
Pay per call — or subscribe, if that's cheaper.
No seats, no minimums. Start on a free no-signup demo or a free key with $3.00 starter credit (300 briefs), no card. Then pay per call — above roughly 1,900 briefs a month, Studio at $19/month is the cheaper of the two. Credits never expire.
Built for the desk and the agent.
One schema, two front doors. Read it yourself, or hand it to a model that pays for its own calls — over x402, MCP or one-click OAuth.
An honest market read on the tickers you actually watch.
Skip the chart-squinting and the indicator soup. Get the regime, the levels, and a plain-language line — plus a straight answer on whether a pattern means anything at all.
- A one-line summary you can read in a glance — no number-walls.
- Know when a "textbook" pattern is statistically just noise.
- Stocks, ETFs and crypto — the same read across all of them.
- No charting UI, no platform to learn. Just the state of the market.
MCP-native. Six tools. Pays for its own calls.
Connect over MCP in one click — nothing to paste. Your agent gets a digested market state instead of a candle wall, and settles each call itself over x402.
- Six MCP tools, one schema across every asset class.
- x402 (USDC on Base) — ~$0.01 a call, no account, no card, no key.
- ~800× fewer tokens than raw OHLCV — and no numeric hallucination.
- One-click OAuth, or a Bearer key, or a local stdio bridge.
Honest by construction.
Patterns, levels, regime and indicators are computed server-side from adjusted OHLCV. Base rates are measured with no lookahead — a chart pattern is scored only from the bar it becomes knowable. It is not a prediction and not a strategy backtest, and we say so in every payload.
Read the methodology