Skip to content

Internal API — Service-to-Service

Endpoints réservés aux plateformes de confiance (dema1n, inspire, jobready). Protégés par API key (X-API-KEY header).

Authentification

Chaque plateforme dispose d'une clé dédiée dans les variables d'environnement (DEMA1N_API_KEY, INSPIRE_API_KEY, JOBREADY_API_KEY, A1CONNECT_API_KEY). La clé est validée par ApiKeyAuthGuard.

Absence ou clé invalide → 401 Unauthorized.


Endpoints

GET /api/v1/auth/internal/user/:email

Vérifie si un email est enregistré dans A1C.

Requête

GET /api/v1/auth/internal/user/jean.dupont@example.com
X-API-KEY: <PLATFORM_API_KEY>

Réponses

Status Corps Condition
200 { "exists": false } Email inconnu
200 { "exists": true } Email trouvé
400 { "message": "Invalid email format" } Format email invalide (regex côté controller)
401 API key absente ou invalide

POST /api/v1/auth/internal/connect

Crée un utilisateur s'il n'existe pas, ou le connecte s'il existe déjà. Retourne un sessionJwt standard utilisable par la plateforme appelante.

Requête

POST /api/v1/auth/internal/connect
X-API-KEY: <PLATFORM_API_KEY>

{
  "email": "jean.dupont@example.com",
  "firstname": "Jean",
  "lastname": "Dupont",
  "password": "MotDePasse1!",
  "origin": "dema1n"
}

Contraintes du champ password (validées par DTO) : - Minimum 8 caractères - Au moins une minuscule, une majuscule, un chiffre et un caractère spécial

Réponses

Status Corps Condition
201 { "sessionJwt": "eyJ...", "userId": "uuid", "created": true } User créé (inexistant)
201 { "sessionJwt": "eyJ...", "userId": "uuid", "created": false } User connecté (existant, bon mot de passe)
400 { "message": [...] } Body invalide — email mal formé, champ manquant, mot de passe trop court ou ne respectant pas le pattern
400 { "message": "Adresse email invalide ou non délivrable (<reason>)." } Email non délivrable selon Emailable (uniquement à la création)
401 User existant mais mot de passe incorrect
401 API key absente ou invalide

Comportement à la création : cguValidate est positionné à now(). La vérification de délivrabilité email via Emailable est effectuée avant la création — si EMAILABLE_API_KEY est vide, la vérification est désactivée et l'email est accepté.

Comportement à la connexion : si l'utilisateur a passwordEncoded = false (mot de passe non encore migré vers bcrypt), le mot de passe est vérifié auprès de la plateforme d'origine via son API interne, puis hashé et stocké en cas de succès.