Saltar al contenido
Docs

Valida y renderiza MJML y consulta la referencia de MJML. En alfa, solo para el equipo de Emailit.

URL basehttps://api.emailit.com/v2AutenticaciónErroresLímites de velocidad

Validar MJML

Comprueba un MJML igual que al guardar una plantilla (sintaxis XML, estructura de MJML, tipos de los atributos y sintaxis de Temple) y lo compila con MJML 5.4.1. No se guarda nada. Un MJML no válido también devuelve 200, con valid: false y los diagnósticos. Requiere el permiso full.

Consulta Validación para saber qué cubre cada comprobación.

POST/mjml/validate

Parámetros del cuerpo

sourcestring | objectObligatorio

El MJML que se comprueba: marcado MJML (<mjml>…</mjml>), MJML JSON o un documento MJML de Emailit, como el source guardado de una plantilla. Consulta Formatos de origen. Como máximo, 2 MB.

Devuelve

Devuelve 200 OK con el resultado, aunque el MJML no sea válido:

Campo Tipo Descripción
valid booleano true si no hay diagnósticos de error, es decir, si se puede guardar una plantilla con este origen.
mjml_version cadena La versión de MJML con la que compila Emailit.
format cadena o null Cómo se leyó el origen: markup o json. null si no se pudo leer.
diagnostics array Todos los diagnósticos de error, de advertencia e informativos.

valid: true significa que una plantilla con este origen se aceptaría. Corrige también las advertencias: suelen señalar problemas reales, como que falte un <mj-title>. Para obtener el HTML, usa Renderizar MJML.

Devuelve 422 con message: "Validation failed" si falta source o está en blanco, y 403 con error: "mjml_alpha" sin acceso a MJML.

Objeto de diagnóstico

Los campos que no aplican se omiten.

Campo Tipo Descripción
severity cadena error, warning o info. Solo los errores hacen que valid sea false.
code cadena Un código estable, por ejemplo mjml.invalid-child, xml.unclosed-tag o temple.unclosed-if. Consulta Códigos de diagnóstico.
message cadena Una explicación legible.
line entero La línea en el marcado, empezando por 1. Solo en orígenes de marcado.
column entero La columna en el marcado, empezando por 1. Solo en orígenes de marcado.
tag cadena El elemento al que se refiere el diagnóstico.
attribute cadena El atributo al que se refiere el diagnóstico.
path integer[] La ruta de índices de hijos desde la raíz <mjml>.
POST/mjml/validate
Terminal
curl -X POST https://api.emailit.com/v2/mjml/validate \
  -H "Authorization: Bearer your_api_key" \
  -H "Content-Type: application/json" \
  -d '{
    "source": "<mjml>\n  <mj-body>\n    <mj-column>\n      <mj-text colour=\"#333333\">Hi {{first_name}}</mj-text>\n    </mj-column>\n  </mj-body>\n</mjml>"
  }'
JSON
{
  "valid": false,
  "mjml_version": "5.4.1",
  "format": "markup",
  "diagnostics": [
    {
      "severity": "error",
      "code": "mjml.invalid-child",
      "message": "<mj-column> cannot be placed inside <mj-body>. Allowed parents: <mj-group>, <mj-section>.",
      "line": 3,
      "column": 6,
      "tag": "mj-column",
      "path": [0, 0]
    },
    {
      "severity": "error",
      "code": "mjml.unknown-attribute",
      "message": "<mj-text> has no attribute colour. Did you mean color?",
      "line": 4,
      "column": 16,
      "tag": "mj-text",
      "attribute": "colour",
      "path": [0, 0, 0]
    },
    {
      "severity": "warning",
      "code": "mjml.missing-title",
      "message": "Add an <mj-title> to <mj-head>; clients and screen readers use it.",
      "line": 1,
      "column": 2,
      "tag": "mjml",
      "path": []
    },
    {
      "severity": "info",
      "code": "mjml.missing-preview",
      "message": "Add an <mj-preview> to control the inbox preview text.",
      "line": 1,
      "column": 2,
      "tag": "mjml",
      "path": []
    }
  ]
}

