keywords (direct mode, documented below) or prompt (AI mode, documented in Prompt mode at the bottom of this page), not both.
Request Body (direct keywords mode)
Watchlist name. If not provided, a name will be auto-generated based on
keywords.
Array of keywords to track. Can be simple strings or advanced keyword objects with filtering rules.Simple format:Advanced format with filters:
Optional description for the watchlist
Custom intent labels OutX uses to classify matching posts. Each label is a
name and a description; the description is what the AI matches a post against. See How intent labels are calculated.Fetch frequency in hours. Allowed values:
1, 3, 6, 12, 24, 48, 72How intent labels are calculated
Labels (shown as Intents in the OutX app) are how OutX classifies the meaning of a matched post, not just whether it matched a keyword. Each label is aname plus a description, and the description is what the AI matches a post against.
Labels are stored on the watchlist, not on individual posts. They are applied to posts during a background enrichment pass and then surface on each post in the Get posts response as tags (the matched label name) and tagDescriptions.
The same concept has two names in the API:
labels on the watchlist, tags on a post. A post’s tag is the label it was classified into. A post with no confident match gets the tag "na".How a post gets classified
Each newly collected post is enriched in two steps:- Relevance scoring (deterministic). The post is scored against the watchlist using embedding similarity plus keyword matching, producing
relevance_score(1-10). Low-relevance posts are tagged"na"and skip the next step. - Label selection (AI). For relevant posts, a single model call picks the one label whose
descriptionbest fits the post, or none. The chosen label is written to the post’stags.
description is read by the classifier, a clear, specific description matters far more than the name.
Timing: labels are not instant
A post is not labeled the moment you create the watchlist. Two delays stack:- Collection cadence. New posts only arrive on the watchlist’s
fetchFreqInHourscycle (1, 3, 6, 12, 24, 48, 72; default 12h). Until the next scan runs, there are no new posts to classify. - Enrichment. Every newly collected post starts unlabeled and is classified by a background job. Historical posts pulled in when the watchlist is first created are unlabeled the same way until that job processes them.
tags as “not classified yet,” not “no match.”
Editing labels is forward-only
Each post is classified into a label exactly once, when it is first enriched. Adding or changinglabels with Update keyword watchlist changes how future posts are classified but does not re-label posts that were already enriched, they keep the tags they had. To re-classify already-collected posts against new labels, those posts must be explicitly re-enriched (OutX re-runs classification over roughly the last 30 days); a plain label update does not do this on its own.
Advanced Keyword Filtering
Each keyword can have additional filtering rules:The primary keyword to search for
Context keywords used together with the primary keyword. How they combine is controlled by
include_all_required.None of these keywords should be present in the post (NOT logic)
Controls how
required_keywords combine. true (default) means every required keyword must be present (AND logic). false means any one is enough (OR logic). OR usually matches far more posts and is what the AI prompt generator uses, so set include_all_required to false when a multi-term required list is matching almost nothing. Plain-string keyword entries always use the default (AND).When you create a keyword watchlist, OutX backfills recent matching posts from its existing pool in the background, so the watchlist is not empty while it waits for the first live fetch cycle.
Idempotency
POST is idempotent on the keyword set. If your team already has a keyword watchlist whose primary keywords match the request exactly (order-insensitive, lower-cased, trimmed), the existing watchlist is returned with:- HTTP status 200 OK (instead of 201 Created)
created: false- The existing watchlist’s
fetchFreqInHoursandlabelsare returned, your request’s values are ignored for the duplicate match.
Response Fields
Unique identifier for the watchlist
Watchlist name
URL-friendly slug for the watchlist
Always “keyword” for keyword watchlists
Array of tracked keywords
Fetch frequency in hours
true when a new watchlist was created (status 201), false when an existing watchlist with the same keyword set was returned (status 200).Array of keyword creation results
Error Responses
| Status Code | Error Message | Description |
|---|---|---|
| 400 | Missing required parameter: keywords | Keywords array is required |
| 400 | Invalid fetchFreqInHours value | Fetch frequency must be one of: 1, 3, 6, 12, 24, 48, 72 |
| 401 | Unauthorized | Invalid or missing API key |
Use Cases
Track Job Postings
Track Job Postings
Monitor hiring posts for specific roles and locations:
Monitor Industry Trends
Monitor Industry Trends
Track discussions about emerging technologies:
Competitor Analysis
Competitor Analysis
Watch for mentions of competitors:
Prompt mode
Skip the keyword brainstorming and let OutX generate keywords and intent labels for you. Send a singleprompt field describing what you want to track in plain English. OutX creates the watchlist immediately and runs keyword and label generation in the background.
Request Body
Plain-English description of what to track. URLs are allowed; OutX fetches page metadata to improve keyword quality.Examples:
"AI-native CRM tools and competitors like Salesforce, HubSpot""People looking for remote software engineering jobs""Mentions of our product Acme and common complaints"
Optional watchlist name. Auto-generated from the prompt if omitted.
Fetch frequency in hours. Allowed values:
1, 3, 6, 12, 24, 48, 72.Frequently Asked Questions
Is there a maximum number of keywords I can add to a single watchlist?
Is there a maximum number of keywords I can add to a single watchlist?
The number of keywords per watchlist depends on your subscription plan. Free plans have lower limits, while Growth, Expert, and Ultimate plans allow more keywords. If you hit your plan’s keyword limit, the API will return an error. Contact support@outx.ai for details on plan-specific limits.
How soon does tracking start after I create a keyword watchlist?
How soon does tracking start after I create a keyword watchlist?
Tracking begins immediately after creation. OutX will start scanning LinkedIn for matching posts on the next fetch cycle, based on the
fetchFreqInHours value you set. If you set fetchFreqInHours to 1, you can expect the first results within an hour.What happens when I hit my plan's watchlist limit?
What happens when I hit my plan's watchlist limit?
When you reach the maximum number of watchlists allowed by your plan, the API will return an error when you try to create a new one. You can either delete an existing watchlist to free up a slot, or upgrade your plan for higher limits.

