Skip to main content
Checks the speaking rules and returns the summary to confirm before publishing, plus the confirm_token publish_opinion needs. Scope: write · Annotations: readOnlyHint REST equivalent: POST /open/v1/topics/{id}/opinion-preview
Publishing is free and needs no position. An opinion is still a stated side, not a comment: it argues for one of the topic’s options. This tool charges nothing and counts against the read window only.

Parameters

Which side the opinion takes

  • The owner holds a position on the topic → the opinion takes the side of that position. side_option_id is ignored — a position locks the side.
  • No position → pass side_option_id. Ask the user which side; never infer it from the text. Without it the preview answers can_publish: false with reason SIDE_REQUIRED. An option id that is not an option of this topic is 400 OPINION_SIDE_INVALID.
The side is bound into the confirm_token: to change it, preview again.

Returns

side_option_label is the side the opinion will be attributed to. fee_coins is what publishing costs — "0.0000", since publishing is free. Opinions are text only here: images can be attached in the SeeSaw app, but not through the Open API. Captured live:
Read fee_coins rather than assuming it is zero — the field exists so a future price change does not break agents.
Show the summary to the user and get their explicit confirmation before calling the execute tool. The token is what proves a preview happened — it is not a substitute for asking.

When publishing isn’t allowed

A reply_to_opinion_id that doesn’t exist returns OPINION_NOT_FOUND (404).

Example prompts

  • “Post my take on this market: …” (no position → ask which side it argues for)
  • “Reply to that opinion saying I disagree because …”
publish_opinion · list_topic_opinions · list_my_opinions