Authentification
Inscription, connexion, jetons Sanctum par appareil, échange de code de connexion, mot de passe oublié et déconnexion.
L'API utilise des jetons personnels Laravel Sanctum. Vous obtenez un jeton en vous inscrivant ou en vous connectant, puis vous l'envoyez dans l'en-tête Authorization de chaque requête protégée :
Authorization: Bearer 1|AbCdEfGhIjKlMnOpQrStUvWxYz0123456789abcd
Accept: application/json
- Un jeton est créé par appareil : le champ facultatif
device(60 caractères maximum, par défautapp) lui donne un nom, par exempleiphone-williamouscript-import. - Les jetons n'expirent pas d'eux-mêmes, sauf ceux issus d'une connexion de l'équipe Monsiteo « en tant que » client (2 heures).
- Changer de mot de passe révoque tous les autres jetons du compte, seul le jeton utilisé pour la requête reste valide.
- Un jeton invalide, révoqué ou absent donne
401 {"message": "Unauthenticated."}.
Attention Un jeton donne un accès complet au compte. Conservez-le côté serveur (variable d'environnement, coffre de secrets) et ne le publiez jamais dans du code client ou un dépôt Git.
Inscription#
POST /v1/auth/register · Public · 10 requêtes par minute
Crée un compte (formule Gratuit), envoie l'e-mail de vérification et l'e-mail de bienvenue, et renvoie un jeton.
| Paramètre | Type | Obligatoire | Règles |
|---|---|---|---|
name |
chaîne | oui | 120 caractères max. |
email |
chaîne | oui | e-mail valide (RFC), 190 caractères max., pas déjà utilisé |
password |
chaîne | oui | 8 caractères min. |
accept_terms |
booléen | oui | doit valoir true (acceptation des conditions) |
company |
chaîne | non | 190 caractères max. |
device |
chaîne | non | 60 caractères max., nom du jeton |
curl -X POST https://api.monsiteo.com/v1/auth/register \
-H "Accept: application/json" -H "Content-Type: application/json" \
-d '{"name":"William Dupont","email":"william@friterie-william.be","password":"motdepasse1","accept_terms":true,"company":"Friterie William","device":"script"}'
Réponse 201 Created :
{
"token": "1|AbCdEfGhIjKlMnOpQrStUvWxYz0123456789abcd",
"user": {
"id": 42,
"name": "William Dupont",
"email": "william@friterie-william.be",
"email_verified": false,
"locale": "fr",
"phone": null,
"company": "Friterie William",
"vat_number": null,
"address": null,
"zip": null,
"city": null,
"country": null,
"marketing_opt_in": false,
"is_demo": false,
"plan": "free",
"limits": { "name": "Gratuit", "formula": 1, "monthly": 0, "yearly": 0, "stripe_monthly": null, "stripe_yearly": null, "sites": 1, "pages": 5, "custom_domain": false, "branding": true, "ai_generations": 3, "storage_mb": 200, "novadesko": false },
"sites_count": 0
}
}
L'objet user est décrit en détail sur la page Compte. Notez qu'ici il n'est pas enveloppé dans data.
Erreurs : 422 (e-mail déjà utilisé, mot de passe trop court, conditions non acceptées...), 429.
Connexion#
POST /v1/auth/login · Public · 10 requêtes par minute
| Paramètre | Type | Obligatoire | Règles |
|---|---|---|---|
email |
chaîne | oui | e-mail valide (la casse est ignorée) |
password |
chaîne | oui | |
device |
chaîne | non | 60 caractères max. |
curl -X POST https://api.monsiteo.com/v1/auth/login \
-H "Accept: application/json" -H "Content-Type: application/json" \
-d '{"email":"william@friterie-william.be","password":"motdepasse1","device":"script"}'
Réponse 200 : même forme que l'inscription (token + user).
Erreurs, toujours en 422 sur le champ email :
{ "message": "E-mail ou mot de passe incorrect.", "errors": { "email": ["E-mail ou mot de passe incorrect."] } }
{ "message": "Ce compte est suspendu. Contactez hello@monsiteo.com.", "errors": { "email": ["Ce compte est suspendu. Contactez hello@monsiteo.com."] } }
Bon à savoir Un compte créé via une connexion externe peut ne pas avoir de mot de passe : la connexion par mot de passe échoue alors avec le même message générique. Utilisez « mot de passe oublié » pour en définir un.
Échanger un code de connexion#
POST /v1/auth/exchange · Public · 10 requêtes par minute
Certaines actions ouvrent l'application déjà connectée : l'inscription depuis monsiteo.com, ou la connexion d'un membre de l'équipe Monsiteo « en tant que » client depuis le back-office. Elles produisent un code à usage unique de 64 caractères, valable 5 minutes, transmis dans l'URL https://app.monsiteo.com/#/auth/code/<code>. L'application l'échange contre un jeton.
| Paramètre | Type | Obligatoire | Règles |
|---|---|---|---|
code |
chaîne | oui | exactement 64 caractères |
curl -X POST https://api.monsiteo.com/v1/auth/exchange \
-H "Accept: application/json" -H "Content-Type: application/json" \
-d '{"code":"Zq3...64 caractères...Yt"}'
Réponse 200 :
{
"token": "7|Hj8kLmNoPqRsTuVwXyZa0123456789AbCdEfGhIj",
"user": { "id": 42, "name": "William Dupont", "email": "william@friterie-william.be", "plan": "site" },
"impersonated": false
}
(objet user abrégé ici). Quand impersonated vaut true, le jeton appartient au client mais a été demandé par un administrateur : il expire après 2 heures et l'action est inscrite dans le journal d'activité.
Erreur 422 si le code est inconnu, déjà utilisé ou expiré :
{ "message": "Ce lien de connexion a expiré. Reconnectez-vous.", "errors": { "code": ["Ce lien de connexion a expiré. Reconnectez-vous."] } }
Mot de passe oublié#
POST /v1/auth/forgot-password · Public · 10 requêtes par minute
Envoie un e-mail de réinitialisation. La réponse est identique que le compte existe ou non, pour ne pas révéler quelles adresses sont inscrites.
| Paramètre | Type | Obligatoire | Règles |
|---|---|---|---|
email |
chaîne | oui | e-mail valide |
curl -X POST https://api.monsiteo.com/v1/auth/forgot-password \
-H "Accept: application/json" -H "Content-Type: application/json" \
-d '{"email":"william@friterie-william.be"}'
{ "message": "Si un compte existe pour cette adresse, un e-mail vient de partir." }
Le lien de l'e-mail mène à la page de réinitialisation de monsiteo.com (la réinitialisation elle-même ne passe pas par l'API).
Déconnexion#
POST /v1/auth/logout · Jeton
Révoque uniquement le jeton utilisé pour la requête. Les autres appareils restent connectés.
curl -X POST https://api.monsiteo.com/v1/auth/logout \
-H "Accept: application/json" \
-H "Authorization: Bearer 1|AbCdEfGhIjKlMnOpQrStUvWxYz0123456789abcd"
{ "ok": true }
Pour déconnecter tous les appareils, changez de mot de passe (Compte) : tous les autres jetons sont révoqués.
Mis à jour le 26 octobre 2026