{"openapi":"3.1.0","info":{"title":"Deep Pick Public Picks API","version":"1.0.0","description":"Read-only access to the same canonical DEEP Ledger shown at deep-pick.ai/ledger. Battle contest picks are explicitly excluded."},"servers":[{"url":"https://deep-pick.ai"}],"tags":[{"name":"DEEP Ledger","description":"Canonical public DEEP picks only; never Battle contest entries."}],"paths":{"/api/public/v1/picks":{"get":{"tags":["DEEP Ledger"],"operationId":"listDeepPicks","summary":"Page through the full DEEP Ledger","description":"Returns oldest-first immutable publication numbers and each pick’s current lifecycle revision. Follow page.next_cursor only while page.has_more is true.","parameters":[{"$ref":"#/components/parameters/Limit"},{"$ref":"#/components/parameters/Cursor"}],"responses":{"200":{"description":"A verified page of public picks.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PicksResponse"}}}},"304":{"description":"Not modified for the supplied validator."},"400":{"$ref":"#/components/responses/BadRequest"},"503":{"$ref":"#/components/responses/Unavailable"}}},"head":{"tags":["DEEP Ledger"],"operationId":"headDeepPicks","responses":{"200":{"description":"The GET validators and cache metadata without a body."},"304":{"description":"Not modified."}}},"options":{"tags":["DEEP Ledger"],"operationId":"optionsDeepPicks","responses":{"204":{"description":"Public CORS capabilities."}}}},"/api/public/v1/events":{"get":{"tags":["DEEP Ledger"],"operationId":"listDeepPickEvents","summary":"Read the append-only pick change stream","description":"Use for incremental synchronization. Upsert the embedded pick by pick.id. Drain next_cursor while has_more, then persist checkpoint_cursor and send it as cursor on the next poll.","parameters":[{"$ref":"#/components/parameters/Limit"},{"$ref":"#/components/parameters/Cursor"}],"responses":{"200":{"description":"A verified page of canonical lifecycle events.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EventsResponse"}}}},"304":{"description":"Not modified for the supplied validator."},"400":{"$ref":"#/components/responses/BadRequest"},"503":{"$ref":"#/components/responses/Unavailable"}}},"head":{"tags":["DEEP Ledger"],"operationId":"headDeepEvents","responses":{"200":{"description":"The GET validators and cache metadata without a body."},"304":{"description":"Not modified."}}},"options":{"tags":["DEEP Ledger"],"operationId":"optionsDeepEvents","responses":{"204":{"description":"Public CORS capabilities."}}}}},"components":{"parameters":{"Limit":{"name":"limit","in":"query","required":false,"description":"Page size. Default 100; maximum 250.","schema":{"type":"integer","minimum":1,"maximum":250,"default":100}},"Cursor":{"name":"cursor","in":"query","required":false,"description":"Opaque cursor returned by the same endpoint. Do not parse or modify it.","schema":{"type":"string"}}},"responses":{"BadRequest":{"description":"Malformed cursor, limit, duplicate parameter, or unsupported parameter.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"Unavailable":{"description":"Canonical verification failed closed; no cached or invented record is substituted.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"schemas":{"Problem":{"type":"object","required":["type","title","status","detail","instance"],"properties":{"type":{"type":"string","format":"uri"},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"instance":{"type":"string"}}},"LedgerSummary":{"type":"object","required":["id","href","started_at","milestone","published","record","no_reset","uncapped"],"properties":{"id":{"const":"deep-ledger-v1"},"href":{"const":"https://deep-pick.ai/ledger"},"started_at":{"type":"string","format":"date-time"},"milestone":{"type":"integer"},"published":{"type":"integer"},"no_reset":{"const":true},"uncapped":{"const":true},"record":{"type":"object","required":["wins","losses","pushes","voids","unitsRisked","netUnits","roi"],"properties":{"wins":{"type":"integer"},"losses":{"type":"integer"},"pushes":{"type":"integer"},"voids":{"type":"integer"},"unitsRisked":{"type":"number"},"netUnits":{"type":"number"},"roi":{"type":"number"}}}}},"Pick":{"type":"object","required":["id","deep_number","sport","event","market","selection","odds","units_risked","published_at","graded_at","status","result","links","revision"],"properties":{"id":{"type":"string","format":"uuid"},"deep_number":{"type":"integer","minimum":1},"sport":{"type":"string"},"event":{"type":"object","required":["name","starts_at"],"properties":{"name":{"type":["string","null"]},"starts_at":{"type":["string","null"],"format":"date-time"}}},"market":{"type":"object","required":["type","period","line"],"properties":{"type":{"enum":["moneyline","spread","total","prop","other"]},"period":{"type":"string"},"line":{"type":["number","null"]}}},"selection":{"type":"string"},"odds":{"type":"object","required":["american"],"properties":{"american":{"type":["integer","null"]}}},"units_risked":{"type":"number"},"published_at":{"type":"string","format":"date-time"},"graded_at":{"type":["string","null"],"format":"date-time"},"status":{"enum":["open","won","lost","push","void"]},"result":{"anyOf":[{"type":"null"},{"type":"object","required":["grade","net_units"],"properties":{"grade":{"enum":["W","L","P","V"]},"net_units":{"type":"number"}}}]},"links":{"type":"object","required":["official_x","proof"],"properties":{"official_x":{"type":["string","null"],"format":"uri"},"proof":{"type":["string","null"],"format":"uri"}}},"revision":{"type":"object","required":["updated_at","sha256"],"properties":{"updated_at":{"type":"string","format":"date-time"},"sha256":{"type":"string","pattern":"^[0-9a-f]{64}$"}}}}},"Page":{"type":"object","required":["limit","returned","has_more","next_cursor"],"properties":{"limit":{"type":"integer"},"returned":{"type":"integer"},"has_more":{"type":"boolean"},"next_cursor":{"type":["string","null"]}}},"PicksResponse":{"type":"object","required":["schema_version","as_of","ledger","data","page"],"properties":{"schema_version":{"const":"deep-pick.public-picks.v1"},"as_of":{"type":"string","format":"date-time"},"ledger":{"$ref":"#/components/schemas/LedgerSummary"},"data":{"type":"array","items":{"$ref":"#/components/schemas/Pick"}},"page":{"$ref":"#/components/schemas/Page"}}},"Event":{"type":"object","required":["id","sequence","type","occurred_at","pick"],"properties":{"id":{"type":"string"},"sequence":{"type":"string"},"type":{"enum":["pick.published","pick.graded","pick.voided","pick.corrected"]},"occurred_at":{"type":"string","format":"date-time"},"pick":{"$ref":"#/components/schemas/Pick"}}},"EventsResponse":{"type":"object","required":["schema_version","as_of","ledger","data","page"],"properties":{"schema_version":{"const":"deep-pick.public-events.v1"},"as_of":{"type":"string","format":"date-time"},"ledger":{"$ref":"#/components/schemas/LedgerSummary"},"data":{"type":"array","items":{"$ref":"#/components/schemas/Event"}},"page":{"allOf":[{"$ref":"#/components/schemas/Page"},{"type":"object","required":["checkpoint_cursor"],"properties":{"checkpoint_cursor":{"type":["string","null"]}}}]}}}}}}