Fetch stats
curl -H "Authorization: Bearer sk_live_..." \
"https://socdefenders.ai/api/v1/iocs/stats"import requests
url = "https://socdefenders.ai/api/v1/iocs/stats"
headers = {"X-API-Key": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'X-API-Key': '<api-key>'}};
fetch('https://socdefenders.ai/api/v1/iocs/stats', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://socdefenders.ai/api/v1/iocs/stats",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"X-API-Key: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://socdefenders.ai/api/v1/iocs/stats"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("X-API-Key", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://socdefenders.ai/api/v1/iocs/stats")
.header("X-API-Key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://socdefenders.ai/api/v1/iocs/stats")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["X-API-Key"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"meta": {
"generated_at": "2026-05-17T10:30:00Z",
"cache_updated_at": "2026-05-17T10:25:00Z",
"cache_age_seconds": 300,
"feed_version": "1.0",
"source": "SOC Defenders"
},
"data": {
"totalIOCs": 1351663,
"totalArticles": 21121,
"byType": {
"ipv4": 423891,
"ipv6": 12450,
"domain": 287654,
"url": 198432,
"sha256": 234812,
"md5": 89345,
"sha1": 67234,
"email": 23456,
"cve": 5611,
"mitre_attack": 8778
},
"bySource": {
"URLhaus": 412908,
"Feodo Tracker": 234567,
"ThreatFox": 198765,
"BleepingComputer": 56789,
"Krebs on Security": 23456
},
"byCategory": {
"threat-intel": 891234,
"news": 234561,
"research": 145678,
"vendor": 56781,
"government": 23409
},
"last24h": {
"newIOCs": 18432,
"newArticles": 287,
"byType": {
"ipv4": 5432,
"domain": 4321,
"sha256": 3210,
"url": 2876
}
},
"last7d": {
"newIOCs": 134567,
"newArticles": 2034,
"trend": [
18234,
19102,
17654,
21345,
18432,
19876,
19924
]
},
"feedHealth": {
"total": 84,
"healthy": 78,
"degraded": 4,
"error": 2
},
"topMitreTechniques": [
{
"id": "T1566",
"count": 1234
},
{
"id": "T1059",
"count": 987
},
{
"id": "T1190",
"count": 845
}
],
"topCVEs": [
{
"id": "CVE-2026-12345",
"count": 234
},
{
"id": "CVE-2026-9999",
"count": 187
}
],
"lastUpdated": "2026-05-17T10:25:00Z"
}
}{
"error": {
"code": "missing_api_key",
"message": "API key is required. Include it in the Authorization header as \"Bearer sk_live_...\"",
"request_id": "req_abc123"
}
}{
"error": {
"code": "insufficient_scope",
"message": "This endpoint requires the \"read:stix\" scope",
"details": {
"required_scope": "read:stix",
"your_scopes": [
"read:iocs"
],
"upgrade_url": "https://socdefenders.ai/export#pricing"
},
"request_id": "req_abc123"
}
}{
"error": {
"code": "rate_limit_exceeded",
"message": "Rate limit exceeded. Please wait before making more requests.",
"details": {
"limit": 10,
"reset_at": "2024-12-09T10:31:00Z",
"tier": "free",
"upgrade_url": "https://socdefenders.ai/export#pricing"
},
"request_id": "req_abc123"
}
}Statistics
Aggregated IOC statistics and trends
Pre-computed aggregations over the entire IOC corpus. Backed by the iocs_stats_cache table (refreshed every 10 minutes via pg_cron) — sub-millisecond response time.
What you get
- Total IOC count and total article count
- Breakdown by IOC type (ipv4, domain, hash, etc.)
- Breakdown by source feed
- Breakdown by category (news, research, threat-intel, vendor, government)
- Last 24h and last 7d trend
- Feed health (healthy / degraded / error)
- Top MITRE ATT&CK techniques
- Top CVEs
Use cases
- Dashboard tiles: “23,541 indicators ingested in the last 24h”
- Trend charts: 7-day rolling counts for sparklines
- Coverage analysis: which sources contribute most volume
- Health monitoring: detect when a feed stops producing IOCs
Cache headers
Response includes:
X-Cache-Updated-At: when the cache was last refreshedX-Cache-Age-Seconds: how stale the data is (max ~600s)X-Cache-Stale: trueif pg_cron missed its window
GET
/
api
/
v1
/
iocs
/
stats
Fetch stats
curl -H "Authorization: Bearer sk_live_..." \
"https://socdefenders.ai/api/v1/iocs/stats"import requests
url = "https://socdefenders.ai/api/v1/iocs/stats"
headers = {"X-API-Key": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'X-API-Key': '<api-key>'}};
fetch('https://socdefenders.ai/api/v1/iocs/stats', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://socdefenders.ai/api/v1/iocs/stats",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"X-API-Key: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://socdefenders.ai/api/v1/iocs/stats"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("X-API-Key", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://socdefenders.ai/api/v1/iocs/stats")
.header("X-API-Key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://socdefenders.ai/api/v1/iocs/stats")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["X-API-Key"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"meta": {
"generated_at": "2026-05-17T10:30:00Z",
"cache_updated_at": "2026-05-17T10:25:00Z",
"cache_age_seconds": 300,
"feed_version": "1.0",
"source": "SOC Defenders"
},
"data": {
"totalIOCs": 1351663,
"totalArticles": 21121,
"byType": {
"ipv4": 423891,
"ipv6": 12450,
"domain": 287654,
"url": 198432,
"sha256": 234812,
"md5": 89345,
"sha1": 67234,
"email": 23456,
"cve": 5611,
"mitre_attack": 8778
},
"bySource": {
"URLhaus": 412908,
"Feodo Tracker": 234567,
"ThreatFox": 198765,
"BleepingComputer": 56789,
"Krebs on Security": 23456
},
"byCategory": {
"threat-intel": 891234,
"news": 234561,
"research": 145678,
"vendor": 56781,
"government": 23409
},
"last24h": {
"newIOCs": 18432,
"newArticles": 287,
"byType": {
"ipv4": 5432,
"domain": 4321,
"sha256": 3210,
"url": 2876
}
},
"last7d": {
"newIOCs": 134567,
"newArticles": 2034,
"trend": [
18234,
19102,
17654,
21345,
18432,
19876,
19924
]
},
"feedHealth": {
"total": 84,
"healthy": 78,
"degraded": 4,
"error": 2
},
"topMitreTechniques": [
{
"id": "T1566",
"count": 1234
},
{
"id": "T1059",
"count": 987
},
{
"id": "T1190",
"count": 845
}
],
"topCVEs": [
{
"id": "CVE-2026-12345",
"count": 234
},
{
"id": "CVE-2026-9999",
"count": 187
}
],
"lastUpdated": "2026-05-17T10:25:00Z"
}
}{
"error": {
"code": "missing_api_key",
"message": "API key is required. Include it in the Authorization header as \"Bearer sk_live_...\"",
"request_id": "req_abc123"
}
}{
"error": {
"code": "insufficient_scope",
"message": "This endpoint requires the \"read:stix\" scope",
"details": {
"required_scope": "read:stix",
"your_scopes": [
"read:iocs"
],
"upgrade_url": "https://socdefenders.ai/export#pricing"
},
"request_id": "req_abc123"
}
}{
"error": {
"code": "rate_limit_exceeded",
"message": "Rate limit exceeded. Please wait before making more requests.",
"details": {
"limit": 10,
"reset_at": "2024-12-09T10:31:00Z",
"tier": "free",
"upgrade_url": "https://socdefenders.ai/export#pricing"
},
"request_id": "req_abc123"
}
}⌘I