> ## Documentation Index
> Fetch the complete documentation index at: https://docs.orbit.devotel.io/llms.txt
> Use this file to discover all available pages before exploring further.

# Nettoyage DNC : sources, fraîcheur et endpoint de vérification

> Configurez une posture Do-Not-Call complète — activez l'opt-in au niveau de l'organisation, comprenez l'origine des sources synchronisées, lisez les champs source et fraîcheur de l'endpoint de vérification, et sachez ce que la réserve fail-open implique pour votre trafic.

# Nettoyage DNC : sources, fraîcheur et endpoint de vérification

Un nettoyage Do-Not-Call répond à une seule question avant l'envoi : **ce
numéro figure-t-il sur une liste qui bloque ou restreint sa sollicitation ?** Orbit vérifie
vos propres listes (marqueurs de contact, entrées DNC, suppression, consentement), la
liste globale de la plateforme, les flux fédéraux/étatiques/TCR américains et plusieurs
registres nationaux internationaux — et la même chaîne que celle appliquée
au chemin d'envoi est lisible via une API, ce qui permet de pré-vérifier une liste
froide sans risquer un envoi non conforme.

Cette page présente la vue de bout en bout : quand le nettoyage compte, comment
l'activer, d'où viennent les données synchronisées, comment lire les champs
`source` et `last_synced_at` de l'endpoint de vérification, et l'unique réserve
fail-open à gérer. Pour les gates appliqués à l'envoi qui consomment le résultat,
voir [Gates d'envoi](/compliance/send-gates).

Tous les endpoints ci-dessous sont enracinés à
`https://api.orbit.devotel.io/api/v1/compliance`.

<Warning>
  Cette page décrit les contrôles de la plateforme Orbit. Elle **ne constitue
  pas un avis juridique.** Le fait qu'un numéro vous soit interdit dépend de votre
  juridiction, de vos destinataires et du contenu envoyé. Confirmez auprès de
  conseillers juridiques qualifiés.
</Warning>

***

## Quand le nettoyage DNC compte

Les obligations DNC proviennent de plus d'un registre, et elles se cumulent :

* **DNC fédérale américaine (National Registry de la FTC).** Les appels de télémarketing et
  les SMS marketing vers un numéro inscrit au registre fédéral sont restreints ; un
  nettoyage contre le registre fédéral est la défense de base avant toute
  campagne sortante.
* **Registres étatiques américains.** Plusieurs États gèrent leurs propres listes DNC en
  plus du registre fédéral. Un numéro peut être absent au niveau fédéral mais
  inscrit dans, par exemple, la Pennsylvanie — un nettoyage fédéral seul n'est donc pas
  complet pour le trafic américain.
* **TCR Universal Opt-Out.** La liste d'opt-out universelle du Campaign Registry capture
  les numéros ayant refusé la messagerie A2P au niveau du registre.
  Son respect fait partie de l'hygiène de la messagerie 10DLC américaine, indépendamment de
  votre propre liste de suppression.
* **Registres nationaux internationaux.** Hors des États-Unis, des listes nationales
  équivalentes s'appliquent — le TPS et le CTPS britanniques, le Do Not Call
  Register australien, le NDNC indien. Elles sont propres à chaque juridiction : vous nettoyez une
  campagne britannique contre les registres britanniques, c'est pourquoi l'endpoint de vérification
  accepte un filtre `country` (ci-dessous).

Rien de tout cela ne remplace votre propre couche de suppression — un destinataire qui
vous a répondu STOP est restreint indépendamment de tout registre national.
La chaîne de nettoyage traite votre suppression, vos désinscriptions de consentement
et les registres nationaux comme une réponse combinée unique.

***

## Activer le bascule du locataire

L'endpoint de vérification est **désactivé par défaut** par organisation. Tant que vous
ne vous y êtes pas inscrit — ou tant qu'Orbit n'a synchronisé aucun flux pour la plateforme — l'endpoint
renvoie `403 DNC_SYNC_NOT_ENABLED` :

```json theme={null}
{
  "error": {
    "code": "DNC_SYNC_NOT_ENABLED",
    "message": "DNC check endpoint requires the per-org opt-in flag ...",
    "status": 403
  }
}
```

Activez-le dans les paramètres de conformité de votre organisation (le
paramètre `dnc_sync_enabled` — voir la
[carte des postures](/compliance/posture-overview), qui répertorie ce bascule
et sa valeur par défaut). Une seule activation rend disponibles à la fois la vérification d'un numéro unique et le
nettoyage en masse.

<Note>
  **Le gate se désactive automatiquement une fois les flux synchronisés.** Le bascule de l'organisation est
  la reconnaissance que, tant qu'aucun flux fédéral n'est synchronisé, Orbit
  ne nettoie pas pour vous contre le registre de la FTC. Une fois que la plateforme a
  synchronisé un instantané fédéral/étatique/TCR (ou international), l'endpoint
  répond directement et le gate 403 ne s'applique plus — le champ
  `federal_feeds_synced` de chaque réponse indique l'état dans lequel
  vous vous trouvez. Votre propre application des DNC, de la suppression et du consentement sur
  le chemin d'envoi n'est pas affectée dans un cas comme dans l'autre.
</Note>

***

## D'où vient la liste (câblage des flux)

Les données DNC synchronisées proviennent de flux en amont, rafraîchis quotidiennement dans
la liste DNC globale de la plateforme. Ce qu'un opérateur configure détermine
quelle valeur de `source` l'endpoint de vérification vous renvoie.

**Ce sont des variables d'environnement de niveau opérateur.** Sur la plateforme
hébergée (SaaS) d'Orbit, elles sont définies pour vous ; l'opérateur SaaS contrôle quels
flux sont actifs. Elles ne vous concernent directement que si vous auto-hébergez Orbit
— dans ce cas, configurez-les dans votre déploiement :

* **`DEVOTEL_DNC_FEED_FILE`** — un volume monté contenant un instantané
  fédéral/étatique/TCR acquis. La synchronisation quotidienne le lit, analyse chaque
  numéro désinscrit et l'insère dans la liste DNC de la plateforme avec son étiquette
  de source (`federal_dnc`, `state_dnc:XX` ou `tcr`).
* **`DEVOTEL_DNC_FEED_URL`** — un téléchargement authentifié du même
  instantané, en alternative au fichier monté. Le fichier a la priorité
  lorsque les deux sont définis.

La synchronisation s'exécute **une fois par jour UTC** (les flux publient une fois par
jour ouvré ; l'exécution cible 03:00 UTC afin qu'une fenêtre d'envoi matinale voie des données
fraîches). Relancer le même instantané est sans effet au-delà du rafraîchissement de
l'horodatage — l'insertion est idempotente.

