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

# Ajouter un client

> Créez un client, liez ses comptes bancaires et ses secrétariats sociaux, puis demandez ses mandats et suivez-les jusqu'à leur activation.

Pour recevoir les fichiers CODA ou CODB d'un client, Codaclean doit connaître ce client et ses comptes bancaires ou secrétariats sociaux, et disposer d'un mandat signé pour chacun d'eux.

<Steps>
  <Step title="Créez le client">
    Appelez [`POST /customers/new`](/fr/api/endpoints/create-customer) en indiquant :

    * l'`enterpriseNumber` du client (au format `0123.456.789`, sans `BE`), son `name` et son `accountingRef` ;
    * son `address` : `street`, `zipCode`, `municipality` et `country` (`street2` est facultatif) ;
    * son `contact` : `name`, `function`, `email` et `language` (`fr`, `nl` ou `en`). Les demandes de signature des mandats sont envoyées à cette personne, dans cette langue.

    Vous pouvez inclure `bankAccounts` (IBAN uniquement) et `payrollProviders` (code uniquement) dans le même appel, ou les ajouter plus tard :

    * [`POST /customers/{customerId}/bank-accounts/{iban}/new`](/fr/api/endpoints/add-bank-account)
    * [`POST /customers/{customerId}/payroll-providers/{code}/new`](/fr/api/endpoints/add-payroll-provider)

    <Warning>
      - **Comptes bancaires :** envoyez uniquement l'IBAN. Codaclean en déduit le BIC et le nom de la banque.
      - **Secrétariats sociaux :** envoyez le code Codaclean du secrétariat social, et non son nom. Pour trouver ce code, utilisez [`POST /payroll-providers`](/fr/api/endpoints/list-payroll-providers).
    </Warning>

    Si le client existe déjà dans la fiduciaire, retrouvez-le avec [`POST /customers`](/fr/api/endpoints/search-customers) (par exemple à partir de son `enterpriseNumber`), puis complétez ce qui manque.

    **Scope requis :** `customers:write`
  </Step>

  <Step title="Demandez les mandats">
    Demandez un mandat par compte bancaire et un mandat par secrétariat social :

    * CODA : [`POST /customers/{customerId}/bank-accounts/{iban}/mandates/new`](/fr/api/endpoints/request-coda-mandate)
    * CODB : [`POST /customers/{customerId}/payroll-providers/{code}/mandates/new`](/fr/api/endpoints/request-codb-mandate)

    Pour les comptes bancaires, c'est la banque qui détermine le produit.

    Codaclean demande un mandat CODA lorsque la banque le permet, et à défaut un consentement CODAlight via un connecteur. Dans les deux cas, vous recevez des fichiers CODA.

    <Warning>
      Un seul mandat peut être en cours par IBAN, et par secrétariat social. Une seconde demande renvoie `409 mandateAlreadyRequested`.

      N'envoyez chaque demande qu'une seule fois, et ne la renouvelez pas avant que le mandat apparaisse dans `POST /mandates` : d'ici là, les doublons ne sont pas détectés.

      Si un mandat doit être remplacé, par exemple après une modification des données du client, l'utilisateur peut s'en charger dans MyCodaclean.
    </Warning>

    **Scope requis :** `mandates:write`
  </Step>

  <Step title="Suivez les mandats">
    Les demandes de mandat sont traitées de manière **asynchrone**.

    L'appel confirme uniquement que Codaclean a bien reçu la demande. Il ne renvoie aucun identifiant de mandat.

    Pour suivre les mandats, interrogez régulièrement [`POST /mandates`](/fr/api/endpoints/search-mandates), par exemple avec `customerId` et avec `updatedSince` défini sur l'heure de votre dernière interrogation.

    Chaque mandat possède un `status`, qui évolue à mesure que le mandat progresse.

    **Scope requis :** `mandates:read`
  </Step>
</Steps>

## Client enregistré par une autre fiduciaire

Un numéro d'entreprise ne peut appartenir qu'à une seule fiduciaire.

Si une autre fiduciaire l'a déjà enregistré, la création du client renvoie `403 belongsToAnotherTenant`, et le client ne peut pas être ajouté.

Le comptable doit alors contacter le support Codaclean afin d'engager une procédure de transfert, qui requiert l'accord du client final.

## Choisir un connecteur

Certaines banques sont accessibles via plusieurs connecteurs CODAlight. La demande de mandat renvoie alors `422 connectorSelectionRequired`, avec une liste de `candidates`.

Relancez l'appel en indiquant le `connectorId` choisi dans le corps de la requête. Codaclean mémorise ce choix pour le compte bancaire.

## Statuts des mandats

| Statut                       | CODA | CODB | Signification                                                                                                                                                                       |
| ---------------------------- | ---- | ---- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `created`                    | ✓    | ✓    | Demande créée, en cours de traitement.                                                                                                                                              |
| `waitingForSigner`           | ✓    | ✓    | En attente de la signature du client.                                                                                                                                               |
| `expired`                    | ✓    | ✓    | Non signé dans un délai de 3 mois. L'utilisateur peut le renvoyer depuis MyCodaclean.                                                                                               |
| `rejectedBySigner`           | ✓    | ✓    | Le signataire a refusé.                                                                                                                                                             |
| `waitingForBank`             | ✓    |      | Signé, en attente de la banque.                                                                                                                                                     |
| `confirmedByBank`            | ✓    |      | Confirmé par la banque, mais aucun fichier reçu pour l'instant.                                                                                                                     |
| `rejectedByBank`             | ✓    |      | Rejeté par la banque.                                                                                                                                                               |
| `unsupportedBank`            | ✓    |      | La banque n'est pas prise en charge.                                                                                                                                                |
| `waitingForPayrollProvider`  |      | ✓    | Signé, en attente du secrétariat social.                                                                                                                                            |
| `rejectedByPayrollProvider`  |      | ✓    | Rejeté par le secrétariat social.                                                                                                                                                   |
| `unsupportedPayrollProvider` |      | ✓    | Le secrétariat social n'est pas pris en charge.                                                                                                                                     |
| `finished`                   | ✓    | ✓    | **Actif** : le processus de signature est terminé et les fichiers sont reçus. Affiché « Actif » dans MyCodaclean. Exclu de `POST /mandates`, sauf si `includeFinished` vaut `true`. |
| `renewalRequired`            | ✓    |      | CODAlight uniquement : le consentement a pris fin et le client doit le renouveler.                                                                                                  |
| `error`                      | ✓    | ✓    | Une erreur s'est produite. Détail dans le champ `error`.                                                                                                                            |

## Consentements CODAlight

Un consentement CODAlight apparaît avec `product: "CODA"`.

Il est limité dans le temps : `validUntil` indique la fin du consentement.

Au-delà de cette date, le mandat passe au statut `renewalRequired`, jusqu'à ce que le client renouvelle le consentement.

## Bon à savoir

* Les mandats qui ne sont pas signés dans un délai de **3 mois** expirent. L'utilisateur peut les renvoyer depuis MyCodaclean.
* Codaclean envoie automatiquement des rappels réguliers aux clients finaux qui doivent encore signer ou renouveler un mandat.
* Pour obtenir la liste des banques prises en charge, utilisez [`POST /banks`](/fr/api/endpoints/list-banks).
* Pour obtenir la liste des secrétariats sociaux disponibles et leurs codes, utilisez [`POST /payroll-providers`](/fr/api/endpoints/list-payroll-providers).
