Documentation interactive · Portail développeurs · Spécification OpenAPI · EN · FR · DE · IT · PT · ES

API SMS Mailpro™ : Référence

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

L'API SMS Mailpro™ vous permet de gérer par programmation des listes de contacts téléphoniques, des numéros de téléphone, et d'envoyer des SMS en masse ou individuels.

Authentification

Chaque endpoint accepte trois méthodes d'authentification. Utilisez celle qui convient à votre pile technique.

> Les méthodes legacy Bearer JWT et id_client+api_key continuent de fonctionner sans changement et ne > sont pas soumises au contrôle de portée. Seuls les jetons d'accès OAuth 2.0 sont soumis aux > contrôles de portée par endpoint indiqués sur chaque opération ci-dessous.

Méthode 1 — OAuth 2.0 (recommandée pour les intégrations)

Mailpro exploite un seul serveur d'autorisation OAuth 2.0 pour l'ensemble de ses APIs, exposé sur une surface unique et indépendante de la version : https://api.mailpro.com/oauth/. Il n'existe pas d'endpoint OAuth par version — vous obtenez un jeton depuis /oauth/token et le même jeton fonctionne sur cette API SMS, sur le CRM v3 et sur l'Email v2. Les endpoints qu'il peut appeler sont déterminés par les portées du jeton, et non par l'URL de base de l'API. Émetteur (claim iss) : https://api.mailpro.com/oauth/.

EndpointURL
AutorisationGET https://api.mailpro.com/oauth/authorize
Jeton / RafraîchissementPOST https://api.mailpro.com/oauth/token
JWKSGET https://api.mailpro.com/oauth/.well-known/jwks
DécouverteGET https://api.mailpro.com/oauth/.well-known/openid-configuration

Grants : authorization_code + PKCE (S256, obligatoire), client_credentials, refresh_token (rotation). Durée de vie du jeton d'accès 20 min ; jeton de rafraîchissement 30 jours (glissant, à usage unique) ; code d'autorisation 60 s.

