Search the Dakidarts network
InsightThe Numerology APIAPIHealthHeFit APIAPIContentQuoteverseAPIFinanceCalcX Investment APIAPIFinanceCalcX Loan Calculator APIAPISearchSearch Query Autocomplete APIAPIHealthPregnancy Calculator APIAPIIdentityChecky — Verify Phone Number APIAPIIdentityChecky Email Verification APIAPILanguageLinguify Language Detector APIAPIDataCountries Info APIAPISecurityIP Reputation Checker APIAPISecurityMalware & Phishing URL Scanner APIAPISecurityDark Web Exposure APIAPISecurityEncryption & Hashing Utility APIAPISecurityDevice Fingerprint & Bot Detection APIAPISecuritySSL/TLS Security Analyzer APIAPISecurityFile Hash Analyzer APIAPISecuritySQL Injection / XSS Payload Detector APIAPISecurityNetwork Packet Threat Analyzer APIAPITimeEthiopian Calendar APIAPIDataCreator Sponsorship Intelligence APIAPICommerceE-commerce Product & Price Intelligence APIAPICompanyFrom API Catalog to Product Platform: The Dakidarts DirectionJournalProductGetting Started with Dakidarts Numerology WordPress PluginJournalResearchMirror Numbers and Cycles: Extensions in Numerological AnalysisJournalResearchHidden Passion Position Number & Gap ResonanceJournalBotHow to Use Quoteverse369bot on TelegramJournalEngineeringPHP 8.4 JIT in Real Workloads: Where It Helps — and Where It Does NotJournalAstrologyDecode the Cosmos: Why Horoscopes Still Matter in the Age of AIJournalAstrologyHoroscope ≠ Hype: Understanding the Real Power of Celestial PatternsJournalAstrologyYou're Not Just Your Sun Sign: How to Read a Full HoroscopeJournalAstrologyHow Horoscopes Sync With Numerology for Deeper Life GuidanceJournalAPIDecoding Words with Numbers: Using the Gematria API in Python for Hidden InsightsJournalAPIYour Celestial Blueprint: How to Generate a Full Birth Chart Using the Numerology APIJournalAstrologyYearly Horoscope Trends: What Each Sign Can Expect Spiritually & PracticallyJournalAstrologyRetrogrades & Romance: When to Reconnect or Release in LoveJournalAPIHow to Integrate the Dakidarts Numerology API into Your Website or Mobile AppJournalAPIWhat Is a Numerology API? A Practical Tool for Apps and Spiritual ProductsJournalEngineeringHow to Build a Telegram Bot Using PythonJournalLegalTerms of ServiceLegalLegalPrivacy PolicyLegalLegalAPI Terms of ServiceLegalLegalBilling, Credits & Subscription PolicyLegalLegalSecurity, Compliance & Cookie PolicyLegalLegalDisclaimer, Medical & Spiritual DisclaimerLegalProductHeFit APIHFProductNumerology APINUProductNumora StudioNSProductOpAstroOAProductNumerologyBotNBProductNumerology Core for WordPressWPProductNoteMeAppPageHomeSitePageAboutSitePageDeveloper API documentationSitePageJournalSitePageChangelogSitePageContactSitePageLegal & Trust CenterSitePageEcosystemSitePageEnterpriseSitePageAPI CatalogSitePageNumerology Core for WordPressSitePageSearchSitePageServicesSitePageShopSitePageSystem StatusSitePageNumora StudioSitePageSupportSitePageTrustSiteServiceWeb DevelopmentServiceServiceGraphics DesignServiceServiceDigital MarketingServiceServiceCloud ServicesServiceServiceSoftware DevelopmentServiceServiceAPI Development & IntegrationServiceServiceAI & AutomationServiceServiceTechnical SEOService
← API network SECURITY / BREACH / EXPOSURE / CREDENTIALS
Direct Platform 0.0.2 / General Availability api.dakidarts.comDirect gateway

Dark Web Exposure API

Have I Been Pwned and Pwned Passwords exposure checks for passwords, email/username identifiers, breach catalogs and paste data, with cached lookups and password k-anonymity.

Direct PlatformDA
api.dakidarts.com0.0.2General Availability25ms p9514 documented endpoints
DIRECT NATIVE API

Call Dark Web Exposure API through the Dakidarts gateway.

0 of 14 endpoints have an upstream URL configured. Other routes return 503 before billing; only send live requests to configured routes. The gateway injects upstream credentials for you.

Live checkout opens after an API route has an upstream URL. Preview examples are available below.

Base URLhttps://api.dakidarts.com/dark-web-exposure
AuthenticationX-API-Key: dk_live_...
Default reference pathGET /password
Commercial modelPay-as-you-go / $0.0050 per call
01 / ACCESS

One key, one gateway

Use a Dakidarts API key with read or write scopes and control which APIs that key can reach.

02 / BILLING

Metered by the call

Wallet credits, plan quotas and organization invoices are settled per request with transparent response headers.

03 / RELIABILITY

Observable by default

Latency, upstream status and execution mode are logged so integration issues are visible before they spread.

RAPIDAPI SPOTLIGHTRapidAPI Marketplace

Also available through RapidAPI.

Keep the direct Dakidarts gateway as your primary route, or use the RapidAPI listing when marketplace billing and key management fit your stack better.

View on RapidAPI Plans, keys and usage stay inside RapidAPI.
CAPABILITIES

