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.
$ 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.
$ 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.
$ 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.
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
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.
$ 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.
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.