**Solution de repli : extraction TCR directe.** Lorsqu'aucun fichier/URL d'instantané n'est configuré
mais que les identifiants payants du partenaire TCR sont définis — `DEVOTEL_TCR_API_KEY`
avec `DEVOTEL_TCR_PARTNER_ID` — la synchronisation quotidienne extrait le registre
Universal Opt-Out de TCR directement depuis l'API du partenaire et l'insère
avec `source: "tcr"`. Cela fournit le nettoyage TCR à partir de l'abonnement TCR
existant sans CSV hors bande.

<Note>
  Le même instantané que la synchronisation quotidienne écrit dans la liste DNC
  de la plateforme est également chargé en mémoire par l'API au démarrage, de sorte que l'endpoint de vérification peut
  répondre à une recherche fédérale/étatique/TCR sans attendre la prochaine écriture
  quotidienne. `federal_feeds_synced: true` dans la réponse signifie que
  le flux en mémoire est actif.
</Note>

***

## Lire l'endpoint de vérification

`GET /compliance/dnc/check` indique si un numéro E.164 figure sur une
source DNC que le chemin d'envoi applique. Il est en lecture seule — il n'effectue aucun
envoi.

```bash theme={null}
curl "https://api.orbit.devotel.io/api/v1/compliance/dnc/check?phone=%2B14155550101" \
  -H "Authorization: Bearer $ORBIT_API_KEY"
```

Un résultat positif renvoie :