Built to disappear into the product.

The best API is the one your team can integrate, observe and then stop thinking about.

01

Check passwords without sending the full hash upstream

Designed as a composable building block for product teams, internal tooling and automation.

02

Scan email, username or domain identifiers where supported

Designed as a composable building block for product teams, internal tooling and automation.

03

Browse breach catalogs, data classes and exposure statistics

Designed as a composable building block for product teams, internal tooling and automation.

PLATFORM FACTS

The shape of the surface.

Selected facts about coverage, delivery and production readiness.

01Pwned Passwords lookups use five-character SHA-1 prefixes
02Password batches support up to 100 items
03Some identity and paste scans require an HIBP API key
FAQ

Answers before you integrate.

Access, billing and integration details for Dark Web Exposure API.

What does the Dark Web Exposure API look for? +

Credential and breach exposure signals associated with an identifier.

Which identifiers can I check? +

Email addresses and similar identifiers supported by the endpoint.

Does it expose raw breach data? +

No. It returns exposure signals without exposing sensitive records.

Is it suitable for compliance workflows? +

It supports risk review, but your legal and compliance teams should define how results are used.

How do I get access? +

Subscribe on the Dakidarts dashboard, then call the gateway with an API key.

SUBSCRIPTION PLANS

Choose a quota that matches the workload.

Plans are shown for reference. Live checkout opens after an API route has an upstream URL.

WALLET-ACCESS

Pay-as-you-go access

$0.00 / month

  • Wallet credits per call
  • $0.0050 / call overage
  • 120 req/min
INTEGRATION PATH

From first request to production.

Start with a Dakidarts key, call the gateway, then monitor usage from the dashboard.

01

Create a Dakidarts key

Choose the API scope, then copy the key into your server environment.

02

Call the gateway

Send requests to https://api.dakidarts.com/dark-web-exposure with your key and JSON body.

03

Watch usage

Track calls, latency and spend from the API dashboard and wallet.

ENDPOINT REFERENCE

Endpoint reference & metered costs.

These routes include contracts imported from the product implementation. 0 of 14 endpoints have an upstream URL configured. Other routes return 503 before billing; saved examples are previews only. Configure an upstream URL in API Studio to enable those routes.

GROUP / 01

Operations

Operations endpoints sourced from the Dark Web Exposure API implementation.

1 endpoint
GET /status Health SOURCE CONTRACT — UPSTREAM NEEDED $0.0050 / call / 120 rpm Upstream needed

Health check + service info. No parameters.

Snapshot from docs/endpoints.md for source API version 0.0.2. This is source documentation, not evidence that an upstream is deployed.

GET /status

Health check + service info. No parameters.

Response 200

{
  "ok": true,
  "service": "Dark Web Exposure API",
  "version": "0.0.2",
  "time": "2026-08-09T07:23:06.000900",
  "uptime_seconds": 1234,
  "hibp_key_configured": true,
  "cache": {
    "scanned_identifiers": 312,
    "password_hashes": 4091,
    "hash_prefixes": 87,
    "catalog_entries": 14
  }
}
FieldMeaning
hibp_key_configuredWhether the server set HIBP_API_KEY
cache.*Row counts in the SQLite cache tables

Source contract imported from dark web exposure/app.py. Handler: health. Reference: docs/endpoints.md.

SAMPLE RESPONSE
{
  "ok": true,
  "time": "2026-08-09T07:23:06.000900",
  "cache": {
    "hash_prefixes": 87,
    "catalog_entries": 14,
    "password_hashes": 4091,
    "scanned_identifiers": 312
  },
  "service": "Dark Web Exposure API",
  "version": "0.0.2",
  "uptime_seconds": 1234,
  "hibp_key_configured": true
}
QUICK CURL
curl -X GET https://api.dakidarts.com/dark-web-exposure/status -H 'X-API-Key: dk_live_...' -H 'Accept: application/json'
GROUP / 02

Cryptography

Cryptography endpoints sourced from the Dark Web Exposure API implementation.

2 endpoints
GET /password Check Password SOURCE CONTRACT — UPSTREAM NEEDED $0.0050 / call / 120 rpm Upstream needed

Breach count for a single password (or pre-computed SHA-1). Cached 90 days.

Snapshot from docs/endpoints.md for source API version 0.0.2. This is source documentation, not evidence that an upstream is deployed.

GET|POST /password

Breach count for a single password (or pre-computed SHA-1). Cached 90 days.

GET — query params:

ParamTypeRequiredMeaning
passwordstringeitherThe plaintext password to check
sha1_hashstringeither40-hex uppercase/lowercase SHA-1
include_hashbooleannoAlso return the uppercase SHA-1

POST — JSON body:

{ "password": "testing 123", "include_hash": true }

include_hash defaults to false. If both password and sha1_hash are given, password wins. Never pass both to avoid ambiguity.

Response 200

{
  "ok": true,
  "breach_count": 33,
  "breached": true,
  "cached": false,
  "checked_at": "2026-08-09T07:23:10.235727",
  "sha1_hash": "B8DFB080BC33FB564249E34252BF143D88FC018F"
}
FieldMeaning
breach_countHow many times the password appears in breach dumps
breachedbreach_count > 0
cachedtrue = served from SQLite, no upstream call
sha1_hashOnly present when include_hash: true

