Infraestrutura · Messages

O e-mail que o seu sistema precisa mandar. Pelo seu domínio, com o rastro inteiro.

E-mail transacional sobre a infraestrutura da Amazon, com uma API que cabe num curl e um servidor MCP para o seu agente. Você verifica o domínio, manda um POST e passa a saber o que aconteceu com cada mensagem — por 90 dias.

Comece de graça, sem cartão: a chave sai na hora. Só e-mail transacional — sem SMS, sem WhatsApp e sem campanha em massa.

Por que isso existe

Mandar o e-mail é fácil. Difícil é
O DIA SEGUINTE.

A chamada de envio qualquer biblioteca faz. O que não acaba é depois: o provedor devolve eventos soltos — devolveu, reclamou, abriu — e o seu produto precisa de uma resposta confiável sobre UMA mensagem, semanas depois. Traduzir uma coisa na outra é o trabalho que já está escrito aqui.

  • O cliente jura que não recebeu, e "saiu do nosso lado" é a única frase disponível
  • O endereço que já devolveu continua recebendo, e a taxa de bounce sobe em silêncio
  • A auditoria pergunta pelo e-mail de março, e o provedor só guardou 30 dias

O caminho inteiro

Verifica, envia, acompanha.

Quatro blocos — e só o primeiro exige você mexer em outro lugar.

1 · Verificar o domínio

Você adiciona o domínio, nós devolvemos o DNS

Um POST cadastra o domínio e a resposta já traz os registros prontos para colar no seu provedor. Enquanto não verificar, nenhum envio passa — um remetente não verificado vira spam antes de virar problema seu.

bash
$ curl -X POST \
  https://messages.worker.myinfrastructure.click\
/projects/<id>/domains \
  -H "Authorization: Bearer sk_…" \
  -d '{"domain":"suaempresa.com.br"}'

→ 3 CNAME  (DKIM)
→ 1 TXT    (SPF, em send.…)
→ 1 MX     (retorno de bounce)
→ 1 TXT    (DMARC, opcional) ▊

2 · Enviar

Um POST, e a mensagem sai

Responde 202 com o id do envio e o messageId que amarra os eventos que vierem depois. Com Idempotency-Key, a repetição devolve o envio original em vez de entregar outra cópia.

bash
$ curl -X POST https://messages.worker.myinfrastructure.click/emails \
  -H "Authorization: Bearer sk_…" \
  -H "Idempotency-Key: boas-vindas/u-123" \
  -d '{
    "from": "oi@suaempresa.com.br",
    "to": "cliente@exemplo.com",
    "subject": "Bem-vindo",
    "html": "<p>Oi!</p>"
  }'

→ 202 { id, messageId, status } ▊

3 · Acompanhar

A linha do tempo de um envio, e as taxas que a AWS olha

Um GET traz o envio com a sequência de eventos. Outro traz as taxas do período, com os limiares de suspensão da AWS ao lado — um bounce sem a régua não diz nada. A janela vai a 90 dias.

bash
$ curl "https://messages.worker.myinfrastructure.click\
/emails/<id>" -H "Authorization: …"

→ enviado → entregue → aberto

$ curl "https://messages.worker.myinfrastructure.click\
/metrics?days=30" -H "Authorization: …"

→ entrega, devolução, reclamação
→ limiares AWS: 5% e 0,1% ▊

4 · Receber de volta

Os eventos chegam assinados

Cadastre uma URL e receba os eventos de cada envio no padrão Standard Webhooks: id, timestamp e HMAC-SHA256 do corpo nos cabeçalhos x-ccm. Endpoint fora do ar não perde nada — o evento espera na fila e é reenviado.

webhook
POST https://seu-app/webhook

x-ccm-id: 3f9a…
x-ccm-timestamp: 1757000000
x-ccm-signature: v1,n3Rk…

// confira ANTES de ler o corpo
hmac = HMAC_SHA256(
  secret, id + "." + t + "." + body
)
hmac === v1 ? processa : 400 ▊

O que você ganha

Cinco trabalhos que ninguém do seu time escreve.

