Endpoint

Validate and analyse an email address.

The analyse endpoint validates email structure and evaluates eligible public sender, domain, mail, authentication, and risk signals before returning a decision with credit usage.

Request.

POST https://api.paravane.io/v1/analyse
Body field Type Required Description
email string, email format Yes Email address to score.
tenant_id string No Legacy/test fallback only. Normal tenant context comes from the API key.
JSON body
{
  "email": "alice@example.com"
}

Query parameters.

ParameterDefaultAvailabilityNotes
profilequickAll plansSelects quick, standard, adaptive, deep, or catch_all.
company_validity_betafalsePaid plansOpts into additive company-domain context. It currently adds no credits beyond the selected profile.
fastfalseAll plansUses a lower-latency network-check posture without changing the selected profile.
Legacy compatibility flags.disposable_only, strict_disposable, guess, and run_catch_all remain available for older integrations but are deprecated. New integrations should use profile, and must not combine it with an enabled legacy mode flag.

Examples.

Python SDK - standard profile
from paravane import ParavaneClient

client = ParavaneClient()
result = client.smtprs.analyze(
    "alice@example.com",
    profile="standard",
)

print(result.decision)
print(result.overall_risk)
print(result.analysis_profile)
REST API - standard profile
curl -X POST "https://api.paravane.io/v1/analyse?profile=standard" \
  -H "Content-Type: application/json" \
  -H "X-API-Key: pvn_live_your_key_here" \
  -d '{"email":"alice@example.com"}'
Python SDK - Company Validity Beta
result = client.smtprs.analyze(
    "alice@example.com",
    profile="standard",
    company_validity_beta=True,
)

if result.company_validity_beta is not None:
    print(result.company_validity_beta.enabled)

if result.domain_signal is not None:
    print(result.domain_signal.domain_status)
    print(result.domain_signal.mail_status)
    print(result.domain_signal.company_valid)

The SDK also accepts per-request timeout and idempotency_key options. Advanced callers can use extra_params for approved preview parameters.

Feature gates.

The API checks workspace plan and entitlement before running a profile. quick is available to all plans, standard requires Basic or higher, adaptive and deep require Pro or higher, and catch_all requires an Enterprise or specifically entitled account.

Unavailable profiles and explicitly enabled paid-only features return HTTP 403. The Python SDK raises PermissionDeniedError for that response.