{"openapi":"3.1.0","info":{"title":"SwingFactor API","version":"1.0.0","description":"The SwingFactor API: the same versioned contract the SwingFactor web app runs on.\n\n## Base URL\n\nEvery path in this reference is relative to `https://api.swingfactor.ai/v1` — `GET /me` is `GET https://api.swingfactor.ai/v1/me`.\n\n## Authentication\n\nSend a token on every request, as a bearer token:\n\n```\nAuthorization: Bearer swingfactor_sk_…\n```\n\nThe token is either an **API key** — `swingfactor_sk_` then 43 characters — or a signed-in session's access token. A person\ncreates a key in the SwingFactor app, under **Settings → API**; it is shown once, when it is made, and never again. `GET\n/me/api-keys` lists the caller's keys without their secrets, and `DELETE /me/api-keys/{id}` revokes one.\n\nA key acts as the person who made it, with exactly their access — every workspace they belong to, in the role they hold\nthere — and nothing else: it has no scopes. Three things need the person themselves rather than a key: finishing\nonboarding, closing the account and issuing a key. A missing, malformed or revoked token is `401 unauthorized`.\n\nOnly `/openapi.json` and `/docs` need no token.\n\n## Try it\n\n```bash\ncurl https://api.swingfactor.ai/v1/me -H \"Authorization: Bearer $API_KEY\"\ncurl https://api.swingfactor.ai/v1/workspaces -H \"Authorization: Bearer $API_KEY\"\n```\n\n`GET /workspaces` gives the ids every other path is built from.\n\n## Requests and responses\n\n- Bodies are JSON (`Content-Type: application/json`), and so is every answer except a `204`.\n- Ids are UUIDs, and times ISO 8601 strings in UTC.\n- A resource carries `links`: the `/v1/…` paths of itself and what it relates to.\n- A list is `{ \"items\": [...], \"total\", \"offset\", \"limit\" }`. Every list is complete today, in one page.\n- Every answer carries `X-Request-Id`. Quote it when something goes wrong.\n\n## Errors\n\nAnything but a `2xx` is one envelope:\n\n```json\n{ \"error\": { \"code\": \"workspace_not_found\", \"message\": \"No such workspace.\", \"details\": {} } }\n```\n\n`code` is stable and meant for code; `message` is for a person; `details` is optional. The status follows the\ncode:\n\n| Status | Means |\n| --- | --- |\n| `400` | The request is wrong: a bad path, query or header, or something the plan does not allow (`plan_limit`, `seat_limit`). |\n| `401` | No valid token (`unauthorized`). |\n| `403` | The token is valid, but its person may not do this (`forbidden`) — a viewer editing, say. |\n| `404` | It does not exist, or the caller cannot see it (`*_not_found`). |\n| `409` | It already exists, or conflicts with what does (`*_exists`, `idempotency_key_reused`). |\n| `422` | The body cannot be taken as it is. `details.fields` has a message per field (`invalid_*`, `*_required`). |\n| `429` | Too many requests (`rate_limited`). Wait, then retry. |\n| `503` | A service this depends on is not configured. |\n\n## Retrying a create\n\nA `POST` may carry an `Idempotency-Key` header — any unique string, a UUID say. Sent again with the same key, method,\npath and body within 24 hours, it answers with the first response rather than creating twice, and says so with\n`Idempotency-Replayed: true`. The same key on a different request is `409 idempotency_key_reused`. Only a success is\nremembered, so a failed first attempt may simply be retried.\n\n## Versions\n\nThe major version is in the path (`/v1`). Every answer says which version served it in `SwingFactor-Version`. A\nrequest may send `SwingFactor-Version` to pin one; asking for another major is `400 version_mismatch`, because crossing\na major changes the URL.\n\n## What SwingFactor holds\n\nA **workspace** asks **questions**. A question chooses between **options**, and may be tested under **scenarios** —\nwhat could happen to whoever chooses. It is broken into **propositions** (claims), each with **evidence** that\nsupports, contradicts or qualifies it. **Dependencies** say which propositions rest on which. A proposition's uncertain\nquantities are **variables**; each party's plausible **range** for one is an **estimate**, and a **break-even** is the\nvalue at which a named consequence changes. **Challenges** object to any part of it, and the **history** records every\nchange. SwingFactor computes, in SQL, what could change the choice — the **investigation** — and never scores or ranks\nan option.\n\n## Only a person accepts\n\nEverything written through the API — or by SwingFactor's drafting — arrives `proposed`. It counts for nothing until a\nperson decides it: `POST …/decision` with `{ \"status\": \"accepted\" }` (or `rejected`, or `proposed` to reopen),\nand optionally a `reason`. Everything that computes — propagation, the investigation, the briefing — reads accepted\nrows alone. New words on a decided row reopen it.\n\n## Where to start\n\n1. `GET /workspaces` — the workspace id, and your role in it.\n2. `GET /questions?workspace={id}` — its questions, then every public one.\n3. `GET /workspaces/{id}/questions/{questionId}/briefing` — one question, whole: the model and what the database\n   concludes from it. `…/investigation` is what could change the choice, and why.\n4. `GET /workspaces/{id}/review` — what waits on a person across the workspace.\n\nTo ask a question, `POST /workspaces/{id}/questions` with a `title` and the `options` it chooses\nbetween (`[{ \"label\": \"…\" }]`, two at least to be worth modelling); asking one spends the month's allowance, and Observer asks none. `POST\n…/questions/{questionId}/drafts` has SwingFactor draft its model; `GET /workspaces/{id}/runs?kind=draft&subject={questionId}`\nfollows it, stage by stage, and `GET /workspaces/{id}/question-status` says where every question stands.\n\nIds come from the lists; each resource's `links` give the paths to what hangs off it."},"security":[{"bearerAuth":[]}],"components":{"schemas":{"Profile":{"type":"object","properties":{"firstName":{"type":"string"},"lastName":{"type":"string"},"avatarUrl":{"type":"string"},"displayName":{"type":"string","description":"Derived from the two names. Read-only."},"onboardedAt":{"type":"string","description":"Absent until onboarding is finished."}},"required":["firstName","lastName","displayName"]},"Error":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"workspace_not_found"},"message":{"type":"string"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message"]}},"required":["error"]},"ProfileBody":{"type":"object","properties":{"firstName":{"type":"string","minLength":1,"maxLength":80},"lastName":{"type":"string","minLength":1,"maxLength":80},"avatarUrl":{"type":["string","null"],"maxLength":262144}},"required":["firstName","lastName"]},"ApiKeyList":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/ApiKey"}},"total":{"type":"integer"},"offset":{"type":"integer"},"limit":{"type":"integer"}},"required":["items","total","offset","limit"]},"ApiKey":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"name":{"type":"string"},"keyPrefix":{"type":"string"},"scopes":{"type":"array","items":{"type":"string"}},"createdAt":{"type":"string"},"lastUsedAt":{"type":"string"},"links":{"$ref":"#/components/schemas/ApiKeyLinks"}},"required":["id","name","keyPrefix","scopes","createdAt","links"]},"ApiKeyLinks":{"type":"object","properties":{"self":{"type":"string"},"owner":{"type":"string"}},"required":["self","owner"],"description":"Relative /v1 URLs to follow."},"Joined":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"name":{"type":"string"},"links":{"$ref":"#/components/schemas/WorkspaceLinks"}},"required":["id","name","links"]},"WorkspaceLinks":{"type":"object","properties":{"self":{"type":"string"},"members":{"type":"string"},"invitations":{"type":"string"},"entitlements":{"type":"string"},"export":{"type":"string"},"questions":{"type":"string"},"content":{"type":"string"}},"required":["self","members","invitations","entitlements","export","questions","content"],"description":"Relative /v1 URLs to follow."},"WorkspaceList":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/Workspace"}},"total":{"type":"integer"},"offset":{"type":"integer"},"limit":{"type":"integer"}},"required":["items","total","offset","limit"]},"Workspace":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"name":{"type":"string"},"ownerId":{"type":"string","format":"uuid"},"myRole":{"type":"string","enum":["owner","editor","viewer"]},"createdAt":{"type":"string"},"updatedAt":{"type":"string"},"links":{"$ref":"#/components/schemas/WorkspaceLinks"}},"required":["id","name","ownerId","myRole","createdAt","updatedAt","links"]},"WorkspaceBody":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":200}},"required":["name"]},"WorkspacePatch":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":200}}},"Export":{"type":"object","additionalProperties":{}},"WorkspaceTransfer":{"type":"object","properties":{"email":{"type":"string","format":"email"},"stayAsEditor":{"type":"boolean","default":true}},"required":["email"]},"MemberList":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/Member"}},"total":{"type":"integer"},"offset":{"type":"integer"},"limit":{"type":"integer"}},"required":["items","total","offset","limit"]},"Member":{"type":"object","properties":{"userId":{"type":"string","format":"uuid"},"displayName":{"type":"string"},"avatarUrl":{"type":"string","description":"Their picture, as a data: URI. Absent for none."},"role":{"type":"string","enum":["owner","editor","viewer"]},"joinedAt":{"type":"string"},"links":{"$ref":"#/components/schemas/MemberLinks"}},"required":["userId","displayName","role","links"]},"MemberLinks":{"type":"object","properties":{"self":{"type":"string"},"container":{"type":"string"}},"required":["self","container"],"description":"Relative /v1 URLs to follow."},"RoleBody":{"type":"object","properties":{"role":{"type":"string","enum":["editor","viewer"]}},"required":["role"]},"InvitationList":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/Invitation"}},"total":{"type":"integer"},"offset":{"type":"integer"},"limit":{"type":"integer"}},"required":["items","total","offset","limit"]},"Invitation":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"containerId":{"type":"string","format":"uuid"},"email":{"type":"string"},"token":{"type":"string"},"role":{"type":"string","enum":["editor","viewer"]},"createdAt":{"type":"string"},"expiresAt":{"type":"string"},"links":{"$ref":"#/components/schemas/InvitationLinks"}},"required":["id","containerId","email","token","role","createdAt","expiresAt","links"]},"InvitationLinks":{"type":"object","properties":{"self":{"type":"string"},"container":{"type":"string"}},"required":["self","container"],"description":"Relative /v1 URLs to follow."},"InviteBody":{"type":"object","properties":{"email":{"type":"string","format":"email"},"role":{"type":"string","enum":["editor","viewer"]}},"required":["email","role"]},"Entitlements":{"type":"object","properties":{"plan":{"type":["string","null"],"enum":["observer","investigator","institute",null]},"status":{"type":"string","enum":["active","trialing","past_due","canceled"]},"cycle":{"type":"string","enum":["monthly","annual"]},"provider":{"type":["string","null"],"enum":["stripe","apple","google",null]},"renewsAt":{"type":["string","null"]},"cancelAtPeriodEnd":{"type":"boolean"},"everPaid":{"type":"boolean"},"features":{"type":"array","items":{"type":"string"}},"limits":{"type":"object","additionalProperties":{"type":"number"}},"quantity":{"type":"integer"},"usage":{"type":"object","additionalProperties":{"type":"number"}},"resets":{"type":"object","additionalProperties":{"type":"string"}},"balances":{"type":"object","additionalProperties":{"type":"number"}},"trial":{"type":"object","properties":{"eligible":{"type":"boolean"},"days":{"type":["integer","null"]},"endsAt":{"type":["string","null"]},"used":{"type":"boolean"}},"required":["eligible","days"]}},"required":["plan","status","cycle","provider","renewsAt","cancelAtPeriodEnd","features","limits"]},"RedirectUrl":{"type":"object","properties":{"url":{"type":"string","format":"uri"}},"required":["url"]},"CheckoutBody":{"type":"object","properties":{"plan":{"type":"string","enum":["investigator","institute"]},"cycle":{"type":"string","enum":["monthly","annual"]},"quantity":{"type":"integer","minimum":1,"maximum":10000}},"required":["plan","cycle"]},"PlanChangeResult":{"anyOf":[{"type":"object","properties":{"kind":{"type":"string","enum":["checkout"]},"url":{"type":"string","format":"uri"}},"required":["kind","url"]},{"type":"object","properties":{"kind":{"type":"string","enum":["applied"]}},"required":["kind"]},{"type":"object","properties":{"kind":{"type":"string","enum":["scheduled"]},"effectiveAt":{"type":["string","null"]}},"required":["kind","effectiveAt"]}]},"PlanBody":{"type":"object","properties":{"plan":{"type":"string","enum":["observer","investigator","institute"]},"cycle":{"type":"string","enum":["monthly","annual"]},"quantity":{"type":"integer","minimum":1,"maximum":10000}},"required":["plan","cycle"]},"PlanChangePreview":{"type":["object","null"],"properties":{"amountDuePence":{"type":"integer"},"currency":{"type":"string"},"effectiveAt":{"type":["string","null"]},"timing":{"type":"string","enum":["immediate","scheduled"]}},"required":["amountDuePence","currency","effectiveAt","timing"]},"PaymentList":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/Payment"}},"total":{"type":"integer"},"offset":{"type":"integer"},"limit":{"type":"integer"}},"required":["items","total","offset","limit"]},"Payment":{"type":"object","properties":{"id":{"type":"string"},"date":{"type":"string"},"description":{"type":"string"},"amountPence":{"type":"integer"},"currency":{"type":"string"},"status":{"type":"string"},"invoiceUrl":{"type":"string"}},"required":["id","date","description","amountPence","currency","status"]},"ContentCreated":{"type":"object","properties":{"item":{"$ref":"#/components/schemas/ContentItem"},"upload":{"$ref":"#/components/schemas/Upload"}},"required":["item","upload"]},"ContentItem":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"kind":{"type":"string","enum":["sources"]},"origin":{"type":"string","enum":["upload","web"],"description":"Where its bytes come from: an upload, or a web page."},"name":{"type":"string","description":"A file’s name; a page’s title, or its address until it is read."},"note":{"type":["string","null"],"description":"What it is for, in the words of whoever added it."},"url":{"type":["string","null"],"description":"A page’s address. Null for an upload."},"status":{"type":"string","enum":["pending","ready"]},"contentType":{"type":["string","null"]},"size":{"type":["integer","null"],"description":"Bytes: as declared while an upload is pending, as stored once ready."},"currentVersionId":{"type":["string","null"],"format":"uuid","description":"The version it reads as now."},"readStatus":{"type":["string","null"],"enum":["waiting","reading","read","no_text","failed","not_read",null],"description":"For a kind that is read: how far reading its text has got."},"readError":{"type":["string","null"],"description":"Why the last reading came to nothing, in words."},"textChars":{"type":["integer","null"],"description":"Characters of text read out."},"readAt":{"type":["string","null"]},"checkedAt":{"type":["string","null"],"description":"When its origin was last asked whether it changed."},"addedBy":{"type":["string","null"],"format":"uuid"},"addedByName":{"type":["string","null"],"description":"Kept when the account that added it is gone."},"addedByActor":{"type":["string","null"],"description":"What added it where no person did: the product, for what its model found."},"createdAt":{"type":"string"},"links":{"$ref":"#/components/schemas/ContentItemLinks"}},"required":["id","kind","origin","name","note","url","status","contentType","size","currentVersionId","readStatus","readError","textChars","readAt","checkedAt","addedBy","addedByName","addedByActor","createdAt","links"]},"ContentItemLinks":{"type":"object","properties":{"self":{"type":"string"},"workspace":{"type":"string"},"download":{"type":"string"},"complete":{"type":"string"},"upload":{"type":"string"}},"required":["self","workspace"],"description":"Relative /v1 URLs to follow."},"Upload":{"type":["object","null"],"properties":{"url":{"type":"string","description":"Send the bytes here, with these headers. Signed; no token needed."},"method":{"type":"string","enum":["PUT"]},"headers":{"type":"object","additionalProperties":{"type":"string"}},"expiresAt":{"type":"string"}},"required":["url","method","headers","expiresAt"],"description":"For an upload: where its bytes go."},"ContentBody":{"oneOf":[{"type":"object","properties":{"kind":{"type":"string","enum":["sources"]},"origin":{"type":"string","enum":["upload"]},"name":{"type":"string","minLength":1,"maxLength":255},"contentType":{"type":"string","minLength":1,"maxLength":255},"size":{"type":"integer","exclusiveMinimum":0},"note":{"type":"string","maxLength":2000}},"required":["kind","origin","name","contentType","size"]},{"type":"object","properties":{"kind":{"type":"string","enum":["sources"]},"origin":{"type":"string","enum":["web"]},"url":{"type":"string","minLength":1,"maxLength":2100},"name":{"type":"string","maxLength":300},"note":{"type":"string","maxLength":2000}},"required":["kind","origin","url"]}]},"ContentList":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/ContentItem"}},"total":{"type":"integer"},"offset":{"type":"integer"},"limit":{"type":"integer"}},"required":["items","total","offset","limit"]},"ContentDetail":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"kind":{"type":"string","enum":["sources"]},"origin":{"type":"string","enum":["upload","web"],"description":"Where its bytes come from: an upload, or a web page."},"name":{"type":"string","description":"A file’s name; a page’s title, or its address until it is read."},"note":{"type":["string","null"],"description":"What it is for, in the words of whoever added it."},"url":{"type":["string","null"],"description":"A page’s address. Null for an upload."},"status":{"type":"string","enum":["pending","ready"]},"contentType":{"type":["string","null"]},"size":{"type":["integer","null"],"description":"Bytes: as declared while an upload is pending, as stored once ready."},"currentVersionId":{"type":["string","null"],"format":"uuid","description":"The version it reads as now."},"readStatus":{"type":["string","null"],"enum":["waiting","reading","read","no_text","failed","not_read",null],"description":"For a kind that is read: how far reading its text has got."},"readError":{"type":["string","null"],"description":"Why the last reading came to nothing, in words."},"textChars":{"type":["integer","null"],"description":"Characters of text read out."},"readAt":{"type":["string","null"]},"checkedAt":{"type":["string","null"],"description":"When its origin was last asked whether it changed."},"addedBy":{"type":["string","null"],"format":"uuid"},"addedByName":{"type":["string","null"],"description":"Kept when the account that added it is gone."},"addedByActor":{"type":["string","null"],"description":"What added it where no person did: the product, for what its model found."},"createdAt":{"type":"string"},"versions":{"type":"array","items":{"$ref":"#/components/schemas/ContentVersion"}},"links":{"$ref":"#/components/schemas/ContentItemLinks"}},"required":["id","kind","origin","name","note","url","status","contentType","size","currentVersionId","readStatus","readError","textChars","readAt","checkedAt","addedBy","addedByName","addedByActor","createdAt","versions","links"]},"ContentVersion":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"ordinal":{"type":"integer"},"contentType":{"type":["string","null"]},"size":{"type":["integer","null"]},"contentHash":{"type":["string","null"],"description":"SHA-256 of the bytes, once read."},"revision":{"type":["string","null"],"description":"What the origin calls this state: an ETag."},"fetchedAt":{"type":["string","null"]},"readStatus":{"type":["string","null"],"enum":["waiting","reading","read","no_text","failed","not_read",null]},"readAt":{"type":["string","null"]},"textChars":{"type":["integer","null"]},"createdAt":{"type":"string"}},"required":["id","ordinal","contentType","size","contentHash","revision","fetchedAt","readStatus","readAt","textChars","createdAt"]},"ContentPatch":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":300},"note":{"type":["string","null"],"maxLength":2000}}},"ContentText":{"type":"object","properties":{"versionId":{"type":["string","null"],"format":"uuid"},"readStatus":{"type":["string","null"],"enum":["waiting","reading","read","no_text","failed","not_read",null]},"textChars":{"type":["integer","null"]},"chunks":{"type":"array","items":{"type":"string"}},"starts":{"type":"array","items":{"type":"integer"}}},"required":["versionId","readStatus","textChars","chunks","starts"]},"Download":{"type":"object","properties":{"url":{"type":"string"},"expiresAt":{"type":"string"}},"required":["url","expiresAt"]},"Suggestions":{"type":"object","properties":{"items":{"type":"array","items":{"type":"object","properties":{"label":{"type":"string"},"description":{"type":"string"},"option":{"type":"string","description":"For a way of taking an option: the option’s name, as it was sent."}},"required":["label","description"]}}},"required":["items"]},"SuggestionBody":{"type":"object","properties":{"kind":{"type":"string","enum":["options","scenarios","dimensions","groups","ways"],"description":"What to suggest: options, scenarios, the factors every option is compared on, who it affects, or ways of taking an option."},"title":{"type":"string","minLength":1,"maxLength":500},"framing":{"type":"string","maxLength":10000},"visibility":{"type":"string","enum":["public","private"]},"options":{"type":"array","items":{"type":"object","properties":{"label":{"type":"string","minLength":1,"maxLength":200},"description":{"type":"string","maxLength":2000}},"required":["label"]},"maxItems":20},"scenarios":{"type":"array","items":{"type":"object","properties":{"label":{"type":"string","minLength":1,"maxLength":200},"description":{"type":"string","maxLength":2000}},"required":["label"]},"maxItems":20},"dimensions":{"type":"array","items":{"type":"object","properties":{"label":{"type":"string","minLength":1,"maxLength":200},"description":{"type":"string","maxLength":2000}},"required":["label"]},"maxItems":20},"groups":{"type":"array","items":{"type":"object","properties":{"label":{"type":"string","minLength":1,"maxLength":200},"description":{"type":"string","maxLength":2000}},"required":["label"]},"maxItems":20},"ways":{"type":"array","items":{"type":"object","properties":{"label":{"type":"string","minLength":1,"maxLength":200},"description":{"type":"string","maxLength":2000},"option":{"type":"string","minLength":1,"maxLength":200}},"required":["label","option"]},"maxItems":40,"description":"The ways of taking its options so far, each with its option’s name."},"rejected":{"type":"array","items":{"type":"object","properties":{"label":{"type":"string","minLength":1,"maxLength":200},"description":{"type":"string","maxLength":2000}},"required":["label"]},"maxItems":40,"description":"What the person already turned down: never suggested again."}},"required":["kind","title"]},"VisibleQuestionList":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/Question"}},"total":{"type":"integer"},"offset":{"type":"integer"},"limit":{"type":"integer"}},"required":["items","total","offset","limit"]},"Question":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"workspaceId":{"type":"string","format":"uuid"},"createdBy":{"type":"string","format":"uuid"},"title":{"type":"string","example":"What would Scottish independence actually change?"},"framing":{"type":"string"},"visibility":{"type":"string","enum":["public","private"],"description":"Public is readable by anybody signed in; private by the workspace alone."},"evidenceCutoff":{"type":"string","description":"The evidence cut-off, YYYY-MM-DD: what came after it is listed apart."},"constraintKind":{"type":"string","enum":["time","money","people","access","deadline"],"description":"What limits the investigation. Only with one may a person prioritise the open matters."},"constraintNote":{"type":"string"},"constraintDeadline":{"type":"string","description":"For a deadline: YYYY-MM-DD."},"availability":{"type":"string","enum":["engaged","not-material"],"description":"engaged: whether each option could be had and kept is examined here; not-material: the question raises no material availability issue. Absent: not stated."},"scenariosStated":{"type":"string","enum":["none"],"description":"none: the question says no scenarios apply. Absent: not stated."},"depth":{"type":"string","enum":["standard","full"],"description":"standard or full: what is shown up front and what a draft proposes."},"askingStep":{"type":"string","enum":["options","scenarios","dimensions","sources","view","ask"],"description":"Still being asked: the furthest step the wizard reached. Its workspace’s alone, and not drafted, until it is asked. Absent once asked."},"createdAt":{"type":"string"},"updatedAt":{"type":"string"},"links":{"$ref":"#/components/schemas/QuestionLinks"}},"required":["id","workspaceId","title","visibility","depth","createdAt","updatedAt","links"]},"QuestionLinks":{"type":"object","properties":{"self":{"type":"string"},"options":{"type":"string"},"propositions":{"type":"string"},"evidence":{"type":"string"},"dependencies":{"type":"string"},"variables":{"type":"string"},"investigation":{"type":"string"},"challenges":{"type":"string"},"history":{"type":"string"},"bearings":{"type":"string"},"symmetry":{"type":"string"},"briefing":{"type":"string"},"snapshots":{"type":"string"},"sources":{"type":"string"},"workspace":{"type":"string"}},"required":["self","options","propositions","evidence","dependencies","variables","investigation","challenges","history","bearings","symmetry","briefing","snapshots","sources","workspace"],"description":"Relative /v1 URLs to follow."},"QuestionList":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/Question"}},"total":{"type":"integer"},"offset":{"type":"integer"},"limit":{"type":"integer"}},"required":["items","total","offset","limit"]},"AskQuestionBody":{"allOf":[{"$ref":"#/components/schemas/QuestionBody"},{"type":"object","properties":{"options":{"type":"array","items":{"allOf":[{"$ref":"#/components/schemas/QuestionOptionBody"},{"type":"object","properties":{"suggested":{"type":"boolean","description":"SwingFactor suggested it while the question was asked, and the person accepted it."}}}]},"maxItems":20},"scenarios":{"type":"array","items":{"allOf":[{"$ref":"#/components/schemas/QuestionScenarioBody"},{"type":"object","properties":{"suggested":{"type":"boolean","description":"SwingFactor suggested it while the question was asked, and the person accepted it."}}}]},"maxItems":20},"rejectedOptions":{"type":"array","items":{"type":"object","properties":{"label":{"type":"string","minLength":1,"maxLength":200},"description":{"type":"string","maxLength":2000}},"required":["label"]},"maxItems":40,"description":"Suggestions the person rejected while asking: kept, rejected by them."},"rejectedScenarios":{"type":"array","items":{"type":"object","properties":{"label":{"type":"string","minLength":1,"maxLength":200},"description":{"type":"string","maxLength":2000}},"required":["label"]},"maxItems":40},"dimensions":{"type":"array","items":{"allOf":[{"$ref":"#/components/schemas/DimensionBody"},{"type":"object","properties":{}}]},"maxItems":20,"description":"The factors every option is compared on."},"rejectedDimensions":{"type":"array","items":{"type":"object","properties":{"label":{"type":"string","minLength":1,"maxLength":200},"description":{"type":"string","maxLength":2000}},"required":["label"]},"maxItems":40},"scenariosStated":{"type":"string","enum":["none"],"description":"Said as it is asked: no scenarios apply. Refused with scenarios."},"sourceIds":{"type":"array","items":{"type":"string","format":"uuid"},"maxItems":200,"description":"Library items — documents and pages — to argue it from."}}}]},"QuestionOptionBody":{"type":"object","properties":{"label":{"type":"string","minLength":1,"maxLength":200},"description":{"type":"string","maxLength":2000},"position":{"type":"integer"}},"required":["label"]},"QuestionScenarioBody":{"type":"object","properties":{"label":{"type":"string","minLength":1,"maxLength":200},"description":{"type":"string","maxLength":2000}},"required":["label"]},"DimensionBody":{"type":"object","properties":{"label":{"type":"string","minLength":1,"maxLength":200},"description":{"type":"string","maxLength":2000},"suggested":{"type":"boolean","description":"SwingFactor suggested it while the question was asked, and the person accepted it."}},"required":["label"]},"QuestionBody":{"type":"object","properties":{"title":{"type":"string","minLength":1,"maxLength":300},"framing":{"type":"string","maxLength":4000},"visibility":{"type":"string","enum":["public","private"],"description":"Defaults from the plan."},"depth":{"type":"string","enum":["standard","full"],"description":"standard (the default) or full: what is shown up front and what a draft proposes."}},"required":["title"]},"QuestionPatchBody":{"type":"object","properties":{"title":{"type":"string","minLength":1,"maxLength":300},"framing":{"type":"string","maxLength":4000},"visibility":{"type":"string","enum":["public","private"],"description":"Defaults from the plan."},"depth":{"type":"string","enum":["standard","full"],"description":"standard (the default) or full: what is shown up front and what a draft proposes."},"evidenceCutoff":{"anyOf":[{"type":"string","format":"date","pattern":"^\\d{4}-\\d{2}-\\d{2}$","example":"2026-10-13"},{"type":"string","enum":[""]}],"description":"The evidence cut-off; empty clears it."},"constraintKind":{"anyOf":[{"type":"string","enum":["time","money","people","access","deadline"]},{"type":"string","enum":[""]}],"description":"What limits the investigation; empty clears it, and every priority under it."},"constraintNote":{"type":"string","maxLength":1000},"constraintDeadline":{"anyOf":[{"type":"string","format":"date","pattern":"^\\d{4}-\\d{2}-\\d{2}$","example":"2026-10-13"},{"type":"string","enum":[""]}]},"availability":{"anyOf":[{"type":"string","enum":["engaged","not-material"]},{"type":"string","enum":[""]}],"description":"Whether it examines if each option could be had and kept; empty: not stated."},"scenariosStated":{"anyOf":[{"type":"string","enum":["none"]},{"type":"string","enum":[""]}],"description":"none: no scenarios apply; empty: not stated. Refused while it names one (409)."},"reason":{"type":"string","maxLength":1000,"description":"Why — kept in the history."}}},"Asking":{"type":"object","properties":{"question":{"$ref":"#/components/schemas/Question"},"options":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"label":{"type":"string"},"description":{"type":"string"},"suggested":{"type":"boolean"},"status":{"type":"string","enum":["proposed","accepted","rejected"]}},"required":["id","label","suggested","status"]}},"scenarios":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"label":{"type":"string"},"description":{"type":"string"},"suggested":{"type":"boolean"},"status":{"type":"string","enum":["proposed","accepted","rejected"]}},"required":["id","label","suggested","status"]}},"dimensions":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"label":{"type":"string"},"description":{"type":"string"},"suggested":{"type":"boolean"},"status":{"type":"string","enum":["proposed","accepted","rejected"]}},"required":["id","label","suggested","status"]},"description":"The factors, in order."},"sources":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"origin":{"type":"string","enum":["upload","web"]},"name":{"type":"string"}},"required":["id","origin","name"]}}},"required":["question","options","scenarios","dimensions","sources"]},"SaveAskingBody":{"type":"object","properties":{"title":{"type":"string","minLength":1,"maxLength":300},"framing":{"type":"string","maxLength":4000},"visibility":{"type":"string","enum":["public","private"],"description":"Defaults from the plan."},"depth":{"type":"string","enum":["standard","full"],"description":"standard (the default) or full: what is shown up front and what a draft proposes."},"step":{"type":"string","enum":["options","scenarios","dimensions","sources","view","ask"],"description":"The furthest step reached. It never goes back."},"options":{"type":"array","items":{"allOf":[{"$ref":"#/components/schemas/QuestionOptionBody"},{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"suggested":{"type":"boolean","description":"SwingFactor suggested it while the question was asked, and the person accepted it."}}}]},"maxItems":20,"description":"The options, whole: with its id, one is changed in place; one left out is deleted."},"scenarios":{"type":"array","items":{"allOf":[{"$ref":"#/components/schemas/QuestionScenarioBody"},{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"suggested":{"type":"boolean","description":"SwingFactor suggested it while the question was asked, and the person accepted it."}}}]},"maxItems":20},"rejectedOptions":{"type":"array","items":{"type":"object","properties":{"label":{"type":"string","minLength":1,"maxLength":200},"description":{"type":"string","maxLength":2000}},"required":["label"]},"maxItems":40},"rejectedScenarios":{"type":"array","items":{"type":"object","properties":{"label":{"type":"string","minLength":1,"maxLength":200},"description":{"type":"string","maxLength":2000}},"required":["label"]},"maxItems":40},"dimensions":{"type":"array","items":{"allOf":[{"$ref":"#/components/schemas/DimensionBody"},{"type":"object","properties":{"id":{"type":"string","format":"uuid"}}}]},"maxItems":20,"description":"The factors, whole, in order: one left out is deleted."},"rejectedDimensions":{"type":"array","items":{"type":"object","properties":{"label":{"type":"string","minLength":1,"maxLength":200},"description":{"type":"string","maxLength":2000}},"required":["label"]},"maxItems":40},"scenariosStated":{"type":"string","enum":["none",""],"description":"none: no scenarios apply, and any named are taken off; empty: not said."},"sourceIds":{"type":"array","items":{"type":"string","format":"uuid"},"maxItems":200,"description":"The library items put to it, whole: one left out is taken off."}},"required":["step"]},"QuestionOptionList":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/QuestionOption"}},"total":{"type":"integer"},"offset":{"type":"integer"},"limit":{"type":"integer"}},"required":["items","total","offset","limit"]},"QuestionOption":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"workspaceId":{"type":"string","format":"uuid"},"questionId":{"type":"string","format":"uuid"},"label":{"type":"string","example":"Remain in the UK"},"description":{"type":"string"},"position":{"type":"integer"},"status":{"type":"string","enum":["proposed","accepted","rejected"],"description":"A person’s option stands accepted; a draft’s is proposed until a person decides it. Only accepted options compute; a rejected one is kept."},"decidedBy":{"type":"string","format":"uuid"},"decidedByName":{"type":"string"},"decidedAt":{"type":"string"},"createdAt":{"type":"string"},"draftId":{"type":"string","format":"uuid","description":"Set where SwingFactor drafted it."},"suggested":{"type":"boolean","description":"SwingFactor suggested it while the question was asked."},"updatedAt":{"type":"string"},"links":{"$ref":"#/components/schemas/QuestionOptionLinks"}},"required":["id","workspaceId","questionId","label","position","status","createdAt","updatedAt","links"]},"QuestionOptionLinks":{"type":"object","properties":{"self":{"type":"string"},"question":{"type":"string"}},"required":["self","question"],"description":"Relative /v1 URLs to follow."},"QuestionOptionCreateBody":{"allOf":[{"$ref":"#/components/schemas/QuestionOptionBody"},{"type":"object","properties":{"suggested":{"type":"boolean","description":"SwingFactor suggested it while the question was asked, and the person accepted it."}}}]},"QuestionOptionPatchBody":{"type":"object","properties":{"label":{"type":"string","minLength":1,"maxLength":200},"description":{"type":"string","maxLength":2000},"position":{"type":"integer"},"reason":{"type":"string","maxLength":1000,"description":"Why — kept in the history."}}},"QuestionOptionOrder":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/QuestionOption"}},"total":{"type":"integer"},"offset":{"type":"integer"},"limit":{"type":"integer"}},"required":["items","total","offset","limit"]},"MoveBody":{"type":"object","properties":{"direction":{"type":"string","enum":["up","down"],"description":"One place, towards the top or the bottom."}},"required":["direction"]},"QuestionScenarioList":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/QuestionScenario"}},"total":{"type":"integer"},"offset":{"type":"integer"},"limit":{"type":"integer"}},"required":["items","total","offset","limit"]},"QuestionScenario":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"workspaceId":{"type":"string","format":"uuid"},"questionId":{"type":"string","format":"uuid"},"label":{"type":"string","example":"Contested / protracted negotiation"},"description":{"type":"string"},"position":{"type":"integer"},"status":{"type":"string","enum":["proposed","accepted","rejected"],"description":"A draft's arrives proposed and a person decides it; one a person names stands accepted."},"drafted":{"type":"boolean"},"suggested":{"type":"boolean"},"decidedByName":{"type":"string"},"createdAt":{"type":"string"},"updatedAt":{"type":"string"},"links":{"$ref":"#/components/schemas/QuestionScenarioLinks"}},"required":["id","workspaceId","questionId","label","position","status","drafted","createdAt","updatedAt","links"]},"QuestionScenarioLinks":{"type":"object","properties":{"self":{"type":"string"},"question":{"type":"string"}},"required":["self","question"],"description":"Relative /v1 URLs to follow."},"QuestionScenarioCreateBody":{"allOf":[{"$ref":"#/components/schemas/QuestionScenarioBody"},{"type":"object","properties":{"suggested":{"type":"boolean","description":"SwingFactor suggested it while the question was asked, and the person accepted it."}}}]},"QuestionScenarioPatchBody":{"type":"object","properties":{"label":{"type":"string","minLength":1,"maxLength":200},"description":{"type":"string","maxLength":2000},"reason":{"type":"string","maxLength":1000,"description":"Why — kept in the history."}}},"DecisionBody":{"type":"object","properties":{"status":{"type":"string","enum":["proposed","accepted","rejected"],"description":"Accept, reject, or reopen as proposed."},"reason":{"type":"string","maxLength":1000,"description":"Why — kept in the history."}},"required":["status"]},"PropositionList":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/Proposition"}},"total":{"type":"integer"},"offset":{"type":"integer"},"limit":{"type":"integer"}},"required":["items","total","offset","limit"]},"Proposition":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"workspaceId":{"type":"string","format":"uuid"},"questionId":{"type":"string","format":"uuid"},"name":{"type":"string","example":"Fiscal starting position","description":"What it is called wherever it is listed."},"statement":{"type":"string","example":"GERS 2025-26 records a net fiscal balance of -10.9% of GDP."},"claimType":{"type":"string","enum":["fact","estimate","model-result","proposal","scenario","interpretation","unresolved"],"description":"What kind of statement it is."},"standing":{"type":"string","enum":["possible","probable","demonstrated"],"description":"How far it is shown: possible, probable and demonstrated are three different things."},"evidenceStrength":{"type":"string","enum":["strong","moderate","weak","contested","unknown"],"description":"How well the evidence supports it — separately from its claim type."},"problemKind":{"type":"string","enum":["epistemic","capability","normative"],"description":"While unresolved: investigate (epistemic), build capacity, or decide (normative)."},"horizon":{"type":"string","enum":["transition","early","medium","long","every"],"description":"The matched horizon: transition (Day One), early adjustment, medium term, long run, or every horizon. None: not stated — never every."},"role":{"type":"string","enum":["empirical","mixed","methodological","normative"],"description":"Empirical and mixed propositions owe a switching condition; methodological and normative principles do not."},"switchingCondition":{"type":"string","description":"What we would have to discover for the present assessment to change materially."},"switchingStatus":{"type":"string","enum":["untested","tested-no-switch","tested-partial-switch","switched","reopened"],"description":"Whether its switching condition has been tested, and what came of it: untested, tested with no switch, partly switched, switched, or reopened by new evidence."},"switchingTestedAt":{"type":"string","description":"When its switching status was last set; absent while untested. Stamped by the database."},"switchingTestedByName":{"type":"string","description":"Who set it."},"switchingBasis":{"type":"string","description":"Why: the reason given with it."},"reviewBy":{"type":"string","description":"When it should be looked at again, YYYY-MM-DD; from that day it waits in To check."},"priority":{"type":"string","enum":["now","next","later"],"description":"A person's priority for it under the question's constraint; never set without one."},"priorityReason":{"type":"string"},"upstreamChangedAt":{"type":"string","description":"When something it rests on changed after it was decided. Cleared once a person edits it, decides it again or says it still holds."},"upstreamChangedFrom":{"type":"string","format":"uuid","description":"The proposition it rests on that changed."},"attribution":{"type":"string","enum":["specific","common"],"description":"Common: arises under every option, and is counted against none. Specific: through a transmission some options have."},"transmission":{"type":"string","description":"How it reaches the options it bears on."},"effect":{"type":"string","enum":["direction","net","forecast"],"description":"For a claim about an effect: its direction, the net effect, or a forecast — each needing more evidence than the last."},"scenarioId":{"type":"string","format":"uuid","description":"The scenario it holds under. With neither this nor everyScenario, not stated."},"everyScenario":{"type":"boolean","description":"It holds whichever scenario happens. Never with a scenario. Neither: not stated."},"dimensionId":{"type":"string","format":"uuid","description":"The factor it establishes, where it establishes one."},"status":{"type":"string","enum":["proposed","accepted","qualified","unresolved","rejected"],"description":"Its verdict, which changes only by a person’s decision: accepted (it survives), qualified, unresolved or rejected."},"decidedBy":{"type":"string","format":"uuid"},"decidedByName":{"type":"string"},"decidedAt":{"type":"string"},"position":{"type":"integer"},"createdBy":{"type":"string","format":"uuid"},"createdAt":{"type":"string"},"draftId":{"type":"string","format":"uuid","description":"Set where SwingFactor drafted it."},"updatedAt":{"type":"string"},"links":{"$ref":"#/components/schemas/PropositionLinks"}},"required":["id","workspaceId","questionId","statement","claimType","evidenceStrength","problemKind","role","switchingStatus","attribution","status","position","createdAt","updatedAt","links"]},"PropositionLinks":{"type":"object","properties":{"self":{"type":"string"},"decision":{"type":"string"},"confirmation":{"type":"string"},"propagation":{"type":"string"},"bearings":{"type":"string"},"question":{"type":"string"}},"required":["self","decision","confirmation","propagation","bearings","question"],"description":"Relative /v1 URLs to follow."},"PropositionBody":{"type":"object","properties":{"name":{"type":"string","maxLength":200},"statement":{"type":"string","minLength":1,"maxLength":1000},"claimType":{"type":"string","enum":["fact","estimate","model-result","proposal","scenario","interpretation","unresolved"],"description":"What kind of statement it is."},"standing":{"type":"string","enum":["possible","probable","demonstrated"],"description":"How far it is shown: possible, probable and demonstrated are three different things."},"evidenceStrength":{"type":"string","enum":["strong","moderate","weak","contested","unknown"],"description":"Defaults to unknown."},"problemKind":{"type":"string","enum":["epistemic","capability","normative"],"description":"Defaults to epistemic."},"horizon":{"type":"string","enum":["transition","early","medium","long","every"],"description":"The matched horizon: transition (Day One), early adjustment, medium term, long run, or every horizon. None: not stated — never every."},"role":{"type":"string","enum":["empirical","mixed","methodological","normative"],"description":"Defaults to empirical."},"switchingCondition":{"type":"string","maxLength":1000},"attribution":{"type":"string","enum":["specific","common"],"description":"Defaults to specific."},"transmission":{"type":"string","maxLength":1000},"effect":{"type":"string","enum":["direction","net","forecast"],"description":"For a claim about an effect: its direction, the net effect, or a forecast — each needing more evidence than the last."},"scenarioId":{"type":"string","format":"uuid"},"everyScenario":{"type":"boolean","description":"It holds whichever scenario happens. Never with a scenario. Neither: not stated."},"dimensionId":{"type":"string","format":"uuid","description":"The factor it establishes."},"position":{"type":"integer"}},"required":["statement","claimType"]},"PropositionPatchBody":{"type":"object","properties":{"name":{"type":"string","maxLength":200,"description":"An empty string clears it."},"statement":{"type":"string","minLength":1,"maxLength":1000},"claimType":{"type":"string","enum":["fact","estimate","model-result","proposal","scenario","interpretation","unresolved"],"description":"What kind of statement it is."},"standing":{"anyOf":[{"type":"string","enum":["possible","probable","demonstrated"],"description":"How far it is shown: possible, probable and demonstrated are three different things."},{"type":"string","enum":[""]}]},"evidenceStrength":{"type":"string","enum":["strong","moderate","weak","contested","unknown"],"description":"Defaults to unknown."},"problemKind":{"type":"string","enum":["epistemic","capability","normative"],"description":"Defaults to epistemic."},"horizon":{"anyOf":[{"type":"string","enum":["transition","early","medium","long","every"],"description":"The matched horizon: transition (Day One), early adjustment, medium term, long run, or every horizon. None: not stated — never every."},{"type":"string","enum":[""]}]},"role":{"type":"string","enum":["empirical","mixed","methodological","normative"],"description":"Defaults to empirical."},"switchingCondition":{"type":"string","maxLength":1000},"attribution":{"type":"string","enum":["specific","common"],"description":"Defaults to specific."},"transmission":{"type":"string","maxLength":1000},"effect":{"anyOf":[{"type":"string","enum":["direction","net","forecast"],"description":"For a claim about an effect: its direction, the net effect, or a forecast — each needing more evidence than the last."},{"type":"string","enum":[""]}]},"scenarioId":{"anyOf":[{"type":"string","format":"uuid"},{"type":"string","enum":[""]}]},"everyScenario":{"type":"boolean","description":"It holds whichever scenario happens. Never with a scenario. Neither: not stated."},"dimensionId":{"anyOf":[{"type":"string","format":"uuid"},{"type":"string","enum":[""]}]},"position":{"type":"integer"},"switchingStatus":{"type":"string","enum":["untested","tested-no-switch","tested-partial-switch","switched","reopened"],"description":"Whether its switching condition has been tested, and what came of it: untested, tested with no switch, partly switched, switched, or reopened by new evidence."},"reviewBy":{"anyOf":[{"type":"string","format":"date","pattern":"^\\d{4}-\\d{2}-\\d{2}$","example":"2026-10-13"},{"type":"string","enum":[""]}]},"priority":{"anyOf":[{"type":"string","enum":["now","next","later"]},{"type":"string","enum":[""]}],"description":"Under the question’s constraint only; refused without one."},"priorityReason":{"type":"string","maxLength":1000},"reason":{"type":"string","maxLength":1000,"description":"Why — kept in the history."}}},"ConfirmBody":{"type":"object","properties":{"reason":{"type":"string","minLength":1,"maxLength":1000,"description":"Why it still holds."}},"required":["reason"]},"PropositionDecisionBody":{"type":"object","properties":{"status":{"type":"string","enum":["proposed","accepted","qualified","unresolved","rejected"],"description":"Accept (it survives), qualify, leave unresolved, reject, or reopen as proposed."},"reason":{"type":"string","maxLength":1000,"description":"Why — kept in the history."}},"required":["status"]},"PropositionOrder":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/Proposition"}},"total":{"type":"integer"},"offset":{"type":"integer"},"limit":{"type":"integer"}},"required":["items","total","offset","limit"]},"EvidenceList":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/Evidence"}},"total":{"type":"integer"},"offset":{"type":"integer"},"limit":{"type":"integer"}},"required":["items","total","offset","limit"]},"Evidence":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"workspaceId":{"type":"string","format":"uuid"},"questionId":{"type":"string","format":"uuid"},"propositionId":{"type":"string","format":"uuid"},"stance":{"type":"string","enum":["supports","contradicts","qualifies"]},"summary":{"type":"string","example":"Net fiscal balance -£25.3bn, -10.9% of GDP."},"source":{"type":"string","example":"Scottish Government, GERS 2025-26"},"sourceUrl":{"type":"string"},"sourceKind":{"type":"string","enum":["official-statistics","law","institution","research","modelling","polling","advocacy","proposal","expert-judgement","management-estimate","internal","news","first-person","other"]},"sourceItemId":{"type":"string","format":"uuid","description":"The question’s source document it was taken from."},"assertedBy":{"type":"string"},"assertedRole":{"type":"string","enum":["decides","knows","affects","affected","challenges"]},"declaredInterest":{"type":"string","description":"A stake whoever asserts it has in the outcome."},"publishedOn":{"type":"string","description":"When the source was published, YYYY-MM-DD."},"accessedOn":{"type":"string","description":"When it was read, YYYY-MM-DD."},"pinpoint":{"type":"string","description":"Where in the source: a page, table or section."},"quote":{"type":"string","description":"The passage it rests on, word for word, in the words of the version of its source that was read — found there before it was kept. A quote from an uploaded document is shown to its workspace only."},"quoteFound":{"type":"boolean","description":"Whether the quote was found in its source as read: false where it was looked for and is not there. Absent where nothing has looked yet."},"derivesFromId":{"type":"string","format":"uuid","description":"The evidence it derives from. Evidence sharing a root is one family, not independent confirmation."},"lean":{"type":"string","enum":["larger","smaller","either"],"description":"For a qualification: which way it leans."},"whyThisSource":{"type":"string","description":"Why this source was chosen for this claim, in words: the authority on the fact, independent evidence, an interested party’s own claim, a person’s own experience, or a secondary source and why."},"status":{"type":"string","enum":["proposed","accepted","rejected"],"description":"Changes only by a person’s decision."},"decidedBy":{"type":"string","format":"uuid"},"decidedByName":{"type":"string"},"decidedAt":{"type":"string"},"createdBy":{"type":"string","format":"uuid"},"createdAt":{"type":"string"},"draftId":{"type":"string","format":"uuid","description":"Set where SwingFactor drafted it."},"updatedAt":{"type":"string"},"links":{"$ref":"#/components/schemas/EvidenceLinks"}},"required":["id","workspaceId","questionId","propositionId","stance","summary","source","sourceKind","status","createdAt","updatedAt","links"]},"EvidenceLinks":{"type":"object","properties":{"self":{"type":"string"},"decision":{"type":"string"},"proposition":{"type":"string"},"question":{"type":"string"}},"required":["self","decision","proposition","question"],"description":"Relative /v1 URLs to follow."},"OwnEvidenceBody":{"type":"object","properties":{"targetKind":{"type":"string","enum":["proposition","evidence","dependency","estimate","break-even"],"description":"What the person is looking at: a claim, or evidence, what a claim rests on, a range or a threshold — the claim behind it gets the evidence."},"targetId":{"type":"string","format":"uuid"},"statement":{"type":"string","minLength":1,"maxLength":2000,"example":"My Solterra does 250 miles in summer and 190 in winter.","description":"What they know first-hand, in their own words."},"stance":{"type":"string","enum":["supports","contradicts","qualifies"]}},"required":["targetKind","targetId","statement","stance"]},"EvidenceBody":{"type":"object","properties":{"stance":{"type":"string","enum":["supports","contradicts","qualifies"]},"summary":{"type":"string","minLength":1,"maxLength":2000},"source":{"type":"string","minLength":1,"maxLength":500},"sourceUrl":{"type":"string","pattern":"^https?:\\/\\/\\S+$"},"sourceKind":{"type":"string","enum":["official-statistics","law","institution","research","modelling","polling","advocacy","proposal","expert-judgement","management-estimate","internal","news","first-person","other"],"description":"Defaults to other. first-person: a person’s own expectation or experience — it names them as assertedBy, affected."},"sourceItemId":{"type":"string","format":"uuid","description":"One of the question’s source documents."},"assertedBy":{"type":"string","maxLength":200},"assertedRole":{"type":"string","enum":["decides","knows","affects","affected","challenges"]},"declaredInterest":{"type":"string","maxLength":300,"example":"Funded by the Yes campaign","description":"A stake the asserter has in the outcome."},"publishedOn":{"type":"string","format":"date","pattern":"^\\d{4}-\\d{2}-\\d{2}$","example":"2026-10-13"},"accessedOn":{"type":"string","format":"date","pattern":"^\\d{4}-\\d{2}-\\d{2}$","example":"2026-10-13"},"pinpoint":{"type":"string","maxLength":300,"example":"Table 4"},"quote":{"type":"string","maxLength":1200,"description":"The passage, word for word, from the source document `sourceItemId` names: refused unless it is in the document as read, but for its spacing. Kept in the document’s own words. An empty string on an edit clears it."},"derivesFromId":{"type":"string","format":"uuid"},"lean":{"type":"string","enum":["larger","smaller","either"],"description":"For a qualification: the effect may be larger, smaller, or either way. Ignored otherwise."},"whyThisSource":{"type":"string","maxLength":600,"description":"Why this source fits the claim, in a sentence. An empty string on an edit clears it."}},"required":["stance","summary","source"]},"EvidencePatchBody":{"type":"object","properties":{"stance":{"type":"string","enum":["supports","contradicts","qualifies"]},"summary":{"type":"string","minLength":1,"maxLength":2000},"source":{"type":"string","minLength":1,"maxLength":500},"sourceUrl":{"anyOf":[{"type":"string","pattern":"^https?:\\/\\/\\S+$"},{"type":"string","enum":[""]}]},"sourceKind":{"type":"string","enum":["official-statistics","law","institution","research","modelling","polling","advocacy","proposal","expert-judgement","management-estimate","internal","news","first-person","other"],"description":"Defaults to other. first-person: a person’s own expectation or experience — it names them as assertedBy, affected."},"sourceItemId":{"anyOf":[{"type":"string","format":"uuid"},{"type":"string","enum":[""]}]},"assertedBy":{"type":"string","maxLength":200},"assertedRole":{"anyOf":[{"type":"string","enum":["decides","knows","affects","affected","challenges"]},{"type":"string","enum":[""]}]},"declaredInterest":{"type":"string","maxLength":300,"example":"Funded by the Yes campaign","description":"A stake the asserter has in the outcome."},"publishedOn":{"anyOf":[{"type":"string","format":"date","pattern":"^\\d{4}-\\d{2}-\\d{2}$","example":"2026-10-13"},{"type":"string","enum":[""]}]},"accessedOn":{"anyOf":[{"type":"string","format":"date","pattern":"^\\d{4}-\\d{2}-\\d{2}$","example":"2026-10-13"},{"type":"string","enum":[""]}]},"pinpoint":{"type":"string","maxLength":300,"example":"Table 4"},"quote":{"type":"string","maxLength":1200,"description":"The passage, word for word, from the source document `sourceItemId` names: refused unless it is in the document as read, but for its spacing. Kept in the document’s own words. An empty string on an edit clears it."},"derivesFromId":{"anyOf":[{"type":"string","format":"uuid"},{"type":"string","enum":[""]}]},"lean":{"anyOf":[{"type":"string","enum":["larger","smaller","either"]},{"type":"string","enum":[""]}]},"whyThisSource":{"type":"string","maxLength":600,"description":"Why this source fits the claim, in a sentence. An empty string on an edit clears it."},"reason":{"type":"string","maxLength":1000,"description":"Why — kept in the history."}}},"DependencyList":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/Dependency"}},"total":{"type":"integer"},"offset":{"type":"integer"},"limit":{"type":"integer"}},"required":["items","total","offset","limit"]},"Dependency":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"workspaceId":{"type":"string","format":"uuid"},"questionId":{"type":"string","format":"uuid"},"propositionId":{"type":"string","format":"uuid","description":"The proposition that rests on the other."},"dependsOnId":{"type":"string","format":"uuid","description":"What it rests on."},"mechanism":{"type":"string"},"status":{"type":"string","enum":["proposed","accepted","rejected"],"description":"Changes only by a person’s decision."},"decidedBy":{"type":"string","format":"uuid"},"decidedByName":{"type":"string"},"decidedAt":{"type":"string"},"createdBy":{"type":"string","format":"uuid"},"createdAt":{"type":"string"},"draftId":{"type":"string","format":"uuid","description":"Set where SwingFactor drafted it."},"updatedAt":{"type":"string"},"links":{"$ref":"#/components/schemas/DependencyLinks"}},"required":["id","workspaceId","questionId","propositionId","dependsOnId","status","createdAt","updatedAt","links"]},"DependencyLinks":{"type":"object","properties":{"self":{"type":"string"},"decision":{"type":"string"},"proposition":{"type":"string"},"dependsOn":{"type":"string"},"question":{"type":"string"}},"required":["self","decision","proposition","dependsOn","question"],"description":"Relative /v1 URLs to follow."},"DependencyBody":{"type":"object","properties":{"propositionId":{"type":"string","format":"uuid"},"dependsOnId":{"type":"string","format":"uuid"},"mechanism":{"type":"string","maxLength":1000}},"required":["propositionId","dependsOnId"]},"DependencyPatchBody":{"type":"object","properties":{"mechanism":{"type":"string","maxLength":1000},"reason":{"type":"string","maxLength":1000,"description":"Why — kept in the history."}}},"ReachList":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/Reach"}},"total":{"type":"integer"},"offset":{"type":"integer"},"limit":{"type":"integer"}},"required":["items","total","offset","limit"]},"Reach":{"type":"object","properties":{"propositionId":{"type":"string","format":"uuid"},"depth":{"type":"integer","description":"Steps from the start, by the shortest chain."},"path":{"type":"array","items":{"type":"string","format":"uuid"},"description":"That chain, from the start to here, both ends included."}},"required":["propositionId","depth","path"]},"VariableList":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/Variable"}},"total":{"type":"integer"},"offset":{"type":"integer"},"limit":{"type":"integer"}},"required":["items","total","offset","limit"]},"Variable":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"workspaceId":{"type":"string","format":"uuid"},"questionId":{"type":"string","format":"uuid"},"propositionId":{"type":"string","format":"uuid"},"name":{"type":"string","example":"Deficit to be financed at independence"},"unit":{"type":"string","example":"% of GDP"},"createdBy":{"type":"string","format":"uuid"},"createdAt":{"type":"string"},"draftId":{"type":"string","format":"uuid","description":"Set where SwingFactor drafted it."},"updatedAt":{"type":"string"},"links":{"$ref":"#/components/schemas/VariableLinks"}},"required":["id","workspaceId","questionId","propositionId","name","createdAt","updatedAt","links"]},"VariableLinks":{"type":"object","properties":{"self":{"type":"string"},"estimates":{"type":"string"},"breakEvens":{"type":"string"},"proposition":{"type":"string"},"question":{"type":"string"}},"required":["self","estimates","breakEvens","proposition","question"],"description":"Relative /v1 URLs to follow."},"VariableBody":{"type":"object","properties":{"propositionId":{"type":"string","format":"uuid"},"name":{"type":"string","minLength":1,"maxLength":200},"unit":{"type":"string","maxLength":40}},"required":["propositionId","name"]},"VariablePatchBody":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":200},"unit":{"type":"string","maxLength":40},"reason":{"type":"string","maxLength":1000,"description":"Why — kept in the history."}}},"EstimateList":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/Estimate"}},"total":{"type":"integer"},"offset":{"type":"integer"},"limit":{"type":"integer"}},"required":["items","total","offset","limit"]},"Estimate":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"workspaceId":{"type":"string","format":"uuid"},"questionId":{"type":"string","format":"uuid"},"variableId":{"type":"string","format":"uuid"},"low":{"type":"number"},"high":{"type":"number"},"source":{"type":"string"},"assertedBy":{"type":"string"},"assertedRole":{"type":"string","enum":["decides","knows","affects","affected","challenges"]},"horizon":{"type":"string","enum":["transition","early","medium","long","every"],"description":"The matched horizon: transition (Day One), early adjustment, medium term, long run, or every horizon. None: not stated — never every."},"scenarioId":{"type":"string","format":"uuid"},"everyScenario":{"type":"boolean","description":"It holds whichever scenario happens. Never with a scenario. Neither: not stated."},"configurationId":{"type":"string","format":"uuid","description":"The configuration it holds under: the same quantity under another package is another range."},"everyConfiguration":{"type":"boolean","description":"It holds under every configuration of the options its claim bears on. Neither: not stated."},"basis":{"type":"string","enum":["published","derived","judgement"],"description":"Published by its source, derived by the project (with its arithmetic), or a judgement."},"derivation":{"type":"string","description":"For a derived range: its arithmetic."},"measuredAgainst":{"type":"string","description":"The baseline it is measured against."},"status":{"type":"string","enum":["proposed","accepted","rejected"],"description":"Changes only by a person’s decision."},"decidedBy":{"type":"string","format":"uuid"},"decidedByName":{"type":"string"},"decidedAt":{"type":"string"},"createdBy":{"type":"string","format":"uuid"},"createdAt":{"type":"string"},"draftId":{"type":"string","format":"uuid","description":"Set where SwingFactor drafted it."},"updatedAt":{"type":"string"},"links":{"$ref":"#/components/schemas/EstimateLinks"}},"required":["id","workspaceId","questionId","variableId","low","high","source","status","createdAt","updatedAt","links"]},"EstimateLinks":{"type":"object","properties":{"self":{"type":"string"},"decision":{"type":"string"},"variable":{"type":"string"}},"required":["self","decision","variable"],"description":"Relative /v1 URLs to follow."},"EstimateBody":{"type":"object","properties":{"low":{"type":"number"},"high":{"type":"number"},"source":{"type":"string","minLength":1,"maxLength":500},"assertedBy":{"type":"string","maxLength":200},"assertedRole":{"type":"string","enum":["decides","knows","affects","affected","challenges"]},"horizon":{"type":"string","enum":["transition","early","medium","long","every"],"description":"The matched horizon: transition (Day One), early adjustment, medium term, long run, or every horizon. None: not stated — never every."},"scenarioId":{"type":"string","format":"uuid"},"everyScenario":{"type":"boolean","description":"It holds whichever scenario happens. Never with a scenario. Neither: not stated."},"configurationId":{"type":"string","format":"uuid"},"everyConfiguration":{"type":"boolean"},"basis":{"type":"string","enum":["published","derived","judgement"],"description":"Published by its source, derived by the project (with its arithmetic), or a judgement."},"derivation":{"type":"string","maxLength":500,"description":"Required for a derived range."},"measuredAgainst":{"type":"string","maxLength":300}},"required":["low","high","source"]},"EstimatePatchBody":{"type":"object","properties":{"low":{"type":"number"},"high":{"type":"number"},"source":{"type":"string","minLength":1,"maxLength":500},"assertedBy":{"type":"string","maxLength":200},"assertedRole":{"anyOf":[{"type":"string","enum":["decides","knows","affects","affected","challenges"]},{"type":"string","enum":[""]}]},"horizon":{"anyOf":[{"type":"string","enum":["transition","early","medium","long","every"],"description":"The matched horizon: transition (Day One), early adjustment, medium term, long run, or every horizon. None: not stated — never every."},{"type":"string","enum":[""]}]},"scenarioId":{"anyOf":[{"type":"string","format":"uuid"},{"type":"string","enum":[""]}]},"everyScenario":{"type":"boolean","description":"It holds whichever scenario happens. Never with a scenario. Neither: not stated."},"configurationId":{"anyOf":[{"type":"string","format":"uuid"},{"type":"string","enum":[""]}]},"everyConfiguration":{"type":"boolean"},"basis":{"anyOf":[{"type":"string","enum":["published","derived","judgement"],"description":"Published by its source, derived by the project (with its arithmetic), or a judgement."},{"type":"string","enum":[""]}]},"derivation":{"type":"string","maxLength":500},"measuredAgainst":{"type":"string","maxLength":300},"reason":{"type":"string","maxLength":1000,"description":"Why — kept in the history."}}},"BreakEvenList":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/BreakEven"}},"total":{"type":"integer"},"offset":{"type":"integer"},"limit":{"type":"integer"}},"required":["items","total","offset","limit"]},"BreakEven":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"workspaceId":{"type":"string","format":"uuid"},"questionId":{"type":"string","format":"uuid"},"variableId":{"type":"string","format":"uuid"},"threshold":{"type":"number"},"horizon":{"type":["string","null"],"enum":["transition","early","medium","long","every",null],"description":"The matched horizon: transition (Day One), early adjustment, medium term, long run, or every horizon. None: not stated — never every."},"consequence":{"type":"string","description":"What changes at the threshold."},"basis":{"type":"string","enum":["derived","published","criterion","asserted"],"description":"How it is known: derived (its arithmetic shown), published, a published criterion, or asserted by a named party — which records that they say so, not that they are right."},"derivation":{"type":["string","null"],"description":"For a derived one: the arithmetic."},"source":{"type":["string","null"],"description":"Where it is published, or asserted."},"assertedBy":{"type":["string","null"],"description":"For an asserted one: who draws the line."},"belowOutcome":{"type":["string","null"],"description":"What occurs below the threshold."},"aboveOutcome":{"type":["string","null"],"description":"What occurs above it."},"compares":{"type":"array","items":{"type":"object","properties":{"optionId":{"type":"string","format":"uuid"},"configurationId":{"type":["string","null"],"format":"uuid"}},"required":["optionId"]},"description":"The two options it compares, each perhaps one configuration, in no order; or none. Never which is ahead: which way a consequence counts is a judgement, not the model’s."},"configurationId":{"type":["string","null"],"format":"uuid","description":"For a break-even comparing no options: the configuration it holds under."},"scenarioId":{"type":["string","null"],"format":"uuid"},"everyScenario":{"type":"boolean"},"measuredAgainst":{"type":["string","null"],"description":"What it is measured against: compared with a range’s baseline, never bridged."},"status":{"type":"string","enum":["proposed","accepted","rejected"],"description":"Changes only by a person’s decision."},"decidedBy":{"type":"string","format":"uuid"},"decidedByName":{"type":"string"},"decidedAt":{"type":"string"},"createdBy":{"type":"string","format":"uuid"},"createdAt":{"type":"string"},"draftId":{"type":"string","format":"uuid","description":"Set where SwingFactor drafted it."},"updatedAt":{"type":"string"},"links":{"$ref":"#/components/schemas/BreakEvenLinks"}},"required":["id","workspaceId","questionId","variableId","threshold","consequence","basis","compares","status","createdAt","updatedAt","links"]},"BreakEvenLinks":{"type":"object","properties":{"self":{"type":"string"},"decision":{"type":"string"},"variable":{"type":"string"}},"required":["self","decision","variable"],"description":"Relative /v1 URLs to follow."},"BreakEvenBody":{"type":"object","properties":{"threshold":{"type":"number"},"consequence":{"type":"string","minLength":1,"maxLength":1000},"basis":{"type":"string","enum":["derived","published","criterion","asserted"],"description":"How it is known: derived (its arithmetic shown), published, a published criterion, or asserted by a named party — which records that they say so, not that they are right."},"derivation":{"type":"string","maxLength":1000},"source":{"type":"string","maxLength":500},"assertedBy":{"type":"string","maxLength":200},"belowOutcome":{"type":"string","maxLength":1000},"aboveOutcome":{"type":"string","maxLength":1000},"compares":{"type":"array","items":{"type":"object","properties":{"optionId":{"type":"string","format":"uuid"},"configurationId":{"type":"string","format":"uuid"}},"required":["optionId"]}},"configurationId":{"type":"string","format":"uuid"},"horizon":{"type":"string","enum":["transition","early","medium","long","every"],"description":"The matched horizon: transition (Day One), early adjustment, medium term, long run, or every horizon. None: not stated — never every."},"scenarioId":{"type":"string","format":"uuid"},"everyScenario":{"type":"boolean","description":"It holds whichever scenario happens. Never with a scenario. Neither: not stated."},"measuredAgainst":{"type":"string","maxLength":300}},"required":["threshold","consequence","basis"]},"BreakEvenPatchBody":{"type":"object","properties":{"threshold":{"type":"number"},"consequence":{"type":"string","minLength":1,"maxLength":1000},"basis":{"type":"string","enum":["derived","published","criterion","asserted"],"description":"How it is known: derived (its arithmetic shown), published, a published criterion, or asserted by a named party — which records that they say so, not that they are right."},"derivation":{"type":"string","maxLength":1000},"source":{"type":"string","maxLength":500},"assertedBy":{"type":"string","maxLength":200},"belowOutcome":{"type":"string","maxLength":1000},"aboveOutcome":{"type":"string","maxLength":1000},"compares":{"type":"array","items":{"type":"object","properties":{"optionId":{"type":"string","format":"uuid"},"configurationId":{"type":"string","format":"uuid"}},"required":["optionId"]}},"configurationId":{"anyOf":[{"type":"string","format":"uuid"},{"type":"string","enum":[""]}]},"horizon":{"anyOf":[{"type":"string","enum":["transition","early","medium","long","every"],"description":"The matched horizon: transition (Day One), early adjustment, medium term, long run, or every horizon. None: not stated — never every."},{"type":"string","enum":[""]}]},"scenarioId":{"anyOf":[{"type":"string","format":"uuid"},{"type":"string","enum":[""]}]},"everyScenario":{"type":"boolean","description":"It holds whichever scenario happens. Never with a scenario. Neither: not stated."},"measuredAgainst":{"type":"string","maxLength":300},"reason":{"type":"string","maxLength":1000,"description":"Why — kept in the history."}}},"InvestigationSet":{"type":"object","properties":{"questionId":{"type":"string","format":"uuid"},"variables":{"type":"array","items":{"type":"object","properties":{"variableId":{"type":"string","format":"uuid"},"name":{"type":"string"},"unit":{"type":["string","null"]},"propositionId":{"type":"string","format":"uuid"},"problemKind":{"type":"string","enum":["epistemic","capability","normative"]},"status":{"type":"string","enum":["critical","not-critical","incomplete"]},"acceptedEstimates":{"type":"integer"},"acceptedBreakEvens":{"type":"integer","description":"The evidence’s: derived, published or criterion."},"crossings":{"type":"array","items":{"type":"object","properties":{"breakEvenId":{"type":"string","format":"uuid"},"variableId":{"type":"string","format":"uuid"},"threshold":{"type":"number"},"horizon":{"type":["string","null"],"enum":["transition","early","medium","long","every",null],"description":"The matched horizon: transition (Day One), early adjustment, medium term, long run, or every horizon. None: not stated — never every."},"consequence":{"type":"string","description":"What changes at the threshold."},"basis":{"type":"string","enum":["derived","published","criterion","asserted"],"description":"How it is known: derived (its arithmetic shown), published, a published criterion, or asserted by a named party — which records that they say so, not that they are right."},"derivation":{"type":["string","null"],"description":"For a derived one: the arithmetic."},"source":{"type":["string","null"],"description":"Where it is published, or asserted."},"assertedBy":{"type":["string","null"],"description":"For an asserted one: who draws the line."},"belowOutcome":{"type":["string","null"],"description":"What occurs below the threshold."},"aboveOutcome":{"type":["string","null"],"description":"What occurs above it."},"compares":{"type":"array","items":{"type":"object","properties":{"optionId":{"type":"string","format":"uuid"},"configurationId":{"type":["string","null"],"format":"uuid"}},"required":["optionId"]},"description":"The two options it compares, each perhaps one configuration, in no order; or none. Never which is ahead: which way a consequence counts is a judgement, not the model’s."},"configurationId":{"type":["string","null"],"format":"uuid","description":"For a break-even comparing no options: the configuration it holds under."},"scenarioId":{"type":["string","null"],"format":"uuid"},"everyScenario":{"type":"boolean"},"measuredAgainst":{"type":["string","null"],"description":"What it is measured against: compared with a range’s baseline, never bridged."},"estimateIds":{"type":"array","items":{"type":"string","format":"uuid"}}},"required":["breakEvenId","variableId","threshold","consequence","basis","compares","estimateIds"]}},"disagreements":{"type":"array","items":{"type":"object","properties":{"breakEvenId":{"type":"string","format":"uuid"},"variableId":{"type":"string","format":"uuid"},"threshold":{"type":"number"},"horizon":{"type":["string","null"],"enum":["transition","early","medium","long","every",null],"description":"The matched horizon: transition (Day One), early adjustment, medium term, long run, or every horizon. None: not stated — never every."},"consequence":{"type":"string","description":"What changes at the threshold."},"basis":{"type":"string","enum":["derived","published","criterion","asserted"],"description":"How it is known: derived (its arithmetic shown), published, a published criterion, or asserted by a named party — which records that they say so, not that they are right."},"derivation":{"type":["string","null"],"description":"For a derived one: the arithmetic."},"source":{"type":["string","null"],"description":"Where it is published, or asserted."},"assertedBy":{"type":["string","null"],"description":"For an asserted one: who draws the line."},"belowOutcome":{"type":["string","null"],"description":"What occurs below the threshold."},"aboveOutcome":{"type":["string","null"],"description":"What occurs above it."},"compares":{"type":"array","items":{"type":"object","properties":{"optionId":{"type":"string","format":"uuid"},"configurationId":{"type":["string","null"],"format":"uuid"}},"required":["optionId"]},"description":"The two options it compares, each perhaps one configuration, in no order; or none. Never which is ahead: which way a consequence counts is a judgement, not the model’s."},"configurationId":{"type":["string","null"],"format":"uuid","description":"For a break-even comparing no options: the configuration it holds under."},"scenarioId":{"type":["string","null"],"format":"uuid"},"everyScenario":{"type":"boolean"},"measuredAgainst":{"type":["string","null"],"description":"What it is measured against: compared with a range’s baseline, never bridged."},"belowEstimateIds":{"type":"array","items":{"type":"string","format":"uuid"}},"aboveEstimateIds":{"type":"array","items":{"type":"string","format":"uuid"}}},"required":["breakEvenId","variableId","threshold","consequence","basis","compares","belowEstimateIds","aboveEstimateIds"]}},"sides":{"type":"array","items":{"type":"object","properties":{"breakEvenId":{"type":"string","format":"uuid"},"variableId":{"type":"string","format":"uuid"},"threshold":{"type":"number"},"horizon":{"type":["string","null"],"enum":["transition","early","medium","long","every",null],"description":"The matched horizon: transition (Day One), early adjustment, medium term, long run, or every horizon. None: not stated — never every."},"consequence":{"type":"string","description":"What changes at the threshold."},"basis":{"type":"string","enum":["derived","published","criterion","asserted"],"description":"How it is known: derived (its arithmetic shown), published, a published criterion, or asserted by a named party — which records that they say so, not that they are right."},"derivation":{"type":["string","null"],"description":"For a derived one: the arithmetic."},"source":{"type":["string","null"],"description":"Where it is published, or asserted."},"assertedBy":{"type":["string","null"],"description":"For an asserted one: who draws the line."},"belowOutcome":{"type":["string","null"],"description":"What occurs below the threshold."},"aboveOutcome":{"type":["string","null"],"description":"What occurs above it."},"compares":{"type":"array","items":{"type":"object","properties":{"optionId":{"type":"string","format":"uuid"},"configurationId":{"type":["string","null"],"format":"uuid"}},"required":["optionId"]},"description":"The two options it compares, each perhaps one configuration, in no order; or none. Never which is ahead: which way a consequence counts is a judgement, not the model’s."},"configurationId":{"type":["string","null"],"format":"uuid","description":"For a break-even comparing no options: the configuration it holds under."},"scenarioId":{"type":["string","null"],"format":"uuid"},"everyScenario":{"type":"boolean"},"measuredAgainst":{"type":["string","null"],"description":"What it is measured against: compared with a range’s baseline, never bridged."},"belowEstimateIds":{"type":"array","items":{"type":"string","format":"uuid"}},"aboveEstimateIds":{"type":"array","items":{"type":"string","format":"uuid"}},"acrossEstimateIds":{"type":"array","items":{"type":"string","format":"uuid"}},"withoutRange":{"type":"array","items":{"type":"object","properties":{"optionId":{"type":"string","format":"uuid"},"configurationId":{"type":["string","null"],"format":"uuid"}},"required":["optionId"]},"description":"The sides it compares with no accepted range read against them: nothing is filled in for them."},"notCompared":{"type":"array","items":{"type":"object","properties":{"estimateId":{"type":"string","format":"uuid"},"mismatches":{"type":"array","items":{"type":"object","properties":{"dimension":{"type":"string","enum":["horizon","scenario","baseline","option","configuration"]},"result":{"type":"string","enum":["mismatch","not-stated"]},"side":{"type":"string","enum":["range","threshold","either"]},"says":{"type":"string"}},"required":["dimension","result","says"]}}},"required":["estimateId","mismatches"]},"description":"The variable’s accepted ranges not read against it, and why, dimension by dimension: shown, never bridged."}},"required":["breakEvenId","variableId","threshold","consequence","basis","compares","belowEstimateIds","aboveEstimateIds","acrossEstimateIds"]},"description":"Every accepted break-even, whoever’s, and which accepted ranges lie below, above and across it."},"attributed":{"type":"array","items":{"type":"object","properties":{"breakEvenId":{"type":"string","format":"uuid"},"variableId":{"type":"string","format":"uuid"},"threshold":{"type":"number"},"horizon":{"type":["string","null"],"enum":["transition","early","medium","long","every",null],"description":"The matched horizon: transition (Day One), early adjustment, medium term, long run, or every horizon. None: not stated — never every."},"consequence":{"type":"string","description":"What changes at the threshold."},"basis":{"type":"string","enum":["derived","published","criterion","asserted"],"description":"How it is known: derived (its arithmetic shown), published, a published criterion, or asserted by a named party — which records that they say so, not that they are right."},"derivation":{"type":["string","null"],"description":"For a derived one: the arithmetic."},"source":{"type":["string","null"],"description":"Where it is published, or asserted."},"assertedBy":{"type":["string","null"],"description":"For an asserted one: who draws the line."},"belowOutcome":{"type":["string","null"],"description":"What occurs below the threshold."},"aboveOutcome":{"type":["string","null"],"description":"What occurs above it."},"compares":{"type":"array","items":{"type":"object","properties":{"optionId":{"type":"string","format":"uuid"},"configurationId":{"type":["string","null"],"format":"uuid"}},"required":["optionId"]},"description":"The two options it compares, each perhaps one configuration, in no order; or none. Never which is ahead: which way a consequence counts is a judgement, not the model’s."},"configurationId":{"type":["string","null"],"format":"uuid","description":"For a break-even comparing no options: the configuration it holds under."},"scenarioId":{"type":["string","null"],"format":"uuid"},"everyScenario":{"type":"boolean"},"measuredAgainst":{"type":["string","null"],"description":"What it is measured against: compared with a range’s baseline, never bridged."},"belowEstimateIds":{"type":"array","items":{"type":"string","format":"uuid"}},"aboveEstimateIds":{"type":"array","items":{"type":"string","format":"uuid"}},"acrossEstimateIds":{"type":"array","items":{"type":"string","format":"uuid"}},"withoutRange":{"type":"array","items":{"type":"object","properties":{"optionId":{"type":"string","format":"uuid"},"configurationId":{"type":["string","null"],"format":"uuid"}},"required":["optionId"]},"description":"The sides it compares with no accepted range read against them: nothing is filled in for them."},"notCompared":{"type":"array","items":{"type":"object","properties":{"estimateId":{"type":"string","format":"uuid"},"mismatches":{"type":"array","items":{"type":"object","properties":{"dimension":{"type":"string","enum":["horizon","scenario","baseline","option","configuration"]},"result":{"type":"string","enum":["mismatch","not-stated"]},"side":{"type":"string","enum":["range","threshold","either"]},"says":{"type":"string"}},"required":["dimension","result","says"]}}},"required":["estimateId","mismatches"]},"description":"The variable’s accepted ranges not read against it, and why, dimension by dimension: shown, never bridged."}},"required":["breakEvenId","variableId","threshold","consequence","basis","compares","belowEstimateIds","aboveEstimateIds","acrossEstimateIds"]},"description":"A party’s asserted threshold that the accepted ranges reach or lie either side of: listed as theirs, never the model’s, and never what makes the variable critical."},"incompleteBecause":{"type":["string","null"],"enum":["no-break-even","no-range","no-range-in-its-scope","no-range-at-its-horizon",null],"description":"Why it is not yet testable: no break-even the evidence gives is established; or one is, and the ranges to test it are missing."}},"required":["variableId","name","unit","propositionId","problemKind","status","acceptedEstimates","acceptedBreakEvens","crossings","disagreements","sides","attributed"]}},"valueChoices":{"type":"array","items":{"type":"string","format":"uuid"},"description":"Propositions no range resolves: people decide them."},"untested":{"type":"array","items":{"type":"string","format":"uuid"},"description":"Accepted or qualified empirical and mixed propositions that state nothing which would change them. Absent from an older snapshot."},"unresolved":{"type":"array","items":{"type":"object","properties":{"propositionId":{"type":"string","format":"uuid"},"problemKind":{"type":"string","enum":["epistemic","capability","normative"],"description":"While unresolved: investigate (epistemic), build capacity, or decide (normative)."}},"required":["propositionId","problemKind"]},"description":"Claims a person has left unresolved, with what resolving each takes: open matters, whether or not a figure could settle them. Absent from an older snapshot."},"constraint":{"type":["object","null"],"properties":{"kind":{"type":"string"},"note":{"type":["string","null"]},"deadline":{"type":["string","null"]}},"required":["kind"],"description":"What limits the investigation, when the question names it."},"undefinedOptions":{"type":"array","items":{"type":"string","format":"uuid"},"description":"Accepted options with no accepted configuration, where the question uses the frontier: a gap to fill, never a verdict."},"availabilityUnexamined":{"type":"array","items":{"type":"object","properties":{"optionId":{"type":"string","format":"uuid"},"obtainable":{"type":"boolean"},"durable":{"type":"boolean"}},"required":["optionId","obtainable","durable"]},"description":"Accepted options with no decided claim on whether they could be obtained, or would last — only where the question engages availability. Listed, and not counted against readiness."},"availability":{"type":"object","properties":{"engaged":{"type":"boolean"},"stated":{"type":["string","null"],"enum":["engaged","not-material",null]}},"required":["engaged"],"description":"Whether the question engages availability, and what it says of it."},"priorities":{"type":"object","additionalProperties":{"type":"object","properties":{"priority":{"type":"string"},"reason":{"type":["string","null"]}},"required":["priority"]},"description":"A person's priorities under that constraint, by proposition id."}},"required":["questionId","variables","valueChoices"]},"ChallengeList":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/Challenge"}},"total":{"type":"integer"},"offset":{"type":"integer"},"limit":{"type":"integer"}},"required":["items","total","offset","limit"]},"Challenge":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"workspaceId":{"type":"string","format":"uuid"},"questionId":{"type":"string","format":"uuid"},"targetKind":{"type":"string","enum":["proposition","evidence","dependency","estimate","break-even"]},"targetId":{"type":"string","format":"uuid"},"objection":{"type":"string"},"plain":{"type":"string","description":"SwingFactor’s doubt said plainly: what is wrong, then what would put it right."},"suggests":{"type":"string","enum":["fix","tell","fine"],"description":"The answer SwingFactor recommends: fix (public sources could put it right), tell (only your own knowledge could) or fine."},"raisedBy":{"type":"string","format":"uuid"},"raisedByName":{"type":"string"},"outcome":{"type":"string","enum":["no-change","qualified","material-change","new-uncertainty"],"description":"Absent while it is open."},"validity":{"type":"string","enum":["genuine","partly","not-genuine"],"description":"Whether it was right, apart from what it did. Absent while open, or not said."},"response":{"type":"string"},"resolvedBy":{"type":"string","format":"uuid"},"resolvedByName":{"type":"string"},"resolvedAt":{"type":"string"},"requestedChange":{"type":"string","description":"The change an editor asked for: right, and the model should change. It stays open until a person resolves it, and is kept beside the resolution after."},"requestedBy":{"type":"string","format":"uuid"},"requestedByName":{"type":"string"},"requestedAt":{"type":"string"},"changeCount":{"type":"integer","description":"On the list: changes since it was raised to what it was raised against. A resolution saying the model changed is refused while this is 0."},"yours":{"type":"boolean","description":"Whether the caller raised it — and so may withdraw it while it is open and unanswered."},"createdAt":{"type":"string"},"draftId":{"type":"string","format":"uuid","description":"Set where SwingFactor drafted it."},"updatedAt":{"type":"string"},"links":{"$ref":"#/components/schemas/ChallengeLinks"}},"required":["id","workspaceId","questionId","targetKind","targetId","objection","yours","createdAt","updatedAt","links"]},"ChallengeLinks":{"type":"object","properties":{"self":{"type":"string"},"resolution":{"type":"string"},"changes":{"type":"string"},"question":{"type":"string"}},"required":["self","resolution","changes","question"],"description":"Relative /v1 URLs to follow."},"ChallengeBody":{"type":"object","properties":{"targetKind":{"type":"string","enum":["proposition","evidence","dependency","estimate","break-even"]},"targetId":{"type":"string","format":"uuid"},"objection":{"type":"string","minLength":1,"maxLength":2000}},"required":["targetKind","targetId","objection"]},"ResolutionBody":{"type":"object","properties":{"outcome":{"type":["string","null"],"enum":["no-change","qualified","material-change","new-uncertainty",null],"description":"What it did to the model; null reopens it."},"response":{"type":"string","maxLength":2000,"description":"What it did to the model. Required with an outcome; kept as the reason in the history."},"validity":{"type":"string","enum":["genuine","partly","not-genuine"],"description":"Whether the challenge was right: genuine, partly, or not genuine."}},"required":["outcome"]},"ChangeRequestBody":{"type":"object","properties":{"change":{"type":["string","null"],"maxLength":2000,"description":"What should change in the model, in the editor’s words; null takes the request back. Kept as the reason in the history."}},"required":["change"]},"ChallengeChangeList":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/Revision"}},"total":{"type":"integer"},"offset":{"type":"integer"},"limit":{"type":"integer"}},"required":["items","total","offset","limit"]},"Revision":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"workspaceId":{"type":"string","format":"uuid"},"questionId":{"type":"string","format":"uuid"},"entityKind":{"type":"string","enum":["question","option","proposition","evidence","dependency","variable","estimate","break-even","challenge","bearing","source","scenario","configuration","dimension","cell","assessment","group","impact","decision","outcome","fix","request"]},"entityId":{"type":"string","format":"uuid"},"action":{"type":"string","enum":["created","changed","deleted"]},"before":{"type":"object","additionalProperties":{}},"after":{"type":"object","additionalProperties":{}},"reason":{"type":"string"},"changedBy":{"type":"string","format":"uuid"},"changedByName":{"type":"string"},"actor":{"type":"string","description":"Who wrote it when no person did: SwingFactor, drafting."},"changedAt":{"type":"string"},"links":{"$ref":"#/components/schemas/RevisionLinks"}},"required":["id","workspaceId","questionId","entityKind","entityId","action","changedAt","links"]},"RevisionLinks":{"type":"object","properties":{"self":{"type":"string"},"question":{"type":"string"}},"required":["self","question"],"description":"Relative /v1 URLs to follow."},"RevisionList":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/Revision"}},"total":{"type":"integer"},"offset":{"type":"integer"},"limit":{"type":"integer"}},"required":["items","total","offset","limit"]},"BearingList":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/Bearing"}},"total":{"type":"integer"},"offset":{"type":"integer"},"limit":{"type":"integer"}},"required":["items","total","offset","limit"]},"Bearing":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"workspaceId":{"type":"string","format":"uuid"},"questionId":{"type":"string","format":"uuid"},"propositionId":{"type":"string","format":"uuid"},"optionId":{"type":"string","format":"uuid"},"aspect":{"type":"string","enum":["consequence","obtainable","durable"]},"configurationId":{"type":"string","format":"uuid"},"createdAt":{"type":"string"},"links":{"$ref":"#/components/schemas/BearingLinks"}},"required":["id","workspaceId","questionId","propositionId","optionId","aspect","createdAt","links"]},"BearingLinks":{"type":"object","properties":{"self":{"type":"string"},"proposition":{"type":"string"},"option":{"type":"string"},"question":{"type":"string"}},"required":["self","proposition","option","question"],"description":"Relative /v1 URLs to follow."},"PropositionBearingList":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/Bearing"}},"total":{"type":"integer"},"offset":{"type":"integer"},"limit":{"type":"integer"}},"required":["items","total","offset","limit"]},"BearingsBody":{"type":"object","properties":{"optionIds":{"type":"array","items":{"type":"string","format":"uuid"},"maxItems":100,"description":"Every option it bears on as a consequence. Those left out are taken away; its other bearings stay."},"bearings":{"type":"array","items":{"type":"object","properties":{"optionId":{"type":"string","format":"uuid"},"configurationId":{"type":["string","null"],"format":"uuid"},"aspect":{"type":"string","enum":["consequence","obtainable","durable"]}},"required":["optionId"]},"maxItems":300,"description":"Every bearing at once — option or configuration, and aspect. A new aspect or configuration reopens an accepted proposition."},"reason":{"type":"string","maxLength":1000,"description":"Why — kept in the history."}}},"BearingsReviewBody":{"type":"object","properties":{"reason":{"type":"string","maxLength":1000}}},"ReviewQueue":{"type":"object","properties":{"total":{"type":"integer","description":"Every item waiting, across the questions."},"questions":{"type":"array","items":{"type":"object","properties":{"questionId":{"type":"string","format":"uuid"},"title":{"type":"string"},"readiness":{"type":"object","properties":{"openChallenges":{"type":"integer"},"undecided":{"type":"integer"},"untested":{"type":"integer"},"toRecheck":{"type":"integer","description":"Claims resting on one that changed, or due to be looked at again. Absent from an older snapshot."},"ready":{"type":"boolean"}},"required":["openChallenges","undecided","untested","ready"]},"items":{"type":"array","items":{"type":"object","properties":{"kind":{"type":"string","enum":["proposition","evidence","dependency","estimate","break-even","option","not-yet-considered","challenge","untested","upstream-changed","configuration","dimension","cell","review-due","group","scenario","assessment","assessment-basis","fix"]},"id":{"type":"string","format":"uuid"},"label":{"type":"string"},"propositionId":{"type":["string","null"],"format":"uuid"},"drafted":{"type":"boolean"},"at":{"type":"string"}},"required":["kind","id","label","propositionId","drafted","at"]}}},"required":["questionId","title","readiness","items"]}}},"required":["total","questions"],"description":"What waits on a person across a workspace’s questions: proposed and undecided, open challenges, and claims that state nothing which would change them."},"Symmetry":{"type":"object","properties":{"questionId":{"type":"string","format":"uuid"},"options":{"type":"array","items":{"type":"object","properties":{"optionId":{"type":"string","format":"uuid"},"label":{"type":"string"},"propositions":{"type":"integer"},"accepted":{"type":"integer"},"qualified":{"type":"integer"},"unresolved":{"type":"integer"},"rejected":{"type":"integer"},"proposed":{"type":"integer"},"evidence":{"type":"integer","description":"Accepted evidence behind those propositions."},"challenges":{"type":"integer","description":"Challenges to those propositions or their evidence."},"withoutTransmission":{"type":"integer","description":"Specific to some options but not all, with no transmission named."},"variables":{"type":"integer","description":"Variables with an accepted range, of the decided specific propositions bearing on it."},"ranges":{"type":"integer","description":"Their accepted ranges."},"groupsAffected":{"type":"integer","description":"The groups of people those claims affect."},"obtainable":{"type":"integer","description":"Decided claims on whether it could be obtained: how hard that was examined."},"durable":{"type":"integer","description":"Decided claims on whether it would last."}},"required":["optionId","label","propositions","accepted","qualified","unresolved","rejected","proposed","evidence","challenges"]}},"bearingOnNone":{"type":"object","properties":{"propositions":{"type":"integer"},"accepted":{"type":"integer"},"qualified":{"type":"integer"},"unresolved":{"type":"integer"},"rejected":{"type":"integer"},"proposed":{"type":"integer"},"evidence":{"type":"integer","description":"Accepted evidence behind those propositions."},"challenges":{"type":"integer","description":"Challenges to those propositions or their evidence."},"withoutTransmission":{"type":"integer","description":"Specific to some options but not all, with no transmission named."}},"required":["propositions","accepted","qualified","unresolved","rejected","proposed","evidence","challenges"]},"common":{"type":"object","properties":{"propositions":{"type":"integer"},"accepted":{"type":"integer"},"qualified":{"type":"integer"},"unresolved":{"type":"integer"},"rejected":{"type":"integer"},"proposed":{"type":"integer"},"evidence":{"type":"integer","description":"Accepted evidence behind those propositions."},"challenges":{"type":"integer","description":"Challenges to those propositions or their evidence."},"withoutTransmission":{"type":"integer","description":"Specific to some options but not all, with no transmission named."}},"required":["propositions","accepted","qualified","unresolved","rejected","proposed","evidence","challenges"],"description":"Common pressures: counted once, against no option. Absent from an older snapshot."}},"required":["questionId","options","bearingOnNone"]},"QuestionBrief":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"title":{"type":"string"},"framing":{"type":["string","null"]},"visibility":{"type":"string"},"evidenceCutoff":{"type":["string","null"]},"availability":{"type":["object","null"],"properties":{"engaged":{"type":"boolean"},"stated":{"type":["string","null"],"enum":["engaged","not-material",null]}},"required":["engaged"]},"options":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"label":{"type":"string"},"description":{"type":["string","null"]},"status":{"type":"string"},"drafted":{"type":"boolean"}},"required":["id","label"]}},"scenarios":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"label":{"type":"string"},"description":{"type":["string","null"]}},"required":["id","label"]}},"propositions":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"name":{"type":["string","null"]},"statement":{"type":"string"},"claimType":{"type":"string"},"standing":{"type":["string","null"]},"evidenceStrength":{"type":"string"},"problemKind":{"type":"string"},"horizon":{"type":["string","null"]},"role":{"type":"string"},"switchingCondition":{"type":["string","null"]},"attribution":{"type":"string"},"transmission":{"type":["string","null"]},"effect":{"type":["string","null"]},"scenarioId":{"type":["string","null"]},"switchingStatus":{"type":["string","null"]},"upstreamChangedAt":{"type":["string","null"]},"upstreamChangedFrom":{"type":["string","null"]},"switchingTestedAt":{"type":["string","null"]},"switchingTestedByName":{"type":["string","null"]},"switchingBasis":{"type":["string","null"]},"reviewBy":{"type":["string","null"]},"affects":{"type":"array","items":{"type":"object","properties":{"groupId":{"type":"string","format":"uuid"},"bearing":{"type":"string"},"note":{"type":["string","null"]}},"required":["groupId","bearing"]}},"evidenceFamilies":{"type":["integer","null"]},"everyScenario":{"type":["boolean","null"]},"dimensionId":{"type":["string","null"]},"firstPersonOnly":{"type":["array","null"],"items":{"type":"string"},"description":"Whose expectation it is, where its only accepted support is first-person evidence: theirs, never established."},"status":{"type":"string"},"decidedByName":{"type":["string","null"]},"decidedAt":{"type":["string","null"]},"position":{"type":"integer"},"createdAt":{"type":"string"},"bearsOn":{"type":"array","items":{"type":"string","format":"uuid"}},"bearings":{"type":"array","items":{"type":"object","properties":{"optionId":{"type":"string","format":"uuid"},"configurationId":{"type":["string","null"]},"aspect":{"type":"string"}},"required":["optionId","aspect"]}},"bearingsReviewedAt":{"type":["string","null"]},"notYetConsidered":{"type":"array","items":{"type":"string","format":"uuid"}}},"required":["id","statement","claimType","evidenceStrength","problemKind","status","bearsOn"]}},"evidence":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"propositionId":{"type":"string","format":"uuid"},"stance":{"type":"string"},"summary":{"type":"string"},"source":{"type":"string"},"sourceUrl":{"type":["string","null"]},"sourceKind":{"type":"string"},"sourceItemId":{"type":["string","null"]},"assertedBy":{"type":["string","null"]},"assertedRole":{"type":["string","null"]},"declaredInterest":{"type":["string","null"]},"publishedOn":{"type":["string","null"]},"accessedOn":{"type":["string","null"]},"pinpoint":{"type":["string","null"]},"derivesFromId":{"type":["string","null"]},"lean":{"type":["string","null"]},"whyThisSource":{"type":["string","null"]},"afterCutoff":{"type":["boolean","null"]},"status":{"type":"string"},"decidedByName":{"type":["string","null"]},"decidedAt":{"type":["string","null"]},"createdAt":{"type":"string"}},"required":["id","propositionId","stance","summary","source","sourceKind","status"]}},"sources":{"type":"array","items":{"type":"object","properties":{"itemId":{"type":"string","format":"uuid"},"name":{"type":"string"},"size":{"type":"number"}},"required":["itemId","name","size"]},"description":"Names only, and only to the workspace: the documents are its own."},"dependencies":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"propositionId":{"type":"string","format":"uuid"},"dependsOnId":{"type":"string","format":"uuid"},"mechanism":{"type":["string","null"]},"status":{"type":"string"},"decidedByName":{"type":["string","null"]},"decidedAt":{"type":["string","null"]},"createdAt":{"type":"string"}},"required":["id","propositionId","dependsOnId","status"]}},"variables":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"propositionId":{"type":"string","format":"uuid"},"name":{"type":"string"},"unit":{"type":["string","null"]},"estimates":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"low":{"type":"number"},"high":{"type":"number"},"source":{"type":["string","null"]},"assertedBy":{"type":["string","null"]},"assertedRole":{"type":["string","null"]},"horizon":{"type":["string","null"]},"scenarioId":{"type":["string","null"]},"everyScenario":{"type":["boolean","null"]},"configurationId":{"type":["string","null"]},"everyConfiguration":{"type":["boolean","null"]},"basis":{"type":["string","null"]},"derivation":{"type":["string","null"]},"measuredAgainst":{"type":["string","null"]},"status":{"type":"string"},"decidedByName":{"type":["string","null"]},"decidedAt":{"type":["string","null"]}},"required":["id","low","high","status"]}},"breakEvens":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"threshold":{"type":"number"},"horizon":{"type":["string","null"],"enum":["transition","early","medium","long","every",null],"description":"The matched horizon: transition (Day One), early adjustment, medium term, long run, or every horizon. None: not stated — never every."},"consequence":{"type":"string","description":"What changes at the threshold."},"basis":{"type":"string","enum":["derived","published","criterion","asserted"],"description":"How it is known: derived (its arithmetic shown), published, a published criterion, or asserted by a named party — which records that they say so, not that they are right."},"derivation":{"type":["string","null"],"description":"For a derived one: the arithmetic."},"source":{"type":["string","null"],"description":"Where it is published, or asserted."},"assertedBy":{"type":["string","null"],"description":"For an asserted one: who draws the line."},"belowOutcome":{"type":["string","null"],"description":"What occurs below the threshold."},"aboveOutcome":{"type":["string","null"],"description":"What occurs above it."},"compares":{"type":"array","items":{"type":"object","properties":{"optionId":{"type":"string","format":"uuid"},"configurationId":{"type":["string","null"],"format":"uuid"}},"required":["optionId"]},"description":"The two options it compares, each perhaps one configuration, in no order; or none. Never which is ahead: which way a consequence counts is a judgement, not the model’s."},"configurationId":{"type":["string","null"],"format":"uuid","description":"For a break-even comparing no options: the configuration it holds under."},"scenarioId":{"type":["string","null"],"format":"uuid"},"everyScenario":{"type":"boolean"},"measuredAgainst":{"type":["string","null"],"description":"What it is measured against: compared with a range’s baseline, never bridged."},"status":{"type":"string"},"drafted":{"type":"boolean"},"decidedByName":{"type":["string","null"]},"decidedAt":{"type":["string","null"]}},"required":["id","threshold","consequence","basis","compares","status"]}}},"required":["id","propositionId","name","estimates","breakEvens"]}},"challenges":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"targetKind":{"type":"string"},"targetId":{"type":"string","format":"uuid"},"objection":{"type":"string"},"raisedByName":{"type":["string","null"]},"outcome":{"type":["string","null"]},"validity":{"type":["string","null"]},"response":{"type":["string","null"]},"resolvedByName":{"type":["string","null"]},"resolvedAt":{"type":["string","null"]},"createdAt":{"type":"string"}},"required":["id","targetKind","targetId","objection"]}},"investigation":{"$ref":"#/components/schemas/InvestigationSet"},"symmetry":{"$ref":"#/components/schemas/Symmetry"},"readiness":{"type":"object","properties":{"openChallenges":{"type":"integer"},"undecided":{"type":"integer"},"untested":{"type":"integer"},"ready":{"type":"boolean"}},"required":["openChallenges","undecided","untested","ready"],"description":"Whether it is ready to freeze by the stopping rule: counted, never enforced. Absent from an older snapshot."},"frontier":{"$ref":"#/components/schemas/Frontier"},"groups":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"label":{"type":"string"},"description":{"type":["string","null"]},"position":{"type":"integer"},"status":{"type":"string","enum":["proposed","accepted","rejected"]},"drafted":{"type":"boolean"},"decidedByName":{"type":["string","null"]}},"required":["id","label","position"]},"description":"The groups of people the decision affects. Absent from an older snapshot."},"decisions":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"snapshotId":{"type":"string","format":"uuid"},"snapshotName":{"type":["string","null"]},"optionId":{"type":["string","null"],"format":"uuid"},"optionLabel":{"type":"string"},"configurationId":{"type":["string","null"],"format":"uuid"},"configurationLabel":{"type":["string","null"]},"rationale":{"type":"string"},"decidedByName":{"type":["string","null"]},"decidedAt":{"type":"string"},"outcomes":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"observedOn":{"type":"string"},"whatHappened":{"type":"string"},"propositionId":{"type":["string","null"],"format":"uuid"},"held":{"type":["string","null"],"enum":["held","partly","did-not-hold","too-early",null]},"recordedByName":{"type":["string","null"]},"recordedAt":{"type":"string"}},"required":["id","observedOn","whatHappened","recordedAt"]}}},"required":["id","snapshotId","optionLabel","rationale","decidedAt","outcomes"]},"description":"What was decided on it, and what happened since. Absent from an older snapshot."},"counts":{"$ref":"#/components/schemas/QuestionCounts"}},"required":["id","title","visibility","options","propositions","evidence","sources","dependencies","variables","challenges","investigation","symmetry"],"description":"The whole model, with the investigation set and the symmetry counts the database draws from it."},"Frontier":{"type":"object","properties":{"dimensions":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"label":{"type":"string"},"description":{"type":["string","null"]},"position":{"type":"integer"},"suggested":{"type":"boolean"},"status":{"type":"string","enum":["proposed","accepted","rejected"],"description":"Proposed by a draft, or decided by a person. Absent from an older snapshot."},"drafted":{"type":"boolean"},"decidedByName":{"type":["string","null"]}},"required":["id","label","position"]},"description":"The factors: what every option is compared on."},"configurations":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"optionId":{"type":"string","format":"uuid"},"label":{"type":"string"},"description":{"type":["string","null"]},"position":{"type":"integer"},"said":{"type":"integer","description":"How many dimensions it has an answer for."},"status":{"type":"string","enum":["proposed","accepted","rejected"],"description":"Proposed by a draft, or decided by a person. Absent from an older snapshot."},"drafted":{"type":"boolean"},"decidedByName":{"type":["string","null"]}},"required":["id","optionId","label","position","said"]}},"cells":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"optionId":{"type":"string","format":"uuid","description":"Absent from a snapshot before 0047."},"configurationId":{"type":["string","null"],"format":"uuid","description":"With one, the way of taking the option it answers for; without, the option's own."},"dimensionId":{"type":"string","format":"uuid"},"answer":{"type":"string"},"source":{"type":["string","null"]},"status":{"type":"string","enum":["proposed","accepted","rejected"],"description":"Proposed by a draft, or decided by a person. Absent from an older snapshot."},"drafted":{"type":"boolean"},"decidedByName":{"type":["string","null"]}},"required":["id","dimensionId","answer"]}},"assessments":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"propositionId":{"type":"string","format":"uuid"},"configurationId":{"type":"string","format":"uuid"},"scenarioId":{"type":["string","null"],"format":"uuid"},"verdict":{"type":"string","enum":["survives","weakened","conditional","fails"],"description":"How the proposition fares under the configuration: survives, weakened, conditional or fails."},"conditions":{"type":["string","null"]},"source":{"type":["string","null"]},"status":{"type":"string","enum":["proposed","accepted","rejected"]},"drafted":{"type":"boolean"},"decidedByName":{"type":["string","null"]},"basisChangedAt":{"type":["string","null"],"description":"When an accepted answer of its configuration changed after it was made: part of the configuration basis it was assessed against changed — nothing more. Cleared by a person."},"basisChangedLabel":{"type":["string","null"]},"basisChangedKind":{"type":["string","null"],"enum":["answer","answered","configuration","question-removed",null]},"basis":{"type":["array","null"],"items":{"type":"string","format":"uuid"},"description":"The frontier questions that form part of its stated basis — a person's statement, never inferred. Absent: none is stated, and every accepted answer of its configuration counts."}},"required":["id","propositionId","configurationId","verdict"]},"description":"How each proposition fares under a configuration, and a scenario where it turns on one. Absent from an older snapshot."},"said":{"type":"integer"},"possible":{"type":"integer","description":"Configurations times dimensions: what could be said."}},"required":["dimensions","configurations","cells","said","possible"],"description":"The configuration frontier. Absent from an older snapshot."},"QuestionCounts":{"type":"object","properties":{"byVerdict":{"type":"object","additionalProperties":{"type":"integer"}},"byStrength":{"type":"object","additionalProperties":{"type":"integer"}},"bySwitching":{"type":"object","additionalProperties":{"type":"integer"}},"propositions":{"type":"integer"},"undecided":{"type":"integer"},"openChallenges":{"type":"integer"},"upstreamChanged":{"type":"integer","description":"Decided propositions resting on one that changed since, waiting to be re-checked."},"reaches":{"type":"object","additionalProperties":{"type":"integer"},"description":"How many propositions a change to each would reach, through accepted links, by its id."},"evidenceFamilies":{"type":"object","additionalProperties":{"type":"integer"},"description":"Independent families among each proposition’s accepted evidence, by its id."},"qualifications":{"type":"object","additionalProperties":{"type":"object","additionalProperties":{"type":"integer"}},"description":"Which ways each proposition’s accepted qualifications lean, by its id."},"afterCutoff":{"type":"integer","description":"Evidence after the question’s cut-off."},"byKind":{"type":"object","additionalProperties":{"type":"integer"},"description":"Claims by what resolving them takes: epistemic, capability, normative."},"forecasts":{"type":"integer","description":"Claims about what will happen."},"scenarios":{"type":"integer"},"groups":{"type":"integer","description":"Groups of people it affects."},"acceptedEvidence":{"type":"integer"},"openByKind":{"type":"object","additionalProperties":{"type":"integer"},"description":"The decision-critical set by what resolving it takes."},"challengesBy":{"type":"object","additionalProperties":{"type":"integer"},"description":"Challenges by where they stand: open, genuine, partly, not-genuine or unsaid."}},"required":["byVerdict","byStrength","propositions","undecided","openChallenges"],"description":"Its counts, for its charts. Absent from an older snapshot."},"ClaimsOpen":{"type":"object","properties":{"open":{"type":"array","items":{"type":"string"}}},"required":["open"],"description":"The question’s claims with something still open on them — proposed or unresolved, weak, contested or unknown evidence, something waiting on a person, or an open challenge. Every other claim not set aside stands established."},"Explore":{"type":"object","properties":{"shown":{"type":"array","items":{"type":"string","format":"uuid"},"description":"The propositions the view keeps."},"breakEvens":{"type":"array","items":{"type":"object","properties":{"breakEvenId":{"type":"string","format":"uuid"},"variableId":{"type":"string","format":"uuid"},"threshold":{"type":"number"},"horizon":{"type":["string","null"],"enum":["transition","early","medium","long","every",null],"description":"The matched horizon: transition (Day One), early adjustment, medium term, long run, or every horizon. None: not stated — never every."},"consequence":{"type":"string","description":"What changes at the threshold."},"basis":{"type":"string","enum":["derived","published","criterion","asserted"],"description":"How it is known: derived (its arithmetic shown), published, a published criterion, or asserted by a named party — which records that they say so, not that they are right."},"derivation":{"type":["string","null"],"description":"For a derived one: the arithmetic."},"source":{"type":["string","null"],"description":"Where it is published, or asserted."},"assertedBy":{"type":["string","null"],"description":"For an asserted one: who draws the line."},"belowOutcome":{"type":["string","null"],"description":"What occurs below the threshold."},"aboveOutcome":{"type":["string","null"],"description":"What occurs above it."},"compares":{"type":"array","items":{"type":"object","properties":{"optionId":{"type":"string","format":"uuid"},"configurationId":{"type":["string","null"],"format":"uuid"}},"required":["optionId"]},"description":"The two options it compares, each perhaps one configuration, in no order; or none. Never which is ahead: which way a consequence counts is a judgement, not the model’s."},"configurationId":{"type":["string","null"],"format":"uuid","description":"For a break-even comparing no options: the configuration it holds under."},"scenarioId":{"type":["string","null"],"format":"uuid"},"everyScenario":{"type":"boolean"},"measuredAgainst":{"type":["string","null"],"description":"What it is measured against: compared with a range’s baseline, never bridged."},"name":{"type":"string"},"unit":{"type":["string","null"]},"propositionId":{"type":"string","format":"uuid"},"below":{"type":"array","items":{"type":"string","format":"uuid"}},"above":{"type":"array","items":{"type":"string","format":"uuid"}},"across":{"type":"array","items":{"type":"string","format":"uuid"}},"withoutRange":{"type":"array","items":{"type":"object","properties":{"optionId":{"type":"string","format":"uuid"},"configurationId":{"type":["string","null"],"format":"uuid"}},"required":["optionId"]},"description":"The sides it compares with no accepted range read against them: nothing is filled in for them."}},"required":["breakEvenId","variableId","threshold","consequence","basis","compares","name","unit","propositionId","below","above","across"]},"description":"Every accepted break-even of a claim a person stood behind, once, with the accepted ranges below, across and above it."},"options":{"type":"array","items":{"type":"object","properties":{"optionId":{"type":"string","format":"uuid"},"breakEvenIds":{"type":"array","items":{"type":"string","format":"uuid"},"description":"The break-evens that name it."},"figures":{"type":"object","properties":{"propositions":{"type":"integer"},"openChallenges":{"type":"integer"}},"required":["propositions","openChallenges"]},"valueChoices":{"type":"array","items":{"type":"string","format":"uuid"}},"undecided":{"type":"array","items":{"type":"string","format":"uuid"}},"untested":{"type":"array","items":{"type":"string","format":"uuid"}},"openChallengeIds":{"type":"array","items":{"type":"string","format":"uuid"}},"availability":{"type":"object","properties":{"obtainable":{"type":"array","items":{"type":"string","format":"uuid"}},"durable":{"type":"array","items":{"type":"string","format":"uuid"}}},"required":["obtainable","durable"],"description":"Decided claims on whether it could be obtained, and on whether it would last — apart from its consequences."},"notYetConsidered":{"type":"array","items":{"type":"string","format":"uuid"},"description":"Decided claims no person has considered against it yet: a common pressure among them reaches it provisionally."}},"required":["optionId","breakEvenIds","figures","valueChoices","undecided","untested","openChallengeIds","availability","notYetConsidered"]}}},"required":["shown","breakEvens","options"],"description":"The model read with the view’s filters: each break-even once, with the ranges either side, and for each option what bears on it and is still open. No option is scored. All computed in SQL."},"SnapshotList":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/Snapshot"}},"total":{"type":"integer"},"offset":{"type":"integer"},"limit":{"type":"integer"}},"required":["items","total","offset","limit"]},"Snapshot":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"workspaceId":{"type":"string","format":"uuid"},"questionId":{"type":"string","format":"uuid"},"name":{"type":"string"},"frozenBy":{"type":["string","null"],"format":"uuid"},"frozenByName":{"type":["string","null"]},"frozenAt":{"type":"string"},"changesSince":{"type":"integer","description":"Changes in the history since it was frozen: how far the model has moved."},"links":{"$ref":"#/components/schemas/SnapshotLinks"}},"required":["id","workspaceId","questionId","name","frozenAt","changesSince","links"]},"SnapshotLinks":{"type":"object","properties":{"self":{"type":"string"},"question":{"type":"string"}},"required":["self","question"],"description":"Relative /v1 URLs to follow."},"SnapshotBody":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":200,"example":"Frozen synthesis v1.0"}},"required":["name"]},"SnapshotWithContent":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"name":{"type":"string"},"frozenByName":{"type":["string","null"]},"frozenAt":{"type":"string"},"content":{"$ref":"#/components/schemas/QuestionBrief"}},"required":["id","name","frozenAt","content"]},"SnapshotComparison":{"type":"object","properties":{"from":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"name":{"type":"string"},"frozenAt":{"type":"string"}},"required":["id","name","frozenAt"]},"to":{"type":["object","null"],"properties":{"id":{"type":"string","format":"uuid"},"name":{"type":"string"},"frozenAt":{"type":"string"}},"required":["id","name","frozenAt"],"description":"Null when compared with the live model."},"changes":{"type":"array","items":{"type":"object","properties":{"kind":{"type":"string","enum":["question","scenario","option","proposition","evidence","dependency","variable","estimate","break-even","verdict","group","configuration","dimension","cell","assessment","challenge"]},"id":{"type":"string"},"label":{"type":["string","null"]},"context":{"type":["string","null"],"description":"Its P-number, or the proposition it belongs to."},"change":{"type":"string","enum":["added","removed","changed"]},"fields":{"type":"object","additionalProperties":{},"description":"Added or removed: what it held. Changed: only the fields that did, each as { before, after }."}},"required":["kind","id","label","context","change","fields"]}}},"required":["from","to","changes"]},"ConfigurationBody":{"type":"object","properties":{"optionId":{"type":"string","format":"uuid"},"label":{"type":"string","minLength":1,"maxLength":200},"description":{"type":"string","maxLength":2000}},"required":["optionId","label"]},"ConfigurationPatchBody":{"type":"object","properties":{"label":{"type":"string","minLength":1,"maxLength":200},"description":{"type":"string","maxLength":2000},"reason":{"type":"string","maxLength":1000,"description":"Why — kept in the history."}}},"DimensionPatchBody":{"type":"object","properties":{"label":{"type":"string","minLength":1,"maxLength":200},"description":{"type":"string","maxLength":2000},"suggested":{"type":"boolean","description":"SwingFactor suggested it while the question was asked, and the person accepted it."},"reason":{"type":"string","maxLength":1000,"description":"Why — kept in the history."}}},"WhereItStands":{"type":"object","properties":{"options":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"label":{"type":"string"},"status":{"type":"string","enum":["proposed","accepted","rejected"]},"ways":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"label":{"type":"string"},"status":{"type":"string"}},"required":["id","label","status"]}}},"required":["id","label","status","ways"]}},"factors":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"label":{"type":"string"},"description":{"type":["string","null"]},"status":{"type":"string","enum":["proposed","accepted","rejected"]},"suggested":{"type":"boolean"},"drafted":{"type":"boolean"},"cells":{"type":"array","items":{"type":"object","properties":{"optionId":{"type":"string","format":"uuid"},"standing":{"type":"string","enum":["established","uncertain","not-found-out"],"description":"How far the option's own answer stands: established, uncertain, or not found out yet (no answer and no claim)."},"answer":{"type":["object","null"],"properties":{"id":{"type":"string","format":"uuid"},"answer":{"type":"string"},"source":{"type":["string","null"]},"status":{"type":"string","enum":["proposed","accepted","rejected"]},"configurationId":{"type":["string","null"],"format":"uuid","description":"A way's answer; absent, the option's own."},"drafted":{"type":"boolean"},"decidedByName":{"type":["string","null"]},"standing":{"type":"string","enum":["established","uncertain","not-found-out"],"description":"How far it stands, said by the database: established (a person accepted it and nothing establishing it is open) or uncertain."}},"required":["id","answer","status","drafted","standing"]},"ways":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"answer":{"type":"string"},"source":{"type":["string","null"]},"status":{"type":"string","enum":["proposed","accepted","rejected"]},"configurationId":{"type":["string","null"],"format":"uuid","description":"A way's answer; absent, the option's own."},"drafted":{"type":"boolean"},"decidedByName":{"type":["string","null"]},"standing":{"type":"string","enum":["established","uncertain","not-found-out"],"description":"How far it stands, said by the database: established (a person accepted it and nothing establishing it is open) or uncertain."}},"required":["id","answer","status","drafted","standing"]}},"claims":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"name":{"type":["string","null"]},"statement":{"type":"string"},"status":{"type":"string"},"evidenceStrength":{"type":"string"},"problemKind":{"type":"string"},"drafted":{"type":"boolean"},"variables":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"name":{"type":"string"},"unit":{"type":["string","null"]},"ranges":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"low":{"type":"number"},"high":{"type":"number"},"source":{"type":["string","null"]},"assertedBy":{"type":["string","null"]},"basis":{"type":["string","null"]},"status":{"type":"string","enum":["proposed","accepted","rejected"]},"horizon":{"type":["string","null"]},"scenarioId":{"type":["string","null"],"format":"uuid"},"everyScenario":{"type":"boolean"},"configurationId":{"type":["string","null"],"format":"uuid"},"measuredAgainst":{"type":["string","null"]},"drafted":{"type":"boolean"}},"required":["id","low","high","status"]}}},"required":["id","name","ranges"]}}},"required":["id","statement","status","evidenceStrength","problemKind","drafted","variables"]}}},"required":["optionId","standing","answer","ways","claims"]},"description":"One per option, in the options' order."},"common":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"name":{"type":["string","null"]},"statement":{"type":"string"},"status":{"type":"string"},"evidenceStrength":{"type":"string"},"problemKind":{"type":"string"},"drafted":{"type":"boolean"},"variables":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"name":{"type":"string"},"unit":{"type":["string","null"]},"ranges":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"low":{"type":"number"},"high":{"type":"number"},"source":{"type":["string","null"]},"assertedBy":{"type":["string","null"]},"basis":{"type":["string","null"]},"status":{"type":"string","enum":["proposed","accepted","rejected"]},"horizon":{"type":["string","null"]},"scenarioId":{"type":["string","null"],"format":"uuid"},"everyScenario":{"type":"boolean"},"configurationId":{"type":["string","null"],"format":"uuid"},"measuredAgainst":{"type":["string","null"]},"drafted":{"type":"boolean"}},"required":["id","low","high","status"]}}},"required":["id","name","ranges"]}}},"required":["id","statement","status","evidenceStrength","problemKind","drafted","variables"]},"description":"Common to every option."},"unplaced":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"name":{"type":["string","null"]},"statement":{"type":"string"},"status":{"type":"string"},"evidenceStrength":{"type":"string"},"problemKind":{"type":"string"},"drafted":{"type":"boolean"},"variables":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"name":{"type":"string"},"unit":{"type":["string","null"]},"ranges":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"low":{"type":"number"},"high":{"type":"number"},"source":{"type":["string","null"]},"assertedBy":{"type":["string","null"]},"basis":{"type":["string","null"]},"status":{"type":"string","enum":["proposed","accepted","rejected"]},"horizon":{"type":["string","null"]},"scenarioId":{"type":["string","null"],"format":"uuid"},"everyScenario":{"type":"boolean"},"configurationId":{"type":["string","null"],"format":"uuid"},"measuredAgainst":{"type":["string","null"]},"drafted":{"type":"boolean"}},"required":["id","low","high","status"]}}},"required":["id","name","ranges"]}}},"required":["id","statement","status","evidenceStrength","problemKind","drafted","variables"]},"description":"Bearing on no option stated."}},"required":["id","label","status","suggested","drafted","cells","common","unplaced"]}}},"required":["options","factors"]},"Supposed":{"type":"object","properties":{"claims":{"type":"array","items":{"type":"object","properties":{"claimId":{"type":"string","format":"uuid"},"reaches":{"type":"array","items":{"type":"object","properties":{"claimId":{"type":"string","format":"uuid"},"depth":{"type":"integer"},"path":{"type":"array","items":{"type":"string","format":"uuid"}}},"required":["claimId","depth","path"]},"description":"The accepted claims resting on it, each with the chain that explains it."}},"required":["claimId","reaches"]}},"answers":{"type":"array","items":{"type":"object","properties":{"optionId":{"type":"string","format":"uuid"},"factorId":{"type":"string","format":"uuid"},"answerId":{"type":"string","format":"uuid","description":"The option’s accepted answer, where it has one."},"because":{"type":"array","items":{"type":"object","properties":{"claimId":{"type":"string","format":"uuid"},"from":{"type":"string","format":"uuid"},"path":{"type":"array","items":{"type":"string","format":"uuid"}},"common":{"type":"boolean"}},"required":["claimId","from","path","common"]},"description":"The claims establishing it that a supposition reaches, and from which."}},"required":["optionId","factorId","because"]},"description":"Each option’s answer on each factor that loses its footing. Nothing is compared."},"numbers":{"type":"array","items":{"type":"object","properties":{"variableId":{"type":"string","format":"uuid"},"value":{"type":"number"},"thresholds":{"type":"array","items":{"type":"object","properties":{"breakEvenId":{"type":"string","format":"uuid"},"variableId":{"type":"string","format":"uuid"},"threshold":{"type":"number"},"horizon":{"type":["string","null"],"enum":["transition","early","medium","long","every",null],"description":"The matched horizon: transition (Day One), early adjustment, medium term, long run, or every horizon. None: not stated — never every."},"consequence":{"type":"string","description":"What changes at the threshold."},"basis":{"type":"string","enum":["derived","published","criterion","asserted"],"description":"How it is known: derived (its arithmetic shown), published, a published criterion, or asserted by a named party — which records that they say so, not that they are right."},"derivation":{"type":["string","null"],"description":"For a derived one: the arithmetic."},"source":{"type":["string","null"],"description":"Where it is published, or asserted."},"assertedBy":{"type":["string","null"],"description":"For an asserted one: who draws the line."},"belowOutcome":{"type":["string","null"],"description":"What occurs below the threshold."},"aboveOutcome":{"type":["string","null"],"description":"What occurs above it."},"compares":{"type":"array","items":{"type":"object","properties":{"optionId":{"type":"string","format":"uuid"},"configurationId":{"type":["string","null"],"format":"uuid"}},"required":["optionId"]},"description":"The two options it compares, each perhaps one configuration, in no order; or none. Never which is ahead: which way a consequence counts is a judgement, not the model’s."},"configurationId":{"type":["string","null"],"format":"uuid","description":"For a break-even comparing no options: the configuration it holds under."},"scenarioId":{"type":["string","null"],"format":"uuid"},"everyScenario":{"type":"boolean"},"measuredAgainst":{"type":["string","null"],"description":"What it is measured against: compared with a range’s baseline, never bridged."},"evidential":{"type":"boolean"},"side":{"type":"string","enum":["below","at","above"]},"now":{"type":"object","properties":{"belowEstimateIds":{"type":"array","items":{"type":"string","format":"uuid"}},"aboveEstimateIds":{"type":"array","items":{"type":"string","format":"uuid"}},"acrossEstimateIds":{"type":"array","items":{"type":"string","format":"uuid"}}},"required":["belowEstimateIds","aboveEstimateIds","acrossEstimateIds"]}},"required":["breakEvenId","variableId","threshold","consequence","basis","compares","evidential","side","now"]}}},"required":["variableId","value","thresholds"]}}},"required":["claims","answers","numbers"]},"SuppositionBody":{"type":"object","properties":{"notHolding":{"type":"array","items":{"type":"string","format":"uuid"},"maxItems":40,"default":[],"description":"Accepted claims supposed not to hold."},"values":{"type":"array","items":{"type":"object","properties":{"variableId":{"type":"string","format":"uuid"},"value":{"type":"number"}},"required":["variableId","value"]},"maxItems":40,"default":[],"description":"Uncertain numbers, each at a value to try."}}},"FrontierCellBody":{"type":"object","properties":{"optionId":{"type":"string","format":"uuid","description":"The option, for its own answer."},"configurationId":{"type":"string","format":"uuid","description":"A way of taking an option, for its answer."},"dimensionId":{"type":"string","format":"uuid"},"answer":{"type":"string","maxLength":1000,"description":"Empty unsays it."},"source":{"type":"string","maxLength":500},"reason":{"type":"string","maxLength":1000,"description":"Why — kept in the history."}},"required":["dimensionId","answer"]},"AssessmentBody":{"type":"object","properties":{"propositionId":{"type":"string","format":"uuid"},"configurationId":{"type":"string","format":"uuid"},"scenarioId":{"type":"string","format":"uuid","description":"Where the verdict turns on what happens."},"verdict":{"type":"string","enum":["survives","weakened","conditional","fails"],"description":"How the proposition fares under the configuration: survives, weakened, conditional or fails."},"conditions":{"type":"string","maxLength":2000,"description":"Required for a conditional verdict."},"source":{"type":"string","maxLength":500},"basis":{"type":"array","items":{"type":"string","format":"uuid"},"maxItems":50,"description":"The frontier questions that form part of its stated basis. Empty states none."}},"required":["propositionId","configurationId","verdict"]},"AssessmentPatchBody":{"type":"object","properties":{"scenarioId":{"anyOf":[{"type":"string","format":"uuid"},{"type":"string","enum":[""]}]},"verdict":{"type":"string","enum":["survives","weakened","conditional","fails"],"description":"How the proposition fares under the configuration: survives, weakened, conditional or fails."},"conditions":{"type":"string","maxLength":2000},"source":{"type":"string","maxLength":500},"basis":{"type":"array","items":{"type":"string","format":"uuid"},"maxItems":50,"description":"The frontier questions that form part of its stated basis. Empty states none."},"reason":{"type":"string","maxLength":1000,"description":"Why — kept in the history."}}},"GroupList":{"type":"object","properties":{"items":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"label":{"type":"string"},"description":{"type":["string","null"]},"position":{"type":"integer"},"status":{"type":"string","enum":["proposed","accepted","rejected"]},"drafted":{"type":"boolean"},"decidedByName":{"type":["string","null"]}},"required":["id","label","position"]}},"total":{"type":"integer"},"offset":{"type":"integer"},"limit":{"type":"integer"}},"required":["items","total","offset","limit"]},"GroupBody":{"type":"object","properties":{"label":{"type":"string","minLength":1,"maxLength":200},"description":{"type":"string","maxLength":2000}},"required":["label"]},"GroupPatchBody":{"type":"object","properties":{"label":{"type":"string","minLength":1,"maxLength":200},"description":{"type":"string","maxLength":2000},"reason":{"type":"string","maxLength":1000,"description":"Why — kept in the history."}}},"ImpactList":{"type":"object","properties":{"items":{"type":"array","items":{"type":"object","properties":{"propositionId":{"type":"string","format":"uuid"},"groupId":{"type":"string","format":"uuid"},"bearing":{"type":"string","enum":["delivery","borne"],"description":"delivery: how it goes for them decides whether the option can be done; borne: they bear it, and it matters in itself."},"note":{"type":["string","null"]}},"required":["propositionId","groupId","bearing"]}},"total":{"type":"integer"},"offset":{"type":"integer"},"limit":{"type":"integer"}},"required":["items","total","offset","limit"]},"ImpactsBody":{"type":"object","properties":{"impacts":{"type":"array","items":{"type":"object","properties":{"groupId":{"type":"string","format":"uuid"},"bearing":{"type":"string","enum":["delivery","borne"],"description":"delivery: how it goes for them decides whether the option can be done; borne: they bear it, and it matters in itself."},"note":{"type":"string","maxLength":500}},"required":["groupId","bearing"]},"maxItems":50},"reason":{"type":"string","maxLength":1000,"description":"Why — kept in the history."}},"required":["impacts"]},"DecisionList":{"type":"object","properties":{"items":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"snapshotId":{"type":"string","format":"uuid"},"snapshotName":{"type":["string","null"]},"optionId":{"type":["string","null"],"format":"uuid"},"optionLabel":{"type":"string"},"configurationId":{"type":["string","null"],"format":"uuid"},"configurationLabel":{"type":["string","null"]},"rationale":{"type":"string"},"decidedByName":{"type":["string","null"]},"decidedAt":{"type":"string"},"outcomes":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"observedOn":{"type":"string"},"whatHappened":{"type":"string"},"propositionId":{"type":["string","null"],"format":"uuid"},"held":{"type":["string","null"],"enum":["held","partly","did-not-hold","too-early",null]},"recordedByName":{"type":["string","null"]},"recordedAt":{"type":"string"}},"required":["id","observedOn","whatHappened","recordedAt"]}}},"required":["id","snapshotId","optionLabel","rationale","decidedAt","outcomes"]}},"total":{"type":"integer"},"offset":{"type":"integer"},"limit":{"type":"integer"}},"required":["items","total","offset","limit"]},"RecordDecisionBody":{"type":"object","properties":{"optionId":{"type":"string","format":"uuid"},"configurationId":{"type":"string","format":"uuid","description":"An accepted configuration of the option chosen, where one was."},"rationale":{"type":"string","minLength":1,"maxLength":4000},"snapshotId":{"type":"string","format":"uuid","description":"The snapshot it was made on. Absent: one is frozen now, named for the decision."},"stanceVersionId":{"type":"string","format":"uuid","description":"A version of a stance the recorder holds on this question, cited by the act. Shown only as the stance’s holder allows; never part of the record."}},"required":["optionId","rationale"]},"OutcomeBody":{"type":"object","properties":{"observedOn":{"type":"string","format":"date","pattern":"^\\d{4}-\\d{2}-\\d{2}$","example":"2026-10-13"},"whatHappened":{"type":"string","minLength":1,"maxLength":4000},"propositionId":{"type":"string","format":"uuid"},"held":{"type":"string","enum":["held","partly","did-not-hold","too-early"]}},"required":["whatHappened"]},"QuestionSourceList":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/QuestionSource"}},"total":{"type":"integer"},"offset":{"type":"integer"},"limit":{"type":"integer"}},"required":["items","total","offset","limit"]},"QuestionSource":{"type":"object","properties":{"id":{"type":"string","format":"uuid","description":"Its place on the question: what is taken off."},"workspaceId":{"type":"string","format":"uuid"},"questionId":{"type":"string","format":"uuid"},"createdAt":{"type":"string","description":"When it was put to the question."},"evidenceCount":{"type":"integer","description":"Pieces of this question’s evidence citing it."},"item":{"allOf":[{"$ref":"#/components/schemas/ContentItem"},{"description":"The library item it is: a document somebody uploaded, or a web page. Read, changed and deleted at /workspaces/{id}/content."}]},"links":{"$ref":"#/components/schemas/QuestionSourceLinks"}},"required":["id","workspaceId","questionId","createdAt","evidenceCount","item","links"]},"QuestionSourceLinks":{"type":"object","properties":{"self":{"type":"string"},"question":{"type":"string"}},"required":["self","question"],"description":"Relative /v1 URLs to follow."},"SourceBody":{"type":"object","properties":{"itemId":{"type":"string","format":"uuid","description":"A ready item of kind `sources` in this workspace’s library: add a document or a page at /workspaces/{id}/content first."},"reason":{"type":"string","maxLength":1000,"description":"Why — kept in the history."}},"required":["itemId"]},"SourceUsesList":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/SourceUses"}},"total":{"type":"integer"},"offset":{"type":"integer"},"limit":{"type":"integer"}},"required":["items","total","offset","limit"]},"SourceUses":{"type":"object","properties":{"itemId":{"type":"string","format":"uuid"},"questions":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"title":{"type":"string"}},"required":["id","title"]}}},"required":["itemId","questions"]},"MyStance":{"type":"object","properties":{"stance":{"$ref":"#/components/schemas/Stance"}},"required":["stance"]},"Stance":{"type":["object","null"],"properties":{"id":{"type":"string","format":"uuid"},"workspaceId":{"type":"string","format":"uuid"},"questionId":{"type":"string","format":"uuid"},"holder":{"type":"object","properties":{"kind":{"type":"string","enum":["person","body"]},"name":{"type":"string"},"bodyId":{"type":"string","format":"uuid"}},"required":["kind","name"]},"mine":{"type":"boolean"},"visibility":{"type":"string","enum":["private","workspace","published"]},"createdAt":{"type":"string"},"updatedAt":{"type":"string"},"versions":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"number":{"type":"integer"},"savedAt":{"type":"string"},"savedByName":{"type":"string"}},"required":["id","number","savedAt"]}},"history":{"type":"array","items":{"type":"object","properties":{"kind":{"type":"string"},"versionNumber":{"type":"integer"},"visibility":{"type":"string"},"byName":{"type":"string"},"at":{"type":"string"}},"required":["kind","at"]},"description":"The stance’s own history — its holder’s only. Never the question’s revisions."},"version":{"type":"object","properties":{"number":{"type":"integer"},"savedAt":{"type":"string"},"savedByName":{"type":"string"},"basis":{"type":"object","properties":{"snapshotId":{"type":"string","format":"uuid"},"snapshotName":{"type":"string"},"at":{"type":"string"}},"required":["at"]},"statements":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"position":{"type":"integer"},"kind":{"type":"string","enum":["relevance","reliance","reading","value","priority","line","uncertainty","position","choice","explanation"]},"words":{"type":"string"},"firmness":{"type":"string","enum":["firm","provisional","undecided"]},"detail":{},"adoption":{},"refs":{"type":"array","items":{"type":"object","properties":{"role":{"type":"string","enum":["about","for","a","b","relies-on","adopts","waits-for","cites","option","configuration","condition"]},"kind":{"type":"string","enum":["option","configuration","proposition","evidence","variable","estimate","break-even","scenario","group","dimension","cell","statement"]},"id":{"type":"string","format":"uuid"},"label":{"type":"string"},"expects":{"type":"string","enum":["accepted","rejected","present","answers","happens"]},"value":{"type":"string"},"now":{"type":"object","properties":{"present":{"type":"boolean"},"status":{"type":["string","null"]},"label":{"type":"string"}},"required":["present"],"description":"Where it stands now: absent from the model, or rejected, it is kept and marked."}},"required":["role","kind","id","label"]}}},"required":["id","position","kind","refs"]}}},"required":["number","savedAt","basis","statements"]}},"required":["id","workspaceId","questionId","holder","mine","visibility","createdAt","updatedAt","versions"]},"StanceBody":{"type":"object","properties":{"body":{"type":"string","format":"uuid","description":"A body the caller records for; absent, their own stance."},"basisSnapshotId":{"type":"string","format":"uuid","description":"The snapshot the stance is made against. Absent: the model as it stands."},"statements":{"type":"array","items":{"type":"object","properties":{"kind":{"type":"string","enum":["relevance","reliance","reading","value","priority","line","uncertainty","position","choice","explanation"]},"words":{"type":"string","maxLength":4000},"firmness":{"type":"string","enum":["firm","provisional","undecided"]},"detail":{"type":"object","additionalProperties":{}},"adoption":{"type":"object","properties":{"procedure":{"type":"string","minLength":1,"maxLength":500},"reference":{"type":"string","maxLength":500},"adoptedOn":{"type":"string","format":"date","pattern":"^\\d{4}-\\d{2}-\\d{2}$","example":"2026-10-13"}},"required":["procedure"],"description":"For a body: how it was adopted. Required there, refused nowhere."},"refs":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"role":{"type":"string","enum":["about","for","a","b","relies-on","adopts","waits-for","cites","option","configuration","condition"]},"kind":{"type":"string","enum":["option","configuration","proposition","evidence","variable","estimate","break-even","scenario","group","dimension","cell"]},"id":{"type":"string","format":"uuid"},"expects":{"type":"string","enum":["accepted","rejected","present","answers","happens"]},"value":{"type":"string","maxLength":1000}},"required":["role","kind","id"]},{"type":"object","properties":{"role":{"type":"string","enum":["about","for","a","b","relies-on","adopts","waits-for","cites","option","configuration","condition"]},"statement":{"type":"integer","minimum":0}},"required":["role","statement"]}]},"maxItems":50}},"required":["kind"]},"maxItems":200}},"required":["statements"],"description":"The whole of a new version. Every kind is optional; a single sentence or a single choice is a whole stance. Written only by its holder — never by a draft, a service or the assistant."},"StanceReadings":{"type":"object","properties":{"stanceId":{"type":"string","format":"uuid"},"version":{"type":"integer"},"lines":{"type":"array","items":{}},"conditions":{"type":"array","items":{}},"changesSince":{"description":"{ anchors, acceptedSince }: anchored elements changed, challenged or gone since the version, and options or configurations accepted after it with no statement on them. Never a To check item."},"conflicts":{"type":"array","items":{}},"unexplainedChoice":{"type":"boolean"}},"required":["stanceId","version","lines","conditions","conflicts","unexplainedChoice"],"description":"Descriptive facts only, computed in SQL: line readings, condition states, changes since the version, and conflicts between the holder’s own recorded statements. Never a judgement, a weight or a number keyed by option."},"StanceVersionComparison":{"type":"object","properties":{"from":{"type":"integer"},"to":{"type":"integer"},"stance":{"description":"{ removed, added }: the statements that differ between the versions."},"model":{"type":"object","properties":{"from":{"type":"string"},"to":{"type":"string"},"changes":{"type":"array","items":{}}},"required":["from","to","changes"]}},"required":["from","to","model"]},"WhereWePart":{"type":"object","properties":{"a":{"type":"object","properties":{"stanceId":{"type":"string","format":"uuid"},"holderName":{"type":"string"}},"required":["stanceId","holderName"]},"b":{"type":"object","properties":{"stanceId":{"type":"string","format":"uuid"},"holderName":{"type":"string"}},"required":["stanceId","holderName"]},"elements":{"type":"array","items":{}}},"required":["a","b","elements"],"description":"Per element, what each of two stances recorded, side by side and verbatim. No tally, no order, nobody right; a gap is only \"no statement recorded\"."},"StanceVisibilityBody":{"type":"object","properties":{"visibility":{"type":"string","enum":["private","workspace"]}},"required":["visibility"],"description":"Publishing is its own act: POST …/publication."},"AssistantAnswer":{"type":"object","properties":{"replies":{"type":"array","items":{"type":"object","properties":{"kind":{"type":"string","enum":["explanation","navigation","clarifying-question","conflict-wording","belongs-in-model"]},"text":{"type":"string"},"conflict":{"type":"integer"}},"required":["kind","text"]}}},"required":["replies"],"description":"Explanation, navigation, a clarifying question about a conflict SQL found, the wording of such a conflict, or a flag that a sentence belongs in the shared model. Never a value, reading, significance, priority, line, position, choice or explanation for the holder."},"AssistantBody":{"type":"object","properties":{"message":{"type":"string","minLength":1,"maxLength":2000,"description":"What the holder asks."},"drafting":{"type":"string","maxLength":2000,"description":"A sentence the holder is drafting, to check whether it reads as a factual claim."}},"required":["message"]},"DecisionStance":{"type":"object","properties":{"citation":{"type":["object","null"],"properties":{"stanceId":{"type":"string","format":"uuid"},"versionNumber":{"type":"integer"},"holderName":{"type":"string"}},"required":["stanceId","versionNumber","holderName"]}},"required":["citation"]},"BodyList":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"workspaceId":{"type":"string","format":"uuid"},"name":{"type":"string"},"kind":{"type":"string","enum":["board","committee","council","household","other"]},"procedure":{"type":"string"},"createdAt":{"type":"string"},"recordsForIt":{"type":"boolean"},"recorders":{"type":"array","items":{"type":"object","properties":{"userId":{"type":"string","format":"uuid"},"name":{"type":"string"},"authorisedByName":{"type":["string","null"]},"authorisedAt":{"type":"string"}},"required":["userId","name","authorisedAt"]}}},"required":["id","workspaceId","name","kind","createdAt","recordsForIt","recorders"]}},"BodyInput":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":200},"kind":{"type":"string","enum":["board","committee","council","household","other"]},"procedure":{"type":"string","maxLength":1000}},"required":["name"]},"DraftStarted":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"status":{"type":"string","description":"queued — or, focused on requests while a draft runs, waiting."},"note":{"type":"string","description":"Where nothing new started: what happens instead."}},"required":["id","status"]},"DraftStartBody":{"type":"object","properties":{"focus":{"type":["string","null"],"enum":["requests",null],"description":"requests: only what people asked for — open changes asked on challenges, and find-out requests. Absent: a whole draft."}}},"QuestionStatus":{"type":"array","items":{"type":"object","properties":{"questionId":{"type":"string","format":"uuid"},"status":{"type":"string","enum":["incomplete","drafting","stopped","empty","review","ready"]},"askingStep":{"type":["string","null"],"enum":["options","scenarios","dimensions","sources","view","ask",null]},"stage":{"type":["string","null"],"description":"The step at work while drafting: a stage, or `Evidence: <source>` while one source is read for evidence."},"waiting":{"type":"integer"},"requests":{"type":"integer","description":"What waits on SwingFactor: open find-out requests and changes asked for."},"propositions":{"type":"integer"}},"required":["questionId","status","askingStep","stage","waiting","propositions"]},"description":"Where each of the workspace’s questions stands: still being asked, drafting, stopped, empty, to review or ready."},"ResearchTrail":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/ResearchTrailEntry"}},"total":{"type":"integer"},"offset":{"type":"integer"},"limit":{"type":"integer"}},"required":["items","total","offset","limit"]},"ResearchTrailEntry":{"type":"object","properties":{"draftId":{"type":"string","format":"uuid"},"stage":{"type":"string"},"position":{"type":"integer"},"kind":{"type":"string","enum":["search","fetch"]},"target":{"type":"string","description":"What was searched for, or the address tried."},"ok":{"type":["boolean","null"],"description":"Whether the page could be read; null where the result was not returned."},"error":{"type":["string","null"]},"createdAt":{"type":"string"}},"required":["draftId","stage","position","kind","target","ok","error","createdAt"]},"ModelRunList":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/ModelRun"}},"total":{"type":"integer"},"offset":{"type":"integer"},"limit":{"type":"integer"}},"required":["items","total","offset","limit"]},"ModelRun":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"kind":{"type":"string","enum":["draft"]},"subjectId":{"type":"string","format":"uuid","description":"What the run is about."},"status":{"type":"string","enum":["queued","running","done","failed","stopped"],"description":"A run left unfinished for half an hour is `failed`, whatever stopped it saying so."},"step":{"type":["string","null"],"description":"The step it is on."},"steps":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"status":{"type":"string","enum":["waiting","running","done","skipped","failed"]},"added":{"type":"integer","description":"What it wrote."},"refused":{"type":"integer","description":"What was proposed and not written, because it did not hold."},"note":{"type":"string"}},"required":["name","status"]},"description":"Its steps, in order, and where each got to."},"error":{"type":["string","null"],"description":"Why it failed, in words."},"input":{"type":"object","additionalProperties":{},"description":"What it was started with."},"outcome":{"type":["object","null"],"additionalProperties":{},"description":"What it came to, once it ended."},"startedBy":{"type":["string","null"],"format":"uuid"},"startedByName":{"type":["string","null"],"description":"Who started it — or the product, where it followed from something else."},"createdAt":{"type":"string"},"finishedAt":{"type":["string","null"]},"links":{"$ref":"#/components/schemas/ModelRunLinks"}},"required":["id","kind","subjectId","status","step","steps","error","input","outcome","startedBy","startedByName","createdAt","finishedAt","links"]},"ModelRunLinks":{"type":"object","properties":{"self":{"type":"string"},"workspace":{"type":"string"},"stop":{"type":"string"}},"required":["self","workspace"],"description":"Relative /v1 URLs to follow."},"ProposedEditList":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/ProposedEdit"}},"total":{"type":"integer"},"offset":{"type":"integer"},"limit":{"type":"integer"}},"required":["items","total","offset","limit"]},"ProposedEdit":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"workspaceId":{"type":"string","format":"uuid"},"questionId":{"type":"string","format":"uuid"},"targetKind":{"type":"string","enum":["proposition","evidence","estimate","break-even","cell"]},"targetId":{"type":"string","format":"uuid"},"targetLabel":{"type":"string","description":"What it is to, as a person names it."},"propositionId":{"type":"string","format":"uuid","description":"The claim it hangs off, where it has one."},"patch":{"type":"object","additionalProperties":{},"description":"The change, in the shape the target’s update takes."},"before":{"type":"object","additionalProperties":{},"description":"Those fields as they were when it was proposed."},"why":{"type":"string","description":"What changes and why, in plain words."},"source":{"type":"string"},"sourceUrl":{"type":"string"},"whyThisSource":{"type":"string"},"challengeId":{"type":"string","format":"uuid","description":"The challenge it answers."},"requestId":{"type":"string","format":"uuid","description":"The find-out request it answers."},"draftId":{"type":"string","format":"uuid"},"status":{"type":"string","enum":["proposed","accepted","rejected"]},"decidedBy":{"type":"string","format":"uuid"},"decidedByName":{"type":"string"},"decidedAt":{"type":"string"},"reason":{"type":"string"},"createdAt":{"type":"string"},"targetExists":{"type":"boolean"},"stale":{"type":"boolean","description":"What it changes has changed since it was proposed: accepting it is refused until a person looks again."},"links":{"$ref":"#/components/schemas/ProposedEditLinks"}},"required":["id","workspaceId","questionId","targetKind","targetId","patch","before","why","status","createdAt","targetExists","stale","links"]},"ProposedEditLinks":{"type":"object","properties":{"self":{"type":"string"},"decision":{"type":"string"},"question":{"type":"string"}},"required":["self","decision","question"],"description":"Relative /v1 URLs to follow."},"DecidedEdit":{"type":"object","properties":{"edit":{"$ref":"#/components/schemas/ProposedEdit"},"challengeResolved":{"type":"boolean","description":"It answered an open challenge, now resolved as a material change."},"requestAnswered":{"type":"boolean","description":"It answered an open request, now answered."},"note":{"type":"string","description":"Where the challenge it answers stayed open, why."}},"required":["edit","challengeResolved","requestAnswered"]},"EditDecisionBody":{"type":"object","properties":{"status":{"type":"string","enum":["accepted","rejected"]},"reason":{"type":"string","maxLength":1000,"description":"Why. Required to reject: it is kept, and the next draft reads it."}},"required":["status"]},"FindOutRequestList":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/FindOutRequest"}},"total":{"type":"integer"},"offset":{"type":"integer"},"limit":{"type":"integer"}},"required":["items","total","offset","limit"]},"FindOutRequest":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"workspaceId":{"type":"string","format":"uuid"},"questionId":{"type":"string","format":"uuid"},"kind":{"type":"string","enum":["find-out"]},"text":{"type":"string"},"optionId":{"type":["string","null"],"format":"uuid"},"status":{"type":"string","enum":["open","answered","withdrawn"]},"createdBy":{"type":["string","null"],"format":"uuid"},"createdByName":{"type":["string","null"]},"createdAt":{"type":"string"},"answer":{"type":["string","null"]},"answeredAt":{"type":["string","null"]},"answeredByName":{"type":["string","null"]},"answeredDraftId":{"type":["string","null"],"format":"uuid"},"withdrawnAt":{"type":["string","null"]},"links":{"$ref":"#/components/schemas/FindOutRequestLinks"}},"required":["id","workspaceId","questionId","kind","text","optionId","status","createdBy","createdByName","createdAt","answer","answeredAt","answeredByName","answeredDraftId","withdrawnAt","links"]},"FindOutRequestLinks":{"type":"object","properties":{"self":{"type":"string"},"answer":{"type":"string"},"withdrawal":{"type":"string"},"question":{"type":"string"}},"required":["self","answer","withdrawal","question"],"description":"Relative /v1 URLs to follow."},"FindOutRequestBody":{"type":"object","properties":{"text":{"type":"string","minLength":1,"maxLength":2000,"description":"What to find out, in the person’s words."},"optionId":{"type":["string","null"],"format":"uuid","description":"The option it is about; none, the question."}},"required":["text"]},"RequestAnswerBody":{"type":"object","properties":{"answer":{"type":"string","minLength":1,"maxLength":4000,"description":"What was found, or that nothing could be."}},"required":["answer"]},"QuestionActivity":{"type":"object","properties":{"openRequests":{"type":"integer","description":"Find-out requests waiting on SwingFactor."},"openChangeRequests":{"type":"integer","description":"Open challenges a change was asked for on."},"fixesWaiting":{"type":"integer","description":"Fixes waiting on a person."},"liveDraft":{"type":["object","null"],"properties":{"id":{"type":"string","format":"uuid"},"status":{"type":"string","enum":["queued","running"]},"focus":{"type":["string","null"],"enum":["requests",null]},"stage":{"type":["string","null"]}},"required":["id","status","focus","stage"]}},"required":["openRequests","openChangeRequests","fixesWaiting","liveDraft"]},"OwnAnswerResult":{"oneOf":[{"type":"object","properties":{"kind":{"type":"string","enum":["answer"]},"answerId":{"type":"string","format":"uuid"},"answer":{"type":"string"},"source":{"type":"string"}},"required":["kind","answerId","answer","source"]},{"type":"object","properties":{"kind":{"type":"string","enum":["evidence"]},"evidenceId":{"type":"string","format":"uuid"},"propositionId":{"type":"string","format":"uuid"}},"required":["kind","evidenceId","propositionId"]}]},"OwnAnswerBody":{"type":"object","properties":{"optionId":{"type":"string","format":"uuid"},"dimensionId":{"type":"string","format":"uuid","description":"The factor."},"statement":{"type":"string","minLength":1,"maxLength":1000,"description":"What the person knows first-hand."},"stance":{"type":"string","enum":["supports","contradicts","qualifies"],"description":"Which way it points — needed only where the option already has an accepted answer, when it goes on the claim behind it."}},"required":["optionId","dimensionId","statement"]},"AcceptedForYouList":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/AcceptedForYou"}},"total":{"type":"integer"},"offset":{"type":"integer"},"limit":{"type":"integer"}},"required":["items","total","offset","limit"]},"AcceptedForYou":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"kind":{"type":"string","enum":["proposition","evidence","dependency","estimate","break-even","cell","assessment"]},"itemId":{"type":"string","format":"uuid"},"label":{"type":"string","description":"What it is called."},"propositionId":{"type":["string","null"],"format":"uuid","description":"The claim it hangs off, or is; none for an answer."},"factorId":{"type":["string","null"],"format":"uuid"},"factor":{"type":["string","null"],"description":"The factor it bears on, by its label."},"because":{"type":"string","enum":["matters","does-not-matter","not-said","no-factor"],"description":"What your view said of that factor: it matters, it does not matter to you, nothing, or it bears on no factor."},"acceptedAt":{"type":"string"},"returnedAt":{"type":["string","null"],"description":"When you put it back to check."},"stillAccepted":{"type":"boolean","description":"Still accepted, by you, as it was."}},"required":["id","kind","itemId","label","propositionId","factorId","factor","because","acceptedAt","returnedAt","stillAccepted"]}},"parameters":{},"securitySchemes":{"bearerAuth":{"type":"http","scheme":"bearer","description":"An API key (`swingfactor_sk_…`, made under Settings → API in the SwingFactor app) or a session access token, as `Authorization: Bearer <token>`. A key acts as the person who made it, with exactly their access."}}},"paths":{"/me":{"get":{"tags":["me"],"summary":"The signed-in person","responses":{"200":{"description":"Their profile.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Profile"}}}},"401":{"description":"No token, or not a valid one: `unauthorized`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"None yet: onboarding has not saved one.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"operationId":"getMe"},"put":{"tags":["me"],"summary":"Save the two names and the picture","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProfileBody"}}}},"responses":{"200":{"description":"The saved profile.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Profile"}}}},"401":{"description":"No token, or not a valid one: `unauthorized`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"operationId":"putMe"}},"/me/api-keys":{"get":{"tags":["me"],"summary":"The caller's API keys, without their secrets","responses":{"200":{"description":"The keys.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiKeyList"}}}},"401":{"description":"No token, or not a valid one: `unauthorized`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"operationId":"getMeApiKeys"}},"/me/api-keys/{id}":{"delete":{"tags":["me"],"summary":"Revoke a key","parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"id","in":"path","description":"The api-key's id (a UUID)."}],"responses":{"204":{"description":"No content."},"401":{"description":"No token, or not a valid one: `unauthorized`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"operationId":"deleteMeApiKey"}},"/me/invitations/{token}/accept":{"post":{"tags":["me"],"summary":"Accept an invitation into a workspace","description":"Refused unless the caller is signed in with the address it was sent to.","parameters":[{"schema":{"type":"string","minLength":1},"required":true,"name":"token","in":"path","description":"The invitation's token."},{"schema":{"type":"string"},"required":false,"name":"Idempotency-Key","in":"header","description":"Any unique string. The same key, method, path and body within 24 hours answers with the first response instead of creating again; the same key on a different request is 409 `idempotency_key_reused`."}],"responses":{"200":{"description":"The workspace joined.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Joined"}}}},"401":{"description":"No token, or not a valid one: `unauthorized`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Sent to somebody else.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No such invitation, or it has expired.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"operationId":"postMeInvitationAccept"}},"/workspaces":{"get":{"tags":["workspaces"],"summary":"The workspaces the caller can see, with their role in each","responses":{"200":{"description":"Them.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WorkspaceList"}}}},"401":{"description":"No token, or not a valid one: `unauthorized`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"operationId":"getWorkspaces"},"post":{"tags":["workspaces"],"summary":"Create a workspace; the caller owns it","parameters":[{"schema":{"type":"string"},"required":false,"name":"Idempotency-Key","in":"header","description":"Any unique string. The same key, method, path and body within 24 hours answers with the first response instead of creating again; the same key on a different request is 409 `idempotency_key_reused`."}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WorkspaceBody"}}}},"responses":{"201":{"description":"Created.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Workspace"}}}},"401":{"description":"No token, or not a valid one: `unauthorized`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"The plan holds no more.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"operationId":"postWorkspaces"}},"/workspaces/{id}":{"get":{"tags":["workspaces"],"summary":"One workspace, with the caller's role in it","parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"id","in":"path","description":"The workspace's id (a UUID)."}],"responses":{"200":{"description":"It.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Workspace"}}}},"401":{"description":"No token, or not a valid one: `unauthorized`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No such one, or not yours to see.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"operationId":"getWorkspace"},"patch":{"tags":["workspaces"],"summary":"Rename a workspace","parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"id","in":"path","description":"The workspace's id (a UUID)."}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WorkspacePatch"}}}},"responses":{"200":{"description":"Renamed.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Workspace"}}}},"401":{"description":"No token, or not a valid one: `unauthorized`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No such one.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"operationId":"patchWorkspace"},"delete":{"tags":["workspaces"],"summary":"Delete a workspace and everything in it (owner only)","description":"Any subscription it has is cancelled first; if that fails, nothing is deleted.","parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"id","in":"path","description":"The workspace's id (a UUID)."}],"responses":{"204":{"description":"No content."},"401":{"description":"No token, or not a valid one: `unauthorized`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Owner only.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"operationId":"deleteWorkspace"}},"/workspaces/{id}/export":{"get":{"tags":["workspaces"],"summary":"Everything SwingFactor holds for this workspace","parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"id","in":"path","description":"The workspace's id (a UUID)."}],"responses":{"200":{"description":"A download.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Export"}}}},"401":{"description":"No token, or not a valid one: `unauthorized`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"operationId":"getWorkspaceExport"}},"/workspaces/{id}/transfer":{"post":{"tags":["workspaces"],"summary":"Hand a workspace to somebody else (owner only)","parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"id","in":"path","description":"The workspace's id (a UUID)."}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WorkspaceTransfer"}}}},"responses":{"200":{"description":"Handed over.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Workspace"}}}},"401":{"description":"No token, or not a valid one: `unauthorized`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Owner only.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Nobody with that address has an account.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"operationId":"postWorkspaceTransfer"}},"/workspaces/{id}/members":{"get":{"tags":["workspaces"],"summary":"Everybody with access, the owner included. Any member may read it.","parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"id","in":"path","description":"The workspace's id (a UUID)."}],"responses":{"200":{"description":"The members.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MemberList"}}}},"401":{"description":"No token, or not a valid one: `unauthorized`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"operationId":"getWorkspaceMembers"}},"/workspaces/{id}/members/{userId}":{"patch":{"tags":["workspaces"],"summary":"Change somebody's role (owner only)","parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"id","in":"path","description":"The workspace's id (a UUID)."},{"schema":{"type":"string","format":"uuid"},"required":true,"name":"userId","in":"path","description":"The member's user id (a UUID)."}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RoleBody"}}}},"responses":{"204":{"description":"No content."},"401":{"description":"No token, or not a valid one: `unauthorized`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Owner only.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"operationId":"patchWorkspaceMember"},"delete":{"tags":["workspaces"],"summary":"Remove somebody (owner only)","parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"id","in":"path","description":"The workspace's id (a UUID)."},{"schema":{"type":"string","format":"uuid"},"required":true,"name":"userId","in":"path","description":"The member's user id (a UUID)."}],"responses":{"204":{"description":"No content."},"401":{"description":"No token, or not a valid one: `unauthorized`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Owner only.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"operationId":"deleteWorkspaceMember"}},"/workspaces/{id}/invitations":{"get":{"tags":["workspaces"],"summary":"Invitations still waiting (owner only)","parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"id","in":"path","description":"The workspace's id (a UUID)."}],"responses":{"200":{"description":"Them.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InvitationList"}}}},"401":{"description":"No token, or not a valid one: `unauthorized`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Owner only.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"operationId":"getWorkspaceInvitations"},"post":{"tags":["workspaces"],"summary":"Invite somebody by email (owner only)","description":"Only the person signed in with that address can accept it. A pending invitation holds a seat.","parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"id","in":"path","description":"The workspace's id (a UUID)."},{"schema":{"type":"string"},"required":false,"name":"Idempotency-Key","in":"header","description":"Any unique string. The same key, method, path and body within 24 hours answers with the first response instead of creating again; the same key on a different request is 409 `idempotency_key_reused`."}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/InviteBody"}}}},"responses":{"201":{"description":"The invitation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Invitation"}}}},"401":{"description":"No token, or not a valid one: `unauthorized`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Owner only, or no seat left.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"operationId":"postWorkspaceInvitations"}},"/workspaces/{id}/invitations/{invitationId}":{"delete":{"tags":["workspaces"],"summary":"Withdraw an invitation (owner only)","parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"id","in":"path","description":"The workspace's id (a UUID)."},{"schema":{"type":"string","format":"uuid"},"required":true,"name":"invitationId","in":"path","description":"The invitation's id (a UUID)."}],"responses":{"204":{"description":"No content."},"401":{"description":"No token, or not a valid one: `unauthorized`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"operationId":"deleteWorkspaceInvitation"}},"/workspaces/{id}/entitlements":{"get":{"tags":["billing"],"summary":"What this workspace's plan allows, and how much of it is used","parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"id","in":"path","description":"The workspace's id (a UUID)."}],"responses":{"200":{"description":"The plan, its status, its limits and the counts.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Entitlements"}}}},"401":{"description":"No token, or not a valid one: `unauthorized`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"operationId":"getWorkspaceEntitlements"}},"/workspaces/{id}/checkout":{"post":{"tags":["billing"],"summary":"Start paying for a plan","description":"Refused with 409 `already_subscribed` while a subscription is live: a second checkout would start a second subscription, and the first would go on billing. Change plan instead.","parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"id","in":"path","description":"The workspace's id (a UUID)."}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CheckoutBody"}}}},"responses":{"200":{"description":"Where to send the browser.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RedirectUrl"}}}},"401":{"description":"No token, or not a valid one: `unauthorized`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Only the owner manages billing.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Already subscribed.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"operationId":"postWorkspaceCheckout"}},"/workspaces/{id}/plan":{"post":{"tags":["billing"],"summary":"Move plan, cadence or quantity","description":"Up is immediate and prorated; down — a smaller plan, fewer units, annual to monthly, or cancelling to the free plan — waits for the end of the period already paid for. With no live subscription it answers with a checkout.","parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"id","in":"path","description":"The workspace's id (a UUID)."}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PlanBody"}}}},"responses":{"200":{"description":"What the change came to.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PlanChangeResult"}}}},"400":{"description":"Billing is in a state this cannot change.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"No token, or not a valid one: `unauthorized`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Only the owner manages billing.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"More in use than the target holds.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"operationId":"postWorkspacePlan"}},"/workspaces/{id}/plan/preview":{"post":{"tags":["billing"],"summary":"What a change would cost today","description":"Changes nothing. A change that waits is nothing due today — the period is already paid for.","parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"id","in":"path","description":"The workspace's id (a UUID)."}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PlanBody"}}}},"responses":{"200":{"description":"The amount due today, or null.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PlanChangePreview"}}}},"401":{"description":"No token, or not a valid one: `unauthorized`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Only the owner manages billing.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"operationId":"postWorkspacePlanPreview"}},"/workspaces/{id}/cancel":{"post":{"tags":["billing"],"summary":"Stop at the end of the period already paid for","description":"Nothing changes until then, and nothing is deleted after: what was made stays readable, and buying again picks up where it stopped. The subscription says so from the next webhook on.","parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"id","in":"path","description":"The workspace's id (a UUID)."}],"responses":{"204":{"description":"It will stop at the end of the period."},"401":{"description":"No token, or not a valid one: `unauthorized`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Only the owner manages billing.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"There is no subscription running to stop.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"operationId":"postWorkspaceCancel"}},"/workspaces/{id}/billing-portal":{"post":{"tags":["billing"],"summary":"Stripe's billing portal — payment method, invoices, cancelling","parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"id","in":"path","description":"The workspace's id (a UUID)."}],"responses":{"200":{"description":"Where to send the browser.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RedirectUrl"}}}},"401":{"description":"No token, or not a valid one: `unauthorized`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Only the owner manages billing.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Never billed, so there is nothing to manage.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"operationId":"postWorkspaceBillingPortal"}},"/workspaces/{id}/invoices":{"get":{"tags":["billing"],"summary":"What has been paid, newest first","description":"Each links to Stripe's hosted page, which is where the VAT invoice lives.","parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"id","in":"path","description":"The workspace's id (a UUID)."}],"responses":{"200":{"description":"Newest first.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaymentList"}}}},"401":{"description":"No token, or not a valid one: `unauthorized`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Only the owner manages billing.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"operationId":"getWorkspaceInvoices"}},"/workspaces/{id}/content":{"post":{"tags":["content"],"summary":"Add an item: start an upload, or add a web page","description":"An upload is created pending, with where its bytes go; it is refused before anything is stored when the kind does not take its type or size. A web page is kept by its address and read in the background — the page already held under that address is returned rather than a second one. Either is refused when the plan does not allow another.","parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"id","in":"path","description":"The workspace's id (a UUID)."},{"schema":{"type":"string"},"required":false,"name":"Idempotency-Key","in":"header","description":"Any unique string. The same key, method, path and body within 24 hours answers with the first response instead of creating again; the same key on a different request is 409 `idempotency_key_reused`."}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ContentBody"}}}},"responses":{"201":{"description":"The item, and for an upload where to send its bytes.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ContentCreated"}}}},"401":{"description":"No token, or not a valid one: `unauthorized`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Not an editor.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"A type, a size, an address or a plan limit refused it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"operationId":"postWorkspaceContent"},"get":{"tags":["content"],"summary":"The ready items, newest first","parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"id","in":"path","description":"The workspace's id (a UUID)."},{"schema":{"type":"string","enum":["sources"],"description":"Only this kind. Absent: every kind."},"required":false,"description":"Only this kind. Absent: every kind.","name":"kind","in":"query"}],"responses":{"200":{"description":"The items.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ContentList"}}}},"401":{"description":"No token, or not a valid one: `unauthorized`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"operationId":"getWorkspaceContent"}},"/workspaces/{id}/content/{itemId}/upload":{"post":{"tags":["content"],"summary":"Sign again where a pending upload’s bytes go","description":"For a retry, or an upload URL that expired. A ready item has nothing left to upload.","parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"id","in":"path","description":"The workspace's id (a UUID)."},{"schema":{"type":"string","format":"uuid"},"required":true,"name":"itemId","in":"path","description":"The content's item id (a UUID)."}],"responses":{"200":{"description":"Where to send the bytes.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Upload"}}}},"401":{"description":"No token, or not a valid one: `unauthorized`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No such item.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Already uploaded.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"operationId":"postWorkspaceContentUpload"}},"/workspaces/{id}/content/{itemId}/complete":{"post":{"tags":["content"],"summary":"Say an upload’s bytes have arrived","description":"Checks what Storage holds — its size and type, and that its first bytes are what the type says — and makes the item ready. One that fails is removed, row and bytes. Idempotent.","parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"id","in":"path","description":"The workspace's id (a UUID)."},{"schema":{"type":"string","format":"uuid"},"required":true,"name":"itemId","in":"path","description":"The content's item id (a UUID)."}],"responses":{"200":{"description":"The ready item.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ContentItem"}}}},"401":{"description":"No token, or not a valid one: `unauthorized`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No such item.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"The bytes have not arrived.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"What arrived is not what the file said it was; it has been removed.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"operationId":"postWorkspaceContentComplete"}},"/workspaces/{id}/content/{itemId}":{"get":{"tags":["content"],"summary":"One item, with every version it has had","parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"id","in":"path","description":"The workspace's id (a UUID)."},{"schema":{"type":"string","format":"uuid"},"required":true,"name":"itemId","in":"path","description":"The content's item id (a UUID)."}],"responses":{"200":{"description":"The item.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ContentDetail"}}}},"401":{"description":"No token, or not a valid one: `unauthorized`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No such item.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"operationId":"getWorkspaceContentByItemId"},"patch":{"tags":["content"],"summary":"Change an item’s name or note","parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"id","in":"path","description":"The workspace's id (a UUID)."},{"schema":{"type":"string","format":"uuid"},"required":true,"name":"itemId","in":"path","description":"The content's item id (a UUID)."}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ContentPatch"}}}},"responses":{"200":{"description":"The item.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ContentItem"}}}},"401":{"description":"No token, or not a valid one: `unauthorized`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Not an editor.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No such item.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"operationId":"patchWorkspaceContent"},"delete":{"tags":["content"],"summary":"Delete an item, every version of it, and their bytes","parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"id","in":"path","description":"The workspace's id (a UUID)."},{"schema":{"type":"string","format":"uuid"},"required":true,"name":"itemId","in":"path","description":"The content's item id (a UUID)."}],"responses":{"204":{"description":"No content."},"401":{"description":"No token, or not a valid one: `unauthorized`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No such item.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"operationId":"deleteWorkspaceContent"}},"/workspaces/{id}/content/{itemId}/text":{"get":{"tags":["content"],"summary":"An item’s text, as it was read out","description":"Its current version’s, or one named. The chunks joined with nothing are the whole text; `starts` is where each begins in it, in characters as Postgres counts them (code points).","parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"id","in":"path","description":"The workspace's id (a UUID)."},{"schema":{"type":"string","format":"uuid"},"required":true,"name":"itemId","in":"path","description":"The content's item id (a UUID)."},{"schema":{"type":"string","format":"uuid","description":"A version. Absent: the current one."},"required":false,"description":"A version. Absent: the current one.","name":"version","in":"query"}],"responses":{"200":{"description":"Its text, in order.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ContentText"}}}},"401":{"description":"No token, or not a valid one: `unauthorized`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No such item, or no such version of it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"operationId":"getWorkspaceContentText"}},"/workspaces/{id}/content/{itemId}/read":{"post":{"tags":["content"],"summary":"Read an item again","description":"A file whose reading failed or found nothing is read again; a web page is fetched again, and becomes a new version if it has changed.","parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"id","in":"path","description":"The workspace's id (a UUID)."},{"schema":{"type":"string","format":"uuid"},"required":true,"name":"itemId","in":"path","description":"The content's item id (a UUID)."}],"responses":{"202":{"description":"It is waiting to be read.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ContentItem"}}}},"401":{"description":"No token, or not a valid one: `unauthorized`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Nothing ready here that can be read.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"operationId":"postWorkspaceContentRead"}},"/workspaces/{id}/content/{itemId}/download":{"get":{"tags":["content"],"summary":"Where to fetch an item’s bytes","description":"Signed when asked for, for five minutes: an upload’s file, or a web page as it was fetched — its current version, or one named. A download, named after the item — or, with `inline=true`, shown in place, for a type that cannot run script (raster images, PDF, plain text); any other type, a page’s HTML among them, is still a download.","parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"id","in":"path","description":"The workspace's id (a UUID)."},{"schema":{"type":"string","format":"uuid"},"required":true,"name":"itemId","in":"path","description":"The content's item id (a UUID)."},{"schema":{"type":"string","format":"uuid","description":"A version. Absent: the current one."},"required":false,"description":"A version. Absent: the current one.","name":"version","in":"query"},{"schema":{"type":"string","enum":["true","false"],"description":"true: shown in place where the type allows. Absent or false: a download."},"required":false,"description":"true: shown in place where the type allows. Absent or false: a download.","name":"inline","in":"query"}],"responses":{"200":{"description":"A signed URL.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Download"}}}},"401":{"description":"No token, or not a valid one: `unauthorized`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No such item, or no such version of it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Nothing to fetch yet.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"operationId":"getWorkspaceContentDownload"}},"/workspaces/{id}/suggestions":{"post":{"tags":["questions"],"summary":"Suggest options, scenarios, factors, who it affects or ways of taking an option","description":"For the new-question wizard and a question’s Setup: SwingFactor suggests from the question as it stands. Nothing is saved; what the person keeps is written as theirs, marked suggested where it keeps that, and what they reject is never suggested again. An editor on a plan that asks.","parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"id","in":"path","description":"The workspace's id (a UUID)."}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuggestionBody"}}}},"responses":{"200":{"description":"What it suggests, less anything the question already has or was rejected.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Suggestions"}}}},"400":{"description":"The plan does not ask: `plan_limit`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"No token, or not a valid one: `unauthorized`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Only the workspace’s editors.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"No model is configured, or none may take a private question: `ai_unavailable`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"operationId":"postWorkspaceSuggestions"}},"/questions":{"get":{"tags":["questions"],"summary":"What a workspace sees: its own questions, then every public one","description":"Readable on every plan. With `workspace`, that workspace’s questions come first, whatever their visibility — so a workspace that moves down still sees what it asked — then public questions from everywhere else. Without it, the public ones alone. Each links to its own workspace, where it can be read too.","parameters":[{"schema":{"type":"string","format":"uuid","description":"A workspace whose own questions come first. Absent: public questions alone."},"required":false,"description":"A workspace whose own questions come first. Absent: public questions alone.","name":"workspace","in":"query"}],"responses":{"200":{"description":"The questions.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/VisibleQuestionList"}}}},"401":{"description":"No token, or not a valid one: `unauthorized`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"operationId":"getQuestions"}},"/workspaces/{id}/questions":{"get":{"tags":["questions"],"summary":"List a workspace’s questions (newest first)","parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"id","in":"path","description":"The workspace's id (a UUID)."}],"responses":{"200":{"description":"The questions the caller may read.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/QuestionList"}}}},"401":{"description":"No token, or not a valid one: `unauthorized`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"operationId":"getWorkspaceQuestions"},"post":{"tags":["questions"],"summary":"Ask a question","parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"id","in":"path","description":"The workspace's id (a UUID)."},{"schema":{"type":"string"},"required":false,"name":"Idempotency-Key","in":"header","description":"Any unique string. The same key, method, path and body within 24 hours answers with the first response instead of creating again; the same key on a different request is 409 `idempotency_key_reused`."}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AskQuestionBody"}}}},"responses":{"201":{"description":"The question, with whatever it was asked with.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Question"}}}},"400":{"description":"The plan does not allow it: `plan_limit`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"No token, or not a valid one: `unauthorized`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Viewers cannot ask.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"operationId":"postWorkspaceQuestions"}},"/workspaces/{id}/questions/{questionId}":{"get":{"tags":["questions"],"summary":"One question","parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"id","in":"path","description":"The workspace's id (a UUID)."},{"schema":{"type":"string","format":"uuid"},"required":true,"name":"questionId","in":"path","description":"The question's id (a UUID)."}],"responses":{"200":{"description":"The question.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Question"}}}},"401":{"description":"No token, or not a valid one: `unauthorized`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No such question, or not one the caller may read.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"operationId":"getWorkspaceQuestion"},"patch":{"tags":["questions"],"summary":"Update a question","parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"id","in":"path","description":"The workspace's id (a UUID)."},{"schema":{"type":"string","format":"uuid"},"required":true,"name":"questionId","in":"path","description":"The question's id (a UUID)."}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/QuestionPatchBody"}}}},"responses":{"200":{"description":"The updated question.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Question"}}}},"400":{"description":"The plan does not allow a private question: `plan_limit`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"No token, or not a valid one: `unauthorized`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No such question.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"operationId":"patchWorkspaceQuestion"},"delete":{"tags":["questions"],"summary":"Delete a question and everything under it","parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"id","in":"path","description":"The workspace's id (a UUID)."},{"schema":{"type":"string","format":"uuid"},"required":true,"name":"questionId","in":"path","description":"The question's id (a UUID)."}],"responses":{"204":{"description":"No content."},"401":{"description":"No token, or not a valid one: `unauthorized`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"operationId":"deleteWorkspaceQuestion"}},"/workspaces/{id}/asking":{"post":{"tags":["questions"],"summary":"Start asking a question, a step at a time","description":"The wizard’s first step, left: the question is written, still being asked, and the month’s allowance spent. Its workspace’s alone, and not drafted, until it is asked.","parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"id","in":"path","description":"The workspace's id (a UUID)."},{"schema":{"type":"string"},"required":false,"name":"Idempotency-Key","in":"header","description":"Any unique string. The same key, method, path and body within 24 hours answers with the first response instead of creating again; the same key on a different request is 409 `idempotency_key_reused`."}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SaveAskingBody"}}}},"responses":{"201":{"description":"The question being asked, and what the wizard holds.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Asking"}}}},"400":{"description":"The plan does not allow it: `plan_limit`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"No token, or not a valid one: `unauthorized`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Viewers cannot ask.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"operationId":"postWorkspaceAsking"}},"/workspaces/{id}/questions/{questionId}/asking":{"get":{"tags":["questions"],"summary":"A question being asked, as the wizard picks it up again","parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"id","in":"path","description":"The workspace's id (a UUID)."},{"schema":{"type":"string","format":"uuid"},"required":true,"name":"questionId","in":"path","description":"The question's id (a UUID)."}],"responses":{"200":{"description":"The question, its options and scenarios, the suggestions rejected, and its sources.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Asking"}}}},"401":{"description":"No token, or not a valid one: `unauthorized`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No such question in a workspace the caller belongs to.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"operationId":"getWorkspaceQuestionAsking"},"put":{"tags":["questions"],"summary":"Save a step of asking a question","description":"Each part sent is set whole — the options listed are the options, and one left out is deleted — through the same checks as one at a time. A refusal leaves the step as it was.","parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"id","in":"path","description":"The workspace's id (a UUID)."},{"schema":{"type":"string","format":"uuid"},"required":true,"name":"questionId","in":"path","description":"The question's id (a UUID)."}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SaveAskingBody"}}}},"responses":{"200":{"description":"The question being asked, and what the wizard holds.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Asking"}}}},"400":{"description":"It is asked already: `question_asked`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"No token, or not a valid one: `unauthorized`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No such question.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"operationId":"putWorkspaceQuestionAsking"}},"/workspaces/{id}/questions/{questionId}/asking/finish":{"post":{"tags":["questions"],"summary":"Ask a question the wizard has built","description":"It leaves the wizard: it can be drafted, and a public one is read by anybody signed in. Asking one asked already changes nothing.","parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"id","in":"path","description":"The workspace's id (a UUID)."},{"schema":{"type":"string","format":"uuid"},"required":true,"name":"questionId","in":"path","description":"The question's id (a UUID)."}],"responses":{"200":{"description":"The question, asked.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Question"}}}},"401":{"description":"No token, or not a valid one: `unauthorized`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No such question.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Fewer than two options: `options_required`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"operationId":"postWorkspaceQuestionAskingFinish"}},"/workspaces/{id}/questions/{questionId}/options":{"get":{"tags":["questions"],"summary":"A question’s options, in order","parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"id","in":"path","description":"The workspace's id (a UUID)."},{"schema":{"type":"string","format":"uuid"},"required":true,"name":"questionId","in":"path","description":"The question's id (a UUID)."}],"responses":{"200":{"description":"The options.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/QuestionOptionList"}}}},"401":{"description":"No token, or not a valid one: `unauthorized`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"operationId":"getWorkspaceQuestionOptions"},"post":{"tags":["questions"],"summary":"Add an option","parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"id","in":"path","description":"The workspace's id (a UUID)."},{"schema":{"type":"string","format":"uuid"},"required":true,"name":"questionId","in":"path","description":"The question's id (a UUID)."},{"schema":{"type":"string"},"required":false,"name":"Idempotency-Key","in":"header","description":"Any unique string. The same key, method, path and body within 24 hours answers with the first response instead of creating again; the same key on a different request is 409 `idempotency_key_reused`."}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/QuestionOptionCreateBody"}}}},"responses":{"201":{"description":"The option.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/QuestionOption"}}}},"401":{"description":"No token, or not a valid one: `unauthorized`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No such question.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"operationId":"postWorkspaceQuestionOptions"}},"/workspaces/{id}/questions/{questionId}/options/{optionId}":{"patch":{"tags":["questions"],"summary":"Update an option","parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"id","in":"path","description":"The workspace's id (a UUID)."},{"schema":{"type":"string","format":"uuid"},"required":true,"name":"questionId","in":"path","description":"The question's id (a UUID)."},{"schema":{"type":"string","format":"uuid"},"required":true,"name":"optionId","in":"path","description":"The option's id (a UUID)."}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/QuestionOptionPatchBody"}}}},"responses":{"200":{"description":"The updated option.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/QuestionOption"}}}},"401":{"description":"No token, or not a valid one: `unauthorized`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No such option.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"operationId":"patchWorkspaceQuestionOption"},"delete":{"tags":["questions"],"summary":"Delete an option","parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"id","in":"path","description":"The workspace's id (a UUID)."},{"schema":{"type":"string","format":"uuid"},"required":true,"name":"questionId","in":"path","description":"The question's id (a UUID)."},{"schema":{"type":"string","format":"uuid"},"required":true,"name":"optionId","in":"path","description":"The option's id (a UUID)."}],"responses":{"204":{"description":"No content."},"401":{"description":"No token, or not a valid one: `unauthorized`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"operationId":"deleteWorkspaceQuestionOption"}},"/workspaces/{id}/questions/{questionId}/options/{optionId}/move":{"post":{"tags":["questions"],"summary":"Move an option one place","parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"id","in":"path","description":"The workspace's id (a UUID)."},{"schema":{"type":"string","format":"uuid"},"required":true,"name":"questionId","in":"path","description":"The question's id (a UUID)."},{"schema":{"type":"string","format":"uuid"},"required":true,"name":"optionId","in":"path","description":"The option's id (a UUID)."}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MoveBody"}}}},"responses":{"200":{"description":"The options, in their new order.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/QuestionOptionOrder"}}}},"401":{"description":"No token, or not a valid one: `unauthorized`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No such option.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"operationId":"postWorkspaceQuestionOptionMove"}},"/workspaces/{id}/questions/{questionId}/scenarios":{"get":{"tags":["questions"],"summary":"The scenarios a question is tested under","parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"id","in":"path","description":"The workspace's id (a UUID)."},{"schema":{"type":"string","format":"uuid"},"required":true,"name":"questionId","in":"path","description":"The question's id (a UUID)."}],"responses":{"200":{"description":"The scenarios.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/QuestionScenarioList"}}}},"401":{"description":"No token, or not a valid one: `unauthorized`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"operationId":"getWorkspaceQuestionScenarios"},"post":{"tags":["questions"],"summary":"Add a scenario","description":"A case the question is tested under. Propositions and ranges may hold under it.","parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"id","in":"path","description":"The workspace's id (a UUID)."},{"schema":{"type":"string","format":"uuid"},"required":true,"name":"questionId","in":"path","description":"The question's id (a UUID)."},{"schema":{"type":"string"},"required":false,"name":"Idempotency-Key","in":"header","description":"Any unique string. The same key, method, path and body within 24 hours answers with the first response instead of creating again; the same key on a different request is 409 `idempotency_key_reused`."}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/QuestionScenarioCreateBody"}}}},"responses":{"201":{"description":"The scenario.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/QuestionScenario"}}}},"401":{"description":"No token, or not a valid one: `unauthorized`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No such question.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"operationId":"postWorkspaceQuestionScenarios"}},"/workspaces/{id}/questions/{questionId}/scenarios/{scenarioId}":{"patch":{"tags":["questions"],"summary":"Update a scenario","parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"id","in":"path","description":"The workspace's id (a UUID)."},{"schema":{"type":"string","format":"uuid"},"required":true,"name":"questionId","in":"path","description":"The question's id (a UUID)."},{"schema":{"type":"string","format":"uuid"},"required":true,"name":"scenarioId","in":"path","description":"The scenario's id (a UUID)."}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/QuestionScenarioPatchBody"}}}},"responses":{"200":{"description":"The updated scenario.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/QuestionScenario"}}}},"401":{"description":"No token, or not a valid one: `unauthorized`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No such scenario.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"operationId":"patchWorkspaceQuestionScenario"},"delete":{"tags":["questions"],"summary":"Delete a scenario","description":"What held under it then holds under none; the history says so.","parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"id","in":"path","description":"The workspace's id (a UUID)."},{"schema":{"type":"string","format":"uuid"},"required":true,"name":"questionId","in":"path","description":"The question's id (a UUID)."},{"schema":{"type":"string","format":"uuid"},"required":true,"name":"scenarioId","in":"path","description":"The scenario's id (a UUID)."}],"responses":{"204":{"description":"No content."},"401":{"description":"No token, or not a valid one: `unauthorized`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No such scenario.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"operationId":"deleteWorkspaceQuestionScenario"}},"/workspaces/{id}/questions/{questionId}/options/{optionId}/decision":{"post":{"tags":["questions"],"summary":"Accept, reject or reopen an option","description":"A person’s own option stands accepted; a draft’s arrives proposed. Only accepted options compute. Rejecting keeps it, and what names it.","parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"id","in":"path","description":"The workspace's id (a UUID)."},{"schema":{"type":"string","format":"uuid"},"required":true,"name":"questionId","in":"path","description":"The question's id (a UUID)."},{"schema":{"type":"string","format":"uuid"},"required":true,"name":"optionId","in":"path","description":"The option's id (a UUID)."}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DecisionBody"}}}},"responses":{"200":{"description":"The option.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/QuestionOption"}}}},"401":{"description":"No token, or not a valid one: `unauthorized`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Only a person decides.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No such option.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"operationId":"postWorkspaceQuestionOptionDecision"}},"/workspaces/{id}/questions/{questionId}/scenarios/{scenarioId}/decision":{"post":{"tags":["questions"],"summary":"Accept, reject or reopen a scenario","description":"The database records who decided and when. A request with no person behind it is refused.","parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"id","in":"path","description":"The workspace's id (a UUID)."},{"schema":{"type":"string","format":"uuid"},"required":true,"name":"questionId","in":"path","description":"The question's id (a UUID)."},{"schema":{"type":"string","format":"uuid"},"required":true,"name":"scenarioId","in":"path","description":"The scenario's id (a UUID)."}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DecisionBody"}}}},"responses":{"200":{"description":"The scenario.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/QuestionScenario"}}}},"401":{"description":"No token, or not a valid one: `unauthorized`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Only a person decides.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No such scenario.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"operationId":"postWorkspaceQuestionScenarioDecision"}},"/workspaces/{id}/questions/{questionId}/propositions":{"get":{"tags":["propositions"],"summary":"A question’s propositions, in order","parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"id","in":"path","description":"The workspace's id (a UUID)."},{"schema":{"type":"string","format":"uuid"},"required":true,"name":"questionId","in":"path","description":"The question's id (a UUID)."}],"responses":{"200":{"description":"The propositions.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PropositionList"}}}},"401":{"description":"No token, or not a valid one: `unauthorized`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"operationId":"getWorkspaceQuestionPropositions"},"post":{"tags":["propositions"],"summary":"Add a proposition — proposed until a person decides","parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"id","in":"path","description":"The workspace's id (a UUID)."},{"schema":{"type":"string","format":"uuid"},"required":true,"name":"questionId","in":"path","description":"The question's id (a UUID)."},{"schema":{"type":"string"},"required":false,"name":"Idempotency-Key","in":"header","description":"Any unique string. The same key, method, path and body within 24 hours answers with the first response instead of creating again; the same key on a different request is 409 `idempotency_key_reused`."}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PropositionBody"}}}},"responses":{"201":{"description":"The proposition, proposed.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Proposition"}}}},"401":{"description":"No token, or not a valid one: `unauthorized`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No such question.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"operationId":"postWorkspaceQuestionPropositions"}},"/workspaces/{id}/questions/{questionId}/propositions/{propositionId}":{"patch":{"tags":["propositions"],"summary":"Edit a proposition — new words are proposed again","parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"id","in":"path","description":"The workspace's id (a UUID)."},{"schema":{"type":"string","format":"uuid"},"required":true,"name":"questionId","in":"path","description":"The question's id (a UUID)."},{"schema":{"type":"string","format":"uuid"},"required":true,"name":"propositionId","in":"path","description":"The proposition's id (a UUID)."}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PropositionPatchBody"}}}},"responses":{"200":{"description":"The proposition.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Proposition"}}}},"401":{"description":"No token, or not a valid one: `unauthorized`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No such proposition.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"operationId":"patchWorkspaceQuestionProposition"},"delete":{"tags":["propositions"],"summary":"Delete a proposition","parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"id","in":"path","description":"The workspace's id (a UUID)."},{"schema":{"type":"string","format":"uuid"},"required":true,"name":"questionId","in":"path","description":"The question's id (a UUID)."},{"schema":{"type":"string","format":"uuid"},"required":true,"name":"propositionId","in":"path","description":"The proposition's id (a UUID)."}],"responses":{"204":{"description":"No content."},"401":{"description":"No token, or not a valid one: `unauthorized`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"operationId":"deleteWorkspaceQuestionProposition"}},"/workspaces/{id}/questions/{questionId}/propositions/{propositionId}/confirmation":{"post":{"tags":["propositions"],"summary":"Say a proposition still holds after what it rests on changed","description":"Clears the flag a change to something it rests on set, and keeps why in its history. Editing it or deciding it again clears the flag too.","parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"id","in":"path","description":"The workspace's id (a UUID)."},{"schema":{"type":"string","format":"uuid"},"required":true,"name":"questionId","in":"path","description":"The question's id (a UUID)."},{"schema":{"type":"string","format":"uuid"},"required":true,"name":"propositionId","in":"path","description":"The proposition's id (a UUID)."}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConfirmBody"}}}},"responses":{"200":{"description":"The proposition, re-checked.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Proposition"}}}},"401":{"description":"No token, or not a valid one: `unauthorized`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No such proposition waits to be re-checked.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"No reason given.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"operationId":"postWorkspaceQuestionPropositionConfirmation"}},"/workspaces/{id}/questions/{questionId}/propositions/{propositionId}/decision":{"post":{"tags":["propositions"],"summary":"Accept, reject or reopen a proposition","description":"The database records who decided and when. A request with no person behind it is refused.","parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"id","in":"path","description":"The workspace's id (a UUID)."},{"schema":{"type":"string","format":"uuid"},"required":true,"name":"questionId","in":"path","description":"The question's id (a UUID)."},{"schema":{"type":"string","format":"uuid"},"required":true,"name":"propositionId","in":"path","description":"The proposition's id (a UUID)."}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PropositionDecisionBody"}}}},"responses":{"200":{"description":"The proposition, decided.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Proposition"}}}},"401":{"description":"No token, or not a valid one: `unauthorized`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Only a person decides.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No such proposition.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"operationId":"postWorkspaceQuestionPropositionDecision"}},"/workspaces/{id}/questions/{questionId}/propositions/{propositionId}/move":{"post":{"tags":["propositions"],"summary":"Move a proposition one place — its P-number follows its place","parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"id","in":"path","description":"The workspace's id (a UUID)."},{"schema":{"type":"string","format":"uuid"},"required":true,"name":"questionId","in":"path","description":"The question's id (a UUID)."},{"schema":{"type":"string","format":"uuid"},"required":true,"name":"propositionId","in":"path","description":"The proposition's id (a UUID)."}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MoveBody"}}}},"responses":{"200":{"description":"The propositions, in their new order.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PropositionOrder"}}}},"401":{"description":"No token, or not a valid one: `unauthorized`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No such proposition.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"operationId":"postWorkspaceQuestionPropositionMove"}},"/workspaces/{id}/questions/{questionId}/evidence":{"get":{"tags":["evidence"],"summary":"A question’s evidence, by proposition","parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"id","in":"path","description":"The workspace's id (a UUID)."},{"schema":{"type":"string","format":"uuid"},"required":true,"name":"questionId","in":"path","description":"The question's id (a UUID)."}],"responses":{"200":{"description":"The evidence.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EvidenceList"}}}},"401":{"description":"No token, or not a valid one: `unauthorized`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"operationId":"getWorkspaceQuestionEvidence"}},"/workspaces/{id}/questions/{questionId}/own-evidence":{"post":{"tags":["evidence"],"summary":"Say what you know first-hand — recorded as yours, on the claim behind what you are looking at","description":"The database stamps the rest from who is signed in: first-person, asserted by them as affected, read today. It stands accepted, as theirs. Only a person acting as themselves — never a draft or the assistant — and only an editor of the question’s workspace.","parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"id","in":"path","description":"The workspace's id (a UUID)."},{"schema":{"type":"string","format":"uuid"},"required":true,"name":"questionId","in":"path","description":"The question's id (a UUID)."},{"schema":{"type":"string"},"required":false,"name":"Idempotency-Key","in":"header","description":"Any unique string. The same key, method, path and body within 24 hours answers with the first response instead of creating again; the same key on a different request is 409 `idempotency_key_reused`."}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/OwnEvidenceBody"}}}},"responses":{"201":{"description":"The evidence, theirs and accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Evidence"}}}},"401":{"description":"No token, or not a valid one: `unauthorized`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Not a person acting as themselves.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No such question or claim, or not one you can add to.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Nothing said, or no name on the profile to record it under.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"operationId":"postWorkspaceQuestionOwnEvidence"}},"/workspaces/{id}/questions/{questionId}/propositions/{propositionId}/evidence":{"post":{"tags":["evidence"],"summary":"Add evidence to a proposition — proposed until a person decides","parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"id","in":"path","description":"The workspace's id (a UUID)."},{"schema":{"type":"string","format":"uuid"},"required":true,"name":"questionId","in":"path","description":"The question's id (a UUID)."},{"schema":{"type":"string","format":"uuid"},"required":true,"name":"propositionId","in":"path","description":"The proposition's id (a UUID)."},{"schema":{"type":"string"},"required":false,"name":"Idempotency-Key","in":"header","description":"Any unique string. The same key, method, path and body within 24 hours answers with the first response instead of creating again; the same key on a different request is 409 `idempotency_key_reused`."}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EvidenceBody"}}}},"responses":{"201":{"description":"The evidence, proposed.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Evidence"}}}},"401":{"description":"No token, or not a valid one: `unauthorized`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No such proposition.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"operationId":"postWorkspaceQuestionPropositionEvidence"}},"/workspaces/{id}/questions/{questionId}/evidence/{evidenceId}":{"patch":{"tags":["evidence"],"summary":"Edit evidence — new words are proposed again","parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"id","in":"path","description":"The workspace's id (a UUID)."},{"schema":{"type":"string","format":"uuid"},"required":true,"name":"questionId","in":"path","description":"The question's id (a UUID)."},{"schema":{"type":"string","format":"uuid"},"required":true,"name":"evidenceId","in":"path","description":"The evidence's id (a UUID)."}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EvidencePatchBody"}}}},"responses":{"200":{"description":"The evidence.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Evidence"}}}},"401":{"description":"No token, or not a valid one: `unauthorized`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No such evidence.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"operationId":"patchWorkspaceQuestionEvidence"},"delete":{"tags":["evidence"],"summary":"Delete evidence","parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"id","in":"path","description":"The workspace's id (a UUID)."},{"schema":{"type":"string","format":"uuid"},"required":true,"name":"questionId","in":"path","description":"The question's id (a UUID)."},{"schema":{"type":"string","format":"uuid"},"required":true,"name":"evidenceId","in":"path","description":"The evidence's id (a UUID)."}],"responses":{"204":{"description":"No content."},"401":{"description":"No token, or not a valid one: `unauthorized`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"operationId":"deleteWorkspaceQuestionEvidence"}},"/workspaces/{id}/questions/{questionId}/evidence/{evidenceId}/decision":{"post":{"tags":["evidence"],"summary":"Accept, reject or reopen evidence","description":"The database records who decided and when. A request with no person behind it is refused.","parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"id","in":"path","description":"The workspace's id (a UUID)."},{"schema":{"type":"string","format":"uuid"},"required":true,"name":"questionId","in":"path","description":"The question's id (a UUID)."},{"schema":{"type":"string","format":"uuid"},"required":true,"name":"evidenceId","in":"path","description":"The evidence's id (a UUID)."}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DecisionBody"}}}},"responses":{"200":{"description":"The evidence, decided.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Evidence"}}}},"401":{"description":"No token, or not a valid one: `unauthorized`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Only a person decides.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No such evidence.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"operationId":"postWorkspaceQuestionEvidenceDecision"}},"/workspaces/{id}/questions/{questionId}/dependencies":{"get":{"tags":["dependencies"],"summary":"Which of a question’s propositions rest on which","parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"id","in":"path","description":"The workspace's id (a UUID)."},{"schema":{"type":"string","format":"uuid"},"required":true,"name":"questionId","in":"path","description":"The question's id (a UUID)."}],"responses":{"200":{"description":"The dependencies.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DependencyList"}}}},"401":{"description":"No token, or not a valid one: `unauthorized`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"operationId":"getWorkspaceQuestionDependencies"},"post":{"tags":["dependencies"],"summary":"Say one proposition rests on another — proposed until a person decides","parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"id","in":"path","description":"The workspace's id (a UUID)."},{"schema":{"type":"string","format":"uuid"},"required":true,"name":"questionId","in":"path","description":"The question's id (a UUID)."},{"schema":{"type":"string"},"required":false,"name":"Idempotency-Key","in":"header","description":"Any unique string. The same key, method, path and body within 24 hours answers with the first response instead of creating again; the same key on a different request is 409 `idempotency_key_reused`."}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DependencyBody"}}}},"responses":{"201":{"description":"The dependency, proposed.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Dependency"}}}},"401":{"description":"No token, or not a valid one: `unauthorized`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Both ends must be propositions of this question.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"On itself, or already there.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"operationId":"postWorkspaceQuestionDependencies"}},"/workspaces/{id}/questions/{questionId}/dependencies/{dependencyId}":{"patch":{"tags":["dependencies"],"summary":"Say how it bears — a new mechanism is proposed again","parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"id","in":"path","description":"The workspace's id (a UUID)."},{"schema":{"type":"string","format":"uuid"},"required":true,"name":"questionId","in":"path","description":"The question's id (a UUID)."},{"schema":{"type":"string","format":"uuid"},"required":true,"name":"dependencyId","in":"path","description":"The dependency's id (a UUID)."}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DependencyPatchBody"}}}},"responses":{"200":{"description":"The dependency.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Dependency"}}}},"401":{"description":"No token, or not a valid one: `unauthorized`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No such dependency.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"operationId":"patchWorkspaceQuestionDependency"},"delete":{"tags":["dependencies"],"summary":"Delete a dependency","parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"id","in":"path","description":"The workspace's id (a UUID)."},{"schema":{"type":"string","format":"uuid"},"required":true,"name":"questionId","in":"path","description":"The question's id (a UUID)."},{"schema":{"type":"string","format":"uuid"},"required":true,"name":"dependencyId","in":"path","description":"The dependency's id (a UUID)."}],"responses":{"204":{"description":"No content."},"401":{"description":"No token, or not a valid one: `unauthorized`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"operationId":"deleteWorkspaceQuestionDependency"}},"/workspaces/{id}/questions/{questionId}/dependencies/{dependencyId}/decision":{"post":{"tags":["dependencies"],"summary":"Accept, reject or reopen a dependency","description":"Only accepted dependencies carry a change. The database records who decided.","parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"id","in":"path","description":"The workspace's id (a UUID)."},{"schema":{"type":"string","format":"uuid"},"required":true,"name":"questionId","in":"path","description":"The question's id (a UUID)."},{"schema":{"type":"string","format":"uuid"},"required":true,"name":"dependencyId","in":"path","description":"The dependency's id (a UUID)."}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DecisionBody"}}}},"responses":{"200":{"description":"The dependency, decided.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Dependency"}}}},"401":{"description":"No token, or not a valid one: `unauthorized`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Only a person decides.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No such dependency.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"operationId":"postWorkspaceQuestionDependencyDecision"}},"/workspaces/{id}/questions/{questionId}/propositions/{propositionId}/propagation":{"get":{"tags":["dependencies"],"summary":"What changes if this proposition changes — or what it rests on","description":"Every proposition reached through accepted dependencies, at its shortest distance, with the chain that connects it — the explanation, step by step.","parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"id","in":"path","description":"The workspace's id (a UUID)."},{"schema":{"type":"string","format":"uuid"},"required":true,"name":"questionId","in":"path","description":"The question's id (a UUID)."},{"schema":{"type":"string","format":"uuid"},"required":true,"name":"propositionId","in":"path","description":"The proposition's id (a UUID)."},{"schema":{"type":"string","enum":["downstream","upstream"],"description":"downstream (default): what changes if it changes. upstream: what it rests on."},"required":false,"description":"downstream (default): what changes if it changes. upstream: what it rests on.","name":"direction","in":"query"}],"responses":{"200":{"description":"What it reaches.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReachList"}}}},"401":{"description":"No token, or not a valid one: `unauthorized`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No such proposition.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"operationId":"getWorkspaceQuestionPropositionPropagation"}},"/workspaces/{id}/questions/{questionId}/variables":{"get":{"tags":["switching"],"summary":"A question’s uncertain quantities","parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"id","in":"path","description":"The workspace's id (a UUID)."},{"schema":{"type":"string","format":"uuid"},"required":true,"name":"questionId","in":"path","description":"The question's id (a UUID)."}],"responses":{"200":{"description":"The variables.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/VariableList"}}}},"401":{"description":"No token, or not a valid one: `unauthorized`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"operationId":"getWorkspaceQuestionVariables"},"post":{"tags":["switching"],"summary":"Name an uncertain quantity a proposition turns on","parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"id","in":"path","description":"The workspace's id (a UUID)."},{"schema":{"type":"string","format":"uuid"},"required":true,"name":"questionId","in":"path","description":"The question's id (a UUID)."},{"schema":{"type":"string"},"required":false,"name":"Idempotency-Key","in":"header","description":"Any unique string. The same key, method, path and body within 24 hours answers with the first response instead of creating again; the same key on a different request is 409 `idempotency_key_reused`."}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/VariableBody"}}}},"responses":{"201":{"description":"The variable.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Variable"}}}},"401":{"description":"No token, or not a valid one: `unauthorized`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No such proposition in this question.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"operationId":"postWorkspaceQuestionVariables"}},"/workspaces/{id}/questions/{questionId}/variables/{variableId}":{"patch":{"tags":["switching"],"summary":"Rename a variable, or change its unit","parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"id","in":"path","description":"The workspace's id (a UUID)."},{"schema":{"type":"string","format":"uuid"},"required":true,"name":"questionId","in":"path","description":"The question's id (a UUID)."},{"schema":{"type":"string","format":"uuid"},"required":true,"name":"variableId","in":"path","description":"The variable's id (a UUID)."}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/VariablePatchBody"}}}},"responses":{"200":{"description":"The variable.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Variable"}}}},"401":{"description":"No token, or not a valid one: `unauthorized`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No such variable.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"operationId":"patchWorkspaceQuestionVariable"},"delete":{"tags":["switching"],"summary":"Delete a variable, its ranges and its break-evens","parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"id","in":"path","description":"The workspace's id (a UUID)."},{"schema":{"type":"string","format":"uuid"},"required":true,"name":"questionId","in":"path","description":"The question's id (a UUID)."},{"schema":{"type":"string","format":"uuid"},"required":true,"name":"variableId","in":"path","description":"The variable's id (a UUID)."}],"responses":{"204":{"description":"No content."},"401":{"description":"No token, or not a valid one: `unauthorized`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"operationId":"deleteWorkspaceQuestionVariable"}},"/workspaces/{id}/questions/{questionId}/estimates":{"get":{"tags":["switching"],"summary":"Every party’s range for every variable in a question","parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"id","in":"path","description":"The workspace's id (a UUID)."},{"schema":{"type":"string","format":"uuid"},"required":true,"name":"questionId","in":"path","description":"The question's id (a UUID)."}],"responses":{"200":{"description":"The ranges, kept apart.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EstimateList"}}}},"401":{"description":"No token, or not a valid one: `unauthorized`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"operationId":"getWorkspaceQuestionEstimates"}},"/workspaces/{id}/questions/{questionId}/variables/{variableId}/estimates":{"post":{"tags":["switching"],"summary":"Add a party’s plausible range — proposed until a person decides","parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"id","in":"path","description":"The workspace's id (a UUID)."},{"schema":{"type":"string","format":"uuid"},"required":true,"name":"questionId","in":"path","description":"The question's id (a UUID)."},{"schema":{"type":"string","format":"uuid"},"required":true,"name":"variableId","in":"path","description":"The variable's id (a UUID)."},{"schema":{"type":"string"},"required":false,"name":"Idempotency-Key","in":"header","description":"Any unique string. The same key, method, path and body within 24 hours answers with the first response instead of creating again; the same key on a different request is 409 `idempotency_key_reused`."}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EstimateBody"}}}},"responses":{"201":{"description":"The range, proposed.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Estimate"}}}},"401":{"description":"No token, or not a valid one: `unauthorized`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No such variable.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"operationId":"postWorkspaceQuestionVariableEstimates"}},"/workspaces/{id}/questions/{questionId}/estimates/{estimateId}":{"patch":{"tags":["switching"],"summary":"Edit a range — new numbers or a new source are proposed again","parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"id","in":"path","description":"The workspace's id (a UUID)."},{"schema":{"type":"string","format":"uuid"},"required":true,"name":"questionId","in":"path","description":"The question's id (a UUID)."},{"schema":{"type":"string","format":"uuid"},"required":true,"name":"estimateId","in":"path","description":"The estimate's id (a UUID)."}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EstimatePatchBody"}}}},"responses":{"200":{"description":"The range.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Estimate"}}}},"401":{"description":"No token, or not a valid one: `unauthorized`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No such range.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"operationId":"patchWorkspaceQuestionEstimate"},"delete":{"tags":["switching"],"summary":"Delete a range","parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"id","in":"path","description":"The workspace's id (a UUID)."},{"schema":{"type":"string","format":"uuid"},"required":true,"name":"questionId","in":"path","description":"The question's id (a UUID)."},{"schema":{"type":"string","format":"uuid"},"required":true,"name":"estimateId","in":"path","description":"The estimate's id (a UUID)."}],"responses":{"204":{"description":"No content."},"401":{"description":"No token, or not a valid one: `unauthorized`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"operationId":"deleteWorkspaceQuestionEstimate"}},"/workspaces/{id}/questions/{questionId}/estimates/{estimateId}/decision":{"post":{"tags":["switching"],"summary":"Accept, reject or reopen a range","parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"id","in":"path","description":"The workspace's id (a UUID)."},{"schema":{"type":"string","format":"uuid"},"required":true,"name":"questionId","in":"path","description":"The question's id (a UUID)."},{"schema":{"type":"string","format":"uuid"},"required":true,"name":"estimateId","in":"path","description":"The estimate's id (a UUID)."}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DecisionBody"}}}},"responses":{"200":{"description":"The range, decided.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Estimate"}}}},"401":{"description":"No token, or not a valid one: `unauthorized`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Only a person decides.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No such range.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"operationId":"postWorkspaceQuestionEstimateDecision"}},"/workspaces/{id}/questions/{questionId}/break-evens":{"get":{"tags":["switching"],"summary":"Every break-even in a question","parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"id","in":"path","description":"The workspace's id (a UUID)."},{"schema":{"type":"string","format":"uuid"},"required":true,"name":"questionId","in":"path","description":"The question's id (a UUID)."}],"responses":{"200":{"description":"The break-evens.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BreakEvenList"}}}},"401":{"description":"No token, or not a valid one: `unauthorized`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"operationId":"getWorkspaceQuestionBreakEvens"}},"/workspaces/{id}/questions/{questionId}/variables/{variableId}/break-evens":{"post":{"tags":["switching"],"summary":"Say where a consequence changes, and how that is known — proposed until a person decides","description":"Derived (with its arithmetic), published, a published criterion, or asserted by a named party — which records that they say so, not that they are right. Where the consequence compares two options, name the pair: never a preference.","parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"id","in":"path","description":"The workspace's id (a UUID)."},{"schema":{"type":"string","format":"uuid"},"required":true,"name":"questionId","in":"path","description":"The question's id (a UUID)."},{"schema":{"type":"string","format":"uuid"},"required":true,"name":"variableId","in":"path","description":"The variable's id (a UUID)."},{"schema":{"type":"string"},"required":false,"name":"Idempotency-Key","in":"header","description":"Any unique string. The same key, method, path and body within 24 hours answers with the first response instead of creating again; the same key on a different request is 409 `idempotency_key_reused`."}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BreakEvenBody"}}}},"responses":{"201":{"description":"The break-even, proposed.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BreakEven"}}}},"401":{"description":"No token, or not a valid one: `unauthorized`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No such variable, or an option of another question.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"operationId":"postWorkspaceQuestionVariableBreakEvens"}},"/workspaces/{id}/questions/{questionId}/break-evens/{breakEvenId}":{"patch":{"tags":["switching"],"summary":"Edit a break-even — what it says, how it is known or what it compares is proposed again","parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"id","in":"path","description":"The workspace's id (a UUID)."},{"schema":{"type":"string","format":"uuid"},"required":true,"name":"questionId","in":"path","description":"The question's id (a UUID)."},{"schema":{"type":"string","format":"uuid"},"required":true,"name":"breakEvenId","in":"path","description":"The break-even's id (a UUID)."}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BreakEvenPatchBody"}}}},"responses":{"200":{"description":"The break-even.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BreakEven"}}}},"401":{"description":"No token, or not a valid one: `unauthorized`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No such break-even.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"operationId":"patchWorkspaceQuestionBreakEven"},"delete":{"tags":["switching"],"summary":"Delete a break-even","parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"id","in":"path","description":"The workspace's id (a UUID)."},{"schema":{"type":"string","format":"uuid"},"required":true,"name":"questionId","in":"path","description":"The question's id (a UUID)."},{"schema":{"type":"string","format":"uuid"},"required":true,"name":"breakEvenId","in":"path","description":"The break-even's id (a UUID)."}],"responses":{"204":{"description":"No content."},"401":{"description":"No token, or not a valid one: `unauthorized`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"operationId":"deleteWorkspaceQuestionBreakEven"}},"/workspaces/{id}/questions/{questionId}/break-evens/{breakEvenId}/decision":{"post":{"tags":["switching"],"summary":"Accept, reject or reopen a break-even","parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"id","in":"path","description":"The workspace's id (a UUID)."},{"schema":{"type":"string","format":"uuid"},"required":true,"name":"questionId","in":"path","description":"The question's id (a UUID)."},{"schema":{"type":"string","format":"uuid"},"required":true,"name":"breakEvenId","in":"path","description":"The break-even's id (a UUID)."}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DecisionBody"}}}},"responses":{"200":{"description":"The break-even, decided.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BreakEven"}}}},"401":{"description":"No token, or not a valid one: `unauthorized`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Only a person decides.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No such break-even.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"operationId":"postWorkspaceQuestionBreakEvenDecision"}},"/workspaces/{id}/questions/{questionId}/investigation":{"get":{"tags":["switching"],"summary":"What could change the choice, and why","description":"Each variable is critical if an accepted range crosses an accepted break-even the evidence gives (derived, published or a criterion), or accepted ranges lie either side of one; not-critical otherwise; incomplete if nothing accepted can be tested. A party’s asserted threshold the ranges reach is listed apart, as theirs. Reasons, not a score, and never ranked. Value choices are listed apart.","parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"id","in":"path","description":"The workspace's id (a UUID)."},{"schema":{"type":"string","format":"uuid"},"required":true,"name":"questionId","in":"path","description":"The question's id (a UUID)."}],"responses":{"200":{"description":"The investigation set.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InvestigationSet"}}}},"401":{"description":"No token, or not a valid one: `unauthorized`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No such question.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"operationId":"getWorkspaceQuestionInvestigation"}},"/workspaces/{id}/questions/{questionId}/challenges":{"get":{"tags":["challenges"],"summary":"A question’s challenges, open ones first","parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"id","in":"path","description":"The workspace's id (a UUID)."},{"schema":{"type":"string","format":"uuid"},"required":true,"name":"questionId","in":"path","description":"The question's id (a UUID)."}],"responses":{"200":{"description":"The challenges.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChallengeList"}}}},"401":{"description":"No token, or not a valid one: `unauthorized`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"operationId":"getWorkspaceQuestionChallenges"},"post":{"tags":["challenges"],"summary":"Challenge part of a question’s model","description":"Anybody who can read the question may: on a public question, anybody signed in.","parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"id","in":"path","description":"The workspace's id (a UUID)."},{"schema":{"type":"string","format":"uuid"},"required":true,"name":"questionId","in":"path","description":"The question's id (a UUID)."},{"schema":{"type":"string"},"required":false,"name":"Idempotency-Key","in":"header","description":"Any unique string. The same key, method, path and body within 24 hours answers with the first response instead of creating again; the same key on a different request is 409 `idempotency_key_reused`."}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChallengeBody"}}}},"responses":{"201":{"description":"The challenge, open.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Challenge"}}}},"401":{"description":"No token, or not a valid one: `unauthorized`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Nothing like that in this question.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"operationId":"postWorkspaceQuestionChallenges"}},"/workspaces/{id}/questions/{questionId}/challenges/{challengeId}/resolution":{"post":{"tags":["challenges"],"summary":"Say what a challenge did to the model — or reopen it","description":"The question’s editors only. The database records who resolved it, and keeps the response as the reason in the history.","parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"id","in":"path","description":"The workspace's id (a UUID)."},{"schema":{"type":"string","format":"uuid"},"required":true,"name":"questionId","in":"path","description":"The question's id (a UUID)."},{"schema":{"type":"string","format":"uuid"},"required":true,"name":"challengeId","in":"path","description":"The challenge's id (a UUID)."}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResolutionBody"}}}},"responses":{"200":{"description":"The challenge.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Challenge"}}}},"401":{"description":"No token, or not a valid one: `unauthorized`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Only a person resolves.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No such challenge, or not one you can resolve.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"No response, or it says the model changed while nothing it was raised against has.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"operationId":"postWorkspaceQuestionChallengeResolution"}},"/workspaces/{id}/questions/{questionId}/challenges/{challengeId}/requested-change":{"put":{"tags":["challenges"],"summary":"Ask for a change on an open challenge — or take the request back","description":"The question’s editors only, while it is open: it is right, and the model should change. It stays open — in To check and the stopping rule — until a person resolves it, and the request is kept beside the resolution.","parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"id","in":"path","description":"The workspace's id (a UUID)."},{"schema":{"type":"string","format":"uuid"},"required":true,"name":"questionId","in":"path","description":"The question's id (a UUID)."},{"schema":{"type":"string","format":"uuid"},"required":true,"name":"challengeId","in":"path","description":"The challenge's id (a UUID)."}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChangeRequestBody"}}}},"responses":{"200":{"description":"The challenge, still open.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Challenge"}}}},"401":{"description":"No token, or not a valid one: `unauthorized`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Only a person asks.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No such challenge, or not one you can answer.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"It is resolved: open it again first.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"operationId":"putWorkspaceQuestionChallengeRequestedChange"}},"/workspaces/{id}/questions/{questionId}/challenges/{challengeId}/changes":{"get":{"tags":["challenges"],"summary":"What has changed, since a challenge was raised, in what it was raised against","description":"The thing itself, what it hangs off and what hangs off it, from the history, oldest first. What a resolution saying the model changed is checked against.","parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"id","in":"path","description":"The workspace's id (a UUID)."},{"schema":{"type":"string","format":"uuid"},"required":true,"name":"questionId","in":"path","description":"The question's id (a UUID)."},{"schema":{"type":"string","format":"uuid"},"required":true,"name":"challengeId","in":"path","description":"The challenge's id (a UUID)."}],"responses":{"200":{"description":"The changes.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChallengeChangeList"}}}},"401":{"description":"No token, or not a valid one: `unauthorized`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No such challenge.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"operationId":"getWorkspaceQuestionChallengeChanges"}},"/workspaces/{id}/questions/{questionId}/challenges/{challengeId}":{"delete":{"tags":["challenges"],"summary":"Withdraw a challenge while it is open and unanswered","description":"By whoever raised it, or by an editor where SwingFactor raised it. A resolved challenge, or one a change was asked for on, stays on the record; the history keeps a withdrawn one.","parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"id","in":"path","description":"The workspace's id (a UUID)."},{"schema":{"type":"string","format":"uuid"},"required":true,"name":"questionId","in":"path","description":"The question's id (a UUID)."},{"schema":{"type":"string","format":"uuid"},"required":true,"name":"challengeId","in":"path","description":"The challenge's id (a UUID)."}],"responses":{"204":{"description":"No content."},"401":{"description":"No token, or not a valid one: `unauthorized`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Not yours to withdraw: resolve it instead.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No such challenge.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"It is resolved, or a change was asked for on it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"operationId":"deleteWorkspaceQuestionChallenge"}},"/workspaces/{id}/questions/{questionId}/history":{"get":{"tags":["challenges"],"summary":"Every change to a question’s model, newest first","parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"id","in":"path","description":"The workspace's id (a UUID)."},{"schema":{"type":"string","format":"uuid"},"required":true,"name":"questionId","in":"path","description":"The question's id (a UUID)."}],"responses":{"200":{"description":"The history.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RevisionList"}}}},"401":{"description":"No token, or not a valid one: `unauthorized`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"operationId":"getWorkspaceQuestionHistory"}},"/workspaces/{id}/questions/{questionId}/bearings":{"get":{"tags":["model"],"summary":"Which options each proposition bears on","parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"id","in":"path","description":"The workspace's id (a UUID)."},{"schema":{"type":"string","format":"uuid"},"required":true,"name":"questionId","in":"path","description":"The question's id (a UUID)."}],"responses":{"200":{"description":"The bearings.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BearingList"}}}},"401":{"description":"No token, or not a valid one: `unauthorized`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"operationId":"getWorkspaceQuestionBearings"}},"/workspaces/{id}/questions/{questionId}/propositions/{propositionId}/bearings":{"put":{"tags":["model"],"summary":"Say what a proposition bears on: every option, or every bearing in full","description":"Only the difference is written, so the history records what was added and what was taken away.","parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"id","in":"path","description":"The workspace's id (a UUID)."},{"schema":{"type":"string","format":"uuid"},"required":true,"name":"questionId","in":"path","description":"The question's id (a UUID)."},{"schema":{"type":"string","format":"uuid"},"required":true,"name":"propositionId","in":"path","description":"The proposition's id (a UUID)."}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BearingsBody"}}}},"responses":{"200":{"description":"Its bearings as they now stand.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PropositionBearingList"}}}},"401":{"description":"No token, or not a valid one: `unauthorized`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No such proposition, or an option that is not this question’s.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"operationId":"putWorkspaceQuestionPropositionBearings"}},"/workspaces/{id}/questions/{questionId}/propositions/{propositionId}/bearings/review":{"post":{"tags":["model"],"summary":"Say a proposition was reconsidered against every option, and what it bears on stands","description":"Stamps that a person considered it against every accepted option there is: from now, bearing on none of them means judged not to bear.","parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"id","in":"path","description":"The workspace's id (a UUID)."},{"schema":{"type":"string","format":"uuid"},"required":true,"name":"questionId","in":"path","description":"The question's id (a UUID)."},{"schema":{"type":"string","format":"uuid"},"required":true,"name":"propositionId","in":"path","description":"The proposition's id (a UUID)."}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BearingsReviewBody"}}}},"responses":{"204":{"description":"No content."},"401":{"description":"No token, or not a valid one: `unauthorized`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Only a person reconsiders.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"operationId":"postWorkspaceQuestionPropositionBearingsReview"}},"/workspaces/{id}/review":{"get":{"tags":["model"],"summary":"What waits on a person, across the workspace’s questions","description":"Everything proposed and not yet decided, every open challenge, and every accepted empirical claim that states nothing which would change it — grouped by question, with each question’s readiness. Its members only.","parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"id","in":"path","description":"The workspace's id (a UUID)."}],"responses":{"200":{"description":"The queue.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReviewQueue"}}}},"401":{"description":"No token, or not a valid one: `unauthorized`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"operationId":"getWorkspaceReview"}},"/workspaces/{id}/questions/{questionId}/symmetry":{"get":{"tags":["model"],"summary":"The same counts for every option, side by side","description":"Is the case for each option tested as hard as the others? Propositions by verdict, the accepted evidence behind them, and the challenges raised against them — counts, never a score.","parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"id","in":"path","description":"The workspace's id (a UUID)."},{"schema":{"type":"string","format":"uuid"},"required":true,"name":"questionId","in":"path","description":"The question's id (a UUID)."}],"responses":{"200":{"description":"The counts.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Symmetry"}}}},"401":{"description":"No token, or not a valid one: `unauthorized`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No such question.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"operationId":"getWorkspaceQuestionSymmetry"}},"/workspaces/{id}/questions/{questionId}/briefing":{"get":{"tags":["model"],"summary":"The briefing: the whole model, and what the database concludes from it","parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"id","in":"path","description":"The workspace's id (a UUID)."},{"schema":{"type":"string","format":"uuid"},"required":true,"name":"questionId","in":"path","description":"The question's id (a UUID)."}],"responses":{"200":{"description":"The briefing.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/QuestionBrief"}}}},"401":{"description":"No token, or not a valid one: `unauthorized`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No such question.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"operationId":"getWorkspaceQuestionBriefing"}},"/workspaces/{id}/questions/{questionId}/counts":{"get":{"tags":["model"],"summary":"The question’s counts: propositions by verdict and by strength, and what waits","parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"id","in":"path","description":"The workspace's id (a UUID)."},{"schema":{"type":"string","format":"uuid"},"required":true,"name":"questionId","in":"path","description":"The question's id (a UUID)."}],"responses":{"200":{"description":"The counts.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/QuestionCounts"},{"description":"Propositions by verdict and by strength, and what waits: counted in SQL."}]}}}},"401":{"description":"No token, or not a valid one: `unauthorized`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No such question.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"operationId":"getWorkspaceQuestionCounts"}},"/workspaces/{id}/questions/{questionId}/claims-open":{"get":{"tags":["model"],"summary":"Which claims have something still open on them","parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"id","in":"path","description":"The workspace's id (a UUID)."},{"schema":{"type":"string","format":"uuid"},"required":true,"name":"questionId","in":"path","description":"The question's id (a UUID)."}],"responses":{"200":{"description":"The open claims.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ClaimsOpen"}}}},"401":{"description":"No token, or not a valid one: `unauthorized`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No such question.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"operationId":"getWorkspaceQuestionClaimsOpen"}},"/workspaces/{id}/questions/{questionId}/explore":{"get":{"tags":["model"],"summary":"Each option read from where the accepted ranges put it, filtered as the reader asks","parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"id","in":"path","description":"The workspace's id (a UUID)."},{"schema":{"type":"string","format":"uuid"},"required":true,"name":"questionId","in":"path","description":"The question's id (a UUID)."},{"schema":{"type":"string","enum":["all","transition","early","medium","long","every"],"description":"One horizon, with what names none; all (default) for every one."},"required":false,"description":"One horizon, with what names none; all (default) for every one.","name":"horizon","in":"query"},{"schema":{"anyOf":[{"type":"string","enum":["all"]},{"type":"string","format":"uuid"}],"description":"One scenario's id, with what names none; all (default) for every one."},"required":false,"description":"One scenario's id, with what names none; all (default) for every one.","name":"scenario","in":"query"},{"schema":{"type":"string","enum":["all","facts","values"],"description":"facts: empirical and mixed propositions; values: normative ones; all (default): every role."},"required":false,"description":"facts: empirical and mixed propositions; values: normative ones; all (default): every role.","name":"show","in":"query"},{"schema":{"type":"string","enum":["decided","open","all"],"description":"decided (default): accepted propositions; open: every one not rejected; all: rejected too."},"required":false,"description":"decided (default): accepted propositions; open: every one not rejected; all: rejected too.","name":"verdicts","in":"query"},{"schema":{"type":"string","enum":["any","moderate","strong"],"description":"moderate: moderate or strong evidence; strong: strong alone; any (default)."},"required":false,"description":"moderate: moderate or strong evidence; strong: strong alone; any (default).","name":"strength","in":"query"}],"responses":{"200":{"description":"Every option’s standing.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Explore"}}}},"401":{"description":"No token, or not a valid one: `unauthorized`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No such question.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"operationId":"getWorkspaceQuestionExplore"}},"/workspaces/{id}/questions/{questionId}/snapshots":{"get":{"tags":["model"],"summary":"The question’s snapshots, newest first","parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"id","in":"path","description":"The workspace's id (a UUID)."},{"schema":{"type":"string","format":"uuid"},"required":true,"name":"questionId","in":"path","description":"The question's id (a UUID)."}],"responses":{"200":{"description":"The snapshots, without their content.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SnapshotList"}}}},"401":{"description":"No token, or not a valid one: `unauthorized`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"operationId":"getWorkspaceQuestionSnapshots"},"post":{"tags":["model"],"summary":"Freeze the model under a name","parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"id","in":"path","description":"The workspace's id (a UUID)."},{"schema":{"type":"string","format":"uuid"},"required":true,"name":"questionId","in":"path","description":"The question's id (a UUID)."},{"schema":{"type":"string"},"required":false,"name":"Idempotency-Key","in":"header","description":"Any unique string. The same key, method, path and body within 24 hours answers with the first response instead of creating again; the same key on a different request is 409 `idempotency_key_reused`."}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SnapshotBody"}}}},"responses":{"201":{"description":"The snapshot.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Snapshot"}}}},"401":{"description":"No token, or not a valid one: `unauthorized`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No such question.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"operationId":"postWorkspaceQuestionSnapshots"}},"/workspaces/{id}/questions/{questionId}/snapshots/{snapshotId}":{"get":{"tags":["model"],"summary":"A snapshot, whole, as it was frozen","parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"id","in":"path","description":"The workspace's id (a UUID)."},{"schema":{"type":"string","format":"uuid"},"required":true,"name":"questionId","in":"path","description":"The question's id (a UUID)."},{"schema":{"type":"string","format":"uuid"},"required":true,"name":"snapshotId","in":"path","description":"The snapshot's id (a UUID)."}],"responses":{"200":{"description":"The snapshot.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SnapshotWithContent"}}}},"401":{"description":"No token, or not a valid one: `unauthorized`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No such snapshot.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"operationId":"getWorkspaceQuestionSnapshot"},"delete":{"tags":["model"],"summary":"Delete a snapshot","parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"id","in":"path","description":"The workspace's id (a UUID)."},{"schema":{"type":"string","format":"uuid"},"required":true,"name":"questionId","in":"path","description":"The question's id (a UUID)."},{"schema":{"type":"string","format":"uuid"},"required":true,"name":"snapshotId","in":"path","description":"The snapshot's id (a UUID)."}],"responses":{"204":{"description":"No content."},"401":{"description":"No token, or not a valid one: `unauthorized`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No such snapshot.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"operationId":"deleteWorkspaceQuestionSnapshot"}},"/workspaces/{id}/questions/{questionId}/snapshots/{snapshotId}/comparison":{"get":{"tags":["model"],"summary":"What differs between a snapshot and a later one, or the live model","description":"Thing by thing: each added, removed, or changed, and for a change each field before and after — the verdicts on what could change the choice included.","parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"id","in":"path","description":"The workspace's id (a UUID)."},{"schema":{"type":"string","format":"uuid"},"required":true,"name":"questionId","in":"path","description":"The question's id (a UUID)."},{"schema":{"type":"string","format":"uuid"},"required":true,"name":"snapshotId","in":"path","description":"The snapshot's id (a UUID)."},{"schema":{"type":"string","format":"uuid","description":"A later snapshot to compare with. Absent: the live model."},"required":false,"description":"A later snapshot to compare with. Absent: the live model.","name":"with","in":"query"}],"responses":{"200":{"description":"The differences.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SnapshotComparison"}}}},"401":{"description":"No token, or not a valid one: `unauthorized`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No such snapshot.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"operationId":"getWorkspaceQuestionSnapshotComparison"}},"/workspaces/{id}/questions/{questionId}/frontier":{"get":{"tags":["model"],"summary":"The configuration frontier: each way of taking an option, asked the same questions","parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"id","in":"path","description":"The workspace's id (a UUID)."},{"schema":{"type":"string","format":"uuid"},"required":true,"name":"questionId","in":"path","description":"The question's id (a UUID)."}],"responses":{"200":{"description":"The frontier.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Frontier"},{"description":"The configuration frontier: each way of taking an option, asked the same questions. Counts what is said; compares nothing."}]}}}},"401":{"description":"No token, or not a valid one: `unauthorized`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No such question.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"operationId":"getWorkspaceQuestionFrontier"}},"/workspaces/{id}/questions/{questionId}/configurations":{"post":{"tags":["model"],"summary":"Add a configuration: a concrete way of taking one of the options","parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"id","in":"path","description":"The workspace's id (a UUID)."},{"schema":{"type":"string","format":"uuid"},"required":true,"name":"questionId","in":"path","description":"The question's id (a UUID)."},{"schema":{"type":"string"},"required":false,"name":"Idempotency-Key","in":"header","description":"Any unique string. The same key, method, path and body within 24 hours answers with the first response instead of creating again; the same key on a different request is 409 `idempotency_key_reused`."}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConfigurationBody"}}}},"responses":{"201":{"description":"The frontier, with it.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Frontier"},{"description":"The configuration frontier: each way of taking an option, asked the same questions. Counts what is said; compares nothing."}]}}}},"401":{"description":"No token, or not a valid one: `unauthorized`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No such question or option.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"operationId":"postWorkspaceQuestionConfigurations"}},"/workspaces/{id}/questions/{questionId}/configurations/{configurationId}":{"patch":{"tags":["model"],"summary":"Rename or describe a configuration","parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"id","in":"path","description":"The workspace's id (a UUID)."},{"schema":{"type":"string","format":"uuid"},"required":true,"name":"questionId","in":"path","description":"The question's id (a UUID)."},{"schema":{"type":"string","format":"uuid"},"required":true,"name":"configurationId","in":"path","description":"The configuration's id (a UUID)."}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConfigurationPatchBody"}}}},"responses":{"200":{"description":"The frontier.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Frontier"},{"description":"The configuration frontier: each way of taking an option, asked the same questions. Counts what is said; compares nothing."}]}}}},"401":{"description":"No token, or not a valid one: `unauthorized`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No such configuration.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"operationId":"patchWorkspaceQuestionConfiguration"},"delete":{"tags":["model"],"summary":"Delete a configuration, and its answers","parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"id","in":"path","description":"The workspace's id (a UUID)."},{"schema":{"type":"string","format":"uuid"},"required":true,"name":"questionId","in":"path","description":"The question's id (a UUID)."},{"schema":{"type":"string","format":"uuid"},"required":true,"name":"configurationId","in":"path","description":"The configuration's id (a UUID)."}],"responses":{"204":{"description":"No content."},"401":{"description":"No token, or not a valid one: `unauthorized`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No such configuration.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"operationId":"deleteWorkspaceQuestionConfiguration"}},"/workspaces/{id}/questions/{questionId}/dimensions":{"post":{"tags":["model"],"summary":"Add a factor: what every option is compared on","parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"id","in":"path","description":"The workspace's id (a UUID)."},{"schema":{"type":"string","format":"uuid"},"required":true,"name":"questionId","in":"path","description":"The question's id (a UUID)."},{"schema":{"type":"string"},"required":false,"name":"Idempotency-Key","in":"header","description":"Any unique string. The same key, method, path and body within 24 hours answers with the first response instead of creating again; the same key on a different request is 409 `idempotency_key_reused`."}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DimensionBody"}}}},"responses":{"201":{"description":"The frontier, with it.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Frontier"},{"description":"The configuration frontier: each way of taking an option, asked the same questions. Counts what is said; compares nothing."}]}}}},"401":{"description":"No token, or not a valid one: `unauthorized`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No such question.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"operationId":"postWorkspaceQuestionDimensions"}},"/workspaces/{id}/questions/{questionId}/dimensions/{dimensionId}":{"patch":{"tags":["model"],"summary":"Reword a factor","parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"id","in":"path","description":"The workspace's id (a UUID)."},{"schema":{"type":"string","format":"uuid"},"required":true,"name":"questionId","in":"path","description":"The question's id (a UUID)."},{"schema":{"type":"string","format":"uuid"},"required":true,"name":"dimensionId","in":"path","description":"The dimension's id (a UUID)."}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DimensionPatchBody"}}}},"responses":{"200":{"description":"The frontier.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Frontier"},{"description":"The configuration frontier: each way of taking an option, asked the same questions. Counts what is said; compares nothing."}]}}}},"401":{"description":"No token, or not a valid one: `unauthorized`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No such dimension.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"operationId":"patchWorkspaceQuestionDimension"},"delete":{"tags":["model"],"summary":"Delete a factor, and its answers","parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"id","in":"path","description":"The workspace's id (a UUID)."},{"schema":{"type":"string","format":"uuid"},"required":true,"name":"questionId","in":"path","description":"The question's id (a UUID)."},{"schema":{"type":"string","format":"uuid"},"required":true,"name":"dimensionId","in":"path","description":"The dimension's id (a UUID)."}],"responses":{"204":{"description":"No content."},"401":{"description":"No token, or not a valid one: `unauthorized`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No such dimension.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"operationId":"deleteWorkspaceQuestionDimension"}},"/workspaces/{id}/questions/{questionId}/dimensions/{dimensionId}/move":{"post":{"tags":["model"],"summary":"Move a factor one place","parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"id","in":"path","description":"The workspace's id (a UUID)."},{"schema":{"type":"string","format":"uuid"},"required":true,"name":"questionId","in":"path","description":"The question's id (a UUID)."},{"schema":{"type":"string","format":"uuid"},"required":true,"name":"dimensionId","in":"path","description":"The dimension's id (a UUID)."}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MoveBody"}}}},"responses":{"200":{"description":"The frontier, in its new order.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Frontier"},{"description":"The configuration frontier: each way of taking an option, asked the same questions. Counts what is said; compares nothing."}]}}}},"401":{"description":"No token, or not a valid one: `unauthorized`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No such factor.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"operationId":"postWorkspaceQuestionDimensionMove"}},"/workspaces/{id}/questions/{questionId}/where-it-stands":{"get":{"tags":["model"],"summary":"Every factor against every option","description":"Each option's answer to each factor, any way's, and the claims that establish it there with their ranges — proposed beside accepted, each with its status. It compares, counts and orders nothing between the options.","parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"id","in":"path","description":"The workspace's id (a UUID)."},{"schema":{"type":"string","format":"uuid"},"required":true,"name":"questionId","in":"path","description":"The question's id (a UUID)."}],"responses":{"200":{"description":"Where it stands.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WhereItStands"}}}},"401":{"description":"No token, or not a valid one: `unauthorized`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No such question.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"operationId":"getWorkspaceQuestionWhereItStands"}},"/workspaces/{id}/questions/{questionId}/suppose":{"post":{"tags":["model"],"summary":"Try a change: what goes with supposing claims do not hold, or numbers take values","x-read-only":true,"description":"Read-only, and kept nowhere: for each accepted claim supposed not to hold, what rests on it and each option’s answer that loses its footing; for each number at a value, which side of each threshold on it the value falls, beside where the accepted ranges are now. It reads no view, and compares no option with another.","parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"id","in":"path","description":"The workspace's id (a UUID)."},{"schema":{"type":"string","format":"uuid"},"required":true,"name":"questionId","in":"path","description":"The question's id (a UUID)."}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuppositionBody"}}}},"responses":{"200":{"description":"What goes with it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Supposed"}}}},"401":{"description":"No token, or not a valid one: `unauthorized`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No such question, or a claim or number it does not accept.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Not a supposition it can read.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"operationId":"postWorkspaceQuestionSuppose"}},"/workspaces/{id}/questions/{questionId}/frontier/cells":{"put":{"tags":["model"],"summary":"Say an option’s answer to a factor, or a way of taking it — or, empty, unsay it","parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"id","in":"path","description":"The workspace's id (a UUID)."},{"schema":{"type":"string","format":"uuid"},"required":true,"name":"questionId","in":"path","description":"The question's id (a UUID)."}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FrontierCellBody"}}}},"responses":{"200":{"description":"The frontier.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Frontier"},{"description":"The configuration frontier: each way of taking an option, asked the same questions. Counts what is said; compares nothing."}]}}}},"401":{"description":"No token, or not a valid one: `unauthorized`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No such configuration or dimension.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"operationId":"putWorkspaceQuestionFrontierCells"}},"/workspaces/{id}/questions/{questionId}/configurations/{configurationId}/decision":{"post":{"tags":["model"],"summary":"Accept, reject or reopen a configuration","description":"The database records who decided and when. A request with no person behind it is refused.","parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"id","in":"path","description":"The workspace's id (a UUID)."},{"schema":{"type":"string","format":"uuid"},"required":true,"name":"questionId","in":"path","description":"The question's id (a UUID)."},{"schema":{"type":"string","format":"uuid"},"required":true,"name":"configurationId","in":"path","description":"The configuration's id (a UUID)."}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DecisionBody"}}}},"responses":{"200":{"description":"The frontier.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Frontier"},{"description":"The configuration frontier: each way of taking an option, asked the same questions. Counts what is said; compares nothing."}]}}}},"401":{"description":"No token, or not a valid one: `unauthorized`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Only a person decides.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No such configuration.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"operationId":"postWorkspaceQuestionConfigurationDecision"}},"/workspaces/{id}/questions/{questionId}/dimensions/{dimensionId}/decision":{"post":{"tags":["model"],"summary":"Accept, reject or reopen a question on the frontier","description":"The database records who decided and when. A request with no person behind it is refused.","parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"id","in":"path","description":"The workspace's id (a UUID)."},{"schema":{"type":"string","format":"uuid"},"required":true,"name":"questionId","in":"path","description":"The question's id (a UUID)."},{"schema":{"type":"string","format":"uuid"},"required":true,"name":"dimensionId","in":"path","description":"The dimension's id (a UUID)."}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DecisionBody"}}}},"responses":{"200":{"description":"The frontier.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Frontier"},{"description":"The configuration frontier: each way of taking an option, asked the same questions. Counts what is said; compares nothing."}]}}}},"401":{"description":"No token, or not a valid one: `unauthorized`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Only a person decides.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No such dimension.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"operationId":"postWorkspaceQuestionDimensionDecision"}},"/workspaces/{id}/questions/{questionId}/frontier/cells/{cellId}/decision":{"post":{"tags":["model"],"summary":"Accept, reject or reopen a frontier answer","description":"The database records who decided and when. A request with no person behind it is refused.","parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"id","in":"path","description":"The workspace's id (a UUID)."},{"schema":{"type":"string","format":"uuid"},"required":true,"name":"questionId","in":"path","description":"The question's id (a UUID)."},{"schema":{"type":"string","format":"uuid"},"required":true,"name":"cellId","in":"path","description":"The cell's id (a UUID)."}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DecisionBody"}}}},"responses":{"200":{"description":"The frontier.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Frontier"},{"description":"The configuration frontier: each way of taking an option, asked the same questions. Counts what is said; compares nothing."}]}}}},"401":{"description":"No token, or not a valid one: `unauthorized`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Only a person decides.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No such cell.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"operationId":"postWorkspaceQuestionFrontierCellDecision"}},"/workspaces/{id}/questions/{questionId}/frontier/assessments":{"post":{"tags":["model"],"summary":"Say how a proposition fares under a configuration — and a scenario, where it turns on one","description":"One verdict per proposition, configuration and scenario. A conditional one says on what.","parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"id","in":"path","description":"The workspace's id (a UUID)."},{"schema":{"type":"string","format":"uuid"},"required":true,"name":"questionId","in":"path","description":"The question's id (a UUID)."},{"schema":{"type":"string"},"required":false,"name":"Idempotency-Key","in":"header","description":"Any unique string. The same key, method, path and body within 24 hours answers with the first response instead of creating again; the same key on a different request is 409 `idempotency_key_reused`."}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AssessmentBody"}}}},"responses":{"201":{"description":"The frontier, with it.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Frontier"},{"description":"The configuration frontier: each way of taking an option, asked the same questions. Counts what is said; compares nothing."}]}}}},"401":{"description":"No token, or not a valid one: `unauthorized`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No such proposition, configuration or scenario.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Already assessed there.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"A conditional verdict with no conditions, or an unknown verdict.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"operationId":"postWorkspaceQuestionFrontierAssessments"}},"/workspaces/{id}/questions/{questionId}/frontier/assessments/{assessmentId}":{"patch":{"tags":["model"],"summary":"Change a verdict, its conditions, source or scenario","description":"A new verdict, conditions or scenario reopens its decision.","parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"id","in":"path","description":"The workspace's id (a UUID)."},{"schema":{"type":"string","format":"uuid"},"required":true,"name":"questionId","in":"path","description":"The question's id (a UUID)."},{"schema":{"type":"string","format":"uuid"},"required":true,"name":"assessmentId","in":"path","description":"The assessment's id (a UUID)."}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AssessmentPatchBody"}}}},"responses":{"200":{"description":"The frontier.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Frontier"},{"description":"The configuration frontier: each way of taking an option, asked the same questions. Counts what is said; compares nothing."}]}}}},"401":{"description":"No token, or not a valid one: `unauthorized`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No such assessment.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"operationId":"patchWorkspaceQuestionFrontierAssessment"},"delete":{"tags":["model"],"summary":"Delete an assessment","parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"id","in":"path","description":"The workspace's id (a UUID)."},{"schema":{"type":"string","format":"uuid"},"required":true,"name":"questionId","in":"path","description":"The question's id (a UUID)."},{"schema":{"type":"string","format":"uuid"},"required":true,"name":"assessmentId","in":"path","description":"The assessment's id (a UUID)."}],"responses":{"204":{"description":"No content."},"401":{"description":"No token, or not a valid one: `unauthorized`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No such assessment.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"operationId":"deleteWorkspaceQuestionFrontierAssessment"}},"/workspaces/{id}/questions/{questionId}/frontier/assessments/{assessmentId}/decision":{"post":{"tags":["model"],"summary":"Accept, reject or reopen an assessment","description":"The database records who decided and when. A request with no person behind it is refused.","parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"id","in":"path","description":"The workspace's id (a UUID)."},{"schema":{"type":"string","format":"uuid"},"required":true,"name":"questionId","in":"path","description":"The question's id (a UUID)."},{"schema":{"type":"string","format":"uuid"},"required":true,"name":"assessmentId","in":"path","description":"The assessment's id (a UUID)."}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DecisionBody"}}}},"responses":{"200":{"description":"The frontier.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Frontier"},{"description":"The configuration frontier: each way of taking an option, asked the same questions. Counts what is said; compares nothing."}]}}}},"401":{"description":"No token, or not a valid one: `unauthorized`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Only a person decides.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No such assessment.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"operationId":"postWorkspaceQuestionFrontierAssessmentDecision"}},"/workspaces/{id}/questions/{questionId}/frontier/assessments/{assessmentId}/confirmation":{"post":{"tags":["model"],"summary":"Say an assessment still holds after its configuration’s answer changed","description":"An accepted answer of its configuration changed after the assessment was made: part of the configuration basis it was assessed against changed, nothing more. This clears that flag and keeps why in its history. Editing it or deciding it otherwise clears it too.","parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"id","in":"path","description":"The workspace's id (a UUID)."},{"schema":{"type":"string","format":"uuid"},"required":true,"name":"questionId","in":"path","description":"The question's id (a UUID)."},{"schema":{"type":"string","format":"uuid"},"required":true,"name":"assessmentId","in":"path","description":"The assessment's id (a UUID)."}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConfirmBody"}}}},"responses":{"200":{"description":"The frontier.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Frontier"},{"description":"The configuration frontier: each way of taking an option, asked the same questions. Counts what is said; compares nothing."}]}}}},"401":{"description":"No token, or not a valid one: `unauthorized`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No such assessment waits to be re-checked.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"No reason given.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"operationId":"postWorkspaceQuestionFrontierAssessmentConfirmation"}},"/workspaces/{id}/questions/{questionId}/groups":{"get":{"tags":["model"],"summary":"The groups of people the decision affects","parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"id","in":"path","description":"The workspace's id (a UUID)."},{"schema":{"type":"string","format":"uuid"},"required":true,"name":"questionId","in":"path","description":"The question's id (a UUID)."}],"responses":{"200":{"description":"The groups, in order.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GroupList"}}}},"401":{"description":"No token, or not a valid one: `unauthorized`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No such question.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"operationId":"getWorkspaceQuestionGroups"},"post":{"tags":["model"],"summary":"Name a group of people the decision affects — proposed until a person decides","parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"id","in":"path","description":"The workspace's id (a UUID)."},{"schema":{"type":"string","format":"uuid"},"required":true,"name":"questionId","in":"path","description":"The question's id (a UUID)."},{"schema":{"type":"string"},"required":false,"name":"Idempotency-Key","in":"header","description":"Any unique string. The same key, method, path and body within 24 hours answers with the first response instead of creating again; the same key on a different request is 409 `idempotency_key_reused`."}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GroupBody"}}}},"responses":{"201":{"description":"The groups, with it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GroupList"}}}},"401":{"description":"No token, or not a valid one: `unauthorized`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No such question.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"The question already names that group.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"operationId":"postWorkspaceQuestionGroups"}},"/workspaces/{id}/questions/{questionId}/groups/{groupId}":{"patch":{"tags":["model"],"summary":"Rename or describe a group — a new name is proposed again","parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"id","in":"path","description":"The workspace's id (a UUID)."},{"schema":{"type":"string","format":"uuid"},"required":true,"name":"questionId","in":"path","description":"The question's id (a UUID)."},{"schema":{"type":"string","format":"uuid"},"required":true,"name":"groupId","in":"path","description":"The group's id (a UUID)."}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GroupPatchBody"}}}},"responses":{"200":{"description":"The groups.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GroupList"}}}},"401":{"description":"No token, or not a valid one: `unauthorized`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No such group.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"operationId":"patchWorkspaceQuestionGroup"},"delete":{"tags":["model"],"summary":"Delete a group, and what each claim said of it","parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"id","in":"path","description":"The workspace's id (a UUID)."},{"schema":{"type":"string","format":"uuid"},"required":true,"name":"questionId","in":"path","description":"The question's id (a UUID)."},{"schema":{"type":"string","format":"uuid"},"required":true,"name":"groupId","in":"path","description":"The group's id (a UUID)."}],"responses":{"204":{"description":"No content."},"401":{"description":"No token, or not a valid one: `unauthorized`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No such group.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"operationId":"deleteWorkspaceQuestionGroup"}},"/workspaces/{id}/questions/{questionId}/groups/{groupId}/decision":{"post":{"tags":["model"],"summary":"Accept, reject or reopen a group","description":"The database records who decided and when. A request with no person behind it is refused.","parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"id","in":"path","description":"The workspace's id (a UUID)."},{"schema":{"type":"string","format":"uuid"},"required":true,"name":"questionId","in":"path","description":"The question's id (a UUID)."},{"schema":{"type":"string","format":"uuid"},"required":true,"name":"groupId","in":"path","description":"The group's id (a UUID)."}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DecisionBody"}}}},"responses":{"200":{"description":"The groups.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GroupList"}}}},"401":{"description":"No token, or not a valid one: `unauthorized`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Only a person decides.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No such group.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"operationId":"postWorkspaceQuestionGroupDecision"}},"/workspaces/{id}/questions/{questionId}/impacts":{"get":{"tags":["model"],"summary":"Which groups each claim affects, and how","parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"id","in":"path","description":"The workspace's id (a UUID)."},{"schema":{"type":"string","format":"uuid"},"required":true,"name":"questionId","in":"path","description":"The question's id (a UUID)."}],"responses":{"200":{"description":"Every claim’s groups.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ImpactList"}}}},"401":{"description":"No token, or not a valid one: `unauthorized`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"operationId":"getWorkspaceQuestionImpacts"}},"/workspaces/{id}/questions/{questionId}/propositions/{propositionId}/impacts":{"put":{"tags":["model"],"summary":"Say every group a claim affects, and how","description":"Only the difference is written, so the history records what was added, changed and taken away.","parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"id","in":"path","description":"The workspace's id (a UUID)."},{"schema":{"type":"string","format":"uuid"},"required":true,"name":"questionId","in":"path","description":"The question's id (a UUID)."},{"schema":{"type":"string","format":"uuid"},"required":true,"name":"propositionId","in":"path","description":"The proposition's id (a UUID)."}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ImpactsBody"}}}},"responses":{"200":{"description":"Its groups as they now stand.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ImpactList"}}}},"401":{"description":"No token, or not a valid one: `unauthorized`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No such proposition, or a group that is not this question’s.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"An effect that is neither delivery nor borne.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"operationId":"putWorkspaceQuestionPropositionImpacts"}},"/workspaces/{id}/questions/{questionId}/decisions":{"get":{"tags":["model"],"summary":"What was decided on the question, and what happened since","parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"id","in":"path","description":"The workspace's id (a UUID)."},{"schema":{"type":"string","format":"uuid"},"required":true,"name":"questionId","in":"path","description":"The question's id (a UUID)."}],"responses":{"200":{"description":"The decisions, newest first.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DecisionList"}}}},"401":{"description":"No token, or not a valid one: `unauthorized`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No such question.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"operationId":"getWorkspaceQuestionDecisions"},"post":{"tags":["model"],"summary":"Record a decision: the option chosen, why, and the model as it was","description":"Recorded by a person and never rewritten. Unless a snapshot is named, the model is frozen now, named for the decision; that snapshot is kept while the decision stands.","parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"id","in":"path","description":"The workspace's id (a UUID)."},{"schema":{"type":"string","format":"uuid"},"required":true,"name":"questionId","in":"path","description":"The question's id (a UUID)."},{"schema":{"type":"string"},"required":false,"name":"Idempotency-Key","in":"header","description":"Any unique string. The same key, method, path and body within 24 hours answers with the first response instead of creating again; the same key on a different request is 409 `idempotency_key_reused`."}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RecordDecisionBody"}}}},"responses":{"201":{"description":"The decisions, with it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DecisionList"}}}},"401":{"description":"No token, or not a valid one: `unauthorized`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Only a person records a decision.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No such option or snapshot.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"No reason given.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"operationId":"postWorkspaceQuestionDecisions"}},"/workspaces/{id}/questions/{questionId}/decisions/{decisionId}/outcomes":{"post":{"tags":["model"],"summary":"Record what happened after a decision, and whether a claim held","description":"Recorded by a person and never rewritten.","parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"id","in":"path","description":"The workspace's id (a UUID)."},{"schema":{"type":"string","format":"uuid"},"required":true,"name":"questionId","in":"path","description":"The question's id (a UUID)."},{"schema":{"type":"string","format":"uuid"},"required":true,"name":"decisionId","in":"path","description":"The decision's id (a UUID)."},{"schema":{"type":"string"},"required":false,"name":"Idempotency-Key","in":"header","description":"Any unique string. The same key, method, path and body within 24 hours answers with the first response instead of creating again; the same key on a different request is 409 `idempotency_key_reused`."}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/OutcomeBody"}}}},"responses":{"201":{"description":"The decisions, with it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DecisionList"}}}},"401":{"description":"No token, or not a valid one: `unauthorized`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No such decision or proposition.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"operationId":"postWorkspaceQuestionDecisionOutcomes"}},"/workspaces/{id}/questions/{questionId}/sources":{"get":{"tags":["sources"],"summary":"The documents and pages a question is argued from","parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"id","in":"path","description":"The workspace's id (a UUID)."},{"schema":{"type":"string","format":"uuid"},"required":true,"name":"questionId","in":"path","description":"The question's id (a UUID)."}],"responses":{"200":{"description":"The sources.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/QuestionSourceList"}}}},"401":{"description":"No token, or not a valid one: `unauthorized`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"operationId":"getWorkspaceQuestionSources"},"post":{"tags":["sources"],"summary":"Put a library item to a question","description":"A document or a web page already in the workspace’s library. Add one at /workspaces/{id}/content first: an upload, or a page by its address.","parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"id","in":"path","description":"The workspace's id (a UUID)."},{"schema":{"type":"string","format":"uuid"},"required":true,"name":"questionId","in":"path","description":"The question's id (a UUID)."},{"schema":{"type":"string"},"required":false,"name":"Idempotency-Key","in":"header","description":"Any unique string. The same key, method, path and body within 24 hours answers with the first response instead of creating again; the same key on a different request is 409 `idempotency_key_reused`."}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SourceBody"}}}},"responses":{"201":{"description":"The source.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/QuestionSource"}}}},"400":{"description":"`already_a_source`: it is already a source of this question.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"No token, or not a valid one: `unauthorized`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No such question, or nothing with that id in the library.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"operationId":"postWorkspaceQuestionSources"}},"/workspaces/{id}/questions/{questionId}/sources/{sourceId}":{"delete":{"tags":["sources"],"summary":"Take a source off a question","description":"The library keeps it, and the evidence that cited it keeps its words.","parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"id","in":"path","description":"The workspace's id (a UUID)."},{"schema":{"type":"string","format":"uuid"},"required":true,"name":"questionId","in":"path","description":"The question's id (a UUID)."},{"schema":{"type":"string","format":"uuid"},"required":true,"name":"sourceId","in":"path","description":"The source's id (a UUID)."}],"responses":{"204":{"description":"Taken off."},"401":{"description":"No token, or not a valid one: `unauthorized`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No such source on this question.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"operationId":"deleteWorkspaceQuestionSource"}},"/workspaces/{id}/source-uses":{"get":{"tags":["sources"],"summary":"Which questions each library item serves","description":"One entry per item that is a source of something, with those questions. The library itself is /workspaces/{id}/content. Its members only.","parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"id","in":"path","description":"The workspace's id (a UUID)."}],"responses":{"200":{"description":"The uses.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SourceUsesList"}}}},"401":{"description":"No token, or not a valid one: `unauthorized`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"operationId":"getWorkspaceSourceUses"}},"/workspaces/{id}/questions/{questionId}/stance":{"get":{"tags":["stances"],"summary":"Your own stance on the question, or a body’s you record for","parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"id","in":"path","description":"The workspace's id (a UUID)."},{"schema":{"type":"string","format":"uuid"},"required":true,"name":"questionId","in":"path","description":"The question's id (a UUID)."},{"schema":{"type":"string","format":"uuid","description":"A body's id, for the stance you record for it. Absent: your own."},"required":false,"description":"A body's id, for the stance you record for it. Absent: your own.","name":"body","in":"query"}],"responses":{"200":{"description":"The stance, or none yet.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MyStance"}}}},"401":{"description":"No token, or not a valid one: `unauthorized`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"operationId":"getWorkspaceQuestionStance"},"put":{"tags":["stances"],"summary":"Save your stance: a new, immutable version","description":"Every statement of the new version, whole. Nothing is required; a single sentence or a single choice is a whole stance. A body’s stance is recorded by someone it authorised, each statement with its adoption record.","parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"id","in":"path","description":"The workspace's id (a UUID)."},{"schema":{"type":"string","format":"uuid"},"required":true,"name":"questionId","in":"path","description":"The question's id (a UUID)."}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StanceBody"}}}},"responses":{"200":{"description":"The stance at its new version.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Stance"}}}},"401":{"description":"No token, or not a valid one: `unauthorized`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Only its holder writes a stance — never a draft, a service or the assistant.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No such question, or a reference to nothing in its model.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"A statement lacks what its kind needs.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"operationId":"putWorkspaceQuestionStance"}},"/workspaces/{id}/questions/{questionId}/stances/{stanceId}":{"get":{"tags":["stances"],"summary":"A stance, as its reader may see it","parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"id","in":"path","description":"The workspace's id (a UUID)."},{"schema":{"type":"string","format":"uuid"},"required":true,"name":"questionId","in":"path","description":"The question's id (a UUID)."},{"schema":{"type":"string","format":"uuid"},"required":true,"name":"stanceId","in":"path","description":"The stance's id (a UUID)."},{"schema":{"type":"integer","minimum":1,"description":"A version number, from 1. Absent: the latest."},"required":false,"description":"A version number, from 1. Absent: the latest.","name":"version","in":"query"}],"responses":{"200":{"description":"The stance.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Stance"}}}},"401":{"description":"No token, or not a valid one: `unauthorized`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No such stance you can read.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"operationId":"getWorkspaceQuestionStanceByStanceId"},"delete":{"tags":["stances"],"summary":"Delete a stance, every version with it","parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"id","in":"path","description":"The workspace's id (a UUID)."},{"schema":{"type":"string","format":"uuid"},"required":true,"name":"questionId","in":"path","description":"The question's id (a UUID)."},{"schema":{"type":"string","format":"uuid"},"required":true,"name":"stanceId","in":"path","description":"The stance's id (a UUID)."}],"responses":{"204":{"description":"No content."},"401":{"description":"No token, or not a valid one: `unauthorized`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Only its holder writes a stance — never a draft, a service or the assistant.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No such stance you can read.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"operationId":"deleteWorkspaceQuestionStance"}},"/workspaces/{id}/questions/{questionId}/stances/{stanceId}/readings":{"get":{"tags":["stances"],"summary":"What SwingFactor derives from a stance","description":"Line readings through the shared model’s one scope comparison, which conditions hold, what changed since the version, and conflicts between the holder’s own recorded statements. Descriptive facts only.","parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"id","in":"path","description":"The workspace's id (a UUID)."},{"schema":{"type":"string","format":"uuid"},"required":true,"name":"questionId","in":"path","description":"The question's id (a UUID)."},{"schema":{"type":"string","format":"uuid"},"required":true,"name":"stanceId","in":"path","description":"The stance's id (a UUID)."},{"schema":{"type":"integer","minimum":1,"description":"A version number, from 1. Absent: the latest."},"required":false,"description":"A version number, from 1. Absent: the latest.","name":"version","in":"query"}],"responses":{"200":{"description":"The readings.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StanceReadings"}}}},"401":{"description":"No token, or not a valid one: `unauthorized`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No such stance you can read.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"operationId":"getWorkspaceQuestionStanceReadings"}},"/workspaces/{id}/questions/{questionId}/stances/{stanceId}/comparison":{"get":{"tags":["stances"],"summary":"Two versions of a stance: its changes, and the model’s, apart","parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"id","in":"path","description":"The workspace's id (a UUID)."},{"schema":{"type":"string","format":"uuid"},"required":true,"name":"questionId","in":"path","description":"The question's id (a UUID)."},{"schema":{"type":"string","format":"uuid"},"required":true,"name":"stanceId","in":"path","description":"The stance's id (a UUID)."},{"schema":{"type":"integer","minimum":1,"description":"The earlier version number."},"required":true,"description":"The earlier version number.","name":"from","in":"query"},{"schema":{"type":"integer","minimum":1,"description":"The later version number."},"required":true,"description":"The later version number.","name":"to","in":"query"}],"responses":{"200":{"description":"The comparison.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StanceVersionComparison"}}}},"401":{"description":"No token, or not a valid one: `unauthorized`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No such stance you can read.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"operationId":"getWorkspaceQuestionStanceComparison"}},"/workspaces/{id}/questions/{questionId}/stances/{stanceId}/where-we-part/{otherId}":{"get":{"tags":["stances"],"summary":"Where two stances part","parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"id","in":"path","description":"The workspace's id (a UUID)."},{"schema":{"type":"string","format":"uuid"},"required":true,"name":"questionId","in":"path","description":"The question's id (a UUID)."},{"schema":{"type":"string","format":"uuid"},"required":true,"name":"stanceId","in":"path","description":"The stance's id (a UUID)."},{"schema":{"type":"string","format":"uuid"},"required":true,"name":"otherId","in":"path","description":"The where-we-part's other id (a UUID)."}],"responses":{"200":{"description":"Side by side, verbatim.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WhereWePart"}}}},"401":{"description":"No token, or not a valid one: `unauthorized`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No such stance you can read.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"operationId":"getWorkspaceQuestionStanceWhereWePart"}},"/workspaces/{id}/questions/{questionId}/stances/{stanceId}/visibility":{"put":{"tags":["stances"],"summary":"Keep a stance private, or share it with the workspace","parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"id","in":"path","description":"The workspace's id (a UUID)."},{"schema":{"type":"string","format":"uuid"},"required":true,"name":"questionId","in":"path","description":"The question's id (a UUID)."},{"schema":{"type":"string","format":"uuid"},"required":true,"name":"stanceId","in":"path","description":"The stance's id (a UUID)."}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StanceVisibilityBody"}}}},"responses":{"200":{"description":"The stance.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Stance"}}}},"401":{"description":"No token, or not a valid one: `unauthorized`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Only its holder writes a stance — never a draft, a service or the assistant.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No such stance you can read.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"operationId":"putWorkspaceQuestionStanceVisibility"}},"/workspaces/{id}/questions/{questionId}/stances/{stanceId}/publication":{"post":{"tags":["stances"],"summary":"Publish a stance on a public question","description":"An explicit act, recorded with who and when. Nothing publishes a stance by default.","parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"id","in":"path","description":"The workspace's id (a UUID)."},{"schema":{"type":"string","format":"uuid"},"required":true,"name":"questionId","in":"path","description":"The question's id (a UUID)."},{"schema":{"type":"string","format":"uuid"},"required":true,"name":"stanceId","in":"path","description":"The stance's id (a UUID)."}],"responses":{"200":{"description":"The stance, published.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Stance"}}}},"401":{"description":"No token, or not a valid one: `unauthorized`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Only its holder writes a stance — never a draft, a service or the assistant.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No such stance you can read.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"The question is not public, or nothing has been saved.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"operationId":"postWorkspaceQuestionStancePublication"},"delete":{"tags":["stances"],"summary":"Withdraw a published stance","parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"id","in":"path","description":"The workspace's id (a UUID)."},{"schema":{"type":"string","format":"uuid"},"required":true,"name":"questionId","in":"path","description":"The question's id (a UUID)."},{"schema":{"type":"string","format":"uuid"},"required":true,"name":"stanceId","in":"path","description":"The stance's id (a UUID)."}],"responses":{"200":{"description":"The stance, private again.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Stance"}}}},"401":{"description":"No token, or not a valid one: `unauthorized`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Only its holder writes a stance — never a draft, a service or the assistant.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No such stance you can read.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"operationId":"deleteWorkspaceQuestionStancePublication"}},"/workspaces/{id}/questions/{questionId}/stances/{stanceId}/assistant":{"post":{"tags":["stances"],"summary":"Ask for help reading the model and your own stance","description":"Holder-invoked, on the holder’s own stance only. It explains, navigates, words a conflict the SQL found, asks about one, or flags a sentence that belongs in the shared model. It writes nothing and suggests no judgement.","parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"id","in":"path","description":"The workspace's id (a UUID)."},{"schema":{"type":"string","format":"uuid"},"required":true,"name":"questionId","in":"path","description":"The question's id (a UUID)."},{"schema":{"type":"string","format":"uuid"},"required":true,"name":"stanceId","in":"path","description":"The stance's id (a UUID)."}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AssistantBody"}}}},"responses":{"200":{"description":"What it may say.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AssistantAnswer"}}}},"401":{"description":"No token, or not a valid one: `unauthorized`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No such stance you can read.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"No model is configured.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"operationId":"postWorkspaceQuestionStanceAssistant"}},"/workspaces/{id}/questions/{questionId}/decisions/{decisionId}/stance":{"get":{"tags":["stances"],"summary":"The stance version a decision act cites","description":"Only to those the stance’s holder lets read it; otherwise none. Never part of the record.","parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"id","in":"path","description":"The workspace's id (a UUID)."},{"schema":{"type":"string","format":"uuid"},"required":true,"name":"questionId","in":"path","description":"The question's id (a UUID)."},{"schema":{"type":"string","format":"uuid"},"required":true,"name":"decisionId","in":"path","description":"The decision's id (a UUID)."}],"responses":{"200":{"description":"The citation, or none you may see.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DecisionStance"}}}},"401":{"description":"No token, or not a valid one: `unauthorized`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"operationId":"getWorkspaceQuestionDecisionStance"}},"/workspaces/{id}/bodies":{"get":{"tags":["stances"],"summary":"The bodies that hold stances here, and who records for each","parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"id","in":"path","description":"The workspace's id (a UUID)."}],"responses":{"200":{"description":"The bodies.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BodyList"}}}},"401":{"description":"No token, or not a valid one: `unauthorized`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"operationId":"getWorkspaceBodies"},"post":{"tags":["stances"],"summary":"Name a body — a board, committee, council or household","parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"id","in":"path","description":"The workspace's id (a UUID)."}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BodyInput"}}}},"responses":{"200":{"description":"The bodies.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BodyList"}}}},"401":{"description":"No token, or not a valid one: `unauthorized`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Editors only.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"operationId":"postWorkspaceBodies"}},"/workspaces/{id}/bodies/{bodyId}":{"delete":{"tags":["stances"],"summary":"Remove a body, and its stances with it","parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"id","in":"path","description":"The workspace's id (a UUID)."},{"schema":{"type":"string","format":"uuid"},"required":true,"name":"bodyId","in":"path","description":"The body's id (a UUID)."}],"responses":{"204":{"description":"No content."},"401":{"description":"No token, or not a valid one: `unauthorized`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"The owner only.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"operationId":"deleteWorkspaceBody"}},"/workspaces/{id}/bodies/{bodyId}/recorders/{userId}":{"put":{"tags":["stances"],"summary":"Authorise a member to record what a body adopted","parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"id","in":"path","description":"The workspace's id (a UUID)."},{"schema":{"type":"string","format":"uuid"},"required":true,"name":"bodyId","in":"path","description":"The body's id (a UUID)."},{"schema":{"type":"string","format":"uuid"},"required":true,"name":"userId","in":"path","description":"The recorder's user id (a UUID)."}],"responses":{"200":{"description":"The bodies.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BodyList"}}}},"401":{"description":"No token, or not a valid one: `unauthorized`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"The owner only.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"operationId":"putWorkspaceBodyRecorder"},"delete":{"tags":["stances"],"summary":"Withdraw a recorder’s authority","parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"id","in":"path","description":"The workspace's id (a UUID)."},{"schema":{"type":"string","format":"uuid"},"required":true,"name":"bodyId","in":"path","description":"The body's id (a UUID)."},{"schema":{"type":"string","format":"uuid"},"required":true,"name":"userId","in":"path","description":"The recorder's user id (a UUID)."}],"responses":{"200":{"description":"The bodies.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BodyList"}}}},"401":{"description":"No token, or not a valid one: `unauthorized`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"The owner only.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"operationId":"deleteWorkspaceBodyRecorder"}},"/workspaces/{id}/questions/{questionId}/drafts":{"post":{"tags":["drafting"],"summary":"Have SwingFactor draft the question","description":"Follow it, and stop it, as one of the workspace’s runs: `GET /workspaces/{id}/runs?kind=draft&subject={questionId}`.","parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"id","in":"path","description":"The workspace's id (a UUID)."},{"schema":{"type":"string","format":"uuid"},"required":true,"name":"questionId","in":"path","description":"The question's id (a UUID)."},{"schema":{"type":"string"},"required":false,"name":"Idempotency-Key","in":"header","description":"Any unique string. The same key, method, path and body within 24 hours answers with the first response instead of creating again; the same key on a different request is 409 `idempotency_key_reused`."}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DraftStartBody"}}}},"responses":{"202":{"description":"Queued — or, focused on requests while a draft runs, waiting: the requests stay open for the next.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DraftStarted"}}}},"400":{"description":"`run_running`: one is running already; `plan_limit`: the plan does not draft; `question_incomplete`: the question is still being asked; `nothing_requested`: focused on requests, with none open.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"No token, or not a valid one: `unauthorized`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"You cannot change this workspace.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"No model is configured.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"operationId":"postWorkspaceQuestionDrafts"}},"/workspaces/{id}/question-status":{"get":{"tags":["drafting"],"summary":"Where each of the workspace’s questions stands","parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"id","in":"path","description":"The workspace's id (a UUID)."}],"responses":{"200":{"description":"A status per question.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/QuestionStatus"}}}},"401":{"description":"No token, or not a valid one: `unauthorized`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"operationId":"getWorkspaceQuestionStatus"}},"/workspaces/{id}/questions/{questionId}/research-trail":{"get":{"tags":["drafting"],"summary":"What research tried: each search, each page it tried to read, and whether it could","description":"Research provenance — how the evidence was looked for — never evidence about the question. A draft’s, or by default the latest draft’s that has one. The workspace’s members only.","parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"id","in":"path","description":"The workspace's id (a UUID)."},{"schema":{"type":"string","format":"uuid"},"required":true,"name":"questionId","in":"path","description":"The question's id (a UUID)."},{"schema":{"type":"string","format":"uuid"},"required":false,"name":"draft","in":"query"}],"responses":{"200":{"description":"The trail, stage by stage, in order.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResearchTrail"}}}},"401":{"description":"No token, or not a valid one: `unauthorized`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"operationId":"getWorkspaceQuestionResearchTrail"}},"/workspaces/{id}/runs":{"get":{"tags":["runs"],"summary":"The runs, newest first","parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"id","in":"path","description":"The workspace's id (a UUID)."},{"schema":{"type":"string","enum":["draft"],"description":"Only this kind."},"required":false,"description":"Only this kind.","name":"kind","in":"query"},{"schema":{"type":"string","format":"uuid","description":"Only those about this."},"required":false,"description":"Only those about this.","name":"subject","in":"query"}],"responses":{"200":{"description":"The runs.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ModelRunList"}}}},"401":{"description":"No token, or not a valid one: `unauthorized`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"operationId":"getWorkspaceRuns"}},"/workspaces/{id}/runs/{runId}":{"get":{"tags":["runs"],"summary":"One run, and where it has got to","parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"id","in":"path","description":"The workspace's id (a UUID)."},{"schema":{"type":"string","format":"uuid"},"required":true,"name":"runId","in":"path","description":"The run's id (a UUID)."}],"responses":{"200":{"description":"The run.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ModelRun"}}}},"401":{"description":"No token, or not a valid one: `unauthorized`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No such run.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"operationId":"getWorkspaceRun"}},"/workspaces/{id}/runs/{runId}/stop":{"post":{"tags":["runs"],"summary":"Stop a run","description":"It goes no further than the step it is on, and what it wrote is kept. Stopping one that has ended changes nothing.","parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"id","in":"path","description":"The workspace's id (a UUID)."},{"schema":{"type":"string","format":"uuid"},"required":true,"name":"runId","in":"path","description":"The run's id (a UUID)."}],"responses":{"200":{"description":"The run, stopped or as it ended.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ModelRun"}}}},"401":{"description":"No token, or not a valid one: `unauthorized`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"You cannot change this.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No such run.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"operationId":"postWorkspaceRunStop"}},"/workspaces/{id}/questions/{questionId}/proposed-edits":{"get":{"tags":["fixes"],"summary":"The fixes SwingFactor proposed to what is already there","description":"Each with what it would change from and to, why, and its source — those still proposed first. A stale one is to something changed since: accepting it is refused until a person looks again. The workspace’s members only.","parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"id","in":"path","description":"The workspace's id (a UUID)."},{"schema":{"type":"string","format":"uuid"},"required":true,"name":"questionId","in":"path","description":"The question's id (a UUID)."},{"schema":{"type":"string","enum":["proposed","accepted","rejected"]},"required":false,"name":"status","in":"query"}],"responses":{"200":{"description":"The fixes.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProposedEditList"}}}},"401":{"description":"No token, or not a valid one: `unauthorized`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"operationId":"getWorkspaceQuestionProposedEdits"}},"/workspaces/{id}/questions/{questionId}/proposed-edits/{editId}/decision":{"post":{"tags":["fixes"],"summary":"Accept a fix — applied as you — or reject it, saying why","description":"The question’s editors only. Accepting applies the fix through the same update a person makes, as them, keeping what it changes accepted as it was; where it answers an open challenge, the challenge is resolved as a material change with the fix’s why as the response, and where it answers a request, the request is answered. Rejecting needs a reason and leaves both open.","parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"id","in":"path","description":"The workspace's id (a UUID)."},{"schema":{"type":"string","format":"uuid"},"required":true,"name":"questionId","in":"path","description":"The question's id (a UUID)."},{"schema":{"type":"string","format":"uuid"},"required":true,"name":"editId","in":"path","description":"The proposed-edit's edit id (a UUID)."}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EditDecisionBody"}}}},"responses":{"200":{"description":"What deciding it did.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DecidedEdit"}}}},"401":{"description":"No token, or not a valid one: `unauthorized`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Only a person of the workspace decides a fix.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No such fix, or what it changes has been deleted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"`conflict`: what it changes has changed since it was proposed — look at it again, and reject it or ask again.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Decided already, or rejected without a reason.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"operationId":"postWorkspaceQuestionProposedEditDecision"}},"/workspaces/{id}/questions/{questionId}/requests":{"get":{"tags":["fixes"],"summary":"What people asked SwingFactor to find out","description":"Open ones first. The workspace’s members only.","parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"id","in":"path","description":"The workspace's id (a UUID)."},{"schema":{"type":"string","format":"uuid"},"required":true,"name":"questionId","in":"path","description":"The question's id (a UUID)."},{"schema":{"type":"string","enum":["open","answered","withdrawn"]},"required":false,"name":"status","in":"query"}],"responses":{"200":{"description":"The requests.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FindOutRequestList"}}}},"401":{"description":"No token, or not a valid one: `unauthorized`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"operationId":"getWorkspaceQuestionRequests"},"post":{"tags":["fixes"],"summary":"Ask SwingFactor to find something out","description":"An editor’s, in their words, about the question or one option. It stays open until a draft or a person answers it, or whoever asked withdraws it. Start a draft focused on requests to have SwingFactor work on it now.","parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"id","in":"path","description":"The workspace's id (a UUID)."},{"schema":{"type":"string","format":"uuid"},"required":true,"name":"questionId","in":"path","description":"The question's id (a UUID)."},{"schema":{"type":"string"},"required":false,"name":"Idempotency-Key","in":"header","description":"Any unique string. The same key, method, path and body within 24 hours answers with the first response instead of creating again; the same key on a different request is 409 `idempotency_key_reused`."}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FindOutRequestBody"}}}},"responses":{"201":{"description":"The request, open.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FindOutRequest"}}}},"401":{"description":"No token, or not a valid one: `unauthorized`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Only the question’s editors ask, as themselves.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No such question or option.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"operationId":"postWorkspaceQuestionRequests"}},"/workspaces/{id}/questions/{questionId}/requests/{requestId}/withdrawal":{"post":{"tags":["fixes"],"summary":"Withdraw a request you made, while it is open","description":"Kept, and in the history.","parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"id","in":"path","description":"The workspace's id (a UUID)."},{"schema":{"type":"string","format":"uuid"},"required":true,"name":"questionId","in":"path","description":"The question's id (a UUID)."},{"schema":{"type":"string","format":"uuid"},"required":true,"name":"requestId","in":"path","description":"The request's id (a UUID)."}],"responses":{"200":{"description":"The request, withdrawn.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FindOutRequest"}}}},"401":{"description":"No token, or not a valid one: `unauthorized`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Only whoever asked withdraws it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No such request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"It is answered or withdrawn already.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"operationId":"postWorkspaceQuestionRequestWithdrawal"}},"/workspaces/{id}/questions/{questionId}/requests/{requestId}/answer":{"post":{"tags":["fixes"],"summary":"Answer a request: what was found, or that nothing could be","parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"id","in":"path","description":"The workspace's id (a UUID)."},{"schema":{"type":"string","format":"uuid"},"required":true,"name":"questionId","in":"path","description":"The question's id (a UUID)."},{"schema":{"type":"string","format":"uuid"},"required":true,"name":"requestId","in":"path","description":"The request's id (a UUID)."}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RequestAnswerBody"}}}},"responses":{"200":{"description":"The request, answered.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FindOutRequest"}}}},"401":{"description":"No token, or not a valid one: `unauthorized`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No such request, or not one you can answer.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"It is answered or withdrawn already.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"operationId":"postWorkspaceQuestionRequestAnswer"}},"/workspaces/{id}/questions/{questionId}/activity":{"get":{"tags":["fixes"],"summary":"What is under way on a question","description":"Requests waiting on SwingFactor, fixes waiting on a person, and the draft at work — for the question’s banner. Counted in SQL, of what the caller may read.","parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"id","in":"path","description":"The workspace's id (a UUID)."},{"schema":{"type":"string","format":"uuid"},"required":true,"name":"questionId","in":"path","description":"The question's id (a UUID)."}],"responses":{"200":{"description":"What is under way.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/QuestionActivity"}}}},"401":{"description":"No token, or not a valid one: `unauthorized`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No such question.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"operationId":"getWorkspaceQuestionActivity"}},"/workspaces/{id}/questions/{questionId}/frontier/own-answers":{"post":{"tags":["fixes"],"summary":"Say what you know first-hand about a factor for an option","description":"From your own experience, standing as yours. Where the option has no answer a person accepted, it becomes the option’s answer, sourced to you; where it has one, it replaces nothing and goes on the claim behind it as your own evidence — refused where no claim establishes it. Only a person, as themselves, in the workspace.","parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"id","in":"path","description":"The workspace's id (a UUID)."},{"schema":{"type":"string","format":"uuid"},"required":true,"name":"questionId","in":"path","description":"The question's id (a UUID)."},{"schema":{"type":"string"},"required":false,"name":"Idempotency-Key","in":"header","description":"Any unique string. The same key, method, path and body within 24 hours answers with the first response instead of creating again; the same key on a different request is 409 `idempotency_key_reused`."}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/OwnAnswerBody"}}}},"responses":{"201":{"description":"Recorded as yours.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OwnAnswerResult"}}}},"401":{"description":"No token, or not a valid one: `unauthorized`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Only a person, as themselves.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No such question, option or factor.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"`answer_exists`: a person accepted an answer and no claim establishes it — say what is wrong with it instead.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Nothing said, or — over an accepted answer — which way it points not said.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"operationId":"postWorkspaceQuestionFrontierOwnAnswers"}},"/workspaces/{id}/questions/{questionId}/accepted-for-you":{"get":{"tags":["fixes"],"summary":"What a draft accepted for you","description":"A draft’s work waits for the person who started it only where it bears on a factor their view says matters most; the rest is accepted for them as each stage lands. This lists what was accepted for you, newest first, with the factor each bears on and what your view said of it. Yours alone.","parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"id","in":"path","description":"The workspace's id (a UUID)."},{"schema":{"type":"string","format":"uuid"},"required":true,"name":"questionId","in":"path","description":"The question's id (a UUID)."}],"responses":{"200":{"description":"What was accepted for you.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AcceptedForYouList"}}}},"401":{"description":"No token, or not a valid one: `unauthorized`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"operationId":"getWorkspaceQuestionAcceptedForYou"}},"/workspaces/{id}/questions/{questionId}/accepted-for-you/{acceptedId}/return":{"post":{"tags":["fixes"],"summary":"Check it yourself: put something accepted for you back to check","description":"It goes back to proposed, to wait in Check its work, and is never accepted for you again. Only yours, and only while it is still as it was accepted.","parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"id","in":"path","description":"The workspace's id (a UUID)."},{"schema":{"type":"string","format":"uuid"},"required":true,"name":"questionId","in":"path","description":"The question's id (a UUID)."},{"schema":{"type":"string","format":"uuid"},"required":true,"name":"acceptedId","in":"path","description":"The accepted-for-you's accepted id (a UUID)."}],"responses":{"200":{"description":"Put back to check.","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string","format":"uuid"}},"required":["id"]}}}},"400":{"description":"`already_returned` or `changed_since`: it waits already, or was decided again since.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"No token, or not a valid one: `unauthorized`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Only the question’s editors check its work.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Nothing accepted for you by that.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"operationId":"postWorkspaceQuestionAcceptedForYouReturn"}}},"webhooks":{},"servers":[{"url":"https://api.swingfactor.ai/v1","description":"SwingFactor API, v1"}],"tags":[{"name":"billing","description":"The plan a container is on, and moving, paying for or cancelling it."},{"name":"challenges","description":"Objections to any part of the model, and what each did to it."},{"name":"content","description":"What a container takes in. An upload: start one, send the bytes to the signed address, then complete it. A web page: by its address. Each is read, and its text kept by version."},{"name":"dependencies","description":"Which propositions rest on which, and what a change reaches."},{"name":"drafting","description":"SwingFactor drafting a question’s model, and what research tried."},{"name":"evidence","description":"What supports, contradicts or qualifies a proposition."},{"name":"fixes"},{"name":"me","description":"The person the token belongs to: their profile, and their API keys."},{"name":"model","description":"The model seen whole: bearings, symmetry, the briefing, counts, snapshots, the frontier, decisions."},{"name":"propositions","description":"The claims a question is broken into, and deciding them."},{"name":"questions","description":"Questions, their options and scenarios, and asking one a step at a time."},{"name":"runs","description":"What SwingFactor’s model is doing or has done: each draft, its stages, and stopping one."},{"name":"sources","description":"The documents and web pages a question is argued from."},{"name":"stances","description":"One holder’s own position on a question — written only by them, never part of the model."},{"name":"switching","description":"Variables, each party’s ranges, break-evens, and what could change the choice."},{"name":"workspaces","description":"Workspaces and the people in them."}]}