Create a comment with forged author + optional created_at
POST /admin/seed/comments
Operator-tooling endpoint for the demo-seed loader.
NOT for general operator use — gated on system.admin;
not surfaced in the admin UI.
Creates a single comment with author_user_ref forged to
the supplied user (the regular POST /posts/{id}/comments
stamps the caller as author, which is wrong for seeding
per-post reviewer voices).
Idempotent when the caller supplies a stable id: a
re-run with the same id returns 200 with the existing
row instead of 409 — apply scripts can re-run safely.
Emits one admin.seed.comment_created audit per call.
Authorizations
Section titled “Authorizations ”Request Body required
Section titled “Request Body required ”object
Optional stable UUID for idempotent re-runs. When omitted the server generates one.
Forged author. Must reference an existing
user.ref. The seed loader uses this to attribute
comments to per-post reviewer voices distinct from
the operator running apply.
Optional parent comment. When set, depth + root_id are derived from the parent (same logic as the public CreateComment path).
Defaults to empty (matches the local CreateComment
path; the frontend renders body directly with
whitespace-pre-wrap).
object
Optional creation timestamp. Defaults to NOW() when omitted. The seed loader uses this to align comment timeline with the 14-month interlaced feed.
Responses
Section titled “ Responses ”Idempotent re-run — the supplied id already
exists; the existing row is returned unchanged.
A single comment in a thread. Threading is via parent_id + root_id + depth (caller renders nested replies indented by depth). annotation_* fields are NULL for plain comments; the review-mode feature reuses the same row shape.
Federation: exactly one of {author_user_ref} XOR {peer_id + actor_uri} is set per row. Local-authored comments have author_user_ref set + peer_id NULL. Remote-authored comments (from a paired peer per ADR 0043 / phase 1.22.D) have author_user_ref NULL + peer_id + actor_uri + display_name populated. Clients render “<display_name> @ <peer’s host>” for remote rows.
object
Local author user.ref. NULL for remote-authored comments (see peer_id / actor_uri).
Server-rendered safe HTML; clients should render this rather than reformatting body.
object
The federation peer that originated this comment. NULL for local-authored rows. Set in tandem with actor_uri
- display_name when the comment came in via the federation inbox.
The remote actor’s URI on their home instance (e.g. https://studio-b.example/users/bob). NULL for local-authored rows.
Display name resolved from federation_remote_actors cache for remote-authored comments. May be empty if the remote instance hasn’t shipped display hints yet; clients should fall back to the actor_uri’s host + local-part when this is empty.
Comment created.
A single comment in a thread. Threading is via parent_id + root_id + depth (caller renders nested replies indented by depth). annotation_* fields are NULL for plain comments; the review-mode feature reuses the same row shape.
Federation: exactly one of {author_user_ref} XOR {peer_id + actor_uri} is set per row. Local-authored comments have author_user_ref set + peer_id NULL. Remote-authored comments (from a paired peer per ADR 0043 / phase 1.22.D) have author_user_ref NULL + peer_id + actor_uri + display_name populated. Clients render “<display_name> @ <peer’s host>” for remote rows.
object
Local author user.ref. NULL for remote-authored comments (see peer_id / actor_uri).
Server-rendered safe HTML; clients should render this rather than reformatting body.
object
The federation peer that originated this comment. NULL for local-authored rows. Set in tandem with actor_uri
- display_name when the comment came in via the federation inbox.
The remote actor’s URI on their home instance (e.g. https://studio-b.example/users/bob). NULL for local-authored rows.
Display name resolved from federation_remote_actors cache for remote-authored comments. May be empty if the remote instance hasn’t shipped display hints yet; clients should fall back to the actor_uri’s host + local-part when this is empty.
Malformed request
object
Human-readable error summary
Example
the request could not be completedAuthentication required, missing, or invalid
object
Human-readable error summary
Example
the request could not be completedExample
{ "error": "authentication required: sign in and retry with a valid session or API token"}Authenticated but missing required capabilities
object
Human-readable error summary
Example
the request could not be completedEither the target object (post / asset / collection) or the supplied author user does not exist.
object
Human-readable error summary
Example
the request could not be completed