## Créer votre compte

1. Rendez-vous sur [dashboard.syvel.io/register](https://dashboard.syvel.io/register)
2. Renseignez votre email et choisissez un mot de passe
3. Votre compte Free est immédiatement actif (100 req/mois)

## Créer votre première clé API

Dans le dashboard, section **Clés API** :

1. Cliquez sur **Nouvelle clé**
2. Donnez-lui un nom (ex: "Production")
3. **Copiez la clé affichée** — elle ne sera plus visible ensuite

Votre clé ressemble à : `sv_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx`

## Premier appel API

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

Réponse :

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

## Champs clés

| Champ | Type | Description |
|-------|------|-------------|
| `is_risky` | boolean | Le signal de blocage principal. Utilisez ce champ pour accepter ou refuser. |
| `risk_score` | integer | 0–100. Pour les seuils personnalisés (défaut : 65). |
| `reason` | string | `safe` · `disposable` · `undeliverable` · `role_account` |
| `did_you_mean` | string \| null | Suggestion de correction de typo. |
| `deliverability_score` | integer | 0–100. Probabilité de livraison effective. |

## Intégration dans un formulaire

:::caution[Principe fail-open]
Enveloppez toujours les appels Syvel dans un `try/catch` et définissez un timeout. Si l'API est injoignable pour quelque raison que ce soit (erreur réseau, quota dépassé, timeout), **laissez l'utilisateur passer** — ne bloquez jamais une inscription à cause d'un service tiers.
:::

```javascript
async function validateEmail(email) {
  try {
    const res = await fetch(
      `https://api.syvel.io/v1/check/${encodeURIComponent(email)}`,
      {
        headers: { 'Authorization': 'Bearer sv_votre_cle' },
        signal: AbortSignal.timeout(3000), // 3 s max — ne jamais bloquer
      }
    );

    if (!res.ok) return { valid: true }; // quota dépassé, erreur serveur → laisser passer

    const data = await res.json();

    if (data.is_risky) {
      return { valid: false, message: "Veuillez utiliser une adresse email professionnelle." };
    }

    // Proposer une correction si typo détectée
    if (data.did_you_mean) {
      return { valid: true, warning: `Vouliez-vous dire ${data.did_you_mean} ?` };
    }

    return { valid: true };
  } catch {
    return { valid: true }; // erreur réseau ou timeout → fail open
  }
}
```

## Étapes suivantes

- [Référence complète de l'API](/api/check)
- [SDK JavaScript](/integrations/javascript)
- [Gestion des clés API](/api/keys)