remailby ecohost
Documentação

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:

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.