{"service":"TILLA Data API","version":"3.0","description":"Three years of raw market datapoints and derived series on one clock, from the venues and our own Bitcoin node, hashed as they land. The tier in the URL is the tier served; your key must be at or above it.","base_url":"https://api.tillacrypto.com","auth":"X-API-Key: tk_live_...   (or Authorization: Bearer tk_live_...)","get_a_key":"POST /v1/demo_key (no account) or a free key at https://tillacrypto.com","quickstart":"curl -H \"X-API-Key: tk_live_...\" \"https://api.tillacrypto.com/v1/free/raw/1min?series=btc_close&limit=5\"","formats":["json (default)","csv","ndjson","parquet"],"params":{"series":"comma-separated series names (see /v1/inventory)","start / end":"YYYY-MM-DD[ HH:MM[:SS]] inclusive; no start = the newest rows up to end","limit":"rows per answer, at most 50000; X-More and next_start page","format":"json | csv | ndjson | parquet"},"docs":"https://tillacrypto.com/#docs","openapi":"https://api.tillacrypto.com/openapi.json","llms":"https://api.tillacrypto.com/llms.txt","errors":{"400":"bad or missing parameter (a bad date, start after end, an unknown parameter) - fix the request","401":"missing API key - send X-API-Key: tk_live_...","403":"invalid or revoked key, or a series / lane / call not in your tier - check /v1/inventory, or upgrade","404":"unknown endpoint, tier, lane or receipt - check /v1 for the list","405":"method not allowed - this API is read-only (GET and HEAD)","409":"already done (a just-bought key can be claimed once)","413":"request too large - ask for fewer series or a shorter window","429":"rate limit, daily quota, rows or breadth - wait the seconds in Retry-After; X-RateLimit-* shows your budget","500":"our fault - retry once; quote X-Request-Id to support@tillacrypto.com if it repeats","503":"MAINTENANCE - the data engine is restarting: the live calls (tick, stream, latest) pause, every history call still works (and carries X-Tilla-Maintenance: 1); wait Retry-After and ask again"},"endpoints":[{"method":"GET","path":"/","auth":"none","desc":"this index - endpoints, auth, formats, tiers"},{"method":"GET","path":"/v1","auth":"none","desc":"the same index"},{"method":"GET","path":"/v1/","auth":"none","desc":"the same index"},{"method":"GET","path":"/v1/ping","auth":"none","desc":"liveness check"},{"method":"GET","path":"/v1/tiers","auth":"none","desc":"tier catalog: price, history, limits, the hook"},{"method":"GET","path":"/v1/status","auth":"none","desc":"the newest 1min label and the tiers served"},{"method":"GET","path":"/v1/health","auth":"none","desc":"the newest label of every lane, every layer"},{"method":"GET","path":"/v1/calls","auth":"none","desc":"EVERY CALL, READY TO PASTE: method, URL for ?tier=, auth, what it returns, and every error - ?format=json|csv (a sheet)"},{"method":"GET","path":"/v1/{tier}/calls","auth":"none","desc":"everything your tier can do: every call with its ready URL (json, or ?format=csv)"},{"method":"GET","path":"/v1/samples","auth":"none","desc":"the free samples of every tier, no key"},{"method":"GET","path":"/v1/sample/{name}","auth":"none","desc":"one tick of everything a tier holds: {tier}.db (SQLite), {tier}.csv (a sheet), {tier} (JSON at a glance)"},{"method":"GET","path":"/v1/inventory","auth":"key","desc":"what your tier holds (?layer=&lane=; ?tier= previews a lower tier)"},{"method":"GET","path":"/v1/usage","auth":"key","desc":"your plan and your budgets right now"},{"method":"GET","path":"/v1/{tier}/raw/{lane}","auth":"key","desc":"raw window: ?series=a,b&start=&end=&limit=&format=json|csv|ndjson|parquet"},{"method":"GET","path":"/v1/{tier}/derived/{lane}","auth":"key","desc":"derived window, the same parameters"},{"method":"GET","path":"/v1/{tier}/node/{lane}","auth":"key","desc":"the node (max and above), the same parameters"},{"method":"GET","path":"/v1/{tier}/deep/{lane}","auth":"key","desc":"THE DEEP HISTORY, lane hour: hourly raw prices from each market's first bar (FX 2002, crypto 2017, US stocks 2020) to 2023-08-10, no history floor; the same series names and parameters as raw/hour"},{"method":"GET","path":"/v1/{tier}/export/{layer}/{lane}","auth":"key","desc":"BULK: the whole window in one streamed request, csv|ndjson|parquet, hashed and recorded (pro and above)"},{"method":"GET","path":"/v1/{tier}/tick","auth":"key","desc":"TICK: every series your key is sold, on every clock lane that closed at a boundary, in ONE answer (?at=YYYY-MM-DD HH:MM, default the minute just closed; ?lanes=raw/1min,derived/5min to ask again for lanes still writing). Ask once a minute and you have the whole tier, live"},{"method":"GET","path":"/v1/{tier}/changes","auth":"key","desc":"CHANGES: every cell the base repaired, filled or re-walked since ?since= (its hourly audit, 2-hourly sweep and heal, day close, derived rewinds) that your key holds, with its value now - apply them and your copy heals when ours does; pass `until` back as the next since"},{"method":"GET","path":"/v1/{tier}/resume/{layer}/{lane}","auth":"key","desc":"RESUME: every series your key is sold on one lane, every bar from ?since= to now, streamed in one request (ndjson|csv|parquet) - fill the gap since you last stopped, then tick"},{"method":"GET","path":"/v1/markets","auth":"none","desc":"every main market: its category, its related markets, how many series each tier holds of it, its lanes, and its call"},{"method":"GET","path":"/v1/{tier}/market/{subject}","auth":"key","desc":"ONE MARKET and everything of it your tier holds, on one clock: ?lane=1min&layer=raw|derived|all&related=1 (its ETFs, miners, sister pairs ...)&period=6m; 200 columns an answer, ?offset= walks the rest"},{"method":"GET","path":"/v1/{tier}/bulk","auth":"key","desc":"BULK: your whole window straight from the database - every lane your tier holds, each with its resume url (Parquet, csv or ndjson, streamed); ?markets=crypto|stocks|fx|macro|<ids> narrows it to those markets"},{"method":"GET","path":"/v1/{tier}/bulk/file/{sha}","auth":"key","desc":"a prebuilt Parquet file by its sha256 - none are published today (404); take the resume urls /bulk lists"},{"method":"GET","path":"/v1/{tier}/stream","auth":"key","desc":"LIVE: finished bars as they land, SSE (?layer=&lanes=&series=&since=; Last-Event-ID replays)"},{"method":"GET","path":"/v1/data","auth":"key","desc":"July shape: ?series= (or cols=)&start=&end=&limit=&format=&table="},{"method":"GET","path":"/v1/latest","auth":"key","desc":"July shape: the newest row of ?series= (or cols=) at ?table="},{"method":"GET","path":"/v1/sync","auth":"key","desc":"July shape: everything from ?since=, paged with next_start"},{"method":"POST","path":"/v1/demo_key","auth":"none","desc":"a free key, no account, one per address per day"},{"method":"POST","path":"/v1/free_key","auth":"account","desc":"self-serve free key (signed-in session)"},{"method":"POST","path":"/v1/my_key","auth":"account","desc":"your key; ?peek=1 check without minting, ?rotate=1 replace, ?claim=1 show a just-bought key once"},{"method":"POST","path":"/v1/checkout","auth":"account","desc":"start a subscription (or the portal if already paid)"},{"method":"POST","path":"/v1/portal","auth":"account","desc":"Stripe billing portal (manage / cancel)"},{"method":"POST","path":"/v1/enterprise_inquiry","auth":"none","desc":"an enterprise lead"},{"method":"POST","path":"/v1/contact","auth":"none","desc":"a support ticket: name, email, topic, message - it reaches the founder inbox"},{"method":"POST","path":"/v1/stripe_webhook","auth":"stripe","desc":"Stripe events (signature-verified)"}],"tiers":{"tiers":{"free":{"price_usd_month":0,"history_days":30,"per_minute":100,"daily_quota":10000,"rows_per_day":5000000,"breadth_per_day":200,"datapoints":840,"series":840,"billing":"monthly","hook":"Live and real: BTC, ETH, S&P 500, gold, DXY, VIX, Fear & Greed and BTC dominance - 30 days, 100 requests a minute, no card.","lanes":{"raw":{"1min":10,"30min":1,"daily":15,"hour":14},"derived":{"10min":41,"15min":41,"1hour":92,"1min":41,"30day":64,"30min":41,"4hour":92,"5min":41,"8hour":91,"daily":91,"monthly":64,"quarterly":10,"weekly":91},"node":{},"deep":{"hour":13}}},"builder":{"price_usd_month":49,"history_days":183,"per_minute":120,"daily_quota":200000,"rows_per_day":20000000,"breadth_per_day":null,"datapoints":169181,"series":169181,"billing":"monthly","hook":"Whole market, one clock, every cadence. No derivatives.","lanes":{"raw":{"1min":615,"30min":1,"daily":437,"hour":701},"derived":{"10min":15137,"15min":15137,"1hour":18711,"1min":15137,"30day":6848,"30min":15137,"4hour":18711,"5min":15137,"8hour":18711,"daily":9759,"monthly":6846,"quarterly":2639,"weekly":9517},"node":{},"deep":{"hour":585}}},"pro":{"price_usd_month":199,"history_days":548,"per_minute":300,"daily_quota":2000000,"rows_per_day":1000000000,"breadth_per_day":2000,"datapoints":232764,"series":232764,"billing":"monthly","hook":"The full matrix every minute, plus bulk export. No node.","lanes":{"raw":{"1min":730,"30min":16,"5min":62,"daily":939,"hour":1025,"monthly":15,"quarterly":2,"weekly":32},"derived":{"10min":17765,"15min":17765,"1hour":23929,"1min":17765,"30day":13263,"30min":17765,"4hour":23929,"5min":17765,"8hour":23929,"daily":18646,"monthly":13261,"quarterly":6081,"weekly":18080},"node":{},"deep":{"hour":712}}},"max":{"price_usd_month":349,"history_days":null,"per_minute":600,"daily_quota":20000000,"rows_per_day":2000000000,"breadth_per_day":null,"datapoints":297588,"series":297588,"billing":"monthly","hook":"Everything, the whole history, plus our own Bitcoin node: mempool, blocks, on-chain.","lanes":{"raw":{"1min":916,"30min":18,"5min":63,"daily":1188,"hour":1205,"monthly":15,"quarterly":2,"weekly":32},"derived":{"10min":21547,"15min":21547,"1hour":27566,"1min":21547,"30day":17050,"30min":21547,"4hour":27566,"5min":21547,"8hour":27566,"daily":24381,"monthly":17048,"quarterly":8189,"weekly":23519},"node":{"10min":58,"1hour":2015,"30day":1225,"30min":58,"4hour":2015,"8hour":2015,"daily":2018,"hour":58,"monthly":1230,"quarterly":755,"weekly":1862},"deep":{"hour":892}}}},"archive_pack":{"price_usd_one_time_per_year":7500,"years":["2023-08-10 to 2024-08-09","2024-08-09 to 2025-08-09"],"width":"any active tier's width","format":"parquet","watermarked":true,"resale":false,"on_monthly_plan":false},"earned_history":{"from_day_one":true,"days_per_subscribed_month":30,"annual_bonus_days":183,"live_cap_days":730},"bulk_export_from":"pro","pit_from":"max"}}