Corpus Analytics
These endpoints aggregate across the entities you can see, rather than returning a single entity. They are intended for dashboards and situational awareness surfaces — a threat overview, a triage feed, and origin attribution.
All three respect your security groups: aggregates and counts are computed only over entities you are permitted to read, so two callers with different group memberships will legitimately see different totals.
Base URL: https://apis.threatwinds.com/api/analytics/v1
Common headers
| Header | Type | Required | Description |
|---|---|---|---|
| Authorization | string | Optional | Bearer token from an active session. Authentication is optional but improves rate limits. |
| api-key | string | Optional | API key. Authentication is optional but improves rate limits. |
| api-secret | string | Optional | API secret. Authentication is optional but improves rate limits. |
Overview
Returns a situational snapshot of the corpus: totals, malicious share, composition by type, reputation, accuracy and tags, plus a daily ingest timeline.
Endpoint: GET /overview
Query Parameters
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
| days | int | No | 30 | Days of history for the timeline (1–365). |
Example
curl -H "Authorization: Bearer $TOKEN" \
"https://apis.threatwinds.com/api/analytics/v1/overview?days=14"
Response
{
"total_entities": 129482,
"malicious_count": 4671,
"malicious_share": 0.036,
"tracked_types": 9,
"by_type": [
{ "key": "ip", "count": 48210 },
{ "key": "domain", "count": 31904 }
],
"by_reputation": [
{ "key": "-1", "count": 3820 },
{ "key": "0", "count": 124811 }
],
"by_accuracy": [
{ "key": "1", "count": 118402 }
],
"top_tags": [
{ "key": "c2", "count": 612 }
],
"timeline": [
{ "timestamp": "2026-07-26T00:00:00.000Z", "count": 312 }
],
"window": { "days": 14, "interval": "day" }
}
malicious_share is malicious_count / total_entities, where malicious means a negative reputation score. Reputation runs -3..+3 and accuracy 0..3.
Recent Activity
Returns entities observed within a time window, newest first. This is the triage feed: by default it returns only entities with negative reputation.
Endpoint: GET /recent
Query Parameters
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
| hours | int | No | 24 | Hours of history (1–720). |
| limit | int | No | 50 | Maximum entities to return (1–100). |
| malicious_only | bool | No | true | Restrict to negative reputation. Pass false for all activity. |
Example
curl -H "Authorization: Bearer $TOKEN" \
"https://apis.threatwinds.com/api/analytics/v1/recent?hours=6&limit=25"
Response
{
"items": [
{
"id": "ip-ad0c2ed9a0a9b23822e5907b0d009bcaf8f969db793cd1d94c40e17e0287c04b",
"type": "ip",
"value": "203.0.113.10",
"reputation": -3,
"reputation_label": "Alarming",
"accuracy": 1,
"accuracy_label": "Imprecise",
"tags": ["c2"],
"first_seen": "2026-07-27T16:37:50.530Z",
"last_seen": "2026-07-27T16:37:51.543Z"
}
],
"window": { "hours": 6, "since": "2026-07-27T13:00:00Z" }
}
Attribution
Aggregates entities by geographic and network origin — country, ASN and autonomous system organisation.
Endpoint: GET /attribution
Query Parameters
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
| size | int | No | 20 | Buckets returned per dimension (1–100). |
| malicious_only | bool | No | true | Restrict to negative reputation. |
Example
curl -H "Authorization: Bearer $TOKEN" \
"https://apis.threatwinds.com/api/analytics/v1/attribution?size=10"
Response
{
"by_country": [{ "key": "United States", "count": 1840 }],
"by_asn": [{ "key": "15169", "count": 622 }],
"by_aso": [{ "key": "GOOGLE-AS-15169", "count": 622 }],
"malicious_only": true
}
Rate Limits
These endpoints aggregate across the whole index, so they share the heavier entity_relations allowance rather than the cheaper entity-details one.
| Tier | Requests per minute (each endpoint) |
|---|---|
| Public / Free | 30 |
| Pro | 75 |
| Business | 150 |
| Business Max | 300 |
| Enterprise | 300 |
| Enterprise Max | 600 |
Error Codes
| Status Code | Description | Possible Cause |
|---|---|---|
| 401 | Unauthorized | Invalid authentication credentials |
| 429 | Too Many Requests | Rate limit exceeded for your tier |
| 500 | Internal Server Error | Aggregation failed |