Aller au contenu principal

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}
info

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)

ChampTypeObligatoireDescription
phonestringOuiNuméro de téléphone (format E.164)
countrystringOuiCode pays (ex : SN, CI, CM)
methodstringOuiCanal : 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)

ChampTypeObligatoireDescription
phonestringOuiNuméro de téléphone (format E.164)
codestringOuiCode 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"
}
}
astuce

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."]
}
}