APITube Help Center

How to Find the Original Source of a Story

Trace who published first by sorting coverage chronologically and comparing published_at across sources

Beatrice Riddick

Written by Beatrice Riddick

July 3, 2026

Updated July 6, 2026

Open this example in the API Playground ↗

How to find the original source of a story

The original source of a story is the article that published it first, so the fastest way to find it with the APITube News API is to sort coverage by publication time, oldest first. Run a search on the topic with sort.by=published_at&sort.order=asc, and the first result is the earliest article APITube indexed for that query. There is no separate “who broke it” endpoint — the earliest published_at timestamp is the signal you rank on.

curl "https://api.apitube.io/v1/news/everything?title=OpenAI%20acquisition&sort.by=published_at&sort.order=asc&api_key=YOUR_API_KEY"

sort.by defaults to published_at and sort.order defaults to desc (newest first), so the one part you must flip is sort.order=asc to put the oldest coverage on top. Each result carries a published_at field in ISO 8601 (for example 2026-06-20T08:00:00.000Z) and a source.domain, so the top row tells you both when and which outlet published first.

How to trace the original source from an article you already have

If you already hold one article and want the rest of the coverage around it, call the story endpoint with that article’s ID: /v1/news/story/:id. It reads the source article’s headline, keeps the meaningful keywords, and returns other articles whose titles share them — the same-story coverage across other outlets.

curl "https://api.apitube.io/v1/news/story/1234567?api_key=YOUR_API_KEY"

One thing to know: the story endpoint ranks results by keyword overlap, not by date, so the first row is the closest headline match, not the earliest article. To find the original among them, read the published_at value on each result and pick the smallest one. Every article object also exposes a story.uri pointing back at /v1/news/story/{id}, so you can pivot from any search hit straight into its cluster. See How to Get All Articles Covering the Same Story for the full mechanics of that endpoint.

How to narrow the search to the window the story broke in

A pure oldest-first sort can surface unrelated older articles that happen to match your keywords. Bound the search to the days around the event with published_at.start and published_at.end, then the earliest result inside that window is a much cleaner “first published” candidate:

curl "https://api.apitube.io/v1/news/everything?title=OpenAI%20acquisition&published_at.start=2026-06-19&published_at.end=2026-06-21&sort.by=published_at&sort.order=asc&api_key=YOUR_API_KEY"

Both published_at.start and published_at.end accept a date or full timestamp. You can also pass a single published_at=2026-06-20 to limit results to that one calendar day. For the full date syntax, see How to Filter News by Date Range.

Which response fields identify the source?

Once you have the earliest article, three fields tell you exactly where it came from:

  • href — the direct URL of the article on the publisher’s site.
  • source.domain — the publishing domain, e.g. reuters.com.
  • source.home_page_url — the outlet’s home page, useful for attribution.

source.type labels the kind of outlet (for example a news site or a blog). Pair the earliest published_at with these fields and you have a defensible answer for who published the story first and where. To trim the payload to just what you need, add fl=id,href,published_at,source.domain.

Common Questions

Does the story endpoint return results in chronological order?

No. /v1/news/story/:id ranks its results by how many headline keywords overlap with the source article, so the top result is the closest match, not the earliest article. To order the same-story coverage by time, either compare the published_at field across the returned results yourself, or run a normal /v1/news/everything search with sort.by=published_at&sort.order=asc. Both approaches use the same publication timestamp; only the search route sorts by it for you.

How many articles can one request return?

per_page defaults to 100 and accepts up to 250; a larger value returns ER0171 (HTTP 400). Walk through additional pages with page. For tracing an original source you rarely need more than the first page of an oldest-first sort, but a wide date window may need paging to reach the earliest match.

Why is the article content shortened?

Content is masked on Free-plan keys and on test keys (those starting with api_test_), which append an upgrade marker (...[Upgrade subscription plan]) to fields including body, href, source.domain and source.home_page_url. Because the URL and domain you need to identify a source are among the masked fields, reliable source tracing needs a live key on a paid plan. The published_at timestamp is returned in full on every plan, so you can still order coverage by time even on a free key.

What does an original-source lookup cost?

A /v1/news/everything search and a /v1/news/story/:id call each cost 1 credit, and a story call only charges you when it returns at least one related article. The story endpoint can return ER0235 (HTTP 404) if the ID matches no article, or ER0240 (HTTP 404) if the source headline has no usable keywords to build a story from. The canonical list of every parameter used here lives in the official parameters reference.


Related Articles