Skip to content

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=vulnerability narrows the feed to articles mentioning Fortinet with "vulnerability" in their titles.
  • A boolean query such as ransomware OR phishing searches 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.

ParameterTypeRequiredDescription
promptstringNoDescribe 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.

bash
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"
python
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())
javascript
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);
php
$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);
go
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)
}
java
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());
    }
}
text
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

Search inside article titles. Limited to a 31-day published_at window.

ParameterTypeRequiredDescription
ignore.titlestringNoExclude articles containing this text in the title. Range: 2–100 characters.
querystringNoCombine 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 &#123;&#123;...}} 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.
titlestringNoSearch 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_withstringNoFind articles whose titles end with this text. As with title, the date range can cover at most 31 days. Range: 2–100 characters.
title_patternstringNoFind 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_withstringNoFind 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.

bash
curl "https://api.apitube.io/v1/cyber-security/news?title=phishing&api_key=YOUR_API_KEY"
python
import requests

response = requests.get(
    "https://api.apitube.io/v1/cyber-security/news",
    params={
        "title": "phishing",
        "api_key": "YOUR_API_KEY",
    },
)
print(response.json())
javascript
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);
php
$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);
go
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)
}
java
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());
    }
}
text
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.

bash
curl "https://api.apitube.io/v1/cyber-security/news?title=ransomware%2Cattack&api_key=YOUR_API_KEY"
python
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())
javascript
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);
php
$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);
go
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)
}
java
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());
    }
}
text
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.

bash
curl "https://api.apitube.io/v1/cyber-security/news?title=%22zero%20day%22&api_key=YOUR_API_KEY"
python
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())
javascript
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);
php
$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);
go
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)
}
java
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());
    }
}
text
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.

bash
curl "https://api.apitube.io/v1/cyber-security/news?title=%22remote%20code%20execution%22&api_key=YOUR_API_KEY"
python
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())
javascript
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);
php
$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);
go
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)
}
java
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());
    }
}
text
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.

bash
curl "https://api.apitube.io/v1/cyber-security/news?title=%22privilege%20escalation%22&api_key=YOUR_API_KEY"
python
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())
javascript
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);
php
$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);
go
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)
}
java
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());
    }
}
text
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".

bash
curl "https://api.apitube.io/v1/cyber-security/news?title=%22Patch%20Tuesday%22&api_key=YOUR_API_KEY"
python
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())
javascript
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);
php
$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);
go
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)
}
java
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());
    }
}
text
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.

bash
curl "https://api.apitube.io/v1/cyber-security/news?title=%22supply%20chain%20attack%22&api_key=YOUR_API_KEY"
python
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())
javascript
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);
php
$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);
go
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)
}
java
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());
    }
}
text
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 ​

ParameterTypeRequiredDescription
article.idstringNoComma-separated article IDs (max 5). Example: 12345.

Date and time ​

ParameterTypeRequiredDescription
published_atstringNoExact date (creates 24-hour range). Format: YYYY-MM-DD or ISO 8601. Example: 2025-01-15.
published_at.endstringNoEnd 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.startstringNoStart 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.

bash
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"
python
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())
javascript
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);
php
$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);
go
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)
}
java
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());
    }
}
text
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.

bash
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"
python
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())
javascript
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);
php
$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);
go
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)
}
java
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());
    }
}
text
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 ​

ParameterTypeRequiredDescription
ignore.language.codestringNoExclude articles in these languages (comma-separated, max 3). Example: zh,ar.
language.codestringNoComma-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.

bash
curl "https://api.apitube.io/v1/cyber-security/news?title=phishing&language.code=en%2Cfr&api_key=YOUR_API_KEY"
python
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())
javascript
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);
php
$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);
go
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)
}
java
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());
    }
}
text
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 ​

