> ## 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.

# Barrières d'envoi : BAA, heures de silence, DNC, RND, RMD et arrêt d'urgence

> Barrières de conformité qu'Orbit applique avant l'envoi, notamment la barrière de l'accord HIPAA Business Associate Agreement, les heures de silence, Do-Not-Call, FCC Reassigned Numbers, Robocall Mitigation et les vérifications de préférences.

# Barrières d'envoi

Au-delà du consentement et de la suppression, plusieurs vérifications réglementaires s'exécutent **au moment de l'envoi**. Orbit les regroupe sous le nom de *barrières d'envoi* : chacune peut retenir ou bloquer un message ou un appel avant sa distribution. Cette page couvre les barrières que vous configurez ou interrogez directement.

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

<Warning>
  DNC et RND effectuent la vérification par rapport aux registres
  nationaux — les registres Do-Not-Call de la FTC au niveau fédéral et
  des États, ainsi que le TCR Universal Opt-Out pour DNC, et la Reassigned
  Numbers Database de la FCC pour RND. Il ne s'agit pas de flux que vous
  connectez ou intégrez par locataire : lorsqu'un instantané du registre est
  en place, la plateforme le maintient centralement plutôt que de lire
  depuis votre propre intégration. Mais la vérification est **désactivée
  par défaut** — chaque barrière reporte `federal_feeds_synced` /
  `feed_synced` à `false` jusqu'à ce qu'un instantané soit réellement
  synchronisé pour elle, et reste derrière un commutateur d'opt-in par
  organisation. Tant que les deux ne sont pas vraies, ces endpoints
  renvoient une réponse de désactivation et un numéro présent uniquement
  sur un registre fédéral est lu comme libre (voir chaque barrière
  ci-dessous pour son comportement exact). Cette page ne constitue pas un
  avis juridique — confirmez vos obligations TCPA/FCC auprès d'un conseil
  juridique.
</Warning>

***

## BAA — la barrière d'envoi HIPAA

Lorsque votre organisation opte pour le **mode HIPAA** (vous traitez des PHI), chaque envoi sortant — qu'il s'agisse de messages individuels ou de campagnes groupées — est bloqué jusqu'à ce qu'un **Business Associate Agreement (BAA)** exécuté et en vigueur soit enregistré. L'exécution du BAA est la première étape de la séquence HIPAA ; la barrière d'envoi est le garde-fou d'exécution qui ne peut être contourné.

Un envoi bloqué renvoie
`422 HIPAA_BAA_REQUIRED` avec un `reason` parmi `pending`, `expired` ou
`not_signed`, et le `docs_url` dans la charge utile d'erreur pointe vers le flux d'exécution du BAA. Un `500 HIPAA_BAA_GATE_DB_FAIL` signifie que la barrière n'a pas pu vérifier le statut du BAA — elle échoue **fermée** (les envois restent bloqués) plutôt que de risquer une transmission de PHI qu'elle ne peut vérifier. Réessayez sous peu ; si le problème persiste, contactez le support.

<Note>
  La barrière vérifie aussi la piste d'audit : lorsque la lecture du
  statut du BAA ne peut être validée, l'envoi est bloqué et l'échec est
  consigné dans l'audit PHI plutôt que d'être laissé passer
  silencieusement.
</Note>

Un BAA exécuté a une **durée d'un an** ; l'expiration est recalculée à partir de l'horodatage d'exécution au moment de l'envoi, de sorte qu'un BAA arrivé à échéance bloque à nouveau même si la tâche cron quotidienne de vérification d'expiration n'a pas encore été exécutée.

Si votre organisation n'atteste pas le mode HIPAA, cette barrière est une no-op — elle n'inspecte jamais que les organisations qui ont déclaré que les PHI sont dans le périmètre. Suivez la séquence complète dans
[Intégration HIPAA : du BAA à l'audit complet](/guides/hipaa-onboarding).

***

## Heures de silence

Les règles d'heures de silence bloquent les messages et appels qui s'afficheraient en dehors des heures locales autorisées du destinataire (p. ex. la fenêtre TCPA de 8 h à 21 h). Orbit résout le temps local du destinataire à partir de la région de son numéro de téléphone.

`GET /quiet-hours/preview` vous indique si un envoi est autorisé actuellement, et quelle est la prochaine heure autorisée — utilisez-le pour planifier en dehors de la fenêtre.

```bash theme={null}
curl "https://api.orbit.devotel.io/api/v1/compliance/quiet-hours/preview?phone=%2B14155550101&channel=sms" \
  -H "Authorization: Bearer $ORBIT_API_KEY"
```

```json theme={null}
{
  "allowed_now": false,
  "local_hour": 22,
  "local_timezone": "America/Los_Angeles",
  "window_start_local": "08:00",
  "window_end_local": "21:00",
  "next_allowed_at": "2026-06-09T15:00:00.000Z",
  "reason": "outside_window",
  "channel": "sms"
}
```

| Paramètre de requête | Notes                                                                        |
| -------------------- | ---------------------------------------------------------------------------- |
| `phone`              | E.164 (requis).                                                              |
| `channel`            | `sms`, `mms`, `whatsapp`, `rcs`, `viber`, `telegram`, `voice`, `email`, etc. |
| `timezone_override`  | Fuseau horaire IANA optionnel si vous le connaissez déjà.                    |

La barrière des heures de silence est **opt-in par canal et par organisation** — chaque canal est livré avec le commutateur désactivé, de sorte que les SMS, WhatsApp et autres envois d'un nouveau locataire ne sont pas retenus par les heures de silence tant que vous n'activez pas la barrière pour ce canal. Activez-la par canal depuis les paramètres d'heures de silence de votre organisation dans le tableau de bord Orbit ; les fenêtres répertoriées s'appliquent alors automatiquement.

Une fois activées, les fenêtres sont 08:00–21:00 (heure locale du destinataire) pour SMS/voix et 09:00–21:00 pour les canaux WhatsApp/Meta, sauf si vous définissez votre propre `start_hour`/`end_hour`. E-mail, fax et push ne sont pas soumis aux heures de silence.

<Note>
  **Fenêtre vocale TCPA aux États-Unis : conseil pour les appels ad-hoc,
  blocage dur pour les campagnes.** Pour les appels vocaux sortants vers des
  destinataires américains (+1), Orbit évalue la fenêtre fédérale TCPA de
  composition de 8 h à 21 h en heure locale du destinataire à chaque
  appel — mais la façon dont le résultat est appliqué dépend du chemin
  d'appel :

  * **La composition ad-hoc 1:1 depuis le tableau de bord est à titre de
    conseil par défaut.** Un appel en dehors de la fenêtre enregistre un
    journal structuré de conseil mais est quand même distribué. Pour
    retenir ces appels plutôt, activez le commutateur d'heures de silence
    vocales pour votre organisation ; son activation applique la fenêtre
    de 8 h à 21 h comme retenue stricte.
  * **Le trafic vocal de campagne et de composeur est toujours dur-bloqué
    en dehors de la fenêtre, indépendamment de vos paramètres de locataire.**
    Un appel de campagne ou de composeur placé en dehors de 8 h à 21 h en
    heure locale du destinataire est rejeté avec `422
    TCPA_FEDERAL_DIALING_WINDOW_BLOCKED` — il n'y a pas d'opt-out par
    organisation pour la voix automatisée ou groupée, et le commutateur
    d'heures de silence vocales ne l'assouplit pas. Si le fuseau horaire du
    destinataire ne peut être résolu, l'appel échoue fermé et est également
    bloqué.

  Planifiez les appels de campagne et de composeur à l'intérieur de la
  fenêtre de 8 h à 21 h en heure locale du destinataire — utilisez
  `GET /quiet-hours/preview` pour trouver la prochaine heure autorisée.
</Note>

***

## DNC — Do Not Call

`GET /dnc/check` indique si un numéro figure sur une liste Do-Not-Call avant que vous ne l'appeliez ou lui envoyiez un SMS. Pour la posture de bout en bout — sources, fraîcheur et le caveat de fail-open — voir
[Vérification DNC](/compliance/dnc-scrub).

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

Lorsqu'il est activé, il renvoie :

```json theme={null}
{
  "on_dnc": true,
  "source": "suppression_list",
  "jurisdictions": ["US"],
  "federal_feeds_synced": false
}
```

Le `source` indique quelle couche a signalé le numéro (votre drapeau DNC de contact, la liste DNC, la liste de suppression ou une désinscription de consentement).

<Note>
  La barrière s'applique **uniquement tant qu'aucun flux Do-Not-Call n'est
  synchronisé**. Dans cet état, l'endpoint est retenu derrière le paramètre
  d'organisation `dnc_sync_enabled` (désactivé par défaut) et renvoie
  `403 DNC_SYNC_NOT_ENABLED` jusqu'à ce que vous optiez — reconnaissant
  qu'Orbit ne fait pas encore de vérification par rapport à un registre
  fédéral pour vous, de sorte qu'un numéro présent uniquement sur la liste
  FTC se lit comme `on_dnc: false`.

  Une fois qu'Orbit a synchronisé un instantané fédéral, d'État ou TCR, la
  barrière `dnc_sync_enabled` est contournée : l'endpoint se sert
  directement et `federal_feeds_synced` renvoie `true`. Lisez ce champ à
  chaque réponse pour confirmer si une vérification fédérale soutient
  réellement le résultat.
</Note>

### Vérification préalable en lot

`POST /dnc/scrub` exécute la même chaîne sur une liste entière en un seul appel — jusqu'à 500 numéros E.164 par requête, avec un filtre optionnel de juridiction `country`. Il renvoie des verdicts par numéro plus des comptes de synthèse `on_dnc` / `clear`, est limité par débit à 10 requêtes par minute par organisation, et se situe derrière la même barrière décrite ci-dessus.

```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"] }'
```

Pour le workflow de campagne — barrière, découpage en lots, acheminement des numéros signalés vers la suppression et cadence de re-vérification — voir
[Vérification préalable DNC en lot](/guides/dnc-preflight-scrub).

### Dépannage de la barrière

Lorsque l'un des endpoints DNC est retenu à `403 DNC_SYNC_NOT_ENABLED` :

1. **Confirmez l'état de la barrière sans exécuter de vérification** —
   appelez `GET /dnc/availability`. Il rapporte la barrière exacte que les
   deux endpoints appliquent : `available`, votre `org_opt_in` et
   `federal_feeds_synced`.
2. **Activez l'accusé de l'organisation** — activez `dnc_sync_enabled`
   dans les paramètres de conformité de votre tableau de bord. Le drapeau
   est par organisation et échoue fermé : un drapeau jamais défini, une
   valeur stockée comme chaîne ou nombre plutôt que booléen `true`, ou
   une recherche de paramètres qui échoue se résolvent tous à OFF — une
   organisation qui n'a jamais visité les paramètres de conformité obtient
   toujours le 403.
3. **Ou attendez l'instantané** — une fois que la plateforme synchronise
   un flux fédéral, d'État ou TCR, la barrière se retire d'elle-même et
   `federal_feeds_synced` bascule à `true` ; l'accusé n'est plus consulté.
4. **Distinguez les homonymes** — `401` est l'authentification, `422` est
   un téléphone malformé, et `429` sur `/dnc/scrub` est sa limite de 10
   requêtes par minute, pas la barrière.

La démarche complète est
[Dépannage : pré-vérification DNC au 403](/troubleshooting/dnc-check-gated).

***

## RND — Reassigned Numbers Database

Les numéros de téléphone américains sont réattribués à de nouvelles personnes. La **Reassigned Numbers Database** de la FCC vous permet de vérifier si un numéro a été déconnecté *après* la date à laquelle vous avez obtenu le consentement — un « abri sûr » contre le fait d'envoyer un SMS ou d'appeler la mauvaise personne.

`GET /rnd/check` prend le `phone` et la `consent_date`
(`YYYY-MM-DD`) :

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

```json theme={null}
{
  "status": "no_data",
  "safe_harbor": false,
  "last_disconnect_date": null,
  "consent_date": "2025-01-15",
  "feed_synced": false,
  "reason": "FCC Reassigned Numbers Database has no permanent-disconnect record for this number; no safe harbor — contact at your own risk."
}
```

Tant que `feed_synced` est `false`, c'est la seule réponse que l'endpoint renvoie, quel que soit le `phone` et la `consent_date` — aucune date de déconnexion n'est encore enregistrée, donc chaque verdict se dégrade à `no_data`.

`status` est l'un de `yes`, `no` ou `no_data` — le verdict de la base de données de la FCC pour la paire `(phone, consent_date)` :

| `status`  | `safe_harbor` | Signification                                                                                                                                                                     |
| --------- | ------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `yes`     | `false`       | Le numéro a été déconnecté définitivement **après** `consent_date` et a peut-être été réattribué. Aucun abri sûr — ne pas contacter.                                              |
| `no`      | `true`        | Aucune déconnexion définitive après `consent_date`. L'abri sûr FCC pour les numéros réattribués s'applique — sûr à contacter.                                                     |
| `no_data` | `false`       | La base de données n'a aucun enregistrement de déconnexion définitive pour ce numéro, ou le flux n'est pas encore synchronisé. Aucun abri sûr — procédez à vos risques et périls. |

`safe_harbor` est `true` uniquement lorsque `status` est `no`. `last_disconnect_date`
est la date de déconnexion définitive la plus récente enregistrée (`null` lorsqu'aucune),
et `feed_synced` est `false` jusqu'à ce que l'ingestion du flux RND soit configurée — tant
qu'il est `false`, chaque verdict est `no_data`.

Étant donné derrière `rnd_scrub_enabled` (désactivé par défaut) ; renvoie
`403 RND_SCRUB_NOT_ENABLED` pendant que c'est désactivé.

### Activation et désactivation de la vérification RND

Utilisez `PUT /api/v1/compliance/rnd/settings` pour contrôler le drapeau `rnd_scrub_enabled` :

```bash theme={null}
curl -X PUT "https://api.orbit.devotel.io/api/v1/compliance/rnd/settings" \
  -H "Authorization: Bearer $ORBIT_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"enabled": true}'
```

**L'activation est bloquée par HTTP 409 `RND_FEED_NOT_CONFIGURED`** jusqu'à ce que le flux de la Reassigned Numbers Database de la FCC (le flux reassigned.us de SomosGov) soit connecté à votre déploiement. Activer la fonctionnalité avant que le flux ne soit ingéré créerait un contrôle de conformité qui ne réalise aucune vérification réelle de numéros réattribués — vous basculeriez le drapeau, mais chaque recherche `/rnd/check` renverrait toujours `no_data`. Le blocage 409 empêche cette fausse impression de protection.

La désactivation (`enabled: false`) est toujours permise, même si aucun flux n'est encore connecté.

***

## RMD — Robocall Mitigation Database

Les émetteurs de voix américains doivent déposer un enregistrement **Robocall Mitigation Database** décrivant leur statut STIR/SHAKEN et leur plan de mitigation. Orbit stocke et suit votre dépôt.

* `GET /rmd` — lire votre enregistrement plus un bloc `recertification`
  avec `renewal_deadline` et `action_required`.
* `POST /rmd` — créer ou mettre à jour le dépôt.
* `POST /rmd/submit` → statut `submitted`.
* `POST /rmd/certify` → statut `active`.
* `POST /rmd/remediation` (avec une `reason`) → statut
  `remediation_required`.
* `POST /rmd/resolve` → retour à `active`.
* `POST /rmd/withdraw` → statut `withdrawn`.

```bash theme={null}
curl -X POST https://api.orbit.devotel.io/api/v1/compliance/rmd \
  -H "Authorization: Bearer $ORBIT_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "company_name": "Acme Communications Inc",
    "business_address": "1 Market St, San Francisco, CA",
    "stir_shaken_status": "partial",
    "mitigation_plan": "Known-customer vetting + traceback cooperation…",
    "contact_name": "Jordan Lee",
    "contact_email": "compliance@acme.example"
  }'
```

`stir_shaken_status` est `complete`, `partial` ou `none`. Un
`mitigation_plan` est **requis** sauf si le statut est `complete`. Le cycle
de vie est `draft → submitted → active → remediation_required →
active | withdrawn`.

***

## Arrêt d'urgence

L'arrêt d'urgence est un **commutateur d'extinction à l'échelle de l'organisation** qui arrête immédiatement tout le trafic sortant SMS, MMS, voix et composeur — utilisez-le lors d'une incident (une campagne mal configurée, une clé compromise, une erreur de contenu). Pour le runbook complet de l'opérateur, voir le
[guide de l'arrêt d'urgence](/guides/compliance-emergency-stop).

```bash theme={null}
# Activate
curl -X POST https://api.orbit.devotel.io/api/v1/compliance/emergency-stop/activate \
  -H "Authorization: Bearer $ORBIT_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "reason": "Suspected list contamination — pausing all sends" }'

# Check
curl https://api.orbit.devotel.io/api/v1/compliance/emergency-stop \
  -H "Authorization: Bearer $ORBIT_API_KEY"

# Deactivate
curl -X POST https://api.orbit.devotel.io/api/v1/compliance/emergency-stop/deactivate \
  -H "Authorization: Bearer $ORBIT_API_KEY"
```

`GET /emergency-stop` renvoie le drapeau `active` actuel plus
`activated_at`, `activated_by` et `reason`. L'activation et la
désactivation nécessitent une clé admin/propriétaire.

<Warning>
  Tant que l'arrêt d'urgence est actif, tout le trafic de campagne
  sortante SMS, MMS, voix et composeur pour l'organisation est bloqué. Les
  envois transactionnels **Verify/OTP** et l'e-mail ne sont **pas**
  soumis à l'arrêt d'urgence — ils s'exécutent par des chemins de
  livraison séparés, de sorte qu'un contact peut toujours recevoir un code
  de connexion tant que le commutateur est actif. Si vous avez aussi besoin
  de mettre en pause ceux-ci, désactivez le profil Verify ou le
  expéditeur d'e-mail pertinent. Désactivez l'arrêt dès que l'incident est
  résolu.
</Warning>

***

## Centre de préférences

Le **centre de préférences** est une page publique signée par jeton où un contact gère ses propres opt-ins par canal, la fréquence des messages et (si activé) les demandes de suppression de données — sans se connecter. Les mises à jour s'écoulent directement dans le consentement, la suppression et la barrière STOP.

Configurez-le une fois, puis générez un lien par contact. La démarche complète — chaque champ de configuration, emplacement du lien et surfaces de flux de mise à jour — se trouve dans le
[guide du centre de préférences](/guides/preference-center-opt-out-page) :

* `POST /preference-center` (admin/propriétaire) — définir l'image de marque,
  les `channels` offerts, les options de fréquence et le commutateur de
  suppression GDPR.
* `GET /preference-center` — lire la configuration actuelle.
* `POST /preference-center/link` avec `{ "contactId": "cnt_…" }` —
  générer un lien signé (HMAC-SHA256, TTL de 30 jours) à envoyer par e-mail
  ou SMS au contact.

Le contact utilise ensuite le lien public
(`GET`/`PUT /compliance/preferences/{token}`) pour voir et mettre à jour ses
préférences. La désinscription ici enregistre une révocation de consentement,
ajoute une entrée de suppression et définit la barrière STOP ; la
réinscription l'inverse.

<Warning>
  Demander la suppression depuis le centre de préférences enregistre une
  demande de suppression GDPR de l'héritage uniquement — elle marque le
  contact pour suppression mais ne lance **pas** le pipeline DSAR suivi.
  Elle n'a pas d'horloge SLA, aucune exportation de données déchiffrée ni
  certificat d'effacement de l'article 17. Pour déposer une demande de
  droit à l'effacement suivie par SLA, exportant les données du contact et
  produisant un certificat d'effacement, utilisez l'endpoint DSAR
  (`POST /compliance/dsar`, propriétaire/admin uniquement) — voir
  [Demandes de sujets à l'information personnelle](/compliance/dsar).
</Warning>

***

## Règles par pays

`GET /country-rules` est la référence réglementaire en lecture seule derrière
ces barrières — par pays et par canal, elle rapporte les types d'expéditeurs
autorisés, si l'enregistrement de l'ID de l'expéditeur est `none` /
`recommended` / `required`, les exigences de mots-clés d'arrêt, le support
bidirectionnel, le support DLR et le débit par défaut.

```bash theme={null}
curl "https://api.orbit.devotel.io/api/v1/compliance/country-rules?channel=sms&region=EU" \
  -H "Authorization: Bearer $ORBIT_API_KEY"
```

Utilisez-la pour comprendre, avant de lancer sur un marché, ce que chaque
destination exige — voir
[Exigences de conformité par pays](/compliance/country-requirements) pour un
guide champ-par-champ de lecture de cette référence.

***

## Références connexes

* [FAQ de posture de conformité](/compliance/posture-faq) — « J'ai activé le
  commutateur — pourquoi rien n'est encore bloqué ? » et le résumé fail-open
  par rapport à fail-closed pour chaque barrière de cette page.

* [Barrière TCPA des plaideurs connus](/compliance/tcpa-known-litigator) — la
  vérification de l'origine du destinataire par rapport à la liste de la
  plateforme des plaideurs professionnels TCPA, avec son commutateur de
  locataire, sa piste d'audit de contournement consenti et son mode fail-open.

* [Configurez la posture de votre locataire avant le premier envoi](/compliance/tenant-posture-first-run) —
  le runbook qui déroule ces barrières en ordre de configuration, avec la valeur
  par défaut et la conséquence pour chacune.

* [Fenêtres d'appel par État aux États-Unis](/compliance/state-calling-windows) — superpositions
  mini-TCPA par État sur la fenêtre de composition fédérale et la façon dont
  un blocage se remonte à un statut.

* [Exigences de conformité par pays](/compliance/country-requirements) —
  types d'expéditeurs, enregistrement et documentation par pays.

* [Secteurs restreints et interdits](/compliance/restricted-industries) —
  quels secteurs et contenus sont restreints ou interdits.

* [Blocs automatiques des destinations vocales](/compliance/voice-destination-auto-blocks) —
  les blocs vocaux automatiques par destination appliqués sur un envoi
  groupé de traffic-pumping ou de Wangiri, et où les lire avant qu'un appel
  légitime vers ce numéro ne soit rejeté.

* [Listes d'exclusion et de suppression](/compliance/opt-out-suppression) —
  la couche de suppression alimentée par DNC et le centre de préférences.

* [Gestion du consentement](/compliance/consent-management) — les
  enregistrements de consentement mis à jour par le centre de préférences.

* [Enregistrement de l'ID d'expéditeur](/compliance/sender-id-registration) — l'enregistrement
  que `country-rules` rapporte comme requis.

* [Référence API → Conformité](/api-reference/endpoints/compliance) — schémas
  complets de requête/réponse (régénérés depuis l'API en direct).
