Listes de désinscription et de suppression
Une liste de suppression est l’ensemble des adresses auxquelles vous ne devez plus jamais envoyer de message — les personnes qui ont répondu STOP, se sont désinscrites, ont généré un bounce ou se sont plaintes. Honorer cette liste est une exigence légale sur chaque canal réglementé, et Orbit la traite comme une porte d’envoi dure : une adresse supprimée est abandonnée avant le dispatch, quel que soit la campagne, l’import de contacts ou l’appel API. Cette page explique comment fonctionne la suppression, comment importer en masse une liste de suppression existante — par exemple lors d’une migration depuis une autre plateforme — via un seul dépôt CSV, et comment exporter le registre pour un audit. Tous les endpoints ci-dessous sont enracinés surhttps://api.orbit.devotel.io/api/v1/compliance.
Comment se produit la suppression
Une adresse rejoint la liste de suppression de plusieurs façons :- Un contact répond avec un mot-clé STOP sur SMS/WhatsApp.
- Un contact se désinscrit via le centre de préférences.
- Vous enregistrez une désinscription via
l’API de consentement (
opt_in: false). - Vous importez en masse une liste (cette page).
all, sms, voice, whatsapp, email, push,
telegram, messenger, rcs.
La portée choisie dépend du point d’entrée :
- L’import CSV en masse déduit la portée du type d’adresse de chaque
ligne : les adresses téléphoniques et WhatsApp prennent par défaut la
portée
all— un signal STOP sur un numéro de téléphone supprime tous les canaux joignables sur ce numéro — tandis que les adresses e-mail sont limitées àemail. Une colonnechannelremplace cette valeur par ligne (voir Import CSV en masse). - L’API de consentement et le centre de préférences suppriment
toujours avec la portée
all, que l’identifiant enregistré soit un numéro de téléphone ou une adresse e-mail. Une désinscription via l’un de ces points d’entrée retire le contact de tous les canaux.
Quelle que soit la façon dont un numéro de téléphone est supprimé, les
portes voix et composeur l’honorent : un numéro qui se désinscrit sur
n’importe quel canal cesse de recevoir des appels aussi bien que des
messages. Le mécanisme diffère selon le point d’entrée. Un import CSV
en masse duplique en outre les lignes téléphoniques vers la liste DNC
et marque les contacts correspondants. Une désinscription par mot-clé
STOP, par le centre de préférences ou par l’API de
consentement est au contraire enregistrée avec la portée
all, que
les portes voix et composeur lisent directement depuis la liste de
suppression — l’appel reste bloqué, mais aucune ligne DNC ni marque de
contact séparée n’est écrite.Import CSV en masse
POST /compliance/suppression-list/import accepte un dépôt
multipart/form-data d’un fichier CSV. Il exige une clé admin ou owner
et est limité à 5 requêtes/minute.
Champs du formulaire
Format du CSV
La première ligne est un en-tête. Les noms de colonnes sont insensibles à la casse et indépendants de la position, et des alias courants sont acceptés :
Chaque ligne doit contenir au moins l’un de phone / email / wa_id.
Une même ligne peut porter plusieurs types d’adresses — chacun produit
sa propre entrée de suppression. Exemple :
channel est présente, elle remplace la portée par
défaut pour cette ligne et doit être l’une des valeurs de portée
listées ci-dessus.
Résultats par ligne
La réponse rapporte les résultats par ligne. Les lignes acceptées sont écrites ; les autres sont classifiées, jamais abandonnées silencieusement.Les deux compteurs de doublons sont rapportés séparément et à
dessein :
intra_file_duplicates sont des répétitions à l’intérieur
du fichier que vous venez de déposer, tandis que duplicates étaient
déjà sur votre liste auparavant. Aucun des deux n’est une erreur, et
aucun n’est absorbé silencieusement — les deux sont comptés pour que
votre rapprochement soit exact.Raisons de validation
Chaque entréeerrors[] porte une reason lisible et la raw_line
source pour que vous puissiez corriger et redéposer :
Limites
Au-delà de 100 000 lignes, découpez le fichier et importez par lots —
la détection des doublons rend sûre la ré-importation de plages qui se
chevauchent.
En cas d’échec de l’import
Diagnostiquez les échecs à deux niveaux : rejets au niveau HTTP (rien n’est écrit) et classifications au niveau ligne (le fichier est accepté mais certaines lignes ne le sont pas). Rejets au niveau HTTP :
Les classifications au niveau ligne (les entrées
errors[] qui
accompagnent un import réussi) correspondent aux causes suivantes :
Seules les 100 premières entrées
errors[] sont renvoyées avec le
détail complet — le compteur invalid reflète toujours le total réel.
L’assistant du tableau de bord (ci-dessous) empaquette les lignes
signalées dans un skipped.csv téléchargeable pour que vous puissiez
corriger et réimporter uniquement les échecs.
Import depuis le tableau de bord
Le même endpoint est enveloppé par un assistant guidé dans Settings → Compliance → Opt-out lists → Import suppression list — le même contrat CSV, sans terminal.- Choose CSV file — choisissez un
.csvde moins de 25 Mo. Utilisez Download sample CSV dans la boîte de dialogue pour un fichier de départ préformaté. - Set defaults (optional) — un
Default country(ISO alpha-2) pour normaliser les numéros au format national, et unReasonen texte libre apposé sur chaque ligne acceptée. - Preview — exécute l’import en dry run côté serveur : rien n’est écrit, et la boîte de dialogue affiche la répartition acceptées / déjà listées / répétées dans le fichier / invalides avant que vous ne validiez.
- Confirm import — effectue l’écriture définitive. Si des lignes
étaient invalides, téléchargez
skipped.csvpour les corriger et les réimporter.
Exporter la liste de suppression
GET /compliance/suppression-list/export télécharge le registre de
suppression — le pendant symétrique de l’import
ci-dessus. Utilisez-le pour prouver à un régulateur ou à un auditeur
quelles adresses étaient supprimées à un instant donné, y compris les
numéros importés en masse sans contact correspondant.
Chaque ligne porte
suppression_id, channel, address, le status
dérivé (active ou revoked), reason, source, contact_id (vide
pour les adresses importées en masse sans contact), notes, ainsi que
les horodatages suppressed_at / revoked_at / created_at.
L’accès est restreint aux clés owner et admin, et chaque
exécution d’export est inscrite au journal d’audit. Lorsque le registre
dépasse 50 000 lignes, la réponse CSV porte un en-tête
X-Export-Truncated: true (l’équivalent JSON définit truncated: true) — filtrez par canal ou exportez des fenêtres de dates
consécutives pour capturer la fin.
Vérifier qu’une suppression a pris effet
Faire confiance mais vérifier : après un import (ou toute désinscription), confirmez que la porte d’envoi bloque effectivement l’adresse avant de confier la liste à une campagne.-
Envoyez un message de test à l’adresse supprimée. Un envoi API
direct vers un destinataire supprimé échoue de façon synchrone avec
HTTP 422 et le code d’erreur
RECIPIENT_OPTED_OUT. En mode sandbox, aucun opérateur n’est touché et aucun solde n’est débité ; tout destinataire se terminant par8se résout aussi vers l’accusé de livraison simuléblocked, qui est la vue côté opérateur de la même barrière.Un envoi de campagne vers la même adresse se comporte différemment par conception : le destinataire est ignoré silencieusement (status: "skipped",reason: "opted_out") pour que le lot continue — consultez le rapport par destinataire de la campagne plutôt que d’attendre une erreur. -
Confirmez que l’entrée figure dans le registre. Exportez avec
la requête ci-dessus (
status=activeest la valeur par défaut) et vérifiez que l’adresse apparaît avec la portéechannelattendue. L’export est la source de vérité que chaque porte d’envoi lit — si la ligne y estactive, la barrière est levée.
Levée d’une suppression (ré-opt-in)
Pour rétablir une adresse, enregistrez un nouvel opt-in via l’API de consentement (opt_in: true). Cela révoque l’entrée de suppression correspondante
et lève la barrière STOP. Ne re-messagez jamais un contact précédemment
supprimé sans un événement de consentement nouveau et documenté.
Confirmation que la barrière est levée. Exportez avec
status=revoked et trouvez l’adresse : la ligne reste présente pour
l’audit avec status: revoked et un horodatage revoked_at —
l’historique de suppression n’est jamais supprimé, seulement révoqué.
Envoyez ensuite un petit message de test à l’adresse comme dans
Vérifier qu’une suppression a pris
effet : une soumission réussie (pas
de RECIPIENT_OPTED_OUT) confirme que la porte ne se déclenche plus
sur l’historique révoqué. Tant que les deux vérifications ne passent
pas, traitez l’adresse comme encore bloquée.
Références associées
- Consent Management — enregistrer et consulter le consentement par canal.
- Send Gates — heures de silence, DNC, RND, RMD, arrêt d’urgence et centre de préférences.
- DSAR — comment les requêtes
delete/opt_outaboutissent à la suppression. - API Reference → Opt-outs — schémas des endpoints de désinscription et de suppression.