Skip to main content
GET
Get one topic in full detail

Authorizations

Authorization
string
header
required

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.

Path Parameters

id
string<uuid>
required

Topic UUID.

Response

The topic

The list/search/watchlist card. close_time is the trading deadline — the countdown anchor and what can_buy is computed from. end_time is the creator's expected result-submission time and is operational only.

id
string<uuid>
required
title
string
required

Translated to the requested language.

status
enum<string>
required

waiting is virtual — trading closed, awaiting a ruling. proposed / voting mean a ruling is in its publicity or review window; buying is closed from proposed onwards.

There is no refunded state (the v1 surface had one; it retired with the v1 read surface). A topic ruled invalid — the full-refund path — ends as resolved with invalid_reason set and winning_option_id null. Positions on such a topic carry refunded: true; that flag is what separates a refund from a loss, since both leave won and payout_rubies empty.

Available options:
active,
waiting,
proposed,
voting,
resolved
mechanism
enum<string>
required
Available options:
v21_lmsr,
v2_share
close_time
string<date-time>
required
end_time
string<date-time>
required
can_buy
boolean
required
options
object[]
required
traders_count
integer
required
comments_count
integer
required

Number of visible opinions on the topic, replies included (there is no separate reply counter). ⚠️ The name is a deliberate leftover: 2.0 renamed comments to opinions everywhere else (list_topic_opinions replaced list_topic_comments), but this key is a frozen json tag that existing clients parse. Read it as "opinion count".

creator
object | null
required

The topic author as the creator card exposes it. Carries no financial fields.

my_option_ids
string<uuid>[]
required

Options the key owner has staked on (always an array). At most one with v21_lmsr.

ruby_boost
object | null
required

The ruby boost running on this topic right now, or null when there is none (never a half-filled object with multiplier 1). Orders placed, settled, or (in the app) sold while the boost is live get the multiplier. Cards and detail read the same value.

stake_rules
object | null
required

The stake range this topic accepts — v21_lmsr only; null on v2_share topics, which this surface cannot trade.

created_at
string<date-time>
required
url
string
required
description
string | null
required
image_urls
string[]
required
resolution_criteria
string | null
required
resolution_sources
string[]
required
categories
object[]
required
winning_option_id
string<uuid> | null
required
invalid_reason
string | null
required

Set when the topic was ruled invalid and refunded in full (winning_option_id is then null and status is still resolved — 2.0 has no separate refunded state).

settled_at
string<date-time> | null
required
is_watchlisted
boolean
required