Password Breach API

API reference

Password Breach HTTP endpoints on api.syndaq.com.

All Password Breach endpoints are served from https://api.syndaq.com/v1/pwbreach/.

Authenticated requests require a valid Password Breach key. Lookup routes require your pb_sec_ secret key.

Endpoints overview

MethodPathAuthPurpose
POST/v1/pwbreach/lookupSecret keyCheck a password via JSON body
GET/v1/pwbreach/lookupSecret keyCheck by ?sha1= (40-char hex) only
GET/v1/pwbreach/statusPublic or secret keyPlan limits and quota snapshot

Response headers

Successful and error responses may include:

HeaderDescription
X-Request-IdUnique ID for support and log correlation
X-RateLimit-LimitPlan requests per minute for this key
X-RateLimit-RemainingRequests left in the current minute window
X-RateLimit-ResetUnix timestamp when the minute window resets
X-Quota-LimitMonthly quota for the subscription
X-Quota-RemainingLookups left this calendar month (UTC)
X-Quota-PeriodCurrent quota month (YYYY-MM)
Retry-AfterSeconds to wait after HTTP 429

POST /v1/pwbreach/lookup

Checks a password against Syndaq breach intelligence.

Request

POST /v1/pwbreach/lookup
Authorization: Bearer pb_sec_YOUR_SECRET_KEY
Content-Type: application/json

{"password":"YOUR_PASSWORD_HERE"}

You may also send password as a form field, or sha1 (40-character lowercase hex) instead of plaintext.

GET requests must not send plaintext passwords. Use ?sha1= only on GET.

v1 scope

v1 reports whether the credential appears in Syndaq breach intelligence and how often (count). Responses never include the password or full password hash.

Success response (200)

{
  "success": true,
  "breached": true,
  "count": 3842,
  "cached": true,
  "request_id": "e6d04020be9b57b1e1069d6e483c0443"
}

When the password is not found:

{
  "success": true,
  "breached": false,
  "count": 0,
  "cached": true,
  "request_id": "e6d04020be9b57b1e1069d6e483c0443"
}

Response fields

FieldTypeDescription
breachedbooleantrue if the password appears in Syndaq breach intelligence
countintegerOccurrence count (0 when not breached)
cachedbooleantrue when Syndaq already holds a recent result for this lookup

GET /v1/pwbreach/status

Returns key status, plan limits, and quota usage without performing a lookup.

Request

GET /v1/pwbreach/status
Authorization: Bearer pb_sec_YOUR_SECRET_KEY

The public key (pb_pub_) is accepted on this route.

Success response (200)

{
  "success": true,
  "status": "active",
  "product": "pwbreach",
  "plan": "starter",
  "rate_limit_per_minute": 60,
  "monthly_quota": 10000,
  "quota_unlimited": false,
  "quota_remaining": 9901,
  "quota_period": "2026-07"
}

Errors

Failed requests return JSON with success: false, error, error_code, and usually request_id.

HTTPerror_codeTypical cause
400invalid_passwordMissing password / invalid sha1
401missing_credentialsNo API key provided
401invalid_api_keyUnknown, inactive, or revoked key
401wrong_key_typePublic key used on a lookup endpoint
403ip_not_allowedCaller IP not on the key allowlist
429rate_limit_exceededPer-minute limit exceeded
429quota_exceededMonthly quota exhausted
502lookup_failedTemporary breach lookup failure
500internal_errorUnexpected server error

Handle non-200 responses in your application and retry transient errors with exponential backoff.