APITube Help Center

How to Exclude Paywalled or Duplicate Articles

Use is_paywall=0 and is_duplicate=0 to keep only freely readable, unique articles

Beatrice Riddick

Written by Beatrice Riddick

June 26, 2026

Open this example in the API Playground ↗

How to exclude paywalled or duplicate articles

To drop stories that sit behind a publisher paywall, add is_paywall=0; to drop near-identical reprints of the same story, add is_duplicate=0. Both parameters accept exactly 0 or 1. Send them together to get a clean feed of freely readable, unique articles:

curl "https://api.apitube.io/v1/news/everything?is_paywall=0&is_duplicate=0&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. Without these two parameters no paywall or duplicate filter is applied, so paywalled and duplicate articles come back mixed in with everything else.

How does is_paywall=0 work?

is_paywall=0 keeps only articles that are freely readable on the source website, and is_paywall=1 does the opposite — it returns only articles locked behind the publisher’s paywall. The flag describes the article itself: whether the original story sits behind a paywall on the source site. It is not a flag about your APITube plan, and it does not change how much article body your key receives.

curl "https://api.apitube.io/v1/news/everything?is_paywall=0&api_key=YOUR_API_KEY"

Any value other than 0 or 1 is rejected with a 400 error: a non-numeric value returns error code ER0005, and a number that is not 0 or 1 returns ER0006 with the message that is_paywall must be 0 or 1.

How does is_duplicate=0 work?

is_duplicate=0 removes articles that APITube has flagged as duplicates — a reprint or syndicated copy of the same story — and returns the versions that are not flagged. Duplicate flagging is a best-effort heuristic, so it will not catch every reprint; treat is_duplicate=0 as a way to reduce repeats rather than a guarantee of fully unique results. Flip it to is_duplicate=1 to return only the flagged duplicates instead, which is useful when you want to see how widely a single story was picked up.

curl "https://api.apitube.io/v1/news/everything?is_duplicate=0&api_key=YOUR_API_KEY"

Like the paywall flag, is_duplicate accepts only 0 or 1. A non-numeric value returns error code ER0003, and a number that is not 0 or 1 returns ER0004.

How to combine both into one clean feed

The two parameters stack with each other and with the rest of the filter chain using AND logic, so each one narrows the results further. A common pattern is “unique, freely readable articles from high-ranked sources in one topic”:

curl "https://api.apitube.io/v1/news/everything?is_paywall=0&is_duplicate=0&source.rank.opr.min=6&category.id=medtop:04000000&api_key=YOUR_API_KEY"

You can layer any other filter on top. To restrict by the publishing outlet as well, see How to filter news by source or domain. The full parameter list lives in the official News API parameters reference.

Is there a shortcut for clean, high-quality results?

Yes. is_high_quality=1 is a bundle that, among other conditions, already excludes duplicates for you: it keeps only articles that are not duplicates, come from a higher-ranked source, carry at least one image, and have a named author. Use it when you want one flag instead of stacking several:

curl "https://api.apitube.io/v1/news/everything?is_high_quality=1&api_key=YOUR_API_KEY"

is_high_quality accepts only 0 or 1; any other value returns error code ER0303. Because the bundle already pins is_duplicate=0, you only need to add is_paywall=0 on top if you also want to drop paywalled stories.

How do I confirm a result is free and unique?

Each article in the response carries an is_free boolean and an is_duplicate boolean, so you can check the flags on every result you receive. Watch the naming difference: the paywall filter is is_paywall, but the response field that reports paywall status is is_free. So an article returned by is_paywall=0 comes back with its is_free field set to true, and an article kept by is_duplicate=0 comes back with is_duplicate set to false.

Which endpoints support these filters?

is_paywall and is_duplicate belong to the shared filter chain, so they behave the same way on the main search and retrieval endpoints — including /v1/news/everything, /v1/news/top-headlines and /v1/news/count. Because /v1/news/count runs the same chain, you can measure how many unique, non-paywalled articles match before downloading any of them by sending the same parameters to that endpoint. See How to count matching articles without downloading them.

Common Questions

What happens if I leave these parameters out?

When you omit is_paywall and is_duplicate, no paywall or duplicate filter is applied, so the response includes paywalled articles and duplicate copies alongside everything else. Add is_paywall=0 and is_duplicate=0 to remove them.

Does is_paywall depend on my subscription plan?

No. is_paywall describes the source article — whether the original story is behind the publisher’s paywall — not your APITube plan. It is an attribute of the article, so is_paywall=0 and is_paywall=1 simply split results by that attribute.

What does is_duplicate=1 return?

is_duplicate=1 returns only the articles APITube flagged as duplicates of another story, instead of hiding them. It is the inverse of is_duplicate=0, which returns only the unique versions.

Why am I getting a 400 error on is_paywall?

is_paywall accepts only 0 or 1. A non-numeric value returns error code ER0005, and a number outside 0/1 returns ER0006. The duplicate flag behaves the same way, returning ER0003 and ER0004 respectively.


Related Articles