Cómo usar la API de Resend para enviar emails transaccionales

Aprende a integrar la API de Resend en tu proyecto para enviar emails transaccionales. Tutorial paso a paso desde la configuración hasta el primer envío.

Resend es una plataforma de envío de emails diseñada para desarrolladores, y su API te permite enviar emails transaccionales como confirmaciones de cuenta, recuperaciones de contraseña, bienvenidas o alertas desde cualquier proyecto con pocas líneas de código. Te conectas con una clave, verificas tu dominio y empiezas a enviar sin montar tu propia infraestructura.

En este tutorial vas a montar todo desde cero. Crear la cuenta, generar la API key, verificar el dominio, instalar el SDK y enviar tu primer email. Cuando termines tendrás un email entregado en tu bandeja y los logs en el panel de Resend para confirmarlo.

Tu primer email con la API de Resend

El proceso completo son seis pasos que puedes hacer en una tarde tranquila. Empezamos por la cuenta y la API key, después configuramos el dominio para que tus envíos tengan buena entregabilidad y terminamos enviando el primer email y comprobando que llegó.

Crea tu cuenta en Resend

página de registro de resend.com

Entra en resend.com y date de alta con tu email o tu cuenta de Google. Según el plan gratuito de Resend, puedes enviar 3.000 emails al mes con un tope de 100 al día, sin tarjeta y sin caducidad. Para empezar a aprender o para un proyecto pequeño te sobra de largo.

Una vez dentro, lo primero que vas a ver es el dashboard de Resend con la sección de Emails, Logs, Domains y API Keys. Vamos a tocar las dos últimas en los siguientes pasos.

Genera tu API key

Panel API Keys

Ve a API Keys en el menú lateral y pulsa Create API Key. Ponle un nombre que reconozcas, por ejemplo local-dev o el nombre de tu proyecto, y elige el permiso Sending access si solo vas a enviar emails. La clave aparece una sola vez y empieza por re_. Cópiala antes de cerrar el modal porque después ya no podrás volver a verla.

Guárdala en una variable de entorno, nunca dentro del código que vas a subir a un repositorio. Lo habitual es meterla en un archivo .env como RESEND_API_KEY=re_xxxxxxxx y cargarla desde ahí. Según Resend, si la clave acaba en GitHub su sistema la detecta y la revoca automáticamente, así que mejor evitar el susto y configúrala bien desde el principio.

Verifica tu dominio

Panel Domains de Resend

Este es el paso que más cuesta a quien empieza. Sin verificar tu dominio, solo puedes enviar emails a la cuenta con la que creaste el perfil de Resend. Si intentas enviar a otra dirección, la API te devuelve un error y el envío no sale. Te lo cuento ahora para que no pierdas media hora preguntándote por qué tu primer email no llega.

Ve a Domains, pulsa Add Domain y escribe el dominio desde el que quieres enviar, por ejemplo tuempresa.com. Resend te genera tres registros DNS que tienes que copiar al panel de tu proveedor de dominios. Un MX para gestionar los rebotes, un TXT con la política SPF, que indica qué servidores pueden enviar emails en tu nombre, y un TXT con la clave DKIM, una firma criptográfica que confirma que el email no se manipuló por el camino. Todos van bajo un subdominio tipo send.tuempresa.com.

Aquí entra el detalle que confunde a casi todo el mundo. La configuración cambia según dónde tengas registrado el dominio. Si compraste el dominio en Dondominio, la interfaz es bastante directa y solo tienes que pegar los valores tal cual te los da Resend. En otros proveedores, el nombre del registro a veces varía y eso es lo que suele liar. Lo difícil es localizar la sección DNS dentro del panel de tu proveedor, no la configuración en sí.

Cuando hayas pegado los tres registros, vuelve a Resend y pulsa Verify DNS Records. La verificación tarda entre unos minutos y unas horas según tu proveedor, aunque en algunos casos puede llegar a 24 horas. Cuando los tres registros aparezcan en verde, ya puedes enviar a cualquier dirección desde ese dominio.

Instala el SDK de Resend

Resend ofrece SDKs oficiales (librerías que envuelven la API para que la llames desde tu lenguaje sin pelearte con peticiones HTTP a mano) para los lenguajes más comunes como Node.js, Python, Go, Ruby, PHP, Java, Rust, .NET y Elixir, y tienes la REST API directa si trabajas con un lenguaje que no aparece en la lista. Para este tutorial vamos con Node.js, que es lo más habitual en proyectos no-code y vibe coding.

En tu proyecto, instala el paquete con npm install resend o yarn add resend si usas Yarn. Si vas a llamar a la API directamente con fetch o axios, no necesitas instalar nada y el endpoint base es https://api.resend.com/emails.

Configura Resend y envía tu primer email

Crea un archivo send-email.js en la raíz de tu proyecto y pega este código:

import { Resend } from 'resend';
const resend = new Resend(process.env.RESEND_API_KEY);const { data, error } = await resend.emails.send({
from: 'Acme <onboarding@resend.dev>',
to: ['delivered@resend.dev'],
subject: 'Hola desde Resend',
html: '<strong>Funciona</strong>',
});if (error) {
console.error(error);
} else {
console.log(data);
}

El parámetro from usa el dominio de prueba de Resend, que viene listo para que envíes sin haber verificado el tuyo todavía. El parámetro to apunta a delivered@resend.dev, una dirección que Resend mantiene precisamente para que puedas comprobar que la integración funciona antes de tocar nada más.