```json theme={null}
{
  "on_dnc": true,
  "source": "federal_dnc",
  "last_synced_at": "2026-08-26T03:00:12.441Z",
  "jurisdictions": ["US Federal DNC"],
  "federal_feeds_synced": true,
  "intl_feeds_synced": false
}
```

Un numéro non figurant renvoie `"on_dnc": false`, `"source": "none"` et un
`jurisdictions` vide.

Les champs qui portent la posture :

* **`source`** — la source qui a produit le premier résultat, l'une parmi
  `federal_dnc`, `state_dnc` (un registre étatique américain), `tcr` (le TCR
  Universal Opt-Out), `intl_dnc` (un registre national international),
  `suppression` (votre propre couche de suppression) ou `none` (ne figure sur aucune
  liste). `jurisdictions` liste **toutes** les origines correspondantes, de sorte qu'un numéro
  inscrit à la fois au registre fédéral et à un registre étatique fait apparaître les deux.
* **`last_synced_at`** — l'horodatage de fraîcheur de la source
  correspondante : quand l'instantané fédéral/étatique/TCR (ou la ligne qu'il a touchée) a été
  synchronisé pour la dernière fois. La synchronisation quotidienne horodate une ligne de pulsation à chaque exécution, de sorte que
  ce champ porte toujours un signal de « dernière synchronisation » pour les sources adossées à
  un flux, plutôt que de rester muet quand aucune ligne ne correspond. Vos propres
  sources de suppression/consentement n'ont pas de synchronisation : pour un résultat de suppression seule,
  le champ reflète l'événement d'opt-out lui-même.
* **`federal_feeds_synced` / `intl_feeds_synced`** — si l'API
  a effectivement ingéré un instantané fédéral/étatique/TCR américain et un
  instantané de registre national international, respectivement. Lisez-les à
  chaque réponse : ils distinguent « le numéro est libre » de « le
  numéro est libre **et** un nettoyage fédéral a étayé cette réponse. »

**Filtre par juridiction.** Ajoutez `country` (ISO alpha-2) pour limiter la
recherche dans les registres internationaux à une juridiction :

```bash theme={null}
curl "https://api.orbit.devotel.io/api/v1/compliance/dnc/check?phone=%2B442071838750&country=GB" \
  -H "Authorization: Bearer $ORBIT_API_KEY"
```

Avec `country=GB`, seuls les registres britanniques (TPS/CTPS) peuvent produire une
correspondance internationale — une campagne à destination du Royaume-Uni n'est jamais signalée pour un
enregistrement d'un pays sans rapport.

**En masse.** Pour nettoyer une liste entière ou l'audience d'une campagne en un seul appel, utilisez
`POST /compliance/dnc/scrub` avec un tableau `phones` (jusqu'à 500 numéros
par requête ; les doublons sont supprimés). Il exécute la même chaîne par numéro
et renvoie des verdicts par numéro plus les compteurs `on_dnc` / `clear`. Le
même gate d'organisation s'applique.

***

## Comment le côté envoi le consomme

L'endpoint de vérification est une **lecture** de la même chaîne que le chemin d'envoi
**applique**. Vous n'avez pas à câbler le nettoyage dans vos envois — Orbit le fait
déjà :

* **Messagerie (SMS / MMS / WhatsApp / …).** Avant l'envoi, le chemin d'envoi
  répond à la question « ce destinataire est-il désinscrit ? » contre les mêmes sources
  DNC — votre marqueur DNC de contact, votre liste DNC, la liste de suppression
  (le signal STOP intercanal), la liste DNC globale de la plateforme (où
  atterrit le flux quotidien fédéral/étatique/TCR) et les désinscriptions de consentement
  enregistrées. Un résultat au hit abandonne l'envoi.
* **Voix / composeur.** Le composeur exécute la même chaîne de conformité avant
  d'originer un appel — STOP intercanal, DNC de contact, DNC de plateforme
  et consentement — de sorte qu'un numéro désinscrit par SMS n'est ensuite pas
  composé par la voix. Le chemin d'envoi échoue **de manière fermée** : si la vérification de conformité
  elle-même ne peut aboutir, l'appel est différé plutôt que composé.

