L'API DSP2 de L by LCL Pro est composée de 3 APIs distinctes.
API 1 — TPP Registration
| Méthode | Endpoint | Rôle |
POST | /psd2/register | Créer un client OAuth2 |
GET | /psd2/register/{clientId} | Consulter la configuration d'un client |
PATCH | /psd2/register/{clientId} | Mise à jour partielle |
DELETE | /psd2/register/{clientId} | Supprimer le client |
API 2 — OAuth2 / OpenID Connect
| Méthode | Endpoint | Rôle |
GET | /auth | Initier l'authentification PSU (login + SCA + consentement) |
POST | /token | Échanger le code d'autorisation contre des tokens |
POST | /token | Rafraîchir les tokens (grant_type=refresh_token, même URL) |
POST | /revoke | Révoquer un access ou refresh token |
API 3 — AISP
| Méthode | Endpoint | Scope requis |
GET | /psd2/aisp/accounts | aisp |
GET | /psd2/aisp/accounts/{accountResourceId}/balances | aisp |
GET | /psd2/aisp/accounts/{accountResourceId}/transactions | aisp (+ extended_transaction_history pour l'historique étendu) |
GET | /psd2/aisp/trusted-beneficiaries | aisp |
GET | /psd2/aisp/end-user-identity | aisp |
Endpoints utilitaires
| Méthode | Endpoint | Rôle |
GET | /psd2/health | Healthcheck du service |
GET | /psd2/docs/openapi.json (.yaml) | Spécification OpenAPI complète |
GET | /psd2/docs/modules | Liste des modules (tpp-registration, aisp) |
GET | /psd2/docs/modules/{moduleName}/openapi.json (.yaml) | Spécification par module |
Particularités
Nous avons 2 hosts différents pour traiter les endpoints sous mTLS et sous HTTPS
Toutes les requêtes sont en mTLS, sauf le GET /auth (l'URL sur laquelle vous redirigez le navigateur du PSU). Comme /auth est ouvert dans un navigateur, il ne peut pas être en mTLS : il est donc servi par un host différent de tous les autres endpoints.
| Host mTLS (tous les endpoints sauf /auth) | Host GET /auth (navigateur, sans mTLS) |
| Production | https://psd-pro.lcl.fr | https://auth.pro.lcl.fr |
| Sandbox | https://sandbox-psd-pro.lcl.fr | https://auth.pro.lcl.fr |
Les paths OAuth ne sont pas à la racine du host
Étant donné notre usage de Keycloak pour gérer en partie les flows OAuth, les endpoints OAuth ne sont pas à la racine du host : ils portent le préfixe complet du realm Keycloak.
C'est donc https://psd-pro.lcl.fr/realms/epro-psd2/protocol/openid-connect/token — et non https://psd-pro.lcl.fr/token.
Point de vigilance, les realms sont différents pour la production et la sandbox :
epro-psd2 (prod)
epro-psd2-sandbox (sandbox)
Base URLs complètes par endpoint
| API / Endpoint | mTLS | URL Production | URL Sandbox |
| TPP Registration | ✅ | https://psd-pro.lcl.fr/psd2/register | https://sandbox-psd-pro.lcl.fr/psd2/register |
| AISP | ✅ | https://psd-pro.lcl.fr/psd2/aisp | https://sandbox-psd-pro.lcl.fr/psd2/aisp |
OAuth GET /auth | ❌ non | https://auth.pro.lcl.fr/realms/epro-psd2/protocol/openid-connect/auth | https://auth.pro.lcl.fr/realms/epro-psd2-sandbox/protocol/openid-connect/auth |
OAuth POST /token | ✅ | https://psd-pro.lcl.fr/realms/epro-psd2/protocol/openid-connect/token | https://sandbox-psd-pro.lcl.fr/realms/epro-psd2-sandbox/protocol/openid-connect/token |
OAuth POST /revoke | ✅ | https://psd-pro.lcl.fr/realms/epro-psd2/protocol/openid-connect/revoke | https://sandbox-psd-pro.lcl.fr/realms/epro-psd2-sandbox/protocol/openid-connect/revoke |
Le POST /token sert aussi bien pour grant_type=authorization_code que pour refresh_token : même URL, seul le body change.