E-mail: envio pela API
O envio usa a mesma API REST do Resend: qualquer SDK do Resend funciona apontando a URL base para https://api.remail.host.eco.br.
1. Crie uma chave de API
Em Chaves de API, crie uma chave e copie na hora: ela só aparece uma vez. Chaves só envio podem ficar presas a um domínio.
2. Adicione e verifique o domínio de envio
Em Domínios de envio, adicione o domínio e publique os registros DNS mostrados:
- MX e TXT (SPF) em
send.seudominio.com.br: o endereço de retorno que recebe as devoluções. - TXT (DKIM) em
rmail._domainkey.seudominio.com.br: a chave pública que assina os seus e-mails.
Se o DNS do domínio está em Domínios, um botão grava esses registros com um clique. O painel verifica o DNS a cada 10 minutos por até 72 horas; Verificar registros DNS confere na hora.
3. Envie
Node.js com o SDK oficial:
import { Resend } from 'resend'; const resend = new Resend('re_123456789', { baseUrl: 'https://api.remail.host.eco.br' }); await resend.emails.send({ from: 'Acme <onboarding@acme.com>', to: ['delivered@example.com'], subject: 'Hello world', html: '<strong>It works!</strong>', });
Ou com curl:
curl -X POST 'https://api.remail.host.eco.br/emails' \
-H 'Authorization: Bearer re_123456789' \
-H 'Content-Type: application/json' \
-d '{
"from": "Acme <onboarding@acme.com>",
"to": ["delivered@example.com"],
"subject": "Hello world",
"html": "<strong>It works!</strong>"
}'
Endpoints
POST /emails Send an email
POST /emails/batch Send up to 100 emails
GET /emails List emails
GET /emails/:id Retrieve an email
PATCH /emails/:id Reschedule a scheduled email
POST /emails/:id/cancel Cancel a scheduled email
POST /domains Add a domain
GET /domains List domains
GET /domains/:id Retrieve a domain and its DNS records
PATCH /domains/:id Update tracking and TLS settings
POST /domains/:id/verify Check DNS now
DELETE /domains/:id Remove a domain
POST /api-keys Create an API key
GET /api-keys List API keys
DELETE /api-keys/:id Delete an API key
POST /webhooks Create a webhook
GET /webhooks List webhooks
GET /webhooks/:id Retrieve a webhook (with its signing secret)
PATCH /webhooks/:id Update endpoint, events or status
POST /webhooks/:id/signing-secret/rotate
DELETE /webhooks/:id Remove a webhook
POST /templates Create a template { name, alias?, from?, subject?, html, text?, variables? }
GET /templates List templates
GET /templates/:id One template (by id or alias)
PATCH /templates/:id Change the draft
POST /templates/:id/publish Make the draft what sending uses
POST /templates/:id/duplicate Copy it
DELETE /templates/:id Remove it
POST /contacts Add a contact { email, first_name?, last_name?, unsubscribed?, segments?, topics? }
GET /contacts List contacts (?segment_id=)
GET /contacts/:id One contact (by id or email); PATCH changes it, DELETE removes it
POST /segments Create a segment { name }; GET lists them
POST /contacts/:id/segments/:segment Add a contact to a segment (DELETE takes it out)
POST /topics Create a topic { name, description?, default_subscription: opt_in | opt_out }; GET lists them
GET /topics/:id One topic; PATCH changes { name?, description? }, DELETE removes it
GET /contacts/:id/topics The contact's subscription to each topic; PATCH sets [{ id, subscription }]
POST /broadcasts Create a broadcast { segment_id, topic_id?, from, subject, html?, text?, send?, scheduled_at? }
POST /broadcasts/:id/send Send it now, or at { scheduled_at }
POST /broadcasts/:id/cancel Cancel a scheduled one
GET /dns/domains The organization's domains in Domínios
GET /dns/domains/:id/records Their DNS records
POST /dns/domains/:id/records Add a record { type, name, content, priority?, proxied? }
DELETE /dns/domains/:id/records/:record Remove a record
GET /sites The organization's sites
POST /mcp MCP (JSON-RPC) for agents, with the same API key:
domains_list, dns_records, dns_add_record, dns_delete_record, sites_list
Contatos e campanhas
Em Contatos, adicione ou importe pessoas (uma por linha: e-mail, nome, sobrenome) e agrupe em segmentos. Em Campanhas, escreva um e-mail para um segmento e envie agora ou agende. Cada pessoa recebe a sua cópia, com {{{FIRST_NAME}}} (ou {{{FIRST_NAME|cliente}}}, com um padrão) e um link para cancelar a inscrição; se o conteúdo não tiver {{{RESEND_UNSUBSCRIBE_URL}}}, o link entra no fim. Os apps de e-mail também mostram o botão de cancelar (cabeçalhos List-Unsubscribe). Quem cancela não recebe as próximas. Cada cópia conta no limite do plano. A API é a do Resend: /contacts, /segments, /broadcasts.
Modelos
Em Modelos (ou pela API /templates, igual à do Resend), escreva o e-mail uma vez com {{{NOME}}} onde cada mensagem muda e declare as variáveis, com um valor padrão se quiser. Edições ficam em rascunho até você publicar. Para enviar, troque html/text por template: { id: "boas-vindas", variables: { NOME: "Ana" } }; remetente e assunto vêm do modelo se o envio não informar. Os valores são escapados no HTML.
Entrega
Cada e-mail mostra o que aconteceu depois do envio: enviado (aceito pelo nosso servidor), entregue, entrega atrasada, devolvido ou marcado como spam. Endereços que voltam de vez ou marcam spam entram em Bloqueados e deixam de receber, o que protege a reputação do domínio; dá para tirar um endereço de lá.
Aberturas e cliques
Na página do domínio, em Rastreamento (ou pela API, com open_tracking e click_tracking como no Resend), ligue a contagem de aberturas e de cliques dos e-mails em HTML. Aberturas usam uma imagem invisível e são aproximadas: alguns apps bloqueiam imagens, outros (como o Mail da Apple) carregam todas. Nos cliques, os links passam por nós e seguem para o destino; links mailto: e os marcados com data-remail-no-track ficam como estão.
Erros e limites
Erros seguem o formato do Resend: { "statusCode": 422, "name": "validation_error", "message": "…" }. As cotas contam os e-mails aceitos por mês e por dia (UTC); passar do limite devolve HTTP 429 (daily_quota_exceeded, monthly_quota_exceeded). Veja Planos e cobrança.