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

# Authentification

> Chaque appel comporte une clé API, qui identifie votre logiciel, et un ID token, qui identifie l'utilisateur.

L'API Codaclean repose sur deux identifiants, utilisés ensemble.

| Identifiant | En-tête                           | Identifie                      | Requis pour                              |
| ----------- | --------------------------------- | ------------------------------ | ---------------------------------------- |
| Clé API     | `x-api-key: <key>`                | Votre logiciel                 | Tous les appels, y compris `POST /token` |
| ID token    | `Authorization: Bearer <idToken>` | L'utilisateur et sa fiduciaire | Tous les appels, sauf `POST /token`      |

La fiduciaire est toujours déduite de l'ID token.

Vous ne la transmettez jamais en paramètre : un utilisateur ne voit jamais que les données de sa propre fiduciaire.

## Comptes utilisateurs et portée du token

Les identifiants transmis à `POST /token` sont ceux d'un compte utilisateur Codaclean.

La fiduciaire crée et gère elle-même ces comptes, dans sa plateforme [MyCodaclean](https://app.codaclean.io) : elle définit le niveau d'accès de chaque utilisateur et les clients auxquels il a accès.

La portée d'un ID token est donc celle de son utilisateur :

* **En général, toute la fiduciaire.** Le token donne accès à tous les clients de la fiduciaire que l'utilisateur peut voir.
* **Ou seulement une ou plusieurs sociétés.** La fiduciaire peut limiter un utilisateur à certains clients. L'API ne renvoie alors que ces clients, avec leurs mandats et leurs fichiers.

<Tip>
  Un compte restreint sert typiquement lorsque c'est le client final, et non le comptable, qui utilise votre logiciel.

  La fiduciaire crée alors un compte limité à la société de ce client : votre logiciel ne voit jamais que les données de cette société.
</Tip>

**Voir aussi :** [Accès aux données](/fr/api/data-access)

## Obtenir un ID token

Appelez [`POST /token`](/fr/api/endpoints/get-token) avec les identifiants de l'utilisateur :

| Champ      | Description                                             |
| ---------- | ------------------------------------------------------- |
| `username` | L'identifiant de connexion Codaclean de l'utilisateur.  |
| `password` | Le mot de passe de l'utilisateur, **encodé en Base64**. |

La réponse contient :

| Champ          | Description                                                                                                     |
| -------------- | --------------------------------------------------------------------------------------------------------------- |
| `idToken`      | À transmettre sous la forme `Authorization: Bearer <idToken>` dans tous les autres appels. Valable **1 heure**. |
| `refreshToken` | Permet d'obtenir un nouvel `idToken` sans mot de passe. Valable **30 jours**.                                   |

<Warning>
  Encodez le mot de passe en Base64 avant de l'envoyer.

  Codaclean le décode : avec un mot de passe en clair, l'appel échoue donc avec `500 Authentication failed`.
</Warning>

## Rafraîchir l'ID token

L'ID token est valable 1 heure. Une fois qu'il a expiré, les appels renvoient `401`.

Appelez de nouveau `POST /token`, cette fois avec le refresh token seul :

| Champ          | Description                                                                                    |
| -------------- | ---------------------------------------------------------------------------------------------- |
| `refreshToken` | Un refresh token obtenu lors d'une connexion précédente par nom d'utilisateur et mot de passe. |

La réponse contient un nouvel `idToken`.

Elle ne contient **pas** de nouveau `refreshToken` : continuez d'utiliser celui que vous avez déjà.

Le refresh token est valable 30 jours. Une fois qu'il a expiré, reconnectez-vous avec le nom d'utilisateur et le mot de passe.

## Erreurs liées au token

| Statut | Signification                                                                                                                                                                   |
| ------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `400`  | La requête ne contient ni `username`/`password` ni `refreshToken`.                                                                                                              |
| `403`  | Clé API absente ou invalide.                                                                                                                                                    |
| `500`  | Échec de l'authentification. Le champ `error` indique la raison renvoyée par le fournisseur d'identité (par exemple, des identifiants incorrects ou un refresh token invalide). |

<Note>
  Sur cet endpoint, un `500` signifie en général des identifiants incorrects ou un refresh token invalide, et non une panne du serveur.
</Note>

## Qui peut utiliser l'API ?

* Les utilisateurs qui disposent du niveau d'accès **Portail uniquement** ne peuvent pas utiliser l'API : leurs appels renvoient `401`.
* Les utilisateurs qui n'ont pas le niveau **Administrateur** ne voient pas les clients confidentiels.
* Les actions autorisées pour votre clé API sont définies par les [scopes](/fr/api/scopes).

**Voir aussi :** [Accès aux données](/fr/api/data-access)
