Post analysis
A Siftsy analysis is the relationship between what the post is and how commenters responded. GET /posts/{postId}/analysis returns both sides without comment bodies. Comments for that analysis live underneath it:
Analyses of a selection of posts (a collection, tag, filter set, or explicit ids) use the same pattern, with POST /analyses in front to define the selection and any comment filters or search:
Post analysis is the per-post dashboard view, always materialized. Analyses covers selections of up to 1,000 posts and the job model for searches. Both nest comments under the analysis — they are not a standalone post resource.
GET /posts/{postId}/analysis
Requires posts:read. Materialized only — it never rescores or runs live LLM.
comments.path is the subresource for comment bodies.
Full payload
Every field is always present; values that were never materialized for the post are null or []. scores.scoreVersion tells you which scoring model produced the numbers (see Scores).
Content (creator-side)
Content mix labels: Supportive / Receptive / Split / Skeptical / Opposed. Topic mix labels: Enthusiastic / Favorable / Mixed / Critical / Hostile. JSON keys are the same positivePercent … negativePercent as sentiment. See Scores.
Comment analysis (audience-side)
completeness is full, scores_and_content, scores_only, content_only, or unavailable. Themes, notables, and clouds stay empty unless they were stored on the post. They do not trigger a live analysis job.
Consensus is not agreement with the post. A thread can be uniformly negative toward the post and still have high consensus.
GET /posts/{postId}/analysis/comments
Requires comments:read and posts:read. This is a sample of comments behind that analysis — the same mix bars and creator topics/messages — not a dump of the thread. Hidden comments are excluded.
Siftsy is an analysis platform, not a comment exporter. Use source=notables (or content / all) for evidence. Do not treat this route as a way to export a full comment section.
On-topic comments that are fighting, still as a sample:
source=notables is engagement + relevance, content groups onto creator topics/messages, all is the union. Sampled rows include sampleReasons. meta.groups lists creator topics and messages with commentCount and sampleCommentIds. Mix-bar filters narrow the sample. See Retrieving comments.
This route is the comments rate class (120 requests / minute, 1,000 / day, per key) — enough to sample source=notables for every post in a 500-post workspace once a day, and deliberately not enough to page full threads.
GET /analyses/{analysisId}/comments
Requires comments:read and analyses:read. Same sampled evidence as the post analysis comments route — across every post on that analysis (up to 1,000 posts), not a full-thread export. For analyses created with POST /analyses, the analysis’s own filters and search matches are applied first, so the sample is drawn from the set the analysis numbers describe.
GET /analyses/{analysisId} includes comments.path. Comment bodies are not on the analysis itself.
Analyses with more than 1000 posts return 400. meta.groups includes postId when more than one post is in the result. Analyses that are still queued / running return 409 analysis_not_ready.
This route is the analysis_comments rate class (20 requests / minute, 300 / day, per key): every page re-reads the comments of every post on the analysis, so use it for the comments behind a filter or search rather than for bulk export. POST /analyses is analysis_create or analysis_search; GET /analyses/{analysisId} is analysis_read. See Rate limits. See Analyses for the full selection → analysis → comments flow and the analysis payload.