Quick Start
Create your account
- Go to app.syvel.io/register
- Enter your email address and choose a password
- Your Free account is immediately active (100 req/month)
Create your first API key
In the dashboard, under the API Keys section:
- Click New key
- Give it a name (e.g. “Production”)
- Copy the displayed key — it will not be shown again
Your key looks like: sv_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
First API call
-H "Authorization: Bearer sv_your_key"Response:
{ "is_risky": true, "risk_score": 100, "reason": "disposable", "is_free_provider": false, "is_corporate_email": false, "did_you_mean": null, "is_alias_email": false, "mx_provider_label": "Yopmail", "deliverability_score": 0}Key fields
| Field | Type | Description |
|---|---|---|
is_risky | boolean | The primary blocking signal. Use this to accept or reject. |
risk_score | integer | 0–100. For custom thresholds (default: 65). |
reason | string | safe · disposable · undeliverable · role_account |
did_you_mean | string | null | Typo correction suggestion. |
deliverability_score | integer | 0–100. Probability of actual delivery. |
Integrating into a form
async function validateEmail(email) { try { const res = await fetch( `https://api.syvel.io/v1/check/${encodeURIComponent(email)}`, { headers: { 'Authorization': 'Bearer sv_your_key' }, signal: AbortSignal.timeout(3000), // 3 s max — never hang } );
if (!res.ok) return { valid: true }; // quota exceeded, server error → let through
const data = await res.json();
if (data.is_risky) { return { valid: false, message: "Please use a professional email address." }; }
// Suggest typo correction if (data.did_you_mean) { return { valid: true, warning: `Did you mean ${data.did_you_mean}?` }; }
return { valid: true }; } catch { return { valid: true }; // network error or timeout → fail open }}