ParameterTypeRequiredDescription
ignore.source.biasstringNoExclude publishers with these political biases, separated by commas. Values: left, center, right. Example: right.
ignore.source.country.codestringNoExclude sources from these countries (comma-separated, max 3). Example: us.
ignore.source.domainstringNoExclude these source domains (comma-separated, max 3).
ignore.source.idstringNoExclude these source IDs (comma-separated, max 3).
is_premium_sourcebooleanNoFilter by premium source status.
is_verified_sourcebooleanNoFilter by verified source status.
source.biasstringNoFilter by publishers' political bias, separated by commas. Values: left, center, right. Example: left.
source.country.codestringNoFilter by source country ISO 3166-1 alpha-2 codes (comma-separated, max 3). Example: us.
source.domainstringNoComma-separated source domains (max 3). Example: bleepingcomputer.com.
source.idstringNoComma-separated source IDs (max 3). Example: 100.
source.rank.opr.maxintegerNoMaximum Open PageRank score. Range: min 0.
source.rank.opr.minintegerNoMinimum Open PageRank score. Range: min 0.

Find ransomware reports from BleepingComputer

Limit ransomware title searches to articles published by BleepingComputer.

bash
curl "https://api.apitube.io/v1/cyber-security/news?title=ransomware&source.domain=bleepingcomputer.com&api_key=YOUR_API_KEY"
python
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())
javascript
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);
php
$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);
go
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)
}
java
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());
    }
}
text
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".

bash
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"
python
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())
javascript
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);
php
$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);
go
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)
}
java
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());
    }
}
text
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 ​

ParameterTypeRequiredDescription
author.idstringNoComma-separated author IDs (max 3).
author.namestringNoFilter by author name (comma-separated, max 3). Range: 0–100 characters.
has_authorbooleanNoFilter articles with/without author.
ignore.author.idstringNoExclude these author IDs (comma-separated, max 3).
ignore.author.namestringNoExclude articles by these authors (comma-separated, max 3). Range: 0–100 characters.

Categories ​

ParameterTypeRequiredDescription
category.idstringNoCategory IDs, separated by commas (max 3). Use IPTC Media Topic IDs such as medtop:20000086 (cyber crime). Example: medtop:20000086.
ignore.category.idstringNoExclude these categories (comma-separated, max 3).

Topics ​

ParameterTypeRequiredDescription
ignore.topic.idstringNoExclude these topics (comma-separated, max 3).
topic.idstringNoTopic IDs, separated by commas (max 3). Find IDs with /v1/suggest/topics.

Industries ​

ParameterTypeRequiredDescription
ignore.industry.idstringNoExclude these industries (comma-separated, max 3).
industry.idstringNoComma-separated industry IDs (max 3). Example: 877 (Cybersecurity).

Entities, people, organizations, brands ​

ParameterTypeRequiredDescription
brand.namestringNoFilter by brand name (comma-separated, max 3). Range: 0–120 characters.
disaster.namestringNoFilter by natural disaster name (comma-separated, max 3). Range: 0–120 characters.
disease.namestringNoFilter by disease name (comma-separated, max 3). Range: 0–120 characters.
entity.idstringNoComma-separated entity IDs (max 3). Example: 1328071 (Microsoft).
event.namestringNoFilter by event name (comma-separated, max 3). Range: 0–120 characters.
ignore.brand.namestringNoExclude articles mentioning these brands (comma-separated, max 3). Range: 0–120 characters.
ignore.disaster.namestringNoExclude articles mentioning these disasters (comma-separated, max 3). Range: 0–120 characters.
ignore.disease.namestringNoExclude articles mentioning these diseases (comma-separated, max 3). Range: 0–120 characters.
ignore.entity.idstringNoExclude these entity IDs (comma-separated, max 3).
ignore.event.namestringNoExclude articles mentioning these events (comma-separated, max 3). Range: 0–120 characters.
ignore.location.namestringNoExclude articles mentioning these locations (comma-separated, max 3). Range: 0–120 characters.
ignore.organization.namestringNoExclude articles mentioning these organizations (comma-separated, max 3). Range: 0–120 characters.
ignore.person.namestringNoExclude articles mentioning these persons (comma-separated, max 3). Range: 0–120 characters.
ignore.sport.namestringNoExclude articles mentioning these sports (comma-separated, max 3). Range: 0–120 characters.
location.namestringNoFilter 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.namestringNoFilter by organization name (comma-separated, max 3). Range: 0–120 characters. Example: Microsoft.
person.namestringNoFilter by person name (comma-separated, max 3). Range: 0–120 characters. Example: Brian Krebs.
sport.namestringNoFilter 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.

