Skip to content

Track Data Breaches and Lawsuits

Use the event.type filter to pull only articles about detected corporate events. Three of them chain into a security incident timeline: data-breach for the disclosure, lawsuit for the class actions that follow, and regulatory-action for the fines.

Step 1: Pull the breach feed

event.type accepts up to 5 comma-separated values with OR logic. Start with breaches alone, newest first.

bash
curl "https://api.apitube.io/v1/news/everything?event.type=data-breach&sort.by=published_at&sort.order=desc&per_page=20&api_key=YOUR_API_KEY"
python
import requests

response = requests.get(
    "https://api.apitube.io/v1/news/everything",
    params={
        "event.type": "data-breach",
        "sort.by": "published_at",
        "sort.order": "desc",
        "per_page": "20",
        "api_key": "YOUR_API_KEY",
    },
)
print(response.json())
javascript
const params = new URLSearchParams({ "event.type": "data-breach", "sort.by": "published_at", "sort.order": "desc", "per_page": "20", "api_key": "YOUR_API_KEY" });
const response = await fetch(`https://api.apitube.io/v1/news/everything?${params}`);
const data = await response.json();
console.log(data);
php
$query = http_build_query(["event.type" => "data-breach", "sort.by" => "published_at", "sort.order" => "desc", "per_page" => "20", "api_key" => "YOUR_API_KEY"]);
$response = file_get_contents("https://api.apitube.io/v1/news/everything?$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/news/everything")
	q := u.Query()
	q.Set("event.type", "data-breach")
	q.Set("sort.by", "published_at")
	q.Set("sort.order", "desc")
	q.Set("per_page", "20")
	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/news/everything?event.type=data-breach&sort.by=published_at&sort.order=desc&per_page=20&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 News API:

GET https://api.apitube.io/v1/news/everything?event.type=data-breach&sort.by=published_at&sort.order=desc&per_page=20

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/news-api/parameters
  • Who was hitentities, filtered to the organization entries.
  • What sectorindustries, each with an id and a readable name.
  • How serious the coverage treats itsentiment.overall.score and is_breaking.
  • Where to read ithref plus source.domain.

The event classifier decides which articles carry data-breach; the label itself is not returned on the article object, so treat the filter as the signal.

Step 2: Scope it to your sector or your vendors

Add industry.id to watch one sector, or organization.name to watch a specific company. Both narrow the same feed.

bash
curl "https://api.apitube.io/v1/news/everything?event.type=data-breach,lawsuit,regulatory-action&industry.id=1180&published_at.start=2026-01-01&per_page=20&api_key=YOUR_API_KEY"
python
import requests

response = requests.get(
    "https://api.apitube.io/v1/news/everything",
    params={
        "event.type": "data-breach,lawsuit,regulatory-action",
        "industry.id": "1180",
        "published_at.start": "2026-01-01",
        "per_page": "20",
        "api_key": "YOUR_API_KEY",
    },
)
print(response.json())
javascript
const params = new URLSearchParams({ "event.type": "data-breach,lawsuit,regulatory-action", "industry.id": "1180", "published_at.start": "2026-01-01", "per_page": "20", "api_key": "YOUR_API_KEY" });
const response = await fetch(`https://api.apitube.io/v1/news/everything?${params}`);
const data = await response.json();
console.log(data);
php
$query = http_build_query(["event.type" => "data-breach,lawsuit,regulatory-action", "industry.id" => "1180", "published_at.start" => "2026-01-01", "per_page" => "20", "api_key" => "YOUR_API_KEY"]);
$response = file_get_contents("https://api.apitube.io/v1/news/everything?$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/news/everything")
	q := u.Query()
	q.Set("event.type", "data-breach,lawsuit,regulatory-action")
	q.Set("industry.id", "1180")
	q.Set("published_at.start", "2026-01-01")
	q.Set("per_page", "20")
	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/news/everything?event.type=data-breach,lawsuit,regulatory-action&industry.id=1180&published_at.start=2026-01-01&per_page=20&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 News API:

GET https://api.apitube.io/v1/news/everything?event.type=data-breach,lawsuit,regulatory-action&industry.id=1180&published_at.start=2026-01-01&per_page=20

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/news-api/parameters

Industry IDs are numeric — look yours up in the industry list, or resolve one from free text with /v1/suggest/industries. Up to 3 industries can be combined with commas.

Step 3: Size the wave before you read it

/v1/news/count returns just a number, so you can compare event types and time windows cheaply — one request each, no article payloads.

bash
curl "https://api.apitube.io/v1/news/count?event.type=data-breach&published_at.start=2026-07-01&api_key=YOUR_API_KEY"
python
import requests

response = requests.get(
    "https://api.apitube.io/v1/news/count",
    params={
        "event.type": "data-breach",
        "published_at.start": "2026-07-01",
        "api_key": "YOUR_API_KEY",
    },
)
print(response.json())
javascript
const params = new URLSearchParams({ "event.type": "data-breach", "published_at.start": "2026-07-01", "api_key": "YOUR_API_KEY" });
const response = await fetch(`https://api.apitube.io/v1/news/count?${params}`);
const data = await response.json();
console.log(data);
php
$query = http_build_query(["event.type" => "data-breach", "published_at.start" => "2026-07-01", "api_key" => "YOUR_API_KEY"]);
$response = file_get_contents("https://api.apitube.io/v1/news/count?$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/news/count")
	q := u.Query()
	q.Set("event.type", "data-breach")
	q.Set("published_at.start", "2026-07-01")
	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/news/count?event.type=data-breach&published_at.start=2026-07-01&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 News API:

GET https://api.apitube.io/v1/news/count?event.type=data-breach&published_at.start=2026-07-01

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/news-api/parameters

Run the same count for lawsuit and regulatory-action over the following months and you have the shape of the aftermath: disclosure spikes first, litigation coverage builds over weeks, enforcement lands last.

python
import requests

EVENTS = ["data-breach", "lawsuit", "regulatory-action"]

def aftermath(company, api_key, since="2026-01-01"):
    out = {}
    for event in EVENTS:
        r = requests.get(
            "https://api.apitube.io/v1/news/count",
            params={
                "event.type": event,
                "organization.name": company,
                "published_at.start": since,
                "api_key": api_key,
            },
        ).json()
        out[event] = r["count"]
    return out

Tip: ignore.event.type works the same way. Watching breaches but drowning in routine compliance coverage? Keep event.type=data-breach and add ignore.event.type=earnings,partnership to strip the corporate noise.