Errors: missing_input 400, password_too_long 400, invalid_hash 400.

Security note: GET /password?password=... places the password in the URL where

it may be logged by proxies. Prefer POST for plaintext.

Source contract imported from dark web exposure/app.py. Handler: check_password. Reference: docs/endpoints.md.

PARAMETERS
NameInTypeRequiredDescription
passwordquerystringNoThe plaintext password to check
sha1_hashquerystringNo40-hex uppercase/lowercase SHA-1
include_hashquerybooleanNoAlso return the uppercase SHA-1
QUICK CURL
curl -X GET https://api.dakidarts.com/dark-web-exposure/password -H 'X-API-Key: dk_live_...' -H 'Accept: application/json'
POST /password Check Password SOURCE CONTRACT — UPSTREAM NEEDED $0.0050 / call / 120 rpm Upstream needed

Breach count for a single password (or pre-computed SHA-1). Cached 90 days.

Snapshot from docs/endpoints.md for source API version 0.0.2. This is source documentation, not evidence that an upstream is deployed.

GET|POST /password

Breach count for a single password (or pre-computed SHA-1). Cached 90 days.

GET — query params:

ParamTypeRequiredMeaning
passwordstringeitherThe plaintext password to check
sha1_hashstringeither40-hex uppercase/lowercase SHA-1
include_hashbooleannoAlso return the uppercase SHA-1

POST — JSON body:

{ "password": "testing 123", "include_hash": true }

include_hash defaults to false. If both password and sha1_hash are given, password wins. Never pass both to avoid ambiguity.

Response 200

{
  "ok": true,
  "breach_count": 33,
  "breached": true,
  "cached": false,
  "checked_at": "2026-08-09T07:23:10.235727",
  "sha1_hash": "B8DFB080BC33FB564249E34252BF143D88FC018F"
}
FieldMeaning
breach_countHow many times the password appears in breach dumps
breachedbreach_count > 0
cachedtrue = served from SQLite, no upstream call
sha1_hashOnly present when include_hash: true

Errors: missing_input 400, password_too_long 400, invalid_hash 400.

Security note: GET /password?password=... places the password in the URL where

it may be logged by proxies. Prefer POST for plaintext.

Source contract imported from dark web exposure/app.py. Handler: check_password. Reference: docs/endpoints.md.

PARAMETERS
NameInTypeRequiredDescription
passwordbodystringNoThe plaintext password to check
sha1_hashbodystringNo40-hex uppercase/lowercase SHA-1
include_hashbodybooleanNoAlso return the uppercase SHA-1
SAMPLE RESPONSE
{
  "ok": true,
  "cached": false,
  "breached": true,
  "sha1_hash": "B8DFB080BC33FB564249E34252BF143D88FC018F",
  "checked_at": "2026-08-09T07:23:10.235727",
  "breach_count": 33
}
QUICK CURL
curl -X POST https://api.dakidarts.com/dark-web-exposure/password -H 'X-API-Key: dk_live_...' -H 'Accept: application/json' -H 'Content-Type: application/json' -d '{"password": "example", "sha1_hash": "example", "include_hash": "example"}'
GROUP / 03

Batch operations

Batch operations endpoints sourced from the Dark Web Exposure API implementation.

2 endpoints
POST /passwords/batch Check Passwords Batch SOURCE CONTRACT — UPSTREAM NEEDED $0.0050 / call / 120 rpm Upstream needed

Breach counts for up to **100** passwords in one request. Uses k-anonymity: passwords are grouped by SHA-1 prefix, each unique prefix is fetched from HIBP once, and counts are resolved locally — the full hash never leaves your server.

Snapshot from docs/endpoints.md for source API version 0.0.2. This is source documentation, not evidence that an upstream is deployed.

POST /passwords/batch

Breach counts for up to 100 passwords in one request. Uses k-anonymity: passwords are grouped by SHA-1 prefix, each unique prefix is fetched from HIBP once, and counts are resolved locally — the full hash never leaves your server.

Body

{
  "passwords": ["password", "testing 123", "uniquepass_9x3z7q2"],
  "include_hashes": true
}
FieldTypeRequiredMeaning
passwordsarrayyes1–100 strings, max 1024 chars each
include_hashesbooleannoInclude each password's SHA-1

Response 200

{
  "ok": true,
  "results": [
    { "index": 0, "breach_count": 52372427, "breached": true, "sha1_hash": "5BAA61E4C9B93F3F0682250B6CF8331B7EE68FD8" },
    { "index": 1, "breach_count": 33, "breached": true, "sha1_hash": "B8DFB080BC33FB564249E34252BF143D88FC018F" },
    { "index": 2, "breach_count": 0, "breached": false, "sha1_hash": "1E14F1610264EE9A05F26E0B59D2BC9732DEE8B9" }
  ],
  "total": 3,
  "upstream_calls": 2
}

results mirrors the input order; index is the position in passwords. upstream_calls reports how many actual HIBP requests were needed (helps you see cache efficiency).

Errors: missing_input 400, batch_too_large 400, invalid_input 400, password_too_long 400.

Source contract imported from dark web exposure/app.py. Handler: check_passwords_batch. Reference: docs/endpoints.md.

