Documentação interativa · Portal de programadores · Especificação OpenAPI · EN · FR · DE · IT · PT · ES

API de Email Mailpro™ v2 : Referência

URL de base : https://api.mailpro.com/v2

A API Email v2 da Mailpro™ permite-lhe gerir programaticamente listas de contactos, modelos de email, endereços de remetente e campanhas — e enviar emails em massa e transacionais.

Autenticação

Cada endpoint aceita três métodos de autenticação. Utilize o que melhor se adequar à sua stack.

> O Bearer JWT legado e IdClient+ApiKey continuam a funcionar sem alterações e não estão > sujeitos aos scopes. Apenas os tokens de acesso OAuth 2.0 estão sujeitos aos controlos de scope por endpoint > indicados em cada operação abaixo.

Método 1 — OAuth 2.0 (recomendado para integrações)

A Mailpro utiliza um único servidor de autorização OAuth 2.0 para todas as suas API, numa superfície única e independente da versão: https://api.mailpro.com/oauth/. Não existe um endpoint OAuth por versão — obtém um token em /oauth/token e o mesmo token funciona nesta API Email v2, na CRM v3 e na SMS. Os endpoints que pode invocar dependem dos scopes do token, não do URL base da API. Emissor (claim iss): https://api.mailpro.com/oauth/.

EndpointURL
AutorizaçãoGET https://api.mailpro.com/oauth/authorize
Token / renovaçãoPOST https://api.mailpro.com/oauth/token
JWKSGET https://api.mailpro.com/oauth/.well-known/jwks
DescobertaGET https://api.mailpro.com/oauth/.well-known/openid-configuration

Grants: authorization_code + PKCE (S256, obrigatório), client_credentials, refresh_token (rotação). Duração do token de acesso: 20 min; token de atualização: 30 dias (deslizantes, de utilização única); código de autorização: 60 s.

Início rápido — obter um token e invocar esta API (substitua os valores; nunca faça commit de um segredo real):

curl -X POST https://api.mailpro.com/oauth/token \
  -H "Content-Type: application/x-www-form-urlencoded" \
  -d "grant_type=client_credentials" \
  -d "client_id=YOUR_CLIENT_ID" \
  -d "client_secret=YOUR_CLIENT_SECRET" \
  -d "scope=email:send email:read"

Invoque depois esta API com Authorization: Bearer ACCESS_TOKEN. O mesmo token funciona nas API CRM v3 e SMS. Um token a que falte o scope exigido por um endpoint recebe 403 insufficient_scope. Percurso completo e catálogo de scopes: consulte a documentação da API CRM v3 › Autenticação. Scopes úteis para o email: email:send, email:read, email:templates:read, email:templates:write, contacts:read, contacts:write, account:read.

Método 2 — Bearer JWT (legado)

Authorization: Bearer <access_token>

Obtenha um token através de POST /token (codificado como formulário, OAuth2 password grant):

POST https://api.mailpro.com/v2/token
Content-Type: application/x-www-form-urlencoded

grant_type=password&username=YOUR_USERNAME&password=YOUR_API_KEY

O mesmo token também é válido na API CRM v3 e na API SMS — autentique-se uma vez, invoque qualquer API. Os tokens são válidos por 30 dias por predefinição; utilize grant_type=refresh_token para renovar sem ter de se autenticar novamente. Sem scopes — prefira OAuth 2.0 para as integrações instaláveis.

Método 3 — IdClient + ApiKey

Duas credenciais:

ParâmetroTipoDescrição
IdClientintegerO seu ID numérico de cliente Mailpro, disponível em Definições → Acesso à API
ApiKeystringA sua chave de API, disponível em Definições → Acesso à API

Envie-as num destes locais — escolha um:

Se fornecer credenciais em mais do que um local, o cabeçalho prevalece.

Controlo de scopes OAuth por endpoint (Email v2)

Para os tokens emitidos por OAuth, cada grupo de endpoints exige um scope (a autenticação legada está isenta). Cada operação indica o seu scope em Authorization. Resumo:

