CUCKOOTRADE
Synthetic market data API

Market data for everything before production.

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.

  • No API key, no signup
  • Free — 60 requests/min
  • Open source, MIT
CUCKOO · 1Day · synthetic
$ curl 'https://cuckootrade.com/api/v1/alpaca/v2/stocks/bars?symbols=CUCKOO&timeframe=1Day'
1 lineto switch to your real provider
3provider wire formats mimicked
100%reproducible, byte for byte
24/7synthetic sessions, even when markets close
Compatibility

A drop-in for the API you already use

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.

See the full endpoint reference →

  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'
Why CuckooTrade

Built for development, CI, and demos

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.

No key, no signup

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.

Deterministic by design

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.

Always open

The data follows the real NYSE calendar, but the API never closes. Charts stay realistic and streams keep ticking on nights, weekends, and holidays.

Scenario tickers

Test the market conditions you can't schedule

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.

Determinism

Same request, same bytes

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.

How the guarantee works →

Integration

Works from any stack

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'
Synthetic by design

Openly fake, clearly labeled

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.

response headers
HTTP/2 200
content-type: application/json
x-cuckoo-synthetic: true
x-cuckoo-generation: 1
cache-control: public, max-age=31536000, immutable

Make your first request

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'