Skip to content

API Docs

Changelog

Recent Updates

2026/7/11 New

📣 Be sure to follow @DarkWebInformer on X for any and all updates.

Three new endpoints are now available.

Actor Profile - a one-call aggregated view of any threat actor across DWI datasets: alert totals with first/last seen, top breakdowns by category, victim country, victim industry, and network, a 90-day activity timeline, the most recent alerts, and the ransomware angle - matching known ransomware groups plus victim-leak statistics. Actor matching is case-insensitive substring, so lockbit also matches lockbit3 and lockbit5.

IOC Point Lookup - O(1) exact-match lookup of a single indicator against DWI's IOC index, built for SOAR/SIEM enrichment pipelines. Accepts MD5/SHA-1/SHA-256 hashes, IPv4/IPv6, domains, URLs, and emails. Defanged input (hxxp://, evil[.]com, user[at]host) is refanged automatically, so indicators can be pasted straight from reports. The index rebuilds on a schedule; each response includes freshness metadata.

API Key Status - self-service introspection for your API key: status, plan, scopes, expiry, and live quota state (daily and per-minute buckets). This endpoint does not consume your daily quota and stays reachable even when the quota is exhausted, so it can be polled freely by clients and dashboards.

GET /api/actor/profile?actor=lockbit&recent_limit=10
GET /api/ioc/lookup?value=evil[.]example[.]com
GET /api/key/status

NOTE: All three endpoints are available in the API Sandbox and Swagger docs. Actor Profile supports recent_limit (up to 50) and ransomware=0 for a faster feed-only response. IOC Lookup returns index.built_at so you always know how fresh the index is - indicators newer than the last build return found: false until the next rebuild.

GET /api/actor/profile GET /api/ioc/lookup GET /api/key/status Actor Profile IOC Account

2026/6/30 Update

New customers will receive a free upgrade to the Elite subscription. Current customers will receive 30 days added to their current subscription.

Subscription Elite Upgrade 30 Days Added

2026/5/29 New

🚀 More endpoints are being added in the coming weeks. Stay tuned.
📣 Be sure to follow @DarkWebInformer on X for any and all updates.

STIX 2.1 endpoints are now available under STIX 2.1 Exports. Threat intel can now be retrieved as STIX 2.1 bundles for direct ingestion into TIP and SIEM platforms that support the standard. Production exports are server-generated, with enriched Dark Web Informer source fields preserved as x_dwi_* custom properties. Separate bundles are available for the full combined dataset, the threat feed, ransomware, and IOCs, plus a status endpoint and a small on-demand preview.

GET /api/stix/export.json
GET /api/stix/export_feed.json
GET /api/stix/export_ransomware.json
GET /api/stix/export_iocs.json
GET /api/stix/status
GET /api/stix.json

NOTE: The four /stix/export*.json endpoints return the complete production bundles; /stix.json is a capped on-demand preview of the same object graph. Use /stix/status for generation time, object counts, file sizes, and SHA-256 hashes. Recommended validation: stix2_validator --version 2.1 --disable 103,111,215,302,401 --verbose file.json.

GET /api/stix/export.json GET /api/stix/export_feed.json GET /api/stix/export_ransomware.json GET /api/stix/export_iocs.json GET /api/stix/status GET /api/stix.json STIX 2.1 Exports STIX 2.1

2026/5/18 Update

The API daily request limit has been increased from 50 requests per day to 150 requests per day. An optional add-on is available for customers who need higher limits.

API Limits 150 Requests/Day Add-on Available

2026/5/16 Update

As of Saturday, May 16, Threat Feed screenshots will contain a DWI watermark. This is being added due to users tracking, reposting, and using DWI images without attribution or a commercial license. This has always been subject to change at Dark Web Informer's discretion via the API subscription page. If you would like to use a non-watermarked image you can purchase an add-on.

NOTE: All use of Threat Feed screenshots remains subject to the Terms of Service, including restrictions on redistribution, removal of attribution, and unauthorized commercial use.

On Monday, May 18, the API request limit will be increased. Stay tuned to this changelog or @DarkWebInformer on X for updates.

Threat Feed Screenshots Watermark API Limits

2026/5/14 Update

Ransomware screenshots in API responses are now served via time-limited signed URLs. Screenshot URLs returned by the Ransomware feed and export endpoints are valid for 3 days and are refreshed on every API call. This is the same method that the threat feed has always had. No changes are required on your end, URLs are automatically included in all ransomware endpoints and exports.