PARAMETERS
NameInTypeRequiredDescription
passwordsbodyarrayYes1–100 strings, max 1024 chars each
include_hashesbodybooleanNoInclude each password's SHA-1
SAMPLE RESPONSE
{
  "ok": true,
  "total": 3,
  "results": [
    {
      "index": 0,
      "breached": true,
      "sha1_hash": "5BAA61E4C9B93F3F0682250B6CF8331B7EE68FD8",
      "breach_count": 52372427
    },
    {
      "index": 1,
      "breached": true,
      "sha1_hash": "B8DFB080BC33FB564249E34252BF143D88FC018F",
      "breach_count": 33
    },
    {
      "index": 2,
      "breached": false,
      "sha1_hash": "1E14F1610264EE9A05F26E0B59D2BC9732DEE8B9",
      "breach_count": 0
    }
  ],
  "upstream_calls": 2
}
QUICK CURL
curl -X POST https://api.dakidarts.com/dark-web-exposure/passwords/batch -H 'X-API-Key: dk_live_...' -H 'Accept: application/json' -H 'Content-Type: application/json' -d '{"passwords": "example", "include_hashes": "example"}'
POST /scan/batch Scan Batch SOURCE CONTRACT — UPSTREAM NEEDED $0.0050 / call / 120 rpm Upstream needed

