## Create your account

1. Go to [dashboard.syvel.io/register](https://dashboard.syvel.io/register)
2. Enter your email address and choose a password
3. Your Free account is immediately active (100 req/month)

## Create your first API key

In the dashboard, under the **API Keys** section:

1. Click **New key**
2. Give it a name (e.g. "Production")
3. **Copy the displayed key** — it will not be shown again

Your key looks like: `sv_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx`

## First API call

```bash
curl "https://api.syvel.io/v1/check/user@yopmail.com" \
  -H "Authorization: Bearer sv_your_key"
```

Response:

```json
{
  "email": "a9****e5@yopmail.com",
  "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

:::caution[Fail-open principle]
Always wrap Syvel calls in a `try/catch` and set a timeout. If the API is unreachable for any reason (network issue, quota exceeded, timeout), **let the user through** — never block a sign-up because of a third-party service.
:::

```javascript
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
  }
}
```

## Next steps

- [Full API reference](/api/check)
- [JavaScript SDK](/integrations/javascript)
- [API key management](/api/keys)