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

# Liste de blocage des clients

> Bloquez un client pour empêcher ses futurs paiements, annuler ses abonnements actifs et rendre son Customer Portal accessible en lecture seule. Gérez la liste de blocage depuis Settings ou l’API.

<Info>
  La liste de blocage des clients empêche un fraudeur connu d’acheter à nouveau chez vous. Un client bloqué ne peut pas payer, perd ses abonnements actifs et peut consulter, mais pas modifier, quoi que ce soit dans le [Customer Portal](/features/customer-portal). Gérez-la depuis **Settings → Blocklist** ou via l’API Blocklist.
</Info>

<Frame caption="The Blocklist tab under Settings">
  <img src="https://mintcdn.com/dodopayments/c1t35qHSH45TR4GO/images/blocklist/blocklist-settings.png?fit=max&auto=format&n=c1t35qHSH45TR4GO&q=85&s=771eb4a5654fbd22e6a5110cfb1a2e9d" alt="Page des paramètres de la liste de blocage affichant le nombre total de clients bloqués, un tableau des entrées bloquées avec les colonnes de l’identifiant, de l’auteur du blocage et de la date de blocage, ainsi qu’un bouton Add to Blocklist" style={{ maxHeight: '500px', width: 'auto' }} width="2358" height="1554" data-path="images/blocklist/blocklist-settings.png" />
</Frame>

## Ce qui se passe lorsque vous bloquez un client

| Domaine                                     | Effet                                                                                                                                                                                                                                                                                                   |
| ------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Checkout**                                | Toute tentative de paiement effectuée depuis l’adresse e-mail bloquée est refusée : payment links, checkout sessions et paiements ou abonnements créés via l’API.                                                                                                                                       |
| **Abonnements actifs**                      | Les abonnements dont le statut est `pending`, `active`, `on_hold` ou `paused` sont annulés avec le motif `cancelled_by_merchant`. Le webhook `subscription.cancelled` habituel est déclenché pour chacun d’eux.                                                                                         |
| **Renouvellements et nouvelles tentatives** | Les renouvellements automatiques et les [nouvelles tentatives de paiement](/features/recovery/payment-retries) ignorent un client bloqué. Aucun débit supplémentaire n’est donc effectué, même si une annulation est encore en attente.                                                                 |
| **Nouvelle tentative manuelle**             | Une [nouvelle tentative manuelle](/features/recovery/manual-retry) du paiement d’un client bloqué est refusée.                                                                                                                                                                                          |
| **Customer Portal**                         | Le client peut toujours se connecter et consulter ses factures, ses abonnements et ses clés de licence, mais il ne peut pas annuler, suspendre ou reprendre un abonnement, modifier son offre ni mettre à jour son moyen de paiement. La suppression d’un moyen de paiement enregistré reste autorisée. |

<Note>
  Le blocage ne rembourse pas les paiements passés et n’affecte pas les litiges ouverts. Effectuez tout remboursement séparément depuis la page [Refunds](/features/transactions/refunds).
</Note>

## Comment le blocage identifie les clients

Vous pouvez bloquer un client par **customer ID** ou par **e-mail**. Dans les deux cas, le blocage repose sur l’adresse e-mail du client, et non sur sa fiche client :

* **Toutes les fiches associées à cette adresse sont concernées.** Checkout peut créer une nouvelle fiche client pour une adresse e-mail déjà utilisée. Un blocage basé sur un seul customer ID pourrait donc être contourné, contrairement à un blocage basé sur l’adresse e-mail.
* **Les alias sont pris en compte.** Les adresses e-mail sont comparées en minuscules, après suppression de `+alias`. Ainsi, `buyer+promo@example.com` et `Buyer@example.com` correspondent au même client. Les points présents dans l’adresse sont conservés.
* **Le blocage est limité à votre entreprise.** Un blocage s’applique uniquement à votre entreprise. La même adresse e-mail peut toujours acheter auprès d’autres entreprises sur Dodo Payments.
* **L’adresse e-mail doit appartenir à un client existant.** Vous ne pouvez pas bloquer une adresse e-mail qui n’a jamais effectué de Checkout chez vous, ni une fiche client dépourvue d’adresse e-mail.

## Bloquer un client