Le rôle de l'endpoint est donc le pré-vol, non l'application : interrogez-le (ou le
nettoyage en masse) sur une liste froide **avant** une campagne pour supprimer les numéros que
le gate bloquerait de toute façon — et pour les faire remonter dans vos propres dossiers.

***

## La réserve fail-open

L'endpoint de lecture est **fail-open au niveau de la source** : si une source
DNC ne peut être interrogée, la vérification continue avec les autres et renvoie
la meilleure réponse possible. La conséquence concrète à comprendre :

> **Tant qu'aucun flux fédéral n'est synchronisé, un numéro qui ne figure qu'au registre
> fédéral de la FTC est renvoyé comme libre** (`on_dnc: false`).

C'est pourquoi l'endpoint est en gate jusqu'à ce que vous vous inscriviez, et pourquoi
`federal_feeds_synced` voyage sur chaque réponse. Deux règles opérationnelles en
découlent :

1. **Ne traitez pas un résultat libre comme une sauvegarde fédérale sauf si
   `federal_feeds_synced: true`.** Un verdict libre avec
   `federal_feeds_synced: false` signifie seulement que vos propres listes, la suppression,
   le consentement et la liste de la plateforme n'ont pas signalé le numéro.
2. **Le gate strict est le chemin d'envoi.** Le chemin de lecture est fail-open par
   conception ; le chemin d'envoi ne l'est pas. Un faux négatif d'une requête
   de pré-vol ne devient jamais un envoi — la chaîne au moment de l'envoi revérifie les mêmes
   sources et bloque ce qu'elle trouve.

Sur le SaaS d'Orbit, traitez `federal_feeds_synced: false` comme « aucun nettoyage
fédéral n'étaye encore cette réponse » et pesez cela dans la décision de vous reposer sur
le pré-vol pour une campagne américaine. Les auto-hébergeurs comblent l'écart en
configurant un flux (ci-dessus).

***

## Vérifier avant une campagne

Pré-vérifiez l'audience d'une campagne avec le nettoyage en masse, puis agissez sur les
verdicts :

```bash theme={null}
curl -X POST "https://api.orbit.devotel.io/api/v1/compliance/dnc/scrub" \
  -H "Authorization: Bearer $ORBIT_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "phones": ["+14155550101", "+442071838750", "+14155550101"],
    "country": "GB"
  }'
```

```json theme={null}
{
  "results": [
    { "phone": "+14155550101", "on_dnc": true, "source": "federal_dnc", "jurisdictions": ["US Federal DNC"] },
    { "phone": "+442071838750", "on_dnc": false, "source": "none", "jurisdictions": [] }
  ],
  "summary": { "total": 2, "on_dnc": 1, "clear": 1, "duplicates_removed": 1 },
  "federal_feeds_synced": true,
  "intl_feeds_synced": false
}
```

Supprimez les numéros `on_dnc: true` de l'audience avant l'envoi.
Vérifiez `federal_feeds_synced` / `intl_feeds_synced` sur la même réponse
pour savoir quels registres ont réellement étayé les verdicts, et vérifiez
`last_synced_at` par résultat pour confirmer que les données sont fraîches. Pour une
liste plus grande, paginez-la par tranches de 500 numéros.

***

Voir aussi :

* [Gates d'envoi](/compliance/send-gates) — les gates d'envoi heures calmes / DNC / RND /
  RMD et l'arrêt d'urgence.
* [Gate TCPA des litigants connus](/compliance/tcpa-known-litigator) — la
  vérification de provenance du destinataire qui complète le nettoyage DNC pour le risque
  TCPA américain.
* [Nettoyage DNC pré-vol en masse](/guides/dnc-preflight-scrub) — le
  workflow de campagne autour du nettoyage en masse : gating, découpage et routage
  des numéros signalés.
* [Listes d'opt-out et de suppression](/compliance/opt-out-suppression) — comment
  le STOP d'un destinataire atterrit sur la couche de suppression que la chaîne DNC lit.
* [Votre posture de conformité du locataire](/compliance/posture-overview) — la
  carte des bascules, dont la ligne `dnc_sync_enabled` de cette page.
