Référence API
Documentation REST API complète pour le service d'authentification Authon. Toutes les requêtes doivent inclure une clé API dans l'en-tête x-api-key ou un jeton Bearer dans Authorization.
URL de base
https://api.authon.devAuthentification
Authon utilise deux types de clés API selon que la requête provient d'un navigateur ou d'un serveur. Passez la clé dans l'en-tête x-api-key ou comme jeton Bearer.
| Type de clé | Préfixe | Utilisation |
|---|---|---|
| Publiable | pk_live_ / pk_test_ | Navigateur / SDK client. Peut être exposée. |
| Secrète | sk_live_ / sk_test_ | Serveur uniquement. Accès administrateur complet. Ne jamais exposer. |
| Bearer | eyJhbGci... | Jeton d'accès utilisateur après connexion. TTL de 15 minutes. |
# Publishable key — client-side requests
curl https://api.authon.dev/v1/auth/providers \
-H "x-api-key: pk_live_your_publishable_key"
# Token verification is public; no x-api-key is required
curl https://api.authon.dev/v1/auth/token/verify \
-H "Authorization: Bearer eyJhbGci..."
# Bearer access token — user requests
curl https://api.authon.dev/v1/auth/me \
-H "Authorization: Bearer eyJhbGci..."Points de terminaison d'authentification
/v1/auth/signupInscription
Enregistrez un nouvel utilisateur avec un e-mail et un mot de passe. Retourne des jetons en cas de succès.
x-api-key: pk_live_...{
"email": "user@example.com",
"password": "securepassword",
"displayName": "Jane Doe" // optional
}{
"accessToken": "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9...",
"refreshToken": "rt_8f4a2b1c...",
"expiresIn": 900,
"user": {
"id": "usr_abc123",
"projectId": "proj_xyz",
"email": "user@example.com",
"displayName": "Jane Doe",
"avatarUrl": null,
"emailVerified": false,
"isBanned": false,
"publicMetadata": null,
"signInCount": 0,
"createdAt": "2026-01-15T10:30:00.000Z",
"updatedAt": "2026-01-15T10:30:00.000Z"
}
}/v1/auth/signinConnexion
Authentifiez un utilisateur existant avec un e-mail et un mot de passe.
x-api-key: pk_live_...{
"email": "user@example.com",
"password": "securepassword"
}{
"accessToken": "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9...",
"refreshToken": "rt_8f4a2b1c...",
"expiresIn": 900,
"user": { ... }
}/v1/auth/signoutDéconnexion
Révoque la session courante et invalide le jeton de rafraîchissement. Nécessite un jeton d'accès Bearer.
Authorization: Bearer <access_token>{
"success": true
}/v1/auth/token/refreshRafraîchissement du jeton
Échangez un jeton de rafraîchissement contre un nouveau jeton d'accès. Les jetons d'accès expirent après 15 minutes.
x-api-key: pk_live_...{
"refreshToken": "rt_8f4a2b1c..."
}{
"accessToken": "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9...",
"expiresIn": 900
}/v1/auth/token/verifyVérification du jeton
Vérifiez un jeton d'accès et retournez l'utilisateur associé. Utilisé par votre serveur pour authentifier les requêtes entrantes.
Authorization: Bearer <access_token>{
"valid": true,
"payload": {
"sub": "usr_abc123",
"projectId": "proj_xyz",
"type": "access",
"iat": 1767225600,
"exp": 1767226500
},
"user": {
"id": "usr_abc123",
"email": "user@example.com",
"displayName": "Jane Doe",
"avatarUrl": null,
"emailVerified": true
}
}/v1/auth/meObtenir l'utilisateur actuel
Retournez le profil de l'utilisateur actuellement authentifié.
Authorization: Bearer <access_token>{
"id": "usr_abc123",
"projectId": "proj_xyz",
"email": "user@example.com",
"displayName": "Jane Doe",
"avatarUrl": "https:0
6: null,
7: true,
8: false,
9: false,
10: {},
11: "2026-01-15T10:30:00.000Z",
"signInCount": 42,
"createdAt": "2026-01-01T00:00:00.000Z",
"updatedAt": "2026-01-15T10:30:00.000Z"
}/v1/auth/meMettre à jour l'utilisateur actuel
Mettez à jour les champs de profil de l'utilisateur actuellement authentifié. Seuls les champs fournis sont mis à jour.
Authorization: Bearer <access_token>{
"displayName": "Jane Smith", // optional
"avatarUrl": "https://example.com/avatar.png" // optional
}{
"id": "usr_abc123",
"displayName": "Jane Smith",
"avatarUrl": "https://example.com/avatar.png",
...
}Points de terminaison OAuth
/v1/auth/providersLister les fournisseurs
Retournez la liste des fournisseurs OAuth activés pour le projet.
x-api-key: pk_live_...{
"providers": ["google", "github", "kakao"]
}/v1/auth/oauth/:provider/urlObtenir l'URL OAuth
Générez une URL d'autorisation pour le fournisseur OAuth donné. Utilisez-la pour rediriger l'utilisateur ou ouvrir un popup.
x-api-key: pk_live_...{
"url": "https://accounts.google.com/o/oauth2/v2/auth?client_id=..."
}/v1/auth/oauth/callbackRappel OAuth
Échangez un code d'autorisation OAuth contre des jetons Authon. Appelé par le SDK après le retour du popup.
x-api-key: pk_live_...{
"provider": "google",
"code": "4/0AX4XfWh...",
"state": "random_state_string",
"codeVerifier": "pkce_verifier" // required if PKCE was used
}{
"accessToken": "eyJhbGci...",
"refreshToken": "rt_...",
"expiresIn": 900,
"user": { ... }
}Image de marque
/v1/auth/brandingObtenir l'image de marque
Retournez la configuration de l'image de marque pour le projet. Utilisé par le SDK JS pour styliser le modal de connexion.
x-api-key: pk_live_...{
"brandName": "Acme Corp",
"primaryColorStart": "#7c3aed",
"primaryColorEnd": "#4f46e5",
"lightBg": "#ffffff",
"lightText": "#111827",
"darkBg": "#0f172a",
"darkText": "#f1f5f9",
"borderRadius": 12,
"showEmailPassword": true,
"showDivider": true,
"termsUrl": "https:0
13: "https://acme.com/privacy",
"logoDataUrl": "data:image/png;base64,..."
}Codes d'erreur
Toutes les réponses d'erreur suivent une structure cohérente avec un code de statut HTTP et un corps JSON :
{
"statusCode": 401,
"error": "Unauthorized",
"message": "Invalid or expired access token"
}| Statut | Erreur | Description |
|---|---|---|
| 400 | Bad Request | Corps de requête manquant ou malformé |
| 401 | Unauthorized | Clé API / jeton manquant, invalide ou expiré |
| 403 | Forbidden | La clé est valide mais ne dispose pas des permissions pour cette action |
| 404 | Not Found | La ressource demandée n'existe pas |
| 409 | Conflict | L'adresse e-mail est déjà enregistrée |
| 422 | Unprocessable Entity | Validation échouée — vérifiez les exigences des champs |
| 429 | Too Many Requests | Limite de débit dépassée — réessayez après le délai indiqué |
| 500 | Internal Server Error | Erreur inattendue côté serveur |