XposedOrNot Python Client
A Python client for the XposedOrNot API to check for data breaches and exposed credentials.
Installation
pip install xposedornot
Quick Start
from xposedornot import XposedOrNot
xon = XposedOrNot()
result = xon.check_email("test@example.com")
print(f"Found in {len(result.breaches)} breaches: {result.breaches}")
analytics = xon.breach_analytics("test@example.com")
print(f"Total exposures: {analytics.exposures_count}")
print(f"First breach: {analytics.first_breach}")
for breach in analytics.breaches_details:
print(f" - {breach.breach}: {breach.xposed_records} records")
breaches = xon.get_breaches()
print(f"Total breaches in database: {len(breaches)}")
adobe_breaches = xon.get_breaches(domain="adobe.com")
pwd_result = xon.check_password("password123")
print(f"Password exposed {pwd_result.count} times")
Features
- Email Breach Check: Check if an email has been exposed in known data breaches
- Breach Analytics: Get detailed analytics including metrics by industry, risk level, and year
- Breach Database: Access the full database of known breaches with filtering
- Password Check: Securely check passwords using k-anonymity (only hash prefix sent)
- Rate Limiting: Built-in rate limiting (1 request/second) to respect API limits
- Type Hints: Full type annotations for IDE support
API Reference
XposedOrNot Client
from xposedornot import XposedOrNot
xon = XposedOrNot()
xon = XposedOrNot(
api_key="your-api-key",
timeout=30.0,
rate_limit=True,
)
with XposedOrNot() as xon:
result = xon.check_email("test@example.com")
Methods
check_email(email: str) -> EmailBreachResponse
Check if an email has been exposed in data breaches.
result = xon.check_email("test@example.com")
print(result.breaches)
breach_analytics(email: str) -> BreachAnalyticsResponse
Get detailed breach analytics for an email.
analytics = xon.breach_analytics("test@example.com")
print(analytics.exposures_count)
print(analytics.breaches_count)
print(analytics.first_breach)
print(analytics.breaches_details)
print(analytics.metrics)
get_breaches(domain: str = None) -> list[Breach]
Get all known breaches, optionally filtered by domain.
all_breaches = xon.get_breaches()
adobe = xon.get_breaches(domain="adobe.com")
check_password(password: str) -> PasswordCheckResponse
Check if a password has been exposed using k-anonymity.
result = xon.check_password("mypassword")
print(result.count)
print(result.characteristics)
Error Handling
from xposedornot import (
XposedOrNot,
NotFoundError,
RateLimitError,
ValidationError,
)
xon = XposedOrNot()
try:
result = xon.check_email("test@example.com")
except NotFoundError:
print("Email not found in any breaches")
except RateLimitError:
print("Rate limit exceeded, please wait")
except ValidationError as e:
print(f"Invalid input: {e}")
Response Models
All responses are typed dataclasses:
EmailBreachResponse - Contains list of breach names
BreachAnalyticsResponse - Detailed analytics with metrics
BreachDetails - Individual breach information
BreachMetrics - Analytics breakdown
Breach - Breach database entry
PasswordCheckResponse - Password exposure data
Links
License
MIT License