Appearance
Enviar e-mail
POST /v1/sendEnvia um e-mail transacional ou de marketing. Requer API Key com scope email:send.
Headers
| Header | Obrigatório | Descrição |
|---|---|---|
Authorization | Sim | Bearer <api_key> |
Idempotency-Key | Não | Evita reenvio duplicado — veja Paginação e rate limiting |
Corpo da requisição
json
{
"from": "noreply@meudominio.com",
"from_name": "Minha Loja",
"reply_to": "suporte@meudominio.com",
"to": ["cliente@exemplo.com"],
"subject": "Confirmação de pedido",
"html": "<p>Olá! Seu pedido foi confirmado.</p>",
"text": "Olá! Seu pedido foi confirmado.",
"stream": "transactional",
"tags": ["order-confirmation"],
"metadata": { "order_id": "12345" }
}| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
from | string | Sim | Endereço remetente. O domínio precisa pertencer ao tenant e estar verificado |
from_name | string | Não | Nome de exibição do remetente |
reply_to | string | Não | Endereço para respostas |
to | string[] | Sim | 1 a 50 destinatários |
subject | string | Sim | Assunto |
html | string | Não | Corpo HTML |
text | string | Não | Corpo em texto puro |
stream | string | Não | transactional (default) ou marketing — marketing adiciona cabeçalhos de descadastro automaticamente |
tags | string[] | Não | Marcações livres para segmentar métricas |
metadata | objeto | Não | Pares chave/valor livres, devolvidos nos eventos |
Campos fora deste schema no JSON causam erro 400.
Resposta de sucesso — 202 Accepted
json
{
"accepted": [
{ "message_id": "0190f7a2-...", "to": "cliente@exemplo.com" }
],
"rejected": [
{ "to": "outro@invalido", "reason": "invalid_address" }
]
}Cada destinatário de to é resolvido individualmente: um endereço inválido ou em supressão (bounce/complaint/unsubscribe anterior) é listado em rejected com o motivo — isso não faz a requisição inteira falhar.
Motivos possíveis em rejected[].reason: invalid_address, suppressed.
Erros
| Status | Quando |
|---|---|
400 | Corpo inválido, domínio remetente não verificado, stream inválido |
401 | API Key ausente ou inválida |
403 | Chave sem o scope email:send, ou tenant inativo |
409 | Idempotency-Key repetida com corpo diferente |
429 | Rate limit excedido |