Returns the seat the owner would take in the backing relay, its price,
and the conditional ruby payback, plus a confirm_token for
POST /backs when backing is possible. Charges nothing. Requires
the write scope; counts against the read window only.
Personal API key issued per SeeSaw user account:
Authorization: Bearer sspat_…. Manage keys on the app API
(/v1/users/me/api-keys). Revocation propagates within ~60 seconds
(validation cache window).
The key's scopes decide what it may do: every key has read; a key
created with ["read","write"] may also use the six write operations
(marked x-required-scope: write in this document). Scopes are fixed at
creation — to get write access, create a new key. A read-only key
calling a write operation gets 403 FORBIDDEN_SCOPE.
What the user confirms before POST /backs.
max_relay_payback_rubies is conditional: the most this seat can
receive if two more backers follow. Nothing is paid if nobody follows.
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"SeeSaw Developer","colors":{"primary":"#04A363","light":"#0BC97D","dark":"#04A363"},"footer":{"socials":{"website":"https://seesaw.fun"}},"styling":{"latex":false},"navigation":{"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"seesaw","hasAudioNarration":false,"actualSubdomain":"seesaw","customDomains":["docs.seesaw.fun"],"gitSource":{"type":"github","owner":"seesawtech","repo":"seesaw-developer-docs","deployBranch":"main","contentDirectory":"","isPrivate":true,"mountPath":"","label":""},"chroma":{"collectionId":"f9af2bf3-38a8-4a14-bb52-4614900390d7","liveDeploymentHistoryId":"6ab4c2fa6db8efdbd0b1fe11","schemaVersion":"v3","latestBuiltDeploymentHistoryId":"6ab4c2fa6db8efdbd0b1fe11"},"entitlements":{"AI_CHAT":{"status":"DISABLED"}},"buildId":"6ab4c2fa6db8efdbd0b1fe11","clientVersion":"0.0.4054","searchFilterCounts":[{"language":"default","tag":"Guides","count":31},{"language":"default","tag":"MCP Server","count":24},{"language":"default","tag":"API Reference","count":19},{"language":"default","tag":"Tools","count":19},{"language":"default","tag":"Endpoints","count":18},{"language":"default","tag":"Read","count":12},{"language":"default","tag":"Me","count":7},{"language":"default","tag":"Write","count":6},{"language":"default","tag":"Topics","count":5},{"language":"default","tag":"Client Setup","count":4}]},"assistantConfig":{"enableAskAiButton":false,"enableStarterQuestions":false,"enableContextualStarterQuestions":false,"enableAskAiSearchBar":true},"basePath":"","hasChatPermissions":false,"hasWebMcpPermissions":false,"toggles":[{"name":"kill-isr","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-mintlify-slack","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-integrations-settings","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"rbac-expansion","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-pr-grouping","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-prefix","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"analytics-v7","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"user-flows-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"no-publish-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-onboarding","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"llms-txt-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving-live","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"stripTemperatureMiddleware","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"support-platform-pylon-zendesk","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"instant-rollback","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications-server","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-fable","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fixed-ai-action-pricing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automation-resolve-merge-conflict","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"scoped-publishing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"mintql","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"page-level-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-version-history-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-page-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"full-page-search","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workspace-projects","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"assistant-v5","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"byok-sep-25","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fork-pr-previews","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"revalidation-jwt","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"vite-origin","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-updated-9-15","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-sso-scim","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"hobby-abuse-scan","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"dashboard-inbox","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-signup","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-dual-write","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-enabled","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"approve-review-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"sso-setup-deadline-banner","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-serve","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"googleFontsInlined":false},"customCss":[],"page":{"pagePath":"api-reference/opinions/preview-backing-an-opinion-step-1-of-2","slug":"/api-reference/opinions/preview-backing-an-opinion-step-1-of-2","pageMetadata":{"title":"Preview backing an opinion (step 1 of 2)","description":"Returns the seat the owner would take in the backing relay, its price,\nand the **conditional** ruby payback, plus a `confirm_token` for\n`POST /backs` when backing is possible. **Charges nothing.** Requires\nthe `write` scope; counts against the read window only.\n","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /opinions/{id}/back-preview","href":"/api-reference/opinions/preview-backing-an-opinion-step-1-of-2","autogeneratedByOpenApi":true},"description":{"compiledSource":"\"use strict\";\nconst {jsx: _jsx, jsxs: _jsxs} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n code: \"code\",\n p: \"p\",\n strong: \"strong\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsxs(_components.p, {\n children: [\"Returns the seat the owner would take in the backing relay, its price,\\nand the \", _jsx(_components.strong, {\n children: \"conditional\"\n }), \" ruby payback, plus a \", _jsx(_components.code, {\n children: \"confirm_token\"\n }), \" for\\n\", _jsx(_components.code, {\n children: \"POST /backs\"\n }), \" when backing is possible. \", _jsx(_components.strong, {\n children: \"Charges nothing.\"\n }), \" Requires\\nthe \", _jsx(_components.code, {\n children: \"write\"\n }), \" scope; counts against the read window only.\"]\n });\n}\nfunction MDXContent(props = {}) {\n const {wrapper: MDXLayout} = {\n ..._provideComponents(),\n ...props.components\n };\n return MDXLayout ? _jsx(MDXLayout, {\n ...props,\n children: _jsx(_createMdxContent, {\n ...props\n })\n }) : _createMdxContent(props);\n}\nreturn {\n default: MDXContent\n};\n","frontmatter":{},"scope":{}},"pageType":"default","mdx":{"mdxSource":{"compiledSource":"\"use strict\";const{Fragment:_Fragment,jsx:_jsx}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){return _jsx(_Fragment,{})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent}","frontmatter":{},"scope":{"config":{},"pageMetadata":{"title":"Preview backing an opinion (step 1 of 2)","description":"Returns the seat the owner would take in the backing relay, its price,\nand the **conditional** ruby payback, plus a `confirm_token` for\n`POST /backs` when backing is possible. **Charges nothing.** Requires\nthe `write` scope; counts against the read window only.\n","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /opinions/{id}/back-preview","href":"/api-reference/opinions/preview-backing-an-opinion-step-1-of-2","autogeneratedByOpenApi":true}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[],"codeExamples":{}},"jsLinks":[],"openApiReferenceData":{"operation":{"operationId":"previewBack","tags":["Opinions"],"summary":"Preview backing an opinion (step 1 of 2)","x-required-scope":"write","description":"Returns the seat the owner would take in the backing relay, its price,\nand the **conditional** ruby payback, plus a `confirm_token` for\n`POST /backs` when backing is possible. **Charges nothing.** Requires\nthe `write` scope; counts against the read window only.\n","parameters":["4158d8a1-de32-42e7-9b68-c45625b2892c"],"requestBody":"c3555a25-9ee1-4db9-aaa8-f495ed13edb6","responses":{"200":"76644681-923b-437c-a582-699d1e033863","400":"6a8dda78-7efd-4a82-a510-4748b8e4050d","401":"14e8ab7a-0c0c-4566-9146-b1a506011c0c","403":"ce9c9de1-9b41-40bd-9c4b-38587e319d4f","404":"7aa5a421-2d0b-4dc1-b06e-b460a48913c1","429":"31a4a2bc-830d-43c5-a3df-d40eff4df326","500":"408215b9-392a-4aea-b2da-2a41f81b7030"},"method":"post","type":"path","servers":["8b57a1c3-4bcf-4125-a8ec-f3cb0c2082e6"],"security":["981d7369-b6b3-48d9-be19-e49d959eb5ba"],"path":"/opinions/{id}/back-preview","baseUrlOptions":["https://api.seesaw.fun/open/v1"],"title":"Preview backing an opinion (step 1 of 2)","codeSamples":[],"requiredOnlyExamples":false,"requestExampleType":"generated","responseExampleType":"generated"},"dependencies":{"parameters":{"4158d8a1-de32-42e7-9b68-c45625b2892c":{"name":"id","in":"path","required":true,"description":"Opinion UUID.","schema":{"type":"string","format":"uuid","isRequired":true,"description":"Opinion UUID.","uniqueKey":"","typeLabel":"string\u003cuuid>"}}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["topic_id"],"properties":{"topic_id":{"type":"string","format":"uuid","description":"The topic the opinion belongs to.","isRequired":true,"uniqueKey":"topic_id","typeLabel":"string\u003cuuid>"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"topic_id":"3c90c3cc-0d44-4b50-8888-8dd25736052a"}}},"exampleType":"generated"}},"exampleType":"generated"},"responses":{"76644681-923b-437c-a582-699d1e033863":{"description":"The preview (check `can_back` before confirming)","content":{"application/json":{"schema":{"type":"object","required":["can_back","summary"],"properties":{"can_back":{"type":"boolean","isRequired":true,"uniqueKey":"can_back","typeLabel":"boolean"},"summary":{"type":"object","description":"What the user confirms before `POST /backs`.\n`max_relay_payback_rubies` is **conditional**: the most this seat can\nreceive if two more backers follow. Nothing is paid if nobody follows.\n","required":["topic_title","opinion_excerpt","author","backer_count","my_seq_if_now","price_coins","balance_before","balance_after","max_relay_payback_rubies","max_relay_payback_sapphires","close_time"],"properties":{"topic_title":{"type":"string","isRequired":true,"uniqueKey":"summary.topic_title","typeLabel":"string"},"opinion_excerpt":{"type":"string","isRequired":true,"uniqueKey":"summary.opinion_excerpt","typeLabel":"string"},"author":{"type":"object","description":"An opinion author. Deliberately carries no financial fields.","required":["id","handle","nickname","avatar_url","account_type","url"],"properties":{"id":{"type":"string","format":"uuid","isRequired":true,"uniqueKey":"summary.author.id","typeLabel":"string\u003cuuid>"},"handle":{"oneOf":[{"type":"string","isRequired":true,"uniqueKey":"summary.author.handle.oneOf.0","typeLabel":"string"},{"type":"null","isRequired":true,"uniqueKey":"summary.author.handle.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"summary.author.handle","typeLabel":"string | null"},"nickname":{"type":"string","isRequired":true,"uniqueKey":"summary.author.nickname","typeLabel":"string"},"avatar_url":{"oneOf":[{"type":"string","isRequired":true,"uniqueKey":"summary.author.avatar_url.oneOf.0","typeLabel":"string"},{"type":"null","isRequired":true,"uniqueKey":"summary.author.avatar_url.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"summary.author.avatar_url","typeLabel":"string | null"},"account_type":{"type":"string","enum":["user","bot"],"isRequired":true,"uniqueKey":"summary.author.account_type","typeLabel":"enum\u003cstring>"},"url":{"type":"string","isRequired":true,"uniqueKey":"summary.author.url","typeLabel":"string"}},"isRequired":true,"uniqueKey":"summary.author","typeLabel":"object"},"backer_count":{"type":"integer","isRequired":true,"uniqueKey":"summary.backer_count","typeLabel":"integer"},"my_seq_if_now":{"type":"integer","description":"The seat the owner would take, or their existing seat when `ALREADY_BACKED`.","isRequired":true,"uniqueKey":"summary.my_seq_if_now","typeLabel":"integer"},"price_coins":{"type":"string","isRequired":true,"uniqueKey":"summary.price_coins","typeLabel":"string"},"balance_before":{"type":"string","isRequired":true,"uniqueKey":"summary.balance_before","typeLabel":"string"},"balance_after":{"type":"string","isRequired":true,"uniqueKey":"summary.balance_after","typeLabel":"string"},"max_relay_payback_rubies":{"type":"string","isRequired":true,"uniqueKey":"summary.max_relay_payback_rubies","typeLabel":"string"},"max_relay_payback_sapphires":{"type":"string","deprecated":true,"description":"**Deprecated — removed in 3.0.0.** Same value as `max_relay_payback_rubies`.","isRequired":true,"uniqueKey":"summary.max_relay_payback_sapphires","typeLabel":"string"},"close_time":{"type":"string","format":"date-time","isRequired":true,"uniqueKey":"summary.close_time","typeLabel":"string\u003cdate-time>"}},"isRequired":true,"uniqueKey":"summary","typeLabel":"object"},"reason":{"type":"string","enum":["OPINION_INACTIVE","ALREADY_BACKED","TOPIC_CLOSED","INSUFFICIENT_BALANCE","OPINION_BACK_FULL"],"description":"Present only when `can_back` is false.","uniqueKey":"reason","typeLabel":"enum\u003cstring>"},"confirm_token":{"type":"string","uniqueKey":"confirm_token","typeLabel":"string"},"expires_at":{"type":"string","format":"date-time","uniqueKey":"expires_at","typeLabel":"string\u003cdate-time>"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"can_back":true,"summary":{"topic_title":"\u003cstring>","opinion_excerpt":"\u003cstring>","author":{"id":"3c90c3cc-0d44-4b50-8888-8dd25736052a","handle":"\u003cstring>","nickname":"\u003cstring>","avatar_url":"\u003cstring>","account_type":"user","url":"\u003cstring>"},"backer_count":123,"my_seq_if_now":123,"price_coins":"\u003cstring>","balance_before":"\u003cstring>","balance_after":"\u003cstring>","max_relay_payback_rubies":"\u003cstring>","max_relay_payback_sapphires":"\u003cstring>","close_time":"2023-11-07T05:31:56Z"},"reason":"OPINION_INACTIVE","confirm_token":"\u003cstring>","expires_at":"2023-11-07T05:31:56Z"}}},"exampleType":"generated"}},"exampleType":"generated"},"6a8dda78-7efd-4a82-a510-4748b8e4050d":{"description":"Invalid argument (`details.field` names the offending parameter)","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","enum":["UNAUTHORIZED","FORBIDDEN","FORBIDDEN_SCOPE","NOT_FOUND","OPINION_NOT_FOUND","INVALID_ARGUMENT","RATE_LIMITED","SERVICE_DISABLED","INTERNAL","CONFIRM_TOKEN_INVALID","CONFIRM_TOKEN_EXPIRED","CONFIRM_TOKEN_USED","CONFIRM_UNAVAILABLE","MECHANISM_UNSUPPORTED","PREVIEW_UNAVAILABLE","TOPIC_ALREADY_STAKED","TOPIC_CLOSED","TOPIC_QUOTE_EXPIRED","TOPIC_QUOTE_INVALID","TOPIC_MECHANISM_MISMATCH","STAKE_OUT_OF_RANGE","RETRY_IDEMPOTENCY_KEY","OPINION_ALREADY_BACKED","OPINION_BACK_PRICE_MOVED","OPINION_BACK_RETRY","OPINION_BACK_FULL","OPINION_BACK_CHAIN_BROKEN","OPINION_SIDE_REQUIRED","OPINION_SIDE_INVALID","OPINION_TOPIC_CLOSED","OPINION_TOPIC_HIDDEN","OPINIONS_UNAVAILABLE","INSUFFICIENT_BALANCE","CONTENT_INVALID","CONTENT_MODERATED","USER_PUNISHED"],"description":"Stable contract values. `SERVICE_DISABLED` (503) is the\nemergency kill switch; `FORBIDDEN_SCOPE` (403) means the key\nlacks the `write` scope. The `CONFIRM_TOKEN_*` and rule codes\nonly occur on the write surface. `OPINION_SIDE_REQUIRED` /\n`OPINION_SIDE_INVALID` are rare but reachable: `preview_opinion`\nalready answers a missing or invalid side with\n`can_publish: false` (reason `SIDE_REQUIRED`), so they surface\nas a 400 from `publish_opinion` only when the owner's position\nchanged between preview and publish (e.g. no position at\npreview, then an order on the other side before publishing) and\nthe side in the token no longer fits.\n","isRequired":true,"uniqueKey":"error.code","typeLabel":"enum\u003cstring>"},"message":{"type":"string","isRequired":true,"uniqueKey":"error.message","typeLabel":"string"},"details":{"type":"object","description":"Optional context, e.g. `{\"field\": \"limit\"}`, `{\"retry_after\": 12}` or `{\"required_scope\": \"write\"}`.","additionalProperties":true,"uniqueKey":"error.details","typeLabel":"object"}},"isRequired":true,"uniqueKey":"error","typeLabel":"object"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"error":{"code":"UNAUTHORIZED","message":"\u003cstring>","details":{}}}}},"exampleType":"generated"}},"exampleType":"generated"},"14e8ab7a-0c0c-4566-9146-b1a506011c0c":{"description":"Missing, invalid, revoked, or expired API key (carries `WWW-Authenticate`)","headers":{"WWW-Authenticate":{"schema":{"type":"string"},"description":"Bearer realm=\"seesaw-open-api\""}},"content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","enum":["UNAUTHORIZED","FORBIDDEN","FORBIDDEN_SCOPE","NOT_FOUND","OPINION_NOT_FOUND","INVALID_ARGUMENT","RATE_LIMITED","SERVICE_DISABLED","INTERNAL","CONFIRM_TOKEN_INVALID","CONFIRM_TOKEN_EXPIRED","CONFIRM_TOKEN_USED","CONFIRM_UNAVAILABLE","MECHANISM_UNSUPPORTED","PREVIEW_UNAVAILABLE","TOPIC_ALREADY_STAKED","TOPIC_CLOSED","TOPIC_QUOTE_EXPIRED","TOPIC_QUOTE_INVALID","TOPIC_MECHANISM_MISMATCH","STAKE_OUT_OF_RANGE","RETRY_IDEMPOTENCY_KEY","OPINION_ALREADY_BACKED","OPINION_BACK_PRICE_MOVED","OPINION_BACK_RETRY","OPINION_BACK_FULL","OPINION_BACK_CHAIN_BROKEN","OPINION_SIDE_REQUIRED","OPINION_SIDE_INVALID","OPINION_TOPIC_CLOSED","OPINION_TOPIC_HIDDEN","OPINIONS_UNAVAILABLE","INSUFFICIENT_BALANCE","CONTENT_INVALID","CONTENT_MODERATED","USER_PUNISHED"],"description":"Stable contract values. `SERVICE_DISABLED` (503) is the\nemergency kill switch; `FORBIDDEN_SCOPE` (403) means the key\nlacks the `write` scope. The `CONFIRM_TOKEN_*` and rule codes\nonly occur on the write surface. `OPINION_SIDE_REQUIRED` /\n`OPINION_SIDE_INVALID` are rare but reachable: `preview_opinion`\nalready answers a missing or invalid side with\n`can_publish: false` (reason `SIDE_REQUIRED`), so they surface\nas a 400 from `publish_opinion` only when the owner's position\nchanged between preview and publish (e.g. no position at\npreview, then an order on the other side before publishing) and\nthe side in the token no longer fits.\n","isRequired":true,"uniqueKey":"error.code","typeLabel":"enum\u003cstring>"},"message":{"type":"string","isRequired":true,"uniqueKey":"error.message","typeLabel":"string"},"details":{"type":"object","description":"Optional context, e.g. `{\"field\": \"limit\"}`, `{\"retry_after\": 12}` or `{\"required_scope\": \"write\"}`.","additionalProperties":true,"uniqueKey":"error.details","typeLabel":"object"}},"isRequired":true,"uniqueKey":"error","typeLabel":"object"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"error":{"code":"UNAUTHORIZED","message":"\u003cstring>","details":{}}}}},"exampleType":"generated"}},"exampleType":"generated"},"ce9c9de1-9b41-40bd-9c4b-38587e319d4f":{"description":"The key lacks the scope this operation needs — `FORBIDDEN_SCOPE`, with\n`details.required_scope`. Create a key with the `write` scope.\n","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","enum":["UNAUTHORIZED","FORBIDDEN","FORBIDDEN_SCOPE","NOT_FOUND","OPINION_NOT_FOUND","INVALID_ARGUMENT","RATE_LIMITED","SERVICE_DISABLED","INTERNAL","CONFIRM_TOKEN_INVALID","CONFIRM_TOKEN_EXPIRED","CONFIRM_TOKEN_USED","CONFIRM_UNAVAILABLE","MECHANISM_UNSUPPORTED","PREVIEW_UNAVAILABLE","TOPIC_ALREADY_STAKED","TOPIC_CLOSED","TOPIC_QUOTE_EXPIRED","TOPIC_QUOTE_INVALID","TOPIC_MECHANISM_MISMATCH","STAKE_OUT_OF_RANGE","RETRY_IDEMPOTENCY_KEY","OPINION_ALREADY_BACKED","OPINION_BACK_PRICE_MOVED","OPINION_BACK_RETRY","OPINION_BACK_FULL","OPINION_BACK_CHAIN_BROKEN","OPINION_SIDE_REQUIRED","OPINION_SIDE_INVALID","OPINION_TOPIC_CLOSED","OPINION_TOPIC_HIDDEN","OPINIONS_UNAVAILABLE","INSUFFICIENT_BALANCE","CONTENT_INVALID","CONTENT_MODERATED","USER_PUNISHED"],"description":"Stable contract values. `SERVICE_DISABLED` (503) is the\nemergency kill switch; `FORBIDDEN_SCOPE` (403) means the key\nlacks the `write` scope. The `CONFIRM_TOKEN_*` and rule codes\nonly occur on the write surface. `OPINION_SIDE_REQUIRED` /\n`OPINION_SIDE_INVALID` are rare but reachable: `preview_opinion`\nalready answers a missing or invalid side with\n`can_publish: false` (reason `SIDE_REQUIRED`), so they surface\nas a 400 from `publish_opinion` only when the owner's position\nchanged between preview and publish (e.g. no position at\npreview, then an order on the other side before publishing) and\nthe side in the token no longer fits.\n","isRequired":true,"uniqueKey":"error.code","typeLabel":"enum\u003cstring>"},"message":{"type":"string","isRequired":true,"uniqueKey":"error.message","typeLabel":"string"},"details":{"type":"object","description":"Optional context, e.g. `{\"field\": \"limit\"}`, `{\"retry_after\": 12}` or `{\"required_scope\": \"write\"}`.","additionalProperties":true,"uniqueKey":"error.details","typeLabel":"object"}},"isRequired":true,"uniqueKey":"error","typeLabel":"object"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"error":{"code":"UNAUTHORIZED","message":"\u003cstring>","details":{}}}}},"exampleType":"generated"}},"exampleType":"generated"},"7aa5a421-2d0b-4dc1-b06e-b460a48913c1":{"description":"Resource missing, or hidden by privacy/moderation (existence does not leak)","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","enum":["UNAUTHORIZED","FORBIDDEN","FORBIDDEN_SCOPE","NOT_FOUND","OPINION_NOT_FOUND","INVALID_ARGUMENT","RATE_LIMITED","SERVICE_DISABLED","INTERNAL","CONFIRM_TOKEN_INVALID","CONFIRM_TOKEN_EXPIRED","CONFIRM_TOKEN_USED","CONFIRM_UNAVAILABLE","MECHANISM_UNSUPPORTED","PREVIEW_UNAVAILABLE","TOPIC_ALREADY_STAKED","TOPIC_CLOSED","TOPIC_QUOTE_EXPIRED","TOPIC_QUOTE_INVALID","TOPIC_MECHANISM_MISMATCH","STAKE_OUT_OF_RANGE","RETRY_IDEMPOTENCY_KEY","OPINION_ALREADY_BACKED","OPINION_BACK_PRICE_MOVED","OPINION_BACK_RETRY","OPINION_BACK_FULL","OPINION_BACK_CHAIN_BROKEN","OPINION_SIDE_REQUIRED","OPINION_SIDE_INVALID","OPINION_TOPIC_CLOSED","OPINION_TOPIC_HIDDEN","OPINIONS_UNAVAILABLE","INSUFFICIENT_BALANCE","CONTENT_INVALID","CONTENT_MODERATED","USER_PUNISHED"],"description":"Stable contract values. `SERVICE_DISABLED` (503) is the\nemergency kill switch; `FORBIDDEN_SCOPE` (403) means the key\nlacks the `write` scope. The `CONFIRM_TOKEN_*` and rule codes\nonly occur on the write surface. `OPINION_SIDE_REQUIRED` /\n`OPINION_SIDE_INVALID` are rare but reachable: `preview_opinion`\nalready answers a missing or invalid side with\n`can_publish: false` (reason `SIDE_REQUIRED`), so they surface\nas a 400 from `publish_opinion` only when the owner's position\nchanged between preview and publish (e.g. no position at\npreview, then an order on the other side before publishing) and\nthe side in the token no longer fits.\n","isRequired":true,"uniqueKey":"error.code","typeLabel":"enum\u003cstring>"},"message":{"type":"string","isRequired":true,"uniqueKey":"error.message","typeLabel":"string"},"details":{"type":"object","description":"Optional context, e.g. `{\"field\": \"limit\"}`, `{\"retry_after\": 12}` or `{\"required_scope\": \"write\"}`.","additionalProperties":true,"uniqueKey":"error.details","typeLabel":"object"}},"isRequired":true,"uniqueKey":"error","typeLabel":"object"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"error":{"code":"UNAUTHORIZED","message":"\u003cstring>","details":{}}}}},"exampleType":"generated"}},"exampleType":"generated"},"31a4a2bc-830d-43c5-a3df-d40eff4df326":{"description":"Rate limit exceeded (see `Retry-After` and `details.retry_after` seconds)","headers":{"Retry-After":{"schema":{"type":"integer"},"description":"Seconds to wait before retrying."}},"content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","enum":["UNAUTHORIZED","FORBIDDEN","FORBIDDEN_SCOPE","NOT_FOUND","OPINION_NOT_FOUND","INVALID_ARGUMENT","RATE_LIMITED","SERVICE_DISABLED","INTERNAL","CONFIRM_TOKEN_INVALID","CONFIRM_TOKEN_EXPIRED","CONFIRM_TOKEN_USED","CONFIRM_UNAVAILABLE","MECHANISM_UNSUPPORTED","PREVIEW_UNAVAILABLE","TOPIC_ALREADY_STAKED","TOPIC_CLOSED","TOPIC_QUOTE_EXPIRED","TOPIC_QUOTE_INVALID","TOPIC_MECHANISM_MISMATCH","STAKE_OUT_OF_RANGE","RETRY_IDEMPOTENCY_KEY","OPINION_ALREADY_BACKED","OPINION_BACK_PRICE_MOVED","OPINION_BACK_RETRY","OPINION_BACK_FULL","OPINION_BACK_CHAIN_BROKEN","OPINION_SIDE_REQUIRED","OPINION_SIDE_INVALID","OPINION_TOPIC_CLOSED","OPINION_TOPIC_HIDDEN","OPINIONS_UNAVAILABLE","INSUFFICIENT_BALANCE","CONTENT_INVALID","CONTENT_MODERATED","USER_PUNISHED"],"description":"Stable contract values. `SERVICE_DISABLED` (503) is the\nemergency kill switch; `FORBIDDEN_SCOPE` (403) means the key\nlacks the `write` scope. The `CONFIRM_TOKEN_*` and rule codes\nonly occur on the write surface. `OPINION_SIDE_REQUIRED` /\n`OPINION_SIDE_INVALID` are rare but reachable: `preview_opinion`\nalready answers a missing or invalid side with\n`can_publish: false` (reason `SIDE_REQUIRED`), so they surface\nas a 400 from `publish_opinion` only when the owner's position\nchanged between preview and publish (e.g. no position at\npreview, then an order on the other side before publishing) and\nthe side in the token no longer fits.\n","isRequired":true,"uniqueKey":"error.code","typeLabel":"enum\u003cstring>"},"message":{"type":"string","isRequired":true,"uniqueKey":"error.message","typeLabel":"string"},"details":{"type":"object","description":"Optional context, e.g. `{\"field\": \"limit\"}`, `{\"retry_after\": 12}` or `{\"required_scope\": \"write\"}`.","additionalProperties":true,"uniqueKey":"error.details","typeLabel":"object"}},"isRequired":true,"uniqueKey":"error","typeLabel":"object"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"error":{"code":"UNAUTHORIZED","message":"\u003cstring>","details":{}}}}},"exampleType":"generated"}},"exampleType":"generated"},"408215b9-392a-4aea-b2da-2a41f81b7030":{"description":"Internal error (`INTERNAL`, or `CONFIRM_UNAVAILABLE` when token signing is unavailable)","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","enum":["UNAUTHORIZED","FORBIDDEN","FORBIDDEN_SCOPE","NOT_FOUND","OPINION_NOT_FOUND","INVALID_ARGUMENT","RATE_LIMITED","SERVICE_DISABLED","INTERNAL","CONFIRM_TOKEN_INVALID","CONFIRM_TOKEN_EXPIRED","CONFIRM_TOKEN_USED","CONFIRM_UNAVAILABLE","MECHANISM_UNSUPPORTED","PREVIEW_UNAVAILABLE","TOPIC_ALREADY_STAKED","TOPIC_CLOSED","TOPIC_QUOTE_EXPIRED","TOPIC_QUOTE_INVALID","TOPIC_MECHANISM_MISMATCH","STAKE_OUT_OF_RANGE","RETRY_IDEMPOTENCY_KEY","OPINION_ALREADY_BACKED","OPINION_BACK_PRICE_MOVED","OPINION_BACK_RETRY","OPINION_BACK_FULL","OPINION_BACK_CHAIN_BROKEN","OPINION_SIDE_REQUIRED","OPINION_SIDE_INVALID","OPINION_TOPIC_CLOSED","OPINION_TOPIC_HIDDEN","OPINIONS_UNAVAILABLE","INSUFFICIENT_BALANCE","CONTENT_INVALID","CONTENT_MODERATED","USER_PUNISHED"],"description":"Stable contract values. `SERVICE_DISABLED` (503) is the\nemergency kill switch; `FORBIDDEN_SCOPE` (403) means the key\nlacks the `write` scope. The `CONFIRM_TOKEN_*` and rule codes\nonly occur on the write surface. `OPINION_SIDE_REQUIRED` /\n`OPINION_SIDE_INVALID` are rare but reachable: `preview_opinion`\nalready answers a missing or invalid side with\n`can_publish: false` (reason `SIDE_REQUIRED`), so they surface\nas a 400 from `publish_opinion` only when the owner's position\nchanged between preview and publish (e.g. no position at\npreview, then an order on the other side before publishing) and\nthe side in the token no longer fits.\n","isRequired":true,"uniqueKey":"error.code","typeLabel":"enum\u003cstring>"},"message":{"type":"string","isRequired":true,"uniqueKey":"error.message","typeLabel":"string"},"details":{"type":"object","description":"Optional context, e.g. `{\"field\": \"limit\"}`, `{\"retry_after\": 12}` or `{\"required_scope\": \"write\"}`.","additionalProperties":true,"uniqueKey":"error.details","typeLabel":"object"}},"isRequired":true,"uniqueKey":"error","typeLabel":"object"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"error":{"code":"UNAUTHORIZED","message":"\u003cstring>","details":{}}}}},"exampleType":"generated"}},"exampleType":"generated"}},"security":{"981d7369-b6b3-48d9-be19-e49d959eb5ba":{"apiKey":{"type":"http","scheme":"bearer","bearerFormat":"sspat_ personal API key","description":"Personal API key issued per SeeSaw user account:\n`Authorization: Bearer sspat_…`. Manage keys on the app API\n(`/v1/users/me/api-keys`). Revocation propagates within ~60 seconds\n(validation cache window).\n\nThe key's **scopes** decide what it may do: every key has `read`; a key\ncreated with `[\"read\",\"write\"]` may also use the six write operations\n(marked `x-required-scope: write` in this document). Scopes are fixed at\ncreation — to get write access, create a new key. A read-only key\ncalling a write operation gets `403 FORBIDDEN_SCOPE`.\n","scopes":[]}}},"servers":{"8b57a1c3-4bcf-4125-a8ec-f3cb0c2082e6":{"url":"https://api.seesaw.fun/open/v1","description":"Production"}},"processedSecurityOptions":[{"schemes":[{"scheme":{"type":"http","scheme":"bearer","bearerFormat":"sspat_ personal API key","description":"Personal API key issued per SeeSaw user account:\n`Authorization: Bearer sspat_…`. Manage keys on the app API\n(`/v1/users/me/api-keys`). Revocation propagates within ~60 seconds\n(validation cache window).\n\nThe key's **scopes** decide what it may do: every key has `read`; a key\ncreated with `[\"read\",\"write\"]` may also use the six write operations\n(marked `x-required-scope: write` in this document). Scopes are fixed at\ncreation — to get write access, create a new key. A read-only key\ncalling a write operation gets `403 FORBIDDEN_SCOPE`.\n","scopes":[]},"schema":{"title":"Bearer Auth","type":"string","isRequired":true,"description":"Personal API key issued per SeeSaw user account:\n`Authorization: Bearer sspat_…`. Manage keys on the app API\n(`/v1/users/me/api-keys`). Revocation propagates within ~60 seconds\n(validation cache window).\n\nThe key's **scopes** decide what it may do: every key has `read`; a key\ncreated with `[\"read\",\"write\"]` may also use the six write operations\n(marked `x-required-scope: write` in this document). Scopes are fixed at\ncreation — to get write access, create a new key. A read-only key\ncalling a write operation gets `403 FORBIDDEN_SCOPE`.\n","format":"bearer","typeLabel":"string\u003cbearer>","deprecated":false},"schemeName":"apiKey","name":"Authorization"}],"title":"apiKey"}]},"originalFileLocation":"api-reference/openapi.yaml"},"subdomain":"seesaw","siteName":"SeeSaw Developer","title":"Preview backing an opinion (step 1 of 2) - SeeSaw Developer","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-09-23T20:08:07.144Z","originalFileLocation":"api-reference/opinions/preview-backing-an-opinion-step-1-of-2.mdx"},"headHtml":"\u003cscript data-mint-head>(function(){var d=document.documentElement,p=null;if(!p){try{p=localStorage.getItem(\"isDarkMode\")}catch(e){}if(p==='true')p='dark';else if(p==='false')p='light';if(p!=='light'\u0026\u0026p!=='dark'\u0026\u0026p!=='system')p=\"system\"}var r=p==='system'?(matchMedia(\"(prefers-color-scheme: dark)\").matches?'dark':'light'):p;d.classList.remove(r==='dark'?'light':'dark');d.classList.add(r);d.setAttribute(\"data-theme-preference\",p)})();\u003c/script>\u003cmeta data-mint-head name=\"description\" content=\"Returns the seat the owner would take in the backing relay, its price, and the conditional ruby payback, plus a confirm_token for POST /backs when backing is possible. Charges nothing. Requires the write scope; counts against the read window only.\">\u003cmeta data-mint-head name=\"application-name\" content=\"SeeSaw Developer\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"apple-touch-icon\" type=\"image/png\" sizes=\"180x180\" href=\"https://mintlify.s3.us-west-1.amazonaws.com/seesaw/_generated/favicon/apple-touch-icon.png?v=3\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"https://mintlify.s3.us-west-1.amazonaws.com/seesaw/_generated/favicon/favicon-32x32.png?v=3\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"https://mintlify.s3.us-west-1.amazonaws.com/seesaw/_generated/favicon/favicon-16x16.png?v=3\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"https://mintlify.s3.us-west-1.amazonaws.com/seesaw/_generated/favicon/favicon.ico?v=3\">\u003cmeta data-mint-head property=\"og:title\" content=\"Preview backing an opinion (step 1 of 2) - SeeSaw Developer\">\u003cmeta data-mint-head property=\"og:description\" content=\"Returns the seat the owner would take in the backing relay, its price, and the conditional ruby payback, plus a confirm_token for POST /backs when backing is possible. Charges nothing. Requires the write scope; counts against the read window only.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"SeeSaw Developer\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.seesaw.fun/api-reference/opinions/preview-backing-an-opinion-step-1-of-2\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://seesaw.mintlify.app/_mintlify/api/og/v2?division=Opinions\u0026amp;title=Preview+backing+an+opinion+%28step+1+of+2%29\u0026amp;description=Returns+the+seat+the+owner+would+take+in+the+backing+relay%2C+its+price%2C%0Aand+the+**conditional**+ruby+payback%2C+plus+a+%60confirm_token%60+for%0A%60POST+%2Fbacks%60+when+backi\u0026amp;theme=f847ec8af40bd953769b2752\u0026amp;signature=ed26e991e80270329a7ed8ce4c2da7e5fd95444c464d2c5a1d195524954bd732\">\u003cmeta data-mint-head property=\"og:image:width\" content=\"1200\">\u003cmeta data-mint-head property=\"og:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"twitter:card\" content=\"summary_large_image\">\u003cmeta data-mint-head name=\"twitter:title\" content=\"Preview backing an opinion (step 1 of 2) - SeeSaw Developer\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Returns the seat the owner would take in the backing relay, its price, and the conditional ruby payback, plus a confirm_token for POST /backs when backing is possible. Charges nothing. Requires the write scope; counts against the read window only.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://seesaw.mintlify.app/_mintlify/api/og/v2?division=Opinions\u0026amp;title=Preview+backing+an+opinion+%28step+1+of+2%29\u0026amp;description=Returns+the+seat+the+owner+would+take+in+the+backing+relay%2C+its+price%2C%0Aand+the+**conditional**+ruby+payback%2C+plus+a+%60confirm_token%60+for%0A%60POST+%2Fbacks%60+when+backi\u0026amp;theme=f847ec8af40bd953769b2752\u0026amp;signature=ed26e991e80270329a7ed8ce4c2da7e5fd95444c464d2c5a1d195524954bd732\">\u003cmeta data-mint-head name=\"twitter:image:width\" content=\"1200\">\u003cmeta data-mint-head name=\"twitter:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"msapplication-config\" content=\"https://mintlify.s3.us-west-1.amazonaws.com/seesaw/_generated/favicon/browserconfig.xml?v=3\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"SeeSaw Developer\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#04A363\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.seesaw.fun/api-reference/opinions/preview-backing-an-opinion-step-1-of-2\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/api-reference/opinions/preview-backing-an-opinion-step-1-of-2.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://docs.seesaw.fun/#organization\",\"name\":\"SeeSaw Developer\",\"url\":\"https://docs.seesaw.fun\"},{\"@type\":\"WebSite\",\"@id\":\"https://docs.seesaw.fun#website\",\"name\":\"SeeSaw Developer\",\"url\":\"https://docs.seesaw.fun\",\"publisher\":{\"@id\":\"https://docs.seesaw.fun/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.seesaw.fun/api-reference/opinions/preview-backing-an-opinion-step-1-of-2#webpage\",\"url\":\"https://docs.seesaw.fun/api-reference/opinions/preview-backing-an-opinion-step-1-of-2\",\"name\":\"Preview backing an opinion (step 1 of 2)\",\"description\":\"Returns the seat the owner would take in the backing relay, its price, and the conditional ruby payback, plus a confirm_token for POST /backs when backing is possible. Charges nothing. Requires the write scope; counts against the read window only.\",\"dateModified\":\"2026-09-23T20:08:07.144Z\",\"isPartOf\":{\"@id\":\"https://docs.seesaw.fun#website\"},\"breadcrumb\":{\"@id\":\"https://docs.seesaw.fun/api-reference/opinions/preview-backing-an-opinion-step-1-of-2#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.seesaw.fun/api-reference/opinions/preview-backing-an-opinion-step-1-of-2#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Endpoints\",\"item\":\"https://docs.seesaw.fun/api-reference/topics/search-topics-by-keyword\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Opinions\",\"item\":\"https://docs.seesaw.fun/api-reference/opinions/preview-publishing-an-opinion-step-1-of-2\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Preview backing an opinion (step 1 of 2)\",\"item\":\"https://docs.seesaw.fun/api-reference/opinions/preview-backing-an-opinion-step-1-of-2\"}]},{\"@type\":[\"TechArticle\",\"APIReference\"],\"@id\":\"https://docs.seesaw.fun/api-reference/opinions/preview-backing-an-opinion-step-1-of-2#apireference\",\"headline\":\"Preview backing an opinion (step 1 of 2)\",\"name\":\"Preview backing an opinion (step 1 of 2)\",\"description\":\"Returns the seat the owner would take in the backing relay, its price, and the conditional ruby payback, plus a confirm_token for POST /backs when backing is possible. Charges nothing. Requires the write scope; counts against the read window only.\",\"url\":\"https://docs.seesaw.fun/api-reference/opinions/preview-backing-an-opinion-step-1-of-2\",\"mainEntityOfPage\":{\"@id\":\"https://docs.seesaw.fun/api-reference/opinions/preview-backing-an-opinion-step-1-of-2#webpage\"},\"dateModified\":\"2026-09-23T20:08:07.144Z\",\"publisher\":{\"@id\":\"https://docs.seesaw.fun/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.seesaw.fun#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"SeeSaw Developer\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"SeeSaw Developer","nav":{"global":null,"tabs":[{"tab":"Guides","pages":[{"title":"Guides","href":""}]},{"tab":"API Reference","groups":[{"group":"REST API","pages":[{"title":"REST API","href":"/api-reference/introduction"}]},{"group":"Endpoints","pages":[{"group":"Topics","pages":[{"title":"Search topics by keyword","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /search","href":"/api-reference/topics/search-topics-by-keyword"},{"title":"Browse topics by ranking","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /topics","href":"/api-reference/topics/browse-topics-by-ranking"},{"title":"List the category channels","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /topic-categories","href":"/api-reference/topics/list-the-category-channels"},{"title":"Get one topic in full detail","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /topics/{id}","href":"/api-reference/topics/get-one-topic-in-full-detail"},{"title":"List top-level opinions of a topic","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /topics/{id}/opinions","href":"/api-reference/topics/list-top-level-opinions-of-a-topic"}]},{"group":"Me","pages":[{"title":"Get the key owner's profile and balances","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /me","href":"/api-reference/me/get-the-key-owners-profile-and-balances"},{"title":"List the key owner's positions","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /me/positions","href":"/api-reference/me/list-the-key-owners-positions"},{"title":"List opinions the key owner published","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /me/opinions","href":"/api-reference/me/list-opinions-the-key-owner-published"},{"title":"List opinions the key owner backed","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /me/backed-opinions","href":"/api-reference/me/list-opinions-the-key-owner-backed"},{"title":"List the key owner's watchlist","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /me/watchlist","href":"/api-reference/me/list-the-key-owners-watchlist"},{"title":"List the key owner's coin ledger","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /me/coin-ledger","href":"/api-reference/me/list-the-key-owners-coin-ledger"},{"title":"List the key owner's ruby ledger","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /me/ruby-ledger","href":"/api-reference/me/list-the-key-owners-ruby-ledger"}]},{"group":"Trading","pages":[{"title":"Preview an order at the user's stake (step 1 of 2)","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /topics/{id}/order-preview","href":"/api-reference/trading/preview-an-order-at-the-users-stake-step-1-of-2"},{"title":"Place the previewed order (step 2 of 2)","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /orders","href":"/api-reference/trading/place-the-previewed-order-step-2-of-2"}]},{"group":"Opinions","pages":[{"title":"Preview publishing an opinion (step 1 of 2)","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /topics/{id}/opinion-preview","href":"/api-reference/opinions/preview-publishing-an-opinion-step-1-of-2"},{"title":"Publish the previewed opinion (step 2 of 2)","description":"Publishes the opinion previewed by `/topics/{id}/opinion-preview` under\nthe owner's name. Accepts **only** the `confirm_token`. Requires the\n`write` scope; counts against both the write window and the read window.\n\nPublishing is **not** idempotent: the token is strictly single-use and\na retry answers `409 CONFIRM_TOKEN_USED`, as does republishing the same\ntext within a minute. Preview again only if the user wants a second post.\n","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /opinions","href":"/api-reference/opinions/publish-the-previewed-opinion-step-2-of-2"},{"title":"Preview backing an opinion (step 1 of 2)","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /opinions/{id}/back-preview","href":"/api-reference/opinions/preview-backing-an-opinion-step-1-of-2"},{"title":"Back the previewed opinion (step 2 of 2)","description":"Spends the previewed `price_coins` to back the opinion. Accepts **only**\nthe `confirm_token`. Requires the `write` scope; counts against both the\nwrite window and the read window.\n\nThe previewed price is a hard cap: if other backers moved the relay\nprice above it the call fails with `409 OPINION_BACK_PRICE_MOVED` —\npreview again and have the user confirm the new price. One user can back\nan opinion once; retrying with the same token returns the original\nbacking and `replayed: true`.\n","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /backs","href":"/api-reference/opinions/back-the-previewed-opinion-step-2-of-2"}]}]}]}]},"basePath":"","title":"Preview backing an opinion (step 1 of 2) - SeeSaw Developer","buildId":"dpl_345ReqzYaAjzS9QpeJemsKdb7KDj","deploymentId":"dpl_345ReqzYaAjzS9QpeJemsKdb7KDj","dynamics":["c2aa737661","2b790eda92","b0f84f53ff","a9bb46feb3"],"chunks":["OpenApiReferenceProvider-C8RPHPxo.js","utils-0BK-9q6z.js","cloneDeep-izs3Hzxb.js","_Uint8Array-BVIqJ90l.js","isObjectLike-C8vmzPEN.js","isArray-Dcu1dQ5t.js","utils-DfjzsUJT.js","toString-BX-iyh8G.js","isSymbol-CSH9U2Gm.js","addUniqueKeysToSchema-B4v9psJ4.js","snippetPresets-CpTQv-Ez.js","style-to-object-BY3JEAdk.js","v4-DIgz8zy6.js","ApiExamples-BNP-Fvr0.js","isEqual-BfaiBbcl.js","usePlaygroundInputsStore-BSgu6h1D.js","shallow-Biv1i9Gs.js","getApiPlaygroundDisplay-BoGOXhtF.js","CodeSnippet-DvQoT18_.js","CodeSnippets-Dnpa15xT.js","Page-Buji1S4J.js","getPastedJson-xAIyhUFE.js","icon-S6FBih11.js","MethodPill-SaYeUZyk.js","DuplicateIcon-Cs-p3v2Q.js","createIcon-DjCFEoHq.js","DynamicMarkdown-BcnBltEQ.js","SectionHeading-BUBl0eEF.js","axios-vUo_bRtp.js","Markdown-h4cOoD8d.js","clsx-B2v50t8t.js","lib-DuNMoZ05.js","lib-B8HbPgcC.js","html-void-elements-mCSPHezU.js","dist-DJnKvr0g.js","katex-YMM-FMeD.js","marked.esm-CZWythHk.js","AssistantPageLink-BHrrjR1K.js"]}