Skip to main content
GET
/
:projectId
/
api
/
v7
/
comments
Fetch Many Comments
curl --request GET \
  --url https://api.sublay.io/api/v6/:projectId/api/v7/comments
Returns a paginated list of comments. Used for both top-level comment threads (filter by entityId) and reply threads (filter by parentId). Also used for user profile comment history (filter by userId). Deleted comments in thread view appear as stripped placeholders to preserve tree structure (Reddit-style). Authors viewing their own comments always see full data.

Query Parameters

entityId
string
Filter comments by entity. Returns all comments (top-level and replies) for this entity.
parentId
string
Filter to replies of a specific comment. Used to fetch a reply thread.
userId
string
Filter to comments by a specific user. When this matches the authenticated user’s ID, soft-deleted comments are included with full data.
sourceId
string
Filter by the sourceId of the entity. Only effective when include contains entity.
sortBy
string
default:"createdAt"
Sort order. One of:
  • createdAt — chronological by creation time (honors sortDir; newest first by default)
  • top — by net upvotes (upvotes minus downvotes)
  • controversial — high total votes with a close up/down split (comments with no votes sort last)
sortDir
string
default:"DESC"
Sort direction for sortBy=createdAt. ASC or DESC.
new and old are deprecated aliases (removed in v8). new === createdAt with sortDir=desc; old === createdAt with sortDir=asc. They still work identically, but requests using them receive a non-blocking Deprecation response header — switch to createdAt (+ sortDir).
page
number
default:"1"
Page number (1-indexed).
limit
number
default:"10"
Number of comments per page. Maximum 100.
include
string
Comma-separated list of associations to include. Valid values: user, entity, space.
Requesting space automatically includes entity as well, since space membership is resolved via the entity. Requesting user also includes the user’s avatar and banner file URLs.

Space-scoped reputation

This endpoint has a space in context, so it accepts the opt-in reputation params. They add a spaceReputation field to each populated author user, alongside the always-present reputation total. Requires the reputation bundle. See the Reputation data model for the full contract.
spaceReputationId
string
Adds spaceReputation to each returned user. One of: a space <uuid> (that space’s bucket), none (the project-general bucket), or context (the space derived from this request’s context — per-row on lists). The empty string and the legacy general / null aliases are rejected (400). Missing buckets read as 0.
spaceReputationDescendants
boolean
Only honored with an explicit space <uuid>. When true, spaceReputation is the subtree sum — the space plus all of its descendants (the root space’s own bucket included). Ignored for none; not allowed with context.

Response

Returns a paginated response:
{
  "data": [ ...Comment[] ],
  "pagination": {
    "page": 1,
    "limit": 10,
    "total": 54,
    "totalPages": 6,
    "hasMore": true
  }
}
Each item is a Comment. In thread view (no userId filter), removed comments appear as stripped placeholders: userId, user, content, gif, mentions, and attachments are nulled out. Structural fields such as id, parentId, entityId, reactionCounts, repliesCount, createdAt, updatedAt, metadata, and foreignId are retained so the tree can be rendered. This applies to both user-deleted comments (always stripped) and moderation-removed comments (stripped for non-authors; the author sees full data).