Email Analysis
Analyze email content and headers for phishing, scam patterns, and sender authenticity. Includes SPF/DKIM/DMARC validation, sender domain analysis, brand impersonation detection, and embedded URL/phone extraction with sub-lookups. **Authentication boosts:** SPF/DKIM failures add +15 to risk score. Return-path mismatch adds +10. Auth failures also trigger verdict floor promotion. **Quota:** Consumes 1 email quota. Sub-lookups do NOT consume additional quota.
Analyze email content and headers for phishing, scam patterns, and sender authenticity. Includes SPF/DKIM/DMARC validation, sender domain analysis, brand impersonation detection, and embedded URL/phone extraction with sub-lookups.
Authentication boosts: SPF/DKIM failures add +15 to risk score. Return-path mismatch adds +10. Auth failures also trigger verdict floor promotion.
Quota: Consumes 1 email quota. Sub-lookups do NOT consume additional quota.
Authorization
BearerAuth API key from your Developer Dashboard.
Keys start with sv_live_ (production) or sv_test_ (test mode).
In: header
Request Body
application/json
TypeScript Definitions
Use the request body type in TypeScript.
Response Body
application/json
application/json
application/json
application/json
application/json
application/json
curl -X POST "https://scamverify.ai/api/v1/email/analyze" \ -H "Content-Type: application/json" \ -d '{ "email_body": "Dear Customer, We have detected unusual activity on your account. Please verify your identity by clicking the link below within 24 hours or your account will be suspended.", "sender_email": "security@bank-alerts.example.com", "subject": "Urgent: Account Verification Required", "raw_headers": "Received: from mail.example.com\nAuthentication-Results: spf=fail; dkim=fail; dmarc=fail\nReturn-Path: <bounces@spam-server.example.net>" }'{
"id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
"message_hash": "string",
"risk_score": 100,
"verdict": "safe",
"confidence": 1,
"explanation": "string",
"red_flags": [
"string"
],
"scam_type": "string",
"sender_analysis": {
"domain": "string",
"domain_age_days": 0,
"brand_impersonation": {
"detected": true,
"brand": "string"
}
},
"header_analysis": {
"spf": "pass",
"dkim": "pass",
"dmarc": "pass",
"return_path_mismatch": true
},
"extracted": {
"phone_numbers": [
"string"
],
"urls": [
"string"
]
},
"sub_lookups": {
"phones": [
{
"id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
"phone_number": "string",
"normalized": "string",
"risk_score": 100,
"verdict": "safe",
"confidence": 1,
"explanation": "string",
"signals": {
"ftc_complaints": 0,
"ftc_most_recent": "2019-08-24",
"ftc_categories": [
"string"
],
"fcc_complaints": 0,
"carrier": "string",
"line_type": "landline",
"caller_name": "string",
"robocall_flagged": true,
"high_risk_carrier": true,
"community_reports": 0,
"community_scam_rate": 0
},
"sources_checked": [
"string"
],
"cached": true,
"cache_expires_at": "2019-08-24T14:15:22Z",
"created_at": "2019-08-24T14:15:22Z"
}
],
"urls": [
{
"id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
"url": "string",
"domain": "string",
"risk_score": 100,
"verdict": "safe",
"confidence": 1,
"explanation": "string",
"signals": {
"domain_age_days": 0,
"registrar": "string",
"ssl_issuer": "string",
"ssl_age_days": 0,
"redirect_count": 0,
"brand_impersonation": {
"detected": true,
"brand": "string",
"confidence": 0
},
"google_web_risk": "string",
"urlhaus_listed": true,
"threatfox_listed": true,
"ipqs_risk_score": 0,
"community_reports": 0
},
"sources_checked": [
"string"
],
"cached": true,
"cache_expires_at": "2019-08-24T14:15:22Z",
"created_at": "2019-08-24T14:15:22Z"
}
]
},
"unified_risk_score": 100,
"sources_checked": [
"string"
],
"cached": true,
"created_at": "2019-08-24T14:15:22Z"
}{
"error": {
"code": "validation_error",
"message": "Invalid request body",
"details": {
"issues": [
{
"field": "phone_number",
"message": "phone_number is required"
}
]
}
}
}{
"error": {
"code": "missing_api_key",
"message": "Authorization header is required. Use 'Bearer sv_live_...' format."
}
}{
"error": {
"code": "quota_exhausted",
"message": "Monthly phone quota exhausted. Upgrade your plan for more lookups.",
"upgrade_url": "https://scamverify.ai/settings/api"
}
}{
"error": {
"code": "rate_limit_exceeded",
"message": "Rate limit exceeded. Please wait before making another request.",
"retry_after": 12
}
}{
"error": {
"code": "internal_error",
"message": "An unexpected error occurred. Please try again later."
}
}Text Message Analysis POST
Analyze a text message (SMS) for scam indicators. Extracts embedded URLs and phone numbers, performs sub-lookups on each, detects scam patterns via AI, and returns a unified risk score. **How it works:** 1. AI analyzes message content for scam patterns (urgency, impersonation, social engineering) 2. Extracts up to 3 URLs and 3 phone numbers from the message 3. Performs full Phone and URL lookups on extracted items 4. Combines AI analysis (60% weight) with sub-lookup results (40% weight) **Quota:** Consumes 1 text quota. Extracted phone/URL sub-lookups do NOT consume additional quota.
Batch Phone Lookup POST
Look up multiple phone numbers in a single request. Processes up to 100 numbers with 10 concurrent lookups at a time. **Quota:** Each successful non-cached lookup consumes 1 phone quota. If quota is exhausted mid-batch, remaining items return an error object. **Rate limit:** Batch endpoints have a fixed 5 RPM limit for all tiers.