Cuando ya tengas tu dominio verificado, cambias from por algo como 'Tu Marca <hola@tuempresa.com>' y to por la dirección real del destinatario. El parámetro html acepta cualquier HTML válido y también puedes usar text para versión en texto plano o react si construyes el email con React Email.

Ejecuta el archivo con node send-email.js. Si todo va bien, la consola te devuelve un objeto con un id de email. Ese identificador es la pista que vas a seguir en el siguiente paso.

Comprueba que el email llegó

Panel Logs de Resend mostrando el estado de los emails

Vuelve al dashboard de Resend y entra en Logs. Ahí aparece cada envío con su estado, que puede ser uno de estos:

  • Delivered, cuando el servidor del destinatario aceptó el email.
  • Bounced, si el email rebotó.
  • Complained, si la persona lo marcó como spam.
  • Opened y Clicked, si tienes el tracking activo.

Si tu email no aparece o muestra un error, lo primero que tienes que mirar es la respuesta que devuelve la API. El error más típico al empezar es invalid_from_address, que avisa de que el dominio del from no está verificado. También vas a ver validation_error, que indica un parámetro mal escrito, y 403 forbidden, que salta cuando intentas enviar a un destinatario distinto al de tu cuenta sin haber verificado el dominio. Cada error viene con un mensaje claro de qué hay que cambiar.

Asegúrate de que todo funcione antes de lanzar

Tener el primer email entregado es solo el principio. El resto del trabajo es asegurarte de que tus emails se ven bien, llegan a la bandeja de entrada de verdad y sobreviven cuando algo falla en producción.

Que tus emails no parezcan de 2005

Si pones HTML a mano dentro del parámetro html, vas a acabar con tablas anidadas, estilos en línea y cero ganas de tocar el código la próxima vez. La forma cómoda de construir emails bonitos hoy es usar plantillas con componentes.

React Email es la opción que viene mejor integrada con Resend porque ambas herramientas las mantiene la misma empresa. Diseñas el email como un componente de React, le pasas las props con los datos de cada usuario y Resend lo renderiza a HTML compatible con cualquier cliente de correo. Cubre Gmail, Outlook, Apple Mail y los móviles, ahorrándote pelearte con los hacks históricos del email.

Si no usas React, alternativas como MJML o Maizzle hacen un trabajo parecido con su propio sistema de plantillas.

Que lleguen a la bandeja de entrada

Verificar el dominio es el mínimo para que tus emails no acaben en spam, pero no es el final del camino. La reputación de tu dominio se construye con el tiempo y depende de cómo se comporta tu lista, sobre todo aperturas, rebotes y quejas.

Tres reglas que ayudan más que cualquier truco:

  • Empieza enviando volúmenes bajos durante las primeras semanas para que los proveedores de correo, en especial Gmail y Outlook, te conozcan.
  • Limpia los rebotes duros automáticamente para no seguir enviando a direcciones inválidas.
  • Añade un registro DMARC en tu DNS cuando SPF y DKIM ya estén verificados. DMARC le dice a los servidores qué hacer con los emails que no superen esos dos filtros, y Gmail y Yahoo lo exigen desde febrero de 2024 para remitentes que envían más de 5.000 emails al día.

Para verificar que los envíos van bien sin entrar al panel cada hora, configura webhooks. En Webhooks del dashboard, añades una URL de tu servidor y eliges los eventos que te interesan, por ejemplo email.delivered, email.bounced o email.complained. Resend te avisa en tiempo real y puedes guardar esa información en tu base de datos para tener tu propio historial. Si los términos API y webhook se te quedan grandes, te dejo el curso gratuito de Webhooks y APIs para gente no técnica para que pilles la lógica antes de seguir conectando piezas.

Qué hacer cuando un envío falla

El SDK de Resend no lanza excepciones cuando algo va mal, devuelve un objeto con la propiedad error. Si no la compruebas, tu código piensa que el envío fue bien aunque la API haya rechazado la petición. Acuérdate siempre de mirar error antes de seguir.

Los códigos que vas a ver con más frecuencia son cuatro:

  • 400 o 422, problema con los parámetros, por ejemplo un destinatario mal formado o un campo obligatorio que falta. No tiene sentido reintentar hasta corregir el código.
  • 401 o 403, la API key es incorrecta o el dominio no está verificado.
  • 429, has superado el rate limit de 5 peticiones por segundo por defecto. Se resuelve esperando y reintentando con backoff exponencial.
  • 500, error del servidor. Conviene reintentar también.

Para los errores recuperables, el 429 y el 500, el patrón estándar es esperar 1 segundo, después 2, después 4, hasta un máximo de tres o cuatro intentos. Si necesitas enviar muchos emails seguidos, la API batch de Resend permite agrupar varios en una sola petición, lo que cuenta como una llamada contra el rate limit y te ahorra reintentos.

Integrar la API de Resend resuelve los emails transaccionales de cualquier proyecto. Pones unas líneas de código y Resend se encarga de los servidores SMTP, la entregabilidad, los logs, los webhooks y las plantillas. El plan gratuito te deja validar tu proyecto antes de pagar nada.

Si ya usas Mailchimp o Brevo para tu email marketing, probablemente te encaje mejor seguir ahí. Resend brilla cuando lo que necesitas es enviar emails desde código.

Si quieres montar aplicaciones completas que conecten APIs como esta sin tener que escribir el código a mano, echa un vistazo al curso gratuito de Vibe Coding con Claude Code. En unas tardes tienes un proyecto funcionando solo describiéndoselo al modelo.