Renderizar MJML

Compila un MJML en el HTML que envía Emailit, con MJML 5.4.1. Con variables, la respuesta también incluye rendered_html: el HTML después de aplicar Temple, tal como lo recibiría un destinatario. No se guarda ni se envía nada. Requiere el permiso full.

Este endpoint está limitado a 120 peticiones por minuto.

POST/mjml/render

Parámetros del cuerpo

sourcestring | objectObligatorio

El MJML que se compila: marcado MJML (<mjml>…</mjml>), MJML JSON o un documento MJML de Emailit, como el source guardado de una plantilla. Consulta Formatos de origen. Como máximo, 2 MB.

variablesobject

Las variables de Temple para rendered_html, como first_name, o un objeto cf con los campos personalizados de la campaña. No se rellena nada automáticamente: pasa las variables que aportaría el canal de envío. Consulta Variables por canal. Debe ser un objeto; cualquier otra cosa devuelve 400.

Devuelve

Devuelve 200 OK con el resultado, aunque el MJML no sea válido:

Campo Tipo Descripción
valid booleano true si no hay diagnósticos de error.
mjml_version cadena La versión de MJML con la que compila Emailit.
html cadena o null El HTML compilado, con las etiquetas de Temple sin sustituir, tal como Emailit lo guarda para una plantilla. null si el MJML tiene errores.
html_bytes entero El tamaño en UTF-8 de html. Gmail recorta los mensajes de más de unos 102 KB. 0 si html es null.
diagnostics array Todos los diagnósticos de error, de advertencia e informativos. Consulta Validar MJML.
rendered_html cadena o null html con las variables aplicadas por Temple. Solo aparece si envías variables, y es null si el MJML tiene errores.

Un MJML no válido devuelve 200 con valid: false, html: null y los diagnósticos. rendered_html usa exactamente las variables que envías: las variables que faltan se renderizan como cadenas vacías o como su valor por defecto, así que {{first_name|"there"}} se renderiza como there. El texto plano no se genera a partir del MJML.

Devuelve 422 con message: "Validation failed" si falta source o está en blanco, 400 si variables no es un objeto, y 403 con error: "mjml_alpha" sin acceso a MJML.

POST/mjml/render
Terminal
curl -X POST https://api.emailit.com/v2/mjml/render \
  -H "Authorization: Bearer your_api_key" \
  -H "Content-Type: application/json" \
  -d '{
    "source": "<mjml><mj-head><mj-title>Welcome</mj-title><mj-preview>Your account is ready</mj-preview></mj-head><mj-body><mj-section><mj-column><mj-text>Hi {{first_name|\"there\"}}, welcome aboard.</mj-text><mj-button href=\"{{activation_url}}\">Activate account</mj-button></mj-column></mj-section></mj-body></mjml>",
    "variables": {
      "first_name": "Ada",
      "activation_url": "https://example.com/activate?token=abc123"
    }
  }'
JSON
{
  "valid": true,
  "mjml_version": "5.4.1",
  "html": "<!doctype html>\n<html lang=\"und\" dir=\"auto\" …>…Hi {{first_name|\"there\"}}, welcome aboard.…<a href=\"{{activation_url}}\" …>…</html>\n",
  "html_bytes": 5267,
  "diagnostics": [],
  "rendered_html": "<!doctype html>\n<html lang=\"und\" dir=\"auto\" …>…Hi Ada, welcome aboard.…<a href=\"https://example.com/activate?token=abc123\" …>…</html>\n"
}

Obtener la referencia de MJML

Obtiene todos los componentes y atributos de la versión de MJML con la que compila Emailit, las versiones actuales de los editores, la guía de Temple y las reglas de escritura. Usa esta referencia para crear herramientas de desarrollo o para dar a un modelo de IA lo que necesita para escribir plantillas MJML válidas. Requiere el permiso full.