bash
curl "https://api.apitube.io/v1/cyber-security/news?title=vulnerability&entity.id=1328071&api_key=YOUR_API_KEY"
python
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())
javascript
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);
php
$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);
go
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)
}
java
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());
    }
}
text
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.

bash
curl "https://api.apitube.io/v1/cyber-security/news?title=vulnerability&organization.name=Fortinet&api_key=YOUR_API_KEY"
python
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())
javascript
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);
php
$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);
go
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)
}
java
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());
    }
}
text
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 ​

ParameterTypeRequiredDescription
event.categorystringNoFilter by event category. One of: business, society, environment.
event.typestringNoComma-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.typestringNoExclude these event types (comma-separated, max 5).

Sentiment ​

ParameterTypeRequiredDescription
entity.sentiment.polaritystringNoFilter 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.maxnumberNoMaximum sentiment score toward the entity. Range: -1–1.
entity.sentiment.score.minnumberNoMinimum sentiment score toward the entity. Range: -1–1.
is_clickbaitbooleanNoFilter by clickbait detection.
sentiment.body.polaritystringNoFilter by the tone of the article body. One of: positive, negative, neutral.
sentiment.body.scorenumberNoExact body sentiment score. Range: -1–1.
sentiment.body.score.maxnumberNoMaximum body sentiment score. Range: -1–1.
sentiment.body.score.minnumberNoMinimum body sentiment score. Range: -1–1.
sentiment.consistentbooleanNoFind articles whose title and body have the same tone.
sentiment.mixedbooleanNoFind articles whose title and body have different tones.
sentiment.overall.polaritystringNoFilter by the overall tone of the article. One of: positive, negative, neutral.
sentiment.overall.scorenumberNoExact overall sentiment score. Range: -1–1.
sentiment.overall.score.maxnumberNoMaximum overall sentiment score. Range: -1–1.
sentiment.overall.score.minnumberNoMinimum overall sentiment score. Range: -1–1.
sentiment.title.polaritystringNoFilter by the tone of the article title. One of: positive, negative, neutral.
sentiment.title.scorenumberNoExact title sentiment score. Range: -1–1.
sentiment.title.score.maxnumberNoMaximum title sentiment score. Range: -1–1.
sentiment.title.score.minnumberNoMinimum title sentiment score. Range: -1–1.
sentiment_gap.maxnumberNoMaximum difference between title and body sentiment scores. Range: 0–2.
sentiment_gap.minnumberNoMinimum difference between title and body sentiment scores. Range: 0–2.

Media ​

ParameterTypeRequiredDescription
has_4k_imagesbooleanNoFilter articles with 4K images (>= 3840px width).
has_consistent_image_sizesbooleanNoFilter articles with consistent image dimensions.
has_fullhd_imagesbooleanNoFilter articles with Full HD images (>= 1920px width).
has_hq_imagesbooleanNoFilter articles with high-quality images (>= 1200px width).
has_imagebooleanNoFilter articles with/without images.
has_mixed_mediabooleanNoFilter articles with both image and video media types.
has_mobile_optimized_imagesbooleanNoFilter articles with mobile-optimized images (320-800px width).
has_multiple_imagesbooleanNoFilter articles with 2+ images.
has_social_share_imagebooleanNoFilter articles with social share images (>= 1200x630px).
has_thumbnailbooleanNoFilter articles with thumbnail images (<= 300px width).
has_videobooleanNoFilter articles with/without videos.
is_instagram_readybooleanNoFind images at least 1080px wide with a square or 4:5 aspect ratio for Instagram.
is_landscape_mediabooleanNoFilter articles with landscape-oriented media.
is_media_richbooleanNoFilter articles with both images and videos.
is_portrait_mediabooleanNoFilter articles with portrait-oriented media.
is_twitter_card_readybooleanNoFind landscape images at least 800px wide for Twitter Cards.
media.images.countintegerNoExact number of images. Range: min 0.
media.images.count.maxintegerNoMaximum number of images. Range: min 0.
media.images.count.minintegerNoMinimum number of images. Range: min 0.
media.images.height.maxintegerNoMaximum image height in pixels. Range: min 0.
media.images.height.minintegerNoMinimum image height in pixels. Range: min 0.
media.images.width.maxintegerNoMaximum image width in pixels. Range: min 0.
media.images.width.minintegerNoMinimum image width in pixels. Range: min 0.
media.videos.countintegerNoExact number of videos. Range: min 0.
media.videos.count.maxintegerNoMaximum number of videos. Range: min 0.
media.videos.count.minintegerNoMinimum number of videos. Range: min 0.

