Download OpenAPI specification:
Authentification commune à toutes les APIs de la plateforme (Hubdoc,
Loctavia, Octopia). Un seul serveur OAuth2 (Doorkeeper) délivre les
tokens ; chaque produit consomme ensuite le même Bearer.
| Cas d'usage | Flow | Endpoints |
|---|---|---|
| Application frontend / tierce | Authorization code | GET /oauth/authorize puis POST /oauth/token |
| Application de confiance (mobile, tests) | Password | POST /oauth/token |
CLI hubdoc (sans navigateur) |
Device flow (RFC 8628 simplifié) | POST /api/v1/cli/auth/device puis polling |
| SSO Edifice (JWT) | Token exchange | POST /api/v1/oauth/token_exchange |
| Intégrations serveur | Personal Access Token (PAT) | généré depuis l'interface ou via le device flow CLI |
Les scopes sont appliqués par verbe HTTP sur toutes les APIs :
read : requêtes GET uniquement (scope par défaut des PAT)write : inclut les mutations (POST, PATCH, PUT, DELETE)admin : accès administratifUn token sans le scope requis reçoit un 403 enveloppé ; un token
expiré ou révoqué reçoit un 401.
Bearer, chaque requête (hors
GET /loctavia/api/v1/mandataires) exige l'en-tête X-Mandataire-Id
(tenant). Voir la doc Loctavia.X-Connector-Key), sans OAuth2. Voir la doc Octopia.Obtenir un token d'accès OAuth2 en utilisant différents flows :
| grant_type required | string Enum: "password" "authorization_code" "refresh_token" Type d'autorisation OAuth2 |
| client_id required | string Identifiant client OAuth2 |
| client_secret required | string Secret client OAuth2 |
| username | string Adresse email de l'utilisateur (requis pour grant_type=password) |
| password | string Mot de passe de l'utilisateur (requis pour grant_type=password) |
| code | string Code d'autorisation (requis pour grant_type=authorization_code) |
| redirect_uri | string <uri> URI de redirection (requis pour grant_type=authorization_code) |
| refresh_token | string Jeton de rafraîchissement (requis pour grant_type=refresh_token) |
| scope | string Portée des permissions demandées (optionnelle) |
{- "access_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
- "token_type": "Bearer",
- "expires_in": 7200,
- "refresh_token": "def50200cde4321cfa9...",
- "scope": "read write",
- "created_at": 1640995200
}Révoque un token d'accès ou un refresh token OAuth2. Conforme à RFC 7009 (OAuth 2.0 Token Revocation).
Une fois révoqué, le token ne peut plus être utilisé pour accéder aux ressources protégées.
| token required | string Token à révoquer (access_token ou refresh_token) |
| token_type_hint | string Enum: "access_token" "refresh_token" Indice sur le type de token (optionnel, améliore les performances) |
| client_id required | string Identifiant client OAuth2 |
| client_secret required | string Secret client OAuth2 |
{- "message": "Token revoked successfully"
}Permet à Edifice d'authentifier ses utilisateurs dans Corex via un échange de token JWT.
Flow:
JWT Claims attendus:
sub - Identifiant utilisateur Edificeemail - Email de l'utilisateur (requis)first_name - Prénomlast_name - Nomiss - Doit être "edifice"aud - Doit être "corex"exp - Timestamp d'expiration| grant_type required | string Value: "urn:ietf:params:oauth:grant-type:jwt-bearer" Type de grant OAuth2 pour l'échange JWT (RFC 7523) |
| assertion required | string JWT signé par Edifice contenant les informations utilisateur |
| client_id required | string Identifiant de l'application OAuth2 |
| client_secret required | string Secret de l'application OAuth2 |
{- "access_token": "abc123def456...",
- "token_type": "Bearer",
- "expires_in": 7200,
- "created_at": 1705410000
}Endpoints du device flow CLI (RFC 8628). Permettent au binaire
hubdoc (cf sinoia/hubdoc-tools) de s'authentifier sans
manipulation manuelle de tokens : hubdoc login ouvre le
navigateur, l'user confirme, le CLI ramasse son PAT
automatiquement.
Initie une session d'authentification "device flow" pour le CLI Hubdoc. Endpoint public — pas d'auth Doorkeeper requise.
Le flow complet :
device_code (secret) + user_code
(lisible humain, format XXXX-XXXX) + verification_uri.verification_uri_complete dans son navigateur./cli/activation./api/v1/cli/auth/device/poll jusqu'à approval.access_token (un Personal
Access Token utilisable comme Bearer sur toute l'API).Rate-limited à 20 appels par 5 minutes (par IP).
{- "device_code": "8a3f2e7b9c1d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0c1d2e3f4a5b6c7d8e9f",
- "user_code": "WDJB-MJHT",
- "expires_in": 600,
- "interval": 5
}Polling endpoint du device flow. Le CLI appelle ce endpoint avec
son device_code jusqu'à recevoir un access_token (succès) ou
une erreur définitive.
Codes d'erreur (compatibles RFC 6749 §5.2) :
authorization_pending (400) : pas encore approuvé, retryexpired_token (400) : device_code expiré ou inconnu → recommencer le flowaccess_denied (400) : session révoquée entre l'approval et le pickupalready_consumed (410) : token déjà ramassé par un précédent poll → NE PAS retry| device_code required | string Le secret reçu lors du |
{- "device_code": "string"
}{- "access_token": "string",
- "token_type": "Bearer",
- "expires_in": 0,
- "user": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "email_address": "string",
- "first_name": "string",
- "last_name": "string"
}
}