How to Detect and Filter Clickbait Articles
Surface or hide clickbait with is_clickbait and the sentiment_gap parameters
Written by Beatrice Riddick
June 26, 2026
Updated July 6, 2026
How to detect and filter clickbait
To find or hide clickbait, add the is_clickbait parameter to a News API request. is_clickbait=1 returns articles whose headline emotion clashes with the body, while is_clickbait=0 keeps only articles whose headline and body agree. For example, this returns suspected clickbait within a single category:
curl "https://api.apitube.io/v1/news/everything?is_clickbait=1&category.id=medtop:04000000&api_key=YOUR_API_KEY"
You can send the key as a header (X-API-Key: YOUR_API_KEY) instead of the api_key query parameter. If you omit is_clickbait, no clickbait filter is applied and articles are returned regardless of their headline-to-body sentiment match.
What does the is_clickbait parameter do?
is_clickbait is a sentiment-mismatch heuristic, not a machine-learning label. An article is treated as clickbait when its title sentiment polarity differs from its body polarity and the title carries strong emotion — specifically when the absolute title sentiment score is greater than 0.5. In plain terms: an emotionally charged headline sitting on top of a differently-toned story.
is_clickbait=1 returns those mismatched articles. is_clickbait=0 returns the opposite set — articles where the title and body polarity match, or where the title is only mildly emotional. The parameter accepts exactly two values, 0 or 1; any other value returns HTTP 400 with error code ER0342 (is_clickbait must be 0 or 1.).
How to find clickbait articles
Set is_clickbait=1 to surface headlines that oversell or misrepresent the story underneath. Pair it with a category to focus the scan — category.id takes any IPTC Media Topic code (here medtop:04000000):
curl "https://api.apitube.io/v1/news/everything?is_clickbait=1&category.id=medtop:04000000&api_key=YOUR_API_KEY"
Each article in the response carries a sentiment object with separate title and body entries (each holding a score and polarity), so you can inspect the exact mismatch that flagged it. To pick a category ID, see How to filter news by category.
How to exclude clickbait and keep consistent articles
For a cleaner feed, set is_clickbait=0. This keeps articles whose headline and body sentiment line up, dropping the sensationalized mismatches. Combine it with a trust signal such as is_verified_source=1 to favour straight reporting:
curl "https://api.apitube.io/v1/news/everything?is_clickbait=0&is_verified_source=1&api_key=YOUR_API_KEY"
This is a good default for editorial digests, alerting, or any pipeline where a misleading headline would cause a false signal.
How to tune sensitivity with sentiment_gap
is_clickbait uses a fixed threshold, but you can measure the headline-to-body distance directly with sentiment_gap. The gap is the absolute difference between the title sentiment score and the body sentiment score, on a 0–2 scale, regardless of direction. Use sentiment_gap.min to require at least a certain mismatch:
curl "https://api.apitube.io/v1/news/everything?sentiment_gap.min=0.5&api_key=YOUR_API_KEY"
A higher sentiment_gap.min means a larger emotional disconnect between headline and body. Use sentiment_gap.max for the reverse — articles whose headline closely matches the body tone, optionally combined with a source-rank floor:
curl "https://api.apitube.io/v1/news/everything?sentiment_gap.max=0.2&source.rank.opr.min=5&api_key=YOUR_API_KEY"
Both bounds must be floats between 0 and 2. Out-of-range values return ER0344 (sentiment_gap.min) or ER0249 (sentiment_gap.max); non-numeric values return ER0343 or ER0345.
How to combine clickbait detection with other filters
is_clickbait and sentiment_gap stack with every other filter, so you can narrow by category, require an extra-wide gap, and sort by overall sentiment in one call:
curl "https://api.apitube.io/v1/news/everything?is_clickbait=1&category.id=medtop:11000000&sentiment_gap.min=0.3&sort.by=sentiment.overall.score&api_key=YOUR_API_KEY"
If you only care about whether the headline and body disagree — without the strong-emotion requirement of is_clickbait — use sentiment.consistent=1 (matching polarity) or sentiment.mixed=1 (differing polarity) instead. To strip out low-quality noise alongside clickbait, see How to exclude paywalled or duplicate articles. All three parameters are documented in the official News API parameters reference.
Which endpoints support is_clickbait?
is_clickbait and sentiment_gap run in the shared sentiment filter chain, so they work on the main search and retrieval endpoints — including /v1/news/everything, /v1/news/top-headlines and /v1/news/count — on both GET (query string) and POST (request body) requests.
Common Questions
- What values does is_clickbait accept?
- What is the difference between is_clickbait and sentiment_gap?
- Does is_clickbait use a machine-learning model?
- How do I just exclude clickbait from my feed?
What values does is_clickbait accept?
is_clickbait accepts only 0 or 1. Use 1 to return suspected clickbait and 0 to return articles whose headline and body sentiment are consistent. Any other value returns HTTP 400 with error code ER0342.
What is the difference between is_clickbait and sentiment_gap?
is_clickbait=1 is a preset: it requires both a polarity mismatch and a strong title sentiment (absolute score above 0.5). sentiment_gap.min and sentiment_gap.max instead let you set the exact title-to-body sentiment distance yourself, on a 0–2 scale, without the polarity-mismatch condition. Use is_clickbait for a one-shot flag and sentiment_gap when you need to dial sensitivity.
Does is_clickbait use a machine-learning model?
No. is_clickbait is a rule based on sentiment scores: it compares the title and body sentiment polarity and checks whether the title sentiment is strong. It does not run a dedicated clickbait classifier, so treat the results as a signal to review rather than a final verdict.
How do I just exclude clickbait from my feed?
Add is_clickbait=0 to your request. It returns articles whose title and body sentiment agree (or whose headline is only mildly emotional), which removes the sensationalized mismatches from your results. Combine it with is_verified_source=1 or a source.rank.opr.min floor for a stricter, cleaner feed.