Readability ​

ParameterTypeRequiredDescription
is_difficult_readbooleanNoFilter for difficult-to-read articles (Flesch Reading Ease < 40).
is_easy_readbooleanNoFilter for easy-to-read articles (Flesch Reading Ease >= 60).
readability.ageintegerNoExact reading age. Range: 6–22.
readability.age.maxintegerNoMaximum reading age. Range: 6–22.
readability.age.minintegerNoMinimum reading age. Range: 6–22.
readability.arinumberNoExact Automated Readability Index. Range: 0–30.
readability.ari.maxnumberNoMaximum Automated Readability Index. Range: 0–30.
readability.ari.minnumberNoMinimum Automated Readability Index. Range: 0–30.
readability.audiencestringNoTarget audience. One of: children, general, professional, academic.
readability.difficultystringNoDifficulty level. One of: beginner, intermediate, advanced, expert.
readability.easenumberNoExact Flesch Reading Ease score. Range: 0–100.
readability.ease.maxnumberNoMaximum Flesch Reading Ease score. Range: 0–100.
readability.ease.minnumberNoMinimum Flesch Reading Ease score. Range: 0–100.
readability.fk_gradenumberNoExact Flesch-Kincaid grade level. Range: 0–30.
readability.fk_grade.maxnumberNoMaximum Flesch-Kincaid grade level. Range: 0–30.
readability.fk_grade.minnumberNoMinimum Flesch-Kincaid grade level. Range: 0–30.

Read time ​

ParameterTypeRequiredDescription
is_deep_divebooleanNoFilter for deep dives (>= 10 minutes).
is_long_readbooleanNoFilter for long reads (>= 5 minutes).
is_medium_readbooleanNoFilter for medium-length reads (3-7 minutes).
is_quick_readbooleanNoFilter for quick reads (<= 2 minutes).
is_short_readbooleanNoFilter for short reads (< 3 minutes).
read_timeintegerNoExact read time in minutes. Range: 0–1000.
read_time.maxintegerNoMaximum read time in minutes. Range: 0–1000.
read_time.minintegerNoMinimum read time in minutes. Range: 0–1000.

Geo and local ​

ParameterTypeRequiredDescription
has_location_geobooleanNoFilter articles with/without geo-location data.
location.bboxstringNoBounding box: minLat,maxLat,minLng,maxLng. Example: 40.0,41.0,-74.5,-73.5.
location.latnumberNoLatitude for radius search. Range: -90–90.
location.lngnumberNoLongitude for radius search. Range: -180–180.
location.radiusnumberNoSearch radius in kilometers (requires location.lat and location.lng). Range: max 20000, > 0.
location.radius.minnumberNoMinimum distance from point in km. Range: 0–20000.

Article flags ​

ParameterTypeRequiredDescription
is_breakingbooleanNoFilter breaking news articles.
is_duplicatebooleanNoFilter duplicate/unique articles.
is_high_qualitybooleanNoFind articles that are not duplicates, have a rank of at least 5 and include images and an author.
is_paywallbooleanNoFilter paywalled articles.

Sorting ​

