> ## Documentation Index
> Fetch the complete documentation index at: https://docs.lekalao.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Formulaires d'inscription

> Inscrire des personnes depuis votre site, en HTML ou en JavaScript.

Chaque liste peut recevoir les inscriptions d'un formulaire posé sur n'importe quel site : pas de widget à charger, un simple `POST`.

## Activer le formulaire

Dans l'onglet **Paramètres** de la liste, section **Formulaire d'inscription** :

<ParamField path="Accepter les inscriptions depuis des formulaires externes" type="booleen" required>
  Tant que la case est décochée, l'adresse du formulaire répond « introuvable
  ».
</ParamField>

<ParamField path="Domaines autorisés" type="un par ligne">
  Seuls les formulaires servis depuis ces domaines (et leurs sous-domaines)
  sont acceptés, d'après l'en-tête `Origin` ou `Referer`. Laissez vide pour
  accepter n'importe quel site.
</ParamField>

<ParamField path="Redirections" type="URL">
  Où envoyer la personne après l'envoi du formulaire : **inscription
  confirmée**, **confirmation en attente** (double opt-in) et **après
  désabonnement**. Sans redirection, Lekalao affiche sa propre page de
  remerciement aux couleurs de votre [charte](/fr/content/brand).
</ParamField>

## Le formulaire prêt à l'emploi

Copiez le bloc affiché dans les réglages. Il ressemble à ceci :

```html theme={null}
<form
    method="POST"
    action="https://lekalao.example.com/subscribe/9d5c2a1e-8f3b-4c7a-9e21-3b8f0c6d4a12"
>
    <input type="email" name="email" placeholder="vous@exemple.com" required />
    <input type="text" name="first_name" placeholder="Prénom" />
    <input
        type="text"
        name="website"
        style="display:none"
        tabindex="-1"
        autocomplete="off"
    />
    <button type="submit">S'abonner</button>
</form>
```

### Les champs acceptés

| Champ                     | Obligatoire | Notes                                                                                               |
| ------------------------- | ----------- | --------------------------------------------------------------------------------------------------- |
| `email`                   | oui         | 255 caractères au plus.                                                                             |
| `first_name`, `last_name` | non         |                                                                                                     |
| `locale`                  | non         | Langue de lecture : `fr`, `en`, `pt-BR`… Utile sur un site multilingue.                             |
| `tags[]`                  | non         | 20 au plus. **Seuls les tags qui existent déjà sur la liste** sont posés ; les autres sont ignorés. |
| `website`                 | —           | Piège à robots : doit rester vide et caché.                                                         |

<Warning>
  Gardez le champ caché `website`. Un robot remplit tous les champs : quand
  celui-ci n'est pas vide, Lekalao répond comme si l'inscription avait
  réussi, sans inscrire personne.
</Warning>

### Ce qui se passe ensuite

* **Liste sans double opt-in** : la personne est inscrite ; les automatisations « quelqu'un s'inscrit » démarrent ; l'e-mail de bienvenue part s'il est activé.
* **Liste en double opt-in** : elle reçoit l'e-mail de confirmation et voit la page « Vérifiez votre boîte ».
* **Adresse déjà inscrite** : le prénom, le nom et la langue envoyés mettent sa fiche à jour, les tags s'ajoutent, et la page de succès s'affiche.
* **Personne qui s'était désabonnée** : remplir le formulaire vaut nouvelle inscription.
* **Adresse bloquée** (liste de suppression) : la page de succès s'affiche quand même ; Lekalao ne révèle jamais qu'une adresse est bloquée.

Chaque inscription est consignée dans le registre de consentement avec l'adresse IP et la page d'origine.

## Envoyer en JavaScript

Avec l'en-tête `Accept: application/json`, le formulaire répond en JSON au lieu de rediriger. Il accepte les requêtes venant d'autres sites (CORS) ; le contrôle des domaines autorisés reste fait par Lekalao :

```js theme={null}
const response = await fetch(
    'https://lekalao.example.com/subscribe/9d5c2a1e-8f3b-4c7a-9e21-3b8f0c6d4a12',
    {
        method: 'POST',
        headers: {
            Accept: 'application/json',
            'Content-Type': 'application/json',
        },
        body: JSON.stringify({
            email: 'ada@example.com',
            first_name: 'Ada',
            locale: 'fr',
            tags: ['newsletter'],
        }),
    },
);

const { status } = await response.json(); // "subscribed" ou "pending"
```

| Code  | Signification                                                                 |
| ----- | ----------------------------------------------------------------------------- |
| `200` | `{"status": "subscribed"}` ou `{"status": "pending"}` (confirmation envoyée). |
| `403` | Le site d'origine n'est pas dans les domaines autorisés.                      |
| `404` | Le formulaire n'est pas activé sur cette liste.                               |
| `422` | Adresse manquante ou invalide.                                                |
| `429` | Plus de 10 envois par minute depuis la même adresse IP.                       |

<Tip>
  Pour inscrire depuis votre serveur (après un achat, par exemple), utilisez
  plutôt l'[API](/fr/developers/subscribers) : pas de limite par IP, et vous
  pouvez poser n'importe quel tag et des attributs.
</Tip>