Démarrage rapide — obtenir un jeton et appeler cette API (remplacez les valeurs d'exemple ; ne versionnez jamais un véritable secret) :

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"

Puis appelez cette API avec Authorization: Bearer ACCESS_TOKEN. Le même jeton fonctionne sur les APIs CRM v3 et Email v2. Un jeton dépourvu de la portée requise par un endpoint reçoit 403 insufficient_scope. Présentation complète du flux et catalogue des portées : consultez la documentation de l'API CRM v3 › Authentification. Portées propres au SMS : sms:send, sms:read, sms:contacts:read, sms:contacts:write, account:read.

Méthode 2 — Bearer JWT (legacy)

Authorization: Bearer <access_token>

Obtenez un jeton via POST /token (encodé en formulaire, grant OAuth2 password) :

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

grant_type=password&username=YOUR_USERNAME&password=YOUR_API_KEY

Le même jeton est également valide sur l'API CRM v3 et l'API Email v2 — authentifiez-vous une fois, appelez n'importe quelle API. Les jetons sont valides 30 jours par défaut ; utilisez grant_type=refresh_token pour les renouveler sans avoir à se réauthentifier. Sans portée — préférez OAuth 2.0 pour les intégrations installables.

Méthode 3 — id_client + api_key

Deux identifiants :

ParamètreTypeDescription
id_cliententierVotre identifiant client numérique Mailpro, disponible dans Paramètres → Accès API
api_keychaîneVotre clé API (format GUID), disponible dans Paramètres → Accès API

Envoyez-les à l'un des emplacements suivants — choisissez-en un :

Si vous fournissez les identifiants à plusieurs endroits, l'en-tête l'emporte.

Application des portées OAuth par endpoint (SMS)

Pour les jetons émis par OAuth, chaque groupe d'endpoints exige une portée (les authentifications legacy en sont exemptes). Chaque opération indique sa portée sous Autorisation. Synthèse :

EndpointsPortée requise
/send/* (envoi en masse, unitaire, planifié)sms:send
/history/list, /credit/getsms:read
/phone/list, /list/listsms:contacts:read
/phone/{add,edit,del}, /list/{edit,del}, /import/uploadsms:contacts:write
/account/limitsaccount:read

> POST /list/add (création d'une liste) est actuellement accessible avec tout > jeton valide — il n'est pas encore soumis au contrôle de portée. Un rejet de portée sur les > endpoints contrôlés renvoie 403 avec > { "error": "insufficient_scope", "required_scope": "…" }.

Format de réponse

Tous les endpoints prennent en charge json (par défaut) et xml. Spécifiez le format dans l'URL :

Les noms de champs dans les réponses sont en PascalCase (TotalCredits, FirstName, …), tandis que les paramètres de requête sont en snake_case (id_client, address_book_id, …). Les endpoints de liste encapsulent leurs lignes dans un tableau Items.

Pagination

Même règle sur les trois API Mailpro (Email v2, CRM v3, SMS) : 5 000 éléments par page, par défaut comme au maximum.

Paramètres inconnus : ils sont ignorés, jamais refusés. Quand une requête porte un paramètre que l'API ne reconnaît pas, la réponse contient X-Ignored-Parameters (les noms) et X-Documentation (un lien vers cette page), pour qu'une faute de frappe ne passe pas inaperçue.

Coût en crédits d'un SMS

Un SMS coûte crédits du pays × nombre de parts.

Crédits du pays — chaque pays de destination a un prix de 1, 2 ou 3 crédits, selon le préfixe international du numéro. L'envoi vers un numéro dont le préfixe n'est pas tarifé est rejeté avec un 400.

Nombre de parts — un message plus long qu'un SMS est découpé par l'opérateur et chaque part est facturée. La limite dépend des caractères utilisés :

AlphabetMessage uniquePar part si découpé
GSM-7 (latin standard)160 caractères153 caractères
Unicode (accents hors GSM-7, cyrillique, emoji, …)70 caractères67 caractères

Un seul caractère hors GSM-7 fait passer tout le message en Unicode ; ainsi un emoji peut faire passer un message de 160 caractères de 1 à 3 parts. Les caractères ^ { } [ ] ~ | \ et € comptent pour deux chacun, bien qu'ils soient GSM-7.

*Exemple :* un message de 300 caractères en latin standard = 2 parts ; envoyé vers un pays à 2 crédits, il coûte 2 × 2 = 4 crédits par destinataire.

Format des numéros de téléphone

Les numéros de téléphone sont normalisés automatiquement. Vous pouvez les envoyer sous de nombreux formats — les espaces, tirets, points, barres obliques, parenthèses, traits de soulignement et espaces insécables sont supprimés avant validation. Tout autre caractère (lettres, apostrophes, =, ;, etc.) rend le numéro invalide.

ValideInvalide
+41794849980 — international E.1640612345678 — format national (commence par 0)
0041 79 484 99 80 — préfixe 00 + espaces41'794'849'80 — apostrophes (non supprimées)
+33 6-12-34-56-78 — + avec tiretstel=0041794849980 — caractères additionnels
41794849980 — chiffres bruts1234567 — trop court (< 8 chiffres)

Règles :

Codes d'erreur

HTTPCodeSignification
400103Entrée malformée — paramètre requis manquant ou invalide
202202Crédits SMS insuffisants
401id_client / api_key invalides
500500Erreur interne

Webhooks

Mailpro™ peut notifier votre serveur en temps réel lorsque des événements SMS se produisent sur votre compte (un SMS est délivré, un SMS échoue, votre solde de crédits est bas, etc.). À la manière de Stripe — votre URL reçoit un POST signé en HMAC-SHA256 dès que l'événement se déclenche.

Chaque événement envoyé à votre webhook compte pour 1 requête dans votre quota de requêtes API.

Fonctionnement

> ⏱ Délai d'activation — après la création, la mise à jour ou la suppression d'un webhook, le > changement met jusqu'à 10 minutes à se propager sur l'ensemble des serveurs de l'API > Mailpro. Pendant ce délai, les événements peuvent ne pas correspondre encore à votre nouvel > abonnement (ou correspondre encore à un abonnement tout juste supprimé). C'est le temps > nécessaire au rafraîchissement du cache d'abonnements en mémoire sur chaque instance d'API.

Enveloppe de la charge utile

Tous les événements partagent une enveloppe commune :

{
  "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
  }
}
ChampFormatDescription
idevt_ + 32 hexIdentifiant unique d'événement — à utiliser comme clé d'idempotence de votre côté.
type<domaine>.<verbe>Type d'événement canonique.
createdsecondes Unix UTCInclus dans la signature HMAC.
apiVersion"sms" pour les événements émis par POST /sms/send/add_single ; "v3" pour les événements émis par POST /v3/Sms/SingleSMS ; "watcher" pour les événements pilotés par DLR émis par le worker.Quel composant Mailpro a publié l'événement.
account.idintVotre identifiant client Mailpro (= id_client).
account.namestringLe nom de votre compte (pratique pour le débogage côté client).
dataobjectCharge utile de l'événement — la forme dépend de type (voir catalogue ci-dessous).

Catalogue des événements

Seuls les événements listés ci-dessous sont effectivement émis. Les formes correspondent au JSON littéral envoyé par la plateforme — faites correspondre ces noms de champs à l'identique lors du parsing.

ÉvénementDéclencheurForme de data
pingTest via POST /webhooks/{id}/test{ message }
sms.queuedPOST /sms/send/add_single ou POST /v3/Sms/SingleSMS accepté dans la file d'envoi Mailpro{ messageId: int, to: string, queuedAt: ISO-8601, scheduledAt: ISO-8601, parts: int }
sms.deliveredDLR avec code opérateur 004 ou 008 (codes de succès){ messageId: int, phone: string, stateCode: string, dlrDate: datetime }
sms.failedDLR avec tout autre code opérateur (timeout, non délivré, rejeté, blacklisté, …){ messageId: int, phone: string, stateCode: string, dlrDate: datetime }
credits.sms.lowLe solde de crédits SMS est passé sous votre seuil d'alerte (worker CreditsLowWatcher){ remaining: int, threshold: int, alertedAt: ISO-8601 }

> Remarque — il n'existe pas d'événement sms.sent. Le DLR opérateur est le seul retour > que la plateforme reçoit entre les états « en file d'attente » et « délivré/échoué » ; ainsi, l'événement > suivant sms.queued est soit sms.delivered (succès), soit sms.failed (erreur). > La plupart des messages atteignent l'opérateur en quelques secondes, et un DLR en quelques minutes ; > les conditions du réseau mobile peuvent occasionnellement étendre ce délai à plusieurs heures.

> Nommage des champs — sms.queued utilise to (le destinataire tel que soumis par > l'appelant de l'API, après normalisation). sms.delivered / sms.failed utilisent > phone (le destinataire tel que renvoyé par l'opérateur sur le DLR). En pratique, il s'agira des > mêmes chiffres, mais les noms diffèrent parce que les événements proviennent de chemins de > code distincts.

Abonnez-vous à tous les événements de cette API en passant ["*"] dans le tableau events.

Signature HMAC

Chaque POST embarque un en-tête 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

Pour la vérifier :

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

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

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

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

Réessais et désactivation automatique

TentativeDélai avant la prochaine tentative
1 → 210 secondes
2 → 31 minute
3 → 45 minutes
4 → 530 minutes
5 → 62 heures
6 → 76 heures
7abandonné (livraison marquée failed)

Après 10 échecs consécutifs sur le même webhook, celui-ci est automatiquement désactivé (isActive: false) et vous recevez un e-mail de notification. Réactivez-le avec PUT /webhooks/{id} une fois votre endpoint corrigé.

Succès = HTTP 2xx

Nous considérons votre webhook comme réussi uniquement si vous renvoyez un statut compris dans 200–299. Tout 3xx/4xx/5xx ou un timeout (> 10 s) est compté comme un échec et déclenche des réessais. Si votre endpoint est définitivement hors service, renvoyez explicitement 410 Gone — les réessais ont quand même lieu, mais le motif de l'échec est plus clair dans votre journal de livraison.

Limites

LimiteValeur
Webhooks par compte20
Événements souscrits par webhook50
Taille maximale de la charge utile256 Ko
Timeout HTTP par tentative10 secondes
Rétention de l'historique de livraison30 jours

Sommaire

Authentication

Obtenez un jeton Bearer JWT permettant d’authentifier tous les autres appels à l’API. L’endpoint /token du service SMS est une redirection 307 vers l’émetteur canonique /v3/token — votre client HTTP suit la redirection de manière transparente (la méthode POST et le corps sont conservés).

POST /token

Obtenir un jeton d’accès (redirection 307 vers /v3/token)

Obtient un jeton Bearer JWT à l’aide des identifiants client Mailpro. Transmettez l’access_token retourné en tant que Authorization: Bearer <token> dans toutes les requêtes suivantes. Le même jeton est également valable sur l’API CRM v3 et l’API Email v2.

> ⚙ Détail d’implémentation — POST /sms/token est une 307 Temporary > Redirect vers POST /v3/token (configurée au niveau de la couche de > réécriture web.config d’IIS). La 307 HTTP préserve à la fois la > méthode (POST) et le corps de la requête, si bien que tout > client HTTP respectant le standard suit la redirection de manière > transparente — vous continuez à poster sur /sms/token et récupérez un > JWT valide en retour. Il n’existe aucune logique d’émission de jetons > dupliquée ; l’API SMS n’émet jamais de jetons par elle-même.

Types de grants pris en charge
Type de grantCas d’usage
passwordIntégration standard — nom d’utilisateur + clé d’API
refresh_tokenRenouveler un jeton d’accès expirant sans se réauthentifier
client_credentialsServeur à serveur avec l’identifiant client seul
Durée de vie des jetons

Utilisez grant_type=refresh_token pour renouveler le jeton d’accès sans vous réauthentifier. Stockez les jetons côté serveur (Vault, variables d’environnement) ; ne les intégrez jamais dans du JS navigateur ni dans des binaires d’applications mobiles. Consultez la doc /token de l’API CRM v3 pour la note de sécurité complète.

Corps de la requête (application/x-www-form-urlencoded)

NomTypeObligatoireDescription
grant_typestring: password, refresh_token, client_credentialsoui
usernamestringVotre nom d’utilisateur Mailpro (email). Requis pour le grant password.
passwordstringVotre clé d’API Mailpro (au format GUID). Requise pour le grant password.
refresh_tokenstringRefresh token précédent. Requis pour le grant refresh_token.
client_idstringVotre identifiant client Mailpro (entier). Requis pour le grant client_credentials.

Réponses

CodeDescription
200Jeton émis avec succès. Renvoyé par POST /v3/token après le suivi transparent de la 307 — votre client HTTP voit une 200 classique avec le même format de corps que celui qu’il aurait reçu directement de l’endpoint de jeton v3.
307Temporary Redirect vers POST /v3/token, émise par la règle de réécriture IIS du web.config. Les clients HTTP respectant le standard la suivent automatiquement et conservent la méthode POST d’origine ainsi que le corps de formulaire. Visible uniquement pour les clients qui désactivent explicitement le suivi des redirections (par exemple curl --max-redirs 0).
400Identifiants invalides ou type de grant non pris en charge

Exemple 200

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

Exemple 400

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

Account

Consultez votre solde de crédits SMS, votre quota d’API mensuel et le statut de votre compte.

GET /account/limits.{format}

Récupérer le quota d’API mensuel

Retourne le quota de requêtes API mensuel du client authentifié.

Calcul du quota : la limite est calibrée à partir des crédits d’abonnement email (en général subscription_credits × 5). Pour un plan à 10 000 emails/mois, cela donne un budget mensuel de 50 000 requêtes. Réinitialisation à la date anniversaire de l’abonnement (et non le 1er du mois calendaire).

Ce qui consomme des crédits :

Ce qui est GRATUIT (ne consomme pas de crédits) :

Le quota est partagé entre les 3 API Mailpro (v2, v3, sms) — un client = un budget mensuel pour toute la plateforme. Les envois SMS consomment en plus le solde de crédits SMS dédié (GET /credit/get.{format}).

Scope OAuth : account:read

Paramètres

NomOùTypeObligatoireDescription
formatpathstring: json, xmlouiFormat de la réponse

Réponses

CodeDescription
200Instantané du quota
401Identifiants invalides
404Aucun enregistrement de quota trouvé (compte nouvellement créé ; la ligne sera créée lors de la première requête authentifiée).

Exemple 200

{
  "monthlyLimit": 50000,
  "remaining": 32847,
  "used": 17153,
  "isFree": false,
  "remainedSendsForFree": null
}

Send SMS

Envoyez des SMS — soit un SMS transactionnel unique à un destinataire, soit une campagne en masse à une liste de contacts entière.

POST /send/add.{format}

Envoyer un SMS en masse à une liste de contacts

Envoie un SMS à tous les numéros de téléphone d’une liste de contacts. Prend en charge la planification : positionnez scheduled_time sur une date future pour un envoi différé, ou omettez-le pour un envoi immédiat.

Consommation de crédits : les crédits sont déduits au moment de l’envoi. Les messages longs (>160 caractères GSM-7) sont scindés en plusieurs parties, chacune coûtant des crédits supplémentaires.

La réponse retourne { "Error": "Insufficient Credit", "Code": 202 } si le compte ne dispose pas de crédits suffisants.

Scope OAuth : sms:send

Paramètres

NomOùTypeObligatoireDescription
formatpathstring: json, xmlouiFormat de la réponse

Corps de la requête (application/x-www-form-urlencoded)

NomTypeObligatoireDescription
id_clientintegerouiVotre identifiant client Mailpro
api_keystringouiVotre clé d’API (GUID)
messagestringouiTexte du message SMS. Restez sous 160 caractères pour un SMS en une seule partie. Les caractères en dehors de l’alphabet GSM-7 (par exemple chinois, arabe, emoji) basculent l’encodage en Unicode, ce qui réduit la limite à 70 caractères par partie.
tointegerouiID de la liste de contacts à laquelle envoyer (issu de /list/list)
scheduled_timestring (date-time)Planifie l’envoi pour une date/heure future (ISO 8601). Omettre ou laisser vide pour un envoi immédiat.
shorten_urlsbooleanMettre true pour remplacer chaque lien du message par un lien court https://mailp.ro/m/... : moins de caractères, donc parfois moins de parties de SMS facturées. Un lien qui ne peut pas être raccourci reste tel quel.

Réponses

CodeDescription
200Envoi SMS en masse créé avec succès
202Crédits SMS insuffisants
400Champ obligatoire manquant
401Identifiants invalides

Exemple 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"
  ]
}

Exemple 202

{
  "Error": "Insufficient Credit",
  "Code": 202
}

Exemple 400

{
  "Error": "Malformed Input",
  "Code": 103
}

GET /send/add_single.{format}

Envoyer un SMS unique (GET)

Envoie un SMS unique à un destinataire via une requête GET. Utile pour les intégrations simples lorsque POST n’est pas disponible. Les identifiants et le message sont transmis en paramètres de requête.

Note : évitez d’utiliser GET pour des messages sensibles — les paramètres de requête apparaissent dans les journaux serveur. Préférez POST /send/add_single.

Scope OAuth : sms:send

Paramètres

NomOùTypeObligatoireDescription
formatpathstring: json, xmlouiFormat de la réponse
toquerystringouiNuméro de téléphone du destinataire. Accepte +41…, 0041… ou 41… avec ou sans séparateurs. Voir Format des numéros de téléphone dans la description de l’API.
messagequerystringouiTexte du message SMS (max. 160 caractères pour l’encodage standard)
scheduled_timequerystring (date-time)Planifie l’envoi (ISO 8601). Omettre pour un envoi immédiat.
shorten_urlsquerybooleanMettre true pour remplacer chaque lien du message par un lien court https://mailp.ro/m/... : moins de caractères, donc parfois moins de parties de SMS facturées. Un lien qui ne peut pas être raccourci reste tel quel.

Réponses

CodeDescription
200SMS envoyé (ou planifié) avec succès
202Crédits SMS insuffisants
400Paramètre obligatoire manquant
401Identifiants invalides

Exemple 200

{
  "Id": 5001,
  "Message": "Your appointment is confirmed for tomorrow at 10:00.",
  "ScheduledTime": "2026-04-15T09:00:00",
  "To": "0041791234567",
  "Charge": "1"
}

POST /send/add_single.{format}

Envoyer un SMS unique

Envoie un SMS unique à un numéro de téléphone destinataire. Prend en charge la planification via scheduled_time.

Consommation de crédits : les crédits sont déduits au moment de l’envoi. Le champ Charge de la réponse indique combien de crédits ont été consommés.

La réponse retourne { "Error": "Insufficient Credit", "Code": 202 } si le compte ne dispose pas de crédits suffisants.

Scope OAuth : sms:send

Paramètres

NomOùTypeObligatoireDescription
formatpathstring: json, xmlouiFormat de la réponse

Corps de la requête (application/x-www-form-urlencoded)

NomTypeObligatoireDescription
id_clientintegerouiVotre identifiant client Mailpro
api_keystringouiVotre clé d’API (GUID)
messagestringouiTexte du message SMS
tostringouiNuméro de téléphone du destinataire. Accepte +41…, 0041… ou 41… avec ou sans séparateurs. Voir Format des numéros de téléphone dans la description de l’API.
scheduled_timestring (date-time)Planifie l’envoi pour un horaire futur. Omettre pour un envoi immédiat.
shorten_urlsbooleanMettre true pour remplacer chaque lien du message par un lien court https://mailp.ro/m/... : moins de caractères, donc parfois moins de parties de SMS facturées. Un lien qui ne peut pas être raccourci reste tel quel.

Réponses

CodeDescription
200SMS envoyé (ou planifié) avec succès
202Crédits SMS insuffisants
400Champ obligatoire manquant
401Identifiants invalides

Exemple 200

{
  "Id": 5001,
  "Message": "Your verification code is 8472. Valid for 10 minutes.",
  "ScheduledTime": "2026-04-15T14:30:00",
  "To": "0041791234567",
  "Charge": "1"
}

Exemple 202

{
  "Error": "Insufficient Credit",
  "Code": 202
}

Exemple 400

{
  "Error": "Malformed Input",
  "Code": 103
}

GET /send/list.{format}

Lister les campagnes SMS

Retourne la liste des campagnes SMS (envois en masse) du compte. Pagination via les en-têtes NumberOfRecords et PageNumber.

Utilisez type_to pour filtrer par type d’envoi :

Scope OAuth : sms:send

Paramètres

NomOùTypeObligatoireDescription
formatpathstring: json, xmlouiFormat de la réponse
type_toqueryinteger: 0, 1Filtre sur le type d’envoi : - 0 (par défaut) — envois en masse vers une liste de contacts - 1 — envois individuels à un seul numéro

Réponses

CodeDescription
200Liste des campagnes SMS retournée avec succès
401Identifiants invalides

Exemple 200

[
  {
    "Id": 5001,
    "Message": "Your verification code is 8472",
    "ScheduledTime": "2026-04-15T09:00:00",
    "To": "41791234567"
  }
]

POST /send/del.{format}

Annuler ou supprimer un envoi SMS

Annule un envoi SMS planifié en attente, ou supprime un envoi terminé de l’historique. Seuls les envois planifiés à venir peuvent être annulés. Les envois en cours ne peuvent pas être arrêtés.

Scope OAuth : sms:send

Paramètres

NomOùTypeObligatoireDescription
formatpathstring: json, xmlouiFormat de la réponse

Corps de la requête (application/x-www-form-urlencoded)

NomTypeObligatoireDescription
id_clientintegerouiVotre identifiant client Mailpro
api_keystringouiVotre clé d’API (GUID)
id_sendintegerouiID de l’envoi SMS à annuler ou supprimer (issu de /send/list)

Réponses

CodeDescription
200Envoi SMS annulé ou supprimé avec succès
400id_send manquant
401Identifiants invalides
500Échec de la suppression (envoi introuvable ou déjà traité)

Exemple 200

{
  "Result": "OK"
}

Exemple 500

{
  "Error": "Delete failed",
  "Code": 500
}

GET /send/scheduled.{format}

Lister mes envois SMS planifiés

Retourne les envois SMS (unitaires ou en campagne) planifiés pour une date future et qui n’ont pas encore été expédiés. Utile avant d’appeler /cancel ou /reschedule.

Les enregistrements sont triés par scheduled_time croissant.

Scope OAuth : sms:send

Paramètres

NomOùTypeObligatoireDescription
formatpathstring: json, xmlouiFormat de la réponse
id_clientqueryintegeroui
api_keyquerystringoui
NumberOfRecordsheaderintegerÉléments par page — 5 000 par défaut et au maximum (voir Pagination). En-tête HTTP ou paramètre de query.
PageNumberheaderintegerNuméro de page (base 1) pour les réponses paginées. Transmis en en-tête HTTP.

Réponses

CodeDescription
200Liste des envois SMS planifiés
401Identifiants invalides

Exemple 200

[
  {
    "Id": 9001,
    "Message": "Black Friday: 30% off until midnight.",
    "ScheduledTime": "2026-11-27T12:00:00",
    "To": "+33671234567"
  }
]

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

Annuler un envoi SMS planifié

Annule un SMS planifié qui n’a pas encore été expédié. Si l’envoi a déjà été traité (ou s’il n’existe pas / appartient à un autre client), retourne 409 Conflict.

Scope OAuth : sms:send

Paramètres

NomOùTypeObligatoireDescription
formatpathstring: json, xmlouiFormat de la réponse
id_sendpathintegeroui

Corps de la requête (application/x-www-form-urlencoded)

NomTypeObligatoireDescription
id_clientintegeroui
api_keystringoui

Réponses

CodeDescription
200Envoi annulé
401Identifiants invalides
409Déjà expédié ou introuvable

Exemple 200

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

Exemple 409

{
  "error": "conflict",
  "message": "Send not found, not owned by client, or already dispatched."
}

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

Replanifier un envoi SMS planifié

Met à jour la date prévue d’un SMS planifié qui n’a pas encore été expédié. La nouvelle date doit être dans le futur et dans un délai de 90 jours.

Nom du champ de date : l’API accepte scheduled_time (champ principal), ainsi que les alias historiques PlanDate, date_planned et DatePlanned. Fournissez n’importe lequel d’entre eux — le premier non null est utilisé.

Scope OAuth : sms:send

Paramètres

NomOùTypeObligatoireDescription
formatpathstring: json, xmlouiFormat de la réponse
id_sendpathintegeroui

Corps de la requête (application/x-www-form-urlencoded)

NomTypeObligatoireDescription
id_clientintegeroui
api_keystringoui
scheduled_timestring (date-time)Nom de champ principal.
PlanDatestring (date-time)Alias historique accepté pour assurer la rétrocompatibilité.
date_plannedstring (date-time)Alias historique accepté pour assurer la rétrocompatibilité.
DatePlannedstring (date-time)Alias historique accepté pour assurer la rétrocompatibilité.

Réponses

CodeDescription
200Envoi replanifié
400scheduled_time manquant ou invalide
401Identifiants invalides
409Déjà expédié, introuvable ou nouvelle date hors plage

Exemple 200

{
  "Result": "OK",
  "Id": 9001,
  "NewScheduledTime": "2026-12-31T14:30:00"
}

Exemple 409

{
  "error": "conflict",
  "message": "Reschedule failed — send not found, already dispatched, or new date out of range."
}

Lists

Gérez les listes de contacts SMS. Une liste de contacts regroupe des numéros de téléphone pour les envois en masse. Vous pouvez créer jusqu’à 1 000 listes par compte (même limite sur les trois API Mailpro et dans l'app).

GET /list/list.{format}

Lister les listes de contacts téléphoniques

Retourne toutes les listes de contacts SMS du compte. Utilisez les valeurs Id retournées lors de l’envoi de campagnes SMS en masse ou de l’ajout de numéros de téléphone.

Scope OAuth : sms:contacts:read

Paramètres

NomOùTypeObligatoireDescription
formatpathstring: json, xmlouiFormat de la réponse

Réponses

CodeDescription
200Listes de numéros retournées avec succès
401Identifiants invalides

Exemple 200

{
  "Items": [
    {
      "AddressBookId": 42,
      "Name": "Newsletter subscribers",
      "TotalNumberPhones": 1547
    },
    {
      "AddressBookId": 43,
      "Name": "Loyalty program",
      "TotalNumberPhones": 823
    }
  ]
}

POST /list/add.{format}

Créer une liste de contacts

Crée une nouvelle liste de contacts SMS portant le nom indiqué. La liste démarre vide — ajoutez des numéros de téléphone avec POST /phone/add. Maximum 1 000 listes par compte (même limite sur les trois API Mailpro et dans l'app). Renvoie HTTP 422 si la limite est atteinte.

Paramètres

NomOùTypeObligatoireDescription
formatpathstring: json, xmlouiFormat de la réponse

Corps de la requête (application/x-www-form-urlencoded)

NomTypeObligatoireDescription
id_clientintegerouiVotre identifiant client Mailpro
api_keystringouiVotre clé d’API (GUID)
namestringouiNom d’affichage de la nouvelle liste de contacts

Réponses

CodeDescription
200Liste de contacts créée avec succès
400Champ obligatoire manquant (nom)
401Identifiants invalides

Exemple 200

{
  "Id": 44,
  "Name": "Spring campaign 2026",
  "NumberPhones": 0
}

Exemple 400

{
  "Error": "Malformed Input",
  "Code": 103
}

POST /list/edit.{format}

Renommer une liste de contacts

Met à jour le nom d’affichage d’une liste de contacts SMS existante. Les numéros de téléphone de la liste ne sont pas affectés.

Scope OAuth : sms:contacts:write

Paramètres

NomOùTypeObligatoireDescription
formatpathstring: json, xmlouiFormat de la réponse

Corps de la requête (application/x-www-form-urlencoded)

NomTypeObligatoireDescription
id_clientintegerouiVotre identifiant client Mailpro
api_keystringouiVotre clé d’API (GUID)
address_book_idintegerouiID de la liste de contacts à renommer (issu de /list/list)
namestringouiNouveau nom d’affichage pour la liste de contacts

Réponses

CodeDescription
200Liste de contacts renommée avec succès
400Champ obligatoire manquant
401Identifiants invalides

POST /list/del.{format}

Supprimer une liste de contacts

Supprime définitivement une liste de contacts SMS ainsi que tous les numéros de téléphone qu’elle contient. Cette action est irréversible.

Scope OAuth : sms:contacts:write

Paramètres

NomOùTypeObligatoireDescription
formatpathstring: json, xmlouiFormat de la réponse

Corps de la requête (application/x-www-form-urlencoded)

NomTypeObligatoireDescription
id_clientintegerouiVotre identifiant client Mailpro
api_keystringouiVotre clé d’API (GUID)
address_book_idintegerouiID de la liste de contacts à supprimer

Réponses

CodeDescription
200Liste de contacts supprimée avec succès
400address_book_id manquant
401Identifiants invalides

Phone Numbers

Gérez les numéros de téléphone individuels au sein d’une liste de contacts — ajout, mise à jour et suppression des entrées.

GET /phone/list.{format}

Lister les numéros de téléphone d’une liste de contacts

Retourne une liste paginée des numéros de téléphone d’une liste de contacts donnée. Utilisez address_book_id pour indiquer la liste à récupérer. Pagination : NumberOfRecords et PageNumber (5 000 par page par défaut, page 1).

Scope OAuth : sms:contacts:read

Paramètres

NomOùTypeObligatoireDescription
formatpathstring: json, xmlouiFormat de la réponse
address_book_idqueryintegerouiID de la liste de contacts dont récupérer les numéros de téléphone
NumberOfRecordsheaderintegerÉléments par page — 5 000 par défaut et au maximum (voir Pagination). En-tête HTTP ou paramètre de query.
PageNumberheaderintegerNuméro de page (base 1) pour les réponses paginées. Transmis en en-tête HTTP.
SortByNameheaderbooleanDéfinir à true pour trier les résultats par nom, dans l’ordre alphabétique.

Réponses

CodeDescription
200Numéros de téléphone retournés avec succès
401Identifiants invalides

Exemple 200

{
  "Items": [
    {
      "Id": 1001,
      "Number": "41791234567",
      "FirstName": "Alice",
      "LastName": "Dupont"
    },
    {
      "Id": 1002,
      "Number": "33612345678",
      "FirstName": "Bob",
      "LastName": "Martin"
    }
  ]
}

POST /phone/add.{format}

Ajouter un ou plusieurs numéros de téléphone à une liste

Ajoute un ou plusieurs numéros de téléphone à une liste de contacts.

Numéro unique : utilisez le champ number.

Import en masse : utilisez le champ phone_list avec les numéros séparés par des points-virgules : +41791234567;+33612345678;0049301234567

Les numéros de téléphone acceptent les formats +, 00 ou nu — consultez Format des numéros de téléphone dans la description de l’API pour la liste complète des entrées acceptées / rejetées. Les numéros en doublon sont ignorés silencieusement, sauf si force=1 est positionné.

Scope OAuth : sms:contacts:write

Paramètres

NomOùTypeObligatoireDescription
formatpathstring: json, xmlouiFormat de la réponse

Corps de la requête (application/x-www-form-urlencoded)

NomTypeObligatoireDescription
id_clientintegerouiVotre identifiant client Mailpro
api_keystringouiVotre clé d’API (GUID)
address_book_idintegerouiID de la liste de contacts à laquelle ajouter le ou les numéros
numberstringNuméro de téléphone unique. Accepte +41…, 0041… ou 41… avec ou sans séparateurs (espaces, tirets, points, barres obliques, parenthèses). Voir Format des numéros de téléphone dans la description de l’API. Utilisez ce champ OU phone_list — pas les deux.
phone_liststringListe de numéros de téléphone séparés par des points-virgules pour un import en masse. Utilisez ce champ OU number — pas les deux. Exemple : 0041791234567;0033612345678
firstnamestringPrénom du contact (optionnel, uniquement pour un numéro unique)
lastnamestringNom de famille du contact (optionnel, uniquement pour un numéro unique)
forceinteger: 0, 1Définir à 1 pour ajouter un numéro même s’il était précédemment désabonné ou s’il existe déjà. Valeur par défaut : 0 (les doublons sont ignorés).

Réponses

CodeDescription
200Numéro(s) de téléphone ajouté(s) avec succès
400Champ obligatoire manquant
401Identifiants invalides

Exemple 200

{
  "Id": 1003,
  "Number": "0041791234567",
  "FirstName": "Alice",
  "LastName": "Dupont"
}

POST /phone/edit.{format}

Mettre à jour une entrée de numéro de téléphone

Met à jour le numéro de téléphone et/ou les coordonnées d’un contact d’une entrée existante. Utilisez number_id (issu de /phone/list) pour identifier l’entrée à mettre à jour. Seuls les champs fournis dans la requête sont mis à jour.

Scope OAuth : sms:contacts:write

Paramètres

NomOùTypeObligatoireDescription
formatpathstring: json, xmlouiFormat de la réponse

Corps de la requête (application/x-www-form-urlencoded)

NomTypeObligatoireDescription
id_clientintegerouiVotre identifiant client Mailpro
api_keystringouiVotre clé d’API (GUID)
number_idintegerouiID de l’entrée numéro de téléphone à mettre à jour (issu de /phone/list)
numberstringNouveau numéro de téléphone. Accepte +41…, 0041… ou 41… avec ou sans séparateurs. Voir Format des numéros de téléphone dans la description de l’API.
firstnamestringNouveau prénom du contact
lastnamestringNouveau nom de famille du contact

Réponses

CodeDescription
200Entrée du numéro de téléphone mise à jour avec succès
400number_id manquant
401Identifiants invalides

POST /phone/del.{format}

Retirer un numéro de téléphone d’une liste

Retire définitivement une entrée numéro de téléphone précise de sa liste de contacts. Utilisez number_id (issu de /phone/list) pour identifier l’entrée.

Scope OAuth : sms:contacts:write

Paramètres

NomOùTypeObligatoireDescription
formatpathstring: json, xmlouiFormat de la réponse

Corps de la requête (application/x-www-form-urlencoded)

NomTypeObligatoireDescription
id_clientintegerouiVotre identifiant client Mailpro
api_keystringouiVotre clé d’API (GUID)
number_idintegerouiID de l’entrée numéro de téléphone à supprimer (issu de /phone/list)

Réponses

CodeDescription
200Numéro de téléphone retiré avec succès
400number_id manquant
401Identifiants invalides

Credit

Consultez le solde de crédits SMS restant pour votre compte (distinct du quota de requêtes API mensuelles — voir /account/limits).

GET /credit/get.{format}

Récupérer le solde de crédits SMS

Retourne le solde de crédits SMS courant pour votre compte. Les crédits SMS sont consommés au moment de l’envoi. Un SMS standard (≤ 160 caractères GSM-7) coûte 1 crédit. Les messages plus longs ou les messages avec des caractères spéciaux peuvent en coûter davantage.

> Note : ceci retourne votre solde de crédits d’envoi SMS, et non votre > quota de requêtes API. Pour le quota d’API, voir GET /account/limits.{format}.

Scope OAuth : sms:read

Paramètres

NomOùTypeObligatoireDescription
formatpathstring: json, xmlouiFormat de la réponse

Réponses

CodeDescription
200Solde de crédits retourné avec succès
401Identifiants invalides

Exemple 200

{
  "TotalCredits": 5000
}

History

Parcourez le journal complet des campagnes SMS passées.

GET /history/list.{format}

Lister l’historique des envois SMS

Retourne un journal paginé de toutes les campagnes SMS passées envoyées depuis ce compte. Les résultats sont triés par date décroissante (les plus récents en premier). Pagination : NumberOfRecords et PageNumber (en-têtes ou query, 5 000 par page par défaut).

Scope OAuth : sms:read

Paramètres

NomOùTypeObligatoireDescription
formatpathstring: json, xmlouiFormat de la réponse

Réponses

CodeDescription
200Liste d’historique retournée avec succès
401Identifiants invalides

Exemple 200

{
  "Items": [
    {
      "Id": 583294,
      "DateSent": "2026-07-17T18:56:39.813",
      "Message": "Your verification code is 8472",
      "Charge": 3,
      "Parts": 1
    }
  ]
}

Import

Téléversez un fichier CSV ou XLSX pour importer en masse des numéros de téléphone dans une liste de contacts. Le fichier est mis en file d’attente pour un traitement asynchrone — suivez son achèvement via l’ImportJobId retourné ou via le callback optionnel webhook_url.

POST /import/upload.{format}

Téléverser un fichier de numéros de téléphone (CSV / XLSX) pour un import en masse

Téléversez un fichier CSV ou XLSX pour importer des numéros de téléphone dans une liste de contacts. Le fichier est stocké et mis en file d’attente pour un traitement asynchrone — l’endpoint retourne immédiatement un ImportJobId.

Type de requête : multipart/form-data

Champs de formulaire obligatoires :

Optionnel :

Format du fichier :

Scope OAuth : sms:contacts:write

Paramètres

NomOùTypeObligatoireDescription
formatpathstring: json, xmlouiFormat de la réponse

Corps de la requête (multipart/form-data)

NomTypeObligatoireDescription
id_listinteger (int64)ouiID de la liste de contacts de destination
filestring (binary)ouiFichier CSV ou XLSX (UTF-8, max. 50 Mo)
webhook_urlstring (uri)URL de callback invoquée à la fin du traitement

Réponses

CodeDescription
200Fichier accepté et mis en file d’attente
400Aucun fichier téléversé ou id_list manquant
401Identifiants invalides
500Erreur serveur ou de stockage

Exemple 200

{
  "Result": "OK",
  "ImportJobId": 15,
  "InternalName": "230575-20260420142616-phones.csv"
}

Webhooks

Abonnez votre serveur aux notifications d’évènements SMS en temps réel. Mailpro envoie en POST une charge utile JSON signée par HMAC sur votre URL dès que l’évènement souscrit se produit. Consultez la section « Webhooks » de l’introduction pour le catalogue complet des évènements, l’enveloppe de la charge utile, les extraits de vérification de signature et la politique de réessai.

GET /webhooks

Lister les webhooks

Retourne tous les webhooks configurés sur le compte authentifié.

Réponses

CodeDescription
200Tableau de webhooks
401Identifiants invalides

Exemple 200

{
  "items": [
    {
      "id": 14,
      "url": "https://example.com/hooks/mailpro",
      "description": "Intégration 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
}

POST /webhooks

Créer un webhook

Crée un nouvel abonnement webhook. La réponse contient un secret affiché une seule fois — stockez-le immédiatement, côté serveur. Utilisez-le pour vérifier la signature HMAC de chaque charge utile entrante.

Limites : max. 20 webhooks par compte, max. 50 évènements par webhook.

Corps de la requête (application/json)

NomTypeObligatoireDescription
urlstring (uri)ouiEndpoint HTTPS (HTTP refusé en production)
eventsarray of stringouiListe des types d’évènements auxquels s’abonner (voir le catalogue ci-dessus). Utilisez ["*"] pour vous abonner à tous les évènements de cette API.
descriptionstring

Exemple

{
  "url": "https://example.com/hooks/mailpro",
  "events": [
    "sms.delivered",
    "sms.failed"
  ],
  "description": "Intégration Slack"
}

Réponses

CodeDescription
201Webhook créé — le secret n’est retourné qu’ici
400URL invalide, liste d’évènements invalide ou limite dépassée
401Identifiants invalides

Exemple 201

{
  "id": 42,
  "url": "https://example.com/hooks/mailpro",
  "events": [
    "sms.delivered",
    "sms.failed"
  ],
  "description": "Intégration Slack",
  "isActive": true,
  "consecutiveFailures": 0,
  "autoDisabledAt": null,
  "autoDisabledReason": null,
  "createdAt": "2026-05-25T10:00:00Z",
  "updatedAt": "2026-05-25T10:00:00Z",
  "secret": "whsec_AbcD1234EfgH5678IjkL9012MnoP3456QrsT"
}

GET /webhooks/{id}

Récupérer un webhook

Paramètres

NomOùTypeObligatoireDescription
idpathinteger (int64)oui

Réponses

CodeDescription
200Le webhook
404Webhook introuvable

PUT /webhooks/{id}

Mettre à jour un webhook

Mise à jour partielle — seuls les champs transmis sont modifiés.

Paramètres

NomOùTypeObligatoireDescription
idpathinteger (int64)oui

Corps de la requête (application/json)

NomTypeObligatoireDescription
urlstring (uri)
eventsarray of string
descriptionstring
isActivebooleanDéfinir à true pour réactiver un webhook désactivé automatiquement, une fois votre endpoint corrigé.

Réponses

CodeDescription
200Webhook mis à jour
400Charge utile invalide
404Webhook introuvable

DELETE /webhooks/{id}

Supprimer un webhook

Supprime définitivement le webhook ainsi que l’intégralité de son historique de livraisons.

Paramètres

NomOùTypeObligatoireDescription
idpathinteger (int64)oui

Réponses

CodeDescription
204Supprimé
404Webhook introuvable

POST /webhooks/{id}/test

Envoyer un évènement de test

Met en file d’attente un évènement ping immédiat (ou tout autre type d’évènement via le champ eventType du corps) vers votre endpoint. Utile pour vérifier l’accessibilité et la vérification de signature avant de s’appuyer sur de vrais évènements.

Paramètres

NomOùTypeObligatoireDescription
idpathinteger (int64)oui

Corps de la requête (application/json)

NomTypeObligatoireDescription
eventTypestring

Exemple

{
  "eventType": "ping"
}

Réponses

CodeDescription
202Évènement mis en file d’attente pour expédition
404Webhook introuvable

Exemple 202

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

POST /webhooks/{id}/rotate-secret

Faire pivoter le secret HMAC

Génère un nouveau secret HMAC et invalide immédiatement l’ancien. Le nouveau secret est retourné une seule fois dans la réponse — stockez-le. Toute livraison à partir de ce moment sera signée avec le nouveau secret.

Utilisez ceci si vous soupçonnez que votre secret a été compromis.

Paramètres

NomOùTypeObligatoireDescription
idpathinteger (int64)oui

Réponses

CodeDescription
200Nouveau secret (visible une seule fois)
404Webhook introuvable

Exemple 200

{
  "secret": "whsec_XyzA9876BcdE5432FghI1098JklM7654NopQ"
}

GET /webhooks/{id}/deliveries

Lister les tentatives de livraison

Retourne l’historique des tentatives d’expédition pour ce webhook (rétention de 30 jours). Utile pour le débogage — quels évènements ont été envoyés, codes de statut reçus, nombre de réessais, messages d’erreur.

Paramètres

NomOùTypeObligatoireDescription
idpathinteger (int64)oui
limitqueryinteger
cursorqueryinteger (int64)Curseur de pagination (= dernier ID de livraison vu). Retourne les livraisons dont id < cursor.

Réponses

CodeDescription
200Tableau des tentatives de livraison (les plus récentes en premier)
404Webhook introuvable

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

Rejouer une livraison

Met en file d’attente une nouvelle tentative de livraison avec la même charge utile que l’originale. Utile pour redéclencher une livraison en échec après avoir corrigé votre endpoint. Une NOUVELLE ligne Webhook_Delivery est créée (l’originale est préservée à des fins d’audit). Le rejeu suit la politique de réessai standard (même planning de backoff, même règle de désactivation automatique après 10 échecs).

Paramètres

NomOùTypeObligatoireDescription
idpathinteger (int64)oui
deliveryIdpathinteger (int64)oui

Réponses

CodeDescription
202Rejeu mis en file d’attente
404Webhook ou livraison introuvable