Documentação interativa · Portal de programadores · Especificação OpenAPI · EN · FR · DE · IT · PT · ES
URL de base : https://api.mailpro.com/v3
A API CRM do Mailpro™ v3 permite-lhe gerir programaticamente contactos, listas, etiquetas, campos personalizados, modelos de e-mail e campanhas — e enviar tanto e-mails de marketing em massa como e-mails transacionais individuais, bem como SMS.
Todos os endpoints (exceto POST /token e os endpoints OAuth) aceitam três métodos de autenticação. Utilize aquele que melhor se adequar à sua stack.
POST /token. Parece OAuth, mas está associado a uma única credencial de conta e não possui âmbitos.> O Bearer JWT legado e o IdClient+ApiKey não estão sujeitos a controlo de âmbito — mantêm > acesso total a qualquer endpoint que já podiam alcançar. Apenas os tokens de acesso > OAuth 2.0 estão sujeitos às verificações de âmbito por endpoint apresentadas em cada > operação abaixo (um token sem o âmbito necessário recebe 403 insufficient_scope).
O Mailpro executa um único servidor de autorização OAuth 2.0 para todas as suas APIs, disponibilizado numa superfície única, independente da versão: https://api.mailpro.com/oauth/. Um servidor, um token — o mesmo token de acesso funciona em CRM v3, Email v2 e SMS. Os endpoints que um token pode chamar são determinados pelos âmbitos do token, e não pelo URL base da API que invoca. Não existe um endpoint OAuth por versão (não há /v3/oauth, /v2/oauth nem /sms/oauth).
| Endpoint | URL |
|---|---|
| Autorização | GET https://api.mailpro.com/oauth/authorize |
| Token / Refresh | POST https://api.mailpro.com/oauth/token |
| JWKS (verificar assinaturas) | GET https://api.mailpro.com/oauth/.well-known/jwks |
| Descoberta | GET https://api.mailpro.com/oauth/.well-known/openid-configuration |
Emissor (a claim iss em cada token): https://api.mailpro.com/oauth/.
Concessões suportadas
authorization_code + PKCE (code_challenge_method=S256 é obrigatório) — o fluxo de consentimento no navegador "Connect Mailpro". Devolve um token de acesso e um refresh token rotativo.client_credentials — máquina a máquina, sem utilizador. Devolve apenas um token de acesso.refresh_token — troca um refresh token por um novo par access/refresh. Os refresh tokens rodam: cada utilização invalida o anterior.Tempos de vida dos tokens
| Token | TTL |
|---|---|
| Token de acesso (JWT RS256) | 20 minutos |
| Refresh token (deslizante, utilização única) | 30 dias |
| Código de autorização | 60 segundos |
Authorization Code + PKCE — passo a passo
code_verifier (43–128 caracteres aleatórios) e code_challenge = base64url(sha256(code_verifier)). GET https://api.mailpro.com/oauth/authorize
?response_type=code
&client_id=YOUR_CLIENT_ID
&redirect_uri=https://yourapp.example.com/callback
&scope=contacts:read contacts:write
&state=RANDOM_CSRF_TOKEN
&code_challenge=CODE_CHALLENGE
&code_challenge_method=S256
?code=…&state=…. Verifique o state (proteção CSRF). POST https://api.mailpro.com/oauth/token
Content-Type: application/x-www-form-urlencoded
grant_type=authorization_code&code=AUTH_CODE
&redirect_uri=https://yourapp.example.com/callback
&client_id=YOUR_CLIENT_ID&code_verifier=CODE_VERIFIER
{ "access_token": "eyJ…", "token_type": "Bearer",
"expires_in": 1200, "refresh_token": "…" }
Authorization: Bearer ACCESS_TOKEN.grant_type=refresh_token e guarde o novo refresh token (o antigo deixou de ser válido).client_credentials
POST https://api.mailpro.com/oauth/token
Content-Type: application/x-www-form-urlencoded
grant_type=client_credentials&client_id=YOUR_CLIENT_ID
&client_secret=YOUR_CLIENT_SECRET&scope=contacts:read email:send
O mesmo token de acesso OAuth é igualmente aceite pelas APIs Email v2 (api.mailpro.com/v2) e SMS (api.mailpro.com/sms) — autentique-se uma vez, invoque qualquer API. Catálogo completo de âmbitos: ver Âmbitos OAuth 2.0 abaixo.
A forma mais rápida de experimentar o OAuth é a concessão client_credentials (servidor a servidor, sem navegador, sem utilizador). Necessita de um par client_id / client_secret (peça ao seu contacto no Mailpro, ou crie um em Definições → Acesso à API). Substitua os marcadores de posição abaixo — nunca submeta para o repositório um segredo real.
1. Obter um token de acesso
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=contacts:read"
{ "access_token": "eyJhbGciOiJSUzI1Ni…", "token_type": "Bearer",
"expires_in": 1200 }
2. Invocar um endpoint de recurso com o token
curl https://api.mailpro.com/v3/List \
-H "Authorization: Bearer eyJhbGciOiJSUzI1Ni…"
O mesmo token funciona também em Email v2 (…/v2/…) e SMS (…/sms/…) — desde que transporte o âmbito exigido por cada endpoint. Um token sem o âmbito necessário é rejeitado com 403 insufficient_scope.
"Connect Mailpro" interativo (authorization_code + PKCE) — quando atua em nome de um *utilizador* (Zapier/Make/n8n, aplicações parceiras): redirecione o utilizador para GET https://api.mailpro.com/oauth/authorize com response_type=code, client_id, redirect_uri, scope, state, code_challenge e code_challenge_method=S256; o utilizador dá o seu consentimento; troca o code devolvido em POST https://api.mailpro.com/oauth/token com o code_verifier correspondente. Explicação completa acima; âmbitos em Âmbitos OAuth 2.0 abaixo.
> Os tokens são JWTs RS256 — os tokens de acesso vivem 20 minutos, os refresh > tokens 30 dias (deslizantes, utilização única: cada renovação roda o token). > Verifique as assinaturas contra o JWKS em > https://api.mailpro.com/oauth/.well-known/jwks e valide o âmbito de > cada pedido contra a matriz de âmbitos abaixo.
Authorization: Bearer <access_token>
Obtenha um token via POST /token (ver abaixo). Válido por 30 dias por predefinição; use grant_type=refresh_token para renovar sem voltar a autenticar-se. Mais simples de configurar, mas está associado a uma única credencial de conta e não pode ter âmbitos definidos nem ser entregue a um terceiro — prefira OAuth 2.0 para qualquer integração instalável.
Envie o seu ID de cliente e a sua chave de API como cabeçalhos HTTP (preferível) ou como parâmetros de query:
IdClient: 12345
ApiKey: a1b2c3d4-e5f6-7890-abcd-ef1234567890
As mesmas credenciais das APIs v2 / SMS — copie-as a partir de Definições → Acesso à API. Sem passo de troca de token. A forma em cabeçalho é recomendada porque os URLs são registados pelo IIS / Cloudflare / proxies.
POST /token
Content-Type: application/x-www-form-urlencoded
grant_type=password&username=YOUR_USERNAME&password=YOUR_API_KEY
username — o seu nome de utilizador Mailpro (e-mail)password — a sua chave de API (GUID), disponível em Definições → Acesso à APIPOST /token
Content-Type: application/x-www-form-urlencoded
grant_type=client_credentials&client_id=YOUR_CLIENT_ID
> O token emitido por POST /v3/token também é válido na API Email v2 > (api.mailpro.com/v2) e na API SMS (api.mailpro.com/sms). Autentique-se > uma vez, invoque qualquer API.
Quando a sua aplicação pede um token de acesso OAuth, declara um conjunto de âmbitos — permissões que definem exatamente o que o token pode fazer. O utilizador vê uma descrição em linguagem corrente de cada âmbito solicitado no ecrã de consentimento. Os âmbitos são separados por espaços no parâmetro scope (scope=contacts:read email:send). Solicite apenas o que necessita.
Os âmbitos seguem <recurso>:<ação> e são independentes hierarquicamente — contacts:write não implica contacts:read; solicite ambos, se necessário.
| Âmbito | Permite |
|---|---|
contacts:read | Consultar os seus contactos, listas, etiquetas, segmentos e campos personalizados. |
contacts:write | Criar, editar e apagar os seus contactos, listas, etiquetas e campos personalizados. |
email:send | Enviar e-mails transacionais e de campanha em seu nome. |
email:read | Consultar estatísticas de entrega, aberturas, cliques e histórico de bounces. |
email:templates:read | Consultar os seus modelos de e-mail (assunto, HTML, corpo em texto simples). |
email:templates:write | Criar, editar e apagar os seus modelos de e-mail. |
sms:send | Enviar mensagens SMS transacionais e de campanha em seu nome. |
sms:read | Consultar o saldo de créditos SMS e o histórico de mensagens. |
sms:contacts:read | Consultar a sua agenda telefónica SMS. |
sms:contacts:write | Criar, editar e apagar entradas na sua agenda telefónica SMS. |
webhooks:manage | Subscrever, editar e remover endpoints de webhook para a sua conta. |
account:read | Consultar os créditos, limites e estado da subscrição da sua conta. |
As verificações de âmbito são em tempo real e aplicadas por endpoint para tokens emitidos via OAuth (a autenticação legada está isenta). Cada operação nesta referência indica o seu âmbito necessário em Authorization. Resumo para a superfície CRM v3:
| Endpoints | Âmbito necessário |
|---|---|
GET /Contact/{id}, GET /List, GET /List/{id}, GET /List/{id}/Contact, GET /List/{listId}/Unsubscribers, GET /Tag, GET /Tag/{id}, GET /Tag/{id}/Contact, GET /Segment, verificação de pertença a segmento | contacts:read |
POST /Contact, POST /Contact/Multiple, PUT/DELETE /Contact/{id}, adicionar/remover etiqueta ou lista num contacto, POST/PUT/DELETE /List, POST/PUT/DELETE /Tag | contacts:write |
> Os endpoints desta especificação que não estão listados acima (por exemplo, GET /Field, > campanhas, envio transacional, envio SMS, modelos de mensagens, informação de conta) > são atualmente acessíveis por qualquer token válido — ainda não têm controlo de âmbito na > superfície CRM v3. As APIs Email v2 e SMS aplicam adicionalmente os seus próprios > controlos nos endpoints de envio / modelos / contactos / conta (ver essas especificações).
A rejeição por âmbito devolve 403 com { "error": "insufficient_scope", "required_scope": "…" } (RFC 6750 §3.1).
Mesma regra nas três API Mailpro (Email v2, CRM v3, SMS): 5000 itens por página, por predefinição e no máximo.
numberOfRecords — itens por página. Ausente, 0 ou acima de 5000 = 5000.pageNumber — número de página a partir de 1 (predefinição 1).includeBodyHTML=true) devolvem 10 itens por página por predefinição.200 com uma lista vazia []. 404 significa que o próprio recurso (lista, tag, segmento, campanha…) não existe.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.
As violações de regras de negócio devolvem HTTP 406 com um corpo JSON:
{ "Message": "Contact cannot be created. Email cannot be empty." }
Razões habituais para 406:
Email cannot be empty — o e-mail é obrigatórioEmail has an invalid format — não é um endereço de e-mail válidoA contact already exist with the same Email — violação de unicidade de e-mailThe email address was unsubscribed permanently — endereço na lista negraThe email address has identified has a hard bounce — o endereço sofreu bounceThe email address has identified has a spam trap — armadilha de spam detetadaAt least one List is necessary — os contactos têm de pertencer a pelo menos uma listaOne or more lists have reached the contact limit — máximo de 1 M de contactos por listaInvalid Phone Number — erro de formato do número de telefoneInvalid country code for Phone Number — prefixo de país não suportadoLength exceeded for Phone Number (12) — número de telefone demasiado longo| Código | Significado |
|---|---|
400 | Pedido malformado (JSON inválido, mensagem acima do limite de partes SMS) |
401 | Credenciais em falta, inválidas ou expiradas |
402 | Créditos insuficientes para efetuar o envio |
403 | Permitido pelas suas credenciais, mas recusado — conta bloqueada para o envio de SMS |
404 | O objeto referenciado não existe (contacto, lista, tag, campo, campanha) |
406 | Violação de uma regra de negócio de contacto (ver a lista acima) |
422 | Entrada rejeitada pela validação, ou limite de conta atingido |
> Alteração: alguns destes casos devolviam anteriormente 404. Os créditos > insuficientes devolvem agora 402, os erros de validação e os limites de > conta devolvem 422, e uma conta bloqueada para SMS devolve 403. 404 > é agora usado apenas para «este objeto não existe», de forma coerente com a > API SMS. Se a sua integração se baseia em 404 para esses casos, atualize-a > com os códigos acima.
Os números de telefone são normalizados automaticamente. Pode enviá-los em vários formatos — espaços, hífenes, pontos, barras, parênteses, sublinhados e espaços não separáveis são removidos antes da validação. Qualquer outro carácter (letras, apóstrofos, =, ;, etc.) torna o número inválido.
| Válido | Inválido |
|---|---|
+41794849980 — E.164 internacional | 0612345678 — formato nacional (0 inicial) |
0041 79 484 99 80 — prefixo 00 + espaços | 41'794'849'80 — apóstrofos (não removidos) |
+33 6-12-34-56-78 — + com hífenes | tel=0041794849980 — caracteres adicionais |
41794849980 — apenas dígitos | 1234567 — demasiado curto (< 8 dígitos) |
Regras:
+, 00, ou sem prefixo0)-, ponto ., barra /, parênteses ( ), sublinhado _, NBSP=, ;, + dentro do número, etc.) → rejeitado41794849980)Especificidades de Contacto v3: o campo phone_number de um Contacto está atualmente limitado a 12 dígitos após normalização (face aos 15 dos endpoints SMS autónomos). Números de países como a Alemanha (13), o Brasil (13) ou os móveis italianos (12–13) poderão ser rejeitados em /v3/Contact com Length exceeded for Phone Number (12). Esta restrição legada poderá ser relaxada numa versão futura.
| Recurso | Limite |
|---|---|
| Etiquetas por conta | 1000 |
| Listas por conta | 1000 |
| Campos personalizados por conta | 50 |
| Pedidos de API mensais por conta | 50 000 (5× os créditos de e-mail da subscrição) |
Cada email enviado individualmente (POST /Send/Mail, a Email API v2, 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.
POST /Send/Mail contém id_single_send.email.delivered e email.bounced enviam o estado final para o seu servidor assim que é conhecido, sem qualquer consulta.GET /Send/{id}/Status devolve o estado atual (tabela abaixo).status | Significado | Final? |
|---|---|---|
queued | Aceite, à espera de envio. | não |
scheduled | Agendado para mais tarde (date_planned). | não |
sent | Entregue pelos nossos servidores, ainda sem resposta do servidor do destinatário. | não |
delivered | Aceite pelo servidor do destinatário (diag_code = a sua resposta SMTP). | sim |
bounced | Recusado. bounce_type: hard = endereço inválido ou recusa definitiva; soft = recusa após novas tentativas (caixa cheia, servidor inacessível…). | sim |
not_found | Identificador desconhecido ou que não pertence à sua conta. | sim |
Consultar sem entrar em ciclo
delivered aparece cerca de 5 minutos após a entrega.Retry-After (o número de segundos a aguardar), e a chamada não conta para a sua quota.scheduled: não é preciso consultar antes de date_planned.Os estados são conservados durante 365 dias.
O Mailpro™ pode notificar o seu servidor em tempo real quando ocorrem determinados eventos na sua conta (criação de um contacto, entrega de um e-mail, conclusão de uma campanha, etc.). Ao estilo Stripe — o seu URL recebe um POST assinado em HMAC-SHA256 assim que o evento é disparado.
Cada evento enviado para o seu webhook conta como 1 pedido na sua quota de pedidos à API.
POST /Webhook. A resposta contém um secret mostrado uma única vez (ao estilo Stripe / GitHub) — guarde-o.secret (excertos abaixo).> ⏱ Atraso de ativação — depois de criar, atualizar ou apagar um webhook, a > alteração demora até 10 minutos a propagar-se pelos servidores de API do Mailpro. > Durante esse intervalo, os eventos podem ainda não corresponder à sua nova subscrição > (ou podem ainda corresponder a uma acabada de remover). Este é o tempo necessário para > atualizar a cache de subscrições em memória em cada instância da API.
Todos os eventos partilham um envelope comum:
{
"id": "evt_8f3a9b2c4d1e5f6789abcdef01234567",
"type": "contact.created",
"created": 1748194800,
"apiVersion": "v3",
"account": { "id": 12345, "name": "ACME Corp" },
"data": { "id": "...", "email": "[email protected]", "...": "..." }
}
| Campo | Formato | Descrição |
|---|---|---|
id | evt_ + 32 hex | ID único do evento — use-o como chave de idempotência do seu lado. |
type | <domínio>.<verbo> | Tipo canónico do evento (por exemplo, email.delivered, contact.created). |
created | Segundos Unix UTC | Incluído na assinatura HMAC. |
apiVersion | "v3" | Qual a API do Mailpro que publicou o evento. |
account.id | int | O seu ID de cliente Mailpro. |
account.name | string | O nome da sua conta (útil para depuração do lado do cliente). |
data | object | Carga útil do evento — a forma depende de type (ver catálogo abaixo). |
| Evento | Gatilho | Forma de data |
|---|---|---|
ping | Teste via POST /Webhook/{id}/test | { message } |
contact.created | POST /Contact | { id, email, firstName, lastName, createdAt } |
contact.updated | PUT /Contact/{id} | { id, email, firstName, lastName, updatedAt, changes } |
contact.deleted | DELETE /Contact/{id} | { id, email, deletedAt } |
list.contact_added | Contacto adicionado a uma lista | { listId, listName, contactId, contactEmail, addedAt } |
list.contact_removed | Contacto removido de uma lista | { listId, listName, contactId, contactEmail, removedAt } |
tag.applied | Etiqueta aplicada a contacto | { tag, contactId, contactEmail, appliedAt } |
tag.removed | Etiqueta removida | { tag, contactId, contactEmail, removedAt } |
segment.matched | Contacto entra num segmento | { segmentId, segmentName, contactId, contactEmail, matchedAt } |
email.processed | Envio aceite pelo pipeline | { messageId, email, campaignId, processedAt } |
email.delivered | Um 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.opened | Pixel de seguimento acionado | { messageId, email, campaignId, openedAt, ip, userAgent } |
email.clicked | Clique em ligação seguida | { messageId, email, campaignId, clickedAt, url, ip, userAgent } |
email.bounced | Hard ou soft bounce | { messageId, email, campaignId, bouncedAt, bounceType, reason } |
email.spam_report | Reclamação FBL | { messageId, email, campaignId, reportedAt } |
email.unsubscribed | Clique no link de remoção | { messageId, email, campaignId, unsubscribedAt } |
email.dropped | Recusado antes do envio | { messageId, email, campaignId, droppedAt, reason } |
campaign.started | Início do envio | { campaignId, name, totalRecipients, startedAt } |
campaign.finished | Todos os destinatários processados | { campaignId, name, totalSent, totalFailed, finishedAt } |
import.started | Tarefa de importação iniciada | { importId, fileName, totalRows, startedAt } |
import.progress | Aos 25/50/75 % | { importId, fileName, processedRows, totalRows, progressPct } |
import.completed | Importação OK | { importId, fileName, totalRows, addedCount, updatedCount, errorCount, completedAt } |
import.failed | Erro fatal durante a importação | { importId, fileName, errorMessage, failedAt } |
Subscreva todos os eventos desta API passando ["*"] no array events.
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: contact.created
X-Mailpro-Attempt: 1
Para verificar:
t e v1 do cabeçalho.|now - t| > 300 (janela de 5 minutos contra repetição).expected = hex(HMAC_SHA256(secret, t + "." + raw_body)).v1 com expected (crypto.timingSafeEqual, hash_equals, CryptographicOperations.FixedTimeEquals) — nunca ==.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'));
}
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']);
}
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'])
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"]));
}
| Tentativa | Atraso antes da próxima |
|---|---|
| 1 → 2 | 10 segundos |
| 2 → 3 | 1 minuto |
| 3 → 4 | 5 minutos |
| 4 → 5 | 30 minutos |
| 5 → 6 | 2 horas |
| 6 → 7 | 6 horas |
| 7 | abandonado (entrega marcada como failed) |
Após 10 falhas consecutivas no mesmo webhook, este é automaticamente desativado (isActive: false) e recebe um e-mail de notificação. Reative-o com PUT /Webhook/{id} assim que o seu endpoint estiver corrigido.
Consideramos o seu webhook bem-sucedido apenas se devolver um estado em 200–299. Qualquer 3xx/4xx/5xx ou um timeout (> 10 s) é considerado uma falha e desencadeia retentativas. Se o seu endpoint estiver permanentemente fora de serviço, devolva 410 Gone explicitamente — as retentativas continuam a acontecer, mas a razão da falha fica mais clara no seu registo de entregas.
| Limite | Valor |
|---|---|
| Webhooks por conta | 20 |
| Eventos subscritos por webhook | 50 |
| Tamanho máximo da carga útil | 256 KB |
| Timeout HTTP por tentativa | 10 segundos |
| Retenção do histórico de entregas | 30 dias |
Obtenha um token JWT Bearer para autenticar todas as outras chamadas à API. O endpoint de token aceita vários tipos de concessão: password, refresh_token, client_credentials e integrações de terceiros (zapier, automateio, microsoft-flow).
/tokenObter token de acesso
Obtém um token JWT Bearer utilizando credenciais de cliente. Envie o access_token devolvido como Authorization: Bearer <token> em todos os pedidos subsequentes.
| Tipo de concessão | Caso de utilização |
|---|---|
password | Integração padrão — nome de utilizador + chave de API |
refresh_token | Renovar um token de acesso a expirar sem voltar a autenticar |
client_credentials | Servidor para servidor apenas com ID de cliente |
zapier / automateio / microsoft-flow | Integrações com plataformas de terceiros |
Utilize grant_type=refresh_token para obter um novo token de acesso sem voltar a autenticar — o seu SDK deve fazer isto automaticamente quando o token de acesso se aproximar da expiração (estratégia típica: atualizar quando faltarem menos de 24 h).
Mesmo com um tempo de vida de 30 dias, quem obtiver um access_token pode fazer-se passar pela sua conta até este expirar. Armazene os tokens num cofre de segredos no lado do servidor (Vault, AWS Secrets Manager, Azure Key Vault, variáveis de ambiente num anfitrião reforçado). Nunca incorpore um token em:
Se um token for divulgado, revogue-o através das definições da sua conta Mailpro e solicite um novo.
Corpo do pedido (application/x-www-form-urlencoded)
| Nome | Tipo | Obrigatório | Descrição |
|---|---|---|---|
grant_type | string: password, refresh_token, client_credentials, zapier, automateio, microsoft-flow | sim | Tipo de concessão de autenticação |
username | string | O seu nome de utilizador Mailpro (email). Obrigatório para a concessão password. | |
password | string | A sua chave de API Mailpro (formato GUID). Obrigatória para a concessão password. | |
refresh_token | string | Token de atualização anterior. Obrigatório para a concessão refresh_token. | |
client_id | string | O seu ID de cliente Mailpro (inteiro). Obrigatório para a concessão client_credentials. |
Respostas
| Código | Descrição |
|---|---|
200 | Token emitido com sucesso |
400 | Credenciais 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."
}
Obtenha o perfil da conta, saldo de créditos e detalhes da subscrição.
/Account/MeObter detalhes da conta
Devolve os detalhes do perfil e as definições da conta Mailpro autenticada.
Respostas
| Código | Descrição |
|---|---|
200 | Detalhes da conta devolvidos com sucesso |
401 | Token inválido ou expirado |
/Account/CreditsObter saldo de créditos
Devolve o saldo de créditos restante de email e SMS para a conta.
Respostas
| Código | Descrição |
|---|---|
200 | Saldo de créditos devolvido com sucesso |
401 | Token inválido ou expirado |
Exemplo 200
{
"email_credits": 48500,
"sms_credits": 1200
}
/Account/SubscriptionEndDateObter data de fim da subscrição
Devolve a data de expiração da subscrição Mailpro atual.
Respostas
| Código | Descrição |
|---|---|
200 | Data de fim da subscrição devolvida com sucesso |
401 | Token inválido ou expirado |
/Account/LimitsObter quota mensal da API
Devolve a quota mensal de pedidos da API para o cliente autenticado.
Cálculo da quota: o limite é calibrado a partir dos créditos da subscrição de email (tipicamente subscription_credits × 5). Para um plano de 10.000 emails/mês, isto resulta num orçamento mensal de 50.000 pedidos. O mapeamento exato é definido pela tarefa de faturação no momento da subscrição e reposto na data de aniversário da subscrição (não no dia 1 do mês civil).
O que consome créditos:
v2, v3 ou sms (cada chamada = 1 crédito, independentemente do resultado — tanto 2xx como a maioria dos erros de negócio 4xx contam).contact.created disparado para o seu webhook subscrito = 1 crédito para além da chamada à API que o desencadeou).O que é GRATUITO (não consome créditos):
/health (monitorização).401 (falha de autenticação), 403 (proibido) ou 429 (limitação de taxa).Respostas
| Código | Descrição |
|---|---|
200 | Instantâneo da quota |
401 | Token inválido ou expirado |
404 | Não foi encontrado nenhum registo de quota para esta conta (conta recém-criada que nunca efetuou uma chamada à API; a linha será criada no primeiro pedido autenticado). |
CRUD completo para contactos CRM. Os contactos armazenam um endereço de email, um número de telefone opcional, valores de campos personalizados e pertencem a uma ou mais Listas. Podem também ser rotulados com Etiquetas. Os IDs de contacto são UUID.
/ContactCriar um contacto
Cria um novo contacto CRM com campos personalizados, atribuições de lista e etiquetas opcionais.
Obrigatório:
email — tem de ser único em toda a contalists — pelo menos uma atribuição de lista é obrigatóriaNúmeros de telefone aceitam +41…, 0041… ou 41… com ou sem separadores (máximo 12 dígitos no Contact — consulte Formato do número de telefone na descrição da API).
Campos personalizados são identificados pelo seu id (de GET /Field). Os valores são validados em função do tipo do campo.
Scope OAuth : contacts:write
Corpo do pedido (application/json)
| Nome | Tipo | Obrigatório | Descrição |
|---|---|---|---|
email | string | sim | Endereço de email do contacto (obrigatório, tem de ser único) |
phone_number | string | Número de telefone — aceita +41…, 0041… ou 41… com ou sem separadores.
Deve começar por um código de país válido. Máximo de 12 dígitos no Contact (consulte
Formato do número de telefone na descrição da API para as regras completas).
| |
lists | array of ListRef | sim | Listas às quais atribuir este contacto. É obrigatória pelo menos uma lista. |
tags | array of TagRef | Etiquetas a atribuir a este contacto (opcional) | |
custom_fields | array of FieldValue | Valores de campos personalizados para este contacto (opcional) |
Exemplo
{
"email": "[email protected]",
"phone_number": "+41791234567",
"lists": [
{
"id": 101
}
],
"tags": [
{
"id": 5
}
],
"custom_fields": [
{
"id": 1,
"value": "Alice"
},
{
"id": 2,
"value": "Dupont"
}
]
}
Respostas
| Código | Descrição |
|---|---|
200 | Contacto criado com sucesso |
400 | Formato de email inválido |
401 | Token inválido ou expirado |
406 | Violação de regra de negócio (consulte a descrição para a lista completa) |
Exemplo 406
{
"Message": "Contact cannot be created. A contact already exist with the same Email"
}
/Contact/MultipleImportar contactos (em massa)
Cria até 1.000 contactos num único pedido para uma importação em massa eficiente. A resposta inclui uma lista de contactos criados com sucesso e uma lista de erros para contactos que não puderam ser criados (ex.: email duplicado, dados inválidos).
Nota: as listas e etiquetas utilizadas em importações em massa não podem estar associadas a fluxos de trabalho de automação ativos. Se estiverem, toda a importação é rejeitada com HTTP 406.
Scope OAuth : contacts:write
Corpo do pedido (application/json)
Exemplo
[
{
"email": "[email protected]",
"lists": [
{
"id": 101
}
],
"custom_fields": [
{
"id": 1,
"value": "Alice"
}
]
},
{
"email": "[email protected]",
"lists": [
{
"id": 101
}
],
"custom_fields": [
{
"id": 1,
"value": "Bob"
}
]
}
]
Respostas
| Código | Descrição |
|---|---|
200 | Importação em massa concluída (verifique o array errors para falhas parciais) |
400 | Entrada inválida |
401 | Token inválido ou expirado |
406 | Violação de regra de negócio (ex.: conflito de automação, limite de lista atingido) |
Exemplo 200
{
"Added": [
{
"Email": "[email protected]",
"Id": "550e8400-e29b-41d4-a716-446655440000"
},
{
"Email": "[email protected]",
"Id": "660e8400-e29b-41d4-a716-446655440001"
}
],
"Errors": []
}
/Contact/{id}Obter um contacto
Devolve os detalhes de um contacto específico. Utilize includeTags=true para devolver também as etiquetas atribuídas ao contacto. Utilize includeLists=true para devolver também as listas a que o contacto pertence.
Scope OAuth : contacts:read
Parâmetros
| Nome | Onde | Tipo | Obrigatório | Descrição |
|---|---|---|---|---|
id | path | string (uuid) | sim | UUID do contacto (de POST /Contact ou GET /List/{id}/Contact) |
includeTags | query | boolean | Defina como true para incluir as atribuições de etiquetas do contacto na resposta | |
includeLists | query | boolean | Defina como true para incluir as pertenças a listas do contacto na resposta |
Respostas
| Código | Descrição |
|---|---|
200 | Contacto devolvido com sucesso |
401 | Token inválido ou expirado |
404 | Contacto não encontrado |
Exemplo 200
{
"id": "550e8400-e29b-41d4-a716-446655440000",
"email": "[email protected]",
"phone_number": "41791234567",
"custom_fields": [
{
"id": 1,
"value": "Alice"
},
{
"id": 2,
"value": "Dupont"
}
],
"tags": [
{
"id": 5
}
],
"lists": [
{
"id": 101
}
]
}
/Contact/{id}Atualizar um contacto
Atualiza o email, número de telefone, campos personalizados, atribuições de listas e etiquetas de um contacto. O corpo do pedido substitui os dados atuais do contacto — inclua todas as listas e etiquetas às quais quer que o contacto continue atribuído.
Obrigatório no corpo: email e pelo menos uma entrada em lists.
Scope OAuth : contacts:write
Parâmetros
| Nome | Onde | Tipo | Obrigatório | Descrição |
|---|---|---|---|---|
id | path | string (uuid) | sim | UUID do contacto |
Corpo do pedido (application/json)
| Nome | Tipo | Obrigatório | Descrição |
|---|---|---|---|
email | string | sim | Endereço de email do contacto (obrigatório, tem de ser único) |
phone_number | string | Número de telefone — aceita +41…, 0041… ou 41… com ou sem separadores.
Deve começar por um código de país válido. Máximo de 12 dígitos no Contact (consulte
Formato do número de telefone na descrição da API para as regras completas).
| |
lists | array of ListRef | sim | Listas às quais atribuir este contacto. É obrigatória pelo menos uma lista. |
tags | array of TagRef | Etiquetas a atribuir a este contacto (opcional) | |
custom_fields | array of FieldValue | Valores de campos personalizados para este contacto (opcional) |
Respostas
| Código | Descrição |
|---|---|
200 | Contacto atualizado com sucesso |
401 | Token inválido ou expirado |
404 | Contacto não encontrado |
422 | Erro de validação (formato de email, número de telefone, incompatibilidade de tipo de valor de campo) |
Exemplo 200
{
"Result": "Successful operation"
}
/Contact/{id}Eliminar um contacto
Elimina permanentemente um contacto do CRM.
Scope OAuth : contacts:write
Parâmetros
| Nome | Onde | Tipo | Obrigatório | Descrição |
|---|---|---|---|---|
id | path | string (uuid) | sim | UUID do contacto |
Respostas
| Código | Descrição |
|---|---|
200 | Contacto eliminado com sucesso |
401 | Token inválido ou expirado |
404 | Contacto não encontrado |
/Contact/{id}/ActivityAtividade de um contacto em 90 dias
Emails recebidos, abertos e clicados, cliente de email preferido e últimas campanhas do contacto.
Scope OAuth : contacts:read
Parâmetros
| Nome | Onde | Tipo | Obrigatório | Descrição |
|---|---|---|---|---|
id | path | string (uuid) | sim | GUID do contacto |
Respostas
| Código | Descrição |
|---|---|
200 | Atividade devolvida |
401 | Token inválido ou expirado |
404 | O contacto pedido não existe |
Exemplo 200
{
"period_days": 90,
"email_received": 12,
"email_opened": 7,
"email_clicked": 2,
"favorite_email_client": "Gmail",
"last_campaigns": [
{
"id": 5001,
"name": "Spring Sale 2026",
"date": "2026-10-01T09:00:00"
}
]
}
/Contact/{id}/Tag/{tagid}Adicionar etiqueta ao contacto
Atribui uma etiqueta a um contacto. Se a etiqueta já estiver atribuída, a operação não tem efeito.
Scope OAuth : contacts:write
Parâmetros
| Nome | Onde | Tipo | Obrigatório | Descrição |
|---|---|---|---|---|
id | path | string (uuid) | sim | UUID do contacto |
tagid | path | integer (int64) | sim | ID da etiqueta (de GET /Tag) |
Respostas
| Código | Descrição |
|---|---|
200 | Etiqueta atribuída com sucesso |
401 | Token inválido ou expirado |
404 | Contacto ou etiqueta não encontrados |
/Contact/{id}/Tag/{tagid}Remover etiqueta do contacto
Remove a atribuição de uma etiqueta a um contacto.
Scope OAuth : contacts:write
Parâmetros
| Nome | Onde | Tipo | Obrigatório | Descrição |
|---|---|---|---|---|
id | path | string (uuid) | sim | UUID do contacto |
tagid | path | integer (int64) | sim | ID da etiqueta |
Respostas
| Código | Descrição |
|---|---|
200 | Etiqueta removida com sucesso |
401 | Token inválido ou expirado |
404 | Contacto ou etiqueta não encontrados |
/Contact/{id}/List/{listid}Adicionar contacto à lista
Adiciona um contacto a uma lista específica. Devolve HTTP 404 se o contacto tiver previamente cancelado a subscrição desta lista.
Scope OAuth : contacts:write
Parâmetros
| Nome | Onde | Tipo | Obrigatório | Descrição |
|---|---|---|---|---|
id | path | string (uuid) | sim | UUID do contacto |
listid | path | integer (int64) | sim | ID da lista (de GET /List) |
Respostas
| Código | Descrição |
|---|---|
200 | Contacto adicionado à lista com sucesso |
401 | Token inválido ou expirado |
404 | Contacto, lista não encontrados, ou contacto cancelou a subscrição desta lista |
/Contact/{id}/List/{listid}Remover contacto da lista
Remove um contacto de uma lista específica. O próprio contacto não é eliminado.
Scope OAuth : contacts:write
Parâmetros
| Nome | Onde | Tipo | Obrigatório | Descrição |
|---|---|---|---|---|
id | path | string (uuid) | sim | UUID do contacto |
listid | path | integer (int64) | sim | ID da lista |
Respostas
| Código | Descrição |
|---|---|
200 | Contacto removido da lista com sucesso |
401 | Token inválido ou expirado |
404 | Contacto ou lista não encontrados |
Gerir listas de contactos. As listas agrupam contactos para campanhas e segmentação. Máximo de 1.000 listas por conta (mesmo limite nas três API Mailpro e na app). Máximo de 1.000.000 contactos por lista.
/ListListar listas de contactos
Devolve todas as listas de contactos da conta. Filtre por nome ou data de criação. Ordene alfabeticamente com sortByName=true. Inclua a contagem total de contactos por lista com includeTotalContacts=true.
Scope OAuth : contacts:read
Parâmetros
| Nome | Onde | Tipo | Obrigatório | Descrição |
|---|---|---|---|---|
name | query | string | Filtrar pelo nome da lista (correspondência parcial) | |
dateCreationFrom | query | string (date-time) | Filtrar por data de criação (a partir de, ISO 8601) | |
dateCreationTo | query | string (date-time) | Filtrar por data de criação (até, ISO 8601) | |
numberOfRecords | query | integer | Itens por página — 5000 por predefinição e no máximo | |
pageNumber | query | integer | Número de página (com base em 1) | |
sortByName | query | boolean | Defina como true para ordenar alfabeticamente pelo nome | |
includeTotalContacts | query | boolean | Defina como true para incluir a contagem total_contacts em cada resultado |
Respostas
| Código | Descrição |
|---|---|
200 | Listas devolvidas com sucesso |
401 | Token inválido ou expirado |
Exemplo 200
[
{
"id": 101,
"name": "Newsletter subscribers",
"total_contacts": 4521,
"date_creation": "2025-01-15T10:30:00"
}
]
/ListCriar uma lista de contactos
Cria uma nova lista de contactos. Máximo de 1.000 listas por conta.
Scope OAuth : contacts:write
Corpo do pedido (application/json)
| Nome | Tipo | Obrigatório | Descrição |
|---|---|---|---|
name | string | sim | Nome a apresentar para a lista |
Exemplo
{
"name": "Spring Campaign 2026"
}
Respostas
| Código | Descrição |
|---|---|
200 | Lista criada com sucesso |
401 | Token inválido ou expirado |
406 | Limite de listas (1.000) atingido |
Exemplo 200
{
"id": 102,
"name": "Spring Campaign 2026",
"date_creation": "2026-04-14T12:00:00"
}
/List/{id}Obter uma lista de contactos
Devolve os detalhes de uma lista de contactos específica.
Scope OAuth : contacts:read
Parâmetros
| Nome | Onde | Tipo | Obrigatório | Descrição |
|---|---|---|---|---|
id | path | integer (int64) | sim | ID da lista |
Respostas
| Código | Descrição |
|---|---|
200 | Lista devolvida com sucesso |
401 | Token inválido ou expirado |
404 | Lista não encontrada |
/List/{id}Atualizar uma lista de contactos
Renomeia uma lista de contactos existente.
Scope OAuth : contacts:write
Parâmetros
| Nome | Onde | Tipo | Obrigatório | Descrição |
|---|---|---|---|---|
id | path | integer (int64) | sim | ID da lista |
Corpo do pedido (application/json)
| Nome | Tipo | Obrigatório | Descrição |
|---|---|---|---|
name | string | sim | Nome a apresentar para a lista |
Exemplo
{
"name": "Newsletter subscribers — Europe"
}
Respostas
| Código | Descrição |
|---|---|
200 | Lista atualizada com sucesso |
401 | Token inválido ou expirado |
404 | Lista não encontrada |
/List/{id}Eliminar uma lista de contactos
Elimina permanentemente uma lista de contactos. Os próprios contactos não são eliminados — apenas a sua pertença a esta lista é removida. As listas utilizadas por fluxos de trabalho de automação ativos não podem ser eliminadas.
Scope OAuth : contacts:write
Parâmetros
| Nome | Onde | Tipo | Obrigatório | Descrição |
|---|---|---|---|---|
id | path | integer (int64) | sim | ID da lista |
Respostas
| Código | Descrição |
|---|---|
200 | Lista eliminada com sucesso |
401 | Token inválido ou expirado |
404 | Lista não encontrada |
406 | A lista é utilizada por um fluxo de trabalho de automação ativo |
/List/{id}/ContactListar contactos numa lista
Devolve os contactos que pertencem a uma lista específica. Filtre por email ou data de adição. Inclua etiquetas e pertenças a listas com os respetivos sinalizadores.
Scope OAuth : contacts:read
Parâmetros
| Nome | Onde | Tipo | Obrigatório | Descrição |
|---|---|---|---|---|
id | path | integer (int64) | sim | ID da lista |
email | query | string | Filtrar por email (correspondência parcial) | |
numberOfRecords | query | integer | Itens por página — 5000 por predefinição e no máximo | |
pageNumber | query | integer | ||
sortByEmail | query | boolean | Ordenar alfabeticamente por email | |
includeTags | query | boolean | Incluir atribuições de etiquetas nos resultados | |
includeLists | query | boolean | Incluir pertenças a listas nos resultados |
Respostas
| Código | Descrição |
|---|---|
200 | Contactos devolvidos com sucesso |
401 | Token inválido ou expirado |
404 | Lista não encontrada ou nenhum contacto corresponde aos critérios |
/List/{listId}/UnsubscribersListar cancelamentos de subscrição
Devolve os contactos que cancelaram a subscrição de uma lista específica.
Scope OAuth : contacts:read
Parâmetros
| Nome | Onde | Tipo | Obrigatório | Descrição |
|---|---|---|---|---|
listId | path | integer (int64) | sim | ID da lista |
Respostas
| Código | Descrição |
|---|---|
200 | Cancelamentos de subscrição devolvidos com sucesso |
401 | Token inválido ou expirado |
404 | Lista não encontrada |
Gerir etiquetas para rotulagem e segmentação de contactos. As etiquetas são rótulos planos (ex.: "VIP", "Churned", "B2B"). Máximo de 1.000 etiquetas por conta.
/TagListar etiquetas
Devolve todas as etiquetas da conta.
Scope OAuth : contacts:read
Parâmetros
| Nome | Onde | Tipo | Obrigatório | Descrição |
|---|---|---|---|---|
name | query | string | Filtrar por nome (correspondência parcial) | |
numberOfRecords | query | integer | ||
pageNumber | query | integer | ||
sortByName | query | boolean |
Respostas
| Código | Descrição |
|---|---|
200 | Etiquetas devolvidas com sucesso |
401 | Token inválido ou expirado |
Exemplo 200
[
{
"id": 5,
"name": "VIP customers"
},
{
"id": 6,
"name": "Newsletter openers"
}
]
/TagCriar uma etiqueta
Cria uma nova etiqueta. Máximo de 1.000 etiquetas por conta.
Scope OAuth : contacts:write
Corpo do pedido (application/json)
| Nome | Tipo | Obrigatório | Descrição |
|---|---|---|---|
name | string | sim | Nome a apresentar para a etiqueta |
Exemplo
{
"name": "VIP customers"
}
Respostas
| Código | Descrição |
|---|---|
200 | Etiqueta criada com sucesso |
401 | Token inválido ou expirado |
406 | Limite de etiquetas (1.000) atingido |
/Tag/{id}Obter uma etiqueta
Devolve uma etiqueta específica pelo seu ID.
Scope OAuth : contacts:read
Parâmetros
| Nome | Onde | Tipo | Obrigatório | Descrição |
|---|---|---|---|---|
id | path | integer (int64) | sim | ID da etiqueta |
Respostas
| Código | Descrição |
|---|---|
200 | Etiqueta devolvida com sucesso |
401 | Token inválido ou expirado |
404 | Etiqueta não encontrada |
/Tag/{id}Atualizar uma etiqueta
Renomeia uma etiqueta existente.
Scope OAuth : contacts:write
Parâmetros
| Nome | Onde | Tipo | Obrigatório | Descrição |
|---|---|---|---|---|
id | path | integer (int64) | sim |
Corpo do pedido (application/json)
| Nome | Tipo | Obrigatório | Descrição |
|---|---|---|---|
name | string | sim | Nome a apresentar para a etiqueta |
Exemplo
{
"name": "VIP customers — updated"
}
Respostas
| Código | Descrição |
|---|---|
200 | Etiqueta atualizada com sucesso |
401 | Token inválido ou expirado |
404 | Etiqueta não encontrada |
/Tag/{id}Eliminar uma etiqueta
Elimina permanentemente uma etiqueta. A etiqueta é removida de todos os contactos. As etiquetas utilizadas por fluxos de trabalho de automação ativos não podem ser eliminadas.
Scope OAuth : contacts:write
Parâmetros
| Nome | Onde | Tipo | Obrigatório | Descrição |
|---|---|---|---|---|
id | path | integer (int64) | sim |
Respostas
| Código | Descrição |
|---|---|
200 | Etiqueta eliminada com sucesso |
401 | Token inválido ou expirado |
404 | Etiqueta não encontrada |
406 | A etiqueta é utilizada por um fluxo de trabalho de automação ativo |
/Tag/{id}/ContactListar contactos com uma etiqueta
Devolve os contactos aos quais foi atribuída uma etiqueta específica.
Scope OAuth : contacts:read
Parâmetros
| Nome | Onde | Tipo | Obrigatório | Descrição |
|---|---|---|---|---|
id | path | integer (int64) | sim | ID da etiqueta |
numberOfRecords | query | integer | ||
pageNumber | query | integer |
Respostas
| Código | Descrição |
|---|---|
200 | Contactos devolvidos com sucesso |
401 | Token inválido ou expirado |
404 | Etiqueta não encontrada |
Gerir campos personalizados de contacto. Os campos permitem armazenar dados adicionais em cada contacto (ex.: primeiro nome, cidade, nível de fidelização). Máximo de 50 campos por conta. Tipos de campo: text, number, date.
/FieldListar campos personalizados
Devolve todos os campos personalizados de contacto definidos para a conta. Utilize os valores id devolvidos ao criar ou atualizar contactos.
Parâmetros
| Nome | Onde | Tipo | Obrigatório | Descrição |
|---|---|---|---|---|
name | query | string | Filtrar pelo nome do campo | |
idFieldType | query | integer | Filtrar pelo ID do tipo de campo | |
numberOfRecords | query | integer | ||
pageNumber | query | integer | ||
sortByName | query | boolean |
Respostas
| Código | Descrição |
|---|---|
200 | Campos personalizados devolvidos com sucesso |
401 | Token inválido ou expirado |
Exemplo 200
[
{
"id": 1,
"name": "first_name",
"personalisation_key": "first_name",
"field_type": "text"
},
{
"id": 2,
"name": "last_name",
"personalisation_key": "last_name",
"field_type": "text"
}
]
/FieldCriar um campo personalizado
Cria um novo campo personalizado de contacto. Máximo de 50 campos por conta. Utilize o id devolvido ao atribuir valores a contactos.
Corpo do pedido (application/json)
| Nome | Tipo | Obrigatório | Descrição |
|---|---|---|---|
name | string | sim | Nome apresentado do campo |
id_field_type | integer | sim | ID do tipo de campo (tipos disponíveis via GET /Field/Types):
- 1 = texto
- 2 = número inteiro
- 3 = data e hora
- 4 = sim / não
- 12 = número decimal
|
personalize_key | string | sim | Chave de variável do modelo, para inserir o campo numa mensagem |
sort | integer | Ordem de apresentação (0 a 255). Obrigatório para alterar um campo (PUT /Field/{id}). |
Exemplo
{
"name": "First name",
"id_field_type": 1,
"personalize_key": "first_name"
}
Respostas
| Código | Descrição |
|---|---|
200 | Campo criado com sucesso |
401 | Token inválido ou expirado |
406 | Limite de campos (50) atingido |
/Field/TypesListar tipos de campo
Devolve os identificadores de tipo de campo disponíveis para utilizar ao criar um campo personalizado. Tipos comuns: 1 = texto, 2 = número, 3 = data.
Respostas
| Código | Descrição |
|---|---|
200 | Tipos de campo devolvidos com sucesso |
401 | Token inválido ou expirado |
/Field/{id}Obter um campo personalizado
Devolve a definição e os metadados de um campo personalizado específico.
Parâmetros
| Nome | Onde | Tipo | Obrigatório | Descrição |
|---|---|---|---|---|
id | path | integer (int64) | sim | ID do campo |
Respostas
| Código | Descrição |
|---|---|
200 | Campo devolvido com sucesso |
401 | Token inválido ou expirado |
404 | Campo não encontrado |
/Field/{id}Atualizar um campo personalizado
Atualiza o nome ou a chave de personalização de um campo personalizado.
Parâmetros
| Nome | Onde | Tipo | Obrigatório | Descrição |
|---|---|---|---|---|
id | path | integer (int64) | sim |
Corpo do pedido (application/json)
| Nome | Tipo | Obrigatório | Descrição |
|---|---|---|---|
name | string | sim | Nome apresentado do campo |
id_field_type | integer | sim | ID do tipo de campo (tipos disponíveis via GET /Field/Types):
- 1 = texto
- 2 = número inteiro
- 3 = data e hora
- 4 = sim / não
- 12 = número decimal
|
personalize_key | string | sim | Chave de variável do modelo, para inserir o campo numa mensagem |
sort | integer | Ordem de apresentação (0 a 255). Obrigatório para alterar um campo (PUT /Field/{id}). |
Respostas
| Código | Descrição |
|---|---|
200 | Campo atualizado com sucesso |
401 | Token inválido ou expirado |
404 | Campo não encontrado |
/Field/{id}Eliminar um campo personalizado
Elimina permanentemente um campo personalizado e remove o seu valor de todos os contactos. Esta ação não pode ser anulada.
Parâmetros
| Nome | Onde | Tipo | Obrigatório | Descrição |
|---|---|---|---|---|
id | path | integer (int64) | sim |
Respostas
| Código | Descrição |
|---|---|
200 | Campo eliminado com sucesso |
401 | Token inválido ou expirado |
404 | Campo não encontrado |
Consultar estatísticas de campanhas e gerir campanhas agendadas. As campanhas podem ser editadas ou eliminadas até 5 minutos antes da hora de envio agendada.
/CampaignListar campanhas
Devolve uma lista paginada das campanhas de email da conta.
Parâmetros
| Nome | Onde | Tipo | Obrigatório | Descrição |
|---|---|---|---|---|
numberOfRecords | query | integer | ||
pageNumber | query | integer |
Respostas
| Código | Descrição |
|---|---|
200 | Campanhas devolvidas com sucesso |
401 | Token inválido ou expirado |
Exemplo 200
[
{
"id": 8001,
"title": "Spring Newsletter April 2026",
"date_planned": "2026-04-20T09:00:01",
"count_open": 1823,
"count_sent": 4521,
"count_click": 342,
"count_badmail": 12,
"count_unsubscription": 8,
"count_clicking_users": 289,
"count_complaints": 1,
"spam_trap": 0,
"deliverability_score": 98
}
]
/Campaign/{id}Obter uma campanha
Devolve a configuração e o resumo de estatísticas de uma campanha específica.
Parâmetros
| Nome | Onde | Tipo | Obrigatório | Descrição |
|---|---|---|---|---|
id | path | integer (int64) | sim |
Respostas
| Código | Descrição |
|---|---|
200 | Campanha devolvida com sucesso |
401 | Token inválido ou expirado |
404 | Campanha não encontrada |
/Campaign/{id}Atualizar uma campanha
Atualiza o título ou a data de envio de uma campanha agendada. As campanhas só podem ser modificadas até 5 minutos antes da hora de envio agendada.
Parâmetros
| Nome | Onde | Tipo | Obrigatório | Descrição |
|---|---|---|---|---|
id | path | integer (int64) | sim |
Corpo do pedido (application/json)
| Nome | Tipo | Obrigatório | Descrição |
|---|---|---|---|
campaign_title | string | Nome a apresentar para a campanha | |
date_planned | string (date-time) | Hora de envio agendada (ISO 8601). Omita para enviar de imediato. |
Respostas
| Código | Descrição |
|---|---|
200 | Campanha atualizada com sucesso |
401 | Token inválido ou expirado |
404 | Campanha não encontrada |
/Campaign/{id}Eliminar uma campanha
Cancela e elimina permanentemente uma campanha através do seu identificador.
Parâmetros
| Nome | Onde | Tipo | Obrigatório | Descrição |
|---|---|---|---|---|
id | path | integer (int64) | sim |
Respostas
| Código | Descrição |
|---|---|
200 | Campanha eliminada com sucesso |
401 | Token inválido ou expirado |
404 | Campanha não encontrada |
/Campaign/ScheduledListar as minhas campanhas agendadas
Devolve as campanhas com date_planned no futuro que ainda não foram despachadas. Ordenadas por date_planned ascendente.
Parâmetros
| Nome | Onde | Tipo | Obrigatório | Descrição |
|---|---|---|---|---|
numberOfRecords | query | integer | ||
pageNumber | query | integer |
Respostas
| Código | Descrição |
|---|---|
200 | Lista de campanhas agendadas |
401 | Token inválido ou expirado |
Exemplo 200
[
{
"id": 5001,
"id_client": 12345,
"subject": "Spring Sale 2026",
"date_planned": "2026-05-01T09:00:00",
"title": "Spring Sale",
"id_campaign": 7001,
"id_list": 101,
"id_segment": null,
"number_email": 1250
}
]
/Campaign/{id}/CancelCancelar uma campanha agendada
Cancela uma campanha agendada no futuro. Devolve 409 Conflict se a campanha já tiver sido despachada ou não existir.
Parâmetros
| Nome | Onde | Tipo | Obrigatório | Descrição |
|---|---|---|---|---|
id | path | integer (int64) | sim |
Respostas
| Código | Descrição |
|---|---|
200 | Campanha cancelada |
401 | Token inválido ou expirado |
409 | Já despachada ou não encontrada |
Exemplo 200
{
"result": "ok",
"cancelled": 5001
}
/Campaign/{id}/RescheduleReagendar uma campanha agendada
Atualiza a data de envio planeada de uma campanha agendada. A nova data tem de estar no futuro e dentro de 90 dias.
Nome do campo no corpo: a API aceita date_planned (snake_case, primário), bem como os aliases legados PlanDate e scheduled_time. Forneça qualquer um deles — é utilizado o primeiro que não seja nulo.
Parâmetros
| Nome | Onde | Tipo | Obrigatório | Descrição |
|---|---|---|---|---|
id | path | integer (int64) | sim |
Corpo do pedido (application/json)
| Nome | Tipo | Obrigatório | Descrição |
|---|---|---|---|
date_planned | string (date-time) | Nome do campo primário. | |
PlanDate | string (date-time) | Alias legado aceite por compatibilidade retroativa. | |
scheduled_time | string (date-time) | Alias legado aceite por compatibilidade retroativa. |
Respostas
| Código | Descrição |
|---|---|
200 | Campanha reagendada |
400 | Data em falta — forneça um de date_planned / PlanDate / scheduled_time |
401 | Token inválido ou expirado |
409 | Já despachada |
Exemplo 200
{
"result": "ok",
"id": 5001,
"date_planned": "2026-12-31T14:30:00"
}
/Campaign/{id}/ByHourEstatísticas por hora
Devolve a divisão horária de aberturas e cliques da campanha.
Parâmetros
| Nome | Onde | Tipo | Obrigatório | Descrição |
|---|---|---|---|---|
id | path | integer (int64) | sim |
Respostas
| Código | Descrição |
|---|---|
200 | Estatísticas horárias devolvidas com sucesso |
401 | Token inválido ou expirado |
/Campaign/{id}/ByDayEstatísticas por dia
Devolve a divisão diária de aberturas e cliques da campanha.
Parâmetros
| Nome | Onde | Tipo | Obrigatório | Descrição |
|---|---|---|---|---|
id | path | integer (int64) | sim |
Respostas
| Código | Descrição |
|---|---|
200 | Estatísticas diárias devolvidas com sucesso |
401 | Token inválido ou expirado |
/Campaign/{id}/OpeningsListar aberturas de email
Devolve uma lista paginada de contactos que abriram o email da campanha.
Parâmetros
| Nome | Onde | Tipo | Obrigatório | Descrição |
|---|---|---|---|---|
id | path | integer (int64) | sim | |
email | query | string | Filtrar pelo email do destinatário | |
numberOfRecords | query | integer | ||
pageNumber | query | integer |
Respostas
| Código | Descrição |
|---|---|
200 | Lista de aberturas devolvida com sucesso |
401 | Token inválido ou expirado |
/Campaign/{id}/ClicksListar cliques em ligações
Devolve uma lista paginada de contactos que clicaram numa ligação na campanha.
Parâmetros
| Nome | Onde | Tipo | Obrigatório | Descrição |
|---|---|---|---|---|
id | path | integer (int64) | sim | |
email | query | string | ||
numberOfRecords | query | integer | ||
pageNumber | query | integer |
Respostas
| Código | Descrição |
|---|---|
200 | Lista de cliques devolvida com sucesso |
401 | Token inválido ou expirado |
/Campaign/{id}/HardBouncesListar devoluções permanentes
Devolve os endereços de email que tiveram devolução permanente durante esta campanha.
Parâmetros
| Nome | Onde | Tipo | Obrigatório | Descrição |
|---|---|---|---|---|
id | path | integer (int64) | sim | |
email | query | string | ||
numberOfRecords | query | integer | ||
pageNumber | query | integer |
Respostas
| Código | Descrição |
|---|---|
200 | Lista de devoluções permanentes devolvida com sucesso |
401 | Token inválido ou expirado |
/Campaign/{id}/LinksListar ligações monitorizadas
Devolve dados de desempenho de cliques para cada ligação monitorizada na campanha.
Parâmetros
| Nome | Onde | Tipo | Obrigatório | Descrição |
|---|---|---|---|---|
id | path | integer (int64) | sim | |
link | query | string | Filtrar pelo URL da ligação (correspondência parcial) | |
numberOfRecords | query | integer | ||
pageNumber | query | integer |
Respostas
| Código | Descrição |
|---|---|
200 | Estatísticas de ligações devolvidas com sucesso |
401 | Token inválido ou expirado |
/Campaign/{id}/OSEstatísticas por SO / dispositivo
Devolve a divisão de aberturas e cliques por sistema operativo e tipo de dispositivo.
Parâmetros
| Nome | Onde | Tipo | Obrigatório | Descrição |
|---|---|---|---|---|
id | path | integer (int64) | sim |
Respostas
| Código | Descrição |
|---|---|
200 | Estatísticas de SO devolvidas com sucesso |
401 | Token inválido ou expirado |
/Campaign/{id}/EmailClientsEstatísticas por cliente de email
Devolve a divisão de aberturas por cliente de email (Gmail, Outlook, Apple Mail…).
Parâmetros
| Nome | Onde | Tipo | Obrigatório | Descrição |
|---|---|---|---|---|
id | path | integer (int64) | sim |
Respostas
| Código | Descrição |
|---|---|
200 | Estatísticas de cliente de email devolvidas com sucesso |
401 | Token inválido ou expirado |
/Campaign/{id}/CountriesEstatísticas por país
Devolve a distribuição geográfica das aberturas e cliques.
Parâmetros
| Nome | Onde | Tipo | Obrigatório | Descrição |
|---|---|---|---|---|
id | path | integer (int64) | sim |
Respostas
| Código | Descrição |
|---|---|
200 | Estatísticas por país devolvidas com sucesso |
401 | Token inválido ou expirado |
Enviar campanhas de email em massa (para listas de contactos) e emails transacionais individuais. As campanhas podem ser agendadas ou enviadas de imediato.
/Send/MailEnviar email transacional
Envia um email transacional pontual para um único destinatário.
Destinatário: forneça email (endereço em linha) OU id_contact (contacto do CRM) — não ambos. Utilizar id_contact permite a personalização automática com os valores dos campos personalizados do contacto.
Conteúdo: forneça body_html (HTML em linha) OU id_message (modelo guardado) — não ambos. Se ambos forem indicados, prevalece id_message.
Obrigatórios: id_sender_email, subject e um de (email ou id_contact), e um de (body_html ou id_message).
Corpo do pedido (application/json)
| Nome | Tipo | Obrigatório | Descrição |
|---|---|---|---|
id_sender_email | integer | ID do endereço de email do remetente (de GET /SenderEmail). Obrigatório. | |
email | string | Endereço de email do destinatário (inline). Forneça isto OU id_contact.
Se ambos forem fornecidos, id_contact tem precedência.
A parte local (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.
| |
id_contact | string (uuid) | ID do contacto CRM do destinatário. Forneça este OU email.
Utilizar id_contact permite a personalização com os valores dos campos personalizados do contacto.
| |
subject | string | Assunto do email (máximo 255 caracteres). Obrigatório. | |
body_html | string | Conteúdo HTML em linha. Forneça este OU id_message.
Se ambos forem indicados, prevalece id_message.
| |
id_message | integer | ID de um modelo de mensagem guardado (de GET /Message).
Forneça este OU body_html.
| |
reply_to | string | Endereço de resposta (predefinição: endereço do remetente) | |
fields | array of FieldValue | Campos de personalização personalizados (utilizados apenas com email em linha, não com id_contact) | |
date_planned | string (date-time) | Agendar o envio para uma hora futura. Omita para enviar de imediato. | |
attachments | array of EmailAttachment | Anexos opcionais (máx. 5). Cada item é um objeto com um filename e um content codificado em Base64. Limites: 10 MB por arquivo e 15 MB no total, medidos após a decodificação Base64. 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). | |
keep_in_my_files | boolean | false (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.
|
Exemplo
{
"id_sender_email": 201,
"email": "[email protected]",
"subject": "Your order #12345 has shipped",
"body_html": "<p>Hello {{first_name}}, your order is on its way!</p>",
"reply_to": "[email protected]",
"fields": [
{
"id": 1,
"value": "Alice"
}
],
"attachments": [
{
"filename": "invoice.pdf",
"content": "JVBERi0xLjQKJVBERi0xLjQK..."
}
]
}
Respostas
| Código | Descrição |
|---|---|
200 | Email enviado ou agendado com sucesso |
400 | Formato de email inválido ou campo obrigatório em falta |
401 | Token inválido ou expirado |
404 | Remetente, mensagem ou contacto não encontrados; ou destinatário cancelou a subscrição |
422 | Erro de validação (assunto demasiado longo, corpo e mensagem ambos vazios, etc.) |
Exemplo 200
{
"message": "Successful operation",
"id_single_send": 8001
}
Exemplo 404
{
"Message": "Not enough credit available"
}
/Send/{id}/StatusObter o estado de entrega de um e-mail transacional
Devolve o estado de entrega atual de um e-mail transacional enviado com POST /Send/Mail. Passe o id_single_send que essa chamada devolveu.
Valores possíveis: delivered (aceite pelo servidor do destinatário, ver diag_code), bounced (recusado — bounce_type: 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, date_planned 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.
Parâmetros
| Nome | Onde | Tipo | Obrigatório | Descrição |
|---|---|---|---|---|
id | path | integer (int64) | sim | O id_single_send retornado por POST /Send/Mail. |
Respostas
| Código | Descrição |
|---|---|
200 | Estado de entrega atual |
401 | Token inválido ou expirado |
404 | Nenhum envio transacional encontrado com este id para este cliente |
Exemplo 200
{
"id_single_send": 8001,
"email": "[email protected]",
"status": "delivered",
"date_planned": "2026-04-15T14:30:00",
"status_date": "2026-04-15T14:30:07",
"diag_code": "2.0.0 (success)",
"bounce_type": null
}
/Send/CampaignEnviar campanha de email
Envia uma campanha de email em massa para uma ou mais listas de contactos.
Obrigatório:
id_message — o modelo a enviar (de GET /Message)id_sender_email — o endereço do remetente (de GET /SenderEmail)lists — pelo menos uma lista de contactos alvocampaign_title — etiqueta para o registo de estatísticasSegmento: opcionalmente filtre destinatários por um segmento guardado (id_segment). O segmento filtra contactos dentro das listas especificadas.
Agendamento: defina date_planned para uma data/hora futura ISO 8601. As campanhas podem ser editadas ou canceladas até 5 minutos antes da hora agendada.
Corpo do pedido (application/json)
| Nome | Tipo | Obrigatório | Descrição |
|---|---|---|---|
id_message | integer | sim | ID do modelo de mensagem a utilizar (de GET /Message) |
id_sender_email | integer | sim | ID do endereço do remetente (de GET /SenderEmail) |
id_email_reply_to | integer | ID do endereço de remetente para resposta (obtido em GET /SenderEmail). Tem de ser um dos endereços de remetente da sua conta, caso contrário o pedido é recusado. Predefinição: id_sender_email. | |
lists | array of ListRef | sim | Listas de contactos alvo (pelo menos uma é obrigatória) |
id_segment | integer | Filtrar destinatários por um segmento guardado (opcional) | |
campaign_title | string | sim | Nome a apresentar para esta campanha (máximo 150 caracteres) |
date_planned | string (date-time) | Hora de envio agendada (ISO 8601). Omita para enviar de imediato. | |
id_automation | integer | Associar este envio a um fluxo de trabalho de automação (opcional) |
Exemplo
{
"id_message": 501,
"id_sender_email": 201,
"lists": [
{
"id": 101
}
],
"campaign_title": "Spring Newsletter April 2026",
"date_planned": "2026-04-20T09:00:00"
}
Respostas
| Código | Descrição |
|---|---|
200 | Campanha agendada ou enviada com sucesso |
401 | Token inválido ou expirado |
402 | Créditos insuficientes |
404 | Mensagem, remetente, lista ou segmento não encontrados; ou créditos insuficientes |
422 | Título da campanha vazio ou demasiado longo (máximo 150 caracteres) |
Exemplo 200
{
"Message": "Successful operation. Campaigns can be edited or deleted until 5 minutes prior to send.",
"IdCampaign": 8001
}
/SendListar envios agendados
Devolve a lista de campanhas de email à espera de serem enviadas (agendadas, ainda não processadas).
Parâmetros
| Nome | Onde | Tipo | Obrigatório | Descrição |
|---|---|---|---|---|
subjectMessage | query | string | Filtrar pelo assunto (correspondência parcial) | |
numberOfRecords | query | integer | ||
pageNumber | query | integer |
Respostas
| Código | Descrição |
|---|---|
200 | Envios em espera devolvidos com sucesso |
401 | Token inválido ou expirado |
/Send/{id}Cancelar um envio agendado
Cancela e elimina um envio de email agendado que ainda não foi processado. Não é possível cancelar envios que estejam a ser processados atualmente.
Parâmetros
| Nome | Onde | Tipo | Obrigatório | Descrição |
|---|---|---|---|---|
id | path | integer (int64) | sim | ID do envio (de GET /Send) |
Respostas
| Código | Descrição |
|---|---|
200 | Envio agendado cancelado com sucesso |
401 | Token inválido ou expirado |
404 | Envio agendado não encontrado |
/Send/Mail/ScheduledListar os emails individuais agendados
Devolve os emails individuais enviados com POST /Send/Mail e uma data futura, ainda não expedidos. As campanhas são listadas por GET /Campaign/Scheduled.
Scope OAuth : email:send
Respostas
| Código | Descrição |
|---|---|
200 | Emails agendados devolvidos |
401 | Token inválido ou expirado |
Exemplo 200
[
{
"id_single_send": 880123,
"email": "[email protected]",
"subject": "Your invoice",
"date_planned": "2026-12-01T09:00:00"
}
]
/Send/Mail/{id}/CancelCancelar um email individual agendado
Cancela o email enquanto não tiver sido expedido.
Scope OAuth : email:send
Parâmetros
| Nome | Onde | Tipo | Obrigatório | Descrição |
|---|---|---|---|---|
id | path | integer (int64) | sim | id_single_send devolvido por POST /Send/Mail |
Respostas
| Código | Descrição |
|---|---|
200 | Email cancelado |
401 | Token inválido ou expirado |
409 | Envio não encontrado ou já expedido |
Exemplo 200
{
"result": "ok",
"cancelled": 880123
}
/Send/Mail/{id}/RescheduleReagendar um email individual agendado
Altera a data de envio. A nova data tem de ser futura e dentro de 90 dias. POST também é aceite.
Scope OAuth : email:send
Parâmetros
| Nome | Onde | Tipo | Obrigatório | Descrição |
|---|---|---|---|---|
id | path | integer (int64) | sim | id_single_send devolvido por POST /Send/Mail |
Corpo do pedido (application/json)
| Nome | Tipo | Obrigatório | Descrição |
|---|---|---|---|
date_planned | string (date-time) | sim | Nova data de envio (ISO 8601) |
Respostas
| Código | Descrição |
|---|---|
200 | Email reagendado |
400 | Data em falta |
401 | Token inválido ou expirado |
409 | Envio não encontrado, já expedido ou data fora dos limites |
Exemplo 200
{
"result": "ok",
"id": 880123,
"date_planned": "2026-12-15T09:00:00"
}
Gerir endereços de email de remetente validados. Apenas endereços verificados podem ser utilizados como From.
/SenderEmailListar endereços de remetente
Devolve os endereços de email de remetente validados configurados para a conta.
Parâmetros
| Nome | Onde | Tipo | Obrigatório | Descrição |
|---|---|---|---|---|
numberOfRecords | query | integer | ||
pageNumber | query | integer |
Respostas
| Código | Descrição |
|---|---|
200 | Endereços de remetente devolvidos com sucesso |
401 | Token inválido ou expirado |
Exemplo 200
[
{
"id": 201,
"email": "[email protected]",
"sender_name": "Your Company Newsletter",
"is_validated": true
}
]
/SenderEmailAdicionar 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
Corpo do pedido (application/json)
| Nome | Tipo | Obrigatório | Descrição |
|---|---|---|---|
email | string | sim | Endereço do remetente |
sender_name | string | sim | Nome apresentado aos destinatários |
Respostas
| Código | Descrição |
|---|---|
200 | Endereço adicionado. domain_has_mx é false quando o domínio não tem registo MX. |
400 | email ou sender_name em falta |
401 | Token inválido ou expirado |
422 | Endereç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. |
503 | Temporariamente indisponível, tente novamente |
Exemplo 200
{
"result": "ok",
"confirmation_sent": true,
"domain_has_mx": true
}
/SenderEmail/{id}/ResendValidationEnviar novamente o email de validação
Para um endereço ainda a aguardar validação.
Scope OAuth : email:templates:write
Parâmetros
| Nome | Onde | Tipo | Obrigatório | Descrição |
|---|---|---|---|---|
id | path | integer | sim | id_sender_email de GET /SenderEmail |
Respostas
| Código | Descrição |
|---|---|
200 | Email enviado novamente |
401 | Token inválido ou expirado |
404 | Remetente não encontrado |
409 | Este remetente já está validado |
503 | Temporariamente indisponível, tente novamente |
Exemplo 200
{
"result": "ok",
"confirmation_sent": true
}
/SenderEmail/{id}/AuthenticationVerificar 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: dkim_settings_url abre o ecrã certo.
Scope OAuth : email:templates:read
Parâmetros
| Nome | Onde | Tipo | Obrigatório | Descrição |
|---|---|---|---|---|
id | path | integer | sim | id_sender_email de GET /SenderEmail |
Respostas
| Código | Descrição |
|---|---|
200 | Estado do domínio. spf.recommended_record é criado a partir do seu registo atual: publique-o apenas se spf.change_needed for true. |
401 | Token inválido ou expirado |
404 | Remetente não encontrado |
503 | Temporariamente indisponível, tente novamente |
Exemplo 200
{
"domain": "example.com",
"spf": {
"valid": true,
"record": "v=spf1 include:spf.mailpro.com -all",
"recommended_record": "v=spf1 include:spf.mailpro.com -all",
"change_needed": 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"
},
"dkim_settings_url": "https://app.mailpro.com/dkim/list?d=example.com"
}
Navegar pelo registo de envios anteriores de email e SMS.
/History/EmailListar histórico de envios de email
Devolve o registo de envios de email anteriores da conta.
Parâmetros
| Nome | Onde | Tipo | Obrigatório | Descrição |
|---|---|---|---|---|
subjectMessage | query | string | Filtrar pelo assunto (correspondência parcial) | |
idCampaign | query | integer | Filtrar pelo ID da campanha | |
includeBodyHTML | query | boolean | Incluir o corpo HTML completo na resposta (mais lento) | |
numberOfRecords | query | integer | ||
pageNumber | query | integer |
Respostas
| Código | Descrição |
|---|---|
200 | Histórico de email devolvido com sucesso |
401 | Token inválido ou expirado |
/History/SMSListar histórico de envios de SMS
Devolve o registo de envios de SMS anteriores da conta.
Parâmetros
| Nome | Onde | Tipo | Obrigatório | Descrição |
|---|---|---|---|---|
dateSend | query | string (date-time) | Filtrar a partir desta data (ISO 8601) | |
dateSendEnd | query | string (date-time) | Filtrar até esta data (ISO 8601) | |
phoneNumber | query | string | Filtrar pelo telefone do destinatário (parcial) | |
type | query | integer | Filtro de tipo de SMS | |
statusCode | query | integer | Filtro de código de estado DLR | |
sortByStatus | query | boolean | ||
numberOfRecords | query | integer | ||
pageNumber | query | integer |
Respostas
| Código | Descrição |
|---|---|
200 | Histórico de SMS devolvido com sucesso |
401 | Token inválido ou expirado |
Gerir segmentos dinâmicos — regras de filtragem guardadas que selecionam automaticamente contactos com base em valores de campo, comportamento ou pertença a listas.
/SegmentListar segmentos
Devolve todos os segmentos dinâmicos guardados da conta.
Scope OAuth : contacts:read
Parâmetros
| Nome | Onde | Tipo | Obrigatório | Descrição |
|---|---|---|---|---|
numberOfRecords | query | integer | ||
pageNumber | query | integer |
Respostas
| Código | Descrição |
|---|---|
200 | Segmentos devolvidos com sucesso |
401 | Token inválido ou expirado |
/Segment/{id}/ContactListar os contactos de um segmento
Com id_list, devolve apenas os contactos dessa lista que entram no segmento: os que uma campanha lista + segmento alcançaria. O total está no cabeçalho X-Total-Count.
Scope OAuth : contacts:read
Parâmetros
| Nome | Onde | Tipo | Obrigatório | Descrição |
|---|---|---|---|---|
id | path | integer (int64) | sim | ID do segmento |
id_list | query | integer (int64) | Limitar a esta lista (opcional) | |
numberOfRecords | query | integer | ||
pageNumber | query | integer |
Respostas
| Código | Descrição |
|---|---|
200 | Contactos devolvidos |
401 | Token inválido ou expirado |
404 | Segmento ou lista não encontrados |
/Segment/{id}/CountContar os contactos de um segmento
Apenas o número, para conhecer antecipadamente a dimensão de um envio. Com id_list, conta apenas os contactos dessa lista que entram no segmento.
Scope OAuth : contacts:read
Parâmetros
| Nome | Onde | Tipo | Obrigatório | Descrição |
|---|---|---|---|---|
id | path | integer (int64) | sim | ID do segmento |
id_list | query | integer (int64) | Limitar a esta lista (opcional) |
Respostas
| Código | Descrição |
|---|---|
200 | Número de contactos |
401 | Token inválido ou expirado |
404 | Segmento ou lista não encontrados |
Exemplo 200
{
"total": 1250
}
/Segment/{id}/contact/{contactId}/checkVerificar se um contacto corresponde a um segmento
Verifica se um contacto específico (por GUID) corresponde atualmente às regras de um determinado segmento. Útil para acionar lógica de automação a pedido.
Scope OAuth : contacts:read
Parâmetros
| Nome | Onde | Tipo | Obrigatório | Descrição |
|---|---|---|---|---|
id | path | integer (int64) | sim | ID do segmento |
contactId | path | string (uuid) | sim | GUID do contacto |
Respostas
| Código | Descrição |
|---|---|
200 | Devolve o resultado da correspondência |
401 | Token inválido ou expirado |
404 | Segmento ou contacto não encontrados |
Enviar mensagens SMS para contactos individuais ou para listas inteiras de contactos. Utiliza o campo phone_number de cada contacto.
/Sms/SingleSMSEnviar SMS único
Envia um SMS único para um número de telefone diretamente. Utilize-o para mensagens transacionais (OTPs, confirmações de encomenda, alertas). O número de telefone aceita +41…, 0041… ou 41… com ou sem separadores — consulte Formato do número de telefone na descrição da API para entradas aceites / rejeitadas.
Corpo do pedido (application/json)
| Nome | Tipo | Obrigatório | Descrição |
|---|---|---|---|
phone_number | string | sim | Número de telefone do destinatário — aceita +41…, 0041… ou 41… com ou sem separadores. Consulte Formato do número de telefone na descrição da API. |
message | string | sim | Texto da mensagem SMS (máximo 160 caracteres para codificação padrão) |
date_planned | string (date-time) | Agendar o envio. Omita para enviar de imediato. |
Exemplo
{
"phone_number": "+41791234567",
"message": "Your verification code is 9473. Valid for 10 minutes."
}
Respostas
| Código | Descrição |
|---|---|
200 | SMS enviado ou agendado com sucesso |
401 | Token inválido ou expirado |
422 | Formato de número de telefone inválido |
/Sms/CampaignEnviar campanha de SMS
Envia uma mensagem SMS para o campo phone_number de todos os contactos em uma ou mais listas. Os contactos sem número de telefone são ignorados.
Corpo do pedido (application/json)
| Nome | Tipo | Obrigatório | Descrição |
|---|---|---|---|
lists | array of ListRef | sim | Listas de contactos alvo (utiliza o campo phone_number de cada contacto) |
message | string | sim | Texto da mensagem SMS |
date_planned | string (date-time) | Agendar o envio. Omita para enviar de imediato. |
Exemplo
{
"lists": [
{
"id": 101
}
],
"message": "Flash sale today — 20% off. Shop at mailpro.com",
"date_planned": "2026-04-20T10:00:00"
}
Respostas
| Código | Descrição |
|---|---|
200 | Campanha de SMS enviada ou agendada com sucesso |
401 | Token inválido ou expirado |
/SmsListar histórico de SMS
Devolve o registo de envios de SMS (único e em campanha) da conta.
Parâmetros
| Nome | Onde | Tipo | Obrigatório | Descrição |
|---|---|---|---|---|
numberOfRecords | query | integer | ||
pageNumber | query | integer |
Respostas
| Código | Descrição |
|---|---|
200 | Histórico de SMS devolvido com sucesso |
401 | Token inválido ou expirado |
/Sms/{id}Cancelar um SMS agendado
Cancela um envio de SMS agendado pendente.
Parâmetros
| Nome | Onde | Tipo | Obrigatório | Descrição |
|---|---|---|---|---|
id | path | integer (int64) | sim | ID do envio de SMS |
Respostas
| Código | Descrição |
|---|---|
200 | SMS agendado cancelado com sucesso |
401 | Token inválido ou expirado |
404 | Envio de SMS não encontrado |
/Sms/ScheduledListar envios de SMS agendados
Devolve envios de SMS com date_planned futuro (ainda não despachados), ordenados por data ascendente.
Parâmetros
| Nome | Onde | Tipo | Obrigatório | Descrição |
|---|---|---|---|---|
numberOfRecords | query | integer | ||
pageNumber | query | integer |
Respostas
| Código | Descrição |
|---|---|
200 | Envios de SMS agendados devolvidos com sucesso |
401 | Token inválido ou expirado |
/Sms/{id}/CancelCancelar um SMS agendado
Cancela um envio de SMS agendado apenas se ainda não tiver sido despachado.
Parâmetros
| Nome | Onde | Tipo | Obrigatório | Descrição |
|---|---|---|---|---|
id | path | integer | sim | ID do envio de SMS |
Respostas
| Código | Descrição |
|---|---|
200 | SMS agendado cancelado com sucesso |
401 | Token inválido ou expirado |
409 | Envio de SMS não encontrado, não pertence ao cliente, ou já despachado |
/Sms/{id}/RescheduleReagendar um SMS agendado
Atualiza a data de envio planeada de um SMS agendado. A nova data tem de estar no futuro e dentro de 90 dias. Falha se o SMS já tiver sido despachado.
Nome do campo no corpo: a API aceita date_planned (snake_case, primário), bem como os aliases legados PlanDate e scheduled_time. Forneça qualquer um deles.
Parâmetros
| Nome | Onde | Tipo | Obrigatório | Descrição |
|---|---|---|---|---|
id | path | integer | sim | ID do envio de SMS |
Corpo do pedido (application/json)
| Nome | Tipo | Obrigatório | Descrição |
|---|---|---|---|
date_planned | string (date-time) | Nome do campo primário. | |
PlanDate | string (date-time) | Alias legado aceite por compatibilidade retroativa. | |
scheduled_time | string (date-time) | Alias legado aceite por compatibilidade retroativa. |
Respostas
| Código | Descrição |
|---|---|
200 | SMS agendado reagendado com sucesso |
400 | Data em falta — forneça um de date_planned / PlanDate / scheduled_time |
401 | Token inválido ou expirado |
409 | Reagendamento falhou (não encontrado, já despachado ou data fora de intervalo) |
Organizar modelos de mensagens em pastas.
/FolderListListar pastas de listas
Devolve as pastas utilizadas para organizar as listas de contactos.
Parâmetros
| Nome | Onde | Tipo | Obrigatório | Descrição |
|---|---|---|---|---|
name | query | string | Filtrar pelo nome da pasta (parcial) | |
numberOfRecords | query | integer | ||
pageNumber | query | integer |
Respostas
| Código | Descrição |
|---|---|
200 | Pastas de listas devolvidas com sucesso |
401 | Token inválido ou expirado |
/FolderList/{id}Obter uma única pasta de listas
Devolve os detalhes de uma pasta de listas pelo seu ID.
Parâmetros
| Nome | Onde | Tipo | Obrigatório | Descrição |
|---|---|---|---|---|
id | path | integer | sim | ID da pasta |
Respostas
| Código | Descrição |
|---|---|
200 | Pasta devolvida com sucesso |
401 | Token inválido ou expirado |
404 | Pasta não encontrada |
/FolderMessageListar pastas de mensagens
Devolve as pastas utilizadas para organizar os modelos de mensagens de email.
Parâmetros
| Nome | Onde | Tipo | Obrigatório | Descrição |
|---|---|---|---|---|
name | query | string | Filtrar pelo nome da pasta | |
numberOfRecords | query | integer | ||
pageNumber | query | integer |
Respostas
| Código | Descrição |
|---|---|
200 | Pastas de mensagens devolvidas com sucesso |
401 | Token inválido ou expirado |
Carregar um ficheiro CSV ou XLSX para importar contactos em massa para uma lista. O ficheiro é colocado em fila para processamento assíncrono — acompanhe a conclusão através do import_job_id devolvido ou através do callback opcional webhook_url.
/Import/UploadCarregar um ficheiro de contactos (CSV / XLSX) para importação em massa
Carregue um ficheiro CSV ou XLSX para importar contactos para uma lista. O ficheiro é armazenado e colocado em fila para processamento assíncrono — o endpoint devolve um import_job_id de imediato.
Tipo de pedido: multipart/form-data
Campos de formulário obrigatórios:
id_list (inteiro) — ID da lista de destinofile (binário) — o ficheiro CSV ou XLSX a carregarjson_match_fields (string, JSON) — que coluna do ficheiro vai para que campo do contacto. email_position = coluna do e-mail, numerada a partir de 0 (obrigatório), phone_position = coluna do número de telemóvel ou -1, fields = IDs dos restantes campos (ver GET /Field), fields_position = coluna de cada um deles, update_fields = atualizar os contactos existentes. Correspondência ausente ou inválida: resposta 400, nenhuma importação é criada.Opcional:
webhook_url (string) — URL HTTPS chamado quando o processamento termina. Recebe uma carga útil JSON com o estado final (sucesso / falha) e contagens de linhas importadas / ignoradas / inválidas.Formato do ficheiro:
json_match_fieldsCorpo do pedido (multipart/form-data)
| Nome | Tipo | Obrigatório | Descrição |
|---|---|---|---|
id_list | integer (int64) | sim | ID da lista de destino |
file | string (binary) | sim | Ficheiro CSV ou XLSX (UTF-8, máximo 50 MB) |
json_match_fields | string | sim | Correspondência JSON entre as colunas do ficheiro e os campos do contacto |
webhook_url | string (uri) | URL de callback invocado quando o processamento termina |
Respostas
| Código | Descrição |
|---|---|
200 | Ficheiro aceite e colocado em fila |
400 | Nenhum ficheiro carregado, id_list em falta, ou json_match_fields ausente / inválido |
401 | Token inválido ou expirado |
500 | Erro de servidor ou de armazenamento |
Exemplo 200
{
"result": "OK",
"import_job_id": 14,
"internal_name": "230575-20260420142615-contacts.csv"
}
Subscreva o seu servidor a notificações de eventos em tempo real. O Mailpro envia uma carga útil JSON assinada com HMAC via POST para o seu URL assim que o evento subscrito ocorrer. Consulte a secção "Webhooks" na introdução para o catálogo completo de eventos, envelope de carga útil, fragmentos de verificação de assinatura e política de novas tentativas.
/WebhookListar webhooks
Devolve todos os webhooks configurados na conta autenticada.
Respostas
| Código | Descrição |
|---|---|
200 | Array de webhooks |
401 | Token inválido ou expirado |
/WebhookCriar um webhook
Cria uma nova subscrição de webhook. A resposta contém um secret que is apresentado apenas uma vez — armazene-o imediatamente, no lado do servidor. Utilize-o para verificar a assinatura HMAC de cada carga útil recebida.
Limites: máximo 20 webhooks por conta, máximo 50 eventos por webhook.
Corpo do pedido (application/json)
| Nome | Tipo | Obrigatório | Descrição |
|---|---|---|---|
url | string (uri) | sim | Endpoint HTTPS (HTTP recusado em produção) |
events | array of string | sim | Lista de tipos de eventos a subscrever (consulte o catálogo acima). Utilize ["*"] para subscrever todos os eventos desta API. |
description | string | Descrição livre para sua referência |
Exemplo
{
"url": "https://example.com/hooks/mailpro",
"events": [
"email.delivered",
"email.bounced",
"contact.created"
],
"description": "Integração Slack"
}
Respostas
| Código | Descrição |
|---|---|
201 | Webhook criado — secret é devolvido apenas aqui |
400 | URL, lista de eventos inválidos ou limite excedido |
401 | Token inválido ou expirado |
Exemplo 201
{
"id": 42,
"url": "https://example.com/hooks/mailpro",
"events": [
"email.delivered",
"email.bounced",
"contact.created"
],
"description": "Integraçã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"
}
/Webhook/{id}Obter um webhook
Parâmetros
| Nome | Onde | Tipo | Obrigatório | Descrição |
|---|---|---|---|---|
id | path | integer (int64) | sim |
Respostas
| Código | Descrição |
|---|---|
200 | O webhook |
404 | Webhook não encontrado |
/Webhook/{id}Atualizar um webhook
Atualização parcial — apenas os campos enviados são modificados.
Parâmetros
| Nome | Onde | Tipo | Obrigatório | Descrição |
|---|---|---|---|---|
id | path | integer (int64) | sim |
Corpo do pedido (application/json)
| Nome | Tipo | Obrigatório | Descrição |
|---|---|---|---|
url | string (uri) | ||
events | array of string | ||
description | string | ||
isActive | boolean | Defina true para reativar um webhook desativado automaticamente assim que o seu endpoint estiver corrigido. |
Respostas
| Código | Descrição |
|---|---|
200 | Webhook atualizado |
400 | Carga útil inválida |
404 | Webhook não encontrado |
/Webhook/{id}Eliminar um webhook
Elimina permanentemente o webhook e todo o seu histórico de entregas.
Parâmetros
| Nome | Onde | Tipo | Obrigatório | Descrição |
|---|---|---|---|---|
id | path | integer (int64) | sim |
Respostas
| Código | Descrição |
|---|---|
204 | Eliminado |
404 | Webhook não encontrado |
/Webhook/{id}/testEnviar um evento de teste
Coloca em fila um evento ping imediato (ou qualquer outro tipo de evento através do campo eventType do corpo) para o seu endpoint. Útil para verificar a acessibilidade e a verificação de assinatura antes de depender de eventos reais.
Parâmetros
| Nome | Onde | Tipo | Obrigatório | Descrição |
|---|---|---|---|---|
id | path | integer (int64) | sim |
Corpo do pedido (application/json)
| Nome | Tipo | Obrigatório | Descrição |
|---|---|---|---|
eventType | string | Substituir o tipo de evento (deve estar subscrito por este webhook). ping funciona sempre. |
Exemplo
{
"eventType": "ping"
}
Respostas
| Código | Descrição |
|---|---|
202 | Evento colocado em fila para despacho |
404 | Webhook não encontrado |
Exemplo 202
{
"deliveryId": 1234,
"eventId": "evt_8f3a9b2c4d1e5f6789abcdef01234567",
"eventType": "ping"
}
/Webhook/{id}/rotate-secretRodar o segredo HMAC
Gera um novo segredo HMAC e invalida o antigo de imediato. O novo segredo é devolvido uma única vez na resposta — armazene-o. Cada entrega a partir deste momento será assinada com o novo segredo.
Utilize isto se suspeitar que o seu segredo foi comprometido.
Parâmetros
| Nome | Onde | Tipo | Obrigatório | Descrição |
|---|---|---|---|---|
id | path | integer (int64) | sim |
Respostas
| Código | Descrição |
|---|---|
200 | Novo segredo (visível uma vez) |
404 | Webhook não encontrado |
Exemplo 200
{
"secret": "whsec_XyzA9876BcdE5432FghI1098JklM7654NopQ"
}
/Webhook/{id}/deliveriesListar tentativas de entrega
Devolve o histórico de tentativas de despacho deste webhook (retenção de 30 dias). Útil para depuração — quais eventos foram enviados, códigos de estado recebidos, contagens de novas tentativas, mensagens de erro.
Parâmetros
| Nome | Onde | Tipo | Obrigatório | Descrição |
|---|---|---|---|---|
id | path | integer (int64) | sim | |
limit | query | integer | ||
cursor | query | integer (int64) | Cursor de paginação (= último ID de entrega visto). Devolve entregas com id < cursor. |
Respostas
| Código | Descrição |
|---|---|
200 | Array de tentativas de entrega (mais recentes primeiro) |
404 | Webhook não encontrado |
/Webhook/{id}/deliveries/{deliveryId}/replayReproduzir uma entrega
Coloca em fila uma nova tentativa de entrega com a mesma carga útil do original. Útil para reacionar uma entrega falhada após corrigir o seu endpoint. Uma NOVA linha Webhook_Delivery é criada (a original é preservada para auditoria). A reprodução passa pela política de novas tentativas padrão (10s → 1min → 5min → 30min → 2h → 6h → 24h, depois abandonada).
Parâmetros
| Nome | Onde | Tipo | Obrigatório | Descrição |
|---|---|---|---|---|
id | path | integer (int64) | sim | |
deliveryId | path | integer (int64) | sim |
Respostas
| Código | Descrição |
|---|---|
202 | Reprodução colocada em fila |
404 | Webhook ou entrega não encontrados |
Bounces e cancelamentos de subscrição da conta: listar, adicionar, remover.
/Suppression/BouncesListar os bounces da conta
Os mais recentes primeiro. O total está no cabeçalho X-Total-Count.
Scope OAuth : email:read
Parâmetros
| Nome | Onde | Tipo | Obrigatório | Descrição |
|---|---|---|---|---|
type | query | string: hard, soft | hard ou soft | |
source | query | string | Origem do bounce: list, contact, api ou smtp | |
email | query | string | Endereço exato | |
dateFrom | query | string (date-time) | A partir desta data | |
dateTo | query | string (date-time) | Até esta data | |
numberOfRecords | query | integer | ||
pageNumber | query | integer |
Respostas
| Código | Descrição |
|---|---|
200 | Bounces devolvidos |
400 | type tem de ser hard ou soft |
401 | Token inválido ou expirado |
Exemplo 200
[
{
"id": 5521,
"source": "contact",
"type": "hard",
"email": "[email protected]",
"date": "2026-10-12T08:30:00",
"diag_code": "550 5.1.1 User unknown",
"id_list": 101
}
]
/Suppression/Bounces/{id}Remover um bounce
source e type são obrigatórios, tal como devolvidos por GET /Suppression/Bounces: um id sozinho não é único.
Scope OAuth : contacts:write
Parâmetros
| Nome | Onde | Tipo | Obrigatório | Descrição |
|---|---|---|---|---|
id | path | integer (int64) | sim | id do bounce |
source | query | string | sim | list, contact, api ou smtp |
type | query | string: hard, soft | sim | hard ou soft |
Respostas
| Código | Descrição |
|---|---|
200 | Bounce removido |
400 | source ou type em falta |
401 | Token inválido ou expirado |
404 | Bounce não encontrado |
Exemplo 200
{
"result": "ok",
"id": 5521,
"restored": false
}
/Suppression/Bounces/{id}/RestoreRepor nas suas listas um contacto com hard bounce
Apenas para um hard bounce com a origem contact.
Scope OAuth : contacts:write
Parâmetros
| Nome | Onde | Tipo | Obrigatório | Descrição |
|---|---|---|---|---|
id | path | integer (int64) | sim | id do bounce |
Respostas
| Código | Descrição |
|---|---|
200 | Contacto reposto |
401 | Token inválido ou expirado |
404 | Hard bounce de um contacto não encontrado ou endereço já não ativo |
Exemplo 200
{
"result": "ok",
"id": 5521,
"restored": true
}
/Suppression/UnsubscribersListar 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
| Nome | Onde | Tipo | Obrigatório | Descrição |
|---|---|---|---|---|
source | query | string | Origem do cancelamento: contact, list, smtp, api ou api3 | |
email | query | string | Endereço exato | |
dateFrom | query | string (date-time) | A partir desta data | |
dateTo | query | string (date-time) | Até esta data | |
numberOfRecords | query | integer | ||
pageNumber | query | integer |
Respostas
| Código | Descrição |
|---|---|
200 | Cancelamentos de subscrição devolvidos |
401 | Token inválido ou expirado |
Exemplo 200
[
{
"id": 9012,
"source": "api3",
"email": "[email protected]",
"date": "2026-10-20T16:05:00",
"list_name": null,
"comment": "Asked by phone"
}
]
/Suppression/UnsubscribersAdicionar um cancelamento de subscrição
Sem id_list, a subscrição do endereço é cancelada para toda a conta. Com id_list, apenas nessa lista de cancelamento.
Scope OAuth : contacts:write
Corpo do pedido (application/json)
| Nome | Tipo | Obrigatório | Descrição |
|---|---|---|---|
email | string | sim | Endereço cuja subscrição cancelar |
comment | string | Comentário livre | |
id_list | integer (int64) | Lista de cancelamento da conta (opcional) |
Respostas
| Código | Descrição |
|---|---|
200 | Concluído. already_unsubscribed é true quando a subscrição do endereço já estava cancelada. |
400 | É necessário um endereço válido |
401 | Token inválido ou expirado |
404 | id_list não é uma lista de cancelamento desta conta |
Exemplo 200
{
"result": "ok",
"already_unsubscribed": false
}
/Suppression/Unsubscribers/{id}Remover um cancelamento de subscrição
source é obrigatório, tal como devolvido por GET /Suppression/Unsubscribers: um id sozinho não é único.
Scope OAuth : contacts:write
Parâmetros
| Nome | Onde | Tipo | Obrigatório | Descrição |
|---|---|---|---|---|
id | path | integer (int64) | sim | id do cancelamento |
source | query | string | sim | contact, list, smtp, api ou api3 |
Respostas
| Código | Descrição |
|---|---|
200 | Cancelamento de subscrição removido |
400 | source é obrigatório |
401 | Token inválido ou expirado |
404 | Cancelamento de subscrição não encontrado |
Exemplo 200
{
"result": "ok",
"removed": 9012
}