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

# Exclusions

> Listes d'exclusion Retriever : empêcher le sourcing de proposer vos clients, concurrents ou contacts déjà engagés.

Les listes d'exclusion contiennent les entreprises et les personnes que le sourcing ne doit jamais renvoyer. C'est la liste de **l'utilisateur** qui a créé la clé, la même que dans les paramètres de l'application.

| Endpoint                            | Corps             | Réponse                           |
| ----------------------------------- | ----------------- | --------------------------------- |
| `POST /v1/exclusions/companies`     | `domains`         | `inserted`, `existing`, `invalid` |
| `POST /v1/exclusions/people`        | `linkedin_urls`   | `inserted`, `existing`, `invalid` |
| `POST /v1/exclusions/{kind}/remove` | même corps        | `removed`, `invalid`              |
| `GET /v1/exclusions/{kind}`         | `limit`, `offset` | `items`, `next_offset`            |

## Règles

* `kind` vaut `companies` ou `people`, sinon `404 not_found`.
* Chaque appel accepte de 1 à 1 000 valeurs.
* Renvoyer une valeur déjà présente ne fait rien ; elle est comptée dans `existing`.
* Les domaines sont normalisés : `https://www.Stripe.com/pricing` devient `stripe.com`. `GET` renvoie la forme normalisée.
* Pour `people`, seule une URL `linkedin.com/in/…` est valide, pas un identifiant seul.
* Les valeurs invalides n'arrêtent pas la requête. Elles sont renvoyées dans `invalid` avec une raison :

```json theme={null}
{
  "inserted": 2,
  "existing": 0,
  "invalid": [{ "value": "pas un domaine", "reason": "company_domain_required" }]
}
```

Raisons possibles : `company_domain_required`, `linkedin_url_required`.

Items de `GET` : `domain` (ou `linkedin_url`), `created_at`, `updated_at`.

Voir [Synchroniser vos clients vers la liste d'exclusion](/recipes/sync-exclusions) pour une synchronisation CRM sûre.
