Formularios
Crea formularios de suscripción, publícalos y rota su token público.
Crear un formulario
Crea un formulario de suscripción con estado draft y un token público. Requiere una clave de API con el permiso full. Formularios está en acceso anticipado.
Si omites definition, Emailit genera un formulario inicial: un paso con un título, un campo de email obligatorio y un botón Subscribe, además de un paso de confirmación. Crea y diseña los formularios en el panel, en Email MarketingForms, y después publícalos.
/formsParámetros del cuerpo
namestringobligatoriotypestringpor defecto: popuppopup, full_page, flyout, embed o banner.definitionobjectEl contenido del formulario, guardado tal cual. Emailit solo lo comprueba al publicarlo. Campos de primer nivel:
version(entero):1.type(cadena): el tipo de formulario.steps(array): cada paso tieneid,name,kind(formosuccess) yblocks. Los bloques tienen unidy untype:text,button(action:submit,next,closeogo_to_url),imageo un campo de entrada (email,text_input,phone,date,radio,checkbox,dropdown) con elnamedel campo,labelyrequired.styles,targeting,experiments(objetos): las reglas de apariencia y de visualización que define el editor de formularios.
settingsobject{}.Devuelve
Devuelve 201 Created con el objeto de formulario, incluidos definition y settings.
tokenstringstatusstringdraft hasta que publicas el formulario; después, live.published_atstring | nullDevuelve 400 si falta name o está vacío, o si type no es uno de los valores permitidos.
{
"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'"
}
]
}Obtener un formulario
Obtiene un formulario con su definición completa. Requiere una clave de API con el permiso full.
/forms/{id}Parámetros de ruta
idstringobligatoriofrm_…).Devuelve
Devuelve el objeto de formulario.
objectstringform.idstringfrm_.namestringtypestringpopup, full_page, flyout, embed o banner.statusstringdraft o live. Solo los formularios publicados se cargan en tu sitio.tokenstringdefinitionobjectsettingsobjectcreated_at, updated_at, published_atstring | nullpublished_at es null hasta la primera publicación.Devuelve 404 si el formulario no existe.
{
"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"
}Actualizar un formulario
Actualiza los campos que pasas y deja los demás sin cambios. Requiere una clave de API con el permiso full.
Los cambios en un formulario live son visibles para los visitantes de inmediato; no hace falta volver a publicarlo. Para editarlo sin afectar a los visitantes, primero despublícalo.
/forms/{id}Parámetros de ruta
idstringobligatoriofrm_…).Parámetros del cuerpo
namestringtypestringpopup, full_page, flyout, embed o banner. Actualiza definition.type para que coincida.definitionobjectsettingsobjectDevuelve
Devuelve el objeto de formulario actualizado. Devuelve 400 si un campo tiene un tipo incorrecto o name está vacío, y 404 si el formulario no existe.
{
"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"
}Listar formularios
Devuelve los formularios del espacio de trabajo, del más reciente al más antiguo, sin definition ni settings. Requiere una clave de API con el permiso full.
/formsParámetros de consulta
pageintegerpor defecto: 1limitintegerpor defecto: 10searchstringmatchstringall (por defecto) exige que se cumplan todos los filtros. or coincide con cualquier filtro. Consulta Filtrado.
orderstringClave de ordenación de esta lista. Consulta las claves de ordenación más abajo.
directionstringasc o desc.
Claves de filtro
Los filtros usan parámetros de consulta key.condition=value, por ejemplo status.exact=live. Consulta Filtrado y ordenación.
| Clave | Tipo | Notas |
|---|---|---|
name |
string | |
type |
enum | popup, full_page, flyout, embed, banner |
status |
enum | draft, live |
created_at |
date |
Claves de orden para order: name, type, status, created_at.
Devuelve
dataobject[]object, id, name, type, status, token, created_at, updated_at, published_at.total_recordsintegernext_page_urlstring | nullnull en la última página. Solo incluye page y limit; vuelve a añadir tu búsqueda y tus filtros cuando la sigas.previous_page_urlstring | nullnull en la primera página.{
"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
}Publicar un formulario
Cambia el estado del formulario a live y actualiza published_at. Los formularios publicados se cargan en cualquier sitio donde esté insertado el script de Emailit y pueden recibir respuestas. Requiere una clave de API con el permiso full.
La definición necesita al menos un paso con kind: "form" y otro con kind: "success"; si no, la petición devuelve 422. Las respuestas se guardan con el formulario y, por ahora, no crean contactos.
/forms/{id}/publishParámetros de ruta
idstringobligatoriofrm_…).Devuelve
Devuelve el objeto de formulario con status en live. Devuelve 422 si la definición está incompleta y 404 si el formulario no existe.
{
"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"
}Despublicar un formulario
Devuelve el estado del formulario a draft. El script de inserción deja de cargarlo y las nuevas respuestas se rechazan. El token, la definición y published_at no cambian, así que puedes volver a publicarlo más adelante. Requiere una clave de API con el permiso full.
/forms/{id}/unpublishParámetros de ruta
idstringobligatoriofrm_…).Devuelve
Devuelve el objeto de formulario con status en draft. Devuelve 404 si el formulario no existe.
{
"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"
}Restablecer el token público
Genera un nuevo token público para el formulario. El token anterior deja de funcionar de inmediato: los sitios que cargan el formulario con él ya no lo muestran y no pueden enviarle respuestas. Actualiza tu código de inserción con el nuevo token. Requiere una clave de API con el permiso full.
/forms/{id}/reset-tokenParámetros de ruta
idstringobligatoriofrm_…).Devuelve
Devuelve el objeto de formulario con el nuevo token. El estado no cambia. Devuelve 404 si el formulario no existe.
{
"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"
}Eliminar un formulario
Elimina de forma permanente un formulario y todas sus respuestas guardadas. Los sitios que lo insertan dejan de mostrarlo. Requiere una clave de API con el permiso full.
/forms/{id}Parámetros de ruta
idstringobligatoriofrm_…).Devuelve
Devuelve 204 No Content con el cuerpo vacío. Devuelve 404 si el formulario no existe.
(empty body){
"error": "Form not found"
}