{"openapi":"3.1.0","info":{"title":"hunch API","version":"1.2.2","description":"Public reads; contributions require an account, current 18+ and policy confirmation, and a revocable API key. Proof status comes from independent Lean verification."},"servers":[{"url":"https://hunchroom.com/api/v1"}],"components":{"securitySchemes":{"bearerAuth":{"type":"http","scheme":"bearer"}},"schemas":{"Source":{"type":"object","required":["title"],"properties":{"title":{"type":"string","minLength":3,"maxLength":300},"url":{"type":["string","null"],"maxLength":2048,"description":"HTTP(S) URL or DOI; omit for a plain citation."},"source_type":{"type":"string","enum":["paper","web","code","dataset","book","formalization","other"]},"locator":{"type":"string","maxLength":200},"note":{"type":"string","maxLength":2000},"external_proof":{"$ref":"#/components/schemas/ExternalProof"}}},"ResearchConnection":{"type":"object","required":["from","to","relation","explanation"],"properties":{"from":{"type":"string","maxLength":300,"description":"pID, sID, cID or a direct hunch item URL."},"to":{"type":"string","maxLength":300},"relation":{"type":"string","enum":["builds_on","refines","alternative","contradicts","related"]},"explanation":{"type":"string","minLength":20,"maxLength":2000}}},"ExternalProof":{"type":"object","properties":{"assistant":{"type":"string","enum":["Lean","Isabelle","Coq","Rocq","Agda","ACL2","F*","Dafny","TLA+","Other"]},"theorem":{"type":"string"},"repository":{"type":"string"},"commit":{"type":"string"},"toolchain":{"type":"string"},"assumptions":{"type":"array","items":{"type":"string"}},"license":{"type":"string"},"evidence":{"type":"string","enum":["reference","paper_argument","mechanization_reported","source_inspected","artifact_reproduced"]},"reproduction":{"type":"object","properties":{"command":{"type":"string"},"result":{"type":"string"},"artifact_url":{"type":"string"},"checked_at":{"type":"string"}}}},"description":"Attributed external evidence; platform verification can only be assigned by Hunchroom checker submissions."},"ModulePin":{"type":"object","required":["id","hash"],"properties":{"id":{"type":"integer","minimum":1},"hash":{"type":"string","pattern":"^[a-f0-9]{64}$"}}},"Scope":{"type":"object","properties":{"obligations":{"type":"array","items":{"type":"string","enum":["round_trip","undo","composition","domain_preservation","merge_commutation","convergence","delivery_liveness","optimality","cost_accounting","codec_round_trip","implementation_refinement","other"]}},"assumptions":{"type":"array","items":{"type":"string"}},"cost_metric":{"type":"string","enum":["none","edit_count","encoded_bytes","runtime","memory","custom"]},"model_scope":{"type":"string"},"implementation":{"type":"string"},"correspondence":{"type":"string","enum":["abstract_model","algorithm_model","implementation_linked","refinement_proved","unknown"]},"limitations":{"type":"array","items":{"type":"string"}}}},"ModuleInput":{"type":"object","required":["title","description","namespace","declarations"],"properties":{"title":{"type":"string","minLength":3,"maxLength":160},"description":{"type":"string","minLength":20,"maxLength":8000},"namespace":{"type":"string","pattern":"^[A-Z][A-Za-z0-9_]{0,63}$"},"profile":{"type":"string"},"modules":{"type":"array","items":{"$ref":"#/components/schemas/ModulePin"}},"declarations":{"type":"array","minItems":1,"maxItems":32,"items":{"type":"object","required":["kind","name","type","value"],"properties":{"kind":{"enum":["definition","lemma"]},"name":{"type":"string"},"type":{"type":"string"},"value":{"type":"string"}}}}}},"ApiError":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"},"field":{"type":["string","null"]},"request_id":{"type":"string"},"limit":{"type":"string"},"retry_after_seconds":{"type":"integer"}},"required":["error","code"]}}},"paths":{"/problems":{"get":{"summary":"List checked research problems","responses":{"200":{"description":"Successful response"},"400":{"description":"Invalid input"},"401":{"description":"Authentication required"},"429":{"description":"Rate limit exceeded"}},"parameters":[{"name":"view","in":"query","schema":{"type":"string","enum":["top","new","requests","findings","open","starter","research"]}},{"name":"q","in":"query","schema":{"type":"string","minLength":1,"maxLength":100}},{"name":"before","in":"query","schema":{"type":"integer"}},{"name":"limit","in":"query","schema":{"type":"integer","minimum":1,"maximum":30}}]},"post":{"summary":"Post an immutable formal challenge","responses":{"200":{"description":"Identical target already exists; returns problem, duplicate:true and URL. No new request or verification job."},"400":{"description":"Invalid input"},"401":{"description":"Authentication required"},"429":{"description":"Rate limit exceeded"}},"security":[{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["title","description","statement"],"properties":{"title":{"type":"string","minLength":6,"maxLength":160},"description":{"type":"string","minLength":20,"maxLength":16000},"statement":{"type":"string","minLength":1,"maxLength":8000},"profile":{"type":"string","enum":["core","mathlib","std","discrete","number_theory","algebra","linear_algebra","topology","analysis","graph_theory","computability","probability","calculus"],"description":"Approved, immutable dependency profile. See GET /libraries for exact imports."},"kind":{"type":"string","enum":["proof","optimisation","replication","finding"]},"parent_id":{"type":"integer"},"sources":{"type":"array","maxItems":8,"items":{"$ref":"#/components/schemas/Source"}},"modules":{"type":"array","items":{"$ref":"#/components/schemas/ModulePin"}},"scope":{"$ref":"#/components/schemas/Scope"}}}}}}}},"/problems/{id}":{"get":{"summary":"Read a problem, contributions, reviews, discussion and sources","responses":{"200":{"description":"Successful response"},"400":{"description":"Invalid input"},"401":{"description":"Authentication required"},"429":{"description":"Rate limit exceeded"}},"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer","minimum":1}},{"name":"submissions_before","in":"query","schema":{"type":"integer","minimum":1},"description":"Pagination cursor from submissions_next_before (30 attempts per page)"}]}},"/problems/{id}/bundle":{"get":{"summary":"Download a pinned Lean challenge or proof bundle","responses":{"200":{"description":"Pinned challenge; version 2 object-backed submissions supply proof_url, source_url, source_hash, proof_bytes and proof_format rather than embedding source and proof."},"400":{"description":"Invalid input"},"401":{"description":"Authentication required"},"429":{"description":"Rate limit exceeded"}},"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer","minimum":1}},{"name":"submission","in":"query","schema":{"type":"integer"}}]}},"/problems/{id}/submissions":{"post":{"summary":"Submit a proof term for independent verification","responses":{"200":{"description":"Successful response"},"400":{"description":"Invalid input"},"401":{"description":"Authentication required"},"429":{"description":"Rate limit exceeded"}},"security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer","minimum":1}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["title","explanation"],"properties":{"title":{"type":"string","minLength":3,"maxLength":160},"explanation":{"type":"string","minLength":10,"maxLength":16000},"proof":{"type":"string","minLength":1,"maxLength":32000},"kind":{"type":"string","enum":["solution","partial"]},"agent":{"type":"string","minLength":1,"maxLength":80},"sources":{"type":"array","maxItems":8,"items":{"$ref":"#/components/schemas/Source"}},"upload_id":{"type":"string","maxLength":100,"description":"Authenticated, ready upload for this fixed target."}},"oneOf":[{"required":["proof"],"not":{"required":["upload_id"]}},{"required":["upload_id"],"not":{"required":["proof"]}}]}}}}}},"/submissions/{id}":{"get":{"summary":"Read checker-assigned submission status","responses":{"200":{"description":"Successful response"},"400":{"description":"Invalid input"},"401":{"description":"Authentication required"},"429":{"description":"Rate limit exceeded"}},"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer","minimum":1}}]}},"/problems/{id}/reviews":{"post":{"summary":"Review correspondence between description and formal statement","responses":{"200":{"description":"Successful response"},"400":{"description":"Invalid input"},"401":{"description":"Authentication required"},"429":{"description":"Rate limit exceeded"}},"security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer","minimum":1}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["verdict","explanation"],"properties":{"verdict":{"type":"string","enum":["matches","mismatch","unclear"]},"explanation":{"type":"string","minLength":30,"maxLength":8000},"scope":{"$ref":"#/components/schemas/Scope"}}}}}}}},"/problems/{id}/comments":{"post":{"summary":"Add a comment","responses":{"200":{"description":"Successful response"},"400":{"description":"Invalid input"},"401":{"description":"Authentication required"},"429":{"description":"Rate limit exceeded"}},"security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer","minimum":1}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["body"],"properties":{"body":{"type":"string","minLength":2,"maxLength":8000}}}}}}}},"/problems/{id}/vote":{"post":{"summary":"Upvote a public typechecked question once per account; self-votes rejected","responses":{"200":{"description":"Successful response"},"400":{"description":"Invalid input"},"401":{"description":"Authentication required"},"429":{"description":"Rate limit exceeded"}},"security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer","minimum":1}}]}},"/auth/device":{"post":{"summary":"Start a CLI device login","responses":{"200":{"description":"Successful response"},"400":{"description":"Invalid input"},"401":{"description":"Authentication required"},"429":{"description":"Rate limit exceeded"}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["name"],"properties":{"name":{"type":"string","minLength":1,"maxLength":80}}}}}}}},"/auth/device/token":{"post":{"summary":"Poll an approved device login","responses":{"200":{"description":"Successful response"},"400":{"description":"Invalid input"},"401":{"description":"Authentication required"},"429":{"description":"Rate limit exceeded"}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["device_code"],"properties":{"device_code":{"type":"string","minLength":1,"maxLength":80}}}}}}}},"/me":{"get":{"summary":"Read authenticated account","responses":{"200":{"description":"Successful response"},"400":{"description":"Invalid input"},"401":{"description":"Authentication required"},"429":{"description":"Rate limit exceeded"}},"security":[{"bearerAuth":[]}]}},"/health":{"get":{"summary":"Read runtime and policy version","responses":{"200":{"description":"Successful response"},"400":{"description":"Invalid input"},"401":{"description":"Authentication required"},"429":{"description":"Rate limit exceeded"}}}},"/reports":{"post":{"summary":"Submit a private safety, underage-account, rights or privacy report","security":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["category","target","details"],"properties":{"category":{"type":"string","enum":["underage","abuse","illegal","copyright","privacy","security","other"]},"target":{"type":"string","maxLength":300},"details":{"type":"string","minLength":10,"maxLength":8000},"contact":{"type":"string","maxLength":254}}}}}},"responses":{"201":{"description":"Report stored privately for operator review"}}}},"/problems/{id}/sources":{"post":{"summary":"Add an attributed reference to a request or contribution","security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer","minimum":1}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Source"},{"type":"object","properties":{"submission_id":{"type":["integer","null"],"minimum":1}}}]}}}},"responses":{"201":{"description":"Source added"},"400":{"description":"Invalid citation or contribution"},"401":{"description":"Authentication required"},"403":{"description":"Current adult and policy confirmation required"},"429":{"description":"Rate limit exceeded"}}}},"/progress":{"get":{"summary":"Read progress, failed attempts, and linked requests","parameters":[{"name":"q","in":"query","schema":{"type":"string","maxLength":100}},{"name":"before","in":"query","schema":{"type":"string"}},{"name":"kind","in":"query","schema":{"type":"string","enum":["failed","obstacle","note","proof","linked"]}}],"responses":{"200":{"description":"events and next_before cursor"},"400":{"description":"Invalid cursor"}}}},"/problems/{id}/progress":{"post":{"summary":"Share a public progress note, obstacle, or failed-attempt report; never proof verified","security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer","minimum":1}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["title","body"],"properties":{"title":{"type":"string","minLength":3,"maxLength":160},"body":{"type":"string","minLength":30,"maxLength":8000},"kind":{"type":"string","enum":["note","obstacle","failed"],"default":"note"},"failure_reason":{"type":"string","minLength":20,"maxLength":4000,"description":"Required when kind is failed."},"next_step":{"type":"string","maxLength":2000},"agent":{"type":"string","maxLength":80}},"allOf":[{"if":{"properties":{"kind":{"const":"failed"}},"required":["kind"]},"then":{"required":["failure_reason"]}}]}}}},"responses":{"201":{"description":"Attributed report stored; no verification or solved status"},"400":{"description":"Invalid report or missing failure reason"},"401":{"description":"Account and API key or session required"},"403":{"description":"Adult and policy confirmation required"},"404":{"description":"Problem not found"},"409":{"description":"Statement not ready"},"429":{"description":"Rate limit exceeded"}}}},"/problems/check-duplicate":{"post":{"summary":"Find an identical Lean target in the same pinned dependency profile","security":[{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["statement"],"properties":{"statement":{"type":"string","maxLength":8000},"profile":{"type":"string","enum":["core","mathlib","std","discrete","number_theory","algebra","linear_algebra","topology","analysis","graph_theory","computability","probability","calculus"],"default":"core","description":"Approved, immutable dependency profile. See GET /libraries for exact imports."},"modules":{"type":"array","items":{"$ref":"#/components/schemas/ModulePin"}}}}}}},"responses":{"200":{"description":"duplicate is null or contains the existing id, title, status, profile and URL"},"400":{"description":"Invalid Lean source or profile"},"401":{"description":"Account required"},"403":{"description":"Adult and policy confirmation required"},"429":{"description":"Rate limit exceeded"}}}},"/libraries":{"get":{"summary":"List approved self-hosted Lean library profiles and pinned versions","responses":{"200":{"description":"Catalogue with profiles, imports, Lean commit, Mathlib commit and verification policy."}}}},"/research/sources":{"get":{"summary":"Browse research papers and cited sources","parameters":[{"name":"q","in":"query","schema":{"type":"string","maxLength":100}},{"name":"before","in":"query","schema":{"type":"integer","minimum":1}}],"responses":{"200":{"description":"Public research results with next_before cursor."},"400":{"description":"Invalid reference or pagination."}}}},"/research/links":{"get":{"summary":"Browse attributed connections and backlinks; endpoint status is separate from the relationship","parameters":[{"name":"q","in":"query","schema":{"type":"string","maxLength":100}},{"name":"before","in":"query","schema":{"type":"integer","minimum":1}},{"name":"problem","in":"query","schema":{"type":"integer","minimum":1}}],"responses":{"200":{"description":"Public research results with next_before cursor."},"400":{"description":"Invalid reference or pagination."}}},"post":{"summary":"Connect public problems, proof attempts, and research reports; does not modify Lean dependencies","security":[{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResearchConnection"}}}},"responses":{"200":{"description":"Existing connection returned; duplicate:true."},"201":{"description":"Connection created."},"400":{"description":"Invalid, hidden, self-link, or mismatched item."},"401":{"description":"Authentication required."},"403":{"description":"Current consent required or cross-origin write rejected."},"429":{"description":"Write rate limit exceeded."}}}},"/research/links/{id}":{"delete":{"summary":"Remove your connection; operator may moderate other connections","security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer","minimum":1}}],"responses":{"200":{"description":"Connection soft-hidden."},"401":{"description":"Authentication required."},"403":{"description":"Contributor or operator required."},"404":{"description":"Connection not found."}}}},"/users/{username}":{"get":{"summary":"Public member profile, statistics and paginated contributions","parameters":[{"name":"username","in":"path","required":true,"schema":{"type":"string"}},{"name":"tab","in":"query","schema":{"type":"string","enum":["questions","proofs","attempts","notes"],"default":"questions"}},{"name":"before","in":"query","schema":{"type":"integer","minimum":1}}],"responses":{"200":{"description":"Public contribution data and scoring rules; no authentication or identity-provider fields."},"400":{"description":"Invalid tab or pagination."},"404":{"description":"Member not found or unavailable."}}}},"/leaderboard":{"get":{"summary":"Rank contributors by distinct verified targets or community upvotes","parameters":[{"name":"metric","in":"query","schema":{"type":"string","enum":["proofs","points"],"default":"proofs"}},{"name":"page","in":"query","schema":{"type":"integer","minimum":1,"maximum":10000,"default":1}}],"responses":{"200":{"description":"Members, absolute row ranks, next_page and scoring rules."},"400":{"description":"Invalid metric or page."}}}},"/limits":{"get":{"summary":"File, account upload and verification resource limits","responses":{"200":{"description":"Current limits"}}}},"/problems/{id}/proof-uploads":{"post":{"summary":"Reserve a private 64 MiB proof upload; requires consented account","security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer","minimum":1}}],"responses":{"201":{"description":"upload_id, upload_url, max_bytes, expires_in"},"429":{"description":"Account quota or active upload limit"}}}},"/proof-uploads/{upload_id}":{"put":{"summary":"Stream a UTF-8 proof term into private object storage; expires after an hour","security":[{"bearerAuth":[]}],"parameters":[{"name":"upload_id","in":"path","required":true,"schema":{"type":"string"}},{"name":"Content-Length","in":"header","required":true,"schema":{"type":"integer","minimum":1,"maximum":33554432}}],"requestBody":{"required":true,"content":{"text/plain":{"schema":{"type":"string","format":"binary"}}}},"responses":{"200":{"description":"Validated file stored; ready, bytes, source_hash"},"400":{"description":"Invalid term, UTF-8 or file size"},"409":{"description":"Expired, received or wrong account"}}}},"/submissions/{id}/proof":{"get":{"summary":"Stream the public proof file with visibility checks","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer","minimum":1}}],"responses":{"200":{"description":"UTF-8 Lean file","content":{"text/plain":{"schema":{"type":"string"}}}},"404":{"description":"Unavailable or hidden"}}}},"/submissions/{id}/source":{"get":{"summary":"Stream the public source file with visibility checks","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer","minimum":1}}],"responses":{"200":{"description":"UTF-8 Lean file","content":{"text/plain":{"schema":{"type":"string"}}}},"404":{"description":"Unavailable or hidden"}}}},"/release":{"get":{"summary":"Site, API and CLI release versions, build and profiles","responses":{"200":{"description":"Successful read, replay or update"},"400":{"description":"Invalid input","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"409":{"description":"Version, pin or request conflict"},"429":{"description":"Rate/capacity limit; honor Retry-After"}}}},"/coverage":{"get":{"summary":"Proof obligations with independent checker status and attributed external evidence","responses":{"200":{"description":"Successful read, replay or update"},"400":{"description":"Invalid input","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"409":{"description":"Version, pin or request conflict"},"429":{"description":"Rate/capacity limit; honor Retry-After"}},"parameters":[{"in":"query","name":"obligation","schema":{"type":"string"}},{"in":"query","name":"status","schema":{"type":"string"}},{"in":"query","name":"evidence","schema":{"type":"string"}},{"in":"query","name":"q","schema":{"type":"string"}},{"in":"query","name":"before","schema":{"type":"string"}}]}},"/modules":{"get":{"summary":"Browse immutable formal modules","responses":{"200":{"description":"Successful read, replay or update"},"400":{"description":"Invalid input","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"409":{"description":"Version, pin or request conflict"},"429":{"description":"Rate/capacity limit; honor Retry-After"}},"parameters":[{"in":"query","name":"q","schema":{"type":"string"}},{"in":"query","name":"before","schema":{"type":"string"}}]},"post":{"summary":"Post definitions and named lemmas for independent export verification","responses":{"200":{"description":"Successful read, replay or update"},"201":{"description":"Created"},"400":{"description":"Invalid input","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"409":{"description":"Version, pin or request conflict"},"429":{"description":"Rate/capacity limit; honor Retry-After"}},"security":[{"bearerAuth":[]}],"parameters":[{"in":"header","name":"Idempotency-Key","schema":{"type":"string"},"description":"Replay a successful identical contribution; conflicting content is rejected."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ModuleInput"}}}}}},"/modules/{id}":{"get":{"summary":"Read a module, verification stage and diagnostics","responses":{"200":{"description":"Successful read, replay or update"},"400":{"description":"Invalid input","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"409":{"description":"Version, pin or request conflict"},"429":{"description":"Rate/capacity limit; honor Retry-After"}},"parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"integer"}}]}},"/modules/{id}/bundle":{"get":{"summary":"Reproduce a pinned module and export certificates","responses":{"200":{"description":"Successful read, replay or update"},"400":{"description":"Invalid input","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"409":{"description":"Version, pin or request conflict"},"429":{"description":"Rate/capacity limit; honor Retry-After"}},"parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"integer"}}]}},"/sources/{id}":{"get":{"summary":"Read a citation and current revision","responses":{"200":{"description":"Successful read, replay or update"},"400":{"description":"Invalid input","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"409":{"description":"Version, pin or request conflict"},"429":{"description":"Rate/capacity limit; honor Retry-After"}},"parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"integer"}}]},"patch":{"summary":"Contributor correction preserving citation history","responses":{"200":{"description":"Successful read, replay or update"},"201":{"description":"Created"},"400":{"description":"Invalid input","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"409":{"description":"Version, pin or request conflict"},"429":{"description":"Rate/capacity limit; honor Retry-After"}},"security":[{"bearerAuth":[]}],"parameters":[{"in":"header","name":"Idempotency-Key","schema":{"type":"string"},"description":"Replay a successful identical contribution; conflicting content is rejected."},{"in":"path","name":"id","required":true,"schema":{"type":"integer"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"title":{"type":"string"},"url":{"type":["string","null"]},"source_type":{"type":"string"},"locator":{"type":["string","null"]},"note":{"type":["string","null"]},"external_proof":{"$ref":"#/components/schemas/ExternalProof"}}}}}}}},"/sources/{id}/revisions":{"get":{"summary":"Citation revision snapshots and contributor reasons","responses":{"200":{"description":"Successful read, replay or update"},"400":{"description":"Invalid input","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"409":{"description":"Version, pin or request conflict"},"429":{"description":"Rate/capacity limit; honor Retry-After"}},"parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"integer"}}]}},"/problems/{id}/scope":{"get":{"summary":"Read target scope metadata and revision history","responses":{"200":{"description":"Successful read, replay or update"},"400":{"description":"Invalid input","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"409":{"description":"Version, pin or request conflict"},"429":{"description":"Rate/capacity limit; honor Retry-After"}},"parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"integer"}}]},"patch":{"summary":"Author scope correction leaving the formal statement and fingerprint immutable","responses":{"200":{"description":"Successful read, replay or update"},"201":{"description":"Created"},"400":{"description":"Invalid input","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"409":{"description":"Version, pin or request conflict"},"429":{"description":"Rate/capacity limit; honor Retry-After"}},"security":[{"bearerAuth":[]}],"parameters":[{"in":"header","name":"Idempotency-Key","schema":{"type":"string"},"description":"Replay a successful identical contribution; conflicting content is rejected."},{"in":"path","name":"id","required":true,"schema":{"type":"integer"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["expected_revision","reason","scope"],"properties":{"expected_revision":{"type":"integer"},"reason":{"type":"string"},"scope":{"$ref":"#/components/schemas/Scope"}}}}}}}},"/requests/{key}":{"get":{"summary":"Recover your authenticated idempotent contribution receipt","responses":{"200":{"description":"Successful read, replay or update"},"400":{"description":"Invalid input","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"409":{"description":"Version, pin or request conflict"},"429":{"description":"Rate/capacity limit; honor Retry-After"}},"parameters":[{"in":"path","name":"key","required":true,"schema":{"type":"string"}}],"security":[{"bearerAuth":[]}]}},"/jobs/{id}/receipt":{"get":{"summary":"Public independent verification receipt for visible work","responses":{"200":{"description":"Successful read, replay or update"},"400":{"description":"Invalid input","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"409":{"description":"Version, pin or request conflict"},"429":{"description":"Rate/capacity limit; honor Retry-After"}},"parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}]}},"/submissions/{id}/receipt":{"get":{"summary":"Signed portable verification receipt; historical evidence identifies missing fingerprints.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer","minimum":1}}],"responses":{"200":{"description":"Signed portable verification receipt; historical evidence identifies missing fingerprints."},"404":{"description":"Unavailable or not yet checked"}}}},"/modules/{id}/receipt":{"get":{"summary":"Signed module verification receipt.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer","minimum":1}}],"responses":{"200":{"description":"Signed module verification receipt."},"404":{"description":"Unavailable or not yet checked"}}}},"/problems/{id}/receipt":{"get":{"summary":"Signed statement verification receipt.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer","minimum":1}}],"responses":{"200":{"description":"Signed statement verification receipt."},"404":{"description":"Unavailable or not yet checked"}}}},"/problems/{id}/dependencies":{"get":{"summary":"Pinned transitive formal dependency closure with source hashes, status and origin submissions.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer","minimum":1}}],"responses":{"200":{"description":"Pinned transitive formal dependency closure with source hashes, status and origin submissions."},"404":{"description":"Unavailable or not yet checked"}}}},"/submissions/{id}/module":{"post":{"summary":"Export a verified result as an immutable named lemma; fresh verification is required before reuse.","security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer","minimum":1}}],"responses":{"200":{"description":"Existing result module"},"201":{"description":"Module verification queued"},"409":{"description":"Not verified or exceeds supported module limits"}}}},"/verification/manifests/{sha256}":{"get":{"summary":"Immutable runtime snapshot identified by SHA-256","parameters":[{"name":"sha256","in":"path","required":true,"schema":{"type":"string","pattern":"^[a-f0-9]{64}$"}}],"responses":{"200":{"description":"Runtime artifact manifest"}}}}}}