Request.
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. |
{
"email": "alice@example.com"
}
Query parameters.
| Parameter | Default | Availability | Notes |
|---|---|---|---|
profile | quick | All plans | Selects quick, standard, adaptive, deep, or catch_all. |
company_validity_beta | false | Paid plans | Opts into additive company-domain context. It currently adds no credits beyond the selected profile. |
fast | false | All plans | Uses a lower-latency network-check posture without changing the selected profile. |
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.
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)
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"}'
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.