{"openapi":"3.1.0","info":{"title":"Burnticker public API","version":"1.0.0","description":"Public data and UNSIGNED transactions only: no keys, no accounts, no signing. Read routes are keyless and cacheable (CORS open). POST routes refuse cross-site browser requests: send `Content-Type: application/json` and, from a bot, an `Origin` header equal to the API's origin. Rate limits per client IP: see x-rate-limit on each operation. Versioning: additive within /v1; breaking changes ship as /v2 with /v1 kept ≥ 90 days. Nothing here can change a rule, claim a fee, or adopt an existing token.","license":{"name":"see the repository"}},"servers":[{"url":"/api/burnticker/v1"}],"tags":[{"name":"sources"},{"name":"kalshi"},{"name":"rules"},{"name":"launch"},{"name":"tokens"},{"name":"platform"}],"paths":{"/catalogue":{"get":{"operationId":"getCatalogue","tags":["sources"],"summary":"Every resolution source with its tier","description":"The configured first-party sources (tiers 3–5, with the last fixture reading, a preview and the public selection config), the on-chain facts, and the market/assertion stubs (shown, not launchable). Kalshi series are searched live through /kalshi/search.","parameters":[],"responses":{"200":{"description":"OK","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Catalogue"}}}},"429":{"description":"rate limited: wait Retry-After seconds","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-cache-seconds":300,"x-rate-limit":"120 requests burst, 120 per minute sustained"}},"/sources/{id}/preview":{"get":{"operationId":"getSourcePreview","tags":["sources"],"summary":"What a catalogue rule would have burned over the source's frozen fixture","description":"The source fixes unit, direction, baseline and carry; you choose only the mapping (fractionOfPool for buyback, or tokens for vault mode).","parameters":[{"name":"id","in":"path","required":true,"description":"source id, e.g. treasury.debt or wiki.views:Bitcoin","schema":{"type":"string"}},{"name":"fractionOfPool","in":"query","required":false,"description":"buyback mapping per unit, 0.01–0.10 (default 0.02)","schema":{"type":"number"}},{"name":"tokens","in":"query","required":false,"description":"vault mapping per unit (switches the preview to vault mode)","schema":{"type":"integer"}}],"responses":{"200":{"description":"OK","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SourcePreview"}}}},"400":{"description":"the request does not validate (every problem listed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"rate limited: wait Retry-After seconds","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-cache-seconds":300,"x-rate-limit":"120 requests burst, 120 per minute sustained"}},"/kalshi/events":{"get":{"operationId":"searchKalshiEvents","tags":["kalshi"],"summary":"Search Kalshi events: games, contests, people (or list a series' upcoming events)","description":"Event-level search: `q` is matched against event title, event ticker, market labels and suffixes, with a team-alias table (city, nickname, abbreviation: eagles / philadelphia / PHI; jaguars / jacksonville / JAC / JAX). Scans `series` when given, else the league series of the teams the query names, else the headline game leagues plus series whose titles share a word with the query. Events are cached 10 minutes per series. `?series=KXNFLGAME` alone lists its upcoming events; no parameters returns the league chooser. Two-team games carry both sides and both selector modes. Tickers and labels only — no prices.","parameters":[{"name":"q","in":"query","required":false,"description":"a team, person, contest or ticker","schema":{"type":"string"}},{"name":"series","in":"query","required":false,"description":"scan only this series","schema":{"type":"string"}},{"name":"status","in":"query","required":false,"description":"open (default), closed or settled","schema":{"enum":["open","closed","settled"]}}],"responses":{"200":{"description":"OK","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KalshiEvents"}}}},"429":{"description":"rate limited: wait Retry-After seconds","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"502":{"description":"the upstream source (Kalshi) did not answer","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-cache-seconds":60,"x-rate-limit":"20 requests burst, 20 per minute sustained (these call Kalshi or re-read a source)"}},"/kalshi/teams":{"get":{"operationId":"listKalshiTeams","tags":["kalshi"],"summary":"Teams of a game series, with next game and season record (team coins)","description":"Derived from the series' open events (names, next game) and its settled markets since the season started (record: own leg YES = win, NO = loss, TIE YES = draw). For a team coin the selector is the series plus the team's own-leg filter (`-PHI`).","parameters":[{"name":"series","in":"query","required":true,"description":"a head-to-head game series (…GAME), e.g. KXNFLGAME","schema":{"type":"string"}}],"responses":{"200":{"description":"OK","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KalshiTeams"}}}},"400":{"description":"the request does not validate (every problem listed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"rate limited: wait Retry-After seconds","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"502":{"description":"the upstream source (Kalshi) did not answer","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-cache-seconds":60,"x-rate-limit":"20 requests burst, 20 per minute sustained (these call Kalshi or re-read a source)"}},"/kalshi/search":{"get":{"operationId":"searchKalshi","tags":["kalshi"],"summary":"Search Kalshi series and events (or read one series with its open markets)","description":"Live search of Kalshi's public series list, with the refuse-list verdict per series, plus event-level hits (teams, people, contests; see /kalshi/events) ranked first when the query names a team or a market. `?series=TICKER` returns that series and its next open markets; their YES prices are display only and never reach a rule.","parameters":[{"name":"q","in":"query","required":false,"description":"free text matched against ticker, title and tags","schema":{"type":"string"}},{"name":"category","in":"query","required":false,"description":"a Kalshi category (Sports, Economics, Climate and Weather, …)","schema":{"type":"string"}},{"name":"series","in":"query","required":false,"description":"one series ticker","schema":{"type":"string"}}],"responses":{"200":{"description":"OK","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KalshiSearch"}}}},"404":{"description":"not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"rate limited: wait Retry-After seconds","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"502":{"description":"the upstream source (Kalshi) did not answer","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-cache-seconds":60,"x-rate-limit":"20 requests burst, 20 per minute sustained (these call Kalshi or re-read a source)"}},"/kalshi/backtest":{"post":{"operationId":"backtestKalshi","tags":["kalshi"],"summary":"Back-test a rule on the venue's own settled history","description":"\"This selector settled N times in the last 12 months and would have burned X\": the matched markets (so you see what a filter really binds to), the rule's canonical text and hash, and the refuse-list verdict. Catalogue rules preview from the source's frozen fixture.","parameters":[],"responses":{"200":{"description":"OK","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Backtest"}}}},"400":{"description":"the request does not validate (every problem listed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"refused: cross-site request, or the refuse list","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"415":{"description":"POST bodies must be application/json","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"rate limited: wait Retry-After seconds","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"502":{"description":"the upstream source (Kalshi) did not answer","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-cache-seconds":0,"x-rate-limit":"20 requests burst, 20 per minute sustained (these call Kalshi or re-read a source)","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BacktestRequest"}}}}}},"/rules/validate":{"post":{"operationId":"validateRule","tags":["rules"],"summary":"Validate a rule; get its canonical JSON and sha256","description":"Returns the exact bytes rules.json will hold and their sha256 (what every receipt cites as rules=sha256:<first 12>), the plain-language statement and the receipt format. A rule that does not validate returns 400 with every problem listed.","parameters":[],"responses":{"200":{"description":"OK","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Validation"}}}},"400":{"description":"the request does not validate (every problem listed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"refused: cross-site request, or the refuse list","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"415":{"description":"POST bodies must be application/json","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"rate limited: wait Retry-After seconds","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-cache-seconds":0,"x-rate-limit":"120 requests burst, 120 per minute sustained","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidateRequest"}}}}}},"/launch/bundle":{"post":{"operationId":"buildLaunchBundle","tags":["launch"],"summary":"Build the unsigned launch transactions + the review payload","description":"initialize_token (burn_receipts) + the Raydium LaunchLab create under the Burnticker platform config, with the token's burn pool as the creator-fee recipient. NEVER signs: you sign with the creator wallet and your own mint keypair. Refusals: the refuse list, rules that do not validate, catalogue rules that disagree with their source, a taken ticker, mainnet (until the program and the LaunchLab adapter are live). Registers a DRAFT unless register=false. There is no path to adopt an existing token: the program requires the new mint's signature at init.","parameters":[],"responses":{"200":{"description":"OK","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LaunchBundle"}}}},"400":{"description":"the request does not validate (every problem listed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"refused: cross-site request, or the refuse list","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"conflict (ticker taken, draft already live)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"415":{"description":"POST bodies must be application/json","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"rate limited: wait Retry-After seconds","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"502":{"description":"the upstream source (Kalshi) did not answer","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-cache-seconds":0,"x-rate-limit":"10 per hour (launch bundles and confirmations)","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LaunchRequest"}}}}}},"/launch/confirm":{"post":{"operationId":"confirmLaunch","tags":["launch"],"summary":"Report the landed launch transaction (takes the draft live)","description":"Sets the baseline to now: settlements after this moment count. The keeper verifies the transaction on its next cycle.","parameters":[],"responses":{"200":{"description":"OK","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Confirmation"}}}},"400":{"description":"the request does not validate (every problem listed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"refused: cross-site request, or the refuse list","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"conflict (ticker taken, draft already live)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"415":{"description":"POST bodies must be application/json","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"rate limited: wait Retry-After seconds","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-cache-seconds":0,"x-rate-limit":"10 per hour (launch bundles and confirmations)","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConfirmRequest"}}}}}},"/tokens":{"get":{"operationId":"listTokens","tags":["tokens"],"summary":"Every token on the platform","description":"From the registry (no network calls): status, rule hash, receipt and burn counts. Paged.","parameters":[{"name":"status","in":"query","required":false,"description":"draft | live | paused | retired | expired (a draft not launched within 24 h; its ticker is free again)","schema":{"enum":["draft","live","paused","retired","expired"]}},{"name":"limit","in":"query","required":false,"description":"1–200 (default 100)","schema":{"type":"integer"}},{"name":"offset","in":"query","required":false,"description":"default 0","schema":{"type":"integer"}}],"responses":{"200":{"description":"OK","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TokenList"}}}},"400":{"description":"the request does not validate (every problem listed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"rate limited: wait Retry-After seconds","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-cache-seconds":30,"x-rate-limit":"120 requests burst, 120 per minute sustained"}},"/tokens/{ticker}":{"get":{"operationId":"getToken","tags":["tokens"],"summary":"One token: status, receipts, next burn, implied chance","description":"The token page's data: status.json (supply, burned, pool, the next possible burn and the market-implied chance of it — display only), every receipt with its verify block, the readings, and rules.json's exact text.","parameters":[{"name":"ticker","in":"path","required":true,"description":"the token's ticker (case-insensitive) or its mint address","schema":{"type":"string"}}],"responses":{"200":{"description":"OK","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TokenDetail"}}}},"404":{"description":"not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"rate limited: wait Retry-After seconds","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-cache-seconds":30,"x-rate-limit":"120 requests burst, 120 per minute sustained"}},"/tokens/{ticker}/receipts":{"get":{"operationId":"getReceipts","tags":["tokens"],"summary":"A token's receipts","description":"Every receipt (oldest first), recomputed from the recorded reading and the published rule at request time; verify.verified is false when the recomputation disagrees with the row or its memo.","parameters":[{"name":"ticker","in":"path","required":true,"description":"the token's ticker (case-insensitive) or its mint address","schema":{"type":"string"}}],"responses":{"200":{"description":"OK","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Receipts"}}}},"404":{"description":"not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"rate limited: wait Retry-After seconds","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-cache-seconds":30,"x-rate-limit":"120 requests burst, 120 per minute sustained"}},"/tokens/{ticker}/verify/{id}":{"get":{"operationId":"verifyReceipt","tags":["tokens"],"summary":"Verify one receipt from the source and the chain","description":"Re-reads the settled result from the original source, re-applies the published rule, recomputes the spend, and compares the memo on chain. The SDK's verifyReceipt does the same on your machine without trusting this server.","parameters":[{"name":"ticker","in":"path","required":true,"description":"the token's ticker (case-insensitive) or its mint address","schema":{"type":"string"}},{"name":"id","in":"path","required":true,"description":"the receipt's event id (market ticker, event ticker or feed period)","schema":{"type":"string"}}],"responses":{"200":{"description":"OK","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Verification"}}}},"404":{"description":"not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"rate limited: wait Retry-After seconds","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-cache-seconds":60,"x-rate-limit":"20 requests burst, 20 per minute sustained (these call Kalshi or re-read a source)"}},"/trust":{"get":{"operationId":"getTrust","tags":["platform"],"summary":"The Powers Register and the live fee bps","description":"Every power anyone holds (who, what it can and cannot do, timelock, sunset), the designed fee split next to the LIVE LaunchLab platform config decoded from chain (when the host has an RPC), program facts, attesters, the last audit and the platform statements.","parameters":[],"responses":{"200":{"description":"OK","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Trust"}}}},"429":{"description":"rate limited: wait Retry-After seconds","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-cache-seconds":60,"x-rate-limit":"120 requests burst, 120 per minute sustained"}},"/openapi.json":{"get":{"operationId":"getOpenApi","tags":["platform"],"summary":"This document","description":"OpenAPI 3.1, generated from the same table the routes read their cache and rate-limit settings from.","parameters":[],"responses":{"200":{"description":"OK","headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"type":"object"}}}},"429":{"description":"rate limited: wait Retry-After seconds","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-cache-seconds":3600,"x-rate-limit":"120 requests burst, 120 per minute sustained"}}},"components":{"schemas":{"Error":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"},"problems":{"type":"array","items":{"type":"string"}},"retryAfterSec":{"type":"integer"}},"required":["error"]},"BurnMapping":{"type":"object","properties":{"fractionOfPool":{"type":"number","minimum":0.01,"maximum":0.1,"description":"buyback: fraction of the burn pool spent buying the token at market, all of it burned"},"tokens":{"type":"integer","minimum":1,"description":"vault: tokens burned from the vesting vault"}},"required":[],"description":"Exactly one key."},"Rule":{"type":"object","properties":{"schema":{"const":"burnticker.rules/v1"},"oracle":{"enum":["kalshi","catalogue","polymarket","uma","drift-bet","hedgehog"],"description":"kalshi and catalogue are live; the others are accepted by the schema and refused at launch"},"series":{"type":["string","null"],"description":"Kalshi series ticker, or a catalogue source id (treasury.debt, wiki.views:Bitcoin)"},"market":{"type":["string","null"],"description":"one Kalshi market: a one-shot rule"},"filter":{"type":"object","properties":{"tickerIncludes":{"type":"string"},"titleRegex":{"type":"string"}},"required":[]},"kind":{"enum":["binary","scalar"]},"binary":{"anyOf":[{"type":"object","properties":{"onYes":{"$ref":"#/components/schemas/BurnMapping"},"onNo":{"anyOf":[{"$ref":"#/components/schemas/BurnMapping"},{"type":"null"}]}},"required":["onYes"]},{"type":"null"}]},"scalar":{"anyOf":[{"type":"object","properties":{"unit":{"type":"number"},"perUnit":{"$ref":"#/components/schemas/BurnMapping"},"baseline":{"anyOf":[{"const":"previousSettlement"},{"type":"number"}]},"direction":{"enum":["up","down","abs"]}},"required":["unit","perUnit","baseline","direction"]},{"type":"null"}]},"onVoid":{"const":"skip"},"floorUsd":{"type":"string"},"reserveSol":{"type":"string"},"vault":{"anyOf":[{"type":"object","properties":{"share":{"type":"number"},"vestDays":{"type":"integer"},"cliffDays":{"type":"integer"}},"required":["share","vestDays","cliffDays"]},{"type":"null"}]},"pair":{"anyOf":[{"type":"object","properties":{"pairId":{"type":"string"},"side":{"enum":["A","B"]},"counterpartMint":{"type":["string","null"]}},"required":["pairId","side","counterpartMint"]},{"type":"null"}],"description":"rivalry pairs (wizard flow): two coins on one selector with inverted mappings; null for a single coin"}},"required":["schema","oracle","kind","onVoid","floorUsd","reserveSol"],"description":"A selector + outcome→burn mapping, locked at launch by the sha256 of its canonical JSON (keys sorted at every level, two-space indent, trailing newline)."},"FeeLeg":{"type":"object","properties":{"label":{"type":"string"},"bps":{"type":"number"},"recipient":{"type":"string"},"dial":{"type":"string"},"note":{"type":"string"}},"required":["label","bps","recipient"]},"FeeSplit":{"type":"object","properties":{"phase":{"enum":["curve","post-graduation"]},"legs":{"type":"array","items":{"$ref":"#/components/schemas/FeeLeg"}},"totalBps":{"type":"number"}},"required":["phase","legs","totalBps"]},"SerializedIx":{"type":"object","properties":{"programId":{"type":"string","pattern":"^[1-9A-HJ-NP-Za-km-z]{32,44}$"},"label":{"type":"string"},"dataBase64":{"type":"string"},"keys":{"type":"array","items":{"type":"object","properties":{"pubkey":{"type":"string","pattern":"^[1-9A-HJ-NP-Za-km-z]{32,44}$"},"isSigner":{"type":"boolean"},"isWritable":{"type":"boolean"}},"required":["pubkey","isSigner","isWritable"]}}},"required":["programId","keys","dataBase64"]},"Source":{"type":"object","properties":{"id":{"type":"string"},"kind":{"enum":["market","assertion","attested-http","onchain"]},"tier":{"type":"integer","minimum":1,"maximum":5},"tierLabel":{"type":"string"},"title":{"type":"string"},"sourceName":{"type":"string"},"sourceUrl":{"type":"string"},"cadence":{"type":"string"},"unit":{"anyOf":[{"type":"object","properties":{"size":{"type":"number"},"label":{"type":"string"},"definition":{"type":"string"}},"required":[]},{"type":"null"}]},"direction":{"type":["string","null"]},"baseline":{},"carry":{"type":["string","null"]},"valueLabel":{"type":["string","null"]},"flags":{"type":"array","items":{"type":"string"}},"launchable":{"type":"object","properties":{"ok":{"type":"boolean"},"why":{"type":["string","null"]}},"required":["ok"]},"param":{},"needsKey":{"type":["string","null"]},"fixtureFetchedAt":{"type":["string","null"]},"refusals":{"type":"array","items":{"type":"string"}},"lastReading":{"anyOf":[{"type":"object","properties":{"id":{"type":"string"},"value":{"type":["string","null"]},"at":{"type":"string"}},"required":[]},{"type":"null"}]},"preview":{},"config":{"description":"attested-http sources: the selection config a verifier needs (request URL template, selection, period); header VALUES are withheld","anyOf":[{"type":"object"},{"type":"null"}]}},"required":["id","kind","tier","title","sourceUrl","launchable"]},"Catalogue":{"type":"object","properties":{"sources":{"type":"array","items":{"$ref":"#/components/schemas/Source"}},"tiers":{"type":"object"},"admission":{"type":"object"},"kalshi":{"type":"object","properties":{"search":{"type":"string"},"note":{"type":"string"}},"required":[]}},"required":["sources","tiers","admission"]},"SourcePreview":{"type":"object","properties":{"id":{"type":"string"},"title":{"type":"string"},"tier":{"type":"integer"},"rule":{"$ref":"#/components/schemas/Rule"},"sha256":{"type":"string"},"statement":{"type":"string"},"window":{"type":"object","properties":{"from":{"type":"string"},"to":{"type":"string"}},"required":["from","to"]},"totals":{"type":"object"},"rows":{"type":"array","items":{"type":"object"}},"lastReading":{},"fixtureFetchedAt":{"type":["string","null"]},"sentence":{"type":"string"},"note":{"type":"string"}},"required":["id","rule","window","totals","rows"]},"KalshiSeries":{"type":"object","properties":{"oracle":{"type":"string"},"ticker":{"type":"string"},"title":{"type":"string"},"category":{"type":["string","null"]},"frequency":{"type":["string","null"]},"settlementSource":{},"tags":{"type":"array","items":{"type":"string"}},"refused":{"type":"array","items":{"type":"string"}}},"required":["ticker","title"]},"KalshiEventHit":{"type":"object","properties":{"eventTicker":{"type":"string"},"seriesTicker":{"type":"string"},"title":{"type":"string"},"subTitle":{"type":["string","null"]},"category":{"type":["string","null"]},"competition":{"type":["string","null"]},"expectedAt":{"type":["string","null"],"description":"when the result is expected (for a game, roughly its end), UTC"},"closeTime":{"type":["string","null"]},"markets":{"type":"array","items":{"type":"object","properties":{"ticker":{"type":"string"},"suffix":{"type":"string"},"label":{"type":"string"},"status":{"type":"string"},"closeTime":{"type":["string","null"]}},"required":["ticker","suffix","label"]}},"score":{"type":"number"},"matchedSides":{"type":"array","items":{"type":"string"}},"matched":{"type":"array","items":{"type":"string"}},"pair":{"description":"for a two-team game: both sides (abbreviation, market, suggested name and ticker) and the two selector modes — thisGameOnly (one market, side B inverted: a partition) and everyGame (each side its own team's games: not a partition in general)","anyOf":[{"type":"object"},{"type":"null"}]},"refused":{"type":"array","items":{"type":"string"}}},"required":["eventTicker","seriesTicker","title","markets"],"description":"A Kalshi event (a game, a contest, an election) with its markets — tickers and labels only, never prices."},"KalshiEvents":{"type":"object","properties":{"query":{"type":"string"},"series":{"type":["string","null"]},"events":{"type":"array","items":{"$ref":"#/components/schemas/KalshiEventHit"}},"scanned":{"type":"array","items":{"type":"string"}},"teams":{"type":"array","items":{"type":"object"}},"count":{"type":"integer"},"leagues":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"label":{"type":"string"},"series":{"type":"array","items":{"type":"object","properties":{"ticker":{"type":"string"},"title":{"type":"string"}},"required":["ticker","title"]}}},"required":["id","label","series"]}}},"required":["events"],"description":"Event-level search. With neither q nor series: the league chooser (head-to-head game series derived from Kalshi's Sports list)."},"KalshiTeams":{"type":"object","properties":{"series":{"type":"string"},"since":{"type":"string","description":"the season start used for the records"},"note":{"type":"string"},"teams":{"type":"array","items":{"type":"object","properties":{"abbr":{"type":"string"},"city":{"type":"string"},"nickname":{"type":["string","null"]},"name":{"type":"string"},"ticker":{"type":"string"},"league":{"type":["string","null"]},"filter":{"type":"string","description":"the team's own-leg selector filter for \"every game\" (\"-PHI\")"},"collisions":{"type":"array","items":{"type":"string"}},"next":{"anyOf":[{"type":"object"},{"type":"null"}]},"record":{"type":"object","properties":{"w":{"type":"integer"},"l":{"type":"integer"},"d":{"type":"integer"},"since":{"type":"string"}},"required":["w","l","d"]}},"required":["abbr","name","ticker","filter","record"]}}},"required":["series","teams"],"description":"Every team of a head-to-head game series, with its next game and its record so far this season (team coins)."},"KalshiSearch":{"type":"object","properties":{"query":{"type":"string"},"results":{"type":"array","items":{"$ref":"#/components/schemas/KalshiSeries"}},"events":{"type":"array","items":{"$ref":"#/components/schemas/KalshiEventHit"}},"ranking":{"enum":["events","series"],"description":"which list to show first: events when the query names a team or matched a market by name"},"teams":{"type":"array","items":{"type":"object"}},"series":{"$ref":"#/components/schemas/KalshiSeries"},"open":{"type":"array","items":{"type":"object"}},"openCount":{"type":"integer"},"refusals":{"type":"array","items":{"type":"object"}},"note":{"type":"string"}},"required":[],"description":"Either { query, results, events, ranking } (a search: series plus event-level hits) or { series, open, openCount, refusals } (?series=TICKER)."},"BacktestRequest":{"type":"object","properties":{"rule":{"$ref":"#/components/schemas/Rule"},"months":{"type":"integer","minimum":1,"maximum":24}},"required":["rule"]},"Backtest":{"type":"object","properties":{"rule":{"$ref":"#/components/schemas/Rule"},"text":{"type":"string"},"sha256":{"type":"string"},"sha12":{"type":"string"},"mode":{"enum":["buyback","vault"]},"statement":{"type":"string"},"backtest":{"type":"object"},"sentence":{"type":"string"},"refusals":{"type":"array","items":{"type":"object"}},"seriesTitle":{"type":["string","null"]},"matched":{"type":"integer"}},"required":["rule","text","sha256","statement","backtest","sentence","matched"]},"ValidateRequest":{"type":"object","properties":{"rule":{}},"required":["rule"]},"Validation":{"type":"object","properties":{"ok":{"type":"boolean"},"rule":{"$ref":"#/components/schemas/Rule"},"canonical":{"type":"string","description":"the exact bytes rules.json will hold"},"sha256":{"type":"string"},"sha12":{"type":"string"},"mode":{"enum":["buyback","vault"]},"statement":{"type":"string"},"receiptFormat":{"type":"string"},"problems":{"type":"array","items":{"type":"string"}}},"required":["ok"]},"LaunchRequest":{"type":"object","properties":{"creator":{"type":"string","pattern":"^[1-9A-HJ-NP-Za-km-z]{32,44}$","description":"the wallet that pays and signs"},"mint":{"type":"string","pattern":"^[1-9A-HJ-NP-Za-km-z]{32,44}$","description":"the PUBLIC key of a fresh mint keypair you generated; the secret never leaves your machine"},"ticker":{"type":"string","pattern":"^[A-Z0-9]{2,10}$"},"name":{"type":"string"},"description":{"type":"string"},"imageUrl":{"type":["string","null"]},"links":{"type":"array","items":{"type":"object","properties":{"label":{"type":"string"},"url":{"type":"string"}},"required":["label","url"]}},"rule":{"$ref":"#/components/schemas/Rule"},"firstBuySol":{"type":"string","description":"decimal SOL, ≤ 50; \"0\" for none"},"acknowledgements":{"type":"object","properties":{"ruleLocked":{"const":true},"noReturns":{"const":true}},"required":["ruleLocked","noReturns"]},"recentBlockhash":{"type":"string","description":"optional: a recent blockhash from your RPC; otherwise a placeholder you must replace before signing"},"register":{"type":"boolean","description":"default true: register the DRAFT (reserves the ticker for 24 h — confirm the launch within that window or the draft expires and the ticker is released; the keeper serves registered tokens only). false = review only."}},"required":["creator","mint","ticker","name","rule","acknowledgements"]},"UnsignedTx":{"type":"object","properties":{"label":{"type":"string"},"signers":{"type":"array","items":{"enum":["creator","mint"]}},"transaction":{"type":["string","null"]},"message":{"type":"string"},"sizeBytes":{"type":"integer"},"oversize":{"type":"boolean"},"recentBlockhash":{"type":"string"},"blockhashPlaceholder":{"type":"boolean"},"feePayer":{"type":"string","pattern":"^[1-9A-HJ-NP-Za-km-z]{32,44}$"},"instructions":{"type":"array","items":{"$ref":"#/components/schemas/SerializedIx"}}},"required":["label","signers","message","recentBlockhash","blockhashPlaceholder","instructions"]},"LaunchReview":{"type":"object","properties":{"ticker":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"creator":{"type":"string","pattern":"^[1-9A-HJ-NP-Za-km-z]{32,44}$"},"mint":{"type":"string","pattern":"^[1-9A-HJ-NP-Za-km-z]{32,44}$"},"cluster":{"type":"string"},"seriesTitle":{"type":["string","null"]},"rules":{"type":"object","properties":{"text":{"type":"string"},"sha256":{"type":"string"},"sha12":{"type":"string"},"statement":{"type":"string"},"mode":{"type":"string"}},"required":["text","sha256","statement"]},"receiptFormat":{"type":"string"},"addresses":{"type":"object"},"allocation":{"type":"object"},"fees":{"type":"object","properties":{"curve":{"$ref":"#/components/schemas/FeeSplit"},"postGraduation":{"$ref":"#/components/schemas/FeeSplit"},"creatorSliceBps":{"const":0},"sentence":{"type":"string"}},"required":["curve","postGraduation"]},"burnPoolAuthority":{"type":"string"},"notes":{"type":"array","items":{"type":"string"}},"disclosure":{"type":"object","properties":{"disclaimer":{"type":"string"},"eventContract":{"type":["string","null"]}},"required":[]},"operator":{"type":"object","properties":{"can":{"type":"array","items":{"type":"string"}},"cannot":{"type":"array","items":{"type":"string"}},"placeholder":{"type":"boolean"}},"required":[]},"acknowledgements":{"type":"array","items":{"type":"string"}}},"required":["ticker","mint","rules","receiptFormat","fees","allocation"]},"LaunchBundle":{"type":"object","properties":{"ok":{"type":"boolean"},"cluster":{"type":"string"},"ready":{"type":"boolean"},"pending":{"type":"array","items":{"type":"string"}},"review":{"$ref":"#/components/schemas/LaunchReview"},"transactions":{"type":"array","items":{"$ref":"#/components/schemas/UnsignedTx"}},"registered":{"anyOf":[{"type":"object","properties":{"status":{"type":"string"},"ticker":{"type":"string"},"mint":{"type":"string"}},"required":[]},{"type":"null"}]},"next":{"type":"array","items":{"type":"string"}},"stubs":{"type":"array","items":{"type":"string"}}},"required":["ok","cluster","ready","pending","review","transactions"]},"ConfirmRequest":{"type":"object","properties":{"mint":{"type":"string","pattern":"^[1-9A-HJ-NP-Za-km-z]{32,44}$"},"signature":{"type":"string","pattern":"^[1-9A-HJ-NP-Za-km-z]{80,90}$"}},"required":["mint","signature"]},"Confirmation":{"type":"object","properties":{"ok":{"type":"boolean"},"ticker":{"type":"string"},"mint":{"type":"string"},"status":{"type":"string"},"note":{"type":"string"}},"required":["ok","mint","status"]},"TokenSummary":{"type":"object","properties":{"ticker":{"type":"string"},"name":{"type":"string"},"mint":{"type":"string","pattern":"^[1-9A-HJ-NP-Za-km-z]{32,44}$"},"status":{"enum":["draft","live","paused","retired","expired"]},"oracle":{"type":"string"},"selectorKey":{"type":"string"},"mode":{"type":"string"},"rulesSha256":{"type":"string"},"creator":{"type":"string"},"cluster":{"type":"string"},"baselineAt":{"type":"string"},"receipts":{"type":"integer"},"burns":{"type":"integer"},"burnedTokens":{"type":"string"},"links":{"type":"object","properties":{"self":{"type":"string"},"receipts":{"type":"string"},"page":{"type":"string"}},"required":[]}},"required":["ticker","mint","status","rulesSha256","links"]},"TokenList":{"type":"object","properties":{"tokens":{"type":"array","items":{"$ref":"#/components/schemas/TokenSummary"}},"count":{"type":"integer"},"total":{"type":"integer"},"cluster":{"type":"string"}},"required":["tokens","count","total"]},"Receipt":{"type":"object","properties":{"eventId":{"type":"string"},"settledAt":{"type":"string"},"oracle":{"type":"string"},"market":{"type":"string"},"result":{"type":["string","null"]},"value":{"type":["string","null"]},"title":{"type":["string","null"]},"method":{"type":["string","null"]},"sourceUrl":{"type":["string","null"]},"settlementSourceUrl":{"type":["string","null"]},"units":{"type":"integer"},"kind":{"type":"string"},"note":{"type":"string"},"prevValue":{"type":["string","null"]},"carryIn":{"type":"string"},"mapping":{"anyOf":[{"$ref":"#/components/schemas/BurnMapping"},{"type":"null"}]},"pool":{"type":["string","null"]},"spent":{"type":["string","null"]},"got":{"type":["string","null"]},"burned":{"type":["string","null"]},"shortOut":{"type":["string","null"]},"status":{"enum":["planned","sending","confirmed","skipped","void","exhausted","nothing"]},"skippedReason":{"type":["string","null"]},"memo":{"type":["string","null"]},"signature":{"type":["string","null"]},"txUrl":{"type":["string","null"]},"verify":{"type":"object","properties":{"curl":{"type":"string"},"formula":{"type":"string"},"expected":{"type":"string"},"checks":{"type":"array","items":{"type":"string"}},"verified":{"type":"boolean"}},"required":["checks","verified"]}},"required":["eventId","settledAt","units","status","verify"]},"TokenStatus":{"type":"object","properties":{"schema":{"const":"burnticker.status/v1"},"generatedAt":{"type":"string"},"ticker":{"type":"string"},"name":{"type":"string"},"mint":{"type":"string"},"cluster":{"type":"string"},"status":{"type":"string"},"oracle":{"type":"string"},"selectorKey":{"type":"string"},"seriesTitle":{"type":["string","null"]},"mode":{"type":"string"},"rules":{"type":"object","properties":{"sha256":{"type":"string"},"sha12":{"type":"string"},"statement":{"type":"string"},"file":{"type":"string"},"oneShot":{"type":"boolean"}},"required":["sha256","statement"]},"addresses":{"type":"object"},"supply":{"type":"object","properties":{"initial":{"type":"string"},"current":{"type":"string"},"source":{"type":"string"}},"required":[]},"burned":{"type":"object","properties":{"total":{"type":"string"},"pctOfSupply":{"type":"number"},"count":{"type":"integer"},"last30d":{"type":"string"}},"required":[]},"pool":{"type":"object"},"next":{"type":"object","properties":{"nextCheckAt":{"type":["string","null"]},"impliedChance":{"type":["number","null"],"description":"market-implied chance of the next burn — DISPLAY ONLY, never read by the rule"},"impliedBasis":{"type":["string","null"]},"nextMarket":{"type":["string","null"]},"nextCloseTime":{"type":["string","null"]},"awaitingFinal":{"type":"integer"}},"required":["impliedChance"]},"feed":{"type":"object"},"attesters":{"type":"array","items":{"type":"object"}},"quorum":{"type":"integer"},"fees":{"type":"object"},"health":{"type":"object"},"disclosure":{"type":"object"},"trust":{"type":"object"}},"required":["schema","ticker","mint","rules","next","burned"]},"TokenDetail":{"type":"object","properties":{"status":{"$ref":"#/components/schemas/TokenStatus"},"receipts":{"type":"array","items":{"$ref":"#/components/schemas/Receipt"}},"readings":{"type":"array","items":{"type":"object"}},"rulesText":{"type":"string"},"stubs":{"type":"array","items":{"type":"string"}}},"required":["status","receipts","rulesText"]},"Receipts":{"type":"object","properties":{"ticker":{"type":"string"},"mint":{"type":"string"},"rulesSha256":{"type":"string"},"count":{"type":"integer"},"receipts":{"type":"array","items":{"$ref":"#/components/schemas/Receipt"}}},"required":["ticker","mint","receipts","count"]},"VerifyCheck":{"type":"object","properties":{"id":{"enum":["rules","memo","source","units","spend","chain"]},"ok":{"type":["boolean","null"]},"detail":{"type":"string"}},"required":["id","ok","detail"]},"Verification":{"type":"object","properties":{"ticker":{"type":"string"},"eventId":{"type":"string"},"verified":{"type":"boolean"},"checks":{"type":"array","items":{"$ref":"#/components/schemas/VerifyCheck"}},"recomputed":{"type":"object"},"receipt":{"$ref":"#/components/schemas/Receipt"},"how":{"type":"array","items":{"type":"string"}}},"required":["ticker","eventId","verified","checks"]},"Trust":{"type":"object","properties":{"generatedAt":{"type":"string"},"cluster":{"type":"string"},"powers":{"type":"object"},"operator":{"type":"object"},"fees":{"type":"object","properties":{"designed":{"type":"object","properties":{"curve":{"$ref":"#/components/schemas/FeeSplit"},"postGraduation":{"$ref":"#/components/schemas/FeeSplit"},"devFeeBps":{"type":"number"},"lpBurnedPct":{"type":"number"},"creatorCashBps":{"const":0},"teamAllocationPct":{"const":0}},"required":["curve","postGraduation","devFeeBps"]},"live":{"type":"object"}},"required":["designed","live"]},"program":{"type":"object"},"attesters":{"type":"array","items":{"type":"object"}},"audit":{},"statements":{"type":"array","items":{"type":"string"}},"operatorLine":{"type":"string"},"useOfFees":{"type":"string"},"preAuditCapSol":{"type":"number"},"cannot":{"type":"array","items":{"type":"string"}},"rpcConfigured":{"type":"boolean"},"stubs":{"type":"array","items":{"type":"string"}}},"required":["powers","fees","program","statements"]}}}}