APITube Help Center

How to Detect and Filter Clickbait Articles

Surface or hide clickbait with is_clickbait and the sentiment_gap parameters

Beatrice Riddick

Written by Beatrice Riddick

June 26, 2026

Updated July 6, 2026

Open this example in the API Playground ↗

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 02 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?

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 02 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.


Related Articles