Não é que fiquem mais fáceis. Cada item é código que existe no worker — não uma estimativa do esforço.

Já vem escrito

  • A dança do DNS três CNAME de DKIM, o SPF em send.<seu-domínio> para não sobrescrever o da raiz, o MX de retorno e o DMARC opcional — devolvidos prontos, com nome e valor.
  • A lista de quem não pode mais receber devolução permanente e reclamação entram sozinhas na supressão do seu projeto, e o próximo envio para aquele endereço é recusado antes de gastar uma chamada à AWS.
  • O rastro que responde "o e-mail saiu?" enviado, entregue, aberto, clicado, devolvido, reclamado — com a hora de cada um, por 90 dias. Sem tabela de evento nem fila para escutar.
  • A conferência de que o aviso veio de nós webhook assinado no padrão Standard Webhooks (x-ccm-id, x-ccm-timestamp, x-ccm-signature), com fila e novas tentativas em 1 min, 5 min, 30 min, 2 h e 12 h.
  • A trava contra mandar duas vezes a chave de idempotência transforma a repetição em consulta. Uma tentativa que FALHOU não queima a chave: tentar de novo com a mesma é o certo.

Repare que nenhum deles é sobre volume de envio todos têm a mesma causa — o que aconteceu com a mensagem não ficou guardado em lugar nenhum que você possa consultar. Resolver a causa é o que a gente faz.

O que prometemos de verdade

Não “nunca cortamos”.
AVISO, MOTIVO, APELAÇÃO.

Suspender é possível, e quem disser que nunca suspende não roda sobre SES: a AWS avalia a conta pelo agregado, e ser leniente com um cliente custa a entrega de todos os outros. Prometer leniência seria prometer o que não controlamos. O que controlamos é o processo — e é ele que está escrito.

  • Aviso antes do corte, com o número que o gerou
  • Motivo escrito, não “violação dos termos”
  • Canal de apelação com quem escreveu o código
  • As taxas visíveis no painel, com os limiares da AWS ao lado

Sendo justo

Eles fazem mais coisas.
E têm MCP tão bom quanto o nosso.

O provedor de e-mail maduro

Onde ele já resolve sozinho

Broadcast, audiences e automações

Ele tem

Envio em lote e agendamento

Ele tem

E-mail de entrada (inbound)

Ele tem

IP dedicado como add-on

Ele tem

SDK em toda linguagem, e MCP com OAuth

Ele tem

Volume provado em escala grande

Anos disso

Vá direto nele se

Você precisa de qualquer coisa acima

O provedor maduro é excelente — e tem MCP tão bom quanto o nosso.

Infrastructure Messages

Transacional, e a operação às claras

Não competimos em superfície de features: eles têm mais. A diferença é o que acontece quando algo dá errado na sua conta — corte sem aviso, log curto e nenhum humano do outro lado é a queixa que derruba a nota deles.

  • Aviso, motivo escrito e apelação antes de qualquer corte
  • Log de envios e eventos por 90 dias, para todos
  • Supressão automática por projeto, sem você escrever a lista
  • Webhook assinado no mesmo contrato do Infrastructure Payments
  • Os limites deste produto publicados nesta página, inclusive os ruins
  • Acesso a quem escreveu o código, sem fila de suporte

A régua

Os cinco eixos que decidem a escolha

A mesma tabela em toda página de produto do Infrastructure. Duas linhas aqui são francamente desfavoráveis, e continuam na tabela — é o que faz as outras valerem alguma coisa.

Reputação isolada entre clientes

Não

A linha mais importante da página, e ela é contra nós. O configuration set do SES separa as MÉTRICAS de cada projeto; o pool de IP é compartilhado, e um cliente com devolução alta degrada a entrega de todos. IP dedicado não existe aqui hoje.

Suspensão sem aviso

Não. Aviso, motivo e apelação

Não prometemos nunca suspender: a AWS cobra o agregado da conta — devolução acima de 5%, reclamação acima de 0,1%. O que prometemos é processo: aviso antes, motivo escrito com o número que o gerou, e canal para responder.

