curl --request GET \
--url https://api.newscatcherapi.com/news-api/stories/{story_id} \
--header 'x-api-key: <api-key>'import requests
url = "https://api.newscatcherapi.com/news-api/stories/{story_id}"
headers = {"x-api-key": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'x-api-key': '<api-key>'}};
fetch('https://api.newscatcherapi.com/news-api/stories/{story_id}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.newscatcherapi.com/news-api/stories/{story_id}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"x-api-key: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.newscatcherapi.com/news-api/stories/{story_id}"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("x-api-key", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.newscatcherapi.com/news-api/stories/{story_id}")
.header("x-api-key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.newscatcherapi.com/news-api/stories/{story_id}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["x-api-key"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"story_id": "6f1c2b0e-2f0f-4d52-9a0b-5d0e8a5f9d11",
"articles_total": 43,
"newsrooms": 40,
"first_seen": "2026-10-28T00:41:10+00:00",
"last_seen": "2026-10-28T13:58:02+00:00",
"articles": [
{
"id": "876a97d2bc58f3c2437ad7b03a06ebfe",
"title": "Major disaster declared in Florida following Hurricane Isaias; federal aid approved",
"language": "en",
"url": "https://www.fox10tv.com/2026/10/28/major-disaster-declared-florida-following-hurricane-isaias-federal-aid-approved",
"domain": "fox10tv.com",
"published_at": "2026-10-28T01:05:37+00:00",
"content_type": "news_report"
}
]
}Get a story and its articles
Every distinct article of one story (the articles that report the same event), best sources first, with the number of newsrooms and when the first and the latest article appeared.
Take the story id from the story.id of a search result. A successful request (HTTP 200) costs 1 NCC, regardless of the number of articles returned. The rate limits of your plan apply.
curl --request GET \
--url https://api.newscatcherapi.com/news-api/stories/{story_id} \
--header 'x-api-key: <api-key>'import requests
url = "https://api.newscatcherapi.com/news-api/stories/{story_id}"
headers = {"x-api-key": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'x-api-key': '<api-key>'}};
fetch('https://api.newscatcherapi.com/news-api/stories/{story_id}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.newscatcherapi.com/news-api/stories/{story_id}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"x-api-key: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.newscatcherapi.com/news-api/stories/{story_id}"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("x-api-key", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.newscatcherapi.com/news-api/stories/{story_id}")
.header("x-api-key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.newscatcherapi.com/news-api/stories/{story_id}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["x-api-key"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"story_id": "6f1c2b0e-2f0f-4d52-9a0b-5d0e8a5f9d11",
"articles_total": 43,
"newsrooms": 40,
"first_seen": "2026-10-28T00:41:10+00:00",
"last_seen": "2026-10-28T13:58:02+00:00",
"articles": [
{
"id": "876a97d2bc58f3c2437ad7b03a06ebfe",
"title": "Major disaster declared in Florida following Hurricane Isaias; federal aid approved",
"language": "en",
"url": "https://www.fox10tv.com/2026/10/28/major-disaster-declared-florida-following-hurricane-isaias-federal-aid-approved",
"domain": "fox10tv.com",
"published_at": "2026-10-28T01:05:37+00:00",
"content_type": "news_report"
}
]
}Authorizations
Your NewsCatcher API key, created in the NewsCatcher platform. Send it in the x-api-key header of every request.
Path Parameters
Id of the story: the story.id of a search result (a UUID).
"6f1c2b0e-2f0f-4d52-9a0b-5d0e8a5f9d11"
Query Parameters
Number of articles to return (1 to 500).
1 <= x <= 50050
Response
The story and its articles.
A story and its articles.
Id of the story.
"6f1c2b0e-2f0f-4d52-9a0b-5d0e8a5f9d11"
Number of distinct articles of the story.
x >= 043
Number of newsrooms (distinct publishers) that cover the story.
x >= 040
The articles of the story, best sources first.
Show child attributes
Show child attributes
Publication time of the earliest article (UTC, ISO 8601).
"2026-10-28T00:41:10+00:00"
Publication time of the latest article (UTC, ISO 8601).
"2026-10-28T13:58:02+00:00"
Was this page helpful?