<Tabs>
  <Tab title="From Settings">
    <Steps>
      <Step title="Open the Blocklist">
        Accédez à **Settings → Blocklist** dans votre dashboard.
      </Step>

      <Step title="Add to Blocklist">
        Cliquez sur **Add to Blocklist**, puis saisissez l’adresse e-mail ou le customer ID du client. Ajoutez un motif afin que votre équipe puisse comprendre ultérieurement pourquoi le blocage a été ajouté.
      </Step>

      <Step title="Confirm">
        Confirmez le blocage. Les abonnements actifs du client sont immédiatement annulés et l’entrée apparaît dans le tableau **Blocked entries**.
      </Step>
    </Steps>
  </Tab>

  <Tab title="From the customer's page">
    <Steps>
      <Step title="Open the customer">
        Accédez à **Sales → Customers** et ouvrez le client que vous souhaitez bloquer.
      </Step>

      <Step title="Block the customer">
        Cliquez sur **Block Customer**. Une fois le blocage appliqué, la page affiche un badge **Blocked** à côté du nom du client.
      </Step>
    </Steps>
  </Tab>
</Tabs>

## Gérer les clients bloqués

La page **Blocklist** répertorie tous les blocages actifs :

* **Total Customers Blocked** : nombre de clients actuellement bloqués.
* **Blocked entries** : une ligne par blocage, avec l’**Identifier** saisi (adresse e-mail ou customer ID), **Blocked By** (le membre de l’équipe ayant ajouté le blocage) et **Blocked On**.
* **Search Identifier** et **Filters** : recherchez une entrée par adresse e-mail ou customer ID, ou filtrez selon l’auteur et la date du blocage.
* **Action** : gérez l’entrée, notamment en débloquant le client.

### Page du client bloqué

<Frame caption="A blocked customer's details page">
  <img src="https://mintcdn.com/dodopayments/c1t35qHSH45TR4GO/images/blocklist/blocked-customer-details.png?fit=max&auto=format&n=c1t35qHSH45TR4GO&q=85&s=83e1225a8e71c003d2bf660f0eea9c08" alt="Page Customer Information d’un client bloqué affichant le badge Blocked, un bouton Unblock Customer, un Activity Log avec une note et l’événement Added to blocklist, ainsi qu’un panneau Reference IDs contenant le customer ID" style={{ maxHeight: '500px', width: 'auto' }} width="2366" height="1554" data-path="images/blocklist/blocked-customer-details.png" />
</Frame>

Ouvrez un client bloqué depuis **Sales → Customers** ou depuis la page Blocklist pour voir :

* Un badge **Blocked** à côté du nom du client et un bouton **Unblock Customer**.
* **Activity Log** : la date à laquelle le client a été ajouté à la liste de blocage, le motif et les notes ajoutées depuis par votre équipe. Cliquez sur **Add Note** pour consigner un nouveau contexte, comme l’issue d’une rétrofacturation. Les notes peuvent être modifiées ultérieurement.
* **Reference IDs** : le customer ID associé à ce blocage, prêt à être copié.

## Débloquer un client

Cliquez sur **Unblock Customer** sur la page du client ou utilisez le menu d’actions de la page Blocklist.

* Les modifications dans Checkout et le Customer Portal sont immédiatement rétablies.
* **Les abonnements annulés ne sont pas réactivés.** Le client doit effectuer un nouvel achat.
* L’entrée est conservée comme trace d’audit avec ses notes, mais n’apparaît plus dans la liste active.
* Vous pouvez à nouveau bloquer le même client ultérieurement. Cela crée une nouvelle entrée.

## Ce que voit le client

Un client bloqué n’est jamais informé de son blocage.

* **Lors du Checkout**, le paiement échoue avec un refus générique : "This payment cannot be processed." L’API renvoie HTTP `403` avec le code d’erreur `PAYMENT_NOT_PERMITTED`, qui ne précise aucune cause. Le véritable motif est consigné uniquement dans les logs de Dodo Payments.
* **Dans le Customer Portal**, tout reste visible, mais chaque action est désactivée. Une opération d’écriture bloquée renvoie `PORTAL_ACTION_NOT_PERMITTED` avec le message "This action is not available." Le profil du portail contient `read_only: true` afin qu’une intégration de portail personnalisée puisse désactiver ses propres contrôles. Le portail n’expose jamais l’entrée de la liste de blocage ni ses notes.

