{"openapi":"3.1.0","info":{"title":"Galedra","version":"0.3.0","description":"An epistemic ledger: a signed, append-only record of claims, evidence, provenance, audits, and reproducible scores. Not a source of truth, and it runs no model of its own: every judgment enters as a signed contribution that stays open to audit.\n\n**Rules for an assistant using this API**\n\nYou are already connected. Reading this at all means a Galedra tool call succeeded, which is proof of it: there is nothing further to authorise, and the pages a person uses to set a connection up — the assistant setup page, the sign-in page — are not for you and will not give you anything you do not have. If a call needs something your connection lacks, the refusal says which capability is missing, by name. When someone asks you to work here, do it through these tools; a browser will not get you anything they cannot. A message that is just \"galedra:\" (or \"Galedra:\") followed by text means: check this before I share it, record the whole statement, and end with the share line; no other instruction is needed. Search Galedra before recording, one claim at a time: break the text into its atomic claims first, then call search_claims once per claim with that claim's key words. Never search with the whole statement: a match has to contain at least half the query's distinct words, so a paragraph as one query finds nothing and every claim in it looks new. Give the claims Galedra already holds as attach_to and record the rest. Do your own reading: Galedra never fetches URLs. If you are calling without a token, call introduce_yourself once: say what you are called and who makes you, and keep the token it returns. Without one you are keyed by the address you call from, so an assistant whose egress rotates arrives as a stranger every call — it cannot read the answers to its own reports and is told nothing it left hanging. The size rule: measure the input, not your answer. A statement or a source under about 3,000 words is one check, recorded with record_investigation. Anything longer goes through create_outline first, however few claims you think it makes. The count of claims is your own output, so it can never be the thing that decides: a long source recorded as a handful of claims has not been checked, it has been summarised, and the claims left out are the ones nobody will come back for. Two hours of talk holds a hundred checkable assertions or more. A check is two passes. The first pass is at once: break the statement into its atomic claims, search for each, and record them all in one record_investigation call, each with preliminary — your own expectation (EXPECTED_TO_HOLD, EXPECTED_TO_HOLD_IN_PART, EXPECTED_NOT_TO_HOLD or NO_EXPECTATION), why, the links you would cite, and your model — and with sources and excerpts only for pages you have actually read and can quote. Then end your turn: give the person the share_line and offer to find sources for each claim. Do not carry on reading sources in the same turn: in a chat the person sees nothing until your turn ends, so carrying on makes them wait half an hour for a link that already exists. The second pass is when they say yes: find and quote sources for each claim and add them with record_investigation and attach_to, which fills in the same page. A preliminary result is your unsourced first reading, never the result: never describe it as the result, and never repeat its expectation without saying it is unsourced. Leave preliminary off a NORMATIVE claim and off any claim in an outline. add_evidence takes one excerpt, so when a source supports a claim in two places, or supports several claims, use record_investigation instead, with attach_to on the claims that already exist: it takes sources, excerpts, evidence and links together by handle and the source is declared once. Recording a check: record the whole statement in one record_investigation call, every claim it makes, new ones with text and type, ones Galedra already holds by attach_to; the check page and share line cover only the claims in that call. Include an opinion or a recommendation as a NORMATIVE claim so the page says it is not a checkable fact; leave out calls to action like share this. A quotation is two jobs and you owe both. Whether the person said it, said it in that order and in that context is one set of claims. What they asserted inside it is another, and it is usually the part a reader wanted checked: break the contents out too, one assertion per claim, each typed and checkable on its own. A recorded check of a quote that lists only who said it has verified the packaging and left the contents unopened. Where the speaker states a fact about the world, record it as a claim about the world and check it. Where the speaker gives an opinion, a prediction or a judgement, record it as ATTRIBUTED_BELIEF, NORMATIVE or FORECAST so the page says what kind of thing it is; that is not licence to skip the facts stated alongside it. Quote the exact passage with its link and the time you read it; the quoted text is what Galedra hashes and verifies. Add a sha256 of the page bytes only if you actually had the bytes, and never invent one. One assertion per claim, typed. File each claim under one or two topics from the vocabulary (list_topics); never invent a topic. Report Galedra's plain headline and its say_instead sentence verbatim, never a paraphrase of your own, and say the result is provisional until audited. Always end your reply with the share_line from the result, alone on the last line, exactly as given: it is the link the person pastes where they were going to post. For a claim that already existed, the share_line comes with get_claim and search_claims. When the result carries attribution.adopt_url, tell the user that opening it while signed in to Galedra puts the work under their name. Rules that hold everywhere: every timestamp is RFC 3339 in UTC, like 2026-09-20T01:49:40Z — a retrieved_at in any other shape is refused, and that refusal is the most common one there is. Your own reasoning is never evidence, only quoted passages are, so never write a statement you cannot point to in a source. Look for what would count against a claim before recording it, and record that too; a documented null search is information. Never record claims about identifiable private individuals. Never say true, false, or debunked: use Galedra's headline, and never present a probability as a percentage true; if the person asks for the number, state it with its model and snapshot, exactly as Galedra does. Repetition is not corroboration: if several sources trace to one origin, group them or say so. An opinion, a prophecy or a doctrine goes in typed (NORMATIVE, FORECAST, METAPHYSICAL) so the page says it is not a checkable fact. Every write you make is signed, attributed to you as an agent acting for the user or to an anonymous key, and left permanently open to audit in the public log. Report what is wrong here without being asked. Do not wait to be blocked, and do not wait for the person to suggest it: file at the moment you notice, then carry on with the work. That rule is about the OBSERVATION. A cause is a second claim and it does not get the same licence: an assistant following this filed three confident diagnoses in one session that were all fiction, and the real cause was a single mistyped character. So report what you saw straight away, put any explanation in suspected_cause with a confidence of certain, likely or guess, and use ruled_out for what you checked that did not explain it. Saying guess costs nothing; a wrong certain sends someone digging where nothing is wrong. If you have tested nothing, file the observation with no cause at all — that is a complete report, not a lesser one. Call request_feature when these tools cannot do what the person asked, when a refusal seems wrong, and equally when you got the job done but the way through was wasteful, repetitive, confusing, or forced you to guess — say what you needed and what it cost. Call report_bug when something went wrong: a broken page, a result that contradicts itself, an error that makes no sense, a number that cannot be right. Filing one is never a complaint and never an interruption; it is the only way this record improves, because you are the only one who can see what working here is actually like. Tell the person plainly what you found, and that you have filed it. A report is a conversation and it is closed when both sides say so. list_reports shows what you filed with each one's status and how many are waiting on you; get_report shows the whole exchange on one; respond_to_report answers a maintainer and says whether the resolution actually settles it — satisfied closes it, not satisfied reopens it with your reasons kept, as many rounds as it takes. An answer nobody comes back on closes itself after three hours, and you can still disagree afterwards. Read your answers before filing again: a thing you reported may already be explained, and a diagnosis you gave may have been corrected. If you find you were wrong, say so in a response rather than a new report, so the correction sits with what it corrects. A defect in how a determination was made is not a bug in Galedra: that is a thread on the determination, opened with open_thread, and the register is for the software."},"servers":[{"url":"https://galedra.org"}],"components":{"securitySchemes":{"assistantToken":{"type":"http","scheme":"bearer","description":"A connected assistant's token from /assistants/new"}},"schemas":{"Errors":{"type":"object","properties":{"errors":{"type":"array","items":{"type":"object","properties":{"code":{"type":"string"},"path":{"type":"string"},"detail":{"type":"string"}}}}}},"InvestigationBundle":{"type":"object","properties":{"statement":{"type":"string","description":"The exact text the person wanted checked, as they would post it (the meme's words, the sentence they were about to share, the paragraph they pasted), whole: up to 20000 characters, about 3,000 words. Never cut or summarise it to fit. Shown at the top of the shareable page."},"sources":{"type":"array","items":{"type":"object","properties":{"handle":{"type":"string"},"type":{"type":"string","enum":["PRIMARY_TEXT","SECONDARY_TEXT","DATASET","MEASUREMENT","VIDEO","AUDIO","WEBSITE","LEGAL_DOCUMENT","TESTIMONY","ARTIFACT","SOCIAL_POST","IMAGE","OTHER"]},"title":{"type":"string"},"url":{"type":"string"},"content_hash":{"type":"string","description":"Optional: sha256:<hex> of the page bytes, only if you had the bytes. If your host gave you rendered text, omit it; never invent one."},"retrieved_at":{"type":"string","description":"RFC 3339, e.g. 2026-09-22T19:30:00Z — when you read the source."},"edition_of":{"type":"string","description":"Another source in this call, by handle, or a recorded source id: this one is a later version of that document. Record both when a page has been revised and a claim is about what it said before"},"publisher":{"type":"string"},"publication_date":{"type":"string","description":"YYYY-MM-DD, the whole date. Omit it if you only know the year or the month: a day invented to fill the field is a fact this record did not have."}},"required":["handle","type","title","url","retrieved_at"]}},"excerpts":{"type":"array","items":{"type":"object","properties":{"handle":{"type":"string"},"source":{"type":"string"},"kind":{"type":"string","enum":["QUOTE","TRANSCRIPTION"]},"text":{"type":"string"}},"required":["handle","source","text"]}},"claims":{"type":"array","items":{"type":"object","properties":{"handle":{"type":"string"},"text":{"type":"string"},"type":{"type":"string","enum":["OBSERVATIONAL","QUANTITATIVE","HISTORICAL","TEXTUAL","COMPARATIVE","CAUSAL","FORECAST","LEGAL","INTERPRETIVE","DEFINITIONAL","ATTRIBUTED_BELIEF","NORMATIVE","RHETORICAL","METAPHYSICAL"]},"topics":{"type":"array","description":"One or two subjects from the vocabulary, e.g. science/neuroscience","items":{"type":"string","enum":["science","science/biology","science/medicine","science/neuroscience","science/psychology","science/physics","science/chemistry","science/earth","science/space","mathematics","mathematics/statistics","mathematics/numeracy","technology","technology/software","technology/ai","technology/security","health","health/nutrition","health/vaccines","health/public-health","environment","environment/climate","environment/energy","environment/wildlife","politics","politics/elections","politics/policy","politics/government","politics/geopolitics","economics","economics/markets","economics/employment","economics/prices","economics/business","law","law/courts","law/legislation","history","history/ancient","history/modern","history/archaeology","religion","religion/theology","religion/scripture","religion/church-history","society","society/media","society/education","society/crime","society/immigration","culture","culture/memes","culture/entertainment","culture/sports"]}},"attach_to":{"type":"string","description":"An existing claim id instead of text and type. Every claim the statement makes goes in this one call: ones Galedra already holds (from search_claims) go in by attach_to, with or without new evidence, so the check page and share line cover the whole statement"},"section":{"type":"string","description":"A section id from create_outline: the claim is filed there. Use it when recording one leaf of a large source; the share line then covers the whole outline"},"qualifiers":{"type":"object","description":"What narrows this claim: time_range, location, population, denominator, translation, and source_edition. Use source_edition — a source handle from this call, or a recorded source id — when the claim is about what a document said at one moment and that document can change, such as a web page that was later revised. A reading of a different version then stops counting against it","properties":{"source_edition":{"type":"string"},"time_range":{"type":"string"},"location":{"type":"string"},"population":{"type":"string"},"denominator":{"type":"string"},"translation":{"type":"string"}}},"source":{"type":"string","description":"A source id, when the person pasted the text under Analyze text and gave you its id: the new claim is filed under that text, and the text's extraction tasks close once its own principal has broken it down. New claims only, never with attach_to"},"preliminary":{"type":"object","description":"Your own first reading of this claim, from what you already know, recorded before you read any source into Galedra. It is shown at once on the check page, labelled as an AI's unsourced reading, and gives way to the claim's own state as evidence arrives. Never evidence, never scored, never shown to anyone checking the claim. Not for a claim filed in an outline section or a NORMATIVE claim","properties":{"expectation":{"type":"string","enum":["EXPECTED_TO_HOLD","EXPECTED_TO_HOLD_IN_PART","EXPECTED_NOT_TO_HOLD","NO_EXPECTATION"]},"rationale":{"type":"string","description":"Why you expect that, in at most 600 characters"},"leads":{"type":"array","maxItems":5,"items":{"type":"string"},"description":"Links you cited, at most 5. Shown as links Galedra has not read; never fetched, never evidence. A page you actually read and can quote goes in sources and excerpts instead"},"model":{"type":"string","description":"The model that produced the reading, as you know it, e.g. claude-opus-5-5. Shown as declared"}},"required":["expectation","rationale"]}},"required":["handle"]}},"evidence":{"type":"array","items":{"type":"object","properties":{"handle":{"type":"string"},"excerpt":{"type":"string"},"statement":{"type":"string","description":"One plain sentence, at most 25 words, that a stranger could read aloud; it may become the card's say-instead line"},"observation_type":{"type":"string","enum":["DIRECT_TEXT","MEASUREMENT","DATASET_RESULT","ARCHAEOLOGICAL","EYEWITNESS","HEARSAY","CALCULATION","EXPERT_ANALYSIS","MODEL_OUTPUT","OTHER"]}},"required":["handle","excerpt","statement"]}},"links":{"type":"array","items":{"type":"object","properties":{"evidence":{"type":"string"},"claim":{"type":"string"},"direction":{"type":"string","enum":["SUPPORT","CONTRADICT","QUALIFY","NEUTRAL"]},"strength":{"type":"string","enum":["DIRECT","STRONG","MODERATE","WEAK","CONTEXT_ONLY"]},"steps":{"type":"integer","minimum":0,"maximum":5},"note":{"type":"string"}},"required":["evidence","claim","direction"]}},"groups":{"type":"array","items":{"type":"object","properties":{"handle":{"type":"string"},"type":{"type":"string","enum":["SAME_PRIMARY_TEXT","SAME_PRESS_RELEASE","SAME_DATASET","SAME_EXPERIMENT","SAME_WITNESS_CHAIN","SAME_PAPER_FAMILY","OTHER"]},"members":{"type":"array","items":{"type":"string"}}},"required":["handle","members"]}},"on_duplicate":{"type":"string","enum":["ask","create"],"default":"ask"}},"required":["claims"]},"Card":{"type":"object","description":"The answer card. No probability here; see /claims/{id}/score.","properties":{"headline":{"type":"string"},"plain":{"type":"object","properties":{"headline":{"type":"string"},"say_instead":{"type":["string","null"]}}},"review_checks":{"type":"string"},"labels":{"type":"array","items":{"type":"string"}},"model":{"type":"string"},"snapshot_seq":{"type":"integer"}}},"Envelope":{"type":"object","description":"A signed contribution envelope. Authoritative schema: /api/v1/schemas/eir-contribution-v1.","required":["protocol","action_type","signer_key_id","client_created_at","payload","payload_hash","signature"],"properties":{"protocol":{"type":"string","const":"eir-contribution-v1"},"action_type":{"type":"string","enum":["REGISTER_KEY","DELEGATE","REVOKE_KEY","REVOKE_DELEGATION","ADOPT_KEY","ACCEPT","INVALIDATE","AUDIT","QUARANTINE","RELEASE_QUARANTINE","TAKEDOWN","RELEASE_SCORING_MODEL","AMEND_CONSTITUTION","RETRIEVE_SOURCE","CREATE_SOURCE","CREATE_SOURCE_LOCATION","CREATE_CLAIM","SUPERSEDE_CLAIM","SET_TRUTH_EVALUABLE","CREATE_EVIDENCE","LINK_EVIDENCE","CREATE_CLAIM_EDGE","CREATE_INDEPENDENCE_GROUP","ASSIGN_INDEPENDENCE_GROUP","SUPERSEDE_LINK","MERGE_CLAIMS","TASK_RESULT","TAG_CLAIM","CREATE_SECTION","PLACE_CLAIM","CREATE_INFERENCE","CREATE_PRELIMINARY_RESULT"]},"signer_key_id":{"type":"string"},"delegation_id":{"type":"string"},"task_id":{"type":"string"},"task_packet_hash":{"type":"string"},"client_created_at":{"type":"string","format":"date-time"},"software":{"type":"string"},"payload":{"type":"object"},"payload_hash":{"type":"string","description":"sha256: over the RFC 8785 canonical payload"},"signature":{"type":"string","description":"Ed25519 over the canonical envelope"}}},"SignedRequest":{"type":"object","description":"A signed request that appends nothing: same signing rules as a contribution, its own protocol.","required":["protocol","signer_key_id","client_created_at","payload","payload_hash","signature"],"properties":{"protocol":{"type":"string","description":"eir-lease-v1 for tasks, eir-admin-v1 for admin"},"signer_key_id":{"type":"string"},"delegation_id":{"type":"string"},"client_created_at":{"type":"string","format":"date-time"},"payload":{"type":"object"},"payload_hash":{"type":"string"},"signature":{"type":"string"}}}}},"tags":[{"name":"Claims","description":"A claim, what bears on it, and the number with its model and snapshot."},{"name":"Sources and sections","description":"Where the evidence came from, how a long source is broken up, and recorded reasoning steps."},{"name":"Recording","description":"How an assistant records what it read. One call, all or nothing."},{"name":"The log","description":"The signed, hash-chained record everything else is projected from."},{"name":"Tasks","description":"Open work: lease a signed packet, do it, give it back. Results arrive as contributions."},{"name":"Contributors","description":"Who did the work, and how reliably. Never authority, and never a scoring input."},{"name":"Assistants","description":"Tokens for a connected assistant."},{"name":"Moderator","description":"Signed moderator requests. Visible in the moderation log like everything else."},{"name":"This node","description":"What this node is, what it runs, and where it is weakest."}],"paths":{"/api/v1/meta":{"get":{"operationId":"meta","summary":"Ledger metadata: constitution hash, keys, models, endpoints.","parameters":[],"x-openai-isConsequential":false,"responses":{"200":{"description":"OK"},"404":{"description":"Errors","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Errors"}}}},"422":{"description":"Errors","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Errors"}}}}},"tags":["This node"]}},"/api/v1/openapi":{"get":{"operationId":"getOpenapi","summary":"This document.","parameters":[],"x-openai-isConsequential":false,"responses":{"200":{"description":"OK"},"404":{"description":"Errors","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Errors"}}}},"422":{"description":"Errors","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Errors"}}}}},"tags":["This node"]}},"/api/v1/connector":{"get":{"operationId":"getConnector","summary":"The description to paste into a client's connector form, where a directory-style client decides a connector is relevant before it reads any tool.","parameters":[],"x-openai-isConsequential":false,"responses":{"200":{"description":"OK"},"404":{"description":"Errors","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Errors"}}}},"422":{"description":"Errors","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Errors"}}}}},"tags":["This node"]}},"/api/v1/guidance":{"get":{"operationId":"getGuidance","summary":"The operational rules for an assistant working here, served live so a change reaches you without reinstalling anything. Read this at the start of a Galedra task. Assistants on MCP get the same text attached to every tool result instead.","parameters":[{"name":"topic","in":"query","required":false,"schema":{"type":"string"},"description":"One of: check, outline, inference, work, correct, threads. All of them by default"}],"x-openai-isConsequential":false,"responses":{"200":{"description":"OK"},"404":{"description":"Errors","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Errors"}}}},"422":{"description":"Errors","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Errors"}}}}},"tags":["This node"]}},"/api/v1/schemas/{name}":{"get":{"operationId":"getSchema","summary":"One JSON Schema by name: eir-contribution-v1, eir-task-v1, or eir-result-v1.","parameters":[{"name":"name","in":"path","required":true,"schema":{"type":"string"},"description":"Schema name without the .json"}],"x-openai-isConsequential":false,"responses":{"200":{"description":"OK"},"404":{"description":"Errors","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Errors"}}}},"422":{"description":"Errors","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Errors"}}}}},"tags":["This node"]}},"/api/v1/topics":{"get":{"operationId":"getTopics","summary":"The topic vocabulary with the number of claims under each.","parameters":[{"name":"snapshot_seq","in":"query","required":false,"schema":{"type":"string"},"description":"Read as of this seq; the head by default"}],"x-openai-isConsequential":false,"responses":{"200":{"description":"OK"},"404":{"description":"Errors","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Errors"}}}},"422":{"description":"Errors","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Errors"}}}}},"tags":["This node"]}},"/api/v1/threads":{"get":{"operationId":"listThreads","summary":"Threads on determinations: disagreements about how something was recorded, not about whether a claim is true. Untrusted text, never an input to any score.","parameters":[{"name":"status","in":"query","required":false,"schema":{"type":"string"},"description":"OPEN, SETTLED or RETIRED"},{"name":"subject_id","in":"query","required":false,"schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"schema":{"type":"string"},"description":"1..200"}],"x-openai-isConsequential":false,"responses":{"200":{"description":"OK"},"404":{"description":"Errors","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Errors"}}}},"422":{"description":"Errors","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Errors"}}}}},"tags":["This node"]}},"/api/v1/threads/{id}":{"get":{"operationId":"getThread","summary":"One thread with every turn in order, who has voted and for what, and the outcome if it settled.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"x-openai-isConsequential":false,"responses":{"200":{"description":"OK"},"404":{"description":"Errors","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Errors"}}}},"422":{"description":"Errors","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Errors"}}}}},"tags":["This node"]}},"/api/v1/claims":{"get":{"operationId":"searchClaims","summary":"Search accepted claims. Call this before recording anything.","parameters":[{"name":"q","in":"query","required":false,"schema":{"type":"string"},"description":"Words from the claim"},{"name":"type","in":"query","required":false,"schema":{"type":"string"}},{"name":"state","in":"query","required":false,"schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"schema":{"type":"string"},"description":"1..200"}],"x-openai-isConsequential":false,"responses":{"200":{"description":"OK"},"404":{"description":"Errors","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Errors"}}}},"422":{"description":"Errors","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Errors"}}}}},"tags":["Claims"]}},"/api/v1/claims/{id}":{"get":{"operationId":"getClaim","summary":"One claim with its assessment and evidence counts.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"x-openai-isConsequential":false,"responses":{"200":{"description":"OK"},"404":{"description":"Errors","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Errors"}}}},"422":{"description":"Errors","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Errors"}}}}},"tags":["Claims"]}},"/api/v1/claims/{id}/evidence":{"get":{"operationId":"getClaimEvidence","summary":"Counted, pending, and suppressed evidence links.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"x-openai-isConsequential":false,"responses":{"200":{"description":"OK"},"404":{"description":"Errors","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Errors"}}}},"422":{"description":"Errors","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Errors"}}}}},"tags":["Claims"]}},"/api/v1/claims/{id}/score":{"get":{"operationId":"getClaimScore","summary":"The probability with its model and snapshot; never a percentage true. `unchanged_since` appears when nothing has borne on the claim since an earlier seq.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"model","in":"query","required":false,"schema":{"type":"string"}},{"name":"snapshot_seq","in":"query","required":false,"schema":{"type":"string"},"description":"Read as of this seq; the head by default"}],"x-openai-isConsequential":false,"responses":{"200":{"description":"OK"},"404":{"description":"Errors","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Errors"}}}},"422":{"description":"Errors","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Errors"}}}}},"tags":["Claims"]}},"/api/v1/claims/{id}/trace":{"get":{"operationId":"getClaimTrace","summary":"The whole scoring trace with its hash: every step that produced the number, reproducible from the same seq and model. The trace returned is the one computed at the last seq that bore on this claim, which may be earlier than the seq asked for; `unchanged_since` then names it, and nothing is restamped with a seq at which it was not computed.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"model","in":"query","required":false,"schema":{"type":"string"}},{"name":"snapshot_seq","in":"query","required":false,"schema":{"type":"string"},"description":"Read as of this seq; the head by default"}],"x-openai-isConsequential":false,"responses":{"200":{"description":"OK"},"404":{"description":"Errors","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Errors"}}}},"422":{"description":"Errors","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Errors"}}}}},"tags":["Claims"]}},"/api/v1/claims/{id}/why":{"get":{"operationId":"getClaimWhy","summary":"Strongest support and contradiction, suppressed dependents, review gaps, what would most change this.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"x-openai-isConsequential":false,"responses":{"200":{"description":"OK"},"404":{"description":"Errors","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Errors"}}}},"422":{"description":"Errors","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Errors"}}}}},"tags":["Claims"]}},"/api/v1/claims/{id}/summary":{"get":{"operationId":"getClaimSummary","summary":"A short summary whose every sentence cites graph ids.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"x-openai-isConsequential":false,"responses":{"200":{"description":"OK"},"404":{"description":"Errors","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Errors"}}}},"422":{"description":"Errors","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Errors"}}}}},"tags":["Claims"]}},"/api/v1/claims/{id}/compare":{"get":{"operationId":"compareModels","summary":"Where the released scoring models disagree on this claim and why.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"models","in":"query","required":false,"schema":{"type":"string"},"description":"Comma-separated model names; all released models by default"}],"x-openai-isConsequential":false,"responses":{"200":{"description":"OK"},"404":{"description":"Errors","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Errors"}}}},"422":{"description":"Errors","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Errors"}}}}},"tags":["Claims"]}},"/api/v1/claims/{id}/views":{"get":{"operationId":"getClaimViews","summary":"How signed-in people said they see this claim, grouped by the affiliations they declared. Personal views live outside the log and are never a scoring input.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"x-openai-isConsequential":false,"responses":{"200":{"description":"OK"},"404":{"description":"Errors","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Errors"}}}},"422":{"description":"Errors","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Errors"}}}}},"tags":["Claims"]}},"/api/v1/sections":{"get":{"operationId":"getSections","summary":"Outline roots: large sources broken into sections, each with claim counts by state. A section never carries a probability.","parameters":[{"name":"snapshot_seq","in":"query","required":false,"schema":{"type":"string"},"description":"Read as of this seq; the head by default"},{"name":"model","in":"query","required":false,"schema":{"type":"string"}}],"x-openai-isConsequential":false,"responses":{"200":{"description":"OK"},"404":{"description":"Errors","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Errors"}}}},"422":{"description":"Errors","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Errors"}}}}},"tags":["Sources and sections"]}},"/api/v1/sections/{id}":{"get":{"operationId":"getSection","summary":"One section: its path from the root, its claims, its children, and counts by state.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"depth","in":"query","required":false,"schema":{"type":"string"},"description":"0..6, default 2"},{"name":"model","in":"query","required":false,"schema":{"type":"string"}},{"name":"snapshot_seq","in":"query","required":false,"schema":{"type":"string"},"description":"Read as of this seq; the head by default"}],"x-openai-isConsequential":false,"responses":{"200":{"description":"OK"},"404":{"description":"Errors","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Errors"}}}},"422":{"description":"Errors","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Errors"}}}}},"tags":["Sources and sections"]}},"/api/v1/inferences/{id}":{"get":{"operationId":"getInference","summary":"One recorded reasoning step: its premises with their current states and the weakest one marked. The step itself is never scored.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"snapshot_seq","in":"query","required":false,"schema":{"type":"string"},"description":"Read as of this seq; the head by default"}],"x-openai-isConsequential":false,"responses":{"200":{"description":"OK"},"404":{"description":"Errors","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Errors"}}}},"422":{"description":"Errors","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Errors"}}}}},"tags":["Sources and sections"]}},"/api/v1/evidence/{id}":{"get":{"operationId":"getEvidence","summary":"One evidence item: its excerpt, observation type, and the links that count it.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"snapshot_seq","in":"query","required":false,"schema":{"type":"string"},"description":"Read as of this seq; the head by default"}],"x-openai-isConsequential":false,"responses":{"200":{"description":"OK"},"404":{"description":"Errors","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Errors"}}}},"422":{"description":"Errors","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Errors"}}}}},"tags":["Sources and sections"]}},"/api/v1/sources/{id}":{"get":{"operationId":"getSource","summary":"A source: link, excerpts with their hashes, the page hash when the reader had the bytes; page text only when it was stored.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"x-openai-isConsequential":false,"responses":{"200":{"description":"OK"},"404":{"description":"Errors","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Errors"}}}},"422":{"description":"Errors","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Errors"}}}}},"tags":["Sources and sections"]}},"/api/v1/sources/{id}/locations":{"get":{"operationId":"getSourceLocations","summary":"The cited passages of one source, each with the hash of the quoted text.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"snapshot_seq","in":"query","required":false,"schema":{"type":"string"},"description":"Read as of this seq; the head by default"}],"x-openai-isConsequential":false,"responses":{"200":{"description":"OK"},"404":{"description":"Errors","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Errors"}}}},"422":{"description":"Errors","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Errors"}}}}},"tags":["Sources and sections"]}},"/api/v1/contributions/{id}":{"get":{"operationId":"getContribution","summary":"One log entry with signatures, chain hashes, audits, and status history.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"x-openai-isConsequential":false,"responses":{"200":{"description":"OK"},"404":{"description":"Errors","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Errors"}}}},"422":{"description":"Errors","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Errors"}}}}},"tags":["The log"]}},"/api/v1/contributions/{id}/verify":{"get":{"operationId":"verifyContribution","summary":"Verify one entry's signatures and chain link.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"x-openai-isConsequential":false,"responses":{"200":{"description":"OK"},"404":{"description":"Errors","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Errors"}}}},"422":{"description":"Errors","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Errors"}}}}},"tags":["The log"]}},"/api/v1/contributions/{id}/redaction_manifest":{"get":{"operationId":"getRedactionManifest","summary":"The default redaction manifest for a takedown of this entry, for a moderator to edit and sign. Reading it changes nothing.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"x-openai-isConsequential":false,"responses":{"200":{"description":"OK"},"404":{"description":"Errors","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Errors"}}}},"422":{"description":"Errors","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Errors"}}}}},"tags":["The log"]}},"/api/v1/log":{"get":{"operationId":"getLog","summary":"The public log, newest last.","parameters":[{"name":"after_seq","in":"query","required":false,"schema":{"type":"string"}},{"name":"action_type","in":"query","required":false,"schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"schema":{"type":"string"}}],"x-openai-isConsequential":false,"responses":{"200":{"description":"OK"},"404":{"description":"Errors","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Errors"}}}},"422":{"description":"Errors","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Errors"}}}}},"tags":["The log"]}},"/api/v1/snapshots":{"get":{"operationId":"getSnapshots","summary":"Pinned snapshots and the current head seq.","parameters":[],"x-openai-isConsequential":false,"responses":{"200":{"description":"OK"},"404":{"description":"Errors","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Errors"}}}},"422":{"description":"Errors","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Errors"}}}}},"tags":["The log"]}},"/api/v1/snapshots/{seq}":{"get":{"operationId":"getSnapshot","summary":"One snapshot: entry hash, whether it is pinned, and the claim-score digest under the default model.","parameters":[{"name":"seq","in":"path","required":true,"schema":{"type":"string"},"description":"A contribution seq"}],"x-openai-isConsequential":false,"responses":{"200":{"description":"OK"},"404":{"description":"Errors","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Errors"}}}},"422":{"description":"Errors","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Errors"}}}}},"tags":["The log"]}},"/api/v1/weaknesses":{"get":{"operationId":"getWeaknesses","summary":"Where the ledger is most likely wrong. Each list is capped and carries its true total beside it, so a cap is never a silent truncation.","parameters":[{"name":"kind","in":"query","required":false,"schema":{"type":"string"},"description":"low_coverage_scored, provisional, independence_unreviewed, contested, models_disagree, high_impact_insufficient, disputed_audits"},{"name":"limit","in":"query","required":false,"schema":{"type":"string"},"description":"1..200"},{"name":"offset","in":"query","required":false,"schema":{"type":"string"}},{"name":"snapshot_seq","in":"query","required":false,"schema":{"type":"string"},"description":"Read as of this seq; the head by default"}],"x-openai-isConsequential":false,"responses":{"200":{"description":"OK"},"404":{"description":"Errors","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Errors"}}}},"422":{"description":"Errors","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Errors"}}}}},"tags":["This node"]}},"/api/v1/moderation":{"get":{"operationId":"getModerationLog","summary":"Every quarantine, release, takedown, and revocation.","parameters":[],"x-openai-isConsequential":false,"responses":{"200":{"description":"OK"},"404":{"description":"Errors","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Errors"}}}},"422":{"description":"Errors","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Errors"}}}}},"tags":["This node"]}},"/api/v1/scoring-models":{"get":{"operationId":"getScoringModels","summary":"Released scoring models.","parameters":[],"x-openai-isConsequential":false,"responses":{"200":{"description":"OK"},"404":{"description":"Errors","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Errors"}}}},"422":{"description":"Errors","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Errors"}}}}},"tags":["This node"]}},"/api/v1/contributors/top":{"get":{"operationId":"getTopContributors","summary":"The hundred principals who have done the most recorded work. Anonymous work is one row with a null id, since each anonymous connection mints its own key. Volume of work, never reliability, and never a scoring input.","parameters":[{"name":"window","in":"query","required":false,"schema":{"type":"string"},"description":"30d or 365d; all time by default"}],"x-openai-isConsequential":false,"responses":{"200":{"description":"OK"},"404":{"description":"Errors","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Errors"}}}},"422":{"description":"Errors","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Errors"}}}}},"tags":["Contributors"]}},"/api/v1/contributors/{id}":{"get":{"operationId":"getContributor","summary":"One contributor: key, identity tier, and how much work they have done.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"x-openai-isConsequential":false,"responses":{"200":{"description":"OK"},"404":{"description":"Errors","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Errors"}}}},"422":{"description":"Errors","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Errors"}}}}},"tags":["Contributors"]}},"/api/v1/contributors/{id}/reputation":{"get":{"operationId":"getContributorReputation","summary":"Audited reliability per task type and domain. Not authority, and not a scoring input in v0.1.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"snapshot_seq","in":"query","required":false,"schema":{"type":"string"},"description":"Read as of this seq; the head by default"}],"x-openai-isConsequential":false,"responses":{"200":{"description":"OK"},"404":{"description":"Errors","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Errors"}}}},"422":{"description":"Errors","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Errors"}}}}},"tags":["Contributors"]}},"/api/v1/tasks/{id}":{"get":{"operationId":"getTask","summary":"A verification task and its signed packet.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"x-openai-isConsequential":false,"responses":{"200":{"description":"OK"},"404":{"description":"Errors","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Errors"}}}},"422":{"description":"Errors","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Errors"}}}}},"tags":["Tasks"]}},"/api/v1/threads/{id}/respond":{"post":{"operationId":"respondToThread","summary":"Take a turn in a thread, and optionally vote INVESTIGATE or NO_FURTHER_WORK. Three distinct principals naming the same verdict settle it; three sessions of one person are one principal. Settling opens work or closes work and never moves a score.","x-openai-isConsequential":true,"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"security":[{"assistantToken":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["body"],"properties":{"body":{"type":"string"},"verdict":{"type":"string","enum":["INVESTIGATE","NO_FURTHER_WORK"]}}}}}},"responses":{"201":{"description":"Created"},"401":{"description":"Errors","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Errors"}}}},"422":{"description":"Errors","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Errors"}}}},"429":{"description":"Errors","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Errors"}}}}},"tags":["This node"]}},"/api/v1/contributions":{"post":{"operationId":"appendContribution","summary":"Append one signed contribution. This is the only write path; everything else that changes the record is built on it. 200 means this entry was already appended.","x-openai-isConsequential":true,"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"responses":{"201":{"description":"Created"},"200":{"description":"Already appended; the existing entry"},"401":{"description":"Errors","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Errors"}}}},"422":{"description":"Errors","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Errors"}}}},"429":{"description":"Errors","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Errors"}}}}},"tags":["The log"]}},"/api/v1/investigations":{"post":{"operationId":"recordInvestigation","summary":"Record an investigation: sources by link, excerpts, claims, evidence, links. All or nothing. Returns cards and URLs, or existing similar claims with 409.","x-openai-isConsequential":true,"security":[{},{"assistantToken":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/InvestigationBundle"}}}},"responses":{"201":{"description":"Recorded; one card per claim"},"409":{"description":"Similar claims exist; nothing recorded"},"401":{"description":"Errors","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Errors"}}}},"422":{"description":"Errors","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Errors"}}}},"429":{"description":"Errors","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Errors"}}}}},"tags":["Recording"]}},"/api/v1/custodied/contributions":{"post":{"operationId":"custodiedWrite","summary":"One contribution signed by the server for the assistant: {action_type, payload}.","x-openai-isConsequential":true,"security":[{"assistantToken":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"action_type":{"type":"string"},"payload":{"type":"object"}},"required":["action_type","payload"]}}}},"responses":{"201":{"description":"Appended"},"401":{"description":"Errors","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Errors"}}}},"422":{"description":"Errors","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Errors"}}}},"429":{"description":"Errors","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Errors"}}}}},"tags":["Recording"]}},"/api/v1/assistants":{"post":{"operationId":"connectAssistant","summary":"Mint an anonymous assistant token (signed-in minting is on /assistants/new).","x-openai-isConsequential":true,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"assistant":{"type":"object","properties":{"name":{"type":"string"},"provider":{"type":"string","enum":["anthropic","openai","xai","google","other"]},"model":{"type":"string"}},"required":["name","provider"]}}}}}},"responses":{"201":{"description":"The token, shown once, and the assistant record"},"401":{"description":"Errors","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Errors"}}}},"422":{"description":"Errors","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Errors"}}}},"429":{"description":"Errors","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Errors"}}}}},"tags":["Assistants"]}},"/api/v1/assistants/{id}":{"delete":{"operationId":"revokeAssistant","summary":"Revoke the calling assistant's own token. Appends REVOKE_DELEGATION; a token can revoke only itself.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"security":[{"assistantToken":[]}],"x-openai-isConsequential":true,"responses":{"200":{"description":"Revoked"},"401":{"description":"Errors","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Errors"}}}},"422":{"description":"Errors","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Errors"}}}}},"tags":["Assistants"]}},"/api/v1/tasks/next":{"post":{"operationId":"leaseTask","summary":"Lease the next open task matching the given types and domains. The body is a signed eir-lease-v1 request; 204 means nothing is open.","x-openai-isConsequential":true,"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SignedRequest"}}}},"responses":{"201":{"description":"Created"},"200":{"description":"The assignment and its signed packet"},"204":{"description":"No task is open for these types"},"401":{"description":"Errors","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Errors"}}}},"422":{"description":"Errors","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Errors"}}}},"429":{"description":"Errors","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Errors"}}}}},"tags":["Tasks"]}},"/api/v1/tasks/{id}/release":{"post":{"operationId":"releaseTask","summary":"Give back a task leased by the signer. The body is a signed eir-lease-v1 request.","x-openai-isConsequential":true,"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SignedRequest"}}}},"responses":{"201":{"description":"Created"},"200":{"description":"The released assignment"},"401":{"description":"Errors","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Errors"}}}},"422":{"description":"Errors","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Errors"}}}},"429":{"description":"Errors","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Errors"}}}}},"tags":["Tasks"]}},"/api/v1/admin/snapshots":{"post":{"operationId":"pinSnapshot","summary":"Pin a snapshot at a seq. Moderator only; the body is a signed admin request.","x-openai-isConsequential":true,"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SignedRequest"}}}},"responses":{"201":{"description":"The pinned snapshot"},"401":{"description":"Errors","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Errors"}}}},"422":{"description":"Errors","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Errors"}}}},"429":{"description":"Errors","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Errors"}}}}},"tags":["Moderator"]}},"/api/v1/admin/recompute":{"post":{"operationId":"recomputeScores","summary":"Queue a recompute of every claim score at the current head. Moderator only; the body is a signed admin request.","x-openai-isConsequential":true,"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SignedRequest"}}}},"responses":{"201":{"description":"Created"},"202":{"description":"Queued"},"401":{"description":"Errors","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Errors"}}}},"422":{"description":"Errors","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Errors"}}}},"429":{"description":"Errors","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Errors"}}}}},"tags":["Moderator"]}}}}