Threads

Retrieve a thread

Read one thread and its opening message. The replies are a separate collection at GET /threads/{thread}/messages, so a busy thread does not make this response unbounded.

A thread opened by an article inherits that article's audience: if the article is not readable by this credential, neither is its thread.

get/threads/{thread}

Request

  • Base URL: https://api.usecommune.com
  • URL: https://api.usecommune.com/threads/{thread}
  • Auth: one of:
    • HTTP bearer
    • OAuth 2 (authorization code, authorization URL https://usecommune.com/api/oauth/authorize, token URL https://usecommune.com/api/oauth/token, scopes: content:read)

Query parameters

expandstring

Comma-separated list of relationship paths to inline in the response. Unexpanded relationships are returned as a reference object carrying only id and object. Each operation documents the paths it accepts, and an unknown path answers 400. Nested paths use a dot, for example article.newsletter.

fieldsstring

Comma-separated allow-list of top level properties to return on each object, so a client can trim a response it does not need in full. id and object are always returned. An unknown property name answers 400. Properties omitted by an operation, such as content on any article list, cannot be brought back with fields.

Response

The thread.

object'thread' required

Always thread.

idstring uuid required

Stable identifier.

short_idstring nullable

Eight character base62 identifier used by the thread's own URL at /n/{handle}/chat/{short_id}. Null for a thread Commune opened under an article, which is reached through the article instead.

contentstring required

The opening message. HTML, since people format what they write. Treat it as untrusted markup and render it in a sandboxed context.

visibility'public' | 'subscribers' required

Where a thread is placed. public puts it on the global Commune feed and makes it readable by anyone. subscribers keeps it inside the newsletter. Set and changed by the newsletter's team.

A third value, paid, was in this enum until 2026-10-10. It was never produced by anything and no thread ever carried it, so it was removed rather than left as a state consumers had to handle. See Removals under Versioning.

is_article_threadboolean required

true when Commune opened this thread under an article rather than a person starting it. These are kept off the global feed, because the article card already represents the conversation there.

reply_countinteger

Undeleted replies in the thread, at any depth.

view_countinteger

How many times the thread was opened.

created_atstring date-time required

When the thread was opened.

updated_atstring date-time

When the thread row last changed for any reason.

edited_atstring date-time nullable

When the author last edited the opening message. Null when it was never edited, which is what drives the edited marker in the product.

last_activity_atstring date-time required

When the thread last received a reply, or when it was opened if it never did. This is the sort key for the thread list.

Example response

{
  "newsletter": {
    "object": "newsletter",
    "id": "9a4c1c6e-0f2b-4f47-9d3f-6d1b1a2c3d4e"
  },
  "author": {
    "object": "newsletter",
    "id": "9a4c1c6e-0f2b-4f47-9d3f-6d1b1a2c3d4e"
  },
  "article": {
    "object": "newsletter",
    "id": "9a4c1c6e-0f2b-4f47-9d3f-6d1b1a2c3d4e"
  }
}

Changes

No recorded changes to this operation across all 1 revision of this API.