> For the complete documentation index, see [llms.txt](https://qosic.gitbook.io/qospay/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://qosic.gitbook.io/qospay/merchant-api/authentication/login.md).

# login

## Connexion

Obtenez un token bearer marchand à l’aide des identifiants client qui vous ont été fournis.

```http
POST /api/v1/auth/login HTTP/1.1
Host: api.example.com
Accept: application/json
Content-Type: application/json

{
  "clientKey": "8f93aa63-merchant-key",
  "clientSecret": "replace-with-your-secret"
}
```

Requête cURL équivalente :

```bash
curl --request POST "https://api.example.com/api/v1/auth/login" \
  --header "Accept: application/json" \
  --header "Content-Type: application/json" \
  --data '{
    "clientKey": "8f93aa63-merchant-key",
    "clientSecret": "replace-with-your-secret"
  }'
```

### Champs de la requête

| Champ          | Obligatoire | Type   | Description                                                                                    |
| -------------- | ----------- | ------ | ---------------------------------------------------------------------------------------------- |
| `clientKey`    | Oui         | string | Clé API marchand fournie lors de l’onboarding. Une valeur vide produit `Username is required`. |
| `clientSecret` | Oui         | string | Secret marchand actuel. Une valeur vide produit `Password can not be empty`.                   |

### Réponse réussie — HTTP 200

```json
{
  "token": {
    "token": "eyJhbGciOiJIUzI1NiJ9...",
    "tokenExpiry": "2026-08-10T04:30:00.000+00:00"
  },
  "responseCode": "00",
  "message": "Login successful",
  "data": null,
  "succeed": false
}
```

{% hint style="info" %}
Le modèle de connexion hérite d’un champ `succeed` qui n’est pas l’indicateur de réussite faisant autorité pour cet endpoint. Utilisez le statut HTTP et `responseCode` ; une connexion réussie renvoie HTTP `200`, `responseCode: "00"` et un `token.token` non vide.
{% endhint %}

Stockez `token.token` en mémoire ou dans un cache de courte durée correctement protégé. Renouvelez-le en vous reconnectant avant `tokenExpiry`. Le token retourné est un token d’accès ; aucun refresh token n’est fourni.

### Clé invalide — HTTP 401

```json
{
  "token": null,
  "responseCode": "401",
  "message": "Invalid API KEY information",
  "data": null,
  "succeed": false
}
```

### Secret invalide — HTTP 401

```json
{
  "token": null,
  "responseCode": "401",
  "message": "Invalid login information",
  "data": null,
  "succeed": false
}
```

{% hint style="warning" %}
Des secrets invalides répétés peuvent verrouiller le compte. Ne réessayez pas de mauvais identifiants en boucle serrée.
{% endhint %}

### Compte verrouillé — HTTP 403

```json
{
  "token": null,
  "responseCode": "403",
  "message": "Your account is locked due to multiple failed login attempts.Try again in 14 minutes",
  "data": null,
  "succeed": false
}
```

{% hint style="warning" %}
Attendez la durée de verrouillage indiquée avant de réessayer. Si le verrouillage ne disparaît pas, utilisez le canal de support marchand fourni lors de l’onboarding.
{% endhint %}

Les autres échecs de connexion incluent :

* `Your account is not active. Please contact support` — le compte marchand est désactivé.
* `Please contact support. Account status mismatch` — la validation d’intégrité des identifiants a échoué. Ne réessayez pas ; le dossier marchand doit être vérifié.
