El CLI de Resend es la herramienta oficial de línea de comandos para Resend, una plataforma de correo electrónico creada para desarrolladores. Lo instalas con npm install -g resend-cli o brew install resend/cli/resend, te autenticas con resend login, y luego envías correos electrónicos, gestionas dominios y automatizas tu infraestructura de correo electrónico desde cualquier terminal o pipeline de CI/CD.
¿Qué es Resend?
Resend es una API de correo electrónico para desarrolladores. Conectas tu dominio, obtienes una clave API y empiezas a enviar correos electrónicos transaccionales desde tu aplicación: restablecimientos de contraseña, confirmaciones de pedidos, secuencias de incorporación, cualquier cosa que se active programáticamente.
El 13 de marzo de 2026, el fundador de Resend, Zeno Rocha, lanzó el CLI de Resend, llevando esa misma infraestructura a la terminal. El CLI tiene 53 comandos en 13 recursos. Está escrito en TypeScript, es completamente de código abierto bajo la licencia MIT y funciona para tres tipos de audiencias:
- Humanos: indicaciones interactivas, salida de tabla legible, programación en lenguaje natural ("mañana a las 9 am")
- Agentes de IA: modo de salida JSON, claves de idempotencia, detección automática de agentes
- Pipelines de CI/CD: autenticación con variables de entorno, banderas programables, códigos de salida consistentes
Instalación del CLI de Resend
Hay cuatro formas de instalar el CLI. Elige la que mejor se adapte a tu configuración.
Mediante cURL (binario autónomo, no requiere Node.js)
curl -fsSL https://resend.com/install.sh | bash
Esto descarga un binario precompilado para tu sistema operativo y lo añade a tu PATH. No se necesita Node.js.
Mediante npm
npm install -g resend-cli
Requiere Node.js 20 o posterior. Después de la instalación, confirma que funciona:
resend --version
Mediante Homebrew (macOS y Linux)
brew install resend/cli/resend
Esta es la opción más limpia en macOS. Homebrew maneja las actualizaciones automáticamente.
Mediante PowerShell (Windows)
irm https://resend.com/install.ps1 | iex
También puedes descargar binarios .exe directamente desde la página de Lanzamientos de GitHub.
Para desarrollo local
Si quieres contribuir al CLI o compilar desde el código fuente, necesitarás Node.js 20+ y pnpm:
git clone https://github.com/resend/resend-cli.git
cd resend-cli
pnpm install
pnpm build # genera ./dist/cli.cjs
pnpm build:bin # binario nativo en ./dist/resend
Autenticando tu cuenta
Ejecuta resend login para conectar el CLI a tu cuenta de Resend:
resend login
Esto abre tu navegador, te guía en la creación de una clave API en el panel de Resend y almacena tus credenciales localmente en ~/.config/resend/credentials.json con permisos restringidos 0600.
Para entornos no interactivos (CI/CD, scripts), omite el flujo del navegador y pasa una clave directamente:
resend login --key re_xxxxxxxxxxxxx
Una vez almacenada, no necesitas volver a autenticarte para cada comando. El CLI resuelve tu clave API en este orden:
- La bandera
--api-key(sobrescribe todo) - La variable de entorno
RESEND_API_KEY - El archivo de credenciales almacenado
Para pipelines de CI, configurar RESEND_API_KEY como una variable de entorno secreta es el enfoque estándar:
RESEND_API_KEY=re_xxx resend emails send --from builds@yourco.com --to dev@yourco.com --subject "Compilación exitosa" --text "Todas las pruebas en verde."
Soporte multi-cuenta
Si trabajas con varias organizaciones o equipos de Resend, el CLI también lo gestiona. Cambia entre perfiles almacenados sin cerrar sesión:
resend auth switch
O pasa un perfil específico para un solo comando:
resend <command> --profile production
Enviando tu primer correo electrónico
El comando principal para enviar es resend emails send. Como mínimo, necesitas una dirección de remitente (de un dominio verificado), un destinatario, un asunto y un cuerpo.
Enviar un correo electrónico de texto plano
resend emails send \
--from "you@yourdomain.com" \
--to recipient@example.com \
--subject "Hola desde el CLI" \
--text "Este es un correo electrónico de prueba enviado desde el CLI de Resend."
Enviar un correo electrónico HTML
resend emails send \
--from "team@yourco.com" \
--to user@example.com \
--subject "Tu pedido está confirmado" \
--html "<h1>Pedido confirmado</h1><p>Gracias por tu compra.</p>"
O apunta a un archivo HTML local:
resend emails send \
--from "team@yourco.com" \
--to user@example.com \
--subject "Bienvenido a bordo" \
--html-file ./templates/welcome.html
Programar la entrega
El CLI analiza fechas en lenguaje natural junto con marcas de tiempo ISO 8601:
resend emails send \
--from "you@yourco.com" \
--to user@example.com \
--subject "Revisión programada" \
--text "Solo para revisar." \
--schedule "mañana a las 9 am"
Funciona con frases como "en 1 hora", "el próximo lunes a las 3 pm" o una marca de tiempo ISO completa.
Capturar el ID del correo electrónico
Cuando se redirige la salida, el CLI cambia automáticamente a la salida JSON. Redirige a través de jq para capturar el ID del correo electrónico para operaciones de seguimiento:
EMAIL_ID=$(resend emails send \
--from a@acme.com \
--to b@acme.com \
--subject "Prueba" \
--text "Hola" | jq -r '.data.id')
echo "Correo electrónico enviado: $EMAIL_ID"
Cancelar o actualizar un correo electrónico programado
resend emails cancel $EMAIL_ID
resend emails update $EMAIL_ID --schedule "el próximo lunes a las 10 am"
Listar correos electrónicos recientes
resend emails list
Envío por lotes de hasta 100 correos a la vez
Crea un archivo JSON con un array de objetos de correo electrónico:
[
{ "from": "you@yourco.com", "to": "alice@example.com", "subject": "Hola Alice", "text": "¡Hola!" },
{ "from": "you@yourco.com", "to": "bob@example.com", "subject": "Hola Bob", "text": "¡Hola!" }
]
Luego envía el lote:
resend emails send-batch --file emails.json
Cada solicitud de lote cuenta como una llamada a la API contra tu límite de velocidad, aunque envíe hasta 100 correos electrónicos.
Gestionando dominios y claves API
Antes de poder enviar correos electrónicos, necesitas un dominio verificado. El CLI te guía a través de todo el ciclo de vida del dominio.
Añadir un dominio
resend domains create --name yourdomain.com --region us-east-1
Regiones soportadas: us-east-1, eu-west-1, sa-east-1, ap-northeast-1. Elige la región más cercana a tus usuarios para minimizar la latencia.
Verificar registros DNS
Después de crear el dominio, Resend te proporciona registros DNS para añadir (SPF, DKIM, DMARC). Una vez que los hayas añadido a tu proveedor de DNS, ejecuta:
resend domains verify --id <domain-id>
Consulta el estado hasta que devuelva "verified":
resend domains get --id <domain-id>
Configurar seguimiento y TLS
resend domains configure --id <domain-id> # Configuración interactiva
Puedes habilitar el seguimiento de apertura, el seguimiento de clics y DKIM personalizado a través de este comando.
Listar todos los dominios
resend domains list
Gestionar claves API
Para mayor seguridad, crea claves API con alcance definido para cada servicio o entorno en lugar de compartir una clave en todas partes:
resend api-keys create # Interactivo, permite definir el alcance por dominio
resend api-keys list
resend api-keys delete --id <key-id>
Las claves con alcance definido limitan lo que cada integración puede hacer. Una clave con alcance para un dominio no puede acceder a tus otros dominios ni a la configuración de tu cuenta.
Funciones avanzadas: transmisiones, webhooks y plantillas
Más allá de enviar correos electrónicos individuales, el CLI de Resend maneja tres casos de uso importantes más: transmisiones masivas, gestión de webhooks y plantillas reutilizables.
Transmisiones
Las transmisiones te permiten enviar el mismo correo electrónico a una gran lista de contactos. Primero redactas, luego envías o programas:
resend broadcasts create # Creación interactiva de borrador
resend broadcasts send --id <broadcast-id>
resend broadcasts schedule --id <broadcast-id> --date "el próximo lunes a las 10 am"
Webhooks
Los webhooks te proporcionan eventos de entrega en tiempo real: rebotes, aperturas, clics, informes de spam. El CLI maneja el ciclo de vida completo:
resend webhooks create # Registrar un nuevo endpoint
resend webhooks list
Para el desarrollo local, usa el comando webhooks listen para reenviar eventos de webhook a tu localhost:
resend webhooks listen --forward-to http://localhost:3000/webhooks/resend
Esto te ahorra configurar ngrok o herramientas de tunelización similares. El CLI soporta 17 tipos de eventos incluyendo email.sent, email.delivered, email.bounced, email.opened y email.clicked.
Plantillas
Las plantillas te permiten crear HTML de correo electrónico reutilizable con variables dinámicas:
resend templates create # Constructor interactivo de plantillas
Las variables usan la sintaxis {{variable_name}} con valores de respaldo. Una vez creadas, haz referencia a las plantillas por ID al enviar correos electrónicos.
Contactos y audiencias
Resend tiene gestión de contactos integrada para correos electrónicos de marketing:
resend contacts create --audience-id <id> --email user@example.com --first-name "Alice"
resend contacts list --audience-id <id>
resend contacts update --id <contact-id> --unsubscribed false
Ejecutar diagnósticos
El comando doctor verifica tu entorno y señala problemas:
resend doctor
Verifica tu versión del CLI, la validez de la clave API, los dominios verificados e incluso detecta agentes de codificación de IA (Cursor, Claude Desktop, VS Code, OpenClaw).
Uso del CLI de Resend en pipelines de CI/CD
El CLI está diseñado para funcionar bien en entornos automatizados. Algunos patrones a conocer:
Salida legible por máquina
Cada vez que rediriges la salida o pasas --json, el CLI cambia a JSON estructurado. Sin spinners, sin prompts interactivos:
resend emails send --from a@co.com --to b@co.com --subject "Desplegar" --text "Hecho" --json
La bandera --quiet también suprime toda la salida excepto JSON:
resend emails list --quiet | jq '.[0].id'
Confirmación automática de operaciones destructivas
Usa --yes para omitir las indicaciones de confirmación en los scripts:
resend api-keys delete --id <key-id> --yes
Ejemplo de GitHub Actions
- name: Enviar notificación de despliegue
env:
RESEND_API_KEY: ${{ secrets.RESEND_API_KEY }}
run: |
resend emails send \
--from deploys@yourco.com \
--to team@yourco.com \
--subject "Despliegue a producción: ${{ github.sha }}" \
--text "Se desplegó el commit ${{ github.sha }} a producción."
Límites de velocidad
El límite de velocidad de la API de Resend es de 2 solicitudes por segundo, compartido entre todas las claves API de tu equipo. Al enviar lotes, usa send-batch (hasta 100 correos electrónicos por llamada) en lugar de recorrer envíos individuales.
Probando tu API de correo electrónico con Apidog
El CLI de Resend es excelente para el uso interactivo y scripts sencillos. Sin embargo, cuando estás construyendo un backend que llama directamente a la API REST de Resend, necesitas una forma de explorar y probar esos endpoints antes de escribir código de aplicación.
Apidog cubre eso. Es un cliente de API gratuito que te permite enviar solicitudes HTTP, inspeccionar respuestas, organizar tus casos de prueba y configurar entornos para diferentes claves API y configuraciones.
Así es como Apidog encaja en un flujo de trabajo típico de integración con Resend:
Importar la especificación de la API de Resend. Resend proporciona documentación de referencia de la API en resend.com/docs. Puedes importar la especificación de la API a Apidog para obtener una vista organizada de cada endpoint, incluyendo los esquemas de solicitud/respuesta.
Configurar entornos. En Apidog, crea entornos para desarrollo y producción. Almacena tu RESEND_API_KEY como una variable de entorno y haz referencia a ella en tus solicitudes con {{RESEND_API_KEY}}. Cambia entre entornos con un solo clic.
Probar tu lógica de envío. Antes de escribir código para enviar correos electrónicos desde tu aplicación, ejecuta el endpoint POST /emails en Apidog con tu payload exacto. Verifica la respuesta, comprueba que el ID del correo electrónico se devuelve correctamente y confirma el comportamiento para casos extremos (campos faltantes, direcciones inválidas, etc.).
Automatizar pruebas. El ejecutor de pruebas de Apidog te permite encadenar llamadas a la API y verificar los valores de respuesta. Puedes configurar una prueba que envíe un correo electrónico de prueba, lo recupere por ID y luego verifique su estado, todo sin escribir código de prueba.
Esto detecta errores de integración antes de que aparezcan en producción. Combinado con el CLI de Resend para el desarrollo local, tienes tanto una herramienta de terminal rápida como un entorno exhaustivo de prueba de API.
Precios de Resend
El CLI en sí es gratuito y de código abierto. Los precios se aplican a la plataforma de Resend:
| Plan | Precio | Correos mensuales | Límite diario | Retención de registros |
|---|---|---|---|---|
| Gratis | $0/mes | 3,000 | 100/día | 1 día |
| Pro | $20/mes | 50,000 | Sin límite | 3 días |
| Scale | $90/mes | 100,000 | Sin límite | 7 días |
| Empresarial | Personalizado | Personalizado | Personalizado | Personalizado |
Algunas cosas a saber sobre el nivel gratuito:
- El límite de 100/día lo hace adecuado para pruebas y proyectos pequeños, no para tráfico de producción.
- Las analíticas (seguimiento de apertura/clics) requieren un plan de pago.
- La retención de registros es de solo 1 día, por lo que no puedes recuperar el estado de correos electrónicos antiguos después de 24 horas.
- El límite de velocidad es de 2 solicitudes/segundo para todos los planes, compartido entre tu equipo.
- El exceso en los planes de pago está limitado a 5 veces tu cuota mensual para evitar facturas inesperadas.
Las IPs dedicadas son un complemento de $30/mes en el plan Scale, disponible cuando envías más de 500 correos electrónicos/día.
Preguntas Frecuentes
¿Necesito Node.js para instalar el CLI de Resend?
No para los métodos de instalación con cURL o Homebrew, que descargan binarios autónomos precompilados. La ruta de instalación con npm requiere Node.js 20+.
¿Por qué no puedo enviar desde cualquier dirección de correo electrónico?
Resend requiere un dominio verificado. Debes ser el propietario del dominio, añadir los registros DNS que proporciona Resend (SPF, DKIM, DMARC) y pasar el paso de verificación. Los proveedores de correo electrónico gratuitos como Gmail no son compatibles como direcciones de remitente.
¿Puedo enviar a cualquier dirección de correo electrónico en el plan gratuito?
Sí. El plan gratuito no restringe a los destinatarios. Te limita a 3,000 correos electrónicos/mes con un tope de 100/día.
¿Cómo funciona la programación en lenguaje natural?
El CLI analiza frases como "mañana a las 9 am", "en 2 horas", "el próximo viernes a las 3 pm", o marcas de tiempo ISO 8601 estándar. Las horas se interpretan en la zona horaria local de tu sistema a menos que especifiques lo contrario.
¿Qué sucede cuando redirijo la salida (pipe output)?
El CLI detecta cuando está siendo redirigido y cambia automáticamente a una salida solo JSON sin spinners ni prompts. No necesitas pasar --json explícitamente.
¿Puedo usar el CLI con varias cuentas de Resend?
Sí. Usa resend login varias veces para almacenar diferentes perfiles, luego resend auth switch para cambiar entre ellos, o pasa --profile <nombre> en cualquier comando para usar un perfil específico.
¿El CLI de Resend es de código abierto?
Sí, tiene licencia MIT y está alojado en github.com/resend/resend-cli.
¿Cuál es la diferencia entre --quiet y --json?
Ambos producen salida JSON. --json fuerza la salida JSON. --quiet suprime los spinners e indicadores de progreso, lo que también implica el modo JSON. En la práctica, se comportan igual para el formato de salida; --quiet además elimina toda la salida no relacionada con datos.
