Visão geral da API REST da TrekMail para desenvolvedores
Saiba como funciona a API REST da TrekMail: autenticação com tokens bearer, acesso por plano, limites de taxa e formatos de resposta.
Detalhes do artigo
Tipo, dificuldade, planos e data da última atualização.
▼
Detalhes do artigo
Tipo, dificuldade, planos e data da última atualização.
- Tipo
- Referência
- Dificuldade
- Intermediário
- Planos
- Nano · Starter · Pro · Agency
- Última atualização
- 6 de out de 2026
Abra TrekMail no Claude, escolha Connect, entre e autorize o acesso. Não é preciso criar um token de API. Revise as permissões ou desconecte em Agentes de IA e API → Tokens → Aplicativos conectados.
Sua própria marca White Label: use o endereço MCP do painel da sua marca e dê ao conector o nome dela. Adicione como custom connector; a página pública do TrekMail faz login no TrekMail e não substitui a conexão da sua marca.
A API da TrekMail permite gerenciar domínios, caixas de correio, encaminhamento, DNS, migrações de e-mail e operações de webmail usando um cliente HTTP ou agente de IA. Isso inclui ler e enviar mensagens, rascunhos, agendamento, pastas, contatos, calendários, identidades, modelos e remetentes bloqueados. As solicitações autenticadas usam um token bearer, as respostas são JSON e a atividade da API é registrada para auditoria.
Ler email com uma única chave
Nos planos Pro e Agency, escolha Ler email ao criar uma chave API. A permissão explícita é mailboxes:messages:read; mailboxes:read apenas mostra endereços e dados de configuração. Todas as caixas inclui as atuais e futuras; também pode limitar o acesso a domínios e caixas selecionados. As chaves existentes não recebem novas permissões automaticamente.
Use a chave de conta nas rotas GET abaixo. Enviar, eliminar e alterar dados continua a exigir credenciais e permissões de mensagens separadas. O MCP alojado aceita OAuth, não tm_live_ ou tm_msg_. O erro de tipo de token indica ao agente a rota ou autorização correta.
GET /api/v1/mailboxes/{mailbox}/messages
GET /api/v1/mailboxes/{mailbox}/folders
GET /api/v1/mailboxes/{mailbox}/messages/{uid}
GET /api/v1/mailboxes/{mailbox}/messages/{uid}/raw
GET /api/v1/mailboxes/{mailbox}/messages/{uid}/attachments/{index}
O que você recebe
- API REST v1 com formato JSON de solicitação e resposta.
- Autenticação com token bearer: sem cookies ou sessões em chamadas autenticadas da API.
- Chaves de idempotência nas operações de gravação que as exigem, evitando trabalho duplicado durante novas tentativas.
- Limite de taxa por token com cabeçalhos
Retry-After. - Log de auditoria visível no dashboard em AI Agents & API → Audit Log.
- Servidor MCP com catálogo filtrado pelas credenciais, transporte e configurações de segurança da conexão atual. Portanto, uma conexão restrita a um projeto vê somente as ferramentas que pode usar.
- Aliases de domínio: conecte endereços somente para recebimento de um domínio secundário às mesmas partes locais de um domínio principal, com estados de entrega salvos e ativos, além de remoção segura. Consulte Aliases de domínio via API e MCP.
- Arquitetura de dois tokens: tokens de operações separados para infraestrutura e tokens de mensagens para operações completas de e-mail, como leitura, envio, rascunhos, agendamento, contatos, calendários, identidades, modelos e pastas.
- Informações sobre entregabilidade de saída e devoluções: obtenha no dashboard o resumo de enviados, entregues, devoluções permanentes e temporárias, além de códigos e respostas SMTP por destinatário. Consulte Entregabilidade e devoluções.
- Senhas de app: gerencie senhas separadas para IMAP, SMTP, calendários e contatos e defina quais senhas os apps de e-mail aceitam. Elas não substituem tokens bearer da API nem tokens da API de mensagens. Consulte Senhas de app via API e MCP.
- Uso do armazenamento da caixa de correio:
list_mailboxeseget_mailboxretornamused_mb,quota_mb,allocation_mbeis_pooled, para que um agente identifique caixas próximas do limite sem acessar o dashboard. - Administração White Label: verifique a configuração, gerencie o branding por domínio, convide clientes, controle funções e domínios, suspenda ou restaure o acesso e analise a atividade pela API ou MCP. Consulte o guia de branding e o guia de gerenciamento de equipes.
API do Drive e automação de arquivos
O Drive faz parte da API pública. Ele abrange espaços do Drive da conta e das caixas de correio, uso, navegação em pastas, uploads, gerenciamento de arquivos e pastas, Lixeira, ações em massa, links públicos de compartilhamento, gerenciamento de senhas de dispositivos de sincronização e o status somente leitura do complemento Drive Storage.
O Drive usa onze escopos de tokens de operações: drive:account:read, drive:account:write, drive:account:share, drive:account:purge, drive:mailbox:read, drive:mailbox:write, drive:mailbox:share, drive:mailbox:purge, drive:addon:read, drive:devices:read e drive:devices:write. As ações de cobrança do complemento Drive, como compra, redimensionamento e cancelamento, continuam disponíveis apenas no dashboard e não são expostas como operações de gravação por API ou MCP.
Comece pela Visão geral da API do Drive ou pelo Início rápido da API do Drive.
Arquitetura de dois tokens
A API usa dois tipos independentes de token. Você pode usar um ou ambos conforme suas necessidades:
| Tipo de token | Prefixo | O que ele libera |
|---|---|---|
| Token de operações | tm_live_ |
Ferramentas de conta e infraestrutura: White Label, domínios, DNS, caixas de correio, convites, Drive, migrações, SMTP, tickets, cobrança e Cloudflare |
| Token de mensagens | tm_msg_ |
Operações de webmail: mensagens, pastas, anexos, rascunhos, envio agendado, denúncia de spam/ham, ações em massa, contatos, grupos de contatos, calendário, auxiliares de redação, identidades, modelos e remetentes bloqueados |
Tokens de operações e tokens de mensagens têm escopos e limites de taxa separados. Um único agente pode usar os dois tokens simultaneamente ao configurá-los no ambiente do servidor MCP.
Os tokens de mensagens estão disponíveis nos planos Pro e Agency.
Antes de começar
- Todos os planos têm acesso à API:
- Nano: Email Verifier. Adicione um complemento Drive Storage para obter acesso completo à API e MCP do Drive.
- Starter: acesso completo ao Drive e Email Verifier, além de acesso somente leitura às demais áreas de infraestrutura. Use o dashboard para essas ações de gravação.
- Pro / Agency: acesso completo à API básica, incluindo tokens de mensagens. Os escopos White Label são adicionados enquanto a avaliação ou o complemento pago estiver ativo.
- Vai conectar um agente de IA? Adicione
https://trekmail.net/mcpcomo servidor MCP remoto em qualquer cliente compatível. Se ele aceitar autorização pelo navegador, nenhum token manual será necessário. Consulte Conectar agentes de IA (MCP) para ver opções remotas, CLI/desktop, ponte e hospedagem própria. - Vai criar sua própria integração? Crie um token
tm_live_em AI Agents & API → Tokens → Create token e envie-o comoAuthorization: Bearer …. Consulte Criar e gerenciar tokens de API. - Ainda não conhece a API? Clique em Start tour na parte superior da página AI Agents & API para ver uma breve apresentação dos métodos de conexão, gerenciamento de tokens, aplicativos conectados e log de auditoria.
Como funciona a autenticação
Todas as solicitações devem incluir seu token no cabeçalho Authorization:
Authorization: Bearer tm_live_abc123...
Os tokens de operações começam com tm_live_ e os tokens de mensagens com tm_msg_. Ambos são exibidos uma única vez na criação e não podem ser mostrados novamente.
Se o token estiver ausente, revogado ou expirado, a API retornará 401 com o código de erro unauthenticated.
URL base e controle de versão
Todos os endpoints ficam em:
https://trekmail.net/api/v1
A URL base é exibida no dashboard AI Agents & API, em Quick Reference. A versão fica no caminho da URL. Se uma v2 for lançada algum dia, a v1 continuará funcionando.
Formato da resposta
As respostas bem-sucedidas retornam JSON com uma chave data para recursos individuais ou uma lista paginada:
{
"data": [
{ "id": 1, "domain": "example.com", "status": "active" }
],
"links": { "next": "...", "prev": null },
"meta": { "current_page": 1, "last_page": 1, "total": 1 }
}
As respostas de erro seguem uma estrutura consistente:
{
"error": {
"code": "unauthenticated",
"message": "Invalid or expired API token",
"hint": "Check that your token is correct and has not been revoked.",
"request_id": "req_abc123",
"retryable": false
}
}
IDs de solicitação
Todas as respostas incluem um cabeçalho X-Request-Id. Você também pode enviar seu próprio valor por meio de X-Request-Id na solicitação. Ele será repetido na resposta e registrado na trilha de auditoria.
Limites de taxa
Cada token tem um limite por minuto. Quando você atinge o limite, a API retorna 429 com um cabeçalho Retry-After que indica quando tentar novamente.
As operações destrutivas (intenções de exclusão) têm um limite diário adicional por token e um intervalo entre exclusões consecutivas.
As operações de gravação de migração (iniciar, cancelar, tentar novamente) têm um limite dedicado de 10 solicitações por minuto e por token, além de um limite de simultaneidade em todo o servidor que retorna 503 quando muitas migrações estão em execução globalmente.
Os tokens de mensagens usam limites separados. Os padrões são 30 solicitações de leitura por minuto e por token, 60 solicitações de envio por minuto e por token, 5,000 leituras bem-sucedidas por dia e por token, e 100 envios por API por dia em uma caixa de correio. Um segundo contador de segurança para envio tem o padrão de 500 por token e por dia; normalmente o limite menor da caixa é aplicado primeiro. Essas proteções da API não substituem os limites do SMTP gerenciado do seu plano nem os limites próprios de um provedor externo.
Idempotência
Endpoints que alteram estado e são marcados como idempotentes exigem um cabeçalho Idempotency-Key. Isso abrange criações, atualizações, envios e exclusões em que uma repetição automática poderia duplicar o trabalho. Ações POST semelhantes a leitura, como detecção de provedor ou teste de conexão, não exigem a chave; consulte a tabela de endpoints ou a especificação OpenAPI. Se você enviar a mesma chave com o mesmo corpo, a API repetirá a resposta original sem criar duplicatas. Os envios de mensagens são a exceção depois que a entrega falha (por um limite de envio, por exemplo): a API não repete mais o 202 anterior, então a mesma mensagem pode ser enviada de novo mais tarde com o mesmo conteúdo. Se você enviar seu próprio X-Request-Id, use um novo nessa tentativa: a API também trata como repetição um envio da mesma caixa com o mesmo X-Request-Id, então com o antigo você só recebe de volta a entrega original, que falhou, e nada é enviado. Uma nova tentativa de um envio que ainda está pendente ou que já foi entregue continua recebendo a resposta original.
Idempotency-Key: create-mailbox-alice-2024
Se você enviar a mesma chave com um corpo diferente, a API retornará 409 Conflict.
Alocação de armazenamento da caixa de correio
Todos os endpoints que criam uma caixa de correio ou convite, POST /api/v1/mailboxes, /api/v1/mailboxes:bulk, /api/v1/mailboxes/invites, /api/v1/mailboxes/invites:bulk, aceitam um inteiro opcional storage_allocation_mb.
| Valor | Significado |
|---|---|
Omitido (ou null) |
A caixa de correio usa o pool compartilhado da conta (padrão). |
| Inteiro positivo (MB) | A caixa de correio é dedicada. Esse valor exato é reservado no pool da conta apenas para esta caixa. |
As alocações são validadas em relação ao pool ativo menos as caixas dedicadas existentes e os convites dedicados pendentes. Os endpoints em massa também validam a soma das alocações do lote e rejeitam o lote inteiro com 422 storage_pool_exceeded se ele exceder a capacidade. O pool é atualizado quando uma caixa dedicada é excluída, quando um convite é resgatado (a alocação passa para a nova caixa) e quando um convite pendente expira.
Nos convites, a alocação é registrada no código de acesso e copiada para a nova caixa no momento do resgate. Se o pool não comportar mais a alocação solicitada nesse momento (por exemplo, outro administrador aumentou sua alocação dedicada nesse intervalo), o resgate rebaixa de forma segura a nova caixa para o pool compartilhado em vez de falhar, e o destinatário vê um aviso na página de sucesso.
Novas caixas de correio comuns, inclusive as criadas em massa, por convites ou por agentes de IA, seguem a configuração Configurações da conta > Novas caixas > Os apps de e-mail precisam de senhas de app, ativada por padrão. Alterar essa opção não muda as caixas existentes. POST /api/v1/mailboxes permite escolher app_password_only ou password_or_app_password em client_auth_mode; se omitido, vale a configuração da conta. Os recursos de listagem e detalhes das caixas retornam client_auth_mode e app_passwords_count (senhas de app ativas). Caixas compartilhadas não têm senhas de app nem modo de acesso próprios.
As seis ferramentas MCP para gerenciar senhas de app são list_mailbox_app_passwords, create_mailbox_app_password, rotate_mailbox_app_password, revoke_mailbox_app_password, set_mailbox_client_auth_mode, update_account. update_account: Define new_mailbox_client_auth_mode para caixas futuras; as existentes mantêm seu modo. Requer mailboxes:write, um token ou conector do proprietário sem restrições de recursos e TREKMAIL_ALLOW_DESTRUCTIVE=true no stdio auto-hospedado.
Acesso da caixa de correio ao Drive
Todas as caixas de correio têm um nível drive_access que determina quanto do Drive a pessoa pode acessar no webmail. Ele é retornado no recurso da caixa e pode ser definido com PATCH /api/v1/mailboxes/{id} ou, para várias caixas de uma vez, com POST /api/v1/mailboxes:drive-access.
| Valor | Significado |
|---|---|
full |
Tudo: aba Drive, upload e compartilhamento, pesquisa de arquivos e sincronização com um computador. É o padrão. |
attachments_only |
Sem Drive no webmail e sem sincronização. O envio continua funcionando; um arquivo acima do limite de anexos é enviado como link para download e essa cópia é excluída após o período de retenção. |
disabled |
Sem Drive, e um arquivo acima do limite não pode ser anexado. |
O armazenamento é compartilhado em toda a conta, portanto este controle determina quanto desse pool uma única pessoa pode preencher com arquivos.
Suspensão do login da caixa de correio
O login de uma caixa de correio pode ser suspenso enquanto ela continua recebendo mensagens: webmail, IMAP, SMTP e senhas de dispositivos são recusados e as sessões abertas são encerradas, mas a entrega não é afetada. Nada é devolvido e tudo estará esperando quando o login for restaurado. Defina isso com POST /api/v1/mailboxes/{id}:suspend-login (e :resume-login) ou, para várias caixas, com POST /api/v1/mailboxes:login-access.
O recurso da caixa informa isso como login_suspended, login_suspended_at e login_suspended_reason. Consulte login_suspended para saber se a pessoa pode entrar e status para saber se a caixa está funcionando. Uma caixa suspensa permanece active, pois continua aceitando mensagens. :pause é diferente: ele define status como disabled e também interrompe a entrega.
A suspensão do acesso revoga permanentemente todas as senhas de app. Restaurar o acesso não as restaura. Quando um administrador define uma nova senha da caixa pelo painel, pela API ou por um agente de IA, todas as senhas de app também são revogadas, assim como na recuperação de senha, na conversão para caixa compartilhada e ao mover para Excluídos recentemente. Restaurar uma caixa excluída não recupera essas senhas.
Consulte Suspender o login da caixa de correio pela API.
O endpoint em massa aceita exatamente um seletor, mailbox_ids, domain_id ou all, e retorna o que fez:
{ "data": { "drive_access": "attachments_only", "matched": 24, "updated": 21, "skipped_shared": 3 } }
domain_id é o seletor indicado quando um domínio corresponde a um cliente. Caixas que já estão no nível solicitado contam como matched, mas não como updated, portanto é seguro repetir a chamada.
Caixas compartilhadas são recusadas no endpoint individual com 422 drive_access_not_applicable e ignoradas, mas contabilizadas, pelo endpoint em massa: elas não têm um usuário próprio de webmail, então os membros as abrem com seu próprio nível e um valor armazenado na linha compartilhada não mudaria nada.
A restrição se aplica tanto à API quanto à interface. O espaço do Drive de uma caixa restrita não aparece em GET /api/v1/drive/spaces, seus arquivos respondem 404 por id e não é possível criar um dispositivo de sincronização para ela.
Endereços de encaminhamento
GET /api/v1/domains/{id}/forwarding-addresses retorna mais do que a lista, porque dois aspectos de um endereço de encaminhamento não são visíveis no próprio endereço:
{
"data": [ { "id": 8, "address": "sales@acme.com", "local_part": "sales",
"domain_id": 4, "recipients": ["team@example.net"], "is_active": true } ],
"limits": { "used": 1, "max": 100, "recipients_per_address": 15 },
"delivery": { "active": true, "requires_plan": "pro",
"paused_until": null, "paused_reason": null }
}
limits.maxé por domínio e depende do plano: 100 no Pro, 300 no Agency e 25 salvos, mas inativos, no Nano ou Starter.delivery.activeindica se essas regras estão encaminhando mensagens agora. Ele éfalseem um plano abaixo derequires_planefalseenquantopaused_untilestiver definido (a conta ultrapassou sua taxa de envio por hora; consulte Limites de envio por plano). Uma regra pode teris_active: truee mesmo assim não entregar, portanto consultedelivery, e não apenasis_active, antes de informar que o encaminhamento funciona.
É permitido criar em um plano que não pode entregar, e a resposta é 201: a regra é armazenada e começa a funcionar após o upgrade. Isso corresponde ao dashboard, que mostra essas regras como salvas e inativas.
As rejeições são retornadas como 422, com error.code definido como validation_error ou limit_exceeded: um endereço já usado no domínio, um destinatário no mesmo domínio (o que causaria um loop), um domínio de destinatário sem MX funcional ou o limite por domínio esgotado.
POST e DELETE nesses endpoints exigem uma Idempotency-Key; PATCH não.
Histórico de entrega
GET /api/v1/domains/{id}/forwarding-addresses/{addressId}/log retorna o que realmente aconteceu com mensagens recentes, começando pela mais nova:
{
"data": [
{ "id": 91, "occurred_at": "2026-07-27T09:12:04+00:00", "outcome": "delivered",
"from": "rfq@northgatesupply.com", "to": "sales@example.net",
"smtp_code": "2.0.0", "smtp_response": "250 2.0.0 OK" }
],
"address": "sales@acme.com",
"window": { "retention_days": 30, "max_events": 200 }
}
outcome pode ser delivered, deferred (falha temporária, ainda tentando novamente), failed (o servidor do destinatário rejeitou) ou blocked. O último significa que nosso filtro de spam interrompeu a mensagem antes do encaminhamento, portanto ela nunca chegou ao destinatário. Tratar blocked como devolução faria alguém investigar o servidor receptor por um problema ocorrido no nosso.
limit (1-200, padrão 100) é o único parâmetro. A janela corresponde à retenção do plano: 30 dias no Agency e 7 nos demais. Não há eventos mais antigos para consultar porque eventos encaminhados são removidos.
Caixas de correio compartilhadas (equipe)
Uma caixa de correio compartilhada é uma caixa de entrada de equipe, como support@ ou sales@, que os membros abrem pela própria conta normal no Webmail e, quando o acesso nativo está ativado, como uma pasta IMAP delegada. Não há senha compartilhada nem login separado. O acesso é uniforme: todos os membros podem ler, e um único sinalizador can_send controla se o membro pode responder como o endereço (true) ou tem acesso somente leitura (false). Não há funções de membros.
GET /api/v1/mailboxes e GET /api/v1/mailboxes/{id} agora retornam mailbox_type ("user" ou "shared") e o booleano is_shared; caixas compartilhadas também incluem shared_member_count. Use esses campos para distinguir uma caixa de equipe de uma normal antes de chamar os endpoints de membros.
| Endpoint | Método | Escopo obrigatório | O que faz |
|---|---|---|---|
/api/v1/mailboxes/{id}/members |
GET | mailboxes:read |
Lista membros de uma caixa compartilhada (cada um: member_mailbox_id, email, can_read, can_send) |
/api/v1/mailboxes/{id}/members |
POST | mailboxes:write |
Adiciona um membro, corpo {member_mailbox_id, can_send?} (can_send usa true como padrão) |
/api/v1/mailboxes/{id}/members/{member} |
PATCH | mailboxes:write |
Alterna o acesso de resposta de um membro, corpo {can_send} |
/api/v1/mailboxes/{id}/members/{member} |
DELETE | mailboxes:write |
Remove um membro (uma caixa compartilhada sempre mantém pelo menos um) |
/api/v1/shared-mailboxes |
POST | mailboxes:create |
Cria uma caixa compartilhada, corpo {domain_id, local_part, display_name, member_mailbox_ids[], storage_shared?, storage_mb?} |
/api/v1/mailboxes/{id}/convert-to-shared |
POST | mailboxes:write |
Converte uma caixa existente em compartilhada, corpo {member_mailbox_ids[]} (altera a senha antiga para impedir login; retorna 202 conversion_pending com nova tentativa automática se a sincronização do backend ainda não estiver confirmada) |
/api/v1/mailboxes/{id}/convert-to-regular |
POST | mailboxes:write |
Converte uma caixa compartilhada novamente em normal, corpo {password} (remove membros e define uma nova senha de login) |
Os endpoints de membros reutilizam seus escopos mailboxes:read / mailboxes:write existentes. Não há um escopo separado para caixas compartilhadas.
Para descobrir o acesso nativo em aplicativos de e-mail, chame GET /api/v1/mailboxes/{member_mailbox_id}/client-setup para a caixa normal de um membro. O objeto shared_mailboxes informa a disponibilidade nativa duradoura, a disponibilidade e o motivo efetivos de Send As, os caminhos exatos de Inbox/Sent/Archive/Junk e as operações permitidas. can_send é a permissão Can reply atribuída, não uma prova de que o SMTP esteja pronto. O endpoint nunca retorna uma senha. Chamá-lo com o id da caixa compartilhada retorna 422 direct_login_unavailable, pois o endereço compartilhado não pode se autenticar diretamente.
Remover um membro, alterar can_send ou converter uma caixa compartilhada em normal sincroniza as permissões do servidor de e-mail quando o acesso nativo está ativado. Uma resposta 503 native_access_sync_failed pode ser repetida e garante que a associação, a permissão ou o tipo de caixa permaneceu inalterado, em vez de aplicar parcialmente a operação.
Endpoints disponíveis
O Drive tem sua própria referência e não é repetido aqui; consulte a Visão geral da API do Drive. Os endpoints SMTP no nível da conta mantidos por compatibilidade com versões anteriores são descritos em Roteamento SMTP por domínio, em vez de serem listados como atuais.
| Endpoint | Método | Escopo obrigatório |
|---|---|---|
/api/v1/domains |
GET | domains:read |
/api/v1/domains/{id} |
GET | domains:read |
/api/v1/domains/{id}/matching-addresses |
GET | domains:read |
/api/v1/domains/{id}/matching-addresses |
PUT | domains:write |
/api/v1/domains/{id}/matching-addresses |
DELETE | domains:write |
/api/v1/domains/{id}/dns-requirements |
GET | domains:dns:read |
/api/v1/domains/{id}/dns-recheck |
POST | domains:dns:recheck |
/api/v1/domains/{id}/spam-metrics |
GET | domains:read |
/api/v1/domains/{id}/spam-metrics/summary |
GET | domains:read |
/api/v1/domains/{id}/deliverability |
GET | domains:read |
/api/v1/domains/{id}/bounces |
GET | domains:read |
/api/v1/domains/{id}/signature |
GET | domains:read |
/api/v1/domains/{id}/forwarding-addresses |
GET | domains:read |
/api/v1/domains/{id}/forwarding-addresses/{addressId}/log |
GET | domains:read |
/api/v1/dns-checks/{id} |
GET | domains:dns:read |
/api/v1/mailboxes |
GET | mailboxes:read |
/api/v1/mailboxes |
POST | mailboxes:create |
/api/v1/mailboxes/{id} |
PATCH | mailboxes:write |
/api/v1/mailboxes/invites |
POST | mailboxes:invites:create |
/api/v1/mailboxes/invites:bulk |
POST | mailboxes:invites:create |
/api/v1/mailboxes:bulk |
POST | mailboxes:create |
/api/v1/mailboxes/{id}/forwarding |
GET | mailboxes:forwarding:read |
/api/v1/mailboxes/{id}/forwarding |
PUT | mailboxes:forwarding:write |
/api/v1/mailboxes/{id}/rules |
GET | mailboxes:rules:read |
/api/v1/mailboxes/{id}/rules |
POST | mailboxes:rules:write |
/api/v1/mailboxes/{id}/rules/{ruleId} |
GET | mailboxes:rules:read |
/api/v1/mailboxes/{id}/rules/{ruleId} |
PUT | mailboxes:rules:write |
/api/v1/mailboxes/{id}/rules/{ruleId} |
DELETE | mailboxes:rules:write |
/api/v1/mailboxes/{id}/rules/reorder |
PATCH | mailboxes:rules:write |
/api/v1/mailboxes/{id}/auto-reply |
GET | mailboxes:auto-reply:read |
/api/v1/mailboxes/{id}/auto-reply |
PUT | mailboxes:auto-reply:write |
/api/v1/mailboxes/{id}/sieve |
GET | mailboxes:rules:read |
/api/v1/mailboxes/{id}/sieve |
PUT | mailboxes:rules:write |
/api/v1/mailboxes/{id}:delete-intent |
POST | mailboxes:delete |
/api/v1/delete-intents/{id}:confirm |
POST | mailboxes:delete |
/api/v1/me |
GET | (qualquer token de operações válido) |
/api/v1/mailboxes/{id}/message-tokens |
POST | mailboxes:message-tokens:manage |
/api/v1/mailboxes/{id}/message-tokens |
GET | mailboxes:message-tokens:manage |
/api/v1/message-tokens/{id} |
DELETE | mailboxes:message-tokens:manage |
/api/v1/message-tokens/{id} |
PATCH | mailboxes:message-tokens:manage |
/api/v1/messages |
GET | messages:read (token de mensagens) |
/api/v1/messages/{uid} |
GET | messages:read (token de mensagens) |
/api/v1/messages/{uid} |
PATCH | messages:write (token de mensagens) |
/api/v1/messages/send |
POST | messages:send (token de mensagens) |
/api/v1/messages/deliveries/{requestId} |
GET | messages:read (token de mensagens) |
/api/v1/messages/sending-limits |
GET | messages:read (token de mensagens) |
/api/v1/messages/_ping |
GET | messages:read (token de mensagens, diagnóstico) |
/api/v1/messages/{uid}/attachments/{index} |
GET | messages:read (token de mensagens) |
/api/v1/messages/{uid}/attachments |
GET | messages:read (token de mensagens) |
/api/v1/messages/{uid}/raw |
GET | messages:read (token de mensagens; retorna raw_base64, encoding, content_type, size_bytes) |
/api/v1/messages/folders |
POST | messages:write (token de mensagens) |
/api/v1/messages/folders/{path} |
PATCH | messages:write (token de mensagens) |
/api/v1/messages/folders/{path} |
DELETE | messages:write (token de mensagens) |
/api/v1/messages/{uid}:spam |
POST | messages:write (token de mensagens) |
/api/v1/messages/{uid}:ham |
POST | messages:write (token de mensagens) |
/api/v1/messages/bulk |
POST | messages:write (token de mensagens) |
/api/v1/messages/folders:empty |
POST | messages:write (token de mensagens) |
/api/v1/messages/drafts |
POST | messages:write (token de mensagens); retorna uid + uidvalidity |
/api/v1/messages/drafts/{uid} |
PUT | messages:write (token de mensagens); exige o uidvalidity do rascunho |
/api/v1/messages/scheduled |
POST | messages:send (token de mensagens) |
/api/v1/messages/scheduled |
GET | messages:read (token de mensagens) |
/api/v1/messages/scheduled/{id} |
PATCH | messages:send (token de mensagens) |
/api/v1/messages/scheduled/{id} |
DELETE | messages:send (token de mensagens) |
/api/v1/messages/contacts |
GET | messages:read (token de mensagens) |
/api/v1/messages/contacts |
POST | messages:write (token de mensagens) |
/api/v1/messages/contacts/{id} |
PATCH | messages:write (token de mensagens) |
/api/v1/messages/contacts/{id} |
DELETE | messages:write (token de mensagens) |
/api/v1/messages/contacts/import |
POST | messages:write (token de mensagens) |
/api/v1/messages/contacts/export |
GET | messages:read (token de mensagens) |
/api/v1/messages/contact-groups |
GET | messages:read (token de mensagens) |
/api/v1/messages/contact-groups/{id}/members |
GET | messages:read (token de mensagens) |
/api/v1/messages/external-accounts |
GET | messages:read (token de mensagens) |
/api/v1/messages/external-accounts |
POST | messages:write (token de mensagens) |
/api/v1/messages/external-accounts/{id} |
PATCH | messages:write (token de mensagens) |
/api/v1/messages/external-accounts/{id} |
DELETE | messages:write (token de mensagens) |
/api/v1/messages/external-accounts/detect |
POST | messages:read (token de mensagens) |
/api/v1/messages/external-accounts/test |
POST | messages:write (token de mensagens) |
/api/v1/messages/external-accounts/{id}/test |
POST | messages:write (token de mensagens) |
/api/v1/messages/_me |
GET | qualquer token de mensagens (introspecção) |
/api/v1/messages/calendar/events |
GET | messages:read (token de mensagens) |
/api/v1/messages/calendar/events |
POST | messages:write (token de mensagens) |
/api/v1/messages/calendar/events/{id} |
PATCH | messages:write (token de mensagens) |
/api/v1/messages/calendar/events/{id} |
DELETE | messages:write (token de mensagens) |
/api/v1/messages/{uid}/reply |
GET | messages:read (token de mensagens) |
/api/v1/messages/{uid}/reply-all |
GET | messages:read (token de mensagens) |
/api/v1/messages/{uid}/forward |
GET | messages:read (token de mensagens) |
/api/v1/messages/contact-groups |
POST | messages:write (token de mensagens) |
/api/v1/messages/contact-groups/{id} |
PATCH | messages:write (token de mensagens) |
/api/v1/messages/contact-groups/{id} |
DELETE | messages:write (token de mensagens) |
/api/v1/messages/contact-groups/{id}/members |
POST | messages:write (token de mensagens) |
/api/v1/messages/contact-groups/{id}/members |
DELETE | messages:write (token de mensagens) |
/api/v1/messages/identities |
GET | messages:read (token de mensagens) |
/api/v1/messages/identities |
POST | messages:write (token de mensagens) |
/api/v1/messages/identities/reply-policy |
PATCH | messages:write (token de mensagens) |
/api/v1/messages/identities/{id} |
PATCH | messages:write (token de mensagens) |
/api/v1/messages/identities/{id} |
DELETE | messages:write (token de mensagens) |
/api/v1/messages/templates |
GET | messages:read (token de mensagens) |
/api/v1/messages/templates |
POST | messages:write (token de mensagens) |
/api/v1/messages/templates/{id} |
PATCH | messages:write (token de mensagens) |
/api/v1/messages/templates/{id} |
DELETE | messages:write (token de mensagens) |
/api/v1/messages/blocked-senders |
GET | messages:read (token de mensagens) |
/api/v1/messages/blocked-senders |
POST | messages:write (token de mensagens) |
/api/v1/messages/blocked-senders/{id} |
DELETE | messages:write (token de mensagens) |
/api/v1/mailboxes/{id}/enable-imap |
POST | mailboxes:write (token de operações) |
/api/v1/migrations/test-connection |
POST | migrations:write |
/api/v1/migrations |
GET | migrations:read |
/api/v1/migrations/{id} |
GET | migrations:read |
/api/v1/migrations |
POST | migrations:write |
/api/v1/migrations/{id}:cancel |
POST | migrations:write |
/api/v1/migrations/{id}:retry |
POST | migrations:write |
/api/v1/migrations/{id} |
DELETE | migrations:write |
/api/v1/migrations/bulk/preview |
POST | migrations:write |
/api/v1/migrations/bulk |
POST | migrations:write |
/api/v1/migrations/bulk |
GET | migrations:read |
/api/v1/migrations/bulk/{batch} |
GET | migrations:read |
/api/v1/migrations/bulk/{batch}:cancel |
POST | migrations:write |
/api/v1/migrations/bulk/{batch}:retry |
POST | migrations:write |
/api/v1/migrations/bulk/{batch}:resume |
POST | migrations:write |
/api/v1/migrations/bulk/{batch} |
DELETE | migrations:write |
/api/v1/migrations/bulk/{batch}/jobs/{job}/password |
PATCH | migrations:write |
/api/v1/account |
GET | account:read |
/api/v1/account |
PATCH | mailboxes:write (somente o proprietário, token sem restrições de recursos; MCP: update_account) |
/api/v1/sending-limits |
GET | account:read |
/api/v1/billing/status |
GET | billing:read |
/api/v1/billing/invoices |
GET | billing:read |
/api/v1/domains |
POST | domains:create |
/api/v1/domains/{id} |
DELETE | domains:delete |
/api/v1/domains/{id}/catch-all |
PATCH | domains:write |
/api/v1/domains/{id}/mail-hosting |
PATCH | domains:write |
/api/v1/domains/{id}/forwarding-addresses |
POST | domains:write |
/api/v1/domains/{id}/forwarding-addresses/{addressId} |
PATCH | domains:write |
/api/v1/domains/{id}/forwarding-addresses/{addressId} |
DELETE | domains:write |
/api/v1/domains/{id}/dkim:retry |
POST | domains:write |
/api/v1/domains/{id}/note |
PATCH | domains:write |
/api/v1/domains/{id}/signature |
PATCH | domains:write |
/api/v1/domains/{id}/branding |
GET | domains:read |
/api/v1/domains/{id}/branding |
PATCH | domains:write |
/api/v1/domains/{id}/branding/logo/{slot} |
PUT | domains:write |
/api/v1/domains/{id}/branding/logo/{slot} |
DELETE | domains:write |
/api/v1/domains/{id}/branding/verify-dns |
POST | domains:write |
/api/v1/domains/{id}/branding/preview |
POST | domains:write |
/api/v1/domains/{id}/branding |
DELETE | domains:write |
/api/v1/domains:bulk-add |
POST | domains:create |
/api/v1/mailboxes/{id} |
GET | mailboxes:read |
/api/v1/mailboxes/{id}/client-setup |
GET | mailboxes:read |
/api/v1/mailboxes/{id}/apple-mail-profile |
GET | mailboxes:read |
/api/v1/mailboxes/{id}/bounces |
GET | mailboxes:read |
/api/v1/mailboxes/{id}/password |
POST | mailboxes:write |
/api/v1/mailboxes/{id}/app-passwords |
GET | mailboxes:read |
/api/v1/mailboxes/{id}/app-passwords |
POST | mailboxes:write |
/api/v1/mailboxes/{id}/app-passwords/{appPasswordId}:rotate |
POST | mailboxes:write |
/api/v1/mailboxes/{id}/app-passwords/{appPasswordId} |
DELETE | mailboxes:write |
/api/v1/mailboxes/{id}:client-auth-mode |
POST | mailboxes:write |
/api/v1/mailboxes:client-auth-mode |
POST | mailboxes:write |
/api/v1/mailboxes/{id}/note |
PATCH | mailboxes:write |
/api/v1/mailboxes/{id}:pause |
POST | mailboxes:write |
/api/v1/mailboxes/{id}:restore |
POST | mailboxes:delete |
/api/v1/mailboxes/{id}:resume |
POST | mailboxes:write |
/api/v1/mailboxes/{id}:suspend-login |
POST | mailboxes:write |
/api/v1/mailboxes/{id}:resume-login |
POST | mailboxes:write |
/api/v1/mailboxes:login-access |
POST | mailboxes:write |
/api/v1/mailboxes:drive-access |
POST | mailboxes:write |
/api/v1/mailboxes/{id}/members |
GET | mailboxes:read |
/api/v1/mailboxes/{id}/members |
POST | mailboxes:write |
/api/v1/mailboxes/{id}/members/{member} |
PATCH | mailboxes:write |
/api/v1/mailboxes/{id}/members/{member} |
DELETE | mailboxes:write |
/api/v1/shared-mailboxes |
POST | mailboxes:create |
/api/v1/mailboxes/{id}/convert-to-shared |
POST | mailboxes:write |
/api/v1/mailboxes/{id}/convert-to-regular |
POST | mailboxes:write |
/api/v1/tickets |
GET | tickets:read |
/api/v1/tickets/{id} |
GET | tickets:read |
/api/v1/tickets/{id}/messages |
GET | tickets:read |
/api/v1/tickets |
POST | tickets:write |
/api/v1/tickets/{id}:mark-seen |
POST | tickets:write |
/api/v1/tickets/{id}/reply |
POST | tickets:write |
/api/v1/tickets/{id}:close |
POST | tickets:write |
/api/v1/domains/{id}/smtp |
GET | smtp:read |
/api/v1/domains/{id}/smtp |
PUT | smtp:write |
/api/v1/domains/{id}/smtp/profiles |
GET | smtp:read |
/api/v1/domains/{id}/smtp/profiles |
POST | smtp:write |
/api/v1/domains/{id}/smtp/profiles/{connectionId} |
PUT | smtp:write |
/api/v1/domains/{id}/smtp/profiles/{connectionId} |
DELETE | smtp:write |
/api/v1/domains/{id}/smtp:test |
POST | smtp:write |
/api/v1/domains/{id}/smtp:test-status/{jobId} |
GET | smtp:read |
/api/v1/smtp/default |
GET | smtp:read |
/api/v1/smtp/default |
PUT | smtp:write |
/api/v1/smtp (legado, compatibilidade anterior) |
GET | smtp:read |
/api/v1/smtp (legado, compatibilidade anterior) |
PUT | smtp:write |
/api/v1/smtp/{id} (legado, compatibilidade anterior) |
DELETE | smtp:write |
/api/v1/smtp:test (legado, compatibilidade anterior) |
POST | smtp:write |
/api/v1/smtp:test-status/{jobId} (legado, compatibilidade anterior) |
GET | smtp:read |
/api/v1/messages/{uid} |
DELETE | messages:write (token de mensagens) |
/api/v1/messages/{uid}:move |
POST | messages:write (token de mensagens) |
/api/v1/messages/folders |
GET | messages:read (token de mensagens) |
/api/v1/mailboxes/{id}/aliases |
GET | mailboxes:read |
/api/v1/mailboxes/{id}/aliases |
POST | mailboxes:write |
/api/v1/mailboxes/{id}/aliases/{aliasId} |
PATCH | mailboxes:write |
/api/v1/mailboxes/{id}/aliases/{aliasId} |
DELETE | mailboxes:write |
/api/v1/verify |
POST | verify:write |
/api/v1/verify/bulk |
POST | verify:write |
/api/v1/verify/bulk/{jobId} |
GET | verify:read |
/api/v1/verify/bulk/{jobId}/download |
GET | verify:read |
/api/v1/verify/credits |
GET | verify:read |
/api/v1/verify/bulk |
GET | verify:read |
/api/v1/verify/bulk/{jobId}/cancel |
POST | verify:write |
/api/v1/verify/bulk/{jobId} |
DELETE | verify:write |
/api/v1/cloudflare/validate-token |
POST | cloudflare:read |
/api/v1/cloudflare/zones |
POST | cloudflare:read |
/api/v1/cloudflare/connect |
POST | cloudflare:write |
/api/v1/cloudflare/preview |
POST | cloudflare:read |
/api/v1/cloudflare/apply |
POST | cloudflare:write |
/api/v1/cloudflare/tokens |
GET | cloudflare:read |
/api/v1/cloudflare/tokens/{id} |
DELETE | cloudflare:delete |
Os endpoints da Cloudflare seguem o mesmo fluxo do dashboard: validar um token, listar zonas, conectar domínios, visualizar as alterações de DNS e aplicá-las. Tanto /cloudflare/preview quanto /cloudflare/apply aceitam dois controles opcionais por domínio:
included_records, uma lista de permissões dos registros que podem ser alterados, organizada por ID de domínio:{ "123": ["mx_primary", "spf_record"] }. Os registros omitidos são ignorados, portanto você pode aplicar somente MX e SPF e retornar ao DKIM depois. Omita o campo para aplicar todos os registros.confirmed_conflicts, quando a visualização identifica um registro que já existe com outro valor, inclua o ID desse registro aqui (no mesmo formato{ domain_id: [record_ids] }) para autorizar a substituição.
Os IDs de registros (mx_primary, spf_record, dkim_primary, dmarc_main, …) vêm diretamente da resposta da visualização. Portanto, um agente típico solicita primeiro a visualização e envia para a aplicação os IDs desejados:
POST /api/v1/cloudflare/apply
{
"domain_ids": [123],
"included_records": { "123": ["mx_primary", "spf_record"] },
"confirmed_conflicts": { "123": ["dmarc_main"] }
}
Roteamento SMTP por domínio e padrão da conta
O SMTP é configurado por domínio. Cada domínio escolhe uma de três rotas: envio gerenciado pela plataforma, um perfil SMTP salvo (seu próprio provedor, reutilizável entre domínios) ou "não configurado". Um único padrão para toda a conta decide com qual rota os novos domínios começam.
Endpoints por domínio (smtp:read / smtp:write):
| Endpoint | Método | O que faz |
|---|---|---|
/api/v1/domains/{id}/smtp |
GET | Rota atual: smtp_mode, effective_smtp_mode, profile, effective_profile |
/api/v1/domains/{id}/smtp |
PUT | Define a rota, corpo {smtp_mode: platform|profile|not_configured|inherit, smtp_connection_id?, set_account_default?, apply_to_all?} |
/api/v1/domains/{id}/smtp/profiles |
GET | Lista os perfis SMTP salvos da conta |
/api/v1/domains/{id}/smtp/profiles/{connectionId}/usage |
GET | Lista os domínios e endereços Send As exatos que usam um perfil (sem credenciais) |
/api/v1/domains/{id}/smtp/profiles |
POST | Cria um perfil e o usa para este domínio |
/api/v1/domains/{id}/smtp/profiles/{connectionId} |
PUT | Atualiza um perfil (afeta todos os domínios que o utilizam) |
/api/v1/domains/{id}/smtp/profiles/{connectionId} |
DELETE | Exclui um perfil (os domínios que o utilizam são reatribuídos ao padrão da conta) |
/api/v1/domains/{id}/smtp:test |
POST | Testa uma rota, retorna {job_id, poll_url} |
/api/v1/domains/{id}/smtp:test-status/{jobId} |
GET | Consulta um trabalho de teste |
Algumas observações sobre o corpo da rota:
smtp_mode=platformseleciona o envio gerenciado;smtp_mode=profileexigesmtp_connection_id;not_configuredlimpa a rota.smtp_mode=inheritfaz o domínio acompanhar em tempo real o padrão da conta: sempre que o padrão muda, este domínio muda com ele. A interface web sempre grava rotas concretas, mas o backend ainda oferece suporte ainherit. Por isso,GETretornaeffective_smtp_mode, mostrando o valor ao qualinheritcorresponde no momento.set_account_default: trueé o equivalente na API à opção Make this the account default do dashboard (novos domínios começam nesta rota).apply_to_all: trueé o botão Apply to all domains (uma mudança única de todos os domínios para esta rota).
Endpoints do padrão para toda a conta (smtp:read / smtp:write):
| Endpoint | Método | O que faz |
|---|---|---|
/api/v1/smtp/default |
GET | Retorna default_smtp_mode (null até você definir um), effective_default_smtp_mode (a base do plano usada quando não há definição), default_smtp_connection_id e profile |
/api/v1/smtp/default |
PUT | Define o padrão, corpo {smtp_mode: platform|profile|not_configured, smtp_connection_id?, apply_to_all?} |
Excluir um perfil que era o padrão da conta redefine o padrão para a base do plano.
Endpoints legados. Os endpoints GET/PUT /api/v1/smtp no nível da conta (e DELETE /api/v1/smtp/{id}, POST /api/v1/smtp:test, GET /api/v1/smtp:test-status/{jobId}) permanecem para compatibilidade com versões anteriores, mas não controlam mais o roteamento por domínio: use os endpoints por domínio e /smtp/default acima. As ferramentas MCP legadas get_smtp_config / update_smtp_config foram descontinuadas pelo mesmo motivo.
Branding White Label, clientes e acesso da equipe
O branding é configurado por domínio com branding:read / branding:write. Um domínio usa sua própria marca (mode=custom), herda o padrão da conta (mode=inherit) ou fica desativado. É necessário ter uma avaliação ativa ou um complemento pago do White Label. Após o cancelamento, o proprietário mantém acesso de recuperação somente leitura durante o período de carência exibido. Leia os dns_records do domínio e publique exatamente os registros retornados. Não derive nomes de host nem destinos CNAME de um exemplo.
| Endpoint | Método | O que faz |
|---|---|---|
/api/v1/domains/{id}/branding |
GET | Lê o branding: mode, white_label_addon_active, brand, hosts, os dns_records que devem ser criados, cname_target e mail_zone |
/api/v1/domains/{id}/branding |
PATCH | Atualização por mesclagem parcial: mode, name, primary_color/accent_color, dashboard_enabled/dashboard_label, webmail_enabled/webmail_label, mail_zone_enabled, support_email, support_url, sender_email, scope |
/api/v1/domains/{id}/branding/logo/{slot} |
PUT | Faz upload de um logotipo em base64 (slot = light|dark|favicon; PNG/JPG, ICO para favicon, ≤1 MB, sem SVG). O scope=domain padrão exige o modo custom; um scope=account_default explícito em um domínio inherit exige um token sem restrições. |
/api/v1/domains/{id}/branding/logo/{slot} |
DELETE | Remove um slot de logotipo. Usa as mesmas regras de escopo de domínio/padrão da conta; DELETE recebe scope como parâmetro de consulta. |
/api/v1/domains/{id}/branding/verify-dns |
POST | Coloca na fila a verificação de DNS para os hosts da marca e a zona de e-mail da marca |
/api/v1/domains/{id}/branding/preview |
POST | Cria uma URL de visualização de curta duração (422 no_brand se o branding não tiver sido definido) |
/api/v1/domains/{id}/branding?scope=domain|all |
DELETE | Limpa o branding deste domínio ou de toda a conta |
PATCH é uma mesclagem parcial, portanto os campos omitidos são preservados. Se o branding estiver desativado, informe mode para reativá-lo. Um sender_email personalizado deve pertencer a um domínio com uma chave DKIM verificada. mail_zone_enabled fornece aplicativos de e-mail e sincronização DAV sob o domínio da própria marca. Ele pertence à marca, não a um único domínio, portanto exige mode=custom ou scope=account_default; um domínio inherit retorna 422 inherited_brand. Leia mail_zone.dns_status, mail_zone.client_hosts_status, mail_zone.records, mail_zone.dav_url e mail_zone.dav_ready para acompanhar o provisionamento e use apenas um endereço DAV pronto. Para conhecer o fluxo completo do agente, consulte o Guia de API e MCP de branding White Label.
A superfície White Label no nível da conta adiciona 13 rotas em /api/v1/white-label: status e progresso da configuração, um catálogo de acesso ativo, listagem e ações de ciclo de vida de membros, atividade da conta e histórico de ações e logins por membro. Ela usa members:read, members:write e activity:read. O acesso é sempre a interseção entre o direito da conta, a associação atual da pessoa, a concessão da credencial e qualquer restrição de domínio. Consulte Gerenciar equipes White Label com API e MCP para ver a tabela de rotas e as transições de estado.
A especificação OpenAPI está disponível em /api/openapi.json para importação no Postman, Insomnia ou em geradores de código.
Correções rápidas
- 401 "unauthenticated": verifique se o cabeçalho
Authorization: Bearer <token>está presente e se o token não foi revogado nem expirou. - 403 "plan_api_disabled": o escopo solicitado não está no seu plano. O Nano inclui o Email Verifier (e o Drive, caso você tenha comprado o complemento Drive Storage). Faça upgrade para o Starter ou superior para acessar o restante da API.
- 403 "token_scope_blocked_by_plan": seu token tem escopos que não estão disponíveis no plano atual. Revogue o token e crie um novo com os escopos permitidos.
- 403 "scope_blocked_by_entitlement": uma concessão White Label armazenada está indisponível porque o complemento está inativo ou a operação é uma gravação durante o período de carência. Reative o White Label e depois reemita ou reautorize a credencial.
- 403 "scope_blocked_by_membership": a função atual do membro é mais restrita do que a ação solicitada. Peça ao proprietário para alterá-la; somente reautorizar não pode ampliar a associação.
- 422 "missing_idempotency_key": adicione um cabeçalho
Idempotency-Keyà operação de gravação indicada pela referência do endpoint. - 403 "mailbox_sending_paused": o envio por essa caixa de correio foi interrompido porque as mensagens enviadas deixaram de parecer pertencer ao proprietário, geralmente por causa de uma senha em mãos erradas. A leitura, a listagem e todos os outros endpoints continuam funcionando; apenas o envio é recusado, e tentar novamente não removerá o bloqueio. A senha da caixa de correio precisa ser alterada; depois disso, o suporte reativa o envio. Consulte Por que não consigo enviar e-mails?.
- 429 limite de taxa: aguarde o tempo indicado no cabeçalho
Retry-Afterantes de tentar novamente. Ao atingir o limite diário da API por caixa de correio, a resposta também érate_limited, mas comretryableigual afalse,dimensionigual aapi_mailbox_dailye um horário emresets_at: tentar de novo antes disso não vai funcionar, então aguarde até esse horário. - 429 "sending_limit_exceeded": um dos seus limites de envio se esgotou.
dimensioninforma qual eresets_at, quando ele é renovado. Tentar novamente antes disso não tem como funcionar, por issoretryableéfalse.GET /api/v1/messages/sending-limitsinforma emremaining_todaypara quantos destinatários a caixa ainda pode enviar hoje. Quando o limite mais baixo é o total diário da conta,limit_todayénulleremaining_todaytambém, até esse total se esgotar (aí passa a0); um token de operações consulta o total comGET /api/v1/sending-limits. Sedimensionforrecipients_per_message, divida a mensagem em mensagens menores. Consulte Limites de envio por plano.
Envio de e-mail: corpo, cabeçalhos e entregabilidade
POST /api/v1/messages/send recebe a estrutura de solicitação {to, subject, body: {text, html}, attachments, reply_to_message_id, headers}.
body.textebody.htmlsão opcionais, mas pelo menos um deles é obrigatório. Se você fornecer apenasbody.text, geramos automaticamente uma alternativa em HTML usando parágrafos<p>(linhas em branco separam parágrafos; quebras de linha únicas se tornam<br>), para que a mensagem seja exibida como um e-mail comum em todos os clientes modernos. Se precisar de texto monoespaçado, envie o literal<pre>...</pre>embody.html.headersé um objeto opcional de cabeçalhos de saída fornecidos pelo usuário. A lista permitida éList-Unsubscribe,List-Unsubscribe-Post,Reply-Toe qualquer cabeçalho personalizado de rastreamentoX-*. Outros nomes (From,Subject,Message-Id,Authentication-Resultsetc.) são gerenciados pela plataforma e rejeitados com422. Valores que contêm CR/LF também são rejeitados (proteção contra injeção de cabeçalho). Os valores são limitados a 998 caracteres de acordo com a RFC 2822.- Para casos de envio em massa ou automação, consulte a seção Cabeçalhos de entregabilidade para remetentes em massa para configurar
List-Unsubscribee a opçãoauto_list_unsubscribeem toda a conta.
Uma resposta 202 significa que a mensagem foi aceita, mas ainda não foi enviada. Os limites de envio são verificados de novo quando a mensagem sai da fila, então confira o resultado com GET /api/v1/messages/deliveries/{request_id}, usando o request_id da resposta 202. Qualquer token de mensagens da mesma caixa pode fazer essa consulta, não só o que enviou a mensagem; um request_id desconhecido retorna 404. Se um limite bloqueou o envio, status é failed e failure informa o limite (dimension) e quando ele é renovado (resets_at). Uma mensagem cujo envio falhou pode ser enviada de novo mais tarde com o mesmo conteúdo. Se você enviar seu próprio X-Request-Id, use um novo, porque o antigo só retorna a entrega original. Uma mensagem agendada que atinge um limite no horário de envio fica retida como limit_reached e é guardada por 7 dias: liste essas mensagens com GET /api/v1/messages/scheduled?status=limit_reached, envie uma delas mais tarde definindo um novo scheduled_for com PATCH /api/v1/messages/scheduled/{id} ou remova-a com DELETE.
Artigos relacionados
Vá para guias próximos que dão continuidade ao fluxo de trabalho.