NOTE: This replaces the previous ?key=your-api-key hotlinking method. You no longer need to append your API key to image URLs, which keeps your key out of browser history, referer headers, and logs. Signed URLs work in browsers, dashboards, and scripts. For long-term storage, download images on your end rather than hotlinking. All use of screenshots remains subject to the Terms of Service.

Signed Screenshot URLs Ransomware API

2026/5/3 New

🚀 More endpoints are being added in the coming weeks. Stay tuned.
📣 Be sure to follow @DarkWebInformer on X for any and all updates.

New endpoint available under Compromise Check. Get a unified verdict on whether a domain or organization has been compromised, synthesized across four intel sources: DWI ransomware victim leaks, DWI threat feed alerts, WhiteIntel stealer-log exposure, and the Have I Been Pwned (HIBP) public breach catalogue. Each source is queried independently, so a partial outage doesn't block the others.

GET /api/check_compromise?domain=acme.com
GET /api/check_compromise?org=Acme%20Corp

NOTE: The response includes a verdict object with a confidence rating (none, medium, high) based on how many sources matched. HIBP is queried only for domain-based lookups.

GET /api/check_compromise Compromise Check HIBP WhiteIntel

2026/5/3 New

🚀 More endpoints are being added in the coming weeks. Stay tuned.
📣 Be sure to follow @DarkWebInformer on X for any and all updates.

New endpoint available under IOC → Retrieval. Get ransomware IOCs by group for 200+ actively tracked ransomware groups, aggregated from multiple sources. Call without parameters to retrieve an index of all available groups with last-updated timestamps, or pass ?group=NAME to fetch IOCs for a specific group (BTC addresses, file hashes, domains, IPs, and more, depending on the group).

GET /api/get_ransomware_iocs
GET /api/get_ransomware_iocs?group=akira

NOTE: The endpoint is also available in the API Sandbox with a searchable group selector that auto-populates from the live index. Counts and group lists update automatically as new groups are tracked.

GET /api/get_ransomware_iocs IOC Ransomware

2026/3/22 Update

Threat feed screenshots are now served from DWI infrastructure via time-limited signed URLs. Screenshot URLs in API responses are valid for 3 days and are refreshed with each API call. No changes are required on your end, URLs are automatically included in all feed endpoints and exports.

NOTE: Signed screenshot URLs expire after 7 days and are refreshed with each API call. For long-term storage, download and store images on your end rather than hotlinking. All use of screenshots remains subject to the Terms of Service, including restrictions on redistribution, removal of attribution, and unauthorized commercial use.

Signed Screenshot URLs Threat Feed API

2026/2/16 Superseded

API consumers can now hotlink ransomware screenshots directly by appending ?key=your-api-key to any image URL returned in the Ransomware feed/export. This allows embedding threat intel screenshots in dashboards, reports, and external tools without downloading them first.

https://dwi.darkwebinformer.com/dwi/screenshots/insomnia/Copier%20Careers.png?key=your-api-key

SUPERSEDED: This hotlinking method has been replaced by signed URLs. See today's update at the top for details. The ?key= method still works for backwards compatibility, but signed URLs are the recommended approach going forward.

Image URLs + ?key= Ransomware API

2026/1/22

Added 277 new alerts to the threat feeds under the Cyber Attack category, primarily consisting of news articles covering recent cyber attacks.

Cyber Attack 277 Alerts

2025/12/06

New export endpoint available under IOC → Exports. Provides a full IOC history export in JSON format. Recommended to use scripts to download, the file is very large.

GET /api/ioc/full JSON

2025/11/25

New export endpoint available under News → Exports. Provides cybersecurity news in NDJSON format, aggregated from 9 trusted cybersecurity news sources. Additional sources will be added gradually.

GET /api/export_news_latest.jsonl NDJSON

By using this API, you agree to the Terms of Service, the Privacy Policy, and the Acceptable Use Policy.

Endpoint

Method GET Content-Type application/json / application/stix+json
Daily quota: 150 requests (reset at 00:00 UTC) Rate: 5 key/min · 5 IP/min Exports: 2/min CSV cap: ~99 MB Nonce window: 120s

Modes

Compromise Check

  • /api/check_compromise?domain=... - Check a domain across ransomware leaks, threat feed, stealer logs, and the HIBP breach catalogue
  • /api/check_compromise?org=... - Check an organization name across ransomware leaks and threat feed

Actor Profile

  • /api/actor/profile?actor=NAME - Aggregated threat-actor profile: alert totals, first/last seen, category/country/industry breakdowns, 90-day timeline, recent alerts, and ransomware group + victim stats (actor or name/q, recent_limit, ransomware=0 to skip ransomware section)

