Threat intelligence API

Incidents, CVEs, threat actors, IOCs and leak-site victims over REST. Every account gets a key. Free is 100 credits a day, no card.

OpenAPI reference

Quick start

  1. Create a key

    Settings, then API & Feeds, then Generate API key. Scopes come from your plan: a free key gets the five read scopes. The key is shown once, so copy it into your environment. New here? Get started walks the first call in your own stack.

    export TC_KEY=tc_live_...
  2. Make a call

    Send the key as X-API-Key. Base URL https://threatcluster.io/api/public/v1. No OAuth, nothing to install.

    curl -H "X-API-Key: $TC_KEY" \
      "https://threatcluster.io/api/public/v1/search?q=lockbit"

    Search answers in three buckets. Every response says what the call cost, and keys with a daily budget also get what is left and when it resets.

    HTTP/1.1 200
    X-Request-Cost: 5
    X-RateLimit-Remaining: 95
    
    {
      "query": "lockbit",
      "total": 14,
      "clusters": [ { "cluster_id": "…", "ai_title": "…", "threat_score": 78.5, "urgency_level": "high" } ],
      "entities": [ { "entity_type": "ransomware_group", "entity_value": "LockBit", "cluster_count": 212 } ],
      "darkweb":  [ { "type": "victim", "name": "…", "date": "2026-09-01" } ],
      "tier": "free", "lookback_days": 7
    }
  3. Pick the endpoint for the job

    A cluster id from search goes straight into the detail, IOC and STIX endpoints. The rest of the surface is below.

Try it

The same request, sent from this page. Signed in, it runs on your own key and budget across every GET endpoint in the spec. Not signed in, a demo key covers the threats endpoints. The snippets use $THREATCLUSTER_API_KEY; your key is never put in a URL or in this browser's storage. For a guided first call in your own stack, curl, Python, Node, an MCP client, an editor, a SIEM or the CLI, use Get started.

What to call

70+ endpoints, every one in the reference. A free key reads the first five groups; feeds, alerts, webhooks and Ask AI need Researcher; company monitoring needs Analyst. Every account-state endpoint has list, update, delete and test, so a SIEM or SOAR can run its monitoring end to end without the web UI. Costs are in credits.

You wantCallCost
Everything about a nameGET /search?q=5
What is trending nowGET /threats?time_filter=24h1
One incident, its IOCs, as STIXGET /threats/{id} · /iocs · /stix1 · 1 · 3
A blocklist for the firewall or SIEMGET /iocs/feed · /iocs/export3
An actor, malware family, vendor or CVEGET /entities/{type}/{value}1
Exploited CVEs, by vendor or severityGET /vulnerabilities1
Who a ransomware group hitGET /darkweb/ransomware/victims1
A victim record with screenshotsGET /darkweb/ransomware/victim/{id}10
A cited answer about one incidentPOST /threats/{id}/ask25
A cited answer across the whole corpusPOST /ask50
How many credits you have leftGET /me0
A feed built from your stack, typedPOST /feeds · /feeds/{id}/entities1, Starter and up
Only what is new since your last pollGET /threats?since= · /feed?since=1
A rule that fires when your vendors are named/alert-rules · /cve-alerts · /webhooks1, Starter and up
What fired, and a dry run before it doesGET /alerts?since= · POST /alert-rules/{id}/test1
Your domains and suppliers on the leak sites/monitoring/company · /monitoring/company/threats1 · 3, Analyst and up
The attack flow behind an incident or CVEGET /threats/{id}/attack-flow · /vulnerabilities/{cve}/attack-flow3, Starter and up
A countermeasure, an exploit, an entity's profileGET /d3fend/{id} · /vulnerabilities/{cve}/exploits · /entities/{type}/{value}/summary1
Managed customers and per-client feeds/mssp/customers1, Business

Ask AI answers are grounded in the cluster's own reporting and carry inline citation tags that map to the returned sources; a failed model call refunds the credits. GET /me returns your tier, credits used and left today, pack balance and the reset time, and costs nothing. A request that finds nothing costs nothing either: empty searches and 404 lookups refund their credits. Credits do not unlock scopes. A free key calling /feeds gets 403 insufficient_scope, however many credits it has.

By data

