type, so you do not pass anything to switch between them. The shared response fields are identical for both sources, with a source field on each post and a few source-specific extras described in the Reddit watchlists section.
Query Parameters
string
required
Watchlist ID to retrieve posts from. This parameter is required and must be a single watchlist ID.
number
default:"1"
Page number for pagination. Combine with
page_size to control how many posts you get per page (defaults to 20).number
default:"20"
Number of posts returned per page. Used together with
page (or on its own) for offset-free pagination, e.g. page=2&page_size=50 returns posts 51 to 100. Use page_size and page (or range_from/range_to); unrecognized aliases such as limit, offset, per_page, or pageSize are rejected with a 400 (with a did-you-mean hint naming the correct parameter where the alias is close enough, and the full allowed-parameter list in every case).Filtering Parameters
string | array
Filter to posts classified into these intent labels (the watchlist’s label
key strings). Pass multiple as comma-separated (labels=buying-intent,competitor-mention) or repeated params. Use the special value no labels to fetch unclassified posts (stored tag "na"). The feed is not filtered to the watchlist’s default labels automatically; to reproduce the app’s default feed, read the labels with default: true from the watchlist GET and pass them here. See Intent labels & defaults.string | array
Filter by specific people (profile slugs). LinkedIn watchlists only; ignored on Reddit.
string | array
Filter by specific companies (company slugs). LinkedIn watchlists only; ignored on Reddit.
string
Search within post content. LinkedIn watchlists only; ignored on Reddit.
boolean
Filter for bookmarked/saved posts only. Works on both LinkedIn and Reddit.
string | boolean
Restrict results to English posts only. Accepts
"en", "english",
"true", or true. Any other value is ignored.Non-English language filtering is not currently supported, posts in
other languages can be retrieved by omitting this parameter.LinkedIn watchlists only; ignored on Reddit (Reddit posts do not carry a
language field).string
Filter posts from this date onwards (ISO 8601 format: YYYY-MM-DD). Works on both LinkedIn and Reddit.
string
Filter posts up to this date (ISO 8601 format: YYYY-MM-DD). Works on both LinkedIn and Reddit.
string
Filter by post type (e.g., “article”, “image”, “video”, “poll”). LinkedIn watchlists only; ignored on Reddit.
boolean
Filter for trending posts with high engagement. LinkedIn watchlists only; ignored on Reddit.
boolean
Filter for posts you’ve already liked or commented on. LinkedIn watchlists only; ignored on Reddit.
string | array
Filter by author’s seniority level. Supports multiple comma-separated values (e.g.
"VP,Director"). Values must match exactly one of: "Entry Level", "Manager", "Senior", "Director", "VP", "CXO/Founder". An unrecognized value is rejected with a 400. LinkedIn watchlists only; ignored on Reddit (Reddit does not have author profile data).string
Retrieve a specific post by its LinkedIn slug. LinkedIn watchlists only; ignored on Reddit.
string | array
Filter by post relevance bucket. Supports multiple comma-separated values (e.g.
"high,medium"). Allowed values: "high" (relevance score 8 to 10), "medium" (4 to 7), "low" (1 to 3); any other value is rejected with a 400. Works on both LinkedIn and Reddit watchlists. Note: the bucketed relevance_level response field is currently only returned on Reddit rows; on LinkedIn, use the numeric relevance_score field on each post.Sorting Parameters
string
default:"recent"
Sort order for posts. Options:
recent: most recent posts first (default; both sources)popular_first: highest engagement (likes plus comments) first (LinkedIn). On Reddit, this aliases torelevance_first.engagement: alias forpopular_first(LinkedIn). On Reddit, also aliases torelevance_first.relevance_first: Reddit watchlists only. Sorts by relevance score, highest first, then by post date.
400 (it is no longer silently treated as recent).number
default:"0"
Pagination start offset (0-indexed). Use with
range_to for custom page sizes.number
default:"19"
Pagination end offset (inclusive). Default returns 20 posts (0-19).
Response Fields
array
Array of post objects
number
Total number of posts matching the filters
Post Object Fields
string
Unique post identifier
string
Direct URL to the LinkedIn post.
null on Reddit watchlists; see reddit_url instead.string
ID of the watchlist this post belongs to
string
Post text content
string
Name of the post author
string
LinkedIn profile slug of the author
string
Headline/bio of the post author
string
Profile image URL of the author
string
ISO 8601 timestamp when the post was added to OutX
string
ISO 8601 timestamp when the post was published on LinkedIn
number
Number of likes on the post
number
Number of comments on the post
Number of shares/reposts
boolean
Whether the post has been bookmarked/saved
string
Type of post (e.g., “text”, “image”, “video”, “article”, “poll”)
string
Detected language of the post. Empty string on Reddit watchlists.
array
The intent label(s) the post was classified into, matching the
labels set on the watchlist (a tag equals a label key). A post with no confident match has ["na"], and tags is empty until the post has been enriched. See Intent labels & defaults.There is no
sentiment field. OutX returns intent labels (tags), not sentiment, and relevance_score measures relevance to the watchlist, not tone. tags are written asynchronously during enrichment, so a freshly collected post can return empty tags for a while, treat that as “not classified yet,” not “no match.”array
Array of image URLs attached to the post
array
Array of video data attached to the post
string
Seniority level of the post author. One of
"Entry Level", "Manager", "Senior", "Director", "VP", "CXO/Founder". Empty string on Reddit watchlists.number
Relevance score of the post (1-10). High: 8-10, Medium: 4-7, Low: 1-3. Returned for both LinkedIn and Reddit posts.
array
Array of countries associated with the post author’s location. When the location could not be determined, this is the single-element array
["NA"] rather than an empty array. null on Reddit watchlists.array
Array of objects with
tag and description for each tag.Reddit watchlists
The/api-posts endpoint also serves Reddit watchlists. The URL, authentication, and pagination are identical to the LinkedIn flow; pass the Reddit watchlist’s id as watchlist_id and the server detects the source from tracking_lists.type.
A Reddit row in data represents either a Reddit post or a top-level comment that matched one of the watchlist keywords. The shared response fields above are filled best-effort, with these source-specific differences:
- A discriminator field,
source: "reddit", is present on every Reddit row. LinkedIn rows do not include this field. linkedin_post_url,videos, andlocation_countriesare alwaysnull.language,author_url,author_headline, andseniority_levelare empty strings (Reddit posts do not carry these data).shares_countandcomments_countare always0. Usecomment_*andpost_vote_countmappings instead.likes_countis the Reddit post upvote net score (mapped frompost_vote_count).tagsis a single-element array derived from the row’slabelcolumn.post_typeis"reddit_post"for posts and"reddit_comment"for comments.
string
Always
"reddit" on Reddit rows. Absent on LinkedIn rows.string
Direct URL to the Reddit post or comment.
string
Reddit post title. May be
null for rows that represent a comment under a post that was not separately ingested.string
Body of the Reddit post.
string
Subreddit name (e.g.
r/dataengineering). Mapped from the underlying post_group_name column.string
Reddit username of the comment author.
null when the row is a post.string
Comment body.
null when the row is a post.string
ISO 8601 timestamp of the comment.
null when the row is a post.number
Reddit comment upvote net score.
0 when the row is a post.string
Bucketed relevance:
"high", "medium", or "low". Derived from relevance_score. null if the post has not been scored.array
Array containing the watchlist keyword that matched this row. Empty if the row is no longer linked to a keyword (for example after a watchlist update).
Reddit response example
Response (Reddit watchlist)
Reddit examples
Get posts from a Reddit watchlist
High-relevance Reddit posts only
Pagination
Posts are returned in batches of 20 by default. You can use eitherpage + page_size (simpler) or range_from + range_to (offset-based) to paginate.
count field in the response shows the total number of posts matching your filters, so you know how many pages to fetch.
Error Responses
Frequently Asked Questions
Can I get posts from all my watchlists at once?
Can I get posts from all my watchlists at once?
No. The
api-posts endpoint now requires a single watchlist_id and returns posts for that watchlist only. To build a unified feed across multiple watchlists, make separate requests per watchlist and merge the results on your side.What is the maximum number of posts returned per page?
What is the maximum number of posts returned per page?
The default page size is 20 posts. To change it, pass
page_size (for example page_size=50 returns 50 posts per page), or use range_from and range_to for offset-based pagination (e.g. range_from=0&range_to=49 returns the first 50). The count field in the response tells you the total number of matching posts so you know how many pages to fetch.How do I show only the watchlist's default feed (like the app)?
How do I show only the watchlist's default feed (like the app)?
The API does not auto-apply default labels. Fetch the watchlist (
GET /api-keyword-watchlist?id=... or GET /api-reddit-watchlist?id=...), collect the label key values where default is true, and pass them as the labels parameter. See Intent labels & defaults.How do I filter by multiple seniority levels?
How do I filter by multiple seniority levels?
Pass comma-separated values to the
seniority_level parameter. For example: seniority_level=VP,Director. This returns posts authored by people at any of those seniority levels. Values must match exactly one of: Entry Level, Manager, Senior, Director, VP, CXO/Founder. An unrecognized value is rejected with a 400.
