Authentification OTP
L'API utilise un système d'authentification par code OTP (One-Time Password) sans mot de passe. Le code est envoyé sur le téléphone de l'utilisateur via SMS ou WhatsApp.
Flux d'authentification
1. POST /api/otp/generate → reçoit un code OTP sur son téléphone
2. POST /api/otp/verify → soumet le code → reçoit un token d'accès
3. Requêtes protégées → envoie le token dans le header Authorization
Utiliser le token
Après vérification OTP, ajouter le token dans toutes les requêtes protégées :
Authorization: Bearer {token}
Les tokens expirent après 10 minutes d'inactivité.
POST /api/otp/generate
Envoie un code de vérification sur le téléphone de l'utilisateur via SMS ou WhatsApp. Si l'utilisateur n'a pas encore de compte, il est créé automatiquement.
Authentification : Non requise
Paramètres (body JSON)
| Champ | Type | Obligatoire | Description |
|---|---|---|---|
phone | string | Oui | Numéro de téléphone (format E.164) |
country | string | Oui | Code pays (ex : SN, CI, CM) |
method | string | Oui | Canal : sms ou whatsapp |
Exemple
{
"phone": "+221700000000",
"country": "SN",
"method": "whatsapp"
}
Réponses
200 — Code envoyé :
{
"user": null,
"message": "Votre code de vérification a été envoyé avec succès.",
"data": {
"phone": "+221700000000"
}
}
422 — Paramètres invalides :
{
"user": null,
"message": "Données invalides.",
"errors": {
"phone": ["The phone field is required."],
"method": ["The selected method is invalid."]
}
}
500 — Échec de l'envoi :
{
"user": null,
"message": "Une erreur est survenue lors de l'envoi du code de vérification.",
"data": []
}
POST /api/otp/verify
Vérifie le code reçu et retourne un token d'accès à conserver pour les requêtes suivantes.
Authentification : Non requise
Paramètres (body JSON)
| Champ | Type | Obligatoire | Description |
|---|---|---|---|
phone | string | Oui | Numéro de téléphone (format E.164) |
code | string | Oui | Code OTP reçu |
Exemple
{
"phone": "+221700000000",
"code": "148392"
}
Réponses
200 — Code valide :
{
"user": {
"id": 1,
"phone": "+221700000000",
"country": "SN",
"affiliation_code": "XKQT472"
},
"message": "Code vérifié avec succès.",
"data": {
"token": "1|xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
}
}
Conservez le token retourné dans data.token pour authentifier les prochaines requêtes.
400 — Code invalide ou expiré :
{
"user": null,
"message": "Code invalide ou expiré (les codes ont 10 minutes de validité)",
"data": []
}
422 — Paramètres invalides :
{
"user": null,
"message": "Données invalides.",
"errors": {
"code": ["The code field is required."]
}
}