One page per data set, each with its endpoints, a request and what a free key gets:

  • Free threat intelligence API: what the free key reads, and where the seven-day line is
  • Dark web API: ransomware leak-site listings from ThreatCluster's own collection
  • IOC API: validated indicators per incident or as a feed, in JSON, CSV and STIX
  • CVE API: EPSS, KEV and exploitation reporting in one record
  • Threat actor API: APT groups, ransomware operators and malware profiles
  • API reference: every endpoint, generated from the OpenAPI document

Credits and limits

PlanBudgetRateHistoryRecords
Free100 credits a day30 a minuteLast 7 daysTrimmed, 25-row lists
Researcher1,000 credits a day120 a minuteAllFull, plus feeds and alerts
BusinessNo daily budget600 a minuteAllFull, plus managed-customer scopes

Past the daily budget, one-off credit packs cover the overage on any plan: $10 for 2,000 credits, $50 for 12,000. They never expire and are spent only after the day's allowance. Packs and per-request costs.

What a free key leaves out

Anything older than seven days: a request for it returns 403 with "error": "lookback_exceeded". On a cluster, the enhanced summary, sub-scores, severity reasoning and article text. On an entity, the recent-events history. Secondary lists stop at ten rows. Free responses say so: "tier": "free", "lookback_days": 7.

Keys and upgrades

One personal key per account, and it does not expire. Generating a new one revokes the old. Scopes are fixed when the key is created, so after an upgrade generate a new key to pick up the feeds, alerts or managed-customer scopes. Need least privilege for an agent or a CI job? Agent keys under CLI and agents let you pick scopes and mint short-lived bearer tokens.

Formats

JSON on every endpoint. Also:

  • STIX 2.1 per cluster: report, indicators and inferred relationships, TLP-marked, for OpenCTI or any STIX-aware TIP
  • Text and CSV on the IOC endpoints, for a blocklist or a SIEM lookup table with no parsing
  • MISP and RSS on the public feeds, no key needed
  • Markdown of any cluster or entity page: append .md to its URL, for LLM context

Errors

StatusMeaningDo
401Missing or bad keyCheck the X-API-Key header
403Scope or window: the body names whichMint a key with the scope, or upgrade for history
429Over budget or rateWait for Retry-After; buy a pack if it is daily

/v1 does not change shape. Breaking changes go to /v2.

Clients and integrations

The Cyber-Threat-Intelligence-API repository has a daily snapshot of the OpenAPI document, a small Python client with retries and paging, and runnable examples in curl, Python and Node.

# Python, using the client from the repo
from tc_api import ThreatCluster
tc = ThreatCluster()                                # reads TC_KEY
for t in tc.threats(time_filter="24h", limit=10):
    print(t["threat_score"], t["ai_title"])

The tc command line wraps the same API with keyring auth and JSON output, and an agent can call it as a tool. The MCP server (npx -y threatcluster-mcp) puts the same API into Claude Desktop, Claude Code, Cursor and VS Code as ten tools. Step-by-step guides for Splunk, Sentinel, Elastic, Claude, OpenAI, Cursor and the terminal are under Integrations. Postman, Insomnia and any OpenAPI generator import the spec directly.

API FAQ

Is the API free?

Yes. Every account, Free included, can mint a read-only key for threats, IOCs, entities, vulnerabilities and dark web. Free keys spend 100 credits a day, read the last seven days and get trimmed records. Paid plans remove the window and the trimming and raise the budget.

How do I authenticate?

Create a key in Settings and send it as an X-API-Key header. Keys carry scopes. Each endpoint declares the scope it needs and returns 403 with the scope name if the key does not have it.

Is there an OpenAPI specification?

Yes, at /api/public/v1/openapi.json, with Swagger UI and ReDoc views, and a public Postman collection you can fork with the Run in Postman button above. A daily snapshot and client examples are in the Cyber-Threat-Intelligence-API repository.

How fresh is it?

Clusters form within minutes of the first credible report and indicators are validated on ingest, so time_filter=1h is usable. The dark web endpoints update as the leak sites post.

Why not scrape the site instead?

The pages render the same records as /threats and /entities, wrapped in markup that changes whenever the site does, with scores drawn as bars and no STIX. The API is the one that is versioned.

Can I redistribute the data?

The public feeds are TLP:CLEAR and can be redistributed with attribution. Keyed API responses are for your own tooling and internal use. Embedding them in a product you sell needs a Business agreement. Talk to us.

Get a key and make a request

Free account, read-only key, 100 credits a day. Upgrade when you need the history.

OpenAPI reference