> For the complete documentation index, see [llms.txt](https://altec-atls.gitbook.io/api-legacy/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://altec-atls.gitbook.io/api-legacy/authentification/token-dactualisation.md).

# Token d'actualisation

{% hint style="warning" %}
**API Legacy — dépréciée mais toujours fonctionnelle.** Pour toute nouvelle intégration, utilisez l'équivalent de l'API v1 : [Token d'actualisation (v1)](https://altec-atls.gitbook.io/altec-atls-api/authentification/token-dactualisation). Les réponses de cette route incluent les headers `Deprecation` et `Link` (RFC 9745) pointant vers ce successeur.
{% endhint %}

L’opération d’actualisation doit être utilisée lorsque le jeton d'accès (15 minutes) a expiré. Il permet de conserver un accès long sans que l'utilisateur ne se reconnecte. L’opération est effectuée avec un jeton d’actualisation de longue durée (7 jours) fourni avec la réponse [/login](/api-legacy/authentification/connexion.md). Le serveur répond avec une nouvelle paire de jeton d'accès. Si le jeton d'actualisation est invalide, alors une opération de /login doit être de nouveau réalisé.

<mark style="color:green;">`POST`</mark> `/refreshToken`

**Headers**

| Name         | Value              |
| ------------ | ------------------ |
| Content-Type | `application/json` |

**Body**

<table><thead><tr><th width="242">Name</th><th width="172">Type</th><th>Description</th></tr></thead><tbody><tr><td>clientKey</td><td>string</td><td>Clé Client unique fournie par Altec A3Tech</td></tr><tr><td><code>refreshToken</code></td><td>string</td><td>Jeton d'actualisation</td></tr></tbody></table>

**Request**

{% tabs %}
{% tab title="curl" %}

```bash
curl -X POST https://ovh-backend.altec-ts.fr/api/refreshToken \
-H "Content-Type: application/json" \
-d '{
  "clientKey": "your_client_key",
  "refreshToken": "your_refresh-token"
}'
```

{% endtab %}

{% tab title="js" %}

```javascript
const url = 'https://ovh-backend.altec-ts.fr/api/refreshToken';
const data = {
  clientKey: 'your_client_key',
  refreshToken: 'yout_refresh_token'
};
const headers = {
  'Content-Type': 'application/json',
};

// Effectuer la requête POST avec fetch
fetch(url, {
  method: 'POST',
  headers,
  body: JSON.stringify(data)
})
  .then(response => {
    if (!response.ok) {
      // Gérer les réponses non 2xx
      return response.json().then(errData => {
        console.log("status:", response.status);
        console.log("message:", errData.error || "An error has occurred");
      });
    }
    return response.json();
  })
  .then(data => {
    const { accessToken } = data;
    if (!accessToken) {
      console.log('NOK');
      return;
    }
    console.log('OK');
    console.log('accessToken:', accessToken);
  })
  .catch(error => {
    if (error.name === 'AbortError') {
      console.log("message: No response received from server");
    } else {
      console.log('error.message:', error.message);
    }
  });

```

{% endtab %}

{% tab title="node" %}

```javascript
const axios = require("axios");

// Définir les données et les en-têtes
const url = 'https://ovh-backend.altec-ts.fr/api/refreshToken';
const data = {
  clientKey: 'your_client_key',
  refreshToken: 'yout_refresh_token'
};
const headers = {
  'Content-Type': 'application/json',
};

// Effectuer la requête POST
axios.post(url, data, { headers })
  .then(response => {
    const { accessToken } = response.data;
    if(!accessToken){
      console.log('NOK');
      return;
    }
    console.log('OK');
    console.log('accessToken:', accessToken);
  })
  .catch(error => {
    if (error.response) {
      // Server responded with a status code outside the 2xx range
      console.log("status:", error.response.status);
      console.log("message:", error.response.data.error || "An error has occurred");
    } else if (error.request) {
      // Request was made but no response received
      console.log("message: No response received from server");
    } else {
      // Something happened in setting up the request
      console.log('error.message:', error.message);
    }
  });
```

{% endtab %}

{% tab title="python" %}

```python
import requests

# URL de l'API
url = "https://ovh-backend.altec-ts.fr/api/refreshToken"

# Données pour la requête
data = {
    "clientKey": "your_client_key",
    "refreshToken": "your_refresh_token"
}

# En-têtes de la requête
headers = {
    "Content-Type": "application/json"
}

# Effectuer la requête POST
response = requests.post(url, json=data, headers=headers)

# Afficher la réponse
if response.status_code == 200:
    response_json = response.json()
    accessToken = response_json.get("accessToken")
    if accessToken:
        print("OK")
        print("accessToken:", accessToken)
    else:
        print("NOK")
else:
    print(f"Erreur {response.status_code} :", response.text)
```

{% endtab %}

{% tab title="php" %}

```php
<?php
// URL de l'API
$url = "https://ovh-backend.altec-ts.fr/api/refreshToken";

// Données à envoyer
$data = [
    "clientKey" => "your_client_key",
    "refreshToken" => "your_refresh_token"
];

// Encodage des données en JSON
$jsonData = json_encode($data);

// Initialisation de cURL
$ch = curl_init($url);

// Configuration des options cURL
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, [
    "Content-Type: application/json",
]);
curl_setopt($ch, CURLOPT_POSTFIELDS, $jsonData);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

// Exécution de la requête
$response = curl_exec($ch);

// Vérification des erreurs
if (curl_errno($ch)) {
    echo "Erreur cURL : " . curl_error($ch) . "\n";
} else {
    $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
    if ($httpCode == 200) {
        if (isset($responseData['accessToken'])) {
            echo "OK\n";
            echo "accessToken: " . $responseData['accessToken'] . "\n";
        }
        else {
            echo "NOK\n";
        }
    } else {
        echo "Erreur HTTP {$httpCode} : " . $response . "\n";
    }
}

// Fermeture de la session cURL
curl_close($ch);
?>
```

{% endtab %}
{% endtabs %}

**Response**

{% tabs %}
{% tab title="200" %}
OK

```json
{
    "accessToken": "eyJhbGciOiJIUzI1NiIsInR5cC[...]A1OTAyfQ.O0XeF_LIm9JGP",
}
```

{% endtab %}

{% tab title="401" %}
Le token d'actualisation est invalide ou expiré. Une nouvelle requête de[ /login](/api-legacy/authentification/connexion.md) est à réaliser afin de récupérer la nouvelle paire de jeton.

```json
{
    "error": "bad-refresh-token"
}
```

{% endtab %}

{% tab title="422" %}
Paramètres entrants invalides

```json
{
    "error": "invalid-params"
}
```

{% endtab %}

{% tab title="500" %}
Une erreur inattendue s'est produite sur le serveur.

```json
{
    "error": "unknown"
}
```

{% endtab %}
{% endtabs %}
