{"openapi":"3.1.0","info":{"title":"PatternPlus API","version":"1.0","description":"Free crypto data as daily JSON files: token unlocks and how each is known, a dated event calendar, the move after every event, pattern base rates, and predictions with their record. No key. Free with a visible \"Data: PatternPlus\" link to https://pattern.plus (CC BY 4.0).","license":{"name":"CC BY 4.0","url":"https://creativecommons.org/licenses/by/4.0/"}},"externalDocs":{"description":"Docs","url":"https://pattern.plus/developers"},"servers":[{"url":"https://pattern.plus/api/v1"}],"paths":{"/index.json":{"get":{"operationId":"index","summary":"This list","description":"This list: every file and what it holds.","responses":{"200":{"description":"The file.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Envelope"},{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"file":{"type":"string"},"url":{"type":"string","format":"uri"},"holds":{"type":"string"}}}}}}]}}}}}}},"/calendar.json":{"get":{"operationId":"calendar","summary":"Every dated event in the next 90 days (token unlocks, exchange listings and delistings, DAO votes, network upgrades, Fed rate decisions, US CPI, jobs, PPI, PCE, GDP and retail sales releases, Bitcoin options expiries) and, where we count it, what past events like it did next","description":"Every dated event in the next 90 days (token unlocks, exchange listings and delistings, DAO votes, network upgrades, Fed rate decisions, US CPI, jobs, PPI, PCE, GDP and retail sales releases, Bitcoin options expiries) and, where we count it, what past events like it did next.","responses":{"200":{"description":"The file.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Envelope"},{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"date":{"type":"string","format":"date"},"kind":{"type":"string","description":"unlock, listing, futures_listing, delisting, hack, raise, vote, upgrade, halving, burn, funding_low, funding_high, or one measured on Bitcoin: fomc, cpi, jobs, ppi, pce, gdp, retail, opex (options expiry), mint (big stablecoin print)"},"token":{"type":["string","null"],"description":"The coin's id (its page and file names use it)."},"symbol":{"type":["string","null"]},"name":{"type":["string","null"]},"title":{"type":"string"},"venue":{"type":["string","null"],"description":"The exchange, for listings and delistings."},"page":{"type":["string","null"],"format":"uri"},"amount":{"type":"number","description":"Unlocks: tokens released that day."},"pct_circulating":{"type":"number","description":"Unlocks: percent of the circulating supply."},"value_usd":{"type":"integer","description":"Unlocks: the amount at today's price."},"categories":{"type":"array","items":{"type":"string"},"description":"Unlocks: whose tokens (team, investors, ...)."},"basis":{"type":"array","items":{"type":"string"},"description":"Unlocks: how each part is known."},"past_events_like_it":{"type":"object","properties":{"pattern":{"type":["string","null"]},"horizons":{"type":"object","properties":{"1d":{"$ref":"#/components/schemas/Odds"},"7d":{"$ref":"#/components/schemas/Odds"},"30d":{"$ref":"#/components/schemas/Odds"},"90d":{"$ref":"#/components/schemas/Odds"}},"description":"Per horizon measured (1d, 7d, 30d, 90d): what followed the past cases."},"page":{"type":["string","null"],"format":"uri"}}}},"required":["date","kind","title"]}}}}]}}}}}}},"/unlocks.json":{"get":{"operationId":"unlocks","summary":"Token unlocks in the next 180 days, one row per coin and day","description":"Token unlocks in the next 180 days, one row per coin and day: tokens, share of the circulating and total supply, value at today's price, and how we know it.","responses":{"200":{"description":"The file.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Envelope"},{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"date":{"type":"string","format":"date"},"token":{"type":"string"},"symbol":{"type":"string"},"name":{"type":"string"},"amount":{"type":"number","description":"Tokens released that day."},"pct_circulating":{"type":"number","description":"Percent of the circulating supply."},"pct_total":{"type":"number","description":"Percent of the total supply."},"value_usd":{"type":"integer","description":"The amount at today's price."},"categories":{"type":"array","items":{"type":"string"}},"types":{"type":"array","items":{"type":"string"},"description":"cliff or linear"},"basis":{"type":"array","items":{"type":"string"},"description":"How each part is known."},"file":{"type":"string","format":"uri","description":"The coin's whole schedule."}},"required":["date","token","amount","basis"]}}}}]}}}}}}},"/unlocks/{slug}.json":{"get":{"operationId":"unlock","summary":"One coin's whole unlock schedule, past and future, row by row, with its sources (every coin listed with an unlocks file in tokens","description":"One coin's whole unlock schedule, past and future, row by row, with its sources (every coin listed with an unlocks file in tokens.json).","responses":{"200":{"description":"The file.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Envelope"},{"type":"object","properties":{"data":{"type":"object","properties":{"token":{"type":"string"},"symbol":{"type":"string"},"name":{"type":"string"},"page":{"type":"string","format":"uri"},"basis":{"type":"array","items":{"type":"string"}},"sources":{"type":"array","items":{"type":"object","properties":{"title":{"type":["string","null"]},"url":{"type":["string","null"]}}},"description":"The project documents a schedule comes from."},"next_unlock":{"type":["object","null"],"properties":{"date":{"type":"string","format":"date"},"amount":{"type":"number"},"pct_circulating":{"type":"number"}},"description":"null when none is left."},"schedule":{"type":"array","items":{"type":"object","properties":{"date":{"type":"string","format":"date"},"amount":{"type":["number","null"]},"pct_circulating":{"type":["number","null"]},"pct_total":{"type":["number","null"]},"category":{"type":["string","null"]},"type":{"type":["string","null"]},"basis":{"type":"string"},"note":{"type":["string","null"]}}}},"allocations":{"type":"array","items":{"type":"object","properties":{"category":{"type":"string"},"pct":{"type":["number","null"]},"amount":{"type":["number","null"]}}}}},"required":["token","schedule"]}}}]}}}},"404":{"description":"No schedule for this coin."}},"parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string"},"description":"The coin's id, as tokens.json lists it (its unlocks field)."}]}},"/predictions.json":{"get":{"operationId":"predictions","summary":"Every current prediction","description":"Every current prediction: the chance a coin is higher in 1, 7 and 30 days, its likely range, the past cases behind it, and how often such calls were right.","responses":{"200":{"description":"The file.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Envelope"},{"type":"object","properties":{"data":{"type":"object","properties":{"date":{"type":["string","null"],"format":"date","description":"The day the predictions were made."},"disclaimer":{"type":"string"},"predictions":{"type":"array","items":{"type":"object","properties":{"token":{"type":"string"},"slug":{"type":"string"},"symbol":{"type":"string"},"date":{"type":"string","format":"date"},"horizon":{"type":"string","description":"1d, 7d or 30d"},"p_up":{"type":["number","null"],"description":"The chance the price is higher at the horizon (0-1)."},"p_lo":{"type":["number","null"]},"p_hi":{"type":["number","null"]},"strength":{"type":["string","null"]},"typical":{"type":["number","null"],"description":"The median move of the past cases."},"p10":{"type":["number","null"]},"p90":{"type":["number","null"]},"n":{"type":["integer","null"],"description":"Past cases behind it."},"price_now":{"type":["number","null"],"description":"The price it was made at."}}}},"calibration":{"type":"object","additionalProperties":{"type":"object","properties":{"n":{"type":["number","null"]},"hit_rate":{"type":["number","null"]},"n_calls":{"type":["number","null"]},"brier":{"type":["number","null"]},"brier_base":{"type":["number","null"]},"cov50":{"type":["number","null"]},"cov80":{"type":["number","null"]}}},"description":"Per horizon: how past calls did (hit rate, Brier score against the base rate, range coverage)."}}}}}]}}}}}}},"/patterns.json":{"get":{"operationId":"patterns","summary":"Every pattern we count","description":"Every pattern we count: how many past events matched, how often the price was higher 1, 7, 30 and 90 days later, the median move, and whether the edge held up on newer cases.","responses":{"200":{"description":"The file.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Envelope"},{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"kind":{"type":"string"},"name":{"type":"string"},"conditions":{"type":"object","description":"What an event must be to count."},"n":{"type":["integer","null"]},"n_measured":{"type":["integer","null"]},"horizons":{"type":"object","properties":{"1d":{"$ref":"#/components/schemas/Odds"},"7d":{"$ref":"#/components/schemas/Odds"},"30d":{"$ref":"#/components/schemas/Odds"},"90d":{"$ref":"#/components/schemas/Odds"}},"description":"Per horizon measured (1d, 7d, 30d, 90d): what followed the past cases."},"best_30d":{"type":["number","null"]},"worst_30d":{"type":["number","null"]},"median_vs_btc_30d":{"type":["number","null"]},"newer_cases":{"type":["string","null"],"description":"Whether the edge held on cases newer than the ones it was found on."},"page":{"type":"string","format":"uri"}},"required":["id","kind","horizons"]}}}}]}}}}}}},"/effects.json":{"get":{"operationId":"effects","summary":"Every event of the last 365 days and the price move after it","description":"Every event of the last 365 days and the price move after it: 1, 7, 30 and 90 days, and against Bitcoin over 30 days.","responses":{"200":{"description":"The file.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Envelope"},{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"date":{"type":"string","format":"date"},"kind":{"type":"string"},"token":{"type":["string","null"]},"symbol":{"type":["string","null"]},"venue":{"type":["string","null"]},"title":{"type":["string","null"]},"pct":{"type":["number","null"]},"move":{"type":"object","properties":{"1d":{"type":["number","null"]},"7d":{"type":["number","null"]},"30d":{"type":["number","null"]},"90d":{"type":["number","null"]}},"description":"The price move after the event (0.042 is 4.2%)."},"vs_btc_30d":{"type":["number","null"],"description":"The 30-day move minus Bitcoin's."}},"required":["date","kind","move"]}}}}]}}}}}}},"/tokens.json":{"get":{"operationId":"tokens","summary":"Every coin on the site","description":"Every coin on the site: name, ticker, rank, chain and contract, its page, and which files cover it.","responses":{"200":{"description":"The file.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Envelope"},{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"token":{"type":"string"},"symbol":{"type":"string"},"name":{"type":"string"},"rank":{"type":["integer","null"]},"chain":{"type":["string","null"]},"contract":{"type":["string","null"]},"category":{"type":["string","null"]},"page":{"type":"string","format":"uri"},"unlocks":{"type":["string","null"],"format":"uri","description":"Its unlocks file, when it has a schedule."},"predicted":{"type":"boolean","description":"Whether it has a current prediction."}},"required":["token","symbol","page"]}}}}]}}}}}}},"/scoreboard.json":{"get":{"operationId":"scoreboard","summary":"Which kinds of event move price","description":"Which kinds of event move price: each kind against the same coins' ordinary days, the share higher 1, 7 and 30 days later, the edge in points with its 90% range, and the size of the move.","responses":{"200":{"description":"The file.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Envelope"},{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"kind":{"type":"string"},"name":{"type":"string"},"cases":{"type":"integer","description":"The most cases measured at any horizon."},"horizons":{"type":"object","additionalProperties":{"type":"object","properties":{"n":{"type":"integer"},"higher":{"type":"number","description":"Share of the cases higher (0-1)."},"ordinary":{"type":"number","description":"Share of the same coins' ordinary days higher."},"edge_points":{"type":"integer","description":"higher minus ordinary, in points."},"ci90_points":{"type":"array","items":{"type":"integer"},"description":"The edge's 90% range, in points."},"verdict":{"type":"string","description":"up, down (the range clears zero), none, or thin (under 20 cases)"},"median_move":{"type":["number","null"]},"ordinary_median_move":{"type":["number","null"]},"move_size":{"type":["number","null"],"description":"Median size of the move over the ordinary days' (1.4 = 40% bigger)."}}},"description":"Per horizon measured (1d, 7d, 30d): the kind against its coins' ordinary days."},"events":{"type":["string","null"],"format":"uri","description":"This kind's events file."},"page":{"type":["string","null"],"format":"uri"}},"required":["kind","horizons"]}}}}]}}}}}}},"/events/{kind}.json":{"get":{"operationId":"events","summary":"Every measured past event of one kind and the price move after it (1, 7, 30 and 90 days), newest first; the kinds are the ones scoreboard","description":"Every measured past event of one kind and the price move after it (1, 7, 30 and 90 days), newest first; the kinds are the ones scoreboard.json lists.","responses":{"200":{"description":"The file.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Envelope"},{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"date":{"type":"string","format":"date"},"token":{"type":["string","null"]},"symbol":{"type":["string","null"]},"venue":{"type":["string","null"]},"title":{"type":["string","null"]},"pct":{"type":["number","null"]},"move":{"type":"object","properties":{"1d":{"type":["number","null"]},"7d":{"type":["number","null"]},"30d":{"type":["number","null"]},"90d":{"type":["number","null"]}},"description":"The price move after the event (0.042 is 4.2%)."},"vs_btc_30d":{"type":["number","null"],"description":"The 30-day move minus Bitcoin's."}},"required":["date","move"]}}}}]}}}},"404":{"description":"No events of this kind."}},"parameters":[{"name":"kind","in":"path","required":true,"schema":{"type":"string"},"description":"The kind of event, as scoreboard.json lists it (its events field)."}]}},"/coin/{slug}.json":{"get":{"operationId":"coin","summary":"One coin in one file","description":"One coin in one file: its dated events in the next 90 days with what past events like each did, and its current predictions (the embeddable card reads it).","responses":{"200":{"description":"The file.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Envelope"},{"type":"object","properties":{"data":{"type":"object","properties":{"token":{"type":"string"},"symbol":{"type":"string"},"name":{"type":"string"},"page":{"type":"string","format":"uri"},"unlocks":{"type":["string","null"],"format":"uri","description":"Its whole unlock schedule, when it has one."},"next_events":{"type":"array","items":{"type":"object","properties":{"date":{"type":"string","format":"date"},"kind":{"type":"string"},"title":{"type":"string"},"venue":{"type":["string","null"]},"page":{"type":["string","null"],"format":"uri"}}},"description":"Its dated events in the next 90 days, as calendar.json has them."},"predictions":{"type":"array","items":{"type":"object","properties":{"horizon":{"type":"string"},"date":{"type":["string","null"],"format":"date"},"p_up":{"type":["number","null"],"description":"The chance the price is higher at the horizon (0-1)."},"p_lo":{"type":["number","null"]},"p_hi":{"type":["number","null"]},"typical":{"type":["number","null"]},"p10":{"type":["number","null"]},"p90":{"type":["number","null"]},"n":{"type":["integer","null"]},"strength":{"type":["string","null"]}}}}},"required":["token","next_events","predictions"]}}}]}}}},"404":{"description":"No events or predictions for this coin."}},"parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string"},"description":"The coin's id, as tokens.json lists it."}]}}},"components":{"schemas":{"Envelope":{"type":"object","properties":{"api":{"type":"string"},"version":{"type":"integer"},"file":{"type":"string"},"as_of":{"type":"string","format":"date","description":"The date the data is about."},"rebuilt":{"type":"string","description":"When the file was made."},"attribution":{"type":"object","properties":{"text":{"type":"string"},"url":{"type":"string","format":"uri"},"required":{"type":"string"}},"description":"The one rule: show it."},"license":{"type":"object","properties":{"name":{"type":"string"},"url":{"type":"string","format":"uri"}}},"docs":{"type":"string","format":"uri"},"count":{"type":"integer","description":"How many rows data holds."}},"required":["version","file","as_of","attribution","license","data"]},"Odds":{"type":"object","properties":{"higher":{"type":"number","description":"How often the price was higher (0-1)."},"ci90":{"type":"array","items":{"type":["number","null"]},"description":"90% interval of that share."},"median_move":{"type":["number","null"]},"n":{"type":["integer","null"],"description":"Past cases measured."}}}}}}