EndpointsScope exigido
/send/* (campanhas, transacional, agendamento, teste — exceto /send/{IdSend}/status)email:send
/stats/* (exceto /stats/del), /history/list, /send/{IdSend}/statusemail:read
/message/*, /senderEmail/* (leitura)email:templates:read
/message/*, /senderEmail/* (add/edit/del), /stats/delemail:templates:write
/list/list, /email/listcontacts:read
/list/{add,edit,del}, /email/{add,addSingle,edit,del}, /import/uploadcontacts:write
/account/*account:read

Uma recusa por scope devolve 403 com { "error": "insufficient_scope", "required_scope": "…" }.

Formato da resposta

Todos os endpoints suportam json (predefinido) e xml. Indique o formato no URL:

Paginação

Mesma regra nas três API Mailpro (Email v2, CRM v3, SMS): 5000 itens por página, por predefinição e no máximo.

Parâmetros desconhecidos: são ignorados, nunca recusados. Quando um pedido contém um parâmetro que a API não reconhece, a resposta inclui X-Ignored-Parameters (os nomes) e X-Documentation (uma ligação para esta página), para que um erro de escrita não passe despercebido.

Respostas de erro

HTTPSignificado
400Pedido inválido — parâmetro obrigatório em falta ou inválido
401Não autorizado — IdClient ou ApiKey inválido
403Proibido — limite da conta atingido (ex.: número máximo de listas)
404Não encontrado — o recurso solicitado não existe
500Erro interno do servidor

Erros resultantes de regras de negócio:

Acompanhamento da entrega (emails transacionais)

Cada email enviado individualmente (POST /send/sendmail, a CRM API v3, o relay SMTP ou uma automação) recebe um identificador. Pode ser acompanhado até o servidor do destinatário o aceitar ou recusar. As campanhas não são abrangidas aqui: utilize as estatísticas.

statusSignificadoFinal?
queuedAceite, à espera de envio.não
scheduledAgendado para mais tarde (DatePlanned).não
sentEntregue pelos nossos servidores, ainda sem resposta do servidor do destinatário.não
deliveredAceite pelo servidor do destinatário (DiagCode = a sua resposta SMTP).sim
bouncedRecusado. BounceType: hard = endereço inválido ou recusa definitiva; soft = recusa após novas tentativas (caixa cheia, servidor inacessível…).sim
not_foundIdentificador desconhecido ou que não pertence à sua conta.sim

Consultar sem entrar em ciclo

Os estados são conservados durante 365 dias.

Webhooks

A Mailpro™ pode notificar o seu servidor em tempo real quando determinados eventos ocorrem na sua conta (um email é entregue, uma campanha termina, um contacto devolve, etc.). Ao estilo da Stripe — o seu URL recebe um POST assinado com HMAC-SHA256 assim que o evento é disparado.

Cada evento enviado para o seu webhook conta como 1 pedido na sua quota de pedidos à API.

Como funciona

> ⏱ Atraso de ativação — após criar, atualizar ou eliminar um webhook, a > alteração demora até 10 minutos a propagar-se pelos servidores da API > Mailpro. Durante essa janela, os eventos poderão ainda não corresponder à sua nova subscrição > (ou continuar a corresponder a uma que acabou de ser removida). Este é o tempo necessário para > atualizar a cache em memória das subscrições em cada instância da API.

Envelope do payload

Todos os eventos partilham um envelope comum:

{
  "id":         "evt_8f3a9b2c4d1e5f6789abcdef01234567",
  "type":       "email.delivered",
  "created":    1748194800,
  "apiVersion": "v2",
  "account":    { "id": 12345, "name": "ACME Corp" },
  "data":       { "messageId": "...", "email": "[email protected]", "...": "..." }
}
CampoFormatoDescrição
idevt_ + 32 hexID único do evento — utilize-o como chave de idempotência no seu lado.
type<domain>.<verb>Tipo de evento canónico.
createdSegundos Unix UTCIncluído na assinatura HMAC.
apiVersion"v2"Qual a API Mailpro que publicou o evento.
account.idintO seu ID de cliente Mailpro (= IdClient).
account.namestringO nome da sua conta (útil para depuração no cliente).
dataobjectPayload do evento — o formato depende do type (consulte o catálogo abaixo).

Catálogo de eventos

EventoGatilhoFormato de data
pingTeste através de POST /webhooks/{id}/test{ message }
email.processedEnvio aceite pelo pipeline{ messageId, email, campaignId, processedAt }
email.deliveredUm e-mail individual foi aceite pelo servidor do destinatário — API v2/v3, SMTP ou Automation (não campanhas). Emitido a partir do fluxo de entrega do PowerMTA.{ messageId, email, idSending, sendingType, diagCode, deliveredAt }
email.openedPixel de rastreio acionado{ messageId, email, campaignId, openedAt, ip, userAgent }
email.clickedClique numa hiperligação rastreada{ messageId, email, campaignId, clickedAt, url, ip, userAgent }
email.bouncedDevolução definitiva ou temporária{ messageId, email, campaignId, bouncedAt, bounceType, reason }
email.spam_reportQueixa FBL{ messageId, email, campaignId, reportedAt }
email.unsubscribedHiperligação de cancelamento clicada{ messageId, email, campaignId, unsubscribedAt }
email.droppedRecusado antes do envio{ messageId, email, campaignId, droppedAt, reason }
campaign.startedInício do envio{ campaignId, name, totalRecipients, startedAt }
campaign.finishedTodos os destinatários processados{ campaignId, name, totalSent, totalFailed, finishedAt }
credits.lowSaldo de créditos de email abaixo do seu limiar de alerta{ remaining, threshold }

Subscreva todos os eventos desta API passando ["*"] no array events.

Assinatura HMAC

Cada POST transporta um cabeçalho X-Mailpro-Signature:

X-Mailpro-Signature: t=1748194800,v1=7f9ac2b6e4d1c8a3...
X-Mailpro-Event-Id:  evt_8f3a9b2c4d1e5f6789abcdef01234567
X-Mailpro-Event-Type: email.delivered
X-Mailpro-Attempt:   1

Para verificar:

Node.js
const crypto = require('crypto');

function verifyMailproSignature(rawBody, header, secret) {
  const parts = Object.fromEntries(header.split(',').map(p => p.split('=')));
  if (Math.abs(Date.now() / 1000 - parseInt(parts.t)) > 300) return false;
  const expected = crypto
    .createHmac('sha256', secret)
    .update(parts.t + '.' + rawBody)
    .digest('hex');
  return crypto.timingSafeEqual(
    Buffer.from(parts.v1, 'hex'),
    Buffer.from(expected, 'hex'));
}
PHP
function verifyMailproSignature(string $rawBody, string $header, string $secret): bool {
    parse_str(str_replace(',', '&', $header), $p);
    if (abs(time() - (int)$p['t']) > 300) return false;
    $expected = hash_hmac('sha256', $p['t'] . '.' . $rawBody, $secret);
    return hash_equals($expected, $p['v1']);
}
Python
import hmac, hashlib, time

def verify_mailpro_signature(raw_body: bytes, header: str, secret: str) -> bool:
    parts = dict(p.split('=') for p in header.split(','))
    t = int(parts['t'])
    if abs(time.time() - t) > 300:
        return False
    expected = hmac.new(
        secret.encode(),
        f"{t}.".encode() + raw_body,
        hashlib.sha256
    ).hexdigest()
    return hmac.compare_digest(expected, parts['v1'])
C#
using System.Security.Cryptography;
using System.Text;

static bool VerifyMailproSignature(string rawBody, string header, string secret) {
    var parts = header.Split(',')
        .Select(p => p.Split('='))
        .ToDictionary(a => a[0], a => a[1]);
    var t = long.Parse(parts["t"]);
    if (Math.Abs(DateTimeOffset.UtcNow.ToUnixTimeSeconds() - t) > 300) return false;
    using var hmac = new HMACSHA256(Encoding.UTF8.GetBytes(secret));
    var hash = hmac.ComputeHash(Encoding.UTF8.GetBytes($"{t}.{rawBody}"));
    var expected = Convert.ToHexString(hash).ToLowerInvariant();
    return CryptographicOperations.FixedTimeEquals(
        Encoding.UTF8.GetBytes(expected),
        Encoding.UTF8.GetBytes(parts["v1"]));
}

Retentativas e desativação automática

TentativaAtraso até à próxima tentativa
1 → 210 segundos
2 → 31 minuto
3 → 45 minutos
4 → 530 minutos
5 → 62 horas
6 → 76 horas
7abandonado (entrega marcada como failed)

Após 10 falhas consecutivas no mesmo webhook, este é automaticamente desativado (isActive: false) e recebe uma notificação por email. Reative-o com PUT /webhooks/{id} assim que o seu endpoint estiver corrigido.

Sucesso = HTTP 2xx

Apenas consideramos o seu webhook bem-sucedido se devolver um estado em 200–299. Qualquer 3xx/4xx/5xx ou um timeout (> 10 s) conta como falha e despoleta retentativas. Se o seu endpoint estiver permanentemente desativado, devolva 410 Gone explicitamente — as retentativas continuam a ocorrer, mas o motivo da falha fica mais claro no seu registo de entregas.

Limites

LimiteValor
Webhooks por conta20
Eventos subscritos por webhook50
Tamanho máximo do payload256 KB
Timeout HTTP por tentativa10 segundos
Retenção do histórico de entregas30 dias

Índice

Authentication

Obtenha um token JWT Bearer para autenticar todas as outras chamadas à API. O endpoint /token da v2 é um redirecionamento 307 para o emissor canónico /v3/token — o seu cliente HTTP segue o redirecionamento de forma transparente (o método POST e o corpo são preservados).

POST /token

Obter token de acesso (redirecionamento 307 para /v3/token)

Obtém um token JWT Bearer utilizando as credenciais de cliente Mailpro. Indique o access_token devolvido como Authorization: Bearer <token> em todos os pedidos subsequentes. O mesmo token também é válido na API CRM v3 e na API SMS.

> ⚙ Detalhe de implementação — POST /v2/token é um redirecionamento 307 > temporário para POST /v3/token (configurado na camada de reescrita do IIS > web.config). O HTTP 307 preserva tanto o método (POST) como > o corpo do pedido, pelo que qualquer cliente HTTP em conformidade com a norma segue > o redirecionamento de forma transparente — continua a fazer POST para /v2/token e recebe > um JWT válido. Não existe lógica duplicada de emissão de tokens; a > API Email v2 nunca emite tokens por si própria.

Tipos de concessão suportados
Tipo de concessãoCaso de utilização
passwordIntegração padrão — nome de utilizador + chave de API
refresh_tokenRenovar um token de acesso prestes a expirar sem voltar a autenticar
client_credentialsServidor para servidor apenas com o ID de cliente
Duração do token

Utilize grant_type=refresh_token para renovar o token de acesso sem voltar a autenticar. Armazene os tokens do lado do servidor (Vault, variáveis de ambiente); nunca os incorpore em JavaScript de browser ou em binários de aplicações móveis. Consulte a nota de segurança completa na documentação do /token da API CRM v3.

Corpo do pedido (application/x-www-form-urlencoded)

NomeTipoObrigatórioDescrição
grant_typestring: password, refresh_token, client_credentialssim
usernamestringO seu nome de utilizador Mailpro (email). Obrigatório para a concessão password.
passwordstringA sua chave de API Mailpro (formato GUID). Obrigatória para a concessão password.
refresh_tokenstringToken de atualização anterior. Obrigatório para a concessão refresh_token.
client_idstringO seu ID de cliente Mailpro (inteiro). Obrigatório para a concessão client_credentials.

Respostas

CódigoDescrição
200Token emitido com sucesso. Devolvido por POST /v3/token após o encaminhamento 307 transparente — o seu cliente HTTP vê um 200 normal com o mesmo formato de corpo que receberia diretamente do endpoint de token v3.
307Redirecionamento temporário para POST /v3/token, emitido pela regra de reescrita do IIS em web.config. Os clientes HTTP em conformidade com a norma seguem este redirecionamento automaticamente e preservam o método POST original + o corpo de formulário. Visível apenas para clientes que desativem explicitamente o seguimento de redirecionamentos (por exemplo, curl --max-redirs 0).
400Credenciais inválidas ou tipo de concessão não suportado

Exemplo 200

{
  "access_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
  "token_type": "bearer",
  "expires_in": 31535999,
  "userName": "12345",
  "refresh_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
  "application": null
}

Exemplo 400

{
  "error": "invalid_grant",
  "error_description": "The username or password is incorrect."
}

Account

Verifique o saldo de créditos de email, a quota mensal da API e o estado da subscrição.

GET /account/credits.{format}

Obter saldo de créditos de email

Devolve o saldo de créditos de email restantes da sua conta Mailpro. Cada email enviado consome um crédito. Os créditos não expiram com a subscrição, mas só podem ser utilizados enquanto a subscrição estiver ativa.

Scope OAuth : account:read

Parâmetros

NomeOndeTipoObrigatórioDescrição
formatpathstring: json, xmlsimFormato da resposta

Respostas

CódigoDescrição
200Saldo de créditos devolvido com sucesso
401Credenciais inválidas

Exemplo 200

{
  "Credits": 48500
}

GET /account/subscriptionEndDate.{format}

Obter data de fim da subscrição

Devolve a data de expiração da subscrição Mailpro atual. Após a data de expiração, os envios são bloqueados até que a subscrição seja renovada.

Scope OAuth : account:read

Parâmetros

NomeOndeTipoObrigatórioDescrição
formatpathstring: json, xmlsimFormato da resposta

Respostas

CódigoDescrição
200Data de fim da subscrição devolvida com sucesso
401Credenciais inválidas

Exemplo 200

{
  "SubscriptionEndDate": "2027-01-15T00:00:00"
}

GET /account/limits.{format}

Obter quota mensal da API

Devolve a quota mensal de pedidos à API do cliente autenticado.

Cálculo da quota: o limite é calibrado a partir dos créditos de subscrição de email (normalmente créditos_de_subscrição × 5). Para um plano de 10 000 emails por mês, isto resulta num orçamento mensal de 50 000 pedidos. Reinicia na data de aniversário da subscrição (não no dia 1 do mês de calendário).

O que consome créditos:

O que é GRATUITO (não consome créditos):

A quota é partilhada por todas as 3 APIs Mailpro (v2, v3, sms) — um cliente = um orçamento mensal em toda a plataforma.

Scope OAuth : account:read

Parâmetros

NomeOndeTipoObrigatórioDescrição
formatpathstring: json, xmlsimFormato da resposta

Respostas

CódigoDescrição
200Instantâneo da quota
401Credenciais inválidas
404Nenhum registo de quota encontrado (conta recém-criada; a linha será criada no primeiro pedido autenticado).

Exemplo 200

{
  "MonthlyLimit": 50000,
  "Remaining": 32847,
  "Used": 17153,
  "IsFree": false,
  "RemainedSendsForFree": 0
}

Lists

Gira listas (listas de contactos). Uma lista agrupa contactos para campanhas em massa. Máximo de 1000 listas por conta (mesmo limite nas três API Mailpro e na app). Type 0 = lista padrão. Type 1 = lista negra (utilizada para gestão de cancelamentos de subscrição).

GET /list/list.{format}

Listar todas as listas

Devolve todas as listas da conta, ordenadas por data de criação (mais recentes primeiro), a menos que sortByName=true esteja definido. Utilize type=0 para listas normais ou type=1 para listas negras.

> Alias legado: /addressbook/list.{format} — mesmo endpoint, mantido por compatibilidade > retroativa. As novas integrações devem utilizar /list/*.

Scope OAuth : contacts:read

Parâmetros

NomeOndeTipoObrigatórioDescrição
formatpathstring: json, xmlsimFormato da resposta
titleFilterquerystringFiltrar por título (correspondência parcial, sem distinção entre maiúsculas e minúsculas)
typequeryinteger: 0, 10 = apenas listas padrão, 1 = apenas listas negras. Omitir para devolver todas.
numberOfRecordsqueryintegerItens por página — 5000 por predefinição e no máximo (ver Paginação).
pageNumberqueryintegerNúmero da página (começa em 1). O valor predefinido é 1.
sortByNamequerybooleanDefina como true para ordenar os resultados alfabeticamente por título

Respostas

CódigoDescrição
200Listas devolvidas com sucesso. > A resposta contém também um campo duplicado legado AddressBookList (conteúdo idêntico) > e cada item tem um AddressBookID duplicado legado (idêntico a ListID). As novas > integrações devem ignorá-los.
401Credenciais inválidas

Exemplo 200

{
  "Lists": [
    {
      "ListID": 101,
      "Title": "Newsletter — France",
      "Type": 0,
      "NumberEmails": 4521,
      "CreationDate": "2025-01-15T10:30:00"
    },
    {
      "ListID": 102,
      "Title": "Unsubscribers",
      "Type": 1,
      "NumberEmails": 312,
      "CreationDate": "2025-01-15T10:31:00"
    }
  ]
}

POST /list/add.{format}

Criar uma lista

Cria uma nova lista (lista de contactos). A lista começa vazia — adicione contactos com /email/add ou /email/addSingle. Máximo de 1000 listas por conta (mesmo limite nas três API Mailpro e na app). Devolve HTTP 422 se o limite for atingido.

> Alias legado: /addressbook/add.{format} — mesmo endpoint, mantido por compatibilidade retroativa.

Scope OAuth : contacts:write

Parâmetros

NomeOndeTipoObrigatórioDescrição
formatpathstring: json, xmlsimFormato da resposta

Corpo do pedido (application/x-www-form-urlencoded)

NomeTipoObrigatórioDescrição
TitlestringsimNome visível da nova lista
Typeinteger: 0, 10 = lista padrão (predefinido), 1 = lista negra

Respostas

CódigoDescrição
200Lista criada com sucesso. > Também é devolvido um campo duplicado legado AddressBookList (conteúdo idêntico).
400Title em falta
401Credenciais inválidas
422Limite de listas (1000) atingido

Exemplo 200

{
  "Lists": [
    {
      "ListID": 103,
      "Title": "Spring Campaign 2026",
      "Type": 0,
      "NumberEmails": 0,
      "CreationDate": "2026-04-14T12:00:00"
    }
  ]
}

POST /list/edit.{format}

Renomear uma lista

Atualiza o título de uma lista existente. Os contactos dentro da lista não são afetados.

> Alias legado: /addressbook/edit.{format} — mesmo endpoint, mantido por compatibilidade retroativa. > O nome de parâmetro AddressBookID também é aceite como alias legado de ListID.

Scope OAuth : contacts:write

Parâmetros

NomeOndeTipoObrigatórioDescrição
formatpathstring: json, xmlsimFormato da resposta

Corpo do pedido (application/x-www-form-urlencoded)

NomeTipoObrigatórioDescrição
ListIDintegersimID da lista a renomear (a partir de /list/list). O alias legado AddressBookID também é aceite.
TitlestringsimNovo título para a lista

Respostas

CódigoDescrição
200Lista renomeada com sucesso
400ListID ou Title em falta
401Credenciais inválidas
404Lista não encontrada

POST /list/del.{format}

Eliminar uma lista

Elimina permanentemente uma lista e todos os contactos que contém. Esta ação não pode ser anulada.

> Alias legado: /addressbook/del.{format} — mesmo endpoint, mantido por compatibilidade retroativa. > O nome de parâmetro AddressBookID também é aceite como alias legado de ListID.

Scope OAuth : contacts:write

Parâmetros

NomeOndeTipoObrigatórioDescrição
formatpathstring: json, xmlsimFormato da resposta

Corpo do pedido (application/x-www-form-urlencoded)

NomeTipoObrigatórioDescrição
ListIDintegersimID da lista a eliminar. O alias legado AddressBookID também é aceite.

Respostas

CódigoDescrição
200Lista eliminada com sucesso
400ListID em falta
401Credenciais inválidas
404Lista não encontrada

Exemplo 200

{
  "Result": "OK"
}

Contacts

Gira contactos de email individuais. Os contactos pertencem a uma ou mais listas. Utilize a importação em massa (/email/add) para grandes lotes, ou a adição de contacto único (/email/addSingle) para inscrições individuais com valores de campos personalizados.

GET /email/list.{format}

Listar contactos

Devolve uma lista paginada de contactos de email da conta. Filtre por lista ou por padrão de email. Os resultados são ordenados alfabeticamente quando sortByName=true, caso contrário, por ordem de inserção.

Scope OAuth : contacts:read

Parâmetros

NomeOndeTipoObrigatórioDescrição
formatpathstring: json, xmlsimFormato da resposta
emailFilterquerystringFiltrar por endereço de email (correspondência parcial, sem distinção entre maiúsculas e minúsculas)
listIdqueryintegerDevolver apenas contactos nesta lista. O alias legado addressBookId também é aceite.
numberOfRecordsqueryintegerItens por página — 5000 por predefinição e no máximo (ver Paginação).
pageNumberqueryintegerNúmero da página (começa em 1). O valor predefinido é 1.
sortByNamequerybooleanDefina como true para ordenar os resultados alfabeticamente por endereço de email

Respostas

CódigoDescrição
200Lista de contactos devolvida com sucesso
401Credenciais inválidas

Exemplo 200

{
  "Emails": [
    {
      "IdEmail": 10001,
      "Email": "[email protected]",
      "Field1": "Alice",
      "Field2": "Dupont"
    }
  ]
}

POST /email/add.{format}

Importar contactos (em massa)

Importa um ou mais endereços de email para uma lista num único pedido. Indique os endereços em EmailList separados por ponto e vírgula.

Exemplo: [email protected];[email protected];[email protected]

Este endpoint só importa endereços de email. Para definir também valores de campos personalizados, utilize antes /email/addSingle para cada contacto.

Os endereços previamente cancelados da subscrição são ignorados silenciosamente, a menos que Force=1 seja definido.

Seleção da lista: indique ListId (ou o seu alias legado AddressBookId). É obrigatório indicar pelo menos um.

Scope OAuth : contacts:write

Parâmetros

NomeOndeTipoObrigatórioDescrição
formatpathstring: json, xmlsimFormato da resposta

Corpo do pedido (application/x-www-form-urlencoded)

NomeTipoObrigatórioDescrição
ListIdintegerID da lista de destino. O alias legado AddressBookId também é aceite.
EmailListstringsimEndereços de email a importar, separados por ponto e vírgula
Forceinteger: 0, 1Defina como 1 para reimportar endereços que tinham cancelado anteriormente a subscrição. Valor predefinido: 0 (os endereços com cancelamento são ignorados).

Respostas

CódigoDescrição
200Contactos importados com sucesso
400EmailList em falta
401Credenciais inválidas

Exemplo 200

{
  "Result": "3 contacts imported"
}

POST /email/addSingle.{format}

Adicionar um único contacto

Adiciona um contacto a uma lista com valores opcionais para campos personalizados.

Field1 a Field25 correspondem às definições de colunas personalizadas da sua lista. O mapeamento depende da ordem em que as colunas foram definidas — verifique as definições da lista na interface da Mailpro para ver que número de campo corresponde a cada coluna (por exemplo, Field1 = Nome, Field2 = Apelido, Field3 = Cidade…).

Seleção da lista: indique ListId (ou o seu alias legado AddressBookId).

Scope OAuth : contacts:write

Parâmetros

NomeOndeTipoObrigatórioDescrição
formatpathstring: json, xmlsimFormato da resposta

Corpo do pedido (application/x-www-form-urlencoded)

NomeTipoObrigatórioDescrição
ListIdintegerID da lista de destino. O alias legado AddressBookId também é aceite.
EmailstringsimEndereço de email do novo contacto
Forceinteger: 0, 1Defina como 1 para voltar a adicionar um endereço que tinha cancelado anteriormente a subscrição
Field1stringValor para o campo personalizado 1 (o mapeamento das colunas depende da sua lista)
Field2stringValor para o campo personalizado 2
Field3stringValor para o campo personalizado 3
Field4stringValor para o campo personalizado 4
Field5stringValor para o campo personalizado 5

Respostas

CódigoDescrição
200Contacto adicionado com sucesso
400Email em falta
401Credenciais inválidas

Exemplo 200

{
  "EmailId": 10002,
  "Email": "[email protected]",
  "Field1": "Alice",
  "Field2": "Dupont",
  "ListID": 101
}

POST /email/edit.{format}

Atualizar um contacto

Atualiza o endereço de email e/ou os valores dos campos personalizados de um contacto existente. Identifique o contacto pelo EmailId (a partir de /email/list). Tanto EmailId como Email são obrigatórios.

Scope OAuth : contacts:write

Parâmetros

NomeOndeTipoObrigatórioDescrição
formatpathstring: json, xmlsimFormato da resposta

Corpo do pedido (application/x-www-form-urlencoded)

NomeTipoObrigatórioDescrição
EmailIdintegersimID do contacto a atualizar (a partir de /email/list)
EmailstringsimNovo endereço de email do contacto
Field1stringNovo valor para o campo personalizado 1
Field2stringNovo valor para o campo personalizado 2
Field3stringNovo valor para o campo personalizado 3

Respostas

CódigoDescrição
200Contacto atualizado com sucesso
400EmailId ou Email em falta
401Credenciais inválidas
404Contacto não encontrado

POST /email/del.{format}

Eliminar um contacto

Elimina permanentemente um contacto pelo seu identificador único.

Scope OAuth : contacts:write

Parâmetros

NomeOndeTipoObrigatórioDescrição
formatpathstring: json, xmlsimFormato da resposta

Corpo do pedido (application/x-www-form-urlencoded)

NomeTipoObrigatórioDescrição
EmailIdintegersimID do contacto a eliminar (a partir de /email/list)

Respostas

CódigoDescrição
200Contacto eliminado com sucesso
400EmailId em falta
401Credenciais inválidas
404Contacto não encontrado

Messages

Gira modelos de email em HTML. Um modelo de mensagem armazena o assunto do email, o corpo HTML e a configuração da hiperligação de cancelamento de subscrição. Os modelos são reutilizados nas várias campanhas.

GET /message/list.{format}

Listar modelos de mensagem

Devolve os modelos de email HTML guardados para a conta. Por predefinição, o corpo HTML não é incluído na resposta para manter os payloads pequenos. Defina bodyHTML=true para o incluir (limita automaticamente os resultados a 10 por página).

Scope OAuth : email:templates:read

Parâmetros

NomeOndeTipoObrigatórioDescrição
formatpathstring: json, xmlsimFormato da resposta
subjectFilterquerystringFiltrar por assunto (correspondência parcial, sem distinção entre maiúsculas e minúsculas)
numberOfRecordsqueryintegerItens por página — 5000 por predefinição e no máximo (ver Paginação).
pageNumberqueryintegerNúmero da página (começa em 1). O valor predefinido é 1.
bodyHTMLquerybooleanDefina como true para incluir o corpo HTML completo em cada resultado. Quando definido como true, os resultados são automaticamente limitados a 10 por página, independentemente do numberOfRecords.

Respostas

CódigoDescrição
200Modelos de mensagem devolvidos com sucesso
401Credenciais inválidas

Exemplo 200

{
  "MessageList": [
    {
      "IDMessage": 501,
      "Subject": "Spring Newsletter — April 2026",
      "Language": "EN",
      "LinkAlign": "center",
      "LinkUp": 0,
      "UpdateDate": "2026-03-10T14:22:00"
    }
  ]
}

POST /message/add.{format}

Criar um modelo de mensagem

Cria um novo modelo de email HTML. O modelo armazena o assunto, o corpo HTML e as definições da hiperligação de cancelamento de subscrição. Uma vez criado, utilize o IDMessage devolvido ao lançar uma campanha.

Scope OAuth : email:templates:write

Parâmetros

NomeOndeTipoObrigatórioDescrição
formatpathstring: json, xmlsimFormato da resposta

Corpo do pedido (application/x-www-form-urlencoded)

NomeTipoObrigatórioDescrição
SubjectstringsimLinha de assunto do email (máx. 255 caracteres)
BodyHTMLstringsimConteúdo HTML completo do corpo do email
LanguagestringsimCódigo de idioma para a localização da hiperligação de cancelamento de subscrição (por exemplo, EN, FR, DE)
LinkAlignstring: left, center, rightsimAlinhamento horizontal da hiperligação de cancelamento de subscrição
LinkUpinteger: 0, 1simPosição da hiperligação de cancelamento de subscrição — 0 = parte inferior do email, 1 = parte superior

Respostas

CódigoDescrição
200Modelo de mensagem criado com sucesso
400Campo obrigatório em falta
401Credenciais inválidas

Exemplo 200

{
  "IDMessage": 502,
  "Subject": "Spring Newsletter — April 2026",
  "Language": "EN",
  "LinkAlign": "center",
  "LinkUp": 0
}

POST /message/edit.{format}

Atualizar um modelo de mensagem

Atualiza o conteúdo e os metadados de um modelo de mensagem existente.

Scope OAuth : email:templates:write

Parâmetros

NomeOndeTipoObrigatórioDescrição
formatpathstring: json, xmlsimFormato da resposta

Corpo do pedido (application/x-www-form-urlencoded)

NomeTipoObrigatórioDescrição
MessageIdintegersimID do modelo de mensagem a atualizar (a partir de /message/list)
SubjectstringsimNova linha de assunto do email
BodyHTMLstringsimNovo conteúdo HTML do corpo do email
LanguagestringsimCódigo de idioma para a localização da hiperligação de cancelamento de subscrição
LinkAlignstring: left, center, rightsim
LinkUpinteger: 0, 1sim

Respostas

CódigoDescrição
200Modelo de mensagem atualizado com sucesso
400Campo obrigatório em falta
401Credenciais inválidas
404Modelo de mensagem não encontrado

POST /message/del.{format}

Eliminar um modelo de mensagem

Elimina permanentemente um modelo de mensagem pelo seu identificador único. Os modelos utilizados por campanhas agendadas pendentes não podem ser eliminados.

Scope OAuth : email:templates:write

Parâmetros

NomeOndeTipoObrigatórioDescrição
formatpathstring: json, xmlsimFormato da resposta

Corpo do pedido (application/x-www-form-urlencoded)

NomeTipoObrigatórioDescrição
MessageIdintegersimID do modelo de mensagem a eliminar (a partir de /message/list)

Respostas

CódigoDescrição
200Modelo de mensagem eliminado com sucesso
400MessageId em falta
401Credenciais inválidas
404Modelo de mensagem não encontrado

Campaigns

Envie campanhas de email em massa para uma lista e gira envios agendados. Uma campanha utiliza um modelo de mensagem e um endereço de remetente.

GET /send/list.{format}

Listar campanhas agendadas

Devolve a lista das campanhas de email agendadas e recentemente processadas. Os resultados são ordenados por data de envio prevista (mais recentes primeiro).

Scope OAuth : email:send

Parâmetros

NomeOndeTipoObrigatórioDescrição
formatpathstring: json, xmlsimFormato da resposta
subjectMessageFilterquerystringFiltrar por assunto da campanha (correspondência parcial, sem distinção entre maiúsculas e minúsculas)
numberOfRecordsqueryintegerItens por página — 5000 por predefinição e no máximo (ver Paginação).
pageNumberqueryintegerNúmero da página (começa em 1). O valor predefinido é 1.

Respostas

CódigoDescrição
200Lista de campanhas devolvida com sucesso
401Credenciais inválidas

Exemplo 200

{
  "sends": [
    {
      "IDSend": 3001,
      "ListID": 101,
      "SenderEmail": "[email protected]",
      "SenderName": "Your Company Newsletter",
      "DatePlanned": "2026-04-20T09:00:00",
      "SubjectMessage": "Spring Newsletter — April 2026",
      "NumberCredit": 4521
    }
  ]
}

POST /send/campaign.{format}

Lançar uma campanha

Agenda ou envia imediatamente uma campanha de email para uma lista utilizando um modelo de mensagem guardado e um endereço de remetente.

Obrigatórios:

Agendamento: defina DatePlanned para uma data/hora ISO 8601 futura para agendar o envio. Omita DatePlanned para enviar imediatamente.

Acompanhamento de estatísticas: defina Campaign=1 e indique um TitleCampaign para ativar o acompanhamento de aberturas/cliques/devoluções na secção de Estatísticas.

Scope OAuth : email:send

Parâmetros

NomeOndeTipoObrigatórioDescrição
formatpathstring: json, xmlsimFormato da resposta

Corpo do pedido (application/x-www-form-urlencoded)

NomeTipoObrigatórioDescrição
ListIdintegerID da lista de destinatários (a partir de /list/list). O alias legado IDAddressBook também é aceite.
IDMessageintegersimID do modelo de mensagem a enviar (a partir de /message/list)
IDEmailExpintegersimID do endereço de email do remetente a utilizar (a partir de /senderEmail/list)
IDUnsubscribeListintegerLista utilizada para recolher contactos com subscrição cancelada (lista negra). O alias legado IDUnsubscribeAddressBook também é aceite.
DatePlannedstring (date-time)Data/hora de envio agendadas (ISO 8601). Omita para enviar imediatamente.
Campaigninteger: 0, 1Defina como 1 para acompanhar este envio como uma campanha identificada nas estatísticas
TitleCampaignstringTítulo da campanha apresentado nas estatísticas (obrigatório quando Campaign=1)

Respostas

CódigoDescrição
200Campanha agendada ou enviada com sucesso. > A resposta devolve também os aliases legados AddressBookID e UnsubscribeAddressBookID > (idênticos a ListID / UnsubscribeListID). As novas integrações devem ignorá-los.
400IDMessage ou IDEmailExp em falta
401Credenciais inválidas
403Créditos de email insuficientes
404Lista, mensagem ou remetente não encontrados

Exemplo 200

{
  "send": {
    "IDSend": 3002,
    "ListID": 101,
    "UnsubscribeListID": 102,
    "IDCampaign": 8001,
    "SenderName": "Your Company Newsletter",
    "SenderEmail": "[email protected]",
    "DatePlanned": "2026-04-20T09:00:00",
    "SubjectMessage": "Spring Newsletter — April 2026",
    "NumberCredit": 4521
  }
}

POST /send/del.{format}

Cancelar ou eliminar uma campanha

Cancela um envio de campanha agendado e pendente, ou elimina um envio já concluído. Apenas os envios agendados para o futuro podem ser cancelados — os envios em curso não podem ser parados.

Scope OAuth : email:send

Parâmetros

NomeOndeTipoObrigatórioDescrição
formatpathstring: json, xmlsimFormato da resposta

Corpo do pedido (application/x-www-form-urlencoded)

NomeTipoObrigatórioDescrição
IdSendintegersimID do envio de campanha a cancelar ou eliminar (a partir de /send/list)

Respostas

CódigoDescrição
200Campanha cancelada ou eliminada com sucesso
400IdSend em falta
401Credenciais inválidas
404Campanha não encontrada

Exemplo 200

{
  "Result": "Campaign Deleted"
}

GET /send/scheduled.{format}

Listar as minhas campanhas de email agendadas

Devolve as campanhas de email e os envios únicos agendados para uma data futura que ainda não foram despachados. Útil antes de chamar /cancel ou /reschedule. Os registos são ordenados por DatePlanned ascendente.

Scope OAuth : email:send

Parâmetros

NomeOndeTipoObrigatórioDescrição
formatpathstring: json, xmlsimFormato da resposta
numberOfRecordsqueryintegerItens por página — 5000 por predefinição e no máximo (ver Paginação).
pageNumberqueryintegerNúmero da página (começa em 1). O valor predefinido é 1.

Respostas

CódigoDescrição
200Lista de campanhas / envios agendados. > Cada registo inclui também os aliases legados AddressBookID e > UnsubscribeAddressBookID (idênticos a ListID / UnsubscribeListID).
401Credenciais inválidas

Exemplo 200

{
  "sends": [
    {
      "IDSend": 5001,
      "ListID": 101,
      "UnsubscribeListID": 102,
      "IDCampaign": 8001,
      "SenderName": "Your Company Newsletter",
      "SenderEmail": "[email protected]",
      "DatePlanned": "2026-05-01T09:00:00",
      "SubjectMessage": "Spring Sale 2026",
      "NumberCredit": 4521
    }
  ]
}

POST /send/{IdSend}/cancel.{format}

Cancelar uma campanha / envio agendado

Cancela um envio de email agendado (campanha ou único) que ainda não foi despachado. Se o envio já tiver sido feito (ou não existir / pertencer a outro cliente), devolve 409 Conflict.

Scope OAuth : email:send

Parâmetros

NomeOndeTipoObrigatórioDescrição
formatpathstring: json, xmlsimFormato da resposta
IdSendpathintegersim

Respostas

CódigoDescrição
200Envio cancelado
401Credenciais inválidas
409Já despachado ou não encontrado

Exemplo 200

{
  "Result": "OK",
  "Cancelled": 5001
}

PATCH /send/{IdSend}/reschedule.{format}

Reagendar uma campanha / envio agendado

Atualiza o DatePlanned de um envio de email agendado. A nova data tem de ser futura e dentro de 90 dias.

Scope OAuth : email:send

Parâmetros

NomeOndeTipoObrigatórioDescrição
formatpathstring: json, xmlsimFormato da resposta
IdSendpathintegersim

Corpo do pedido (application/x-www-form-urlencoded)

NomeTipoObrigatórioDescrição
PlanDatestring (date-time)sim

Respostas

CódigoDescrição
200Envio reagendado
400PlanDate em falta ou inválido
401Credenciais inválidas
409Já despachado, não encontrado, ou nova data fora do intervalo (tem de ser futura e dentro de 90 dias)

Exemplo 200

{
  "Result": "OK",
  "IdSend": 5001,
  "NewPlanDate": "2026-12-31T14:30:00"
}

POST /send/sendingTest.{format}

Enviar um email de teste

Envia uma pré-visualização de um modelo de mensagem para um destinatário especificado para revisão antes de lançar a campanha real. O remetente, o modelo e o destinatário de teste são todos identificados pelos seus IDs.

Scope OAuth : email:send

Parâmetros

NomeOndeTipoObrigatórioDescrição
formatpathstring: json, xmlsimFormato da resposta

Corpo do pedido (application/x-www-form-urlencoded)

NomeTipoObrigatórioDescrição
MessageIdintegersimID do modelo de mensagem a pré-visualizar (a partir de /message/list)
IDEmailExpFromintegersimID do endereço de remetente a utilizar (a partir de /senderEmail/list)
IDEmailExpTointegersimID do endereço de remetente destinatário — o email de teste é enviado para este endereço

Respostas

CódigoDescrição
200Email de teste enviado com sucesso
400Campo obrigatório em falta
401Credenciais inválidas

Exemplo 200

{
  "SendingTest": {
    "IdSendingTest": 7001,
    "ToEmail": "[email protected]",
    "FromEmail": "[email protected]",
    "SenderName": "Your Company Newsletter"
  }
}

Transactional

Envie emails transacionais avulsos para destinatários individuais. Ao contrário das campanhas, os emails transacionais não exigem uma lista — indica diretamente o email do destinatário e o corpo HTML.

GET /send/mail/scheduled.{format}

Listar os emails individuais agendados

Devolve os emails individuais enviados com /send/sendmail e uma data futura, ainda não expedidos. As campanhas são listadas por /send/scheduled.

Scope OAuth : email:send

Parâmetros

NomeOndeTipoObrigatórioDescrição
formatpathstring: json, xmlsimFormato da resposta

Respostas

CódigoDescrição
200Emails agendados devolvidos
401Credenciais inválidas

Exemplo 200

{
  "scheduledMails": [
    {
      "IdSingleSend": 880123,
      "Email": "[email protected]",
      "Subject": "Your invoice",
      "DatePlanned": "2026-12-01T09:00:00"
    }
  ]
}

POST /send/mail/{IdSingleSend}/cancel.{format}

Cancelar um email individual agendado

Cancela o email enquanto não tiver sido expedido.

Scope OAuth : email:send

Parâmetros

NomeOndeTipoObrigatórioDescrição
formatpathstring: json, xmlsimFormato da resposta
IdSingleSendpathinteger (int64)simIdSingleSend devolvido por /send/sendmail

Respostas

CódigoDescrição
200Email cancelado
401Credenciais inválidas
409Envio não encontrado ou já expedido

Exemplo 200

{
  "Result": "OK",
  "Cancelled": 880123
}

POST /send/mail/{IdSingleSend}/reschedule.{format}

Reagendar um email individual agendado

Altera a data de envio. A nova data tem de ser futura e dentro de 90 dias. PATCH também é aceite.

Scope OAuth : email:send

Parâmetros

NomeOndeTipoObrigatórioDescrição
formatpathstring: json, xmlsimFormato da resposta
IdSingleSendpathinteger (int64)simIdSingleSend devolvido por /send/sendmail

Corpo do pedido (application/x-www-form-urlencoded)

NomeTipoObrigatórioDescrição
PlanDatestring (date-time)simNova data de envio (ISO 8601)

Respostas

CódigoDescrição
200Email reagendado
400Data em falta ou inválida
401Credenciais inválidas
409Envio não encontrado, já expedido ou data fora dos limites

Exemplo 200

{
  "Result": "OK",
  "IdSingleSend": 880123,
  "NewPlanDate": "2026-12-15T09:00:00"
}

POST /send/sendmail.{format}

Enviar um email transacional

Envia um email transacional avulso para um ou mais destinatários. Ao contrário das campanhas, este endpoint não exige uma lista — o endereço do destinatário e o corpo HTML são indicados diretamente.

Obrigatórios:

Formato de EmailData: [email protected],Alice,Dupont,Paris O primeiro valor é o endereço de email; os valores 2 a 26 correspondem a Field1 a Field25 para as variáveis de personalização no seu modelo HTML.

Vários destinatários: separe várias entradas EmailData com ponto e vírgula: [email protected],Alice;[email protected],Bob

Agendamento: defina DatePlanned para uma data/hora ISO 8601 futura ou omita para enviar imediatamente.

Scope OAuth : email:send

Parâmetros

NomeOndeTipoObrigatórioDescrição
formatpathstring: json, xmlsimFormato da resposta

Corpo do pedido (multipart/form-data)

NomeTipoObrigatórioDescrição
IDEmailExpintegersimID do endereço de email do remetente a utilizar (a partir de /senderEmail/list)
EmailDatastringsimDestinatário no formato email,campo1,campo2,...,campo25 (separados por vírgula). O primeiro valor é o endereço de email; os restantes são campos de personalização mapeados para Field1–Field25 no seu modelo HTML. A parte local do email (antes do @) aceita letras, dígitos e . _ - + — incluindo o sub-addressing RFC 5322 (user+tag@domain, ex. Gmail, Fastmail, Proton). Os outros caracteres especiais permitidos pela RFC 5322 (ex. ! # $ % & ' * / = ? ^ { | } ~) e as partes locais entre aspas não são aceites.
BodyHTMLstringsimConteúdo HTML completo do corpo do email
SubjectstringsimLinha de assunto do email (máx. 255 caracteres)
attachmentsarray of string (binary)Anexos opcionais — envie a requisição como multipart/form-data e adicione uma parte de arquivo por anexo (qualquer nome de campo). Até 5 arquivos, 10 MB por arquivo, 15 MB no total. Tipos aceitos: PDF, Word, Excel, PowerPoint, imagens (JPG, PNG, GIF, WebP), ZIP, CSV, TXT — arquivos executáveis e scripts são rejeitados. Cobrança: o envio mantém seu crédito habitual, mais 1 crédito por 512 KB de anexos além dos primeiros 512 KB (anexos ≤ 512 KB não adicionam nada). Todos os outros campos deste endpoint (ReplyTo, ActivateStatistics, CustomHeaders, …) funcionam exatamente como na variante form-urlencoded.
KeepInMyFilesbooleanfalse (predefinição): os anexos são usados apenas para este envio — são guardados fora da sua conta, não contam para a sua quota de armazenamento e são eliminados automaticamente após 35 dias. true: os anexos também são guardados nos ficheiros da sua conta (pasta Secure/Files/Sending/api) e contam para a sua quota de armazenamento.

Respostas

CódigoDescrição
200Email transacional enviado ou agendado com sucesso
400Campo obrigatório em falta ou formato de email inválido
401Credenciais inválidas
403Créditos de email insuficientes
404Remetente não encontrado ou endereço de email com subscrição cancelada

Exemplo 200

{
  "SingleSend": {
    "IdSingleSend": 8001,
    "IdEmailExp": 201,
    "DatePlanned": "2026-04-15T14:30:00",
    "Subject": "Your order #12345 is confirmed",
    "Email": "[email protected]",
    "Field1": "Alice",
    "Field2": "Dupont",
    "UnsubscriptionLink": false,
    "ActivateStatistics": true
  }
}

GET /send/{IdSend}/status.{format}

Obter o estado de entrega de um e-mail transacional

Devolve o estado de entrega atual de um e-mail transacional enviado com /send/sendmail. Passe o IdSingleSend que essa chamada devolveu.

Valores possíveis: delivered (aceite pelo servidor do destinatário, ver DiagCode), bounced (recusado — BounceType: hard endereço inválido ou recusa definitiva, soft recusa após novas tentativas), sent (entregue ao servidor de correio, ainda sem resposta), scheduled (ainda não enviado, DatePlanned no futuro) e queued (à espera de envio). delivered e bounced são finais: pare de consultar. Cada email tem um estado final no máximo 48 horas após o envio; consulte no máximo a cada 15 minutos (cada chamada conta para a sua quota da API) ou utilize os webhooks email.delivered / email.bounced. Só o cliente que enviou o email pode ler o seu estado — qualquer outro id devolve 404.

Scope OAuth : email:read

Parâmetros

NomeOndeTipoObrigatórioDescrição
formatpathstring: json, xmlsimFormato da resposta
IdSendpathintegersimO IdSingleSend retornado por /send/sendmail.

Respostas

CódigoDescrição
200Estado de entrega atual
401Credenciais inválidas
404Nenhum envio transacional encontrado com este id para este cliente

Exemplo 200

{
  "status": {
    "IdSingleSend": 8001,
    "Email": "[email protected]",
    "Status": "delivered",
    "DatePlanned": "2026-04-15T14:30:00",
    "StatusDate": "2026-04-15T14:30:07",
    "DiagCode": "2.0.0 (success)",
    "BounceType": null
  }
}

Sender Addresses

Liste e gira os endereços de email de remetente validados. Apenas os endereços verificados podem ser utilizados como endereço From nas campanhas.

GET /senderEmail/list.{format}

Listar endereços de remetente validados

Devolve a lista dos endereços de email de remetente configurados para a conta. Apenas os endereços com IsValid: true podem ser utilizados ao enviar campanhas. Os novos endereços são adicionados com /senderEmail/add e tornam-se válidos depois de clicar na hiperligação do email de validação.

Scope OAuth : email:templates:read

Parâmetros

NomeOndeTipoObrigatórioDescrição
formatpathstring: json, xmlsimFormato da resposta
emailFilterquerystringFiltrar por endereço de email (correspondência parcial, sem distinção entre maiúsculas e minúsculas)
numberOfRecordsqueryintegerItens por página — 5000 por predefinição e no máximo (ver Paginação).
pageNumberqueryintegerNúmero da página (começa em 1). O valor predefinido é 1.
sortByNamequerybooleanDefina como true para ordenar os resultados alfabeticamente pelo nome do remetente

Respostas

CódigoDescrição
200Endereços de remetente devolvidos com sucesso
401Credenciais inválidas

Exemplo 200

{
  "ExpEmailList": [
    {
      "IDEmailExp": 201,
      "Email": "[email protected]",
      "SenderName": "Your Company Newsletter",
      "IsValid": true,
      "CreationDate": "2025-06-01T09:00:00"
    },
    {
      "IDEmailExp": 202,
      "Email": "[email protected]",
      "SenderName": "Your Company Support",
      "IsValid": true,
      "CreationDate": "2025-06-01T09:05:00"
    }
  ]
}

POST /senderEmail/add.{format}

Adicionar um endereço de remetente

Adiciona o endereço com os mesmos controlos da aplicação e envia-lhe um email de validação. Pode ser utilizado depois de clicar na hiperligação desse email. Uma conta pode ter até 25 remetentes, validados ou pendentes.

Scope OAuth : email:templates:write

Parâmetros

NomeOndeTipoObrigatórioDescrição
formatpathstring: json, xmlsimFormato da resposta

Corpo do pedido (application/x-www-form-urlencoded)

NomeTipoObrigatórioDescrição
EmailstringsimEndereço do remetente
SenderNamestringsimNome apresentado aos destinatários

Respostas

CódigoDescrição
200Endereço adicionado. DomainHasMx é false quando o domínio não tem registo MX.
400Email ou SenderName em falta
401Credenciais inválidas
422Endereço recusado: inválido, já entre os remetentes da conta, domínio de email público, nome proibido ou limite de 25 atingido. A mensagem indica o motivo.
503Temporariamente indisponível, tente novamente

Exemplo 200

{
  "Result": "OK",
  "ConfirmationSent": true,
  "DomainHasMx": true
}

POST /senderEmail/{IdSenderEmail}/resendValidation.{format}

Enviar novamente o email de validação

Para um endereço ainda a aguardar validação.

Scope OAuth : email:templates:write

Parâmetros

NomeOndeTipoObrigatórioDescrição
formatpathstring: json, xmlsimFormato da resposta
IdSenderEmailpathintegersimID do remetente, de /senderEmail/list

Respostas

CódigoDescrição
200Email enviado novamente
401Credenciais inválidas
404Remetente não encontrado
409Este remetente já está validado
503Temporariamente indisponível, tente novamente

Exemplo 200

{
  "Result": "OK",
  "ConfirmationSent": true
}

GET /senderEmail/{IdSenderEmail}/authentication.{format}

Verificar o domínio de um remetente (SPF, DKIM, DMARC, MX)

Verifica o domínio em direto no DNS e devolve os registos a publicar. Apenas leitura. O DKIM é ativado na aplicação: DkimSettingsUrl abre o ecrã certo.

Scope OAuth : email:templates:read

Parâmetros

NomeOndeTipoObrigatórioDescrição
formatpathstring: json, xmlsimFormato da resposta
IdSenderEmailpathintegersimID do remetente, de /senderEmail/list

Respostas

CódigoDescrição
200Estado do domínio. Spf.RecommendedRecord é criado a partir do seu registo atual: publique-o apenas se Spf.ChangeNeeded for true.
401Credenciais inválidas
404Remetente não encontrado
503Temporariamente indisponível, tente novamente

Exemplo 200

{
  "Domain": "example.com",
  "Spf": {
    "Valid": true,
    "Record": "v=spf1 include:spf.mailpro.com -all",
    "RecommendedRecord": "v=spf1 include:spf.mailpro.com -all",
    "ChangeNeeded": false
  },
  "Dkim": {
    "Valid": true,
    "Records": [
      {
        "Host": "key._domainkey.example.com",
        "Value": "v=DKIM1;k=rsa;p=MIIBIjANBgkq...",
        "Validated": true
      }
    ]
  },
  "Dmarc": {
    "Valid": true,
    "Record": "v=DMARC1; p=quarantine"
  },
  "Mx": {
    "Valid": true,
    "Record": "mail.example.com"
  },
  "DkimSettingsUrl": "https://app.mailpro.com/dkim/list?d=example.com"
}

POST /senderEmail/del.{format}

Remover um endereço de remetente

Remove um endereço de email de remetente validado da conta. Os endereços de remetente utilizados por campanhas agendadas não podem ser eliminados.

Scope OAuth : email:templates:write

Parâmetros

NomeOndeTipoObrigatórioDescrição
formatpathstring: json, xmlsimFormato da resposta

Corpo do pedido (application/x-www-form-urlencoded)

NomeTipoObrigatórioDescrição
idEmailExpintegersimID do endereço de remetente a remover (a partir de /senderEmail/list)

Respostas

CódigoDescrição
200Endereço de remetente removido com sucesso
400idEmailExp em falta
401Credenciais inválidas

Exemplo 200

{
  "Result": "EmailSender Deleted"
}

Statistics

Aceda às métricas de desempenho por campanha: aberturas, cliques, devoluções e muito mais. Estão disponíveis decomposições detalhadas por hora, dia, país, sistema operativo e cliente de email.

GET /stats/list.{format}

Listar estatísticas de campanha

Devolve métricas globais de desempenho de todas as campanhas: número enviado, taxa de abertura, taxa de cliques, número de devoluções. Filtre por intervalo de datas ou título de campanha. Os resultados são ordenados por data de envio (mais recente primeiro).

Scope OAuth : email:read

Parâmetros

NomeOndeTipoObrigatórioDescrição
formatpathstring: json, xmlsimFormato da resposta
titleCampaignFilterquerystringFiltrar por título da campanha (correspondência parcial, sem distinção entre maiúsculas e minúsculas)
numberOfRecordsqueryintegerItens por página — 5000 por predefinição e no máximo (ver Paginação).
pageNumberqueryintegerNúmero da página (começa em 1). O valor predefinido é 1.
dateStartquerystring (date-time)Início do filtro de intervalo de datas (ISO 8601)
dateEndquerystring (date-time)Fim do filtro de intervalo de datas (ISO 8601)

Respostas

CódigoDescrição
200Estatísticas de campanha devolvidas com sucesso
401Credenciais inválidas

Exemplo 200

{
  "Campaigns": [
    {
      "IdCampaign": 8001,
      "DateCampaign": "2026-04-20T09:00:01",
      "TitleCampaign": "Spring Newsletter April 2026",
      "NumberEmailSend": 4521,
      "NumberEmailOpen": 1823,
      "NumberEmailClick": 342,
      "BadMail": 12,
      "NumberUnsubscribers": 8,
      "NumberComplaints": 1,
      "SpamTrap": 0,
      "DeliverabilityScore": 98
    }
  ]
}

GET /stats/byHour.{format}

Estatísticas por hora

Devolve a decomposição horária de aberturas e cliques de uma campanha específica. Útil para compreender o melhor horário de envio.

Scope OAuth : email:read

Parâmetros

NomeOndeTipoObrigatórioDescrição
formatpathstring: json, xmlsimFormato da resposta
idCampaignqueryintegersimID da campanha (a partir de /stats/list)

Respostas

CódigoDescrição
200Estatísticas horárias devolvidas com sucesso
401Credenciais inválidas

Exemplo 200

{
  "ByHour": [
    {
      "Hour": 9,
      "Opens": 823,
      "Clicks": 142
    },
    {
      "Hour": 10,
      "Opens": 512,
      "Clicks": 98
    }
  ]
}

GET /stats/byDay.{format}

Estatísticas por dia

Devolve a decomposição diária de aberturas e cliques de uma campanha específica.

Scope OAuth : email:read

Parâmetros

NomeOndeTipoObrigatórioDescrição
formatpathstring: json, xmlsimFormato da resposta
idCampaignqueryintegersimID da campanha (a partir de /stats/list)

Respostas

CódigoDescrição
200Estatísticas diárias devolvidas com sucesso
401Credenciais inválidas

POST /stats/del.{format}

Eliminar estatísticas de campanha

Elimina permanentemente todos os registos de estatísticas de uma determinada campanha.

Scope OAuth : email:templates:write

Parâmetros

NomeOndeTipoObrigatórioDescrição
formatpathstring: json, xmlsimFormato da resposta

Corpo do pedido (application/x-www-form-urlencoded)

NomeTipoObrigatórioDescrição
IdCampaignintegersimID da campanha cujas estatísticas eliminar (a partir de /stats/list)

Respostas

CódigoDescrição
200Estatísticas de campanha eliminadas com sucesso
400IdCampaign em falta
401Credenciais inválidas
404Campanha não encontrada

Exemplo 200

{
  "Result": "Statistic Deleted"
}

GET /stats/country.{format}

Decomposição por geolocalização

Devolve a decomposição por geolocalização das aberturas de campanha — quantas aberturas vieram de cada país.

Scope OAuth : email:read

Parâmetros

NomeOndeTipoObrigatórioDescrição
formatpathstring: json, xmlsimFormato da resposta
idCampaignqueryintegersim

Respostas

CódigoDescrição
200Decomposição por país devolvida
401Credenciais inválidas

GET /stats/open.{format}

Registo de eventos de abertura

Devolve o registo, por destinatário, dos eventos de abertura de uma campanha (uma linha por abertura). Utilize emailFilter para procurar um destinatário específico (correspondência parcial, sem distinção entre maiúsculas e minúsculas).

Scope OAuth : email:read

Parâmetros

NomeOndeTipoObrigatórioDescrição
formatpathstring: json, xmlsimFormato da resposta
idCampaignqueryintegersim
emailFilterquerystring
numberOfRecordsqueryintegerItens por página — 5000 por predefinição e no máximo (ver Paginação).
pageNumberqueryintegerNúmero da página (começa em 1). O valor predefinido é 1.

Respostas

CódigoDescrição
200Eventos de abertura devolvidos
401Credenciais inválidas

GET /stats/click.{format}

Registo de eventos de clique

Devolve o registo, por destinatário, dos eventos de clique de uma campanha — incluindo que hiperligação foi clicada e quando.

Scope OAuth : email:read

Parâmetros

NomeOndeTipoObrigatórioDescrição
formatpathstring: json, xmlsimFormato da resposta
idCampaignqueryintegersim
emailFilterquerystring
numberOfRecordsqueryintegerItens por página — 5000 por predefinição e no máximo (ver Paginação).
pageNumberqueryintegerNúmero da página (começa em 1). O valor predefinido é 1.

Respostas

CódigoDescrição
200Eventos de clique devolvidos
401Credenciais inválidas

GET /stats/system.{format}

Decomposição por sistema operativo

Devolve a decomposição das aberturas por sistema operativo (Windows, macOS, iOS, Android, Linux, etc.) de uma determinada campanha.

Scope OAuth : email:read

Parâmetros

NomeOndeTipoObrigatórioDescrição
formatpathstring: json, xmlsimFormato da resposta
idCampaignqueryintegersim

Respostas

CódigoDescrição
200Decomposição por SO devolvida
401Credenciais inválidas

GET /stats/emailSoftware.{format}

Decomposição por cliente de email

Devolve a decomposição das aberturas por cliente de email (Gmail, Outlook, Apple Mail, Thunderbird, etc.) de uma determinada campanha.

Scope OAuth : email:read

Parâmetros

NomeOndeTipoObrigatórioDescrição
formatpathstring: json, xmlsimFormato da resposta
idCampaignqueryintegersim

Respostas

CódigoDescrição
200Decomposição por cliente de email devolvida
401Credenciais inválidas

GET /stats/bounce.{format}

Registo de devoluções

Devolve a lista de destinatários devolvidos (devoluções definitivas, devoluções temporárias, queixas de spam) de uma campanha, com o motivo da falha para cada endereço.

Scope OAuth : email:read

Parâmetros

NomeOndeTipoObrigatórioDescrição
formatpathstring: json, xmlsimFormato da resposta
idCampaignqueryintegersim
emailFilterquerystring
numberOfRecordsqueryintegerItens por página — 5000 por predefinição e no máximo (ver Paginação).
pageNumberqueryintegerNúmero da página (começa em 1). O valor predefinido é 1.

Respostas

CódigoDescrição
200Eventos de devolução devolvidos
401Credenciais inválidas

Exemplo 200

{
  "ListBadMail": [
    {
      "Email": "[email protected]",
      "Date": "2026-04-20T09:05:12",
      "Error": "550 5.1.1 recipient rejected",
      "AddressbookId": 1813318
    }
  ]
}

History

Consulte o registo completo de todos os envios de email passados.

GET /history/list.{format}

Listar histórico de envios

Devolve um registo paginado de todos os envios de email passados. Filtre por ID de campanha ou por assunto. Defina bodyHTML=true para incluir o corpo HTML (limita automaticamente a 10 por página).

Scope OAuth : email:read

Parâmetros

NomeOndeTipoObrigatórioDescrição
formatpathstring: json, xmlsimFormato da resposta
subjectMessageFilterquerystringFiltrar por assunto da campanha (correspondência parcial, sem distinção entre maiúsculas e minúsculas)
idCampaignqueryintegerDevolver o histórico apenas de uma campanha específica
numberOfRecordsqueryintegerItens por página — 5000 por predefinição e no máximo (ver Paginação).
pageNumberqueryintegerNúmero da página (começa em 1). O valor predefinido é 1.
bodyHTMLquerybooleanDefina como true para incluir o corpo HTML completo. Limita automaticamente os resultados a 10 por página.

Respostas

CódigoDescrição
200Histórico devolvido com sucesso
401Credenciais inválidas

Exemplo 200

{
  "HistoricList": [
    {
      "IDHistoric": 9001,
      "SubjectMessage": "Spring Newsletter — April 2026",
      "DateSend": "2026-04-20T09:00:01",
      "NumberSend": 4521,
      "NumberOpen": 1823,
      "NumberClick": 342
    }
  ]
}

Import

Carregue um ficheiro CSV ou XLSX para importar contactos de email para uma lista em massa. O ficheiro é colocado em fila para processamento assíncrono — acompanhe a conclusão através do ImportJobId devolvido ou do callback opcional WebhookUrl.

POST /import/upload.{format}

Carregar um ficheiro de contactos (CSV / XLSX) para importação em massa

Carregue um ficheiro CSV ou XLSX para importar contactos de email para uma lista. O ficheiro é armazenado e colocado em fila para processamento assíncrono — o endpoint devolve imediatamente um ImportJobId.

Tipo de pedido: multipart/form-data

Campos de formulário obrigatórios:

Opcional:

Formato do ficheiro:

Scope OAuth : contacts:write

Parâmetros

NomeOndeTipoObrigatórioDescrição
formatpathstring: json, xmlsimFormato da resposta

Corpo do pedido (multipart/form-data)

NomeTipoObrigatórioDescrição
ListIdintegersimID da lista de destino. O alias legado AddressBookId também é aceite.
filestring (binary)simFicheiro CSV ou XLSX (UTF-8, máx. 50 MB)
WebhookUrlstring (uri)URL de callback invocado quando o processamento terminar

Respostas

CódigoDescrição
200Ficheiro aceite e colocado em fila
400Nenhum ficheiro carregado ou ListId em falta
401Credenciais inválidas
500Erro de servidor ou de armazenamento

Exemplo 200

{
  "Result": "OK",
  "ImportJobId": 13,
  "InternalName": "230575-20260420140221-contacts.csv"
}

Webhooks

Subscreva o seu servidor às notificações de eventos em tempo real. A Mailpro envia um POST com um payload JSON assinado por HMAC para o seu URL assim que o evento subscrito acontecer. Consulte a secção "Webhooks" na introdução para o catálogo completo de eventos, o envelope do payload, fragmentos de verificação de assinatura e a política de retentativas.

GET /webhooks

Listar webhooks

Devolve todos os webhooks configurados na conta autenticada.

Respostas

CódigoDescrição
200Array de webhooks
401Credenciais inválidas

Exemplo 200

{
  "items": [
    {
      "id": 14,
      "url": "https://example.com/hooks/mailpro",
      "description": "Integração com o Slack",
      "is_active": true,
      "created_at": "2026-07-01T21:09:52.43",
      "updated_at": "2026-07-21T18:56:08.02",
      "last_delivery_at": "2026-07-21T18:56:07.653",
      "last_delivery_status": 200,
      "consecutive_failures": 0,
      "events": [
        "email.delivered",
        "email.bounced"
      ]
    }
  ],
  "total": 1
}

POST /webhooks

Criar um webhook

Cria uma nova subscrição de webhook. A resposta contém um secret que é apresentado apenas uma vez — armazene-o imediatamente do lado do servidor. Utilize-o para verificar a assinatura HMAC de cada payload recebido.

Limites: máx. 20 webhooks por conta, máx. 50 eventos por webhook.

Corpo do pedido (application/json)

NomeTipoObrigatórioDescrição
urlstring (uri)simEndpoint HTTPS (HTTP recusado em produção)
eventsarray of stringsimLista de tipos de eventos a subscrever (consulte o catálogo acima). Utilize ["*"] para subscrever todos os eventos desta API.
descriptionstring

Exemplo

{
  "url": "https://example.com/hooks/mailpro",
  "events": [
    "email.delivered",
    "email.bounced"
  ],
  "description": "Integração com o Slack"
}

Respostas

CódigoDescrição
201Webhook criado — secret é devolvido apenas aqui
400URL inválido, lista de eventos inválida ou limite excedido
401Credenciais inválidas

Exemplo 201

{
  "id": 42,
  "url": "https://example.com/hooks/mailpro",
  "events": [
    "email.delivered",
    "email.bounced"
  ],
  "description": "Integração com o Slack",
  "isActive": true,
  "consecutiveFailures": 0,
  "autoDisabledAt": null,
  "autoDisabledReason": null,
  "createdAt": "2026-05-25T10:00:00Z",
  "updatedAt": "2026-05-25T10:00:00Z",
  "secret": "whsec_AbcD1234EfgH5678IjkL9012MnoP3456QrsT"
}

GET /webhooks/{id}

Obter um webhook

Parâmetros

NomeOndeTipoObrigatórioDescrição
idpathinteger (int64)sim

Respostas

CódigoDescrição
200O webhook
404Webhook não encontrado

PUT /webhooks/{id}

Atualizar um webhook

Atualização parcial — só os campos enviados são modificados.

Parâmetros

NomeOndeTipoObrigatórioDescrição
idpathinteger (int64)sim

Corpo do pedido (application/json)

NomeTipoObrigatórioDescrição
urlstring (uri)
eventsarray of string
descriptionstring
isActivebooleanDefina como true para reativar um webhook desativado automaticamente depois de corrigir o seu endpoint.

Respostas

CódigoDescrição
200Webhook atualizado
400Payload inválido
404Webhook não encontrado

DELETE /webhooks/{id}

Eliminar um webhook

Elimina permanentemente o webhook e todo o seu histórico de entregas.

Parâmetros

NomeOndeTipoObrigatórioDescrição
idpathinteger (int64)sim

Respostas

CódigoDescrição
204Eliminado
404Webhook não encontrado

POST /webhooks/{id}/test

Enviar um evento de teste

Coloca em fila um evento ping imediato (ou qualquer outro tipo de evento através do campo eventType no corpo) para o seu endpoint. Útil para verificar a acessibilidade e a verificação de assinatura antes de depender de eventos reais.

Parâmetros

NomeOndeTipoObrigatórioDescrição
idpathinteger (int64)sim

Corpo do pedido (application/json)

NomeTipoObrigatórioDescrição
eventTypestring

Exemplo

{
  "eventType": "ping"
}

Respostas

CódigoDescrição
202Evento colocado em fila para despacho
404Webhook não encontrado

Exemplo 202

{
  "deliveryId": 1234,
  "eventId": "evt_8f3a9b2c4d1e5f6789abcdef01234567",
  "eventType": "ping"
}

POST /webhooks/{id}/rotate-secret

Rodar o segredo HMAC

Gera um novo segredo HMAC e invalida imediatamente o antigo. O novo segredo é devolvido uma única vez na resposta — armazene-o. Todas as entregas a partir deste momento serão assinadas com o novo segredo.

Utilize esta operação se suspeitar que o seu segredo foi comprometido.

Parâmetros

NomeOndeTipoObrigatórioDescrição
idpathinteger (int64)sim

Respostas

CódigoDescrição
200Novo segredo (visível uma única vez)
404Webhook não encontrado

Exemplo 200

{
  "secret": "whsec_XyzA9876BcdE5432FghI1098JklM7654NopQ"
}

GET /webhooks/{id}/deliveries

Listar tentativas de entrega

Devolve o histórico das tentativas de despacho deste webhook (retenção de 30 dias). Útil para depuração — que eventos foram enviados, códigos de estado recebidos, número de retentativas, mensagens de erro.

Parâmetros

NomeOndeTipoObrigatórioDescrição
idpathinteger (int64)sim
limitqueryinteger
cursorqueryinteger (int64)Cursor de paginação (= último ID de entrega visto). Devolve entregas com id < cursor.

Respostas

CódigoDescrição
200Array de tentativas de entrega (mais recentes primeiro)
404Webhook não encontrado

POST /webhooks/{id}/deliveries/{deliveryId}/replay

Repetir uma entrega

Coloca em fila uma nova tentativa de entrega com o mesmo payload do original. Útil para reativar uma entrega falhada depois de corrigir o seu endpoint. É criada uma NOVA linha Webhook_Delivery (a original é preservada para auditoria). A repetição segue a política de retentativas padrão (mesmo esquema de backoff, mesma regra de desativação automática após 10 falhas).

Parâmetros

NomeOndeTipoObrigatórioDescrição
idpathinteger (int64)sim
deliveryIdpathinteger (int64)sim

Respostas

CódigoDescrição
202Repetição colocada em fila
404Webhook ou entrega não encontrados

Suppression

Bounces e cancelamentos de subscrição da conta: listar, adicionar, remover.

GET /suppression/bounces.{format}

Listar os bounces da conta

Os mais recentes primeiro. O total está no cabeçalho X-Total-Count.

Scope OAuth : email:read

Parâmetros

NomeOndeTipoObrigatórioDescrição
formatpathstring: json, xmlsimFormato da resposta
typequerystring: hard, softhard ou soft
sourcequerystringOrigem do bounce: list, contact, api ou smtp
emailquerystringEndereço exato
dateFromquerystring (date-time)A partir desta data
dateToquerystring (date-time)Até esta data
numberOfRecordsqueryinteger
pageNumberqueryinteger

Respostas

CódigoDescrição
200Bounces devolvidos
400type tem de ser hard ou soft
401Credenciais inválidas

Exemplo 200

{
  "bounces": [
    {
      "Id": 5521,
      "Source": "contact",
      "BounceType": "hard",
      "Email": "[email protected]",
      "Date": "2026-10-12T08:30:00",
      "DiagCode": "550 5.1.1 User unknown",
      "IdList": 101
    }
  ]
}

POST /suppression/bounces/{Id}/del.{format}

Remover um bounce

Source e Type são obrigatórios, tal como devolvidos por /suppression/bounces: um Id sozinho não é único.

Scope OAuth : contacts:write

Parâmetros

NomeOndeTipoObrigatórioDescrição
formatpathstring: json, xmlsimFormato da resposta
Idpathinteger (int64)simId do bounce

Corpo do pedido (application/x-www-form-urlencoded)

NomeTipoObrigatórioDescrição
Sourcestringsimlist, contact, api ou smtp
Typestring: hard, softsimhard ou soft

Respostas

CódigoDescrição
200Bounce removido
400Source ou Type em falta
401Credenciais inválidas
404Bounce não encontrado

Exemplo 200

{
  "Result": "OK",
  "Id": 5521,
  "Restored": false
}

POST /suppression/bounces/{Id}/restore.{format}

Repor nas suas listas um contacto com hard bounce

Apenas para um hard bounce com a origem contact.

Scope OAuth : contacts:write

Parâmetros

NomeOndeTipoObrigatórioDescrição
formatpathstring: json, xmlsimFormato da resposta
Idpathinteger (int64)simId do bounce

Respostas

CódigoDescrição
200Contacto reposto
401Credenciais inválidas
404Hard bounce de um contacto não encontrado ou endereço já não ativo

Exemplo 200

{
  "Result": "OK",
  "Id": 5521,
  "Restored": true
}

GET /suppression/unsubscribers.{format}

Listar os cancelamentos de subscrição da conta

Os mais recentes primeiro. O total está no cabeçalho X-Total-Count.

Scope OAuth : contacts:read

Parâmetros

NomeOndeTipoObrigatórioDescrição
formatpathstring: json, xmlsimFormato da resposta
sourcequerystringOrigem do cancelamento: contact, list, smtp, api ou api3
emailquerystringEndereço exato
dateFromquerystring (date-time)A partir desta data
dateToquerystring (date-time)Até esta data
numberOfRecordsqueryinteger
pageNumberqueryinteger

Respostas

CódigoDescrição
200Cancelamentos de subscrição devolvidos
401Credenciais inválidas

Exemplo 200

{
  "unsubscribers": [
    {
      "Id": 9012,
      "Source": "api",
      "Email": "[email protected]",
      "Date": "2026-10-20T16:05:00",
      "ListName": null,
      "Comment": "Asked by phone"
    }
  ]
}

POST /suppression/unsubscribers/add.{format}

Adicionar um cancelamento de subscrição

Sem ListId, a subscrição do endereço é cancelada para toda a conta. Com ListId, apenas nessa lista de cancelamento.

Scope OAuth : contacts:write

Parâmetros

NomeOndeTipoObrigatórioDescrição
formatpathstring: json, xmlsimFormato da resposta

Corpo do pedido (application/x-www-form-urlencoded)

NomeTipoObrigatórioDescrição
EmailstringsimEndereço cuja subscrição cancelar
CommentstringComentário livre
ListIdinteger (int64)Lista de cancelamento da conta (opcional)

Respostas

CódigoDescrição
200Concluído. AlreadyUnsubscribed é true quando a subscrição do endereço já estava cancelada.
400É necessário um endereço válido
401Credenciais inválidas
404ListId não é uma lista de cancelamento desta conta

Exemplo 200

{
  "Result": "OK",
  "AlreadyUnsubscribed": false
}

POST /suppression/unsubscribers/{Id}/del.{format}

Remover um cancelamento de subscrição

Source é obrigatório, tal como devolvido por /suppression/unsubscribers: um Id sozinho não é único.

Scope OAuth : contacts:write

Parâmetros

NomeOndeTipoObrigatórioDescrição
formatpathstring: json, xmlsimFormato da resposta
Idpathinteger (int64)simId do cancelamento

Corpo do pedido (application/x-www-form-urlencoded)

NomeTipoObrigatórioDescrição
Sourcestringsimcontact, list, smtp, api ou api3

Respostas

CódigoDescrição
200Cancelamento de subscrição removido
400Source é obrigatório
401Credenciais inválidas
404Cancelamento de subscrição não encontrado

Exemplo 200

{
  "Result": "OK",
  "Removed": 9012
}