Saltar al contenido principal
Documentación

Inicio rápido

Envía tu primer email transaccional en 5 minutos usando el SDK oficial de Node.

Requisitos previos

  • Node.js 20+ instalado.
  • Una cuenta de CoffeeMail con al menos un dominio verificado (ver Verifique su dominio).
  • Una Clave de API creada en Panel → Claves de API.

1. Instala el SDK

.bash
npm install @coffeemail/node

El paquete @coffeemail/node se distribuye en ESM y CommonJS, con TypeScript estricto y tipado completo.

2. Configura tu API key

.env.local
# .env.localCOFFEEMAIL_API_KEY=cm_live_tu_clave_aqui

Crea una clave de API en Dashboard → Claves de API. Usa variables de entorno en producción nunca commitees la clave.

3. Alternativa con cURL (sin SDK)

send.sh
curl -X POST https://api.coffeemail.com.br/v1/product/emails \  -H "Authorization: Bearer $COFFEEMAIL_API_KEY" \  -H "Content-Type: application/json" \  -H "Accept-Language: es" \  -d '{    "from": "noreply@tudominio.com",    "to": ["cliente@example.com"],    "subject": "Bienvenido a CoffeeMail",    "html": "<h1>¡Bienvenido!</h1><p>Tu cuenta está activa.</p>"  }' # {"id":"eml_8f3a2c1b","status":"queued","queuedAt":"2026-09-10T18:21:14.000Z"}

Mismo endpoint, sin dependencias. Úsalo fuera de Node.js o en scripts puntuales.

4. Envía tu primer email

send-email.ts
import { CoffeeMail } from '@coffeemail/node'; const coffeemail = new CoffeeMail(process.env.COFFEEMAIL_API_KEY, {  locale: 'es',}); const { data, error } = await coffeemail.emails.send({  from: 'noreply@tudominio.com',  to: 'cliente@example.com',  subject: 'Bienvenido a CoffeeMail',  html: '<h1>¡Bienvenido!</h1><p>Tu cuenta está activa.</p>',}); if (error) {  console.error(`Fallo [${error.code}]:`, error.message);  process.exit(1);} console.log('Email encolado:', data.id, data.status);

El SDK devuelve en el patrón data, error (estilo Supabase/Resend). Los errores son tipados (ValidationError, AuthenticationError, etc).

5. Sigue la entrega

track-email.ts
const { data, error } = await coffeemail.emails.get('eml_8f3a2c1b');if (error) throw error;console.log('Estado actual:', data.status); // Para ver el timeline completo (queued → sent → delivered):const { data: events } = await coffeemail.emails.getEvents('eml_8f3a2c1b');console.log(events);

data.status puede ser: queued, scheduled, processing, sent, delivered, bounced, complained, failed, skipped, cancelled.