Pular para o conteúdo principal
Documentação

Início rápido

Envie seu primeiro email transacional em 5 minutos usando o SDK Node oficial.

Pré-requisitos

  • Node.js 20+ instalado.
  • Uma conta CoffeeMail com pelo menos um domínio verificado (veja Verifique seu domínio).
  • Uma API Key criada em Dashboard → Chaves de API.

1. Instale o SDK

.bash
npm install @coffeemail/node

O pacote @coffeemail/node é distribuído em ESM e CommonJS, com TypeScript estrito e tipagem completa.

2. Configure sua API key

.env.local
# .env.localCOFFEEMAIL_API_KEY=cm_live_sua_chave_aqui

Crie uma chave de API em Dashboard → Chaves de API. Use variáveis de ambiente em produção nunca commit a chave.

3. Alternativa via cURL (sem 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: pt-BR" \  -d '{    "from": "noreply@seudominio.com.br",    "to": ["cliente@example.com"],    "subject": "Bem-vindo ao CoffeeMail",    "html": "<h1>Bem-vindo!</h1><p>Sua conta está ativa.</p>"  }' # {"id":"eml_8f3a2c1b","status":"queued","queuedAt":"2026-09-10T18:21:14.000Z"}

Mesmo endpoint, sem dependências. Use quando estiver fora do Node.js ou em scripts one-off.

4. Envie seu primeiro email

send-email.ts
import { CoffeeMail } from '@coffeemail/node'; const coffeemail = new CoffeeMail(process.env.COFFEEMAIL_API_KEY, {  locale: 'pt-BR',}); const { data, error } = await coffeemail.emails.send({  from: 'noreply@seudominio.com.br',  to: 'cliente@example.com',  subject: 'Bem-vindo ao CoffeeMail',  html: '<h1>Bem-vindo!</h1><p>Sua conta está ativa.</p>',}); if (error) {  console.error(`Falha [${error.code}]:`, error.message);  process.exit(1);} console.log('Email enfileirado:', data.id, data.status);

O SDK retorna no padrão data, error (estilo Supabase/Resend). Erros são tipados (ValidationError, AuthenticationError, etc.).

5. Acompanhe a entrega

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

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