La misma referencia está disponible para los agentes de IA como la herramienta MCP get-mjml-reference. Consulta MJML para agentes de IA.

GET/mjml/reference

Devuelve

Devuelve 200 OK con la referencia. El ejemplo de arriba está abreviado: components incluye los 36 componentes con todos sus atributos.

Campo Tipo Descripción
mjml_version cadena La versión de MJML con la que compila Emailit.
document_schema_version entero El schema_version actual del documento MJML guardado.
editors objeto La versión y la fase actuales (alpha, beta o stable) de mjml-code y mjml-visual.
components array Todos los componentes de MJML. Consulta más abajo.
temple_guide cadena Cómo funciona Temple dentro de MJML: variables, valores por defecto, condicionales y variables de campaña.
rules cadena Las reglas de escritura de MJML: estructura, atributos permitidos y accesibilidad.
reference_text cadena Toda la referencia de componentes en texto plano compacto, para los prompts.

Devuelve 403 con error: "mjml_alpha" sin acceso a MJML.

Objeto de componente

Campo Tipo Descripción
tag cadena El nombre de la etiqueta, por ejemplo mj-button.
label cadena El nombre visible.
description cadena Lo que hace el componente.
category cadena root, head, layout, content, interactive, child o advanced.
ending_tag booleano true si el contenido es HTML o texto sin procesar (mj-text, mj-button, mj-raw, …).
parents string[] Los elementos en los que se puede colocar este componente.
children string[] Los elementos que puede contener este componente. ["*"] significa cualquier componente (mj-attributes).
attributes array Los atributos, cada uno con name, type (un tipo de MJML como color, unit(px,%){1,4} o enum(left,center,right)) y default (null si no hay ninguno).
GET/mjml/reference
Terminal
curl https://api.emailit.com/v2/mjml/reference \
  -H "Authorization: Bearer your_api_key"
JSON
{
  "mjml_version": "5.4.1",
  "document_schema_version": 1,
  "editors": {
    "mjml-code": { "version": "0.2.0", "stage": "alpha" },
    "mjml-visual": { "version": "0.2.0", "stage": "alpha" }
  },
  "components": [
    {
      "tag": "mj-body",
      "label": "Body",
      "description": "The visible email. Holds sections, wrappers and heroes.",
      "category": "root",
      "ending_tag": false,
      "parents": ["mjml"],
      "children": ["mj-raw", "mj-section", "mj-wrapper", "mj-hero"],
      "attributes": [
        { "name": "width", "type": "unit(px)", "default": "600px" },
        { "name": "background-color", "type": "color", "default": null },
        { "name": "id", "type": "string", "default": null },
        { "name": "mj-class", "type": "string", "default": null },
        { "name": "css-class", "type": "string", "default": null }
      ]
    },
    {
      "tag": "mj-button",
      "label": "Button",
      "description": "A bulletproof call-to-action button. Content is the label.",
      "category": "content",
      "ending_tag": true,
      "parents": ["mj-column", "mj-hero"],
      "children": [],
      "attributes": [
        { "name": "align", "type": "enum(left,center,right)", "default": "center" },
        { "name": "background-color", "type": "color", "default": "#414141" },
        { "name": "href", "type": "string", "default": null },
        { "name": "inner-padding", "type": "unit(px,%){1,4}", "default": "10px 25px" }
      ]
    }
  ],
  "temple_guide": "Temple is Emailit's templating language, evaluated per recipient at send time on the final HTML:\n- {{first_name}} inserts a variable; …",
  "rules": "MJML rules:\n- Structure: <mjml> > <mj-head> (optional) + <mj-body>. …",
  "reference_text": "MJML 5.4.1 component reference. Format: name=type[default]. …"
}

¿Te ha resultado útil esta página?

Gracias por tu opinión.

Gracias. Leemos todos los mensajes.