Breach scans for up to **25** identifiers in one request. Results are returned per-identifier; one bad identifier does not fail the batch — it gets an `error` entry. Uncached identifiers are throttled at `SCAN_THROTTLE` (default 1.5 s, HIBP's rate limit), so a fully-uncached batch takes ~38 s max.

Snapshot from docs/endpoints.md for source API version 0.0.2. This is source documentation, not evidence that an upstream is deployed.

POST /scan/batch

Breach scans for up to 25 identifiers in one request. Results are returned per-identifier; one bad identifier does not fail the batch — it gets an error entry. Uncached identifiers are throttled at SCAN_THROTTLE (default 1.5 s, HIBP's rate limit), so a fully-uncached batch takes ~38 s max.

Body

{
  "identifiers": ["[email protected]", "[email protected]", "adobe.com"],
  "include_pastes": true
}
FieldTypeRequiredMeaning
identifiersarrayyes1–25 strings (emails, usernames, domains)
include_hashesbooleannoInclude password_hash/hash_alg in findings
include_pastesbooleannoInclude pastebin exposure for email/username items

Response 200

{
  "ok": true,
  "results": [
    { "index": 0, "input": { "type": "email", "value": "[email protected]" },
      "breach_status": "exposed", "breach_count": 3, "sources": ["Adobe", "LinkedIn"],
      "findings": [ { "name": "Adobe", "..." : "..." } ], "pastes": [ ],
      "cached": false, "checked_at": "2026-08-09T07:30:00.000000" },
    { "index": 1, "input": { "value": "[email protected]" },
      "error": { "code": "hibp_key_required", "message": "HIBP_API_KEY env var is not set; account scans are unavailable." } },
    { "index": 2, "input": { "type": "domain", "value": "adobe.com" },
      "breach_status": "exposed", "breach_count": 5, "sources": ["Adobe"], "findings": [ ], "pastes": null,
      "cached": true, "checked_at": "2026-08-09T07:30:00.000000" }
  ],
  "total": 3,
  "upstream_calls": 2
}

Each results entry is the same shape as a single /scan response, or an error object when that identifier failed. upstream_calls reports how many HIBP requests were actually made.

Errors: missing_input 400, batch_too_large 400, invalid_input 400.

In production, gunicorn is configured with --timeout 120 so slow uncached

batches complete without being killed (see deployment.md).

Handler compatibility: The POST handler also accepts hibp_api_key as a query parameter; prefer the X-HIBP-API-Key header because query strings may be logged.

Source contract imported from dark web exposure/app.py. Handler: scan_batch. Reference: docs/endpoints.md.

PARAMETERS
NameInTypeRequiredDescription
identifiersbodyarrayYes1–25 strings (emails, usernames, domains)
include_hashesbodybooleanNoInclude `password_hash`/`hash_alg` in findings
include_pastesbodybooleanNoInclude pastebin exposure for email/username items
X-HIBP-API-KeyheaderstringNoOptional Have I Been Pwned API key for premium breach/paste access.
hibp_api_keyquerystringNoCompatibility fallback for the Have I Been Pwned key; prefer the X-HIBP-API-Key header to avoid exposing credentials in URLs.
QUICK CURL
curl -X POST https://api.dakidarts.com/dark-web-exposure/scan/batch -H 'X-API-Key: dk_live_...' -H 'Accept: application/json' -H 'X-HIBP-API-Key: YOUR_X_HIBP_API_KEY' -H 'Content-Type: application/json' -d '{"identifiers": "example", "include_hashes": "example", "include_pastes": "example"}'
GROUP / 04

Passwords

Passwords endpoints sourced from the Dark Web Exposure API implementation.

1 endpoint
GET /passwords/range Password Range SOURCE CONTRACT — UPSTREAM NEEDED $0.0050 / call / 120 rpm Upstream needed

k-anonymity search: given a 5-character SHA-1 prefix, returns every matching hash suffix and its breach count. Enables clients to check passwords **without sending them** or their full hash.

Snapshot from docs/endpoints.md for source API version 0.0.2. This is source documentation, not evidence that an upstream is deployed.

GET /passwords/range

k-anonymity search: given a 5-character SHA-1 prefix, returns every matching hash suffix and its breach count. Enables clients to check passwords **without sending them** or their full hash.

Query params (provide exactly one):

ParamTypeMeaning
prefixstring5 hex chars, e.g. B8DFB
hashstring40-hex SHA-1; the first 5 chars are used

Response 200

{
  "ok": true,
  "prefix": "B8DFB",
  "suffixes": {
    "0026A114E9A357BFB0D38916287208E2B81": 46,
    "00878CA72A19BDAED187D554A45B5C46011": 8
  },
  "suffix_count": 1957,
  "cached": true
}
  • suffixes — map of the remaining 35 hash chars → breach count.
  • A client checks a password locally: compute SHA-1, take hash[5:], look it up

in suffixes. 0 or missing means not breached.

Errors: invalid_hash 400, invalid_prefix 400.

Input rule: Supply either a five-character prefix or a full 40-character hash; the source derives the prefix from the hash.

Source contract imported from dark web exposure/app.py. Handler: password_range. Reference: docs/endpoints.md.

PARAMETERS
NameInTypeRequiredDescription
prefixquerystringNo5 hex chars, e.g. `B8DFB`
hashquerystringNo40-hex SHA-1; the first 5 chars are used
SAMPLE RESPONSE
{
  "ok": true,
  "cached": true,
  "prefix": "B8DFB",
  "suffixes": {
    "0026A114E9A357BFB0D38916287208E2B81": 46,
    "00878CA72A19BDAED187D554A45B5C46011": 8
  },
  "suffix_count": 1957
}
QUICK CURL
curl -X GET https://api.dakidarts.com/dark-web-exposure/passwords/range -H 'X-API-Key: dk_live_...' -H 'Accept: application/json'
GROUP / 05

Analysis

Analysis endpoints sourced from the Dark Web Exposure API implementation.

2 endpoints
GET /scan Scan SOURCE CONTRACT — UPSTREAM NEEDED $0.0050 / call / 120 rpm Upstream needed

Breach scan for an **email**, **username**, or **domain**. Cached 90 days per identifier. Legacy params `email`/`username`/`domain` are also accepted in the POST body for backward compatibility.

Snapshot from docs/endpoints.md for source API version 0.0.2. This is source documentation, not evidence that an upstream is deployed.

GET|POST /scan

Breach scan for an email, username, or domain. Cached 90 days per identifier. Legacy params email/username/domain are also accepted in the POST body for backward compatibility.

GET — query params:

ParamTypeRequiredMeaning
identifierstringyesemail, username, or domain
include_hashesbooleannoReturn password_hash/hash_alg fields
include_pastesbooleannoAlso return pastebin exposure (email/username only)

POST — JSON body:

{ "identifier": "[email protected]", "include_pastes": true }

Type detection: [email protected] → email; example.com / sub.example.com → domain; alice_doe → username.

Response 200 (domain scan)

{
  "ok": true,
  "input": { "type": "domain", "value": "adobe.com" },
  "breach_status": "exposed",
  "breach_count": 5,
  "sources": ["Adobe", "Adobe Creative Cloud"],
  "findings": [
    {
      "name": "Adobe",
      "title": "Adobe",
      "domain": "adobe.com",
      "first_seen": "2013-10-04",
      "added_date": "2013-10-04T00:00:00Z",
      "last_seen": "2013-10-04T00:00:00Z",
      "pwn_count": 152445165,
      "description": "In October 2013, 153 million Adobe accounts...",
      "data_classes": ["Email addresses", "Password hints", "Passwords"],
      "is_verified": true,
      "is_fabricated": false,
      "is_sensitive": false,
      "is_retired": false,
      "is_spam_list": false,
      "is_malware": false
    }
  ],
  "pastes": null,
  "cached": false,
  "checked_at": "2026-08-09T07:30:00.000000"
}
FieldMeaning
breach_statusexposed, safe (email/username found nothing), or not_found (domain not in breach catalog)
breach_countNumber of breach sources
sourcesShort list of breach names
findingsFull breach records (see fields above)
pastesnull unless include_pastes; then an array of paste records

Without include_hashes, findings entries omit password_hash/hash_alg. (HIBP does not currently return password hashes in account responses; these fields exist for forward compatibility.)

Errors: missing_identifier 400, invalid_identifier 400, hibp_key_required 503, hibp_rate_limited 429, hibp_error/upstream_error 502.

The HIBP key is only required for email/username scans. Domain scans use

the public breach catalog.

Handler compatibility: The POST handler also accepts hibp_api_key as a query parameter; prefer the X-HIBP-API-Key header because query strings may be logged.

POST input rule: Supply one of identifier, email, username, or domain; the latter three are legacy alternatives.

Source contract imported from dark web exposure/app.py. Handler: scan. Reference: docs/endpoints.md.

PARAMETERS
NameInTypeRequiredDescription
identifierquerystringYesemail, username, or domain
include_hashesquerybooleanNoReturn `password_hash`/`hash_alg` fields
include_pastesquerybooleanNoAlso return pastebin exposure (email/username only)
X-HIBP-API-KeyheaderstringNoOptional Have I Been Pwned API key for premium breach/paste access.
hibp_api_keyquerystringNoOptional Have I Been Pwned API key supplied as a query parameter.
QUICK CURL
curl -X GET https://api.dakidarts.com/dark-web-exposure/scan -H 'X-API-Key: dk_live_...' -H 'Accept: application/json' -H 'X-HIBP-API-Key: YOUR_X_HIBP_API_KEY'
POST /scan Scan SOURCE CONTRACT — UPSTREAM NEEDED $0.0050 / call / 120 rpm Upstream needed

Breach scan for an **email**, **username**, or **domain**. Cached 90 days per identifier. Legacy params `email`/`username`/`domain` are also accepted in the POST body for backward compatibility.

Snapshot from docs/endpoints.md for source API version 0.0.2. This is source documentation, not evidence that an upstream is deployed.

GET|POST /scan

Breach scan for an email, username, or domain. Cached 90 days per identifier. Legacy params email/username/domain are also accepted in the POST body for backward compatibility.

GET — query params:

ParamTypeRequiredMeaning
identifierstringyesemail, username, or domain
include_hashesbooleannoReturn password_hash/hash_alg fields
include_pastesbooleannoAlso return pastebin exposure (email/username only)

POST — JSON body:

{ "identifier": "[email protected]", "include_pastes": true }

Type detection: [email protected] → email; example.com / sub.example.com → domain; alice_doe → username.

Response 200 (domain scan)

{
  "ok": true,
  "input": { "type": "domain", "value": "adobe.com" },
  "breach_status": "exposed",
  "breach_count": 5,
  "sources": ["Adobe", "Adobe Creative Cloud"],
  "findings": [
    {
      "name": "Adobe",
      "title": "Adobe",
      "domain": "adobe.com",
      "first_seen": "2013-10-04",
      "added_date": "2013-10-04T00:00:00Z",
      "last_seen": "2013-10-04T00:00:00Z",
      "pwn_count": 152445165,
      "description": "In October 2013, 153 million Adobe accounts...",
      "data_classes": ["Email addresses", "Password hints", "Passwords"],
      "is_verified": true,
      "is_fabricated": false,
      "is_sensitive": false,
      "is_retired": false,
      "is_spam_list": false,
      "is_malware": false
    }
  ],
  "pastes": null,
  "cached": false,
  "checked_at": "2026-08-09T07:30:00.000000"
}
FieldMeaning
breach_statusexposed, safe (email/username found nothing), or not_found (domain not in breach catalog)
breach_countNumber of breach sources
sourcesShort list of breach names
findingsFull breach records (see fields above)
pastesnull unless include_pastes; then an array of paste records

Without include_hashes, findings entries omit password_hash/hash_alg. (HIBP does not currently return password hashes in account responses; these fields exist for forward compatibility.)

Errors: missing_identifier 400, invalid_identifier 400, hibp_key_required 503, hibp_rate_limited 429, hibp_error/upstream_error 502.

The HIBP key is only required for email/username scans. Domain scans use

the public breach catalog.

Handler compatibility: The POST handler also accepts hibp_api_key as a query parameter; prefer the X-HIBP-API-Key header because query strings may be logged.

POST input rule: Supply one of identifier, email, username, or domain; the latter three are legacy alternatives.

Source contract imported from dark web exposure/app.py. Handler: scan. Reference: docs/endpoints.md.

PARAMETERS
NameInTypeRequiredDescription
identifierbodystringNoPrimary email, username, or domain input; POST also accepts one legacy alias field.
include_hashesbodybooleanNoReturn `password_hash`/`hash_alg` fields
include_pastesbodybooleanNoAlso return pastebin exposure (email/username only)
X-HIBP-API-KeyheaderstringNoOptional Have I Been Pwned API key for premium breach/paste access.
emailbodystringNoEmail address to check for breach exposure.
usernamebodystringNoUsername/account identifier to check for exposure.
domainbodystringNoDomain name to search for matching breach records.
hibp_api_keyquerystringNoCompatibility fallback for the Have I Been Pwned key; prefer the X-HIBP-API-Key header to avoid exposing credentials in URLs.
SAMPLE REQUEST
{
  "identifier": "adobe.com",
  "include_pastes": false
}
SAMPLE RESPONSE
{
  "ok": true,
  "input": {
    "type": "domain",
    "value": "adobe.com"
  },
  "cached": false,
  "pastes": null,
  "sources": [
    "Adobe",
    "Adobe Creative Cloud"
  ],
  "findings": [
    {
      "name": "Adobe",
      "title": "Adobe",
      "domain": "adobe.com",
      "last_seen": "2013-10-04T00:00:00Z",
      "pwn_count": 152445165,
      "added_date": "2013-10-04T00:00:00Z",
      "first_seen": "2013-10-04",
      "is_malware": false,
      "is_retired": false,
      "description": "In October 2013, 153 million Adobe accounts...",
      "is_verified": true,
      "data_classes": [
        "Email addresses",
        "Password hints",
        "Passwords"
      ],
      "is_sensitive": false,
      "is_spam_list": false,
      "is_fabricated": false
    }
  ],
  "checked_at": "2026-08-09T07:30:00.000000",
  "breach_count": 5,
  "breach_status": "exposed"
}
QUICK CURL
curl -X POST https://api.dakidarts.com/dark-web-exposure/scan -H 'X-API-Key: dk_live_...' -H 'Accept: application/json' -H 'X-HIBP-API-Key: YOUR_X_HIBP_API_KEY' -H 'Content-Type: application/json' -d '{"identifier": "adobe.com", "include_pastes": false}'
GROUP / 06

Breaches

Breaches endpoints sourced from the Dark Web Exposure API implementation.

3 endpoints
GET /breaches List Breaches SOURCE CONTRACT — UPSTREAM NEEDED $0.0050 / call / 120 rpm Upstream needed

Full breach catalog. Optional `?domain=` filter limits results to breaches involving that domain. Cached 1 day (per domain value).

Snapshot from docs/endpoints.md for source API version 0.0.2. This is source documentation, not evidence that an upstream is deployed.

GET /breaches

Full breach catalog. Optional ?domain= filter limits results to breaches involving that domain. Cached 1 day (per domain value).

curl "http://localhost:8000/breaches"
curl "http://localhost:8000/breaches?domain=linkedin.com"

Response 200

{
  "ok": true,
  "count": 923,
  "domain": null,
  "cached": true,
  "breaches": [
    { "Name": "Adobe", "Domain": "adobe.com", "BreachDate": "2013-10-04", "PwnCount": 152445165, "DataClasses": ["Email addresses", "Passwords"], "...": "..." }
  ]
}

Breach entries use HIBP's field names (Name, Title, Domain, BreachDate, AddedDate, ModifiedDate, PwnCount, Description, LogoPath, DataClasses, IsVerified, IsFabricated, IsSensitive, IsRetired, IsSpamList, IsMalware).

Errors: upstream_error 502.

Source contract imported from dark web exposure/app.py. Handler: list_breaches. Reference: docs/endpoints.md.

PARAMETERS
NameInTypeRequiredDescription
domainquerystringNoDomain name to search for matching breach records.
QUICK CURL
curl -X GET https://api.dakidarts.com/dark-web-exposure/breaches -H 'X-API-Key: dk_live_...' -H 'Accept: application/json'
GET /breaches/latest Latest Breaches SOURCE CONTRACT — UPSTREAM NEEDED $0.0050 / call / 120 rpm Upstream needed

The most recently *added* breaches (sorted by HIBP `AddedDate`, newest first). Shares the same 1-day catalog cache as `/breaches`, so it costs nothing extra after a catalog fetch.

Snapshot from docs/endpoints.md for source API version 0.0.2. This is source documentation, not evidence that an upstream is deployed.

GET /breaches/latest

The most recently *added* breaches (sorted by HIBP AddedDate, newest first). Shares the same 1-day catalog cache as /breaches, so it costs nothing extra after a catalog fetch.

curl "http://localhost:8000/breaches/latest?limit=10"

Query params

ParamTypeRequiredMeaning
limitintegerno1–50, default 10

Response 200

{
  "ok": true,
  "count": 10,
  "limit": 10,
  "cached": true,
  "breaches": [ { "Name": "NewBreach", "AddedDate": "2026-08-01T00:00:00Z", "...": "..." } ]
}

Errors: invalid_limit 400, upstream_error 502.

Source contract imported from dark web exposure/app.py. Handler: latest_breaches. Reference: docs/endpoints.md.

PARAMETERS
NameInTypeRequiredDescription
limitqueryintegerNo1–50, default 10
QUICK CURL
curl -X GET https://api.dakidarts.com/dark-web-exposure/breaches/latest -H 'X-API-Key: dk_live_...' -H 'Accept: application/json'
GET /breaches/{breach_name} Single Breach SOURCE CONTRACT — UPSTREAM NEEDED $0.0050 / call / 120 rpm Upstream needed

Details for a single named breach. Cached 1 day.

Snapshot from docs/endpoints.md for source API version 0.0.2. This is source documentation, not evidence that an upstream is deployed.

GET /breaches/<name>

Details for a single named breach. Cached 1 day.

curl "http://localhost:8000/breaches/Adobe"

Response 200

{
  "ok": true,
  "cached": false,
  "breach": { "Name": "Adobe", "Domain": "adobe.com", "PwnCount": 152445165, "...": "..." }
}

Errors: invalid_name 400, breach_not_found 404, upstream_error 502.

Source contract imported from dark web exposure/app.py. Handler: single_breach. Reference: docs/endpoints.md.

PARAMETERS
NameInTypeRequiredDescription
breach_namepathstringYesBreach name supplied in the URL path.
QUICK CURL
curl -X GET https://api.dakidarts.com/dark-web-exposure/breaches/ExampleBreach -H 'X-API-Key: dk_live_...' -H 'Accept: application/json'
GROUP / 07

Pastes

Pastes endpoints sourced from the Dark Web Exposure API implementation.

1 endpoint
GET /pastes/{account} Account Pastes SOURCE CONTRACT — UPSTREAM NEEDED $0.0050 / call / 120 rpm Upstream needed

Pastebin exposure for an email address or username. Requires `HIBP_API_KEY`. Cached 1 day.

Snapshot from docs/endpoints.md for source API version 0.0.2. This is source documentation, not evidence that an upstream is deployed.

GET /pastes/<account>

Pastebin exposure for an email address or username. Requires HIBP_API_KEY. Cached 1 day.

curl "http://localhost:8000/pastes/[email protected]"

Response 200

{
  "ok": true,
  "account": "[email protected]",
  "count": 2,
  "cached": false,
  "pastes": [
    {
      "Id": "abcdef1234",
      "Source": "Pastebin",
      "Title": "dumps",
      "Date": "2023-01-15T00:00:00Z",
      "EmailCount": 34
    }
  ]
}

Errors: hibp_key_required 503, invalid_account 400, hibp_error/upstream_error 502.

Input rule: Supply the HIBP key in either X-HIBP-API-Key or the compatibility hibp_api_key query parameter; prefer the header.

Source contract imported from dark web exposure/app.py. Handler: account_pastes. Reference: docs/endpoints.md.

PARAMETERS
NameInTypeRequiredDescription
X-HIBP-API-KeyheaderstringNoRequired for this endpoint; send the HIBP key using this header or the compatibility query parameter.
hibp_api_keyquerystringNoRequired for this endpoint; send the HIBP key using this header or the compatibility query parameter.
accountpathstringYesEmail address or account identifier to search for pastes.
SAMPLE RESPONSE
{
  "ok": true,
  "count": 2,
  "cached": false,
  "pastes": [
    {
      "Id": "abcdef1234",
      "Date": "2023-01-15T00:00:00Z",
      "Title": "dumps",
      "Source": "Pastebin",
      "EmailCount": 34
    }
  ],
  "account": "[email protected]"
}
QUICK CURL
curl -X GET https://api.dakidarts.com/dark-web-exposure/pastes/dev%40example.com -H 'X-API-Key: dk_live_...' -H 'Accept: application/json' -H 'X-HIBP-API-Key: YOUR_X_HIBP_API_KEY'
GROUP / 08

Data Classes

Data Classes endpoints sourced from the Dark Web Exposure API implementation.

1 endpoint
GET /data_classes Data Classes SOURCE CONTRACT — UPSTREAM NEEDED $0.0050 / call / 120 rpm Upstream needed

The fixed list of data classes HIBP uses (e.g. `Email addresses`, `Passwords`, `Dates of birth`). Cached 30 days. Useful for building filters in client apps.

Snapshot from docs/endpoints.md for source API version 0.0.2. This is source documentation, not evidence that an upstream is deployed.

GET /data_classes

The fixed list of data classes HIBP uses (e.g. Email addresses, Passwords, Dates of birth). Cached 30 days. Useful for building filters in client apps.

Response 200

{ "ok": true, "count": 53, "cached": true, "data_classes": ["Account balances", "..."] }

Source contract imported from dark web exposure/app.py. Handler: data_classes. Reference: docs/endpoints.md.

QUICK CURL
curl -X GET https://api.dakidarts.com/dark-web-exposure/data_classes -H 'X-API-Key: dk_live_...' -H 'Accept: application/json'
GROUP / 09

Stats

Stats endpoints sourced from the Dark Web Exposure API implementation.

1 endpoint
GET /stats Stats SOURCE CONTRACT — UPSTREAM NEEDED $0.0050 / call / 120 rpm Upstream needed

Server-side usage analytics: per-endpoint request counters, cache sizes, uptime. Useful to watch from your own monitoring (RapidAPI's dashboard shows its own numbers).

Snapshot from docs/endpoints.md for source API version 0.0.2. This is source documentation, not evidence that an upstream is deployed.

GET /stats

Server-side usage analytics: per-endpoint request counters, cache sizes, uptime. Useful to watch from your own monitoring (RapidAPI's dashboard shows its own numbers).

Response 200

{
  "ok": true,
  "uptime_seconds": 86400,
  "total_requests": 15403,
  "endpoint_usage": [
    { "endpoint": "/password", "hits": 8200, "last_hit": "2026-08-09T07:30:00.000000" },
    { "endpoint": "/passwords/batch", "hits": 3121, "last_hit": "2026-08-09T07:29:00.000000" }
  ],
  "cache_entries": { "breaches": 312, "passwords": 4091, "password_ranges": 87, "catalog": 14 }
}

Source contract imported from dark web exposure/app.py. Handler: stats. Reference: docs/endpoints.md.

SAMPLE RESPONSE
{
  "ok": true,
  "cache_entries": {
    "catalog": 14,
    "breaches": 312,
    "passwords": 4091,
    "password_ranges": 87
  },
  "endpoint_usage": [
    {
      "hits": 8200,
      "endpoint": "/password",
      "last_hit": "2026-08-09T07:30:00.000000"
    },
    {
      "hits": 3121,
      "endpoint": "/passwords/batch",
      "last_hit": "2026-08-09T07:29:00.000000"
    }
  ],
  "total_requests": 15403,
  "uptime_seconds": 86400
}
QUICK CURL
curl -X GET https://api.dakidarts.com/dark-web-exposure/stats -H 'X-API-Key: dk_live_...' -H 'Accept: application/json'
INTERACTIVE SANDBOX

Explore a response before you integrate.

Edit a JSON request to validate its syntax and preview the published sample response. This stays in your browser; it never calls the live API or uses credits.

The preview checks JSON syntax and shows the saved example response; it does not execute request values.

MOCK RESPONSE
TYPESCRIPT CONTRACT
INTEGRATION SDK

Use the product where it lives.

These are integration templates, not runnable sample calls. Configure an endpoint upstream in API Studio, then replace the placeholder path. Saved samples stay preview-only.

REST/JSON
# Replace with a connected GET route and include any required parameters.
curl -X GET "https://api.dakidarts.com/dark-web-exposure/v1/your-connected-endpoint" \
  -H "X-API-Key: dk_live_..." \
  -H "Accept: application/json"
MORE IN THE NETWORK

Explore more Security and adjacent APIs.

Full catalog