Threat Feed - Retrieval

  • /api/get_latest - Get latest alert
  • /api/get_recent - Get recent alerts
  • /api/get_recent_alerts_by_actor - Get alerts by threat actor (supports hours, limit)
  • /api/get_alert - Get single alert by ID, UUID, or hash
  • /api/get_alerts_since - Get alerts since timestamp (since or timestamp)
  • /api/get_messages - Get full raw feed Deprecated
    New ransomware posts are no longer added to this endpoint, please use the dedicated ransomware endpoints instead.
  • /api/get_messages_plus - Get capped raw feed (excluding ransomware)

Ransomware - Retrieval

  • /api/get_ransomware - Get merged ransomware feed
  • /api/get_ransomware_by_group - Get ransomware by group (supports group/name, q, year, days, from, to, full, limit)

IOC - Retrieval

  • /api/ioc/history - Get IOC history (supports days, hours, since/from/to, q, type, source, confidence_min, offset)
  • /api/ioc/lookup?value=INDICATOR - Point lookup of a single indicator (hash, IP, domain, URL, or email) against the IOC index (defanged input like hxxp:// and [.] is accepted; value or indicator/q)
  • /api/get_ransomware_iocs - List ransomware groups with IOC data
  • /api/get_ransomware_iocs?group=NAME - Get IOCs for a specific ransomware group (group or name)

Threat Feed - Search

  • /api/search - Search feed (query or q, limit)

Ransomware - Stats & Lists

  • /api/get_ransomware_stats - Get ransomware stats (supports days, from/to, group/name, q, limit)
  • /api/get_ransomware_groups - List ransomware groups (supports q, group/name, limit)

IOC - Exports

  • /api/ioc/export.json - Export IOC JSON
  • /api/ioc/export.csv - Export IOC CSV
  • /api/ioc/full - Export full IOC JSON

Threat Feed - Stats & Lists

  • /api/get_stats - Get feed stats
  • /api/get_stats/threat_actors - Get threat actor counts
  • /api/get_threat_actors/top - Get top threat actors
  • /api/get_stats/categories - Get category counts
  • /api/get_categories - List categories
  • /api/get_stats/countries - Get country counts
  • /api/get_countries - List victim countries
  • /api/get_titles - List titles
  • /api/get_industry - List industries
  • /api/get_networks - List networks
  • /api/get_threat_actors - List threat actors
  • /api/get_victim_organization - List victim organizations

Ransomware - Exports

  • /api/export_ransomware.json - Export ransomware feed JSON
  • /api/export_groups.json - Export ransomware groups JSON

News - Exports

  • /api/export_news_latest.jsonl - Export latest news documents (NDJSON)

Threat Feed - Exports

  • /api/export_feed.json - Export threat feed JSON
  • /api/export_feed.csv - Export threat feed CSV

STIX 2.1 - Prebuilt Exports

  • /api/stix/status - Export metadata, object counts, sizes, hashes, and generation timestamp
  • /api/stix/export.json - Full combined STIX 2.1 bundle (threat feed + ransomware + IOCs)
  • /api/stix/export_feed.json - Full threat feed STIX 2.1 bundle
  • /api/stix/export_ransomware.json - Full ransomware STIX 2.1 bundle
  • /api/stix/export_iocs.json - Full IOC STIX 2.1 bundle

Account

  • /api/key/status - API key status, scopes, expiry, and live quota state (does not consume the daily quota; reachable even when the quota is exhausted)

STIX 2.1 - Small Preview

  • /api/stix.json?source=all - Small on-demand preview of all STIX sources
  • /api/stix.json?source=feed - Small threat feed STIX preview
  • /api/stix.json?source=ransomware - Small ransomware STIX preview
  • /api/stix.json?source=iocs - Small IOC STIX preview

STIX 2.1 Exports

Use the prebuilt /api/stix/export*.json endpoints for production integrations. These files are generated server-side, written to R2, and streamed through the authenticated API.

Production exports

  • /api/stix/export.json - full combined STIX bundle: threat feed + ransomware + IOCs
  • /api/stix/export_feed.json - full threat feed STIX bundle
  • /api/stix/export_ransomware.json - full ransomware STIX bundle
  • /api/stix/export_iocs.json - full IOC STIX bundle
  • /api/stix/status - generation time, object counts, file sizes, SHA-256 hashes, and source record counts

Preview endpoint

/api/stix.json?source=all|feed|ransomware|iocs&limit=10 is a small on-demand preview endpoint. It returns the same STIX object graph as the production exports (the same object types, relationships, and x_dwi_* fields), so it is safe to build and test ingestion logic against. It differs only in volume: results are capped by limit (and may be truncated relative to the full dataset). Use the prebuilt /api/stix/export*.json endpoints for complete production ingestion.

Custom STIX properties

Bundles contain these STIX 2.1 object types: identity, threat-actor, intrusion-set, malware, campaign, indicator, report, note, and relationship (e.g. targets, indicates, related-to). Not every object type appears for every record; objects are emitted only when the source data supports them.

Dark Web Informer source fields are preserved using the x_dwi_* namespace. Which fields appear depends on the source and record type: forum and actor fields are present only on forum-sourced records, IOC fields only on IOC exports, and ransomware fields only on ransomware exports. Absent values are omitted rather than emitted as null or "Unknown", so a field being present means it holds real data.

Record fields (on report / threat-actor objects)

  • x_dwi_uuid
  • x_dwi_title
  • x_dwi_category
  • x_dwi_date
  • x_dwi_content
  • x_dwi_network
  • x_dwi_source
  • x_dwi_published_url
  • x_dwi_threat_actors
  • x_dwi_screenshots

Victim fields (on report objects, and the bare forms on victim identity objects)

  • x_dwi_victim_organization
  • x_dwi_victim_site
  • x_dwi_victim_country
  • x_dwi_victim_industry
  • x_dwi_victim_website
  • x_dwi_website
  • x_dwi_domain
  • x_dwi_organization
  • x_dwi_site
  • x_dwi_country
  • x_dwi_industry

Forum & actor fields (forum-sourced records only)

  • x_dwi_forum
  • x_dwi_forum_code
  • x_dwi_forum_domain
  • x_dwi_board
  • x_dwi_data_type
  • x_dwi_actor
  • x_dwi_actor_rank
  • x_dwi_actor_posts
  • x_dwi_actor_joined
  • x_dwi_actor_points
  • x_dwi_actor_reaction_score

Source-specific fields (IOC and ransomware exports only)

  • x_dwi_ioc_value
  • x_dwi_ioc_type
  • x_dwi_post_url
  • x_dwi_malware

The raw upstream fields for each record are also preserved verbatim under x_dwi_source_fields.

Bundle-level metadata. The bundle root carries export metadata in the same x_dwi_* namespace. Use x_dwi_truncated together with the record counts to detect a capped preview and switch to the full /api/stix/export*.json endpoints for complete ingestion.

  • x_dwi_generated_at
  • x_dwi_object_count
  • x_dwi_sources
  • x_dwi_source_record_counts
  • x_dwi_source_record_totals
  • x_dwi_truncated
  • x_dwi_raw_included
  • x_dwi_diagnostics

Signed screenshot URLs are included on STIX reports in external_references with source_name values such as dwi-screenshot, dwi-screenshot-2, and dwi-screenshot-3. Screenshot URLs are signed and time-limited.

Because x_dwi_* fields are STIX custom properties, strict validators should allow custom properties. The production exports parse successfully with the Python stix2 parser using allow_custom=True.

Recommended validation command

The production STIX exports are generated with empty arrays removed and invalid external-reference URLs encoded or dropped before upload. For customer-side validation with the OASIS stix2_validator, use this command to keep schema validation on while suppressing known non-fatal warning noise for deterministic UUIDs, open-vocabulary formatting, source URL hashes, and custom x_dwi_* fields:

stix2_validator --version 2.1 --disable 103,111,215,302,401 --verbose file.json

This still performs JSON schema validation. If the command returns [+] STIX JSON: Valid, the bundle is ready for ingestion testing.

API Sandbox

Send authenticated requests, inspect rate-limit headers, and copy a curl command.

Large response possibleThis endpoint can return a large payload. The sandbox will preview the first 100 KB only; use Copy or a direct/download request for the full response.

Ready

Response

No response yet.

Headers


            

curl


            

Client code

Python

import time, secrets, string, requests, json

API_BASE = "https://api.darkwebinformer.com"
API_KEY  = "YOUR_API_KEY"
ALPHABET = string.ascii_letters + string.digits + "-"

def make_nonce():
    return f"{int(time.time())}:{''.join(secrets.choice(ALPHABET) for _ in range(12))}"

def get(endpoint, params=None, accept="application/json"):
    url = f"{API_BASE}{endpoint}"
    headers = {
        "X-API-Key": API_KEY,
        "X-Nonce": make_nonce(),
        "Accept": accept,
    }
    r = requests.get(url, headers=headers, params=params, timeout=30)
    r.raise_for_status()
    if accept == "text/csv":
        print(r.text)
    else:
        print(json.dumps(r.json(), indent=2))

if __name__ == "__main__":
    get("/api/get_stats")

JavaScript

const API_BASE = "https://api.darkwebinformer.com";
const API_KEY  = "YOUR_API_KEY";

function makeNonce() {
  const ts = Math.floor(Date.now() / 1000);
  const hex = Array.from(crypto.getRandomValues(new Uint8Array(8)))
    .map(b => b.toString(16).padStart(2, "0")).join("");
  return `${ts}:${hex}`;
}

async function get(endpoint) {
  const res = await fetch(`${API_BASE}${endpoint}`, {
    headers: {
      "X-API-Key": API_KEY,
      "X-Nonce":   makeNonce(),
      "Accept":    "application/json",
    },
  });
  if (!res.ok) throw new Error(`HTTP ${res.status}`);
  return res.json();
}

get("/api/get_stats").then(d => console.log(d));

curl

NONCE="$(date +%s):$(openssl rand -hex 8)"
curl -s -D - \
  'https://api.darkwebinformer.com/api/get_stats' \
  -H 'Accept: application/json' \
  -H "X-API-Key: YOUR_API_KEY" \
  -H "X-Nonce: $NONCE"

STIX download and validation examples

Large STIX exports should be downloaded directly with curl instead of copied from the sandbox preview. The sandbox displays only the first 100 KB for very large responses.

Status metadata

NONCE="$(date +%s):$(openssl rand -hex 8)"

curl -sS \
  --url "https://api.darkwebinformer.com/api/stix/status" \
  --header "Accept: application/json" \
  --header "X-API-Key: YOUR_API_KEY" \
  --header "X-Nonce: ${NONCE}"

Combined bundle export

NONCE="$(date +%s):$(openssl rand -hex 8)"

curl -sS \
  --url "https://api.darkwebinformer.com/api/stix/export.json" \
  --header "Accept: application/stix+json" \
  --header "X-API-Key: YOUR_API_KEY" \
  --header "X-Nonce: ${NONCE}" \
  --output "dwi-stix-bundle.json"

Threat feed export

NONCE="$(date +%s):$(openssl rand -hex 8)"

curl -sS \
  --url "https://api.darkwebinformer.com/api/stix/export_feed.json" \
  --header "Accept: application/stix+json" \
  --header "X-API-Key: YOUR_API_KEY" \
  --header "X-Nonce: ${NONCE}" \
  --output "dwi-stix-feed.json"

Ransomware export

NONCE="$(date +%s):$(openssl rand -hex 8)"

curl -sS \
  --url "https://api.darkwebinformer.com/api/stix/export_ransomware.json" \
  --header "Accept: application/stix+json" \
  --header "X-API-Key: YOUR_API_KEY" \
  --header "X-Nonce: ${NONCE}" \
  --output "dwi-stix-ransomware.json"

IOC export

NONCE="$(date +%s):$(openssl rand -hex 8)"

curl -sS \
  --url "https://api.darkwebinformer.com/api/stix/export_iocs.json" \
  --header "Accept: application/stix+json" \
  --header "X-API-Key: YOUR_API_KEY" \
  --header "X-Nonce: ${NONCE}" \
  --output "dwi-stix-iocs.json"

Validate downloaded STIX

stix2_validator --version 2.1 --disable 103,111,215,302,401 --verbose dwi-stix-bundle.json

Errors

HTTPCodeWhen
400 nonce_invalid / bad_request / ua_required Missing or malformed nonce; invalid params; missing User-Agent
401 unauthorized Missing/invalid API key, or inactive/expired
403 cors_origin / forbidden Origin not allow-listed or scope denied
404 not_found Unknown endpoint or missing prebuilt export object
405 method_not_allowed HTTP method not supported for this path
409 nonce_expired / nonce_replay Nonce outside window or already used
415 accept_not_supported Unsupported Accept for the requested resource
429 rate_ip / rate_key / rate_daily / rate_export / rate_upstream / rate_mint Per-minute, daily, export, upstream, or nonce-mint limit reached
500 internal Unexpected server error (includes upstream failures in this build)
429 retry guidance

Wait 60-70 seconds before retrying. Export and upstream-heavy endpoints use separate minute buckets, so a standard API request may work while an export or upstream-heavy request is still cooling down.