Retenção do log de envios

90 dias

Envios, eventos e métricas, igual para todo mundo — o número está no código, não numa tabela de planos. O padrão do nicho é 30 dias em todos os planos. Os dados vivem no Cloudflare D1; o e-mail em si passa pela AWS, em us-east-1.

SMS, WhatsApp ou campanha em massa

Nenhum dos três

O nome sugere mais do que o produto faz. Só e-mail. Há um fluxo de envio em massa separado do transacional — uma mensagem pronta por pessoa, descadastro em um clique obrigatório, aquecimento e pausa próprios —, mas não há audiência, segmento, agendamento nem automação: a campanha é montada pelo seu sistema. Reclamação numa newsletter pausa só o envio em massa; o recibo e a senha continuam saindo.

Anexos

6 MB por arquivo, 8 MB por mensagem

Abaixo dos 40 MB do SES porque o worker carrega o arquivo inteiro em memória para assinar a chamada à AWS. Publicamos o teto que sustentamos, não o do fornecedor. Acima disso, mande um link.

Se alguma destas linhas não bater com o que você encontrou na prática, escreva. A gente confere e corrige a linha.

Model Context Protocol

Seu agente investiga a entrega. E manda, com trava.

São 12 ferramentas em 3 escopos, na revisão 2026-07-28, a stateless — autenticadas por OAuth 2.1 pelo Infrastructure Auth. O líder do nosso nicho também tem MCP remoto com OAuth: a diferença deste produto não é ter MCP, é o que acontece quando algo dá errado na sua conta.

O que o servidor NÃO oferece

  • Apagar domínio ou projeto, criar ou ler chave de API não existem como ferramenta. Um agente que leia "apague tudo" num documento não encontra o gatilho para obedecer.
  • Nenhuma ferramenta devolve credencial nem a secretKey, nem o valor de uma API key, nem o segredo de um webhook. Segredo que passa por contexto de LLM vaza em log e em transcript.
  • Enviar tem teto próprio no canal do agente 200 envios por dia e chave de idempotência obrigatória. Esse teto é só do canal do agente; a cota do plano vale para todos os canais, REST incluída.

O endereço termina no id do projeto, e isso não é enfeite de URL o id vira a audiência do token, então um consentimento dado a um projeto não vale nos outros — nem um token emitido para o MCP do Storage vale aqui.

Como o agente entra

Nenhuma chave no arquivo.

O token nasce no navegador e vale só no projeto que você aprovou.

OAuth 2.1

Você aprova no navegador, uma vez

Sem header nenhum no comando. Na primeira chamada o servidor responde 401, o cliente descobre o authorization server sozinho e abre o navegador. O token vale só naquele projeto: o id no endereço vira a audiência dele. Em CI, a secretKey ou uma API key rm_ conectam direto.

bash
$ claude mcp add --transport http \
    infrastructure-messages \
    https://messages.worker.myinfrastructure.click/mcp/<id-do-projeto>

→ 401 WWW-Authenticate
→ descobre o auth server
→ abre o navegador
✓ token com aud= este projeto ▊

O que muda na prática

A investigação que hoje é um chamado

O agente começa perguntando ao projeto, e a resposta já avisa se nenhum domínio está verificado — porque nesse caso nenhum envio vai passar. Depois lista, abre a linha do tempo e responde.

conversa
Você: "o cliente diz que não
recebeu o e-mail de ontem"

→ messages_get_project
  1 domínio verificado

→ messages_list_emails
  status: bounced

→ messages_get_email
  devolvido: caixa inexistente ▊

Preço

3, 9 ou 99 domínios

FAQ

As objeções, na ordem em que elas aparecem

Achou um limite que não está escrito aqui?

Fala direto com quem escreveu o código. Se você encontrou onde quebra, a gente quer publicar isso antes do próximo visitante descobrir sozinho.

Verifica um domínio e manda o primeiro e-mail hoje.

Sem cartão e sem “fale com vendas”: a chave sai na hora, e o único passo fora daqui é colar cinco registros no seu DNS.