Cyber Security API filters
Use the filters below to narrow the cyber security news returned by /v1/cyber-security/news. Combine filters for titles, dates, languages, sources, entities, sentiment and other criteria.
How the Cyber Security API combines filters
Articles must match both the cyber category and every filter you add. Filters narrow the feed to a smaller selection of cyber news.
organization.name=Fortinet&title=vulnerabilitynarrows the feed to articles mentioning Fortinet with "vulnerability" in their titles.- A boolean
querysuch asransomware OR phishingsearches inside the cyber selection, never outside it.
All filters and request options
All parameters are optional. Every example below uses /v1/cyber-security/news.
Prompt
Describe the news you want in plain language. The API chooses the filters.
| Parameter | Type | Required | Description |
|---|---|---|---|
prompt | string | No | Describe the news you want, for example "ransomware attacks affecting Microsoft in the last 10 days". Check meta.prompt for the filters used. Parameters you send directly take priority. A new translation costs 2 extra points; repeated prompts use the cached translation for free. Requires Basic or above. Free and Starter return 403 ER0706. Range: 3–500 characters. |
Find ransomware and vulnerability reports using plain language
Find recent English-language news about ransomware and vulnerabilities affecting Microsoft and Fortinet using a plain-language request.
curl "https://api.apitube.io/v1/cyber-security/news?prompt=Ransomware%20attacks%20and%20security%20vulnerabilities%20affecting%20Microsoft%20and%20Fortinet%2C%20in%20English%2C%20from%20the%20last%2010%20days&api_key=YOUR_API_KEY"
import requests
response = requests.get(
"https://api.apitube.io/v1/cyber-security/news",
params={
"prompt": "Ransomware attacks and security vulnerabilities affecting Microsoft and Fortinet, in English, from the last 10 days",
"api_key": "YOUR_API_KEY",
},
)
print(response.json())
const params = new URLSearchParams({"prompt": "Ransomware attacks and security vulnerabilities affecting Microsoft and Fortinet, in English, from the last 10 days", "api_key": "YOUR_API_KEY"});
const response = await fetch(`https://api.apitube.io/v1/cyber-security/news?${params}`);
const data = await response.json();
console.log(data);
$query = http_build_query(["prompt" => "Ransomware attacks and security vulnerabilities affecting Microsoft and Fortinet, in English, from the last 10 days", "api_key" => "YOUR_API_KEY"]);
$response = file_get_contents("https://api.apitube.io/v1/cyber-security/news?$query");
$data = json_decode($response, true);
print_r($data);
package main
import (
"encoding/json"
"fmt"
"io"
"net/http"
"net/url"
)
func main() {
u, _ := url.Parse("https://api.apitube.io/v1/cyber-security/news")
q := u.Query()
q.Set("prompt", "Ransomware attacks and security vulnerabilities affecting Microsoft and Fortinet, in English, from the last 10 days")
q.Set("api_key", "YOUR_API_KEY")
u.RawQuery = q.Encode()
resp, _ := http.Get(u.String())
defer resp.Body.Close()
body, _ := io.ReadAll(resp.Body)
var data map[string]any
json.Unmarshal(body, &data)
fmt.Println(data)
}
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
public class Example {
public static void main(String[] args) throws Exception {
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://api.apitube.io/v1/cyber-security/news?prompt=Ransomware%20attacks%20and%20security%20vulnerabilities%20affecting%20Microsoft%20and%20Fortinet%2C%20in%20English%2C%20from%20the%20last%2010%20days&api_key=YOUR_API_KEY"))
.GET()
.build();
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.body());
}
}
Write a script in your preferred language that calls the APITube Cyber Security API:
GET https://api.apitube.io/v1/cyber-security/news?prompt=Ransomware%20attacks%20and%20security%20vulnerabilities%20affecting%20Microsoft%20and%20Fortinet%2C%20in%20English%2C%20from%20the%20last%2010%20days
Read the API key from an environment variable (do not hardcode it), handle request
errors, and print the key fields of each result.
Docs: https://docs.apitube.io/platform/cyber-security/filters
Title search
Search inside article titles. Limited to a 31-day published_at window.
| Parameter | Type | Required | Description |
|---|---|---|---|
ignore.title | string | No | Exclude articles containing this text in the title. Range: 2–100 characters. |
query | string | No | Combine conditions with AND, OR, NOT and parentheses. Use field:value to choose a field, quotes and ~N to find nearby words, [a TO b] for a range, and {{...}} for entity conditions. Terms without a field search titles. A result must also match any other filters you send. Title searches cover at most 31 days of published_at. Invalid syntax returns ER0701–ER0712. Range: 0–4000 characters. Example: ransomware OR phishing. Accepted by the API but not part of the published OpenAPI specification, so generated SDKs do not expose it. |
title | string | No | Search article titles. To find words near each other, use a phrase such as "data breach"~2. Searches can cover at most 31 days of published_at. Without dates, the API searches the last 31 days. A wider explicit range returns ER0110. Range: 2–100 characters. |
title_ends_with | string | No | Find articles whose titles end with this text. As with title, the date range can cover at most 31 days. Range: 2–100 characters. |
title_pattern | string | No | Find titles containing this text. Special characters are treated literally; this is not a regular expression. Searches cover at most 31 days, as with title. Range: 2–200 characters. |
title_starts_with | string | No | Find articles whose titles start with this text. As with title, the date range can cover at most 31 days. Range: 2–100 characters. |
Find phishing reports
Find articles with "phishing" in their titles.
curl "https://api.apitube.io/v1/cyber-security/news?title=phishing&api_key=YOUR_API_KEY"
import requests
response = requests.get(
"https://api.apitube.io/v1/cyber-security/news",
params={
"title": "phishing",
"api_key": "YOUR_API_KEY",
},
)
print(response.json())
const params = new URLSearchParams({"title": "phishing", "api_key": "YOUR_API_KEY"});
const response = await fetch(`https://api.apitube.io/v1/cyber-security/news?${params}`);
const data = await response.json();
console.log(data);
$query = http_build_query(["title" => "phishing", "api_key" => "YOUR_API_KEY"]);
$response = file_get_contents("https://api.apitube.io/v1/cyber-security/news?$query");
$data = json_decode($response, true);
print_r($data);
package main
import (
"encoding/json"
"fmt"
"io"
"net/http"
"net/url"
)
func main() {
u, _ := url.Parse("https://api.apitube.io/v1/cyber-security/news")
q := u.Query()
q.Set("title", "phishing")
q.Set("api_key", "YOUR_API_KEY")
u.RawQuery = q.Encode()
resp, _ := http.Get(u.String())
defer resp.Body.Close()
body, _ := io.ReadAll(resp.Body)
var data map[string]any
json.Unmarshal(body, &data)
fmt.Println(data)
}
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
public class Example {
public static void main(String[] args) throws Exception {
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://api.apitube.io/v1/cyber-security/news?title=phishing&api_key=YOUR_API_KEY"))
.GET()
.build();
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.body());
}
}
Write a script in your preferred language that calls the APITube Cyber Security API:
GET https://api.apitube.io/v1/cyber-security/news?title=phishing
Read the API key from an environment variable (do not hardcode it), handle request
errors, and print the key fields of each result.
Docs: https://docs.apitube.io/platform/cyber-security/filters
Find reports of ransomware attacks
Find titles containing both "ransomware" and "attack". Comma-separated keywords use AND logic: every word must be present. To search for either ransomware or phishing, use query=ransomware OR phishing.
curl "https://api.apitube.io/v1/cyber-security/news?title=ransomware%2Cattack&api_key=YOUR_API_KEY"
import requests
response = requests.get(
"https://api.apitube.io/v1/cyber-security/news",
params={
"title": "ransomware,attack",
"api_key": "YOUR_API_KEY",
},
)
print(response.json())
const params = new URLSearchParams({"title": "ransomware,attack", "api_key": "YOUR_API_KEY"});
const response = await fetch(`https://api.apitube.io/v1/cyber-security/news?${params}`);
const data = await response.json();
console.log(data);
$query = http_build_query(["title" => "ransomware,attack", "api_key" => "YOUR_API_KEY"]);
$response = file_get_contents("https://api.apitube.io/v1/cyber-security/news?$query");
$data = json_decode($response, true);
print_r($data);
package main
import (
"encoding/json"
"fmt"
"io"
"net/http"
"net/url"
)
func main() {
u, _ := url.Parse("https://api.apitube.io/v1/cyber-security/news")
q := u.Query()
q.Set("title", "ransomware,attack")
q.Set("api_key", "YOUR_API_KEY")
u.RawQuery = q.Encode()
resp, _ := http.Get(u.String())
defer resp.Body.Close()
body, _ := io.ReadAll(resp.Body)
var data map[string]any
json.Unmarshal(body, &data)
fmt.Println(data)
}
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
public class Example {
public static void main(String[] args) throws Exception {
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://api.apitube.io/v1/cyber-security/news?title=ransomware%2Cattack&api_key=YOUR_API_KEY"))
.GET()
.build();
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.body());
}
}
Write a script in your preferred language that calls the APITube Cyber Security API:
GET https://api.apitube.io/v1/cyber-security/news?title=ransomware%2Cattack
Read the API key from an environment variable (do not hardcode it), handle request
errors, and print the key fields of each result.
Docs: https://docs.apitube.io/platform/cyber-security/filters
Search for the exact phrase "zero day"
Find articles with the exact phrase "zero day" in the title.
curl "https://api.apitube.io/v1/cyber-security/news?title=%22zero%20day%22&api_key=YOUR_API_KEY"
import requests
response = requests.get(
"https://api.apitube.io/v1/cyber-security/news",
params={
"title": "\"zero day\"",
"api_key": "YOUR_API_KEY",
},
)
print(response.json())
const params = new URLSearchParams({"title": "\"zero day\"", "api_key": "YOUR_API_KEY"});
const response = await fetch(`https://api.apitube.io/v1/cyber-security/news?${params}`);
const data = await response.json();
console.log(data);
$query = http_build_query(["title" => "\"zero day\"", "api_key" => "YOUR_API_KEY"]);
$response = file_get_contents("https://api.apitube.io/v1/cyber-security/news?$query");
$data = json_decode($response, true);
print_r($data);
package main
import (
"encoding/json"
"fmt"
"io"
"net/http"
"net/url"
)
func main() {
u, _ := url.Parse("https://api.apitube.io/v1/cyber-security/news")
q := u.Query()
q.Set("title", "\"zero day\"")
q.Set("api_key", "YOUR_API_KEY")
u.RawQuery = q.Encode()
resp, _ := http.Get(u.String())
defer resp.Body.Close()
body, _ := io.ReadAll(resp.Body)
var data map[string]any
json.Unmarshal(body, &data)
fmt.Println(data)
}
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
public class Example {
public static void main(String[] args) throws Exception {
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://api.apitube.io/v1/cyber-security/news?title=%22zero%20day%22&api_key=YOUR_API_KEY"))
.GET()
.build();
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.body());
}
}
Write a script in your preferred language that calls the APITube Cyber Security API:
GET https://api.apitube.io/v1/cyber-security/news?title=%22zero%20day%22
Read the API key from an environment variable (do not hardcode it), handle request
errors, and print the key fields of each result.
Docs: https://docs.apitube.io/platform/cyber-security/filters
Search for the exact phrase "remote code execution"
Find articles with the exact phrase "remote code execution" in the title.
curl "https://api.apitube.io/v1/cyber-security/news?title=%22remote%20code%20execution%22&api_key=YOUR_API_KEY"
import requests
response = requests.get(
"https://api.apitube.io/v1/cyber-security/news",
params={
"title": "\"remote code execution\"",
"api_key": "YOUR_API_KEY",
},
)
print(response.json())
const params = new URLSearchParams({"title": "\"remote code execution\"", "api_key": "YOUR_API_KEY"});
const response = await fetch(`https://api.apitube.io/v1/cyber-security/news?${params}`);
const data = await response.json();
console.log(data);
$query = http_build_query(["title" => "\"remote code execution\"", "api_key" => "YOUR_API_KEY"]);
$response = file_get_contents("https://api.apitube.io/v1/cyber-security/news?$query");
$data = json_decode($response, true);
print_r($data);
package main
import (
"encoding/json"
"fmt"
"io"
"net/http"
"net/url"
)
func main() {
u, _ := url.Parse("https://api.apitube.io/v1/cyber-security/news")
q := u.Query()
q.Set("title", "\"remote code execution\"")
q.Set("api_key", "YOUR_API_KEY")
u.RawQuery = q.Encode()
resp, _ := http.Get(u.String())
defer resp.Body.Close()
body, _ := io.ReadAll(resp.Body)
var data map[string]any
json.Unmarshal(body, &data)
fmt.Println(data)
}
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
public class Example {
public static void main(String[] args) throws Exception {
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://api.apitube.io/v1/cyber-security/news?title=%22remote%20code%20execution%22&api_key=YOUR_API_KEY"))
.GET()
.build();
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.body());
}
}
Write a script in your preferred language that calls the APITube Cyber Security API:
GET https://api.apitube.io/v1/cyber-security/news?title=%22remote%20code%20execution%22
Read the API key from an environment variable (do not hardcode it), handle request
errors, and print the key fields of each result.
Docs: https://docs.apitube.io/platform/cyber-security/filters
Search for the exact phrase "privilege escalation"
Find articles with the exact phrase "privilege escalation" in the title.
curl "https://api.apitube.io/v1/cyber-security/news?title=%22privilege%20escalation%22&api_key=YOUR_API_KEY"
import requests
response = requests.get(
"https://api.apitube.io/v1/cyber-security/news",
params={
"title": "\"privilege escalation\"",
"api_key": "YOUR_API_KEY",
},
)
print(response.json())
const params = new URLSearchParams({"title": "\"privilege escalation\"", "api_key": "YOUR_API_KEY"});
const response = await fetch(`https://api.apitube.io/v1/cyber-security/news?${params}`);
const data = await response.json();
console.log(data);
$query = http_build_query(["title" => "\"privilege escalation\"", "api_key" => "YOUR_API_KEY"]);
$response = file_get_contents("https://api.apitube.io/v1/cyber-security/news?$query");
$data = json_decode($response, true);
print_r($data);
package main
import (
"encoding/json"
"fmt"
"io"
"net/http"
"net/url"
)
func main() {
u, _ := url.Parse("https://api.apitube.io/v1/cyber-security/news")
q := u.Query()
q.Set("title", "\"privilege escalation\"")
q.Set("api_key", "YOUR_API_KEY")
u.RawQuery = q.Encode()
resp, _ := http.Get(u.String())
defer resp.Body.Close()
body, _ := io.ReadAll(resp.Body)
var data map[string]any
json.Unmarshal(body, &data)
fmt.Println(data)
}
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
public class Example {
public static void main(String[] args) throws Exception {
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://api.apitube.io/v1/cyber-security/news?title=%22privilege%20escalation%22&api_key=YOUR_API_KEY"))
.GET()
.build();
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.body());
}
}
Write a script in your preferred language that calls the APITube Cyber Security API:
GET https://api.apitube.io/v1/cyber-security/news?title=%22privilege%20escalation%22
Read the API key from an environment variable (do not hardcode it), handle request
errors, and print the key fields of each result.
Docs: https://docs.apitube.io/platform/cyber-security/filters
Find Patch Tuesday security update reports
Find articles whose titles contain the exact phrase "Patch Tuesday".
curl "https://api.apitube.io/v1/cyber-security/news?title=%22Patch%20Tuesday%22&api_key=YOUR_API_KEY"
import requests
response = requests.get(
"https://api.apitube.io/v1/cyber-security/news",
params={
"title": "\"Patch Tuesday\"",
"api_key": "YOUR_API_KEY",
},
)
print(response.json())
const params = new URLSearchParams({"title": "\"Patch Tuesday\"", "api_key": "YOUR_API_KEY"});
const response = await fetch(`https://api.apitube.io/v1/cyber-security/news?${params}`);
const data = await response.json();
console.log(data);
$query = http_build_query(["title" => "\"Patch Tuesday\"", "api_key" => "YOUR_API_KEY"]);
$response = file_get_contents("https://api.apitube.io/v1/cyber-security/news?$query");
$data = json_decode($response, true);
print_r($data);
package main
import (
"encoding/json"
"fmt"
"io"
"net/http"
"net/url"
)
func main() {
u, _ := url.Parse("https://api.apitube.io/v1/cyber-security/news")
q := u.Query()
q.Set("title", "\"Patch Tuesday\"")
q.Set("api_key", "YOUR_API_KEY")
u.RawQuery = q.Encode()
resp, _ := http.Get(u.String())
defer resp.Body.Close()
body, _ := io.ReadAll(resp.Body)
var data map[string]any
json.Unmarshal(body, &data)
fmt.Println(data)
}
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
public class Example {
public static void main(String[] args) throws Exception {
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://api.apitube.io/v1/cyber-security/news?title=%22Patch%20Tuesday%22&api_key=YOUR_API_KEY"))
.GET()
.build();
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.body());
}
}
Write a script in your preferred language that calls the APITube Cyber Security API:
GET https://api.apitube.io/v1/cyber-security/news?title=%22Patch%20Tuesday%22
Read the API key from an environment variable (do not hardcode it), handle request
errors, and print the key fields of each result.
Docs: https://docs.apitube.io/platform/cyber-security/filters
Search for the exact phrase "supply chain attack"
Find articles with the exact phrase "supply chain attack" in the title.
curl "https://api.apitube.io/v1/cyber-security/news?title=%22supply%20chain%20attack%22&api_key=YOUR_API_KEY"
import requests
response = requests.get(
"https://api.apitube.io/v1/cyber-security/news",
params={
"title": "\"supply chain attack\"",
"api_key": "YOUR_API_KEY",
},
)
print(response.json())
const params = new URLSearchParams({"title": "\"supply chain attack\"", "api_key": "YOUR_API_KEY"});
const response = await fetch(`https://api.apitube.io/v1/cyber-security/news?${params}`);
const data = await response.json();
console.log(data);
$query = http_build_query(["title" => "\"supply chain attack\"", "api_key" => "YOUR_API_KEY"]);
$response = file_get_contents("https://api.apitube.io/v1/cyber-security/news?$query");
$data = json_decode($response, true);
print_r($data);
package main
import (
"encoding/json"
"fmt"
"io"
"net/http"
"net/url"
)
func main() {
u, _ := url.Parse("https://api.apitube.io/v1/cyber-security/news")
q := u.Query()
q.Set("title", "\"supply chain attack\"")
q.Set("api_key", "YOUR_API_KEY")
u.RawQuery = q.Encode()
resp, _ := http.Get(u.String())
defer resp.Body.Close()
body, _ := io.ReadAll(resp.Body)
var data map[string]any
json.Unmarshal(body, &data)
fmt.Println(data)
}
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
public class Example {
public static void main(String[] args) throws Exception {
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://api.apitube.io/v1/cyber-security/news?title=%22supply%20chain%20attack%22&api_key=YOUR_API_KEY"))
.GET()
.build();
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.body());
}
}
Write a script in your preferred language that calls the APITube Cyber Security API:
GET https://api.apitube.io/v1/cyber-security/news?title=%22supply%20chain%20attack%22
Read the API key from an environment variable (do not hardcode it), handle request
errors, and print the key fields of each result.
Docs: https://docs.apitube.io/platform/cyber-security/filters
Article lookup
| Parameter | Type | Required | Description |
|---|---|---|---|
article.id | string | No | Comma-separated article IDs (max 5). Example: 12345. |
Date and time
| Parameter | Type | Required | Description |
|---|---|---|---|
published_at | string | No | Exact date (creates 24-hour range). Format: YYYY-MM-DD or ISO 8601. Example: 2025-01-15. |
published_at.end | string | No | End of date range. Format: YYYY-MM-DD or ISO 8601. Combined with a title search the range may not exceed 31 days (ER0110). Example: 2025-01-31. |
published_at.start | string | No | Start of date range. Format: YYYY-MM-DD or ISO 8601. Combined with a title search the range may not exceed 31 days (ER0110). Example: 2025-01-01. |
Review ransomware reports from a specific period
Find ransomware coverage published between October 1 and October 15, 2026. The dates filter article publication, not the date an attack happened.
curl "https://api.apitube.io/v1/cyber-security/news?title=ransomware&published_at.start=2026-10-01&published_at.end=2026-10-15&api_key=YOUR_API_KEY"
import requests
response = requests.get(
"https://api.apitube.io/v1/cyber-security/news",
params={
"title": "ransomware",
"published_at.start": "2026-10-01",
"published_at.end": "2026-10-15",
"api_key": "YOUR_API_KEY",
},
)
print(response.json())
const params = new URLSearchParams({"title": "ransomware", "published_at.start": "2026-10-01", "published_at.end": "2026-10-15", "api_key": "YOUR_API_KEY"});
const response = await fetch(`https://api.apitube.io/v1/cyber-security/news?${params}`);
const data = await response.json();
console.log(data);
$query = http_build_query(["title" => "ransomware", "published_at.start" => "2026-10-01", "published_at.end" => "2026-10-15", "api_key" => "YOUR_API_KEY"]);
$response = file_get_contents("https://api.apitube.io/v1/cyber-security/news?$query");
$data = json_decode($response, true);
print_r($data);
package main
import (
"encoding/json"
"fmt"
"io"
"net/http"
"net/url"
)
func main() {
u, _ := url.Parse("https://api.apitube.io/v1/cyber-security/news")
q := u.Query()
q.Set("title", "ransomware")
q.Set("published_at.start", "2026-10-01")
q.Set("published_at.end", "2026-10-15")
q.Set("api_key", "YOUR_API_KEY")
u.RawQuery = q.Encode()
resp, _ := http.Get(u.String())
defer resp.Body.Close()
body, _ := io.ReadAll(resp.Body)
var data map[string]any
json.Unmarshal(body, &data)
fmt.Println(data)
}
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
public class Example {
public static void main(String[] args) throws Exception {
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://api.apitube.io/v1/cyber-security/news?title=ransomware&published_at.start=2026-10-01&published_at.end=2026-10-15&api_key=YOUR_API_KEY"))
.GET()
.build();
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.body());
}
}
Write a script in your preferred language that calls the APITube Cyber Security API:
GET https://api.apitube.io/v1/cyber-security/news?title=ransomware&published_at.start=2026-10-01&published_at.end=2026-10-15
Read the API key from an environment variable (do not hardcode it), handle request
errors, and print the key fields of each result.
Docs: https://docs.apitube.io/platform/cyber-security/filters
Find vulnerability and exploit reports from the last seven days
Find titles containing "vulnerability" and either "exploit" or "exploited", limited to articles published in the last seven days.
curl "https://api.apitube.io/v1/cyber-security/news?query=vulnerability%20AND%20%28exploit%20OR%20exploited%29&published_at.start=NOW-7DAYS&published_at.end=NOW&api_key=YOUR_API_KEY"
import requests
response = requests.get(
"https://api.apitube.io/v1/cyber-security/news",
params={
"query": "vulnerability AND (exploit OR exploited)",
"published_at.start": "NOW-7DAYS",
"published_at.end": "NOW",
"api_key": "YOUR_API_KEY",
},
)
print(response.json())
const params = new URLSearchParams({"query": "vulnerability AND (exploit OR exploited)", "published_at.start": "NOW-7DAYS", "published_at.end": "NOW", "api_key": "YOUR_API_KEY"});
const response = await fetch(`https://api.apitube.io/v1/cyber-security/news?${params}`);
const data = await response.json();
console.log(data);
$query = http_build_query(["query" => "vulnerability AND (exploit OR exploited)", "published_at.start" => "NOW-7DAYS", "published_at.end" => "NOW", "api_key" => "YOUR_API_KEY"]);
$response = file_get_contents("https://api.apitube.io/v1/cyber-security/news?$query");
$data = json_decode($response, true);
print_r($data);
package main
import (
"encoding/json"
"fmt"
"io"
"net/http"
"net/url"
)
func main() {
u, _ := url.Parse("https://api.apitube.io/v1/cyber-security/news")
q := u.Query()
q.Set("query", "vulnerability AND (exploit OR exploited)")
q.Set("published_at.start", "NOW-7DAYS")
q.Set("published_at.end", "NOW")
q.Set("api_key", "YOUR_API_KEY")
u.RawQuery = q.Encode()
resp, _ := http.Get(u.String())
defer resp.Body.Close()
body, _ := io.ReadAll(resp.Body)
var data map[string]any
json.Unmarshal(body, &data)
fmt.Println(data)
}
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
public class Example {
public static void main(String[] args) throws Exception {
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://api.apitube.io/v1/cyber-security/news?query=vulnerability%20AND%20%28exploit%20OR%20exploited%29&published_at.start=NOW-7DAYS&published_at.end=NOW&api_key=YOUR_API_KEY"))
.GET()
.build();
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.body());
}
}
Write a script in your preferred language that calls the APITube Cyber Security API:
GET https://api.apitube.io/v1/cyber-security/news?query=vulnerability%20AND%20%28exploit%20OR%20exploited%29&published_at.start=NOW-7DAYS&published_at.end=NOW
Read the API key from an environment variable (do not hardcode it), handle request
errors, and print the key fields of each result.
Docs: https://docs.apitube.io/platform/cyber-security/filters
Languages
| Parameter | Type | Required | Description |
|---|---|---|---|
ignore.language.code | string | No | Exclude articles in these languages (comma-separated, max 3). Example: zh,ar. |
language.code | string | No | Comma-separated ISO 639-1 language codes (max 3). Example: en. |
Find phishing reports in English and French
Find English- and French-language articles that mention "phishing" in the title.
curl "https://api.apitube.io/v1/cyber-security/news?title=phishing&language.code=en%2Cfr&api_key=YOUR_API_KEY"
import requests
response = requests.get(
"https://api.apitube.io/v1/cyber-security/news",
params={
"title": "phishing",
"language.code": "en,fr",
"api_key": "YOUR_API_KEY",
},
)
print(response.json())
const params = new URLSearchParams({"title": "phishing", "language.code": "en,fr", "api_key": "YOUR_API_KEY"});
const response = await fetch(`https://api.apitube.io/v1/cyber-security/news?${params}`);
const data = await response.json();
console.log(data);
$query = http_build_query(["title" => "phishing", "language.code" => "en,fr", "api_key" => "YOUR_API_KEY"]);
$response = file_get_contents("https://api.apitube.io/v1/cyber-security/news?$query");
$data = json_decode($response, true);
print_r($data);
package main
import (
"encoding/json"
"fmt"
"io"
"net/http"
"net/url"
)
func main() {
u, _ := url.Parse("https://api.apitube.io/v1/cyber-security/news")
q := u.Query()
q.Set("title", "phishing")
q.Set("language.code", "en,fr")
q.Set("api_key", "YOUR_API_KEY")
u.RawQuery = q.Encode()
resp, _ := http.Get(u.String())
defer resp.Body.Close()
body, _ := io.ReadAll(resp.Body)
var data map[string]any
json.Unmarshal(body, &data)
fmt.Println(data)
}
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
public class Example {
public static void main(String[] args) throws Exception {
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://api.apitube.io/v1/cyber-security/news?title=phishing&language.code=en%2Cfr&api_key=YOUR_API_KEY"))
.GET()
.build();
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.body());
}
}
Write a script in your preferred language that calls the APITube Cyber Security API:
GET https://api.apitube.io/v1/cyber-security/news?title=phishing&language.code=en%2Cfr
Read the API key from an environment variable (do not hardcode it), handle request
errors, and print the key fields of each result.
Docs: https://docs.apitube.io/platform/cyber-security/filters
Source
| Parameter | Type | Required | Description |
|---|---|---|---|
ignore.source.bias | string | No | Exclude publishers with these political biases, separated by commas. Values: left, center, right. Example: right. |
ignore.source.country.code | string | No | Exclude sources from these countries (comma-separated, max 3). Example: us. |
ignore.source.domain | string | No | Exclude these source domains (comma-separated, max 3). |
ignore.source.id | string | No | Exclude these source IDs (comma-separated, max 3). |
is_premium_source | boolean | No | Filter by premium source status. |
is_verified_source | boolean | No | Filter by verified source status. |
source.bias | string | No | Filter by publishers' political bias, separated by commas. Values: left, center, right. Example: left. |
source.country.code | string | No | Filter by source country ISO 3166-1 alpha-2 codes (comma-separated, max 3). Example: us. |
source.domain | string | No | Comma-separated source domains (max 3). Example: bleepingcomputer.com. |
source.id | string | No | Comma-separated source IDs (max 3). Example: 100. |
source.rank.opr.max | integer | No | Maximum Open PageRank score. Range: min 0. |
source.rank.opr.min | integer | No | Minimum Open PageRank score. Range: min 0. |
Find ransomware reports from BleepingComputer
Limit ransomware title searches to articles published by BleepingComputer.
curl "https://api.apitube.io/v1/cyber-security/news?title=ransomware&source.domain=bleepingcomputer.com&api_key=YOUR_API_KEY"
import requests
response = requests.get(
"https://api.apitube.io/v1/cyber-security/news",
params={
"title": "ransomware",
"source.domain": "bleepingcomputer.com",
"api_key": "YOUR_API_KEY",
},
)
print(response.json())
const params = new URLSearchParams({"title": "ransomware", "source.domain": "bleepingcomputer.com", "api_key": "YOUR_API_KEY"});
const response = await fetch(`https://api.apitube.io/v1/cyber-security/news?${params}`);
const data = await response.json();
console.log(data);
$query = http_build_query(["title" => "ransomware", "source.domain" => "bleepingcomputer.com", "api_key" => "YOUR_API_KEY"]);
$response = file_get_contents("https://api.apitube.io/v1/cyber-security/news?$query");
$data = json_decode($response, true);
print_r($data);
package main
import (
"encoding/json"
"fmt"
"io"
"net/http"
"net/url"
)
func main() {
u, _ := url.Parse("https://api.apitube.io/v1/cyber-security/news")
q := u.Query()
q.Set("title", "ransomware")
q.Set("source.domain", "bleepingcomputer.com")
q.Set("api_key", "YOUR_API_KEY")
u.RawQuery = q.Encode()
resp, _ := http.Get(u.String())
defer resp.Body.Close()
body, _ := io.ReadAll(resp.Body)
var data map[string]any
json.Unmarshal(body, &data)
fmt.Println(data)
}
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
public class Example {
public static void main(String[] args) throws Exception {
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://api.apitube.io/v1/cyber-security/news?title=ransomware&source.domain=bleepingcomputer.com&api_key=YOUR_API_KEY"))
.GET()
.build();
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.body());
}
}
Write a script in your preferred language that calls the APITube Cyber Security API:
GET https://api.apitube.io/v1/cyber-security/news?title=ransomware&source.domain=bleepingcomputer.com
Read the API key from an environment variable (do not hardcode it), handle request
errors, and print the key fields of each result.
Docs: https://docs.apitube.io/platform/cyber-security/filters
Find remote code execution reports from security publications
Search BleepingComputer and The Hacker News for titles containing the exact phrase "remote code execution".
curl "https://api.apitube.io/v1/cyber-security/news?title=%22remote%20code%20execution%22&source.domain=bleepingcomputer.com%2Cthehackernews.com&api_key=YOUR_API_KEY"
import requests
response = requests.get(
"https://api.apitube.io/v1/cyber-security/news",
params={
"title": "\"remote code execution\"",
"source.domain": "bleepingcomputer.com,thehackernews.com",
"api_key": "YOUR_API_KEY",
},
)
print(response.json())
const params = new URLSearchParams({"title": "\"remote code execution\"", "source.domain": "bleepingcomputer.com,thehackernews.com", "api_key": "YOUR_API_KEY"});
const response = await fetch(`https://api.apitube.io/v1/cyber-security/news?${params}`);
const data = await response.json();
console.log(data);
$query = http_build_query(["title" => "\"remote code execution\"", "source.domain" => "bleepingcomputer.com,thehackernews.com", "api_key" => "YOUR_API_KEY"]);
$response = file_get_contents("https://api.apitube.io/v1/cyber-security/news?$query");
$data = json_decode($response, true);
print_r($data);
package main
import (
"encoding/json"
"fmt"
"io"
"net/http"
"net/url"
)
func main() {
u, _ := url.Parse("https://api.apitube.io/v1/cyber-security/news")
q := u.Query()
q.Set("title", "\"remote code execution\"")
q.Set("source.domain", "bleepingcomputer.com,thehackernews.com")
q.Set("api_key", "YOUR_API_KEY")
u.RawQuery = q.Encode()
resp, _ := http.Get(u.String())
defer resp.Body.Close()
body, _ := io.ReadAll(resp.Body)
var data map[string]any
json.Unmarshal(body, &data)
fmt.Println(data)
}
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
public class Example {
public static void main(String[] args) throws Exception {
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://api.apitube.io/v1/cyber-security/news?title=%22remote%20code%20execution%22&source.domain=bleepingcomputer.com%2Cthehackernews.com&api_key=YOUR_API_KEY"))
.GET()
.build();
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.body());
}
}
Write a script in your preferred language that calls the APITube Cyber Security API:
GET https://api.apitube.io/v1/cyber-security/news?title=%22remote%20code%20execution%22&source.domain=bleepingcomputer.com%2Cthehackernews.com
Read the API key from an environment variable (do not hardcode it), handle request
errors, and print the key fields of each result.
Docs: https://docs.apitube.io/platform/cyber-security/filters
Authors
| Parameter | Type | Required | Description |
|---|---|---|---|
author.id | string | No | Comma-separated author IDs (max 3). |
author.name | string | No | Filter by author name (comma-separated, max 3). Range: 0–100 characters. |
has_author | boolean | No | Filter articles with/without author. |
ignore.author.id | string | No | Exclude these author IDs (comma-separated, max 3). |
ignore.author.name | string | No | Exclude articles by these authors (comma-separated, max 3). Range: 0–100 characters. |
Categories
| Parameter | Type | Required | Description |
|---|---|---|---|
category.id | string | No | Category IDs, separated by commas (max 3). Use IPTC Media Topic IDs such as medtop:20000086 (cyber crime). Example: medtop:20000086. |
ignore.category.id | string | No | Exclude these categories (comma-separated, max 3). |
Topics
| Parameter | Type | Required | Description |
|---|---|---|---|
ignore.topic.id | string | No | Exclude these topics (comma-separated, max 3). |
topic.id | string | No | Topic IDs, separated by commas (max 3). Find IDs with /v1/suggest/topics. |
Industries
| Parameter | Type | Required | Description |
|---|---|---|---|
ignore.industry.id | string | No | Exclude these industries (comma-separated, max 3). |
industry.id | string | No | Comma-separated industry IDs (max 3). Example: 877 (Cybersecurity). |
Entities, people, organizations, brands
| Parameter | Type | Required | Description |
|---|---|---|---|
brand.name | string | No | Filter by brand name (comma-separated, max 3). Range: 0–120 characters. |
disaster.name | string | No | Filter by natural disaster name (comma-separated, max 3). Range: 0–120 characters. |
disease.name | string | No | Filter by disease name (comma-separated, max 3). Range: 0–120 characters. |
entity.id | string | No | Comma-separated entity IDs (max 3). Example: 1328071 (Microsoft). |
event.name | string | No | Filter by event name (comma-separated, max 3). Range: 0–120 characters. |
ignore.brand.name | string | No | Exclude articles mentioning these brands (comma-separated, max 3). Range: 0–120 characters. |
ignore.disaster.name | string | No | Exclude articles mentioning these disasters (comma-separated, max 3). Range: 0–120 characters. |
ignore.disease.name | string | No | Exclude articles mentioning these diseases (comma-separated, max 3). Range: 0–120 characters. |
ignore.entity.id | string | No | Exclude these entity IDs (comma-separated, max 3). |
ignore.event.name | string | No | Exclude articles mentioning these events (comma-separated, max 3). Range: 0–120 characters. |
ignore.location.name | string | No | Exclude articles mentioning these locations (comma-separated, max 3). Range: 0–120 characters. |
ignore.organization.name | string | No | Exclude articles mentioning these organizations (comma-separated, max 3). Range: 0–120 characters. |
ignore.person.name | string | No | Exclude articles mentioning these persons (comma-separated, max 3). Range: 0–120 characters. |
ignore.sport.name | string | No | Exclude articles mentioning these sports (comma-separated, max 3). Range: 0–120 characters. |
location.name | string | No | Filter by up to 3 known location names, separated by commas. Use /v1/suggest/entities to check the spelling. An unknown name returns 400 ER0218. Range: 0–120 characters. Example: New York City. |
organization.name | string | No | Filter by organization name (comma-separated, max 3). Range: 0–120 characters. Example: Microsoft. |
person.name | string | No | Filter by person name (comma-separated, max 3). Range: 0–120 characters. Example: Brian Krebs. |
sport.name | string | No | Filter by sport name (comma-separated, max 3). Range: 0–120 characters. |
Find vulnerability reports mentioning Microsoft
Combine the Microsoft entity ID with a title search for "vulnerability". This selects articles mentioning Microsoft; it does not identify the affected vendor of every CVE.
curl "https://api.apitube.io/v1/cyber-security/news?title=vulnerability&entity.id=1328071&api_key=YOUR_API_KEY"
import requests
response = requests.get(
"https://api.apitube.io/v1/cyber-security/news",
params={
"title": "vulnerability",
"entity.id": "1328071",
"api_key": "YOUR_API_KEY",
},
)
print(response.json())
const params = new URLSearchParams({"title": "vulnerability", "entity.id": "1328071", "api_key": "YOUR_API_KEY"});
const response = await fetch(`https://api.apitube.io/v1/cyber-security/news?${params}`);
const data = await response.json();
console.log(data);
$query = http_build_query(["title" => "vulnerability", "entity.id" => "1328071", "api_key" => "YOUR_API_KEY"]);
$response = file_get_contents("https://api.apitube.io/v1/cyber-security/news?$query");
$data = json_decode($response, true);
print_r($data);
package main
import (
"encoding/json"
"fmt"
"io"
"net/http"
"net/url"
)
func main() {
u, _ := url.Parse("https://api.apitube.io/v1/cyber-security/news")
q := u.Query()
q.Set("title", "vulnerability")
q.Set("entity.id", "1328071")
q.Set("api_key", "YOUR_API_KEY")
u.RawQuery = q.Encode()
resp, _ := http.Get(u.String())
defer resp.Body.Close()
body, _ := io.ReadAll(resp.Body)
var data map[string]any
json.Unmarshal(body, &data)
fmt.Println(data)
}
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
public class Example {
public static void main(String[] args) throws Exception {
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://api.apitube.io/v1/cyber-security/news?title=vulnerability&entity.id=1328071&api_key=YOUR_API_KEY"))
.GET()
.build();
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.body());
}
}
Write a script in your preferred language that calls the APITube Cyber Security API:
GET https://api.apitube.io/v1/cyber-security/news?title=vulnerability&entity.id=1328071
Read the API key from an environment variable (do not hardcode it), handle request
errors, and print the key fields of each result.
Docs: https://docs.apitube.io/platform/cyber-security/filters
Find vulnerability reports mentioning Fortinet
Combine the Fortinet organization filter with a title search for "vulnerability". Check the returned cyber.cves entries for the vulnerabilities described.
curl "https://api.apitube.io/v1/cyber-security/news?title=vulnerability&organization.name=Fortinet&api_key=YOUR_API_KEY"
import requests
response = requests.get(
"https://api.apitube.io/v1/cyber-security/news",
params={
"title": "vulnerability",
"organization.name": "Fortinet",
"api_key": "YOUR_API_KEY",
},
)
print(response.json())
const params = new URLSearchParams({"title": "vulnerability", "organization.name": "Fortinet", "api_key": "YOUR_API_KEY"});
const response = await fetch(`https://api.apitube.io/v1/cyber-security/news?${params}`);
const data = await response.json();
console.log(data);
$query = http_build_query(["title" => "vulnerability", "organization.name" => "Fortinet", "api_key" => "YOUR_API_KEY"]);
$response = file_get_contents("https://api.apitube.io/v1/cyber-security/news?$query");
$data = json_decode($response, true);
print_r($data);
package main
import (
"encoding/json"
"fmt"
"io"
"net/http"
"net/url"
)
func main() {
u, _ := url.Parse("https://api.apitube.io/v1/cyber-security/news")
q := u.Query()
q.Set("title", "vulnerability")
q.Set("organization.name", "Fortinet")
q.Set("api_key", "YOUR_API_KEY")
u.RawQuery = q.Encode()
resp, _ := http.Get(u.String())
defer resp.Body.Close()
body, _ := io.ReadAll(resp.Body)
var data map[string]any
json.Unmarshal(body, &data)
fmt.Println(data)
}
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
public class Example {
public static void main(String[] args) throws Exception {
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://api.apitube.io/v1/cyber-security/news?title=vulnerability&organization.name=Fortinet&api_key=YOUR_API_KEY"))
.GET()
.build();
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.body());
}
}
Write a script in your preferred language that calls the APITube Cyber Security API:
GET https://api.apitube.io/v1/cyber-security/news?title=vulnerability&organization.name=Fortinet
Read the API key from an environment variable (do not hardcode it), handle request
errors, and print the key fields of each result.
Docs: https://docs.apitube.io/platform/cyber-security/filters
Event types
| Parameter | Type | Required | Description |
|---|---|---|---|
event.category | string | No | Filter by event category. One of: business, society, environment. |
event.type | string | No | Comma-separated event types (max 5). Values: merger-acquisition, ipo, layoffs, bankruptcy, product-launch, funding-round, earnings, partnership, executive-change, lawsuit, data-breach, recall, expansion, closure, stock-movement, contract-award, spin-off, regulatory-action, election, protest, crime, terrorism, accident, policy-change, scandal, death, award-ceremony, conflict, diplomacy, health-crisis, migration, human-rights, earthquake, hurricane, flood, wildfire, tornado, tsunami, volcanic-eruption, drought, climate-event, pollution, wildlife-event, avalanche. Example: data-breach. |
ignore.event.type | string | No | Exclude these event types (comma-separated, max 5). |
Sentiment
| Parameter | Type | Required | Description |
|---|---|---|---|
entity.sentiment.polarity | string | No | Filter by the tone of coverage about an entity. Choose the entity with entity.id, person.name, organization.name, location.name, brand.name, event.name, disease.name, disaster.name or sport.name. Without one of these fields, the API returns 400 ER0293. One of: positive, negative, neutral. |
entity.sentiment.score.max | number | No | Maximum sentiment score toward the entity. Range: -1–1. |
entity.sentiment.score.min | number | No | Minimum sentiment score toward the entity. Range: -1–1. |
is_clickbait | boolean | No | Filter by clickbait detection. |
sentiment.body.polarity | string | No | Filter by the tone of the article body. One of: positive, negative, neutral. |
sentiment.body.score | number | No | Exact body sentiment score. Range: -1–1. |
sentiment.body.score.max | number | No | Maximum body sentiment score. Range: -1–1. |
sentiment.body.score.min | number | No | Minimum body sentiment score. Range: -1–1. |
sentiment.consistent | boolean | No | Find articles whose title and body have the same tone. |
sentiment.mixed | boolean | No | Find articles whose title and body have different tones. |
sentiment.overall.polarity | string | No | Filter by the overall tone of the article. One of: positive, negative, neutral. |
sentiment.overall.score | number | No | Exact overall sentiment score. Range: -1–1. |
sentiment.overall.score.max | number | No | Maximum overall sentiment score. Range: -1–1. |
sentiment.overall.score.min | number | No | Minimum overall sentiment score. Range: -1–1. |
sentiment.title.polarity | string | No | Filter by the tone of the article title. One of: positive, negative, neutral. |
sentiment.title.score | number | No | Exact title sentiment score. Range: -1–1. |
sentiment.title.score.max | number | No | Maximum title sentiment score. Range: -1–1. |
sentiment.title.score.min | number | No | Minimum title sentiment score. Range: -1–1. |
sentiment_gap.max | number | No | Maximum difference between title and body sentiment scores. Range: 0–2. |
sentiment_gap.min | number | No | Minimum difference between title and body sentiment scores. Range: 0–2. |
Media
| Parameter | Type | Required | Description |
|---|---|---|---|
has_4k_images | boolean | No | Filter articles with 4K images (>= 3840px width). |
has_consistent_image_sizes | boolean | No | Filter articles with consistent image dimensions. |
has_fullhd_images | boolean | No | Filter articles with Full HD images (>= 1920px width). |
has_hq_images | boolean | No | Filter articles with high-quality images (>= 1200px width). |
has_image | boolean | No | Filter articles with/without images. |
has_mixed_media | boolean | No | Filter articles with both image and video media types. |
has_mobile_optimized_images | boolean | No | Filter articles with mobile-optimized images (320-800px width). |
has_multiple_images | boolean | No | Filter articles with 2+ images. |
has_social_share_image | boolean | No | Filter articles with social share images (>= 1200x630px). |
has_thumbnail | boolean | No | Filter articles with thumbnail images (<= 300px width). |
has_video | boolean | No | Filter articles with/without videos. |
is_instagram_ready | boolean | No | Find images at least 1080px wide with a square or 4:5 aspect ratio for Instagram. |
is_landscape_media | boolean | No | Filter articles with landscape-oriented media. |
is_media_rich | boolean | No | Filter articles with both images and videos. |
is_portrait_media | boolean | No | Filter articles with portrait-oriented media. |
is_twitter_card_ready | boolean | No | Find landscape images at least 800px wide for Twitter Cards. |
media.images.count | integer | No | Exact number of images. Range: min 0. |
media.images.count.max | integer | No | Maximum number of images. Range: min 0. |
media.images.count.min | integer | No | Minimum number of images. Range: min 0. |
media.images.height.max | integer | No | Maximum image height in pixels. Range: min 0. |
media.images.height.min | integer | No | Minimum image height in pixels. Range: min 0. |
media.images.width.max | integer | No | Maximum image width in pixels. Range: min 0. |
media.images.width.min | integer | No | Minimum image width in pixels. Range: min 0. |
media.videos.count | integer | No | Exact number of videos. Range: min 0. |
media.videos.count.max | integer | No | Maximum number of videos. Range: min 0. |
media.videos.count.min | integer | No | Minimum number of videos. Range: min 0. |
Readability
| Parameter | Type | Required | Description |
|---|---|---|---|
is_difficult_read | boolean | No | Filter for difficult-to-read articles (Flesch Reading Ease < 40). |
is_easy_read | boolean | No | Filter for easy-to-read articles (Flesch Reading Ease >= 60). |
readability.age | integer | No | Exact reading age. Range: 6–22. |
readability.age.max | integer | No | Maximum reading age. Range: 6–22. |
readability.age.min | integer | No | Minimum reading age. Range: 6–22. |
readability.ari | number | No | Exact Automated Readability Index. Range: 0–30. |
readability.ari.max | number | No | Maximum Automated Readability Index. Range: 0–30. |
readability.ari.min | number | No | Minimum Automated Readability Index. Range: 0–30. |
readability.audience | string | No | Target audience. One of: children, general, professional, academic. |
readability.difficulty | string | No | Difficulty level. One of: beginner, intermediate, advanced, expert. |
readability.ease | number | No | Exact Flesch Reading Ease score. Range: 0–100. |
readability.ease.max | number | No | Maximum Flesch Reading Ease score. Range: 0–100. |
readability.ease.min | number | No | Minimum Flesch Reading Ease score. Range: 0–100. |
readability.fk_grade | number | No | Exact Flesch-Kincaid grade level. Range: 0–30. |
readability.fk_grade.max | number | No | Maximum Flesch-Kincaid grade level. Range: 0–30. |
readability.fk_grade.min | number | No | Minimum Flesch-Kincaid grade level. Range: 0–30. |
Read time
| Parameter | Type | Required | Description |
|---|---|---|---|
is_deep_dive | boolean | No | Filter for deep dives (>= 10 minutes). |
is_long_read | boolean | No | Filter for long reads (>= 5 minutes). |
is_medium_read | boolean | No | Filter for medium-length reads (3-7 minutes). |
is_quick_read | boolean | No | Filter for quick reads (<= 2 minutes). |
is_short_read | boolean | No | Filter for short reads (< 3 minutes). |
read_time | integer | No | Exact read time in minutes. Range: 0–1000. |
read_time.max | integer | No | Maximum read time in minutes. Range: 0–1000. |
read_time.min | integer | No | Minimum read time in minutes. Range: 0–1000. |
Geo and local
| Parameter | Type | Required | Description |
|---|---|---|---|
has_location_geo | boolean | No | Filter articles with/without geo-location data. |
location.bbox | string | No | Bounding box: minLat,maxLat,minLng,maxLng. Example: 40.0,41.0,-74.5,-73.5. |
location.lat | number | No | Latitude for radius search. Range: -90–90. |
location.lng | number | No | Longitude for radius search. Range: -180–180. |
location.radius | number | No | Search radius in kilometers (requires location.lat and location.lng). Range: max 20000, > 0. |
location.radius.min | number | No | Minimum distance from point in km. Range: 0–20000. |
Article flags
| Parameter | Type | Required | Description |
|---|---|---|---|
is_breaking | boolean | No | Filter breaking news articles. |
is_duplicate | boolean | No | Filter duplicate/unique articles. |
is_high_quality | boolean | No | Find articles that are not duplicates, have a rank of at least 5 and include images and an author. |
is_paywall | boolean | No | Filter paywalled articles. |
Sorting
| Parameter | Type | Required | Description |
|---|---|---|---|
sort.by | string | No | Field to sort results by. One of: published_at, relevance, engagement, quality, controversy, trust, id, new, created_at, source.rank.opr, sentiment.overall.score, sentiment.title.score and 18 more. Default: published_at. |
sort.order | string | No | Sort order. One of: asc, desc. Default: desc. |
Read ransomware coverage in publication order
Return ransomware reports from the last seven days, starting with the earliest publication. Publication order does not establish the order of attacks.
curl "https://api.apitube.io/v1/cyber-security/news?title=ransomware&published_at.start=NOW-7DAYS&published_at.end=NOW&sort.by=published_at&sort.order=asc&api_key=YOUR_API_KEY"
import requests
response = requests.get(
"https://api.apitube.io/v1/cyber-security/news",
params={
"title": "ransomware",
"published_at.start": "NOW-7DAYS",
"published_at.end": "NOW",
"sort.by": "published_at",
"sort.order": "asc",
"api_key": "YOUR_API_KEY",
},
)
print(response.json())
const params = new URLSearchParams({"title": "ransomware", "published_at.start": "NOW-7DAYS", "published_at.end": "NOW", "sort.by": "published_at", "sort.order": "asc", "api_key": "YOUR_API_KEY"});
const response = await fetch(`https://api.apitube.io/v1/cyber-security/news?${params}`);
const data = await response.json();
console.log(data);
$query = http_build_query(["title" => "ransomware", "published_at.start" => "NOW-7DAYS", "published_at.end" => "NOW", "sort.by" => "published_at", "sort.order" => "asc", "api_key" => "YOUR_API_KEY"]);
$response = file_get_contents("https://api.apitube.io/v1/cyber-security/news?$query");
$data = json_decode($response, true);
print_r($data);
package main
import (
"encoding/json"
"fmt"
"io"
"net/http"
"net/url"
)
func main() {
u, _ := url.Parse("https://api.apitube.io/v1/cyber-security/news")
q := u.Query()
q.Set("title", "ransomware")
q.Set("published_at.start", "NOW-7DAYS")
q.Set("published_at.end", "NOW")
q.Set("sort.by", "published_at")
q.Set("sort.order", "asc")
q.Set("api_key", "YOUR_API_KEY")
u.RawQuery = q.Encode()
resp, _ := http.Get(u.String())
defer resp.Body.Close()
body, _ := io.ReadAll(resp.Body)
var data map[string]any
json.Unmarshal(body, &data)
fmt.Println(data)
}
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
public class Example {
public static void main(String[] args) throws Exception {
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://api.apitube.io/v1/cyber-security/news?title=ransomware&published_at.start=NOW-7DAYS&published_at.end=NOW&sort.by=published_at&sort.order=asc&api_key=YOUR_API_KEY"))
.GET()
.build();
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.body());
}
}
Write a script in your preferred language that calls the APITube Cyber Security API:
GET https://api.apitube.io/v1/cyber-security/news?title=ransomware&published_at.start=NOW-7DAYS&published_at.end=NOW&sort.by=published_at&sort.order=asc
Read the API key from an environment variable (do not hardcode it), handle request
errors, and print the key fields of each result.
Docs: https://docs.apitube.io/platform/cyber-security/filters
Pagination
| Parameter | Type | Required | Description |
|---|---|---|---|
page | integer | No | Page number for pagination. Range: min 1. Default: 1. |
per_page | integer | No | Number of results per page (max 250; Free is capped at 10, Starter at 50, Basic at 200). Range: 1–250. Default: 100. |
Read the second page of data breach reports
Search titles for the exact phrase "data breach" and request the second page of ten results.
curl "https://api.apitube.io/v1/cyber-security/news?title=%22data%20breach%22&per_page=10&page=2&api_key=YOUR_API_KEY"
import requests
response = requests.get(
"https://api.apitube.io/v1/cyber-security/news",
params={
"title": "\"data breach\"",
"per_page": "10",
"page": "2",
"api_key": "YOUR_API_KEY",
},
)
print(response.json())
const params = new URLSearchParams({"title": "\"data breach\"", "per_page": "10", "page": "2", "api_key": "YOUR_API_KEY"});
const response = await fetch(`https://api.apitube.io/v1/cyber-security/news?${params}`);
const data = await response.json();
console.log(data);
$query = http_build_query(["title" => "\"data breach\"", "per_page" => "10", "page" => "2", "api_key" => "YOUR_API_KEY"]);
$response = file_get_contents("https://api.apitube.io/v1/cyber-security/news?$query");
$data = json_decode($response, true);
print_r($data);
package main
import (
"encoding/json"
"fmt"
"io"
"net/http"
"net/url"
)
func main() {
u, _ := url.Parse("https://api.apitube.io/v1/cyber-security/news")
q := u.Query()
q.Set("title", "\"data breach\"")
q.Set("per_page", "10")
q.Set("page", "2")
q.Set("api_key", "YOUR_API_KEY")
u.RawQuery = q.Encode()
resp, _ := http.Get(u.String())
defer resp.Body.Close()
body, _ := io.ReadAll(resp.Body)
var data map[string]any
json.Unmarshal(body, &data)
fmt.Println(data)
}
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
public class Example {
public static void main(String[] args) throws Exception {
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://api.apitube.io/v1/cyber-security/news?title=%22data%20breach%22&per_page=10&page=2&api_key=YOUR_API_KEY"))
.GET()
.build();
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.body());
}
}
Write a script in your preferred language that calls the APITube Cyber Security API:
GET https://api.apitube.io/v1/cyber-security/news?title=%22data%20breach%22&per_page=10&page=2
Read the API key from an environment variable (do not hardcode it), handle request
errors, and print the key fields of each result.
Docs: https://docs.apitube.io/platform/cyber-security/filters
Faceting
| Parameter | Type | Required | Description |
|---|---|---|---|
facet | string | No | Return article counts grouped by the fields in facet.field. One of: 0, 1. |
facet.field | string | No | Fields to count by, separated by commas (max 5). Allowed values: source.id, source.country.id, source.bias, language.id, author.id, category.id, topic.id, industry.id, entity.id, sentiment.overall.polarity, sentiment.title.polarity, sentiment.body.polarity, sentiment.strength, is_duplicate, is_free, is_important, media.images.count, media.videos.count, read_time, content.length, published.year, published.month, published.day_of_week, published.hour, published.weekday, published.time_of_day. Example: source.id,category.id. |
facet.limit | integer | No | Maximum number of facet values per field (max 100). Range: 1–100. Default: 10. |
facet.mincount | integer | No | Minimum count for a facet value to be included. Range: min 1. Default: 1. |
facet.range | string | No | Count articles within date or numeric intervals. One of: 0, 1. |
facet.range.end | string | No | End value for range faceting (required with facet.range). |
facet.range.field | string | No | Field to group into date or numeric intervals. Values: published_at, sentiment.overall.score, sentiment.title.score, sentiment.body.score, read_time, source.rank.opr, media.images.count, media.videos.count. |
facet.range.gap | string | No | Size of each interval. Use a time span for dates, such as +1DAY, or a number for numeric fields. Default: +1DAY. |
facet.range.start | string | No | Start value for range faceting (required with facet.range). |
Count ransomware reports by publication day
Count articles mentioning "ransomware" in their titles between October 1 and October 15, 2026. These are article counts, not counts of distinct attacks.
curl "https://api.apitube.io/v1/cyber-security/news?title=ransomware&published_at.start=2026-10-01&published_at.end=2026-10-15&facet.range=1&facet.range.field=published_at&facet.range.start=2026-10-01&facet.range.end=2026-10-15&facet.range.gap=%2B1DAY&api_key=YOUR_API_KEY"
import requests
response = requests.get(
"https://api.apitube.io/v1/cyber-security/news",
params={
"title": "ransomware",
"published_at.start": "2026-10-01",
"published_at.end": "2026-10-15",
"facet.range": "1",
"facet.range.field": "published_at",
"facet.range.start": "2026-10-01",
"facet.range.end": "2026-10-15",
"facet.range.gap": "+1DAY",
"api_key": "YOUR_API_KEY",
},
)
print(response.json())
const params = new URLSearchParams({"title": "ransomware", "published_at.start": "2026-10-01", "published_at.end": "2026-10-15", "facet.range": "1", "facet.range.field": "published_at", "facet.range.start": "2026-10-01", "facet.range.end": "2026-10-15", "facet.range.gap": "+1DAY", "api_key": "YOUR_API_KEY"});
const response = await fetch(`https://api.apitube.io/v1/cyber-security/news?${params}`);
const data = await response.json();
console.log(data);
$query = http_build_query(["title" => "ransomware", "published_at.start" => "2026-10-01", "published_at.end" => "2026-10-15", "facet.range" => "1", "facet.range.field" => "published_at", "facet.range.start" => "2026-10-01", "facet.range.end" => "2026-10-15", "facet.range.gap" => "+1DAY", "api_key" => "YOUR_API_KEY"]);
$response = file_get_contents("https://api.apitube.io/v1/cyber-security/news?$query");
$data = json_decode($response, true);
print_r($data);
package main
import (
"encoding/json"
"fmt"
"io"
"net/http"
"net/url"
)
func main() {
u, _ := url.Parse("https://api.apitube.io/v1/cyber-security/news")
q := u.Query()
q.Set("title", "ransomware")
q.Set("published_at.start", "2026-10-01")
q.Set("published_at.end", "2026-10-15")
q.Set("facet.range", "1")
q.Set("facet.range.field", "published_at")
q.Set("facet.range.start", "2026-10-01")
q.Set("facet.range.end", "2026-10-15")
q.Set("facet.range.gap", "+1DAY")
q.Set("api_key", "YOUR_API_KEY")
u.RawQuery = q.Encode()
resp, _ := http.Get(u.String())
defer resp.Body.Close()
body, _ := io.ReadAll(resp.Body)
var data map[string]any
json.Unmarshal(body, &data)
fmt.Println(data)
}
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
public class Example {
public static void main(String[] args) throws Exception {
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://api.apitube.io/v1/cyber-security/news?title=ransomware&published_at.start=2026-10-01&published_at.end=2026-10-15&facet.range=1&facet.range.field=published_at&facet.range.start=2026-10-01&facet.range.end=2026-10-15&facet.range.gap=%2B1DAY&api_key=YOUR_API_KEY"))
.GET()
.build();
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.body());
}
}
Write a script in your preferred language that calls the APITube Cyber Security API:
GET https://api.apitube.io/v1/cyber-security/news?title=ransomware&published_at.start=2026-10-01&published_at.end=2026-10-15&facet.range=1&facet.range.field=published_at&facet.range.start=2026-10-01&facet.range.end=2026-10-15&facet.range.gap=%2B1DAY
Read the API key from an environment variable (do not hardcode it), handle request
errors, and print the key fields of each result.
Docs: https://docs.apitube.io/platform/cyber-security/filters
Highlighting
| Parameter | Type | Required | Description |
|---|---|---|---|
hl | string | No | Enable highlighting. One of: 0, 1. |
hl.fl | string | No | Comma-separated fields to highlight (max 5). Values: title, description, body. Default: title,description. Example: title,description. |
hl.fragsize | integer | No | Size of highlighted fragment in characters (50-500). Range: 50–500. Default: 150. |
hl.snippets | integer | No | Number of highlighted snippets per field (max 10). Range: 1–10. Default: 3. |
hl.tag.post | string | No | Closing tag for highlighted text. Default: </em>. |
hl.tag.pre | string | No | Opening tag for highlighted text. Default: <em>. |
search | string | No | List extra terms to highlight, separated by commas. Terms from title are included automatically. Requires hl=1. This parameter only changes highlighting; it does not filter articles. Example: ransomware,phishing. Accepted by the API but not part of the published OpenAPI specification, so generated SDKs do not expose it. |
Highlight data breach mentions in search results
Find titles containing the exact phrase "data breach" and highlight matching terms in titles and descriptions.
curl "https://api.apitube.io/v1/cyber-security/news?title=%22data%20breach%22&hl=1&hl.fl=title%2Cdescription&api_key=YOUR_API_KEY"
import requests
response = requests.get(
"https://api.apitube.io/v1/cyber-security/news",
params={
"title": "\"data breach\"",
"hl": "1",
"hl.fl": "title,description",
"api_key": "YOUR_API_KEY",
},
)
print(response.json())
const params = new URLSearchParams({"title": "\"data breach\"", "hl": "1", "hl.fl": "title,description", "api_key": "YOUR_API_KEY"});
const response = await fetch(`https://api.apitube.io/v1/cyber-security/news?${params}`);
const data = await response.json();
console.log(data);
$query = http_build_query(["title" => "\"data breach\"", "hl" => "1", "hl.fl" => "title,description", "api_key" => "YOUR_API_KEY"]);
$response = file_get_contents("https://api.apitube.io/v1/cyber-security/news?$query");
$data = json_decode($response, true);
print_r($data);
package main
import (
"encoding/json"
"fmt"
"io"
"net/http"
"net/url"
)
func main() {
u, _ := url.Parse("https://api.apitube.io/v1/cyber-security/news")
q := u.Query()
q.Set("title", "\"data breach\"")
q.Set("hl", "1")
q.Set("hl.fl", "title,description")
q.Set("api_key", "YOUR_API_KEY")
u.RawQuery = q.Encode()
resp, _ := http.Get(u.String())
defer resp.Body.Close()
body, _ := io.ReadAll(resp.Body)
var data map[string]any
json.Unmarshal(body, &data)
fmt.Println(data)
}
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
public class Example {
public static void main(String[] args) throws Exception {
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://api.apitube.io/v1/cyber-security/news?title=%22data%20breach%22&hl=1&hl.fl=title%2Cdescription&api_key=YOUR_API_KEY"))
.GET()
.build();
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.body());
}
}
Write a script in your preferred language that calls the APITube Cyber Security API:
GET https://api.apitube.io/v1/cyber-security/news?title=%22data%20breach%22&hl=1&hl.fl=title%2Cdescription
Read the API key from an environment variable (do not hardcode it), handle request
errors, and print the key fields of each result.
Docs: https://docs.apitube.io/platform/cyber-security/filters
Field selection
| Parameter | Type | Required | Description |
|---|---|---|---|
fl | string | No | Comma-separated list of fields to include in the response. Example: id,title,published_at,source.domain. |
Read CVE details alongside remote code execution reports
Find titles containing the exact phrase "remote code execution" and return article links with their cyber enrichment. Check each returned CVE entry; the title search does not guarantee that a CVE was identified.
curl "https://api.apitube.io/v1/cyber-security/news?title=%22remote%20code%20execution%22&fl=id%2Ctitle%2Chref%2Ccyber&api_key=YOUR_API_KEY"
import requests
response = requests.get(
"https://api.apitube.io/v1/cyber-security/news",
params={
"title": "\"remote code execution\"",
"fl": "id,title,href,cyber",
"api_key": "YOUR_API_KEY",
},
)
print(response.json())
const params = new URLSearchParams({"title": "\"remote code execution\"", "fl": "id,title,href,cyber", "api_key": "YOUR_API_KEY"});
const response = await fetch(`https://api.apitube.io/v1/cyber-security/news?${params}`);
const data = await response.json();
console.log(data);
$query = http_build_query(["title" => "\"remote code execution\"", "fl" => "id,title,href,cyber", "api_key" => "YOUR_API_KEY"]);
$response = file_get_contents("https://api.apitube.io/v1/cyber-security/news?$query");
$data = json_decode($response, true);
print_r($data);
package main
import (
"encoding/json"
"fmt"
"io"
"net/http"
"net/url"
)
func main() {
u, _ := url.Parse("https://api.apitube.io/v1/cyber-security/news")
q := u.Query()
q.Set("title", "\"remote code execution\"")
q.Set("fl", "id,title,href,cyber")
q.Set("api_key", "YOUR_API_KEY")
u.RawQuery = q.Encode()
resp, _ := http.Get(u.String())
defer resp.Body.Close()
body, _ := io.ReadAll(resp.Body)
var data map[string]any
json.Unmarshal(body, &data)
fmt.Println(data)
}
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
public class Example {
public static void main(String[] args) throws Exception {
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://api.apitube.io/v1/cyber-security/news?title=%22remote%20code%20execution%22&fl=id%2Ctitle%2Chref%2Ccyber&api_key=YOUR_API_KEY"))
.GET()
.build();
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.body());
}
}
Write a script in your preferred language that calls the APITube Cyber Security API:
GET https://api.apitube.io/v1/cyber-security/news?title=%22remote%20code%20execution%22&fl=id%2Ctitle%2Chref%2Ccyber
Read the API key from an environment variable (do not hardcode it), handle request
errors, and print the key fields of each result.
Docs: https://docs.apitube.io/platform/cyber-security/filters
Export
| Parameter | Type | Required | Description |
|---|---|---|---|
export | string | No | Export format. One of: json, csv, tsv, xml, rss, xlsx, parquet, jsonl, ndjson. |
Request and debug
| Parameter | Type | Required | Description |
|---|---|---|---|
debug | string | No | Include user_input in response for debugging. One of: 0, 1. |
Filter limits
A few limits carry over from /v1/news/everything:
- Title search (
title,title_starts_with,title_ends_with,title_pattern,query) covers at most 31 days ofpublished_at. A wider range returns400 ER0110; without a range the last 31 days are searched. - Multi-value filters keep the first 3 values (
source.domain,language.code,category.id,*.namefilters) or the first 5 (event.type). Extra values are dropped without an error. location.namemust match a known location entity. Check the spelling with/v1/suggest/entities; an unknown name returns400 ER0218.promptrequires Basic or above. The filters it produces are combined with the cyber selection like any other filter.
Fields you cannot filter on
The response includes cyber.cves, cyber.vendors, cyber.in_kev, cyber.exploited and cyber.cvss, but these fields cannot filter a request. For example, cyber.cves=… or cyber.cvss.min=… returns 200 without applying that condition. The ER0368 warning in meta.warnings names the ignored parameter.
To keep only some vulnerabilities — for example, articles with in_kev: true or cvss of 9 and above — filter the results in your code. The quickstart has a ready script.
Field selection, facets and highlighting
Use these parameters to choose response fields, counts and highlighted text:
flreturns only the listed fields.cyberreturns the whole block;cyber.cvesorcyber.in_kevreturn a single field of it. Example:fl=id,title,href,cyber.cves,cyber.in_kev.facet=1withfacet.fieldcounts values across all matching cyber articles, not only the current page. For ransomware coverage by publisher, combinetitle=ransomwarewithfacet=1&facet.field=source.id.facet.range=1counts matching articles within intervals, such as days. The ransomware example above groups reports by publication day; the counts do not represent distinct attacks.hl=1marks the terms fromtitle(and extra terms fromsearch) in the title and description, and returns the fragments inhighlighting.
Related
- Response format — what each
cyberfield contains. - Quickstart — the endpoint, request examples, limits and error codes.
- Search articles — the full parameter list shared by this endpoint.