ParameterTypeRequiredDescription
sort.bystringNoField 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.orderstringNoSort 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.

bash
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"
python
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())
javascript
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);
php
$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);
go
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)
}
java
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());
    }
}
text
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 ​

ParameterTypeRequiredDescription
pageintegerNoPage number for pagination. Range: min 1. Default: 1.
per_pageintegerNoNumber 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.

bash
curl "https://api.apitube.io/v1/cyber-security/news?title=%22data%20breach%22&per_page=10&page=2&api_key=YOUR_API_KEY"
python
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())
javascript
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);
php
$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);
go
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)
}
java
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());
    }
}
text
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 ​

ParameterTypeRequiredDescription
facetstringNoReturn article counts grouped by the fields in facet.field. One of: 0, 1.
facet.fieldstringNoFields 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.limitintegerNoMaximum number of facet values per field (max 100). Range: 1–100. Default: 10.
facet.mincountintegerNoMinimum count for a facet value to be included. Range: min 1. Default: 1.
facet.rangestringNoCount articles within date or numeric intervals. One of: 0, 1.
facet.range.endstringNoEnd value for range faceting (required with facet.range).
facet.range.fieldstringNoField 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.gapstringNoSize of each interval. Use a time span for dates, such as +1DAY, or a number for numeric fields. Default: +1DAY.
facet.range.startstringNoStart 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.

bash
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"
python
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())
javascript
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);
php
$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);
go
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)
}
java
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());
    }
}
text
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 ​

ParameterTypeRequiredDescription
hlstringNoEnable highlighting. One of: 0, 1.
hl.flstringNoComma-separated fields to highlight (max 5). Values: title, description, body. Default: title,description. Example: title,description.
hl.fragsizeintegerNoSize of highlighted fragment in characters (50-500). Range: 50–500. Default: 150.
hl.snippetsintegerNoNumber of highlighted snippets per field (max 10). Range: 1–10. Default: 3.
hl.tag.poststringNoClosing tag for highlighted text. Default: </em>.
hl.tag.prestringNoOpening tag for highlighted text. Default: <em>.
searchstringNoList 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.

bash
curl "https://api.apitube.io/v1/cyber-security/news?title=%22data%20breach%22&hl=1&hl.fl=title%2Cdescription&api_key=YOUR_API_KEY"
python
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())
javascript
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);
php
$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);
go
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)
}
java
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());
    }
}
text
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 ​

ParameterTypeRequiredDescription
flstringNoComma-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.

bash
curl "https://api.apitube.io/v1/cyber-security/news?title=%22remote%20code%20execution%22&fl=id%2Ctitle%2Chref%2Ccyber&api_key=YOUR_API_KEY"
python
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())
javascript
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);
php
$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);
go
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)
}
java
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());
    }
}
text
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 ​

ParameterTypeRequiredDescription
exportstringNoExport format. One of: json, csv, tsv, xml, rss, xlsx, parquet, jsonl, ndjson.

Request and debug ​

ParameterTypeRequiredDescription
debugstringNoInclude 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 of published_at. A wider range returns 400 ER0110; without a range the last 31 days are searched.
  • Multi-value filters keep the first 3 values (source.domain, language.code, category.id, *.name filters) or the first 5 (event.type). Extra values are dropped without an error.
  • location.name must match a known location entity. Check the spelling with /v1/suggest/entities; an unknown name returns 400 ER0218.
  • prompt requires 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:

  • fl returns only the listed fields. cyber returns the whole block; cyber.cves or cyber.in_kev return a single field of it. Example: fl=id,title,href,cyber.cves,cyber.in_kev.
  • facet=1 with facet.field counts values across all matching cyber articles, not only the current page. For ransomware coverage by publisher, combine title=ransomware with facet=1&facet.field=source.id.
  • facet.range=1 counts matching articles within intervals, such as days. The ransomware example above groups reports by publication day; the counts do not represent distinct attacks.
  • hl=1 marks the terms from title (and extra terms from search) in the title and description, and returns the fragments in highlighting.