Siftsy Analyst API

Siftsy reads the comments on your posts and scores how people reacted: how they feel, whether they stayed on topic, whether they agree with each other, and how the message and subject landed. You already see that in the dashboard for a post, a campaign, or any set of posts you pick. The Siftsy Analyst API brings that same picture into the workflows analysts already run, in the tools they already use.

It is built for the analyst who owns social and community reporting, in two directions:

  • Import flagged content. Posts your listening tool, brand-safety team, or pipeline has flagged — or a public account’s recent posts — go into Siftsy programmatically, spending the same credits and running the same processing as Add New in the app. → Adding content
  • Export key analyses and insights. Scores, mix bars, per-post analyses, selection analyses, and the reports teammates saved in the app come out as stable, paginated JSON that lands cleanly in Snowflake, BigQuery, Databricks, Redshift, or a BI tool such as Power BI, Tableau, or Looker. → BI sync

Every number the API returns is what Siftsy has already computed: it does not rescore posts, edit collections, or invent new scores, so an API result matches what a teammate sees in the dashboard. Comment routes return a sample of evidence behind an analysis, not a full thread — Siftsy is an analysis platform, not a comment exporter.

Create a key under Team Settings → API, then start here:

How it fits together

The Analyst API follows the same three steps you use in the product:

1. Select Content ──▶ 2. Comment Analysis ──▶ 3. View Individual Comments

Select Content. Select posts the way you would in the dashboard: select posts by collection, content tag, filter by creator, platform, link, date, score, or sentiment, or pass specific post ids or links. That description is resolved when you call, and it caps at 1,000 posts. → Content selection

Comment Analysis is what the audience said. Each analysis has two sides: what was posted (the content, topics, and messages it was scored against) and how commenters responded (sentiment, relevance, consensus, content, and topic scores, plus the mix bars). You can narrow to a slice — a mix-bar bucket, keywords, usernames, and so on — or search in plain language. The numbers then describe only the matching comments, and scope tells you how big that slice is. → Analyses

Get comments. The analysis does not include comment bodies. Follow comments.path to get a sample of the comments behind the numbers. → Retrieving comments

Two things stay true throughout:

  • The numbers match the dashboard. Scores, mix bars, filters, and search use the same paths the product uses, so an API result matches what a teammate sees when they click the same thing.
  • Simple reads come back immediately. Heavier ones run as a job. A snapshot of stored scores returns in the same request. AI search, or a very large selection, is queued. Both use the same Analysis object with a status, so your client can always: create, poll if you get a 202, then sample the comments behind it.

Importing flagged content

The pipeline above reads posts that are already in your workspace. Getting them there is a separate, write path, and it is the only one the API has — built for feeding Siftsy the content another system has flagged for review:

POST /content/posts/add ──▶ Content job ──▶ posts process ──▶ readable in GET /posts
POST /content/accounts/add (poll it) (same as Add New) (addedVia: api)

Give a key the opt-in posts:write / accounts:write scopes and it can add posts by URL, or pull a public account’s recent posts filtered by date, engagement, and caption. It spends the same credits and runs the same processing as Add New in the app, so a teammate would get the identical result by pasting the links. You get back a content job that tells you what was accepted, skipped, or rejected, and how the accepted posts are progressing; once they are complete they are ordinary posts for the pipeline above. → Adding content

POST /analyst/v1/content/posts/add
{ "links": ["https://www.tiktok.com/@dove/video/7412345678901234567"], "tags": ["holiday"] }
# → 202 Location: /analyst/v1/content/jobs/cj_… then GET until status is "completed"

Nothing in the export pipeline depends on it: if teammates add content in the app, the API is read-only and the write scopes stay off.

Exporting to your warehouse

Everything the read routes return is designed to be loaded, not screen-scraped: cursor pagination, updated_since for incrementals, stable ids, one JSON shape per resource, and rate limits sized for a scheduled refresh rather than a realtime feed. A typical load pulls collections → posts → per-post metrics and analysis → saved reports, then samples comments only where a dashboard needs evidence. → BI sync, Rate limits

Guides

What to call when

You want to…Call
See who the key belongs to, and how the team scoresGET /me, GET /team
List collections, or see what is in oneGET /collections, GET /collections/{id}, GET /collections/{id}/posts
Find posts by filters or tagsGET /posts, GET /posts/{id}
Get scores for one postGET /posts/{id}/metrics
Get the full analysis for one postGET /posts/{id}/analysis
Analyze a set of posts, with filters or searchPOST /analysesGET /analyses/{id}
List analyses you have already run, including saved reportsGET /analyses
Sample comments behind a post analysisGET /posts/{id}/analysis/comments?source=notables
Sample comments behind a selection analysisGET /analyses/{id}/comments?source=notables
Pull analyses teammates saved or shared in the appGET /snapshots, GET /insights
Add posts by URL, or a public account’s recent posts (write scopes)POST /content/posts/add, POST /content/accounts/addGET /content/jobs/{id}

Lists come back in pages of up to 100. If there are more, send the same filters with the cursor. See Pagination.

A full pass

# 1. Pick the posts — or skip this and go straight to the analysis
GET /analyst/v1/posts?account=@dove&platform=tiktok&tag=holiday
# 2. Analyze them. Here: on-topic comments that look like requests.
POST /analyst/v1/analyses
{ "selection": { "posts": { "account": "@dove", "platform": "tiktok", "tag": "holiday" } },
"filters": { "relevance": ["on_topic"], "keywords": ["please", "available", "uk"] } }
# → 201 { status: "ready", scope: { totalComments: 128, matchedComments: 23, shareOfComments: 0.18 }, … }
# 2b. Or ask a question in plain language — that needs a model, so it queues
POST /analyst/v1/analyses
{ "selection": { "collectionId": "col_dove_influencers" },
"search": { "query": "asking for PR packages or to become an ambassador" } }
# → 202 Location: /analyst/v1/analyses/an_… then GET until status is "ready"
# 3. Sample the comments behind those numbers (not the full thread)
GET /analyst/v1/analyses/an_…/comments?source=notables

Analyses walks this same sequence on a Dove brand + influencer campaign, with real responses.

Base URL

https://api.siftsy.app/analyst/v1

Send your key as Authorization: Bearer YOUR_API_KEY or X-Api-Key. See Authentication and Rate limits.