Password Exposure API

SpyCloud’s Password Exposure API lets you safely check whether a password has appeared in past exposures using k-anonymity, so you can enforce NIST-aligned policies without sending full passwords or full hashes.


🚨 The Challenge

Breaches, infostealer-infected devices, and credential phishing continuously leak passwords. NIST 800-63B recommends checking new and reset passwords against known-compromised lists—yet many organizations avoid it over privacy, compliance, or security concerns.


✅ What This API Helps You Do

  • Block risky passwords: Detect if proposed passwords (or their hashes) were seen exposed before and reject per policy.
  • Meet compliance: Enforce NIST 800-63B guidance using k-anonymity so no full password/hash leaves your environment.
  • Scale securely: Integrate a simple REST check into signup, reset, and rotation flows with minimal latency.
📝

Privacy by design: You only send a 5-character hash prefix. SpyCloud returns potential matches so you can evaluate locally—your full hash never leaves your system.


⚙️ How It Works

  1. Hash the password — Compute one of the supported hash types (SHA-1, SHA-256, SHA-512, or NTLM).
  2. Send the prefix — Submit the first 5 hex characters of the hash with a type parameter.
  3. Evaluate locally — Compare returned candidate suffixes (and metadata) against your full hash to decide whether to allow/deny the password.

🧰 Request & Response

Requests

ParameterPurpose
hash_prefix (5 hex)First 5 characters of the password hash.
typeOne of: sha1, sha256, sha512, ntlm.

Example

GET /nist-password-v2/check/hashes/edb9b?type=sha1

(Example: password _sprinkles_ → SHA-1 edb9b4a7ec13377a368ba4e88bb9e121c99ed425)

Responses Returned as RESTful JSON with candidate matches for that prefix.

Field (selected)What you get
hash_suffixRemaining hex suffix of the hash (to join with prefix).
exposure_countCount of times this hash appeared in SpyCloud data.
last_seenApproximate most recent observation timestamp (UTC ISO-8601).
sourcesHigh-level exposure sources (e.g., breach/malware/phish).

You compare hash_prefix + hash_suffix against your locally computed full hash. If it matches and policy dictates, reject or step-up.


🧪 Common Uses

Account creation

Reject known-compromised passwords at signup.

Password reset

Prevent reuse of exposed passwords during recovery flows.

Periodic rotation

Enforce policies aligned to NIST 800-63B without handling cleartext.


🗃️ Data Sources

SpyCloud aggregates password exposures from malware-infected devices, phishing sites, and breaches, standardizing them for privacy-preserving checks via k-anonymity.


📈 Outcomes You Can Target

  • Reduce account takeover (ATO) by eliminating known-weak passwords at the gate.
  • Improve compliance posture while maintaining user privacy.
  • Lower support & fraud costs by catching risky choices pre-incident.

🔍 Selected API Field Reference

FieldExampleDescription
hash_prefixedb9bFirst 5 hex chars of the password hash you submit.
typesha1Hash algorithm used (sha1, sha256, sha512, ntlm).
hash_suffix4a7ec13377a368ba4e88bb9e121c99ed425Suffix you compare locally with your full hash.
exposure_count17Number of times this hash was observed.
last_seen2023-01-01T00:00:00ZMost recent observation timestamp (UTC).
sources["breach","malware"]High-level exposure sources for context.

📎 Integration Notes

  • Delivery: RESTful API with JSON output.
  • Privacy: Only a 5-char prefix is transmitted; full matching occurs on your side.
  • Hashing: Supports SHA-1, SHA-256, SHA-512, NTLM.
  • Docs: See API Guidelines for auth, config, and error handling; and the API Reference for exact schemas and examples.