<Warning>
  Si vous affichez les erreurs de Checkout ou du portail dans votre propre produit, conservez ce comportement. Affichez un message générique pour `PAYMENT_NOT_PERMITTED` et `PORTAL_ACTION_NOT_PERMITTED`. Révéler le blocage indiquerait à un fraudeur qu’il doit essayer une autre adresse e-mail.
</Warning>

## Utiliser l’API

L’API Blocklist vous permet de bloquer des clients depuis vos propres outils, par exemple lorsqu’une rétrofacturation est reçue. Elle nécessite votre [clé API](/api-reference/introduction) secrète. Toute clé peut répertorier les entrées et lire les notes. Une clé disposant d’un **write access** activé peut bloquer, débloquer des clients et gérer les notes. Le dashboard applique la même séparation aux rôles d’équipe : le rôle **Viewer** peut lire la liste et le rôle **Editor** peut effectuer des modifications.

| Méthode  | Endpoint                                          | Fonction                                                               |
| -------- | ------------------------------------------------- | ---------------------------------------------------------------------- |
| `GET`    | `/blocklist/customers`                            | Répertorier les clients bloqués, avec des filtres et un nombre `total` |
| `POST`   | `/blocklist/customers`                            | Bloquer un client par customer ID ou adresse e-mail                    |
| `GET`    | `/blocklist/customers/{entry_id}`                 | Récupérer une entrée avec ses notes                                    |
| `DELETE` | `/blocklist/customers/{entry_id}`                 | Débloquer un client                                                    |
| `POST`   | `/blocklist/customers/{entry_id}/notes`           | Ajouter une note                                                       |
| `PATCH`  | `/blocklist/customers/{entry_id}/notes/{note_id}` | Mettre à jour une note                                                 |

### Bloquer un client

Envoyez `customer_id` ou `email` au niveau supérieur du body. `reason` est facultatif et s’affiche sur la page de l’entrée.

<CodeGroup>
  ```typescript Node.js theme={null}
  import DodoPayments from 'dodopayments';

  const client = new DodoPayments({
    bearerToken: process.env.DODO_PAYMENTS_API_KEY,
  });

  // Block by customer ID
  const entry = await client.blocklist.customers.create({
    customer_id: 'cus_0NmichXWP8JYBB9Dw1Unj',
    reason: 'Chargeback on pay_0NmichXuYoNoapmr',
  });

  // Or block by email
  const byEmail = await client.blocklist.customers.create({
    email: 'buyer@example.com',
    reason: 'Repeated refund abuse',
  });

  console.log(entry.id, entry.cancelled_subscription_ids);
  ```

  ```python Python theme={null}
  import os
  from dodopayments import DodoPayments

  client = DodoPayments(bearer_token=os.environ["DODO_PAYMENTS_API_KEY"])

  # Block by customer ID
  entry = client.blocklist.customers.create(
      customer_id="cus_0NmichXWP8JYBB9Dw1Unj",
      reason="Chargeback on pay_0NmichXuYoNoapmr",
  )

  # Or block by email
  by_email = client.blocklist.customers.create(
      email="buyer@example.com",
      reason="Repeated refund abuse",
  )

  print(entry.id, entry.cancelled_subscription_ids)
  ```

  ```bash cURL theme={null}
  curl -X POST https://live.dodopayments.com/blocklist/customers \
    -H "Authorization: Bearer $DODO_PAYMENTS_API_KEY" \
    -H "Content-Type: application/json" \
    -d '{
      "customer_id": "cus_0NmichXWP8JYBB9Dw1Unj",
      "reason": "Chargeback on pay_0NmichXuYoNoapmr"
    }'
  ```
</CodeGroup>

```json Response theme={null}
{
  "id": "bcu_7Hq2mV9kRt4LxYw3Pz",
  "customer_id": "cus_0NmichXWP8JYBB9Dw1Unj",
  "customer_name": "wow guy",
  "customer_email": "wowguy@example.com",
  "identifier": "cus_0NmichXWP8JYBB9Dw1Unj",
  "reason": "Chargeback on pay_0NmichXuYoNoapmr",
  "source": "api",
  "blocked_by_email": null,
  "created_at": "2026-09-02T12:09:41Z",
  "unblocked_at": null,
  "cancelled_subscription_ids": ["sub_3Fk8pW2nQs6MzXc1"],
  "subscriptions_swept": true
}
```

| Champ                        | Description                                                                                                                             |
| ---------------------------- | --------------------------------------------------------------------------------------------------------------------------------------- |
| `identifier`                 | Le customer ID ou l’adresse e-mail envoyée.                                                                                             |
| `source`                     | Origine du blocage : `blocklist_page`, `customer_page`, `payment_page`, `dispute_page` ou `api`. Une clé API enregistre toujours `api`. |
| `blocked_by_email`           | L’utilisateur du dashboard ayant ajouté le blocage. `null` pour une clé API.                                                            |
| `cancelled_subscription_ids` | Abonnements annulés par cet appel.                                                                                                      |
| `remaining_subscription_ids` | Abonnements encore actifs, car une annulation a échoué ou l’appel a atteint sa limite de 25 annulations.                                |
| `subscriptions_swept`        | `false` lorsque des abonnements actifs subsistent. Répétez l’appel jusqu’à obtenir `true`. Le blocage lui-même est déjà appliqué.       |

<Note>
  Bloquer un client déjà bloqué renvoie HTTP `409` avec `CUSTOMER_ALREADY_BLOCKED`, sauf si des abonnements sont encore en attente d’annulation. Dans ce cas, l’appel poursuit plutôt l’annulation.
</Note>

### Vérifier si un client est bloqué

[Get Customer Detail](/api-reference/customers/get-customers-1) renvoie deux champs supplémentaires : `blocked_at`, la date d’ajout du blocage actif (`null` lorsque le client n’est pas bloqué), et `blocklist_entry_id`, l’entrée correspondante. L’endpoint [List Customers](/api-reference/customers/get-customers) laisse ces deux champs vides.

### Débloquer un client

<CodeGroup>
  ```typescript Node.js theme={null}
  await client.blocklist.customers.delete('bcu_7Hq2mV9kRt4LxYw3Pz');
  ```

  ```python Python theme={null}
  client.blocklist.customers.delete("bcu_7Hq2mV9kRt4LxYw3Pz")
  ```

  ```bash cURL theme={null}
  curl -X DELETE https://live.dodopayments.com/blocklist/customers/bcu_7Hq2mV9kRt4LxYw3Pz \
    -H "Authorization: Bearer $DODO_PAYMENTS_API_KEY"
  ```
</CodeGroup>

L’endpoint renvoie HTTP `204` en cas de réussite. Le déblocage rétablit les opérations d’écriture dans Checkout et le portail, mais ne réactive aucun abonnement.

## Bonnes pratiques

* **Consignez le motif.** Un motif court sur le blocage, complété par des notes pour les événements ultérieurs, permet à votre équipe d’assistance de disposer de tout le contexte sans quitter le dashboard.
* **Bloquez après une rétrofacturation.** Ouvrez le client depuis le litige ou le paiement et bloquez-le à cet endroit, ou automatisez l’opération depuis le webhook `dispute.opened` avec `POST /blocklist/customers`. Consultez la page [Disputes](/features/transactions/disputes).
* **Vérifiez `subscriptions_swept`.** Lorsque vous bloquez un client via l’API, répétez l’appel jusqu’à ce que la réponse indique `true`, afin qu’aucun abonnement actif ne subsiste.
* **Remboursez séparément.** Un blocage empêche uniquement les achats futurs. Si vous devez de l’argent au client, remboursez le paiement comme d’habitude.
* **Consultez la liste.** Débloquez les clients dont le problème est résolu. Le déblocage est immédiat et conserve l’historique.

## Contenu associé

<CardGroup cols={2}>
  <Card title="Customer Management" icon="user-group" href="/features/customers">
    Recherchez un client, ouvrez sa page de détails et gérez ses abonnements.
  </Card>

  <Card title="Customer Portal" icon="id-card" href="/features/customer-portal">
    Découvrez ce qu’un client bloqué peut ou ne peut pas faire dans le portail.
  </Card>

  <Card title="Disputes" icon="circle-exclamation" href="/features/transactions/disputes">
    Répondez aux rétrofacturations et déterminez quand un blocage est justifié.
  </Card>

  <Card title="Error Codes" icon="triangle-exclamation" href="/api-reference/error-codes">
    Découvrez ce que signifient `PAYMENT_NOT_PERMITTED` et `PORTAL_ACTION_NOT_PERMITTED`.
  </Card>
</CardGroup>
