Documentação interativa · Portal de programadores · Especificação OpenAPI · EN · FR · DE · IT · PT · ES
URL de base : https://api.mailpro.com/sms
A API SMS Mailpro™ permite gerir programaticamente listas de contactos telefónicos, números de telefone e enviar SMS em massa ou individualmente.
Todos os endpoints aceitam três métodos de autenticação. Utilize aquele que melhor se adeque à sua stack.
POST /token, sem scopes.> O Bearer JWT legado e o id_client+api_key continuam a funcionar sem alterações e não > são restringidos por scope. Apenas os tokens de acesso OAuth 2.0 estão sujeitos às > verificações de scope por endpoint apresentadas em cada operação abaixo.
A Mailpro disponibiliza um único servidor de autorização OAuth 2.0 para todas as suas APIs, numa superfície única e independente da versão: https://api.mailpro.com/oauth/. Não existe um endpoint OAuth por versão — obtém um token em /oauth/token e o mesmo token funciona nesta API SMS, na CRM v3 e na Email v2. Os endpoints que poderá invocar são determinados pelos scopes do token e não pelo URL base da API. Emissor (claim iss): https://api.mailpro.com/oauth/.
| Endpoint | URL |
|---|---|
| Authorize | GET https://api.mailpro.com/oauth/authorize |
| Token / Refresh | POST https://api.mailpro.com/oauth/token |
| JWKS | GET https://api.mailpro.com/oauth/.well-known/jwks |
| Discovery | GET https://api.mailpro.com/oauth/.well-known/openid-configuration |
Grants: authorization_code + PKCE (S256, obrigatório), client_credentials, refresh_token (rotação). TTL do token de acesso 20 min; refresh token 30 dias (deslizante, de uso único); código de autorização 60 s.
Quickstart — obter um token e invocar esta API (substitua os marcadores; nunca faça commit de um secret real):
curl -X POST https://api.mailpro.com/oauth/token \
-H "Content-Type: application/x-www-form-urlencoded" \
-d "grant_type=client_credentials" \
-d "client_id=YOUR_CLIENT_ID" \
-d "client_secret=YOUR_CLIENT_SECRET" \
-d "scope=sms:send sms:read"
Depois invoque esta API com Authorization: Bearer ACCESS_TOKEN. O mesmo token funciona nas APIs CRM v3 e Email v2. Um token sem o scope exigido por um endpoint recebe 403 insufficient_scope. Para o passo a passo completo do fluxo e o catálogo de scopes, consulte a documentação da API CRM v3 › Autenticação. Scopes relevantes para SMS: sms:send, sms:read, sms:contacts:read, sms:contacts:write, account:read.
Authorization: Bearer <access_token>
Obtenha um token via POST /token (form-encoded, OAuth2 password grant):
POST https://api.mailpro.com/sms/token
Content-Type: application/x-www-form-urlencoded
grant_type=password&username=YOUR_USERNAME&password=YOUR_API_KEY
O mesmo token também é válido na API CRM v3 e na API Email v2 — autentique-se uma vez e invoque qualquer API. Os tokens são válidos por 30 dias por defeito; utilize grant_type=refresh_token para os renovar sem voltar a autenticar. Não tem scopes — prefira o OAuth 2.0 para integrações instaláveis.
Duas credenciais:
| Parâmetro | Tipo | Descrição |
|---|---|---|
id_client | integer | O seu ID numérico de cliente Mailpro, disponível em Definições → Acesso à API |
api_key | string | A sua chave de API (formato GUID), disponível em Definições → Acesso à API |
Envie-as num destes locais — escolha um:
id_client: 12345 e api_key: a1b2c3d4-…. Os URLs são registados por servidores web, CDNs e proxies, pelo que uma chave na query string pode acabar exposta nos logs de acesso. Os cabeçalhos não são registados.?id_client=12345&api_key=…. Mantido por retrocompatibilidade com integrações existentes. Mude para cabeçalhos assim que possível.Se fornecer credenciais em mais do que um local, o cabeçalho prevalece.
Para tokens emitidos via OAuth, cada grupo de endpoints exige um scope (a autenticação legada está isenta). Cada operação indica o seu scope em Authorization. Resumo:
| Endpoints | Scope exigido |
|---|---|
/send/* (em massa, individual, agendamento) | sms:send |
/history/list, /credit/get | sms:read |
/phone/list, /list/list | sms:contacts:read |
/phone/{add,edit,del}, /list/{edit,del}, /import/upload | sms:contacts:write |
/account/limits | account:read |
> O POST /list/add (criar uma lista) é atualmente acessível por qualquer > token válido — ainda não é restringido por scope. A rejeição por scope nos endpoints > restringidos devolve 403 com > { "error": "insufficient_scope", "required_scope": "…" }.
Todos os endpoints suportam json (predefinição) e xml. Especifique o formato no URL:
/credit/get.json/credit/get.xmlOs nomes dos campos nas respostas estão em PascalCase (TotalCredits, FirstName, …), enquanto os parâmetros de pedido estão em snake_case (id_client, address_book_id, …). Os endpoints de lista envolvem as suas linhas num array Items.
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).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.
Um SMS custa créditos do país × número de partes.
Créditos do país — cada país de destino tem um preço de 1, 2 ou 3 créditos, com base no prefixo internacional do número. O envio para um número cujo prefixo não tarifamos é rejeitado com um 400.
Número de partes — uma mensagem mais longa do que um SMS é dividida pelo operador e cada parte é cobrada. O limite depende dos caracteres utilizados:
| Alfabeto | Mensagem única | Por parte quando dividida |
|---|---|---|
| GSM-7 (latino padrão) | 160 caracteres | 153 caracteres |
| Unicode (acentos fora do GSM-7, cirílico, emoji, …) | 70 caracteres | 67 caracteres |
Um único carácter fora do GSM-7 passa toda a mensagem para Unicode; assim, um emoji pode levar uma mensagem de 160 caracteres de 1 para 3 partes. Os caracteres ^ { } [ ] ~ | \ e € contam como dois cada um, embora sejam GSM-7.
*Exemplo:* uma mensagem de 300 caracteres em latino padrão = 2 partes; enviada para um país de 2 créditos, custa 2 × 2 = 4 créditos por destinatário.
Os números de telefone são normalizados automaticamente. Pode enviá-los em vários formatos — espaços, hífenes, pontos, barras, parênteses, underscores 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 ( ), underscore _, NBSP=, ;, + dentro do número, etc.) → rejeitado41794849980)| HTTP | Código | Significado |
|---|---|---|
| 400 | 103 | Entrada malformada — parâmetro obrigatório em falta ou inválido |
| 202 | 202 | Créditos SMS insuficientes |
| 401 | id_client / api_key inválidos | |
| 500 | 500 | Erro interno |
A Mailpro™ pode notificar o seu servidor em tempo real quando ocorrem eventos SMS na sua conta (um SMS é entregue, um SMS falha, o seu saldo de créditos está baixo, etc.). Ao estilo Stripe — o seu URL recebe um POST assinado com HMAC-SHA256 assim que o evento dispara.
Cada evento enviado para o seu webhook conta como 1 pedido na sua quota de pedidos à API.
POST /webhooks. A resposta contém um secret mostrado uma única vez (estilo Stripe / GitHub) — guarde-o.secret (snippets abaixo).> ⏱ Atraso de ativação — depois de criar, atualizar ou eliminar um webhook, a > alteração demora até 10 minutos a propagar-se pelos servidores da API Mailpro. > Durante essa janela, os eventos podem ainda não corresponder à sua nova subscrição > (ou continuar a corresponder a uma acabada de remover). Este é o tempo necessário para > atualizar a cache em memória de subscrições em cada instância da API.
Todos os eventos partilham um envelope comum:
{
"id": "evt_8f3a9b2c4d1e5f6789abcdef01234567",
"type": "sms.queued",
"created": 1748194800,
"apiVersion": "sms",
"account": { "id": 12345, "name": "ACME Corp" },
"data": {
"messageId": 12345,
"to": "41791234567",
"queuedAt": "2026-05-27T14:32:12.0123456Z",
"scheduledAt": "2026-05-27T14:32:12.0123456Z",
"parts": 1
}
}
| Campo | Formato | Descrição |
|---|---|---|
id | evt_ + 32 hex | ID único do evento — utilize-o como chave de idempotência do seu lado. |
type | <domínio>.<verbo> | Tipo canónico do evento. |
created | Segundos Unix UTC | Incluído na assinatura HMAC. |
apiVersion | "sms" para eventos emitidos por POST /sms/send/add_single; "v3" para eventos emitidos por POST /v3/Sms/SingleSMS; "watcher" para eventos baseados em DLR emitidos pelo worker. | Qual o componente Mailpro que publicou o evento. |
account.id | int | O seu ID de cliente Mailpro (= id_client). |
account.name | string | O nome da sua conta (útil para debug do lado do cliente). |
data | object | Payload do evento — a estrutura depende do type (ver catálogo abaixo). |
Apenas os eventos listados abaixo são efetivamente emitidos. As estruturas correspondem ao JSON literal enviado pela plataforma — utilize exatamente estes nomes de campos ao fazer parsing.
| Evento | Disparo | Estrutura de data |
|---|---|---|
ping | Teste via POST /webhooks/{id}/test | { message } |
sms.queued | POST /sms/send/add_single ou POST /v3/Sms/SingleSMS aceite na fila de envio Mailpro | { messageId: int, to: string, queuedAt: ISO-8601, scheduledAt: ISO-8601, parts: int } |
sms.delivered | DLR com código de operadora 004 ou 008 (códigos de sucesso) | { messageId: int, phone: string, stateCode: string, dlrDate: datetime } |
sms.failed | DLR com qualquer outro código de operadora (timeout, não entregue, rejeitado, em lista negra, …) | { messageId: int, phone: string, stateCode: string, dlrDate: datetime } |
credits.sms.low | Saldo de créditos SMS desceu abaixo do seu limiar de alerta (worker CreditsLowWatcher) | { remaining: int, threshold: int, alertedAt: ISO-8601 } |
> Nota — não existe um evento sms.sent. O DLR da operadora é o único feedback > que a plataforma recebe entre "queued" e "delivered/failed", pelo que o próximo > evento que receberá após sms.queued será sms.delivered (sucesso) ou > sms.failed (erro). A maioria das mensagens chega à operadora em segundos e o > DLR em minutos; as condições da rede móvel podem ocasionalmente prolongar este prazo > para horas.
> Nomenclatura dos campos — sms.queued utiliza to (o destino tal como submetido > pelo invocador da API, após normalização). sms.delivered / sms.failed utilizam > phone (o destino tal como devolvido pela operadora no DLR). Na prática serão > os mesmos dígitos, mas os nomes diferem porque os eventos > têm origem em caminhos de código distintos.
Subscreva todos os eventos desta API passando ["*"] no array events.
Cada POST inclui um cabeçalho X-Mailpro-Signature:
X-Mailpro-Signature: t=1748194800,v1=7f9ac2b6e4d1c8a3...
X-Mailpro-Event-Id: evt_8f3a9b2c4d1e5f6789abcdef01234567
X-Mailpro-Event-Type: sms.delivered
X-Mailpro-Attempt: 1
Para verificar:
t e v1 do cabeçalho.|now - t| > 300 (janela de proteção contra replay de 5 minutos).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 até à próxima tentativa |
|---|---|
| 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 | abandonada (entrega marcada como failed) |
Após 10 falhas consecutivas no mesmo webhook, este é automaticamente desativado (isActive: false) e receberá uma notificação por email. Reative-o com PUT /webhooks/{id} assim que o seu endpoint estiver corrigido.
Consideramos o seu webhook como bem-sucedido apenas se devolver um status entre 200–299. Qualquer 3xx/4xx/5xx ou um timeout (> 10 s) conta como falha e desencadeia novas tentativas. Se o seu endpoint estiver permanentemente inativo, devolva explicitamente 410 Gone — as tentativas continuam a ocorrer, mas o motivo da falha fica mais claro no seu log de entregas.
| Limite | Valor |
|---|---|
| Webhooks por conta | 20 |
| Eventos subscritos por webhook | 50 |
| Tamanho máximo do payload | 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 restantes chamadas à API. O endpoint SMS /token é um redireccionamento 307 para o emissor canónico /v3/token — o seu cliente HTTP segue o redireccionamento de forma transparente (o método POST e o corpo do pedido são preservados).
/tokenObter token de acesso (redireccionamento 307 para /v3/token)
Obtém um token JWT Bearer utilizando as credenciais do cliente Mailpro. Envie o access_token devolvido como Authorization: Bearer <token> em todos os pedidos subsequentes. O mesmo token é igualmente válido na API CRM v3 e na API Email v2.
> ⚙ Detalhe de implementação — POST /sms/token é um redireccionamento > temporário 307 para POST /v3/token (configurado na camada de reescrita do > web.config do IIS). O HTTP 307 preserva tanto o método (POST) como > o corpo do pedido, pelo que qualquer cliente HTTP em conformidade com a norma > segue o redireccionamento de forma transparente — continua a enviar pedidos para /sms/token e recebe > de volta um JWT válido. Não há lógica de emissão de tokens duplicada; a > API SMS nunca emite tokens por si própria.
| Tipo de grant | Caso de uso |
|---|---|
password | Integração padrão — nome de utilizador + chave de API |
refresh_token | Renovar um token de acesso que está a expirar sem reautenticação |
client_credentials | Servidor-a-servidor apenas com o ID de cliente |
Utilize grant_type=refresh_token para renovar o token de acesso sem reautenticação. Guarde os tokens no lado do servidor (Vault, variáveis de ambiente); nunca os incorpore em JavaScript de browser ou em binários de aplicações móveis. Consulte a documentação do /token da API CRM v3 para a nota de segurança completa.
Corpo do pedido (application/x-www-form-urlencoded)
| Nome | Tipo | Obrigatório | Descrição |
|---|---|---|---|
grant_type | string: password, refresh_token, client_credentials | sim | |
username | string | O seu nome de utilizador Mailpro (email). Obrigatório para o grant password. | |
password | string | A sua chave de API Mailpro (formato GUID). Obrigatório para o grant password. | |
refresh_token | string | Refresh token anterior. Obrigatório para o grant refresh_token. | |
client_id | string | O seu ID de cliente Mailpro (inteiro). Obrigatório para o grant client_credentials. |
Respostas
| Código | Descrição |
|---|---|
200 | Token emitido com sucesso. Devolvido por POST /v3/token após o
seguimento transparente do 307 — o seu cliente HTTP vê um 200 normal com
a mesma forma de corpo que receberia directamente do endpoint de token v3.
|
307 | Redireccionamento temporário para POST /v3/token, emitido pela regra de reescrita
do IIS no web.config. Os clientes HTTP em conformidade com a norma seguem este redireccionamento
automaticamente e preservam o método POST original + o corpo do formulário.
Visível apenas para clientes que desactivam explicitamente o seguimento de redireccionamentos
(p. ex. curl --max-redirs 0).
|
400 | Credenciais inválidas ou tipo de grant 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."
}
Verifique o seu saldo de créditos SMS, a quota mensal da API e o estado da conta.
/account/limits.{format}Obter quota mensal da API
Devolve a quota mensal de pedidos à API para o cliente autenticado.
Cálculo da quota: o limite é calibrado a partir dos créditos de 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. Reinicia na data de aniversário da subscrição (e não no dia 1 do mês de calendário).
O que consome créditos:
v2, v3 ou sms.O que é GRATUITO (não consome créditos):
/health.401, 403 ou 429.A quota é partilhada entre as 3 APIs Mailpro (v2, v3, sms) — um cliente = um orçamento mensal em toda a plataforma. Os envios SMS consomem adicionalmente o saldo de créditos SMS dedicado (GET /credit/get.{format}).
Scope OAuth : account:read
Parâmetros
| Nome | Onde | Tipo | Obrigatório | Descrição |
|---|---|---|---|---|
format | path | string: json, xml | sim | Formato da resposta |
Respostas
| Código | Descrição |
|---|---|
200 | Instantâneo da quota |
401 | Credenciais inválidas |
404 | Nenhum registo de quota encontrado (conta recém-criada; a linha será criada no primeiro pedido autenticado). |
Exemplo 200
{
"monthlyLimit": 50000,
"remaining": 32847,
"used": 17153,
"isFree": false,
"remainedSendsForFree": null
}
Envie mensagens SMS — quer um SMS transaccional único para um destinatário, quer uma campanha em massa para uma lista de contactos completa.
/send/add.{format}Enviar SMS em massa para uma lista de contactos
Envia uma mensagem SMS para todos os números de telefone de uma lista de contactos. Suporta agendamento: defina scheduled_time para uma data futura para enviar mais tarde, ou omita-o para enviar imediatamente.
Consumo de créditos: os créditos são debitados no momento do envio. Mensagens longas (>160 caracteres GSM-7) são divididas em várias partes, cada uma consumindo créditos adicionais.
A resposta devolve { "Error": "Insufficient Credit", "Code": 202 } se a conta não tiver créditos suficientes.
Scope OAuth : sms:send
Parâmetros
| Nome | Onde | Tipo | Obrigatório | Descrição |
|---|---|---|---|---|
format | path | string: json, xml | sim | Formato da resposta |
Corpo do pedido (application/x-www-form-urlencoded)
| Nome | Tipo | Obrigatório | Descrição |
|---|---|---|---|
id_client | integer | sim | O seu ID de cliente Mailpro |
api_key | string | sim | A sua chave de API (GUID) |
message | string | sim | Texto da mensagem SMS. Mantenha abaixo dos 160 caracteres para um SMS de parte única. Caracteres fora do alfabeto GSM-7 (p. ex. chinês, árabe, emoji) mudam a codificação para Unicode, reduzindo o limite para 70 caracteres por parte. |
to | integer | sim | ID da lista de contactos para a qual enviar (obtido em /list/list) |
scheduled_time | string (date-time) | Agende o envio para uma data/hora futura (ISO 8601). Omita ou deixe vazio para enviar imediatamente. | |
shorten_urls | boolean | Defina true para substituir cada hiperligação da mensagem por uma ligação curta https://mailp.ro/m/...: menos caracteres, logo por vezes menos partes de SMS faturadas. Uma hiperligação que não possa ser encurtada fica como está. |
Respostas
| Código | Descrição |
|---|---|
200 | Envio SMS em massa criado com sucesso |
202 | Créditos SMS insuficientes |
400 | Falta um campo obrigatório |
401 | Credenciais inválidas |
Exemplo 200
{
"Id": 6001,
"Message": "Flash sale today only — 30% off all orders. Shop now at mailpro.com/shop",
"ScheduledTime": "2026-04-20T10:00:00",
"To": [
"42"
]
}
Exemplo 202
{
"Error": "Insufficient Credit",
"Code": 202
}
Exemplo 400
{
"Error": "Malformed Input",
"Code": 103
}
/send/add_single.{format}Enviar um SMS único (GET)
Envia um único SMS para um destinatário através de um pedido GET. Útil para integrações simples nas quais POST não está disponível. As credenciais e a mensagem são passadas como parâmetros de query.
Nota: evite utilizar GET para mensagens sensíveis — os parâmetros de query aparecem nos registos do servidor. Prefira POST /send/add_single.
Scope OAuth : sms:send
Parâmetros
| Nome | Onde | Tipo | Obrigatório | Descrição |
|---|---|---|---|---|
format | path | string: json, xml | sim | Formato da resposta |
to | query | 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 | query | string | sim | Texto da mensagem SMS (máximo 160 caracteres para codificação padrão) |
scheduled_time | query | string (date-time) | Agende o envio (ISO 8601). Omita para enviar imediatamente. | |
shorten_urls | query | boolean | Defina true para substituir cada hiperligação da mensagem por uma ligação curta https://mailp.ro/m/...: menos caracteres, logo por vezes menos partes de SMS faturadas. Uma hiperligação que não possa ser encurtada fica como está. |
Respostas
| Código | Descrição |
|---|---|
200 | SMS enviado (ou agendado) com sucesso |
202 | Créditos SMS insuficientes |
400 | Falta um parâmetro obrigatório |
401 | Credenciais inválidas |
Exemplo 200
{
"Id": 5001,
"Message": "Your appointment is confirmed for tomorrow at 10:00.",
"ScheduledTime": "2026-04-15T09:00:00",
"To": "0041791234567",
"Charge": "1"
}
/send/add_single.{format}Enviar um SMS único
Envia uma única mensagem SMS para um número de telefone destinatário. Suporta agendamento através de scheduled_time.
Consumo de créditos: os créditos são debitados no momento do envio. O campo Charge na resposta mostra quantos créditos foram consumidos.
A resposta devolve { "Error": "Insufficient Credit", "Code": 202 } se a conta não tiver créditos suficientes.
Scope OAuth : sms:send
Parâmetros
| Nome | Onde | Tipo | Obrigatório | Descrição |
|---|---|---|---|---|
format | path | string: json, xml | sim | Formato da resposta |
Corpo do pedido (application/x-www-form-urlencoded)
| Nome | Tipo | Obrigatório | Descrição |
|---|---|---|---|
id_client | integer | sim | O seu ID de cliente Mailpro |
api_key | string | sim | A sua chave de API (GUID) |
message | string | sim | Texto da mensagem SMS |
to | 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. |
scheduled_time | string (date-time) | Agende o envio para uma hora futura. Omita para enviar imediatamente. | |
shorten_urls | boolean | Defina true para substituir cada hiperligação da mensagem por uma ligação curta https://mailp.ro/m/...: menos caracteres, logo por vezes menos partes de SMS faturadas. Uma hiperligação que não possa ser encurtada fica como está. |
Respostas
| Código | Descrição |
|---|---|
200 | SMS enviado (ou agendado) com sucesso |
202 | Créditos SMS insuficientes |
400 | Falta um campo obrigatório |
401 | Credenciais inválidas |
Exemplo 200
{
"Id": 5001,
"Message": "Your verification code is 8472. Valid for 10 minutes.",
"ScheduledTime": "2026-04-15T14:30:00",
"To": "0041791234567",
"Charge": "1"
}
Exemplo 202
{
"Error": "Insufficient Credit",
"Code": 202
}
Exemplo 400
{
"Error": "Malformed Input",
"Code": 103
}
/send/list.{format}Listar campanhas SMS
Devolve a lista de campanhas SMS (envios em massa) para a conta. Paginação através dos cabeçalhos NumberOfRecords e PageNumber.
Utilize type_to para filtrar por tipo de envio:
0 (predefinição) — envios em massa para uma lista1 — envios individuais únicosScope OAuth : sms:send
Parâmetros
| Nome | Onde | Tipo | Obrigatório | Descrição |
|---|---|---|---|---|
format | path | string: json, xml | sim | Formato da resposta |
type_to | query | integer: 0, 1 | Filtro do tipo de envio:
- 0 (predefinição) — envios em massa para uma lista de contactos
- 1 — envios únicos para números individuais
|
Respostas
| Código | Descrição |
|---|---|
200 | Lista de campanhas SMS devolvida com sucesso |
401 | Credenciais inválidas |
Exemplo 200
[
{
"Id": 5001,
"Message": "Your verification code is 8472",
"ScheduledTime": "2026-04-15T09:00:00",
"To": "41791234567"
}
]
/send/del.{format}Cancelar ou eliminar um envio SMS
Cancela um envio SMS agendado pendente, ou elimina um envio concluído do histórico. Apenas os envios agendados para o futuro podem ser cancelados. Os envios em curso não podem ser parados.
Scope OAuth : sms:send
Parâmetros
| Nome | Onde | Tipo | Obrigatório | Descrição |
|---|---|---|---|---|
format | path | string: json, xml | sim | Formato da resposta |
Corpo do pedido (application/x-www-form-urlencoded)
| Nome | Tipo | Obrigatório | Descrição |
|---|---|---|---|
id_client | integer | sim | O seu ID de cliente Mailpro |
api_key | string | sim | A sua chave de API (GUID) |
id_send | integer | sim | ID do envio SMS a cancelar ou eliminar (obtido em /send/list) |
Respostas
| Código | Descrição |
|---|---|
200 | Envio SMS cancelado ou eliminado com sucesso |
400 | Falta id_send |
401 | Credenciais inválidas |
500 | Falha na eliminação (envio não encontrado ou já processado) |
Exemplo 200
{
"Result": "OK"
}
Exemplo 500
{
"Error": "Delete failed",
"Code": 500
}
/send/scheduled.{format}Listar os meus envios SMS agendados
Devolve os envios SMS (únicos ou de campanha) agendados para uma data futura que ainda não foram despachados. Útil antes de invocar /cancel ou /reschedule.
Os registos são ordenados por scheduled_time ascendente.
Scope OAuth : sms:send
Parâmetros
| Nome | Onde | Tipo | Obrigatório | Descrição |
|---|---|---|---|---|
format | path | string: json, xml | sim | Formato da resposta |
id_client | query | integer | sim | |
api_key | query | string | sim | |
NumberOfRecords | header | integer | Itens por página — 5000 por predefinição e no máximo (ver Paginação). Cabeçalho HTTP ou parâmetro de query. | |
PageNumber | header | integer | Número de página com base 1 para respostas paginadas. Enviado como cabeçalho HTTP. |
Respostas
| Código | Descrição |
|---|---|
200 | Lista de envios SMS agendados |
401 | Credenciais inválidas |
Exemplo 200
[
{
"Id": 9001,
"Message": "Black Friday: 30% off until midnight.",
"ScheduledTime": "2026-11-27T12:00:00",
"To": "+33671234567"
}
]
/send/{id_send}/cancel.{format}Cancelar um envio SMS agendado
Cancela um SMS agendado que ainda não foi despachado. Se o envio já tiver sido processado (ou não existir / pertencer a outro cliente), devolve 409 Conflict.
Scope OAuth : sms:send
Parâmetros
| Nome | Onde | Tipo | Obrigatório | Descrição |
|---|---|---|---|---|
format | path | string: json, xml | sim | Formato da resposta |
id_send | path | integer | sim |
Corpo do pedido (application/x-www-form-urlencoded)
| Nome | Tipo | Obrigatório | Descrição |
|---|---|---|---|
id_client | integer | sim | |
api_key | string | sim |
Respostas
| Código | Descrição |
|---|---|
200 | Envio cancelado |
401 | Credenciais inválidas |
409 | Já despachado ou não encontrado |
Exemplo 200
{
"Result": "OK",
"Cancelled": 9001
}
Exemplo 409
{
"error": "conflict",
"message": "Send not found, not owned by client, or already dispatched."
}
/send/{id_send}/reschedule.{format}Reagendar um envio SMS agendado
Actualiza a data planeada de um SMS agendado que ainda não foi despachado. A nova data tem de estar no futuro e dentro de 90 dias.
Nome do campo de data: a API aceita scheduled_time (principal) bem como os aliases legados PlanDate, date_planned e DatePlanned. Forneça qualquer um deles — o primeiro não nulo é utilizado.
Scope OAuth : sms:send
Parâmetros
| Nome | Onde | Tipo | Obrigatório | Descrição |
|---|---|---|---|---|
format | path | string: json, xml | sim | Formato da resposta |
id_send | path | integer | sim |
Corpo do pedido (application/x-www-form-urlencoded)
| Nome | Tipo | Obrigatório | Descrição |
|---|---|---|---|
id_client | integer | sim | |
api_key | string | sim | |
scheduled_time | string (date-time) | Nome do campo principal. | |
PlanDate | string (date-time) | Alias legado aceite por compatibilidade retroactiva. | |
date_planned | string (date-time) | Alias legado aceite por compatibilidade retroactiva. | |
DatePlanned | string (date-time) | Alias legado aceite por compatibilidade retroactiva. |
Respostas
| Código | Descrição |
|---|---|
200 | Envio reagendado |
400 | scheduled_time em falta ou inválido |
401 | Credenciais inválidas |
409 | Já despachado, não encontrado, ou nova data fora do intervalo |
Exemplo 200
{
"Result": "OK",
"Id": 9001,
"NewScheduledTime": "2026-12-31T14:30:00"
}
Exemplo 409
{
"error": "conflict",
"message": "Reschedule failed — send not found, already dispatched, or new date out of range."
}
Faça a gestão das listas de contactos SMS. Uma lista de contactos agrupa números de telefone para envios em massa. Pode criar até 1000 listas por conta (mesmo limite nas três API Mailpro e na app).
/list/list.{format}Listar listas de contactos telefónicos
Devolve todas as listas de contactos SMS da conta. Utilize os valores Id devolvidos ao enviar campanhas SMS em massa ou ao adicionar números de telefone.
Scope OAuth : sms:contacts:read
Parâmetros
| Nome | Onde | Tipo | Obrigatório | Descrição |
|---|---|---|---|---|
format | path | string: json, xml | sim | Formato da resposta |
Respostas
| Código | Descrição |
|---|---|
200 | Listas telefónicas devolvidas com sucesso |
401 | Credenciais inválidas |
Exemplo 200
{
"Items": [
{
"AddressBookId": 42,
"Name": "Newsletter subscribers",
"TotalNumberPhones": 1547
},
{
"AddressBookId": 43,
"Name": "Loyalty program",
"TotalNumberPhones": 823
}
]
}
/list/add.{format}Criar uma lista de contactos
Cria uma nova lista de contactos SMS com o nome indicado. A lista começa vazia — adicione números de telefone com POST /phone/add. Máximo de 1000 listas por conta (mesmo limite nas três API Mailpro e na app). Devolve HTTP 422 se o limite for atingido.
Parâmetros
| Nome | Onde | Tipo | Obrigatório | Descrição |
|---|---|---|---|---|
format | path | string: json, xml | sim | Formato da resposta |
Corpo do pedido (application/x-www-form-urlencoded)
| Nome | Tipo | Obrigatório | Descrição |
|---|---|---|---|
id_client | integer | sim | O seu ID de cliente Mailpro |
api_key | string | sim | A sua chave de API (GUID) |
name | string | sim | Nome de exibição para a nova lista de contactos |
Respostas
| Código | Descrição |
|---|---|
200 | Lista de contactos criada com sucesso |
400 | Falta um campo obrigatório (name) |
401 | Credenciais inválidas |
Exemplo 200
{
"Id": 44,
"Name": "Spring campaign 2026",
"NumberPhones": 0
}
Exemplo 400
{
"Error": "Malformed Input",
"Code": 103
}
/list/edit.{format}Renomear uma lista de contactos
Actualiza o nome de exibição de uma lista de contactos SMS existente. Os números de telefone na lista não são afectados.
Scope OAuth : sms:contacts:write
Parâmetros
| Nome | Onde | Tipo | Obrigatório | Descrição |
|---|---|---|---|---|
format | path | string: json, xml | sim | Formato da resposta |
Corpo do pedido (application/x-www-form-urlencoded)
| Nome | Tipo | Obrigatório | Descrição |
|---|---|---|---|
id_client | integer | sim | O seu ID de cliente Mailpro |
api_key | string | sim | A sua chave de API (GUID) |
address_book_id | integer | sim | ID da lista de contactos a renomear (obtido em /list/list) |
name | string | sim | Novo nome de exibição para a lista de contactos |
Respostas
| Código | Descrição |
|---|---|
200 | Lista de contactos renomeada com sucesso |
400 | Falta um campo obrigatório |
401 | Credenciais inválidas |
/list/del.{format}Eliminar uma lista de contactos
Elimina permanentemente uma lista de contactos SMS e todos os números de telefone que ela contém. Esta acção não pode ser anulada.
Scope OAuth : sms:contacts:write
Parâmetros
| Nome | Onde | Tipo | Obrigatório | Descrição |
|---|---|---|---|---|
format | path | string: json, xml | sim | Formato da resposta |
Corpo do pedido (application/x-www-form-urlencoded)
| Nome | Tipo | Obrigatório | Descrição |
|---|---|---|---|
id_client | integer | sim | O seu ID de cliente Mailpro |
api_key | string | sim | A sua chave de API (GUID) |
address_book_id | integer | sim | ID da lista de contactos a eliminar |
Respostas
| Código | Descrição |
|---|---|
200 | Lista de contactos eliminada com sucesso |
400 | Falta address_book_id |
401 | Credenciais inválidas |
Faça a gestão dos números de telefone individuais dentro de uma lista de contactos — adicione, actualize e remova entradas.
/phone/list.{format}Listar números de telefone numa lista de contactos
Devolve uma lista paginada de números de telefone numa lista de contactos específica. Utilize address_book_id para especificar a lista a obter. Paginação: NumberOfRecords e PageNumber (5000 por página por predefinição, página 1).
Scope OAuth : sms:contacts:read
Parâmetros
| Nome | Onde | Tipo | Obrigatório | Descrição |
|---|---|---|---|---|
format | path | string: json, xml | sim | Formato da resposta |
address_book_id | query | integer | sim | ID da lista de contactos a partir da qual obter os números de telefone |
NumberOfRecords | header | integer | Itens por página — 5000 por predefinição e no máximo (ver Paginação). Cabeçalho HTTP ou parâmetro de query. | |
PageNumber | header | integer | Número de página com base 1 para respostas paginadas. Enviado como cabeçalho HTTP. | |
SortByName | header | boolean | Defina como true para ordenar os resultados alfabeticamente por nome. |
Respostas
| Código | Descrição |
|---|---|
200 | Números de telefone devolvidos com sucesso |
401 | Credenciais inválidas |
Exemplo 200
{
"Items": [
{
"Id": 1001,
"Number": "41791234567",
"FirstName": "Alice",
"LastName": "Dupont"
},
{
"Id": 1002,
"Number": "33612345678",
"FirstName": "Bob",
"LastName": "Martin"
}
]
}
/phone/add.{format}Adicionar número(s) de telefone a uma lista
Adiciona um ou mais números de telefone a uma lista de contactos.
Número único: utilize o campo number.
Importação em massa: utilize o campo phone_list com os números separados por ponto e vírgula: +41791234567;+33612345678;0049301234567
Os números de telefone aceitam o formato +, 00 ou simples — consulte Formato do número de telefone na descrição da API para a lista completa de entradas aceites / rejeitadas. Os números duplicados são silenciosamente ignorados, salvo se force=1 estiver definido.
Scope OAuth : sms:contacts:write
Parâmetros
| Nome | Onde | Tipo | Obrigatório | Descrição |
|---|---|---|---|---|
format | path | string: json, xml | sim | Formato da resposta |
Corpo do pedido (application/x-www-form-urlencoded)
| Nome | Tipo | Obrigatório | Descrição |
|---|---|---|---|
id_client | integer | sim | O seu ID de cliente Mailpro |
api_key | string | sim | A sua chave de API (GUID) |
address_book_id | integer | sim | ID da lista de contactos à qual adicionar o(s) número(s) |
number | string | Número de telefone único. Aceita +41…, 0041… ou 41… com ou sem
separadores (espaços, traços, pontos, barras, parênteses). Consulte
Formato do número de telefone na descrição da API.
Utilize este OU phone_list — não ambos.
| |
phone_list | string | Lista de números de telefone separados por ponto e vírgula para importação em massa.
Utilize este OU number — não ambos.
Exemplo: 0041791234567;0033612345678
| |
firstname | string | Nome próprio do contacto (opcional, apenas para número único) | |
lastname | string | Apelido do contacto (opcional, apenas para número único) | |
force | integer: 0, 1 | Defina como 1 para adicionar um número mesmo que tenha sido previamente cancelado ou já exista.
Predefinição: 0 (os duplicados são ignorados).
|
Respostas
| Código | Descrição |
|---|---|
200 | Número(s) de telefone adicionado(s) com sucesso |
400 | Falta um campo obrigatório |
401 | Credenciais inválidas |
Exemplo 200
{
"Id": 1003,
"Number": "0041791234567",
"FirstName": "Alice",
"LastName": "Dupont"
}
/phone/edit.{format}Actualizar uma entrada de número de telefone
Actualiza o número de telefone e/ou os dados de contacto de uma entrada existente. Utilize number_id (obtido em /phone/list) para identificar a entrada a actualizar. Apenas os campos fornecidos no pedido são actualizados.
Scope OAuth : sms:contacts:write
Parâmetros
| Nome | Onde | Tipo | Obrigatório | Descrição |
|---|---|---|---|---|
format | path | string: json, xml | sim | Formato da resposta |
Corpo do pedido (application/x-www-form-urlencoded)
| Nome | Tipo | Obrigatório | Descrição |
|---|---|---|---|
id_client | integer | sim | O seu ID de cliente Mailpro |
api_key | string | sim | A sua chave de API (GUID) |
number_id | integer | sim | ID da entrada do número de telefone a actualizar (obtido em /phone/list) |
number | string | Novo 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. | |
firstname | string | Novo nome próprio para o contacto | |
lastname | string | Novo apelido para o contacto |
Respostas
| Código | Descrição |
|---|---|
200 | Entrada do número de telefone actualizada com sucesso |
400 | Falta number_id |
401 | Credenciais inválidas |
/phone/del.{format}Remover um número de telefone de uma lista
Remove permanentemente uma entrada específica de número de telefone da sua lista de contactos. Utilize number_id (obtido em /phone/list) para identificar a entrada.
Scope OAuth : sms:contacts:write
Parâmetros
| Nome | Onde | Tipo | Obrigatório | Descrição |
|---|---|---|---|---|
format | path | string: json, xml | sim | Formato da resposta |
Corpo do pedido (application/x-www-form-urlencoded)
| Nome | Tipo | Obrigatório | Descrição |
|---|---|---|---|
id_client | integer | sim | O seu ID de cliente Mailpro |
api_key | string | sim | A sua chave de API (GUID) |
number_id | integer | sim | ID da entrada do número de telefone a eliminar (obtido em /phone/list) |
Respostas
| Código | Descrição |
|---|---|
200 | Número de telefone removido com sucesso |
400 | Falta number_id |
401 | Credenciais inválidas |
Consulte o saldo de créditos SMS restante para a sua conta (separado da quota mensal de pedidos à API — consulte /account/limits).
/credit/get.{format}Obter saldo de créditos SMS
Devolve o saldo actual de créditos SMS para a sua conta. Os créditos SMS são consumidos no momento do envio. Um SMS padrão (≤160 caracteres GSM-7) custa 1 crédito. Mensagens mais longas ou mensagens com caracteres especiais podem custar mais.
> Nota: isto devolve o seu saldo de créditos de envio SMS, não a sua quota de pedidos à API. > Para a quota da API consulte GET /account/limits.{format}.
Scope OAuth : sms:read
Parâmetros
| Nome | Onde | Tipo | Obrigatório | Descrição |
|---|---|---|---|---|
format | path | string: json, xml | sim | Formato da resposta |
Respostas
| Código | Descrição |
|---|---|
200 | Saldo de créditos devolvido com sucesso |
401 | Credenciais inválidas |
Exemplo 200
{
"TotalCredits": 5000
}
Consulte o registo completo das campanhas SMS passadas.
/history/list.{format}Listar histórico de envios SMS
Devolve um registo paginado de todas as campanhas SMS passadas enviadas a partir desta conta. Os resultados estão ordenados por data descendente (mais recente primeiro). Paginação: NumberOfRecords e PageNumber (cabeçalhos ou query, 5000 por página por predefinição).
Scope OAuth : sms:read
Parâmetros
| Nome | Onde | Tipo | Obrigatório | Descrição |
|---|---|---|---|---|
format | path | string: json, xml | sim | Formato da resposta |
Respostas
| Código | Descrição |
|---|---|
200 | Lista do histórico devolvida com sucesso |
401 | Credenciais inválidas |
Exemplo 200
{
"Items": [
{
"Id": 583294,
"DateSent": "2026-07-17T18:56:39.813",
"Message": "Your verification code is 8472",
"Charge": 3,
"Parts": 1
}
]
}
Carregue um ficheiro CSV ou XLSX para importar números de telefone em massa para uma lista de contactos. O ficheiro é colocado em fila para processamento assíncrono — acompanhe a conclusão através do ImportJobId devolvido ou através do callback opcional webhook_url.
/import/upload.{format}Carregar um ficheiro de números de telefone (CSV / XLSX) para importação em massa
Carregue um ficheiro CSV ou XLSX para importar números de telefone para uma lista de contactos. O ficheiro é armazenado e colocado em fila para processamento assíncrono — o endpoint devolve imediatamente um ImportJobId.
Tipo de pedido: multipart/form-data
Campos de formulário obrigatórios:
id_client (inteiro) — o seu ID de cliente Mailproapi_key (string) — a sua chave de APIid_list (inteiro) — ID da lista de contactos de destinofile (binário) — o ficheiro CSV ou XLSX a carregarOpcional:
webhook_url (string) — URL HTTPS invocado quando o processamento termina. Recebe um payload JSON com o estado final (success / failed) e contagens das linhas importadas / ignoradas / inválidas.Formato do ficheiro:
Phone ou PhoneNumber — sem distinção entre maiúsculas e minúsculas)+41791234567Scope OAuth : sms:contacts:write
Parâmetros
| Nome | Onde | Tipo | Obrigatório | Descrição |
|---|---|---|---|---|
format | path | string: json, xml | sim | Formato da resposta |
Corpo do pedido (multipart/form-data)
| Nome | Tipo | Obrigatório | Descrição |
|---|---|---|---|
id_list | integer (int64) | sim | ID da lista de contactos de destino |
file | string (binary) | sim | Ficheiro CSV ou XLSX (UTF-8, máximo 50 MB) |
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 ou id_list em falta |
401 | Credenciais inválidas |
500 | Erro de servidor ou de armazenamento |
Exemplo 200
{
"Result": "OK",
"ImportJobId": 15,
"InternalName": "230575-20260420142616-phones.csv"
}
Subscreva o seu servidor para notificações de eventos SMS em tempo real. O Mailpro envia um payload JSON assinado por HMAC 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, o envelope do payload, os excertos de verificação de assinatura e a política de repetição.
/webhooksListar webhooks
Devolve todos os webhooks configurados na conta autenticada.
Respostas
| Código | Descrição |
|---|---|
200 | Array de webhooks |
401 | Credenciais inválidas |
Exemplo 200
{
"items": [
{
"id": 14,
"url": "https://example.com/hooks/mailpro",
"description": "Integração com o Slack",
"is_active": true,
"created_at": "2026-07-01T21:09:52.43",
"updated_at": "2026-07-21T18:56:08.02",
"last_delivery_at": "2026-07-21T18:56:07.653",
"last_delivery_status": 200,
"consecutive_failures": 0,
"events": [
"sms.delivered",
"sms.failed"
]
}
],
"total": 1
}
/webhooksCriar um webhook
Cria uma nova subscrição de webhook. A resposta contém um secret que é mostrado apenas uma vez — guarde-o imediatamente, no lado do servidor. Utilize-o para verificar a assinatura HMAC de cada payload recebido.
Limites: máximo de 20 webhooks por conta, máximo de 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 evento a subscrever (consulte o catálogo acima). Utilize ["*"] para subscrever todos os eventos desta API. |
description | string |
Exemplo
{
"url": "https://example.com/hooks/mailpro",
"events": [
"sms.delivered",
"sms.failed"
],
"description": "Integração com o Slack"
}
Respostas
| Código | Descrição |
|---|---|
201 | Webhook criado — o secret é devolvido apenas aqui |
400 | URL, lista de eventos inválida ou limite excedido |
401 | Credenciais inválidas |
Exemplo 201
{
"id": 42,
"url": "https://example.com/hooks/mailpro",
"events": [
"sms.delivered",
"sms.failed"
],
"description": "Integração com o Slack",
"isActive": true,
"consecutiveFailures": 0,
"autoDisabledAt": null,
"autoDisabledReason": null,
"createdAt": "2026-05-25T10:00:00Z",
"updatedAt": "2026-05-25T10:00:00Z",
"secret": "whsec_AbcD1234EfgH5678IjkL9012MnoP3456QrsT"
}
/webhooks/{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 |
/webhooks/{id}Actualizar um webhook
Actualizaçã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 reactivar um webhook desactivado automaticamente após o seu endpoint ter sido corrigido. |
Respostas
| Código | Descrição |
|---|---|
200 | Webhook actualizado |
400 | Payload inválido |
404 | Webhook não encontrado |
/webhooks/{id}Eliminar um webhook
Elimina permanentemente o webhook e o seu histórico de entregas completo.
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 |
/webhooks/{id}/testEnviar um evento de teste
Coloca em fila um evento ping imediato (ou qualquer outro tipo de evento através do campo eventType no corpo) para o seu endpoint. Útil para verificar a acessibilidade e a verificação da assinatura antes de confiar em 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 |
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"
}
/webhooks/{id}/rotate-secretRotacionar o segredo HMAC
Gera um novo segredo HMAC e invalida o antigo imediatamente. O novo segredo é devolvido uma vez na resposta — guarde-o. Todas as entregas a partir deste momento serão assinadas com o novo segredo.
Utilize esta opção 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 única vez) |
404 | Webhook não encontrado |
Exemplo 200
{
"secret": "whsec_XyzA9876BcdE5432FghI1098JklM7654NopQ"
}
/webhooks/{id}/deliveriesListar tentativas de entrega
Devolve o histórico de tentativas de despacho para este webhook (retenção de 30 dias). Útil para depuração — que eventos foram enviados, códigos de estado recebidos, contagens de 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 |
/webhooks/{id}/deliveries/{deliveryId}/replayRepetir uma entrega
Coloca em fila uma nova tentativa de entrega com o mesmo payload do original. Útil para voltar a desencadear uma entrega que falhou após corrigir o seu endpoint. É criada uma NOVA linha Webhook_Delivery (o original é preservado para fins de auditoria). A repetição segue a política de repetição padrão (mesmo agendamento de backoff, mesma regra de desactivação automática às 10 falhas).
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 | Repetição colocada em fila |
404 | Webhook ou entrega não encontrados |