Formulaires
Créez des formulaires d’inscription, publiez-les et effectuez une rotation de leur jeton public.
Créer un formulaire
Crée un formulaire d’inscription au statut draft avec un token public. Nécessite une clé API avec la portée full. Les formulaires sont en accès anticipé.
Si vous omettez definition, Emailit génère un formulaire de départ : une étape avec un titre, un champ e-mail obligatoire et un bouton Subscribe, plus une étape de confirmation. Créez et mettez en forme les formulaires dans le tableau de bord, sous Email MarketingForms, puis publiez-les.
/formsParamètres du corps
namestringobligatoiretypestringpar défaut : popuppopup, full_page, flyout, embed ou banner.definitionobjectLe contenu du formulaire, enregistré tel quel. Emailit ne le vérifie qu’à la publication. Champs de premier niveau :
version(entier) :1.type(chaîne) : le type de formulaire.steps(tableau) : chaque étape contientid,name,kind(formousuccess) etblocks. Les blocs ont unidet untype:text,button(action:submit,next,closeougo_to_url),image, ou un champ de saisie (email,text_input,phone,date,radio,checkbox,dropdown) avec unnamede champ, unlabeletrequired.styles,targeting,experiments(objets) : règles d’apparence et d’affichage définies par l’éditeur de formulaires.
settingsobject{}.Réponse
Renvoie 201 Created avec l’objet formulaire, y compris definition et settings.
tokenstringstatusstringdraft jusqu’à la publication du formulaire, puis live.published_atstring | nullRenvoie 400 si name est absent ou vide, ou si type ne fait pas partie des valeurs autorisées.
{
"object": "form",
"id": "frm_3Bzpif9xswMlVbFvGZSPNixm5j5",
"name": "Newsletter popup",
"type": "popup",
"status": "draft",
"token": "9636697db6c8f136d6742cee9c86eb3ed53b89f0a44e3ce6",
"created_at": "2026-10-01T11:20:31.000000+00:00",
"updated_at": "2026-10-01T11:20:31.000000+00:00",
"published_at": null,
"definition": {
"version": 1,
"type": "popup",
"steps": [
{
"id": "3Rb7Lq2NcX9vZt4Wm8Kd1Hs6PyE",
"name": "Step 1",
"kind": "form",
"blocks": [
{ "id": "3Rb7Lq5TgB2kVw7Nn1Ps4Fd9QzA", "type": "text", "content": "<p>Join our list</p>" },
{
"id": "3Rb7Lq3JfM6xYc0Rr5Hh8Gk2SeU",
"type": "email",
"label": "<p>Email</p>",
"placeholder": "you@example.com",
"required": true,
"name": "email"
},
{ "id": "3Rb7Lq4WdP1zQa6Ee9Jj3Lm7TfV", "type": "button", "label": "<p>Subscribe</p>", "action": "submit" }
]
},
{
"id": "3Rb7Lq2XkS8wUe3Tt6Mn0Bv5RgC",
"name": "Success",
"kind": "success",
"blocks": [
{ "id": "3Rb7Lq6YhD4cFi9Uu2Oo7Cx1WhB", "type": "text", "content": "<p>Thanks for subscribing!</p>" }
]
}
],
"styles": {
"backgroundColor": "#ffffff",
"textColor": "#0f172a",
"primaryColor": "#03a071",
"borderRadius": 12,
"fontFamily": "Inter, system-ui, sans-serif",
"buttonStyle": "solid"
},
"targeting": {},
"experiments": {}
},
"settings": {}
}{
"statusCode": 400,
"error": "Bad Request",
"message": "Validation error",
"details": [
{
"instancePath": "",
"schemaPath": "#/required",
"keyword": "required",
"params": { "missingProperty": "name" },
"message": "must have required property 'name'"
}
]
}Récupérer un formulaire
Récupère un formulaire avec sa définition complète. Nécessite une clé API avec la portée full.
/forms/{id}Paramètres de chemin
idstringobligatoirefrm_…).Réponse
Renvoie l’objet formulaire.
objectstringform.idstringfrm_.namestringtypestringpopup, full_page, flyout, embed ou banner.statusstringdraft ou live. Seuls les formulaires en ligne se chargent sur votre site.tokenstringdefinitionobjectsettingsobjectcreated_at, updated_at, published_atstring | nullpublished_at vaut null jusqu’à la première publication.Renvoie 404 si le formulaire n’existe pas.
{
"object": "form",
"id": "frm_3Bzpif9xswMlVbFvGZSPNixm5j5",
"name": "Newsletter popup",
"type": "popup",
"status": "live",
"token": "9636697db6c8f136d6742cee9c86eb3ed53b89f0a44e3ce6",
"created_at": "2026-10-01T11:20:31.000000+00:00",
"updated_at": "2026-10-01T11:48:02.000000+00:00",
"published_at": "2026-10-01T11:48:02.000000+00:00",
"definition": {
"version": 1,
"type": "popup",
"steps": [
{
"id": "3Rb7Lq2NcX9vZt4Wm8Kd1Hs6PyE",
"name": "Step 1",
"kind": "form",
"blocks": [
{ "id": "3Rb7Lq5TgB2kVw7Nn1Ps4Fd9QzA", "type": "text", "content": "<p>Get our monthly product notes</p>" },
{
"id": "3Rb7Lq3JfM6xYc0Rr5Hh8Gk2SeU",
"type": "email",
"label": "<p>Email</p>",
"placeholder": "you@example.com",
"required": true,
"name": "email"
},
{ "id": "3Rb7Lq4WdP1zQa6Ee9Jj3Lm7TfV", "type": "button", "label": "<p>Subscribe</p>", "action": "submit" }
]
},
{
"id": "3Rb7Lq2XkS8wUe3Tt6Mn0Bv5RgC",
"name": "Success",
"kind": "success",
"blocks": [
{ "id": "3Rb7Lq6YhD4cFi9Uu2Oo7Cx1WhB", "type": "text", "content": "<p>Thanks for subscribing!</p>" }
]
}
],
"styles": {
"backgroundColor": "#ffffff",
"textColor": "#0f172a",
"primaryColor": "#03a071",
"borderRadius": 12,
"fontFamily": "Inter, system-ui, sans-serif",
"buttonStyle": "solid"
},
"targeting": {},
"experiments": {}
},
"settings": {}
}{
"error": "Form not found"
}Mettre à jour un formulaire
Met à jour les champs transmis et laisse les autres inchangés. Nécessite une clé API avec la portée full.
Les modifications d’un formulaire live sont immédiatement visibles par les visiteurs ; inutile de le publier de nouveau. Pour le modifier sans affecter les visiteurs, dépubliez-le d’abord.
/forms/{id}Paramètres de chemin
idstringobligatoirefrm_…).Paramètres du corps
namestringtypestringpopup, full_page, flyout, embed ou banner. Mettez à jour definition.type en conséquence.definitionobjectsettingsobjectRéponse
Renvoie l’objet formulaire mis à jour. Renvoie 400 si un champ n’a pas le bon type ou si name est vide, et 404 si le formulaire n’existe pas.
{
"object": "form",
"id": "frm_3Bzpif9xswMlVbFvGZSPNixm5j5",
"name": "Newsletter popup (October)",
"type": "popup",
"status": "live",
"token": "9636697db6c8f136d6742cee9c86eb3ed53b89f0a44e3ce6",
"created_at": "2026-10-01T11:20:31.000000+00:00",
"updated_at": "2026-10-02T08:05:14.000000+00:00",
"published_at": "2026-10-01T11:48:02.000000+00:00",
"definition": {
"version": 1,
"type": "popup",
"steps": [
{
"id": "3Rb7Lq2NcX9vZt4Wm8Kd1Hs6PyE",
"name": "Step 1",
"kind": "form",
"blocks": [
{ "id": "3Rb7Lq3JfM6xYc0Rr5Hh8Gk2SeU", "type": "email", "label": "<p>Email</p>", "required": true, "name": "email" },
{ "id": "3Rb7Lq4WdP1zQa6Ee9Jj3Lm7TfV", "type": "button", "label": "<p>Subscribe</p>", "action": "submit" }
]
},
{
"id": "3Rb7Lq2XkS8wUe3Tt6Mn0Bv5RgC",
"name": "Success",
"kind": "success",
"blocks": [{ "id": "3Rb7Lq6YhD4cFi9Uu2Oo7Cx1WhB", "type": "text", "content": "<p>Thanks for subscribing!</p>" }]
}
],
"styles": { "primaryColor": "#03a071", "borderRadius": 12, "buttonStyle": "solid" },
"targeting": {},
"experiments": {}
},
"settings": {}
}{
"error": "Invalid name"
}{
"error": "Form not found"
}Lister les formulaires
Renvoie les formulaires de l’espace de travail, du plus récent au plus ancien, sans definition ni settings. Nécessite une clé API avec la portée full.
/formsParamètres de requête
pageintegerpar défaut : 1limitintegerpar défaut : 10searchstringmatchstringall (par défaut) exige que tous les filtres correspondent. Avec or, il suffit qu’un filtre corresponde. Consultez Filtrage et tri.
orderstringClé de tri de cette liste. Consultez les clés de tri ci-dessous.
directionstringasc ou desc.
Clés de filtre
Les filtres utilisent des paramètres de requête key.condition=value, par exemple status.exact=live. Consultez Filtrage et tri.
| Clé | Type | Remarques |
|---|---|---|
name |
chaîne | |
type |
énumération | popup, full_page, flyout, embed, banner |
status |
énumération | draft, live |
created_at |
date |
Clés de tri pour order : name, type, status, created_at.
Réponse
dataobject[]object, id, name, type, status, token, created_at, updated_at, published_at.total_recordsintegernext_page_urlstring | nullnull sur la dernière page. Il ne contient que page et limit ; ajoutez de nouveau votre recherche et vos filtres quand vous le suivez.previous_page_urlstring | nullnull sur la première page.{
"data": [
{
"object": "form",
"id": "frm_3Bzpif9xswMlVbFvGZSPNixm5j5",
"name": "Newsletter popup",
"type": "popup",
"status": "live",
"token": "9636697db6c8f136d6742cee9c86eb3ed53b89f0a44e3ce6",
"created_at": "2026-10-01T11:20:31.000000+00:00",
"updated_at": "2026-10-01T11:48:02.000000+00:00",
"published_at": "2026-10-01T11:48:02.000000+00:00"
}
],
"total_records": 1,
"next_page_url": null,
"previous_page_url": null
}Publier un formulaire
Passe le statut du formulaire à live et met à jour published_at. Les formulaires en ligne se chargent sur tout site où le script Emailit est installé et peuvent recevoir des réponses. Nécessite une clé API avec la portée full.
La définition doit contenir au moins une étape avec kind: "form" et une avec kind: "success" ; sinon, la requête renvoie 422. Les réponses sont enregistrées avec le formulaire et ne créent pas encore de contacts.
/forms/{id}/publishParamètres de chemin
idstringobligatoirefrm_…).Réponse
Renvoie l’objet formulaire avec status défini sur live. Renvoie 422 si la définition est incomplète et 404 si le formulaire n’existe pas.
{
"object": "form",
"id": "frm_3Bzpif9xswMlVbFvGZSPNixm5j5",
"name": "Newsletter popup",
"type": "popup",
"status": "live",
"token": "9636697db6c8f136d6742cee9c86eb3ed53b89f0a44e3ce6",
"created_at": "2026-10-01T11:20:31.000000+00:00",
"updated_at": "2026-10-01T11:48:02.000000+00:00",
"published_at": "2026-10-01T11:48:02.000000+00:00",
"definition": {
"version": 1,
"type": "popup",
"steps": [
{
"id": "3Rb7Lq2NcX9vZt4Wm8Kd1Hs6PyE",
"name": "Step 1",
"kind": "form",
"blocks": [
{ "id": "3Rb7Lq3JfM6xYc0Rr5Hh8Gk2SeU", "type": "email", "label": "<p>Email</p>", "required": true, "name": "email" },
{ "id": "3Rb7Lq4WdP1zQa6Ee9Jj3Lm7TfV", "type": "button", "label": "<p>Subscribe</p>", "action": "submit" }
]
},
{
"id": "3Rb7Lq2XkS8wUe3Tt6Mn0Bv5RgC",
"name": "Success",
"kind": "success",
"blocks": [{ "id": "3Rb7Lq6YhD4cFi9Uu2Oo7Cx1WhB", "type": "text", "content": "<p>Thanks for subscribing!</p>" }]
}
],
"styles": { "primaryColor": "#03a071", "borderRadius": 12, "buttonStyle": "solid" },
"targeting": {},
"experiments": {}
},
"settings": {}
}{
"error": "Form must have a success step"
}{
"error": "Form not found"
}Dépublier un formulaire
Repasse le statut du formulaire à draft. Le script d’intégration cesse de le charger et les nouvelles réponses sont rejetées. Le jeton, la définition et published_at restent inchangés : vous pouvez donc le publier de nouveau plus tard. Nécessite une clé API avec la portée full.
/forms/{id}/unpublishParamètres de chemin
idstringobligatoirefrm_…).Réponse
Renvoie l’objet formulaire avec status défini sur draft. Renvoie 404 si le formulaire n’existe pas.
{
"object": "form",
"id": "frm_3Bzpif9xswMlVbFvGZSPNixm5j5",
"name": "Newsletter popup",
"type": "popup",
"status": "draft",
"token": "9636697db6c8f136d6742cee9c86eb3ed53b89f0a44e3ce6",
"created_at": "2026-10-01T11:20:31.000000+00:00",
"updated_at": "2026-10-06T07:30:00.000000+00:00",
"published_at": "2026-10-01T11:48:02.000000+00:00",
"definition": {
"version": 1,
"type": "popup",
"steps": [
{
"id": "3Rb7Lq2NcX9vZt4Wm8Kd1Hs6PyE",
"name": "Step 1",
"kind": "form",
"blocks": [
{ "id": "3Rb7Lq3JfM6xYc0Rr5Hh8Gk2SeU", "type": "email", "label": "<p>Email</p>", "required": true, "name": "email" },
{ "id": "3Rb7Lq4WdP1zQa6Ee9Jj3Lm7TfV", "type": "button", "label": "<p>Subscribe</p>", "action": "submit" }
]
},
{
"id": "3Rb7Lq2XkS8wUe3Tt6Mn0Bv5RgC",
"name": "Success",
"kind": "success",
"blocks": [{ "id": "3Rb7Lq6YhD4cFi9Uu2Oo7Cx1WhB", "type": "text", "content": "<p>Thanks for subscribing!</p>" }]
}
],
"styles": { "primaryColor": "#03a071", "borderRadius": 12, "buttonStyle": "solid" },
"targeting": {},
"experiments": {}
},
"settings": {}
}{
"error": "Form not found"
}Réinitialiser le jeton public
Génère un nouveau token public pour le formulaire. L’ancien jeton cesse immédiatement de fonctionner : les sites qui chargent le formulaire avec ce jeton ne l’affichent plus et ne peuvent plus lui envoyer de réponses. Mettez à jour votre code d’intégration avec le nouveau jeton. Nécessite une clé API avec la portée full.
/forms/{id}/reset-tokenParamètres de chemin
idstringobligatoirefrm_…).Réponse
Renvoie l’objet formulaire avec le nouveau token. Le statut ne change pas. Renvoie 404 si le formulaire n’existe pas.
{
"object": "form",
"id": "frm_3Bzpif9xswMlVbFvGZSPNixm5j5",
"name": "Newsletter popup",
"type": "popup",
"status": "live",
"token": "e5ed3f9ec299ae1c5dc043c45f2a616c352e47a13b6b763b",
"created_at": "2026-10-01T11:20:31.000000+00:00",
"updated_at": "2026-10-06T09:12:44.000000+00:00",
"published_at": "2026-10-01T11:48:02.000000+00:00",
"definition": {
"version": 1,
"type": "popup",
"steps": [
{
"id": "3Rb7Lq2NcX9vZt4Wm8Kd1Hs6PyE",
"name": "Step 1",
"kind": "form",
"blocks": [
{ "id": "3Rb7Lq3JfM6xYc0Rr5Hh8Gk2SeU", "type": "email", "label": "<p>Email</p>", "required": true, "name": "email" },
{ "id": "3Rb7Lq4WdP1zQa6Ee9Jj3Lm7TfV", "type": "button", "label": "<p>Subscribe</p>", "action": "submit" }
]
},
{
"id": "3Rb7Lq2XkS8wUe3Tt6Mn0Bv5RgC",
"name": "Success",
"kind": "success",
"blocks": [{ "id": "3Rb7Lq6YhD4cFi9Uu2Oo7Cx1WhB", "type": "text", "content": "<p>Thanks for subscribing!</p>" }]
}
],
"styles": { "primaryColor": "#03a071", "borderRadius": 12, "buttonStyle": "solid" },
"targeting": {},
"experiments": {}
},
"settings": {}
}{
"error": "Form not found"
}Supprimer un formulaire
Supprime définitivement un formulaire et toutes ses réponses enregistrées. Les sites qui l’intègrent cessent de l’afficher. Nécessite une clé API avec la portée full.
/forms/{id}Paramètres de chemin
idstringobligatoirefrm_…).Réponse
Renvoie 204 No Content avec un corps vide. Renvoie 404 si le formulaire n’existe pas.
(empty body){
"error": "Form not found"
}