curl --request GET \
--url https://v3-api.newscatcherapi.com/api/sources \
--header 'x-api-token: <api-key>'import requests
url = "https://v3-api.newscatcherapi.com/api/sources"
headers = {"x-api-token": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'x-api-token': '<api-key>'}};
fetch('https://v3-api.newscatcherapi.com/api/sources', 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://v3-api.newscatcherapi.com/api/sources",
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-token: <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://v3-api.newscatcherapi.com/api/sources"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("x-api-token", "<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://v3-api.newscatcherapi.com/api/sources")
.header("x-api-token", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://v3-api.newscatcherapi.com/api/sources")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["x-api-token"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"message": "<string>",
"sources": [
{
"domain_url": "<string>",
"name_source": "<string>",
"logo": "<string>",
"additional_info": {
"nb_articles_for_7d": 153,
"country": "US",
"rank": 117,
"is_news_domain": true,
"news_domain_type": "Original Content",
"news_type": "General News Outlets",
"robots_compliant": "100%"
}
}
],
"user_input": {}
}{
"message": "Invalid JSON in request body",
"status_code": 400,
"status": "Bad request"
}{
"message": "The 'x-api-token' parameter has an invalid value. Please provide a valid API key.",
"status_code": 401,
"status": "Unauthorized"
}{
"message": "Your plan request date range cannot be greater than 400 days",
"status_code": 403,
"status": "Forbidden"
}{
"message": "Request timed out after 30 seconds",
"status_code": 408,
"status": "Request timeout"
}{
"message": "Invalid date format",
"status_code": 422,
"status": "Validation error"
}{
"message": "Max API requests concurrency reached",
"status_code": 429,
"status": "Too many requests"
}Internal Server ErrorRetrieve sources
Retrieves a list of sources based on specified criteria such as language, country, rank, and more.
curl --request GET \
--url https://v3-api.newscatcherapi.com/api/sources \
--header 'x-api-token: <api-key>'import requests
url = "https://v3-api.newscatcherapi.com/api/sources"
headers = {"x-api-token": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'x-api-token': '<api-key>'}};
fetch('https://v3-api.newscatcherapi.com/api/sources', 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://v3-api.newscatcherapi.com/api/sources",
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-token: <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://v3-api.newscatcherapi.com/api/sources"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("x-api-token", "<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://v3-api.newscatcherapi.com/api/sources")
.header("x-api-token", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://v3-api.newscatcherapi.com/api/sources")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["x-api-token"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"message": "<string>",
"sources": [
{
"domain_url": "<string>",
"name_source": "<string>",
"logo": "<string>",
"additional_info": {
"nb_articles_for_7d": 153,
"country": "US",
"rank": 117,
"is_news_domain": true,
"news_domain_type": "Original Content",
"news_type": "General News Outlets",
"robots_compliant": "100%"
}
}
],
"user_input": {}
}{
"message": "Invalid JSON in request body",
"status_code": 400,
"status": "Bad request"
}{
"message": "The 'x-api-token' parameter has an invalid value. Please provide a valid API key.",
"status_code": 401,
"status": "Unauthorized"
}{
"message": "Your plan request date range cannot be greater than 400 days",
"status_code": 403,
"status": "Forbidden"
}{
"message": "Request timed out after 30 seconds",
"status_code": 408,
"status": "Request timeout"
}{
"message": "Invalid date format",
"status_code": 422,
"status": "Validation error"
}{
"message": "Max API requests concurrency reached",
"status_code": 429,
"status": "Too many requests"
}Internal Server ErrorAuthorizations
API Key to authenticate requests.
To access the API, include your API key in the x-api-token header.
To obtain your API key, complete the form or contact us directly.
Query Parameters
The language(s) of the search. The only accepted format is the two-letter ISO 639-1 code. To select multiple languages, use a comma-separated string.
To learn more, see Enumerated parameters > Language.
"en,es"
The countries where the news publisher is located. The accepted format is the two-letter ISO 3166-1 alpha-2 code. To select multiple countries, use a comma-separated string.
To learn more, see Enumerated parameters > Country.
"US,CA"
Predefined top news sources per country.
Format: start with the word top, followed by the number of desired sources, and then the two-letter country code ISO 3166-1 alpha-2.
Multiple countries with the number of top sources can be specified as a comma-separated string.
"top 50 US, top 20 GB"
Word or phrase to search within the source names. To specify multiple values, use a comma-separated string.
Note: The search doesn't require an exact match and returns sources containing the specified terms in their names. You can use any word or phrase, like "sport" or "new york times".
For example, "sport" returns sources such as "Motorsport", "Dot Esport", and "Tuttosport".
"sport,tech"
If true, returns the following additional datapoints about each news source:
nb_articles_for_7d: The number of articles published by the source in the last week.country: Source country of origin.rank: SEO rank.is_news_domain: Boolean indicating if the source is a news domain.news_domain_type: Type of news domain (e.g., "Original Content").news_type: Category of news (e.g., "General News Outlets").robots_compliant: Percentage of domain articles that comply with robots.txt scraping rules (0-100%).
true
Filters results based on the news domain type. Multiple types can be specified using a comma-separated string or an array of strings. Possible values are:
Original Content: Sources that produce their own content.Aggregator: Sources that collect content from various other sources.Press Releases: Sources primarily publishing press releases.Republisher: Sources that republish content from other sources.Other: Sources that don't fit into main categories.
"Original Content"
Filters results based on the news type. Multiple types can be specified using a comma-separated string.
For a complete list of available news types, see Enumerated parameters > News type.
Counts only articles of the given content types when ranking sources. The order of the results, nb_articles_for_7d, and the minimum of 5 articles per source apply to matching articles only, so a source with fewer matching articles is left out. To select multiple content types, use a comma-separated string. Values are case-insensitive.
Available options: news_report, analysis, interview, opinion, press_release, listicle, service, commerce, review, autogen, seo_spam, obituary, ugc, non_article. Shortcuts: news selects news_report, analysis, and interview; all applies no filter.
Note: You can combine content_type with source_url and predefined_sources. It is not enough on its own: send at least one of lang, countries, source_url, source_name, or predefined_sources.
To learn more, see Content types.
"news"
Response
A successful response containing a list of news sources that match the specified criteria.
The response model for a successful Sources request retrieving news sources matching the specified criteria. Response field behavior:
- Required fields are guaranteed to be present and non-null.
- Optional fields may be
nullorundefinedif the data point is not presented or couldn't be extracted during processing.
Was this page helpful?

