Madmail

Enviar e-mail

Envie um e-mail transacional pela API pública.

POST /v1/emails

Exemplo de requisição

curl -X POST "https://app.madmail.com.br/api/v1/emails" \
  -H "Authorization: Bearer us_SUA_CHAVE" \
  -H "Idempotency-Key: valor" \
  -H "Content-Type: application/json" \
  -d '{
    "to": "cliente@exemplo.com",
    "from": "cliente@exemplo.com"
  }'

Parâmetros

NomeLocalObrigatórioTipoDescrição
Idempotency-KeyheaderNãostring

Corpo da requisição

CampoTipoObrigatórioDescrição
tostring | array<string>Sim
fromstringSim
subjectstringNãoOpcional quando templateId é informado
templateIdstringNãoID de um template do painel
variablesobjectNão
replyTostring | array<string>Não
ccstring | array<string>Não
bccstring | array<string>Não
textstring | nullNão
htmlstring | nullNão
headersobjectNãoCabeçalhos personalizados a serem incluídos nos e-mails
attachmentsarray<object>Não
scheduledAtstringNão
inReplyToIdstring | nullNão

Exemplo

{
  "to": "cliente@exemplo.com",
  "from": "cliente@exemplo.com"
}

Respostas

200 — Recupera o usuário

CampoTipoDescrição
emailIdstring
Exemplo de resposta
{
  "emailId": "abc123"
}

400 — O template referenciado por `templateId` não tem corpo enviável e o e-mail não foi criado: em HTML personalizado, nenhum HTML salvo; no editor visual, nenhum bloco com conteúdo (o e-mail sairia em branco). A mensagem nomeia o template e o id. Recusa INTRODUZIDA NESTA VERSÃO — antes destes casos a API respondia 200 e o destinatário recebia um e-mail sem corpo. Uma exceção vale para as DUAS rotas: um envio cujos endereços de `to` estejam TODOS na lista de supressão nunca produz este 400. Em `POST /v1/emails` o envio para antes de o template ser resolvido; em `POST /v1/emails/batch` o item suprimido é apenas registrado no log e pulado, sem contar para a regra do 400 — e se o lote inteiro for assim, a resposta é 200. Nada é enviado nesses caminhos, então também não há e-mail em branco; o que se perde é o aviso de que o template está sem corpo.

CampoTipoDescrição
errorobject
Exemplo de resposta
{
  "error": {
    "code": "string",
    "message": "string"
  }
}