# Operations Newsletter — Master Implementation Guide (LLM-Ready) > Edições escritas no editor (ou rascunhadas por um agente), enviadas do > domínio da conta pelo Messages, só para quem confirmou que quer receber, > medidas por **clique** (nunca por abertura), com todo consentimento > registrado e o descadastro em um clique. "O agente escreve. Só gente agenda." > > Este arquivo é a documentação para agentes. **Leia a seção 11 antes de > prometer qualquer coisa**: ela diz o que o produto não faz. Worker (API, cliques, descadastro, arquivo, MCP): https://newsletter.worker.myoperations.click Painel: https://newsletter.dashboard.myoperations.click Servidor MCP: https://newsletter.worker.myoperations.click/mcp — ver a seção 9. O mapa da linha (todos os produtos, login): https://myoperations.click/llms.txt ## 0. Estado e credenciais — leia antes de tudo - **No ar desde 07/10/2026.** `GET https://newsletter.worker.myoperations.click/status` responde `{"service":"operations-newsletter",…}` com as promessas do produto. - **Envio pelo Messages, do Infrastructure**, no fluxo de envio em massa; as confirmações e os testes vão pelo fluxo transacional. SMTP próprio ainda não. - **Login:** o Auth da linha (`https://auth.worker.myoperations.click`, aplicação Operations), com código por e-mail. Mesmo login, autorização por produto. Passo humano obrigatório: a pessoa lê um código no e-mail e o informa. Não tente contornar. - **Chave da conta:** `nk_…`, mostrada uma vez, para sistemas (`Authorization: Bearer nk_…`). **É recusada no `/mcp`**, e as rotas de agendar, apagar uma pessoa e ver quem clicou a recusam: são da sessão de uma pessoa. - **Preço:** não há preço público e nada é cobrado. Não cite valor, plano, franquia em minutos nem "grátis". Se perguntarem: "Ainda não há planos, e nada é cobrado." ## 1. Modelo mental - **Lista** — uma por conta, com **segmentos** por propriedade (igual, diferente, existe). - **Assinante** — estados: Confirmado, Aguardando confirmação, Descadastrado, Rejeitado. **Confirmação dupla sempre**; o convite vence em 7 dias, e a página de confirmação confirma por um botão (POST), não ao abrir o link. A **prova do consentimento** guarda o texto e a versão, a página, o formulário e as horas do pedido e da confirmação. - **Formas de entrar:** a caixa do arquivo público (com a caixa de consentimento, 5 por hora por endereço), um evento `form.consented` de entrada, ou `POST /api/subscribers` com a prova. Ninguém consente por outra pessoa. - **Edição** — blocos Título, Parágrafo, Imagem (por um endereço `https`), Botão, Citação, Divisor. Estados: Rascunho, Em revisão, Agendada, Enviando, Enviada. Versões e trilha de quem escreveu e revisou. - **Remetente** — nome, endereço, responder-para e linha de endereço no rodapé. O SPF, o DKIM e o DMARC do domínio são medidos no DNS público. ## 2. Agendar — só uma pessoa - Pede os campos do remetente preenchidos, SPF, DKIM e DMARC passando e um teste enviado. - "Segure para agendar": 3 segundos, de uma pessoa. A rota de agendar aceita **só a sessão de uma pessoa**; OAuth e `nk_` são recusados. - O conteúdo congela quando o envio começa; cancelar devolve a rascunho. - Nenhuma pessoa recebe a mesma edição duas vezes. ## 3. Medir — clique, nunca abertura - **Clicaram** — cada link passa pelo redirecionamento da própria Newsletter (`GET /c/:token`), contado por pessoa e por link; clique suspeito de robô fica fora. - **Não há taxa de abertura**: nenhum pixel. O Apple Mail e outros carregam as imagens de toda carta sozinhos, então a abertura contaria robôs. ## 4. Sair da lista - Descadastro em um clique (RFC 8058): toda carta leva `List-Unsubscribe` e `List-Unsubscribe-Post: List-Unsubscribe=One-Click`. `POST /u/:token` descadastra na hora, sem login e sem cookie; `GET /u/:token` só mostra a página. - Rejeições e reclamações voltam do provedor: três rejeições temporárias marcam Rejeitado; uma reclamação de spam descadastra e suprime o endereço. O Messages pausa o envio em massa com 0,3% de reclamações. - **Apagar uma pessoa** (só no painel, digitando o e-mail) tira a pessoa e a prova; os cliques continuam contados, sem nome. ## 5. Arquivo público `https://newsletter.worker.myoperations.click/` mostra as edições que a conta escolheu publicar, com a caixa de inscrição, `//`, `//rss.xml` e `//llms.txt`. ## 6. Rotas Base: `https://newsletter.worker.myoperations.click`, sem versão no caminho, com a sessão do painel (ou a `nk_`, onde aceita). Coleções respondem `{items, page}`; erros, `{error: {code, message}}`. ``` GET /status o serviço e as promessas dele GET /api/issues · POST /api/issues as edições GET /api/issues/:ref · PATCH · DELETE uma edição (DELETE só rascunho) GET /api/issues/:ref/versions as versões POST /api/issues/:ref/test o teste para o dono da conta; de agente, vira pedido POST /api/issues/:ref/schedule agenda { scheduledAt, segmentId } — só a sessão POST /api/issues/:ref/unschedule cancela — só a sessão POST /api/issues/:ref/duplicate duplica como rascunho GET /api/issues/:ref/stats só totais: sem nomes nem endereços GET /api/issues/:ref/clickers quem clicou — só a sessão GET /api/subscribers · POST os assinantes; POST exige a prova e entra como "Aguardando confirmação" GET /api/subscribers/count a contagem por estado e segmento POST /api/subscribers/:id/unsubscribe descadastra DELETE /api/subscribers/:id apaga a pessoa ({ confirm: }) — só a sessão GET /api/segments · POST · DELETE os segmentos POST /api/sender/dns-check mede SPF, DKIM e DMARC agora GET /api/sources · POST · POST …/:id/rotate fontes de entrada GET /api/webhooks · POST · PATCH · DELETE os destinos GET /api/deliveries · POST …/:id/retry as entregas, com reenvio GET /api/pending-actions · POST …/:id/approve|reject o que um agente pediu GET /api/keys · POST · DELETE a chave nk_ GET /c/:token o clique, contado, e 302 GET /u/:token · POST /u/:token o descadastro GET /confirm/:token · POST a confirmação POST /subscribe a caixa do arquivo público ``` ## 7. Webhooks para fora Até 20 destinos. Padrão **Standard Webhooks** com o prefixo `x-ccm`: ``` x-ccm-id: x-ccm-timestamp: 1790265731 x-ccm-signature: v1, ``` | Evento | Quando | |---|---| | `subscriber.confirmed` | a pessoa confirmou; leva a prova | | `subscriber.unsubscribed` | saiu (link, cabeçalho, reclamação ou por você) | | `issue.scheduled` · `issue.sent` | agendada e enviada, com totais (sem pessoa) | | `issue.clicked` | uma pessoa clicou num link; um por pessoa e por link | | `issue.bounced` | o servidor de destino recusou o endereço | | `list.counted` | uma vez por dia, o tamanho da lista (sem pessoa) | | `action.pending` | um agente pediu algo: um rascunho em revisão ou um teste | Toda entrega é primeiro uma linha na caixa de saída; novas tentativas em 1 min, 5 min, 30 min, 2 h e 12 h; 401 e 403 ficam retidos até o destino voltar; 410 é definitivo; o reenvio leva o mesmo id. ## 8. Eventos de entrada `POST https://newsletter.worker.myoperations.click/events/:sourceId` — uma fonte por sistema, cada uma com o seu segredo, assinatura `x-ccm`. Tipos: - `form.consented` — cria um assinante "Aguardando confirmação" e manda o convite; sem a prova, é recusado. `form.submitted` sem consentimento nunca cria assinante. - `person.updated` — atualiza as propriedades de quem já assina (alimenta os segmentos). - `person.unsubscribed` — descadastra. - `email.delivered`, `email.bounced`, `email.complained` — retorno do provedor. ## 9. Servidor MCP - **Endereço:** `https://newsletter.worker.myoperations.click/mcp` (Streamable HTTP), para a conta inteira — a conta vem do token, nunca de um argumento. - **OAuth 2.1:** metadados em `https://newsletter.worker.myoperations.click/.well-known/oauth-protected-resource`. O token só vale para este servidor. A `nk_` é recusada. | Tool | Regra | O que faz | |---|---|---| | `newsletter_list_issues` | Livre | as edições, com estado, autor e data | | `newsletter_get_stats` | Livre | os números de uma edição, sem nomes nem endereços | | `newsletter_count_subscribers` | Livre | a contagem por estado e segmento; nunca a lista de e-mails | | `newsletter_create_draft` · `newsletter_update_draft` | Confirma | "Rascunho do agente", em revisão, espera aprovação | | `newsletter_send_test` | Confirma | o teste, só para o endereço de quem aprovar | | `newsletter_schedule` · `newsletter_unsubscribe` · `newsletter_delete_subscriber` | Só humano | **não são registradas** | Nenhum agente envia, agenda, inscreve alguém ou vê endereços de e-mail. A tela "Perguntar" do painel não tem modelo por trás: não prometa que ela responde perguntas. ## 10. Retenção A prova fica enquanto a conta existir, e sai junto com a pessoa. O produto não afirma prazo legal de guarda. ## 11. Escopo — o que este produto NÃO faz - **Taxa de abertura.** Nunca. - **SMTP próprio**: ainda não. - **Enviar imagem pelo painel**: a imagem entra por um endereço `https`. - **Entregar o e-mail** por conta própria: quem entrega é o Messages. - **Inscrever alguém sem confirmação.** - **Conformidade legal certificada.** "A LGPD garante revogar o consentimento a qualquer momento, de forma fácil" é o que o produto faz, não parecer jurídico. - **Cobrança.** Não há plano publicado, e nada é cobrado. ## 12. Checklist para agentes de IA 1. **Não prometa abertura.** O número é o clique. 2. **Não inscreva ninguém sem confirmação dupla.** 3. **Rascunhe com `newsletter_create_draft`;** agendar é de uma pessoa. 4. **Confira o DNS do remetente** (SPF, DKIM, DMARC) antes de dizer que está pronto para enviar. 5. **Não invente rota nem tool.** A seção 6 lista as rotas; a 9, as tools.