CuckooTrade is a free, deterministic API that serves realistic synthetic data over the wire formats of Alpaca, Alpha Vantage, and Polygon. Build features, run CI, and give demos against stable market data — then switch to your real provider by changing one line.
$ curl 'https://cuckootrade.com/api/v1/alpaca/v2/stocks/bars?symbols=CUCKOO&timeframe=1Day'
Same paths, same parameters, same JSON shape as the provider you're replacing — Alpaca, Alpha Vantage, or Polygon. Your client works unmodified: change the base URL to develop against CuckooTrade, then point it back when you're ready for live data.
The provider lives in the path — /api/v1/alpaca/…,
/api/v1/alphavantage/…, /api/v1/polygon/… —
and every surface serves the same deterministic world, so a symbol's
bars agree across all of them.
client = StockHistoricalDataClient(
api_key, secret_key,
- url_override="https://data.alpaca.markets",
+ url_override="https://cuckootrade.com/api/v1/alpaca",
)
- curl 'https://www.alphavantage.co/query? + curl 'https://cuckootrade.com/api/v1/alphavantage/query? function=TIME_SERIES_DAILY&symbol=IBM&apikey=any'
- curl 'https://api.polygon.io/v2/aggs/ + curl 'https://cuckootrade.com/api/v1/polygon/v2/aggs/ ticker/MSFT/range/1/day/2026-07-01/2026-08-01'
Real market data APIs need keys, cost money, rate-limit your CI, and go quiet when markets close. CuckooTrade removes all of that for the phases where real data isn't the point.
Your first request works from curl, CI, or any HTTP client — no account and no secrets to manage. Free at 60 requests per minute per address, with standard rate-limit headers.
Every bar is a pure function of symbol, timestamp, and seed. Identical requests return identical bytes, so committed fixtures stay valid and test runs stay reproducible.
The data follows the real NYSE calendar, but the API never closes. Charts stay realistic and streams keep ticking on nights, weekends, and holidays.
Reserved symbols return scripted market behavior on demand — crashes, halts, overnight gaps, fat-finger spikes. Each pattern repeats on a calendar anchor, so it appears in any 30-day window and reproduces in every environment. Select a ticker to open it in the playground.
Don't take our word for it. Your browser is fetching the identical request twice right now and comparing SHA-256 hashes of the two raw responses.
Because every bar is computed, not stored, data you fetched yesterday never shifts underneath you — and neither does next month's re-run of your test suite. The guarantee is versioned: if the generator ever changes, that becomes generation 2, and generation 1 stays queryable.
Plain HTTP with permissive CORS — no client library required. Use the
official Alpaca SDKs, fetch from the browser, script it with curl, or
subscribe to the live SSE stream — the ticker running at the top of
this page is that stream, and curl -N gets you the exact
same feed.
AI coding tools are covered too: a machine-readable index at /api and llms.txt let them discover and use the whole API on their own.
curl 'https://cuckootrade.com/api/v1/alpaca/v2/stocks/bars?symbols=AAPL,CRASH&timeframe=1Day&start=2026-07-01'
from datetime import datetime
from alpaca.data.historical import StockHistoricalDataClient
from alpaca.data.requests import StockBarsRequest
from alpaca.data.timeframe import TimeFrame
client = StockHistoricalDataClient(
api_key="any", secret_key="any", # never checked
url_override="https://cuckootrade.com/api/v1/alpaca",
)
bars = client.get_stock_bars(StockBarsRequest(
symbol_or_symbols=["AAPL", "CRASH"],
timeframe=TimeFrame.Day,
start=datetime(2026, 7, 1),
))
print(bars["CRASH"][0])
const res = await fetch(
'https://cuckootrade.com/api/v1/alpaca/v2/stocks/bars' +
'?symbols=AAPL,CRASH&timeframe=1Day&start=2026-07-01'
)
const { bars } = await res.json()
console.log(bars.CRASH[0])
# server-sent events: a live synthetic feed curl -N 'https://cuckootrade.com/api/v1/stream?symbols=CUCKOO,CRASH'
Nothing on CuckooTrade is real market data, and nothing pretends to be.
Every response is generated on demand and marked with an
X-Cuckoo-Synthetic: true header, so a test fixture can
never be mistaken for the real thing.
That also defines the boundary: CuckooTrade is for exercising code paths — development, testing, demos, teaching. It is not suitable for backtesting or strategy validation, because results against synthetic data say nothing about real markets.
HTTP/2 200
content-type: application/json
x-cuckoo-synthetic: true
x-cuckoo-generation: 1
cache-control: public, max-age=31536000, immutable
No key, no signup, no setup — this command works right now.
$ curl 'https://cuckootrade.com/api/v1/alpaca/v2/stocks/bars?symbols=AAPL,CRASH&timeframe=1Day'