Aller au contenu

Identité et espaces

42 routes. Chemins relatifs à https://api.nexus-engine.eu/api/v1.

GET /me/licence session de l’application seulement

Ma licence Nexus (par personne, valable dans tous mes espaces) : état calculé, droits, capacité, palier, échéance, paiements, et ce que l'espace courant garde.

RéponseLicenceDto
NoteUn compte dont l'adresse n'est pas prouvée (MemberDto.emailUnproven : un administrateur l'a tapée, ou a fixé le mot de passe) n'est pas servi par la licence de l'adresse : la réponse porte adresseAConfirmer, sans les faits ni les paiements de cette licence, et les gestes /me/licence/* répondent 403 jusqu'au lien reçu dans la boîte (POST /me/adresse/confirmer). La facturation de son propre espace le sert comme tout membre.
POST /me/licence/souscrire session de l’application seulement

Ouvre la page de paiement Stripe de ma licence — formule Essentiel (9 € HT/mois, 2 Go, sans palier) ou Pro (30 € HT/mois, 20 Go, palier de stockage), TVA 20 % en sus ; rien n'est servi avant l'encaissement.

Corpspalier (index de PALIERS_STOCKAGE, défaut 0 ; 0 seulement en Essentiel), formule (ESSENTIEL | PRO, défaut PRO)
POST /me/licence/formule session de l’application seulement

Change de formule : Essentiel → Pro est facturé tout de suite au prorata ; Pro → Essentiel prend effet au renouvellement (le palier tombe avec).

Corpsformule (ESSENTIEL | PRO)
POST /me/licence/palier session de l’application seulement

Change le palier de stockage : une hausse est facturée tout de suite, une baisse prend effet au renouvellement.

Corpspalier
POST /me/licence/portail session de l’application seulement

Ouvre le portail Stripe (carte, factures, résiliation).

POST /me/licence/resilier session de l’application seulement

Résilie ma licence au terme payé (servie jusque-là).

POST /me/licence/reprendre session de l’application seulement

Annule une résiliation demandée.

POST /auth/login sans authentification

Ouvre une session par cookie (email + mot de passe ; second temps avec totpCode et challenge quand le second facteur est actif).

Corpsemail, password, totpCode, challenge
RéponseMemberDto, ou LoginChallengeDto { needsTotp: true, challenge }
NoteUn client d’API n’en a pas besoin : la clé remplace le cookie.
POST /auth/accept-invite sans authentification

Active un compte à partir d’un code d’invitation.

Corpstoken (le code ou le lien reçu), name, password (10 caractères au moins)
RéponseMemberDto
GET /auth/inscription sans authentification

L’inscription libre est-elle ouverte sur ce serveur ?

RéponseInscriptionEtatDto { ouverte }
NoteFermée par NEXUS_INSCRIPTION_LIBRE=0 : l’invitation redevient la seule voie, et l’écran ne propose plus « Créer un compte ».
POST /auth/inscription sans authentification

Demande la création d’un compte (inscription libre, sans clé ni invitation) : un code à six chiffres part par courriel.

Corpsemail, password (10 caractères au moins), name (facultatif)
RéponseInscriptionDemandeeDto { email, expireDansS } — 202
NoteRien n’est créé à ce temps-là. La réponse est la MÊME que l’adresse ait déjà un compte ou non : c’est le courriel qui le dit, à la seule personne qui le lit. Dix demandes par heure et par adresse IP, cinq codes par heure et par adresse ; une nouvelle demande remplace la précédente. 503 si le courriel n’a pas pu partir (la même phrase dans les deux cas).
POST /auth/inscription/confirmer sans authentification

Fait naître le compte avec le code reçu : une entreprise à soi (nom provisoire), le rôle de propriétaire, une session.

Corpsemail, code (6 chiffres)
RéponseMemberDto
NoteLe code vaut quinze minutes, une fois, et cinq essais faux le brûlent. L’adresse PROUVÉE est ce qui rend l’inscription sûre : une identité Nexus se relie par l’adresse. 409 si un compte est né entre-temps pour cette adresse. Le compte reçoit ses premiers pas EN COURS.
POST /auth/logout sans authentification

Ferme la session ouverte par cookie (sans effet sur une clé).

POST /auth/password-reset sans authentification

Demande un lien de réinitialisation par courriel. Répond toujours 204.

Corpsemail
POST /auth/password-reset/confirm sans authentification

Choisit un nouveau mot de passe avec le jeton reçu par courriel.

Corpstoken, newPassword
POST /auth/password-handoff/reveal sans authentification

Révèle une fois le mot de passe fixé par un administrateur (lien reçu par courriel).

Corpstoken
Réponse{ email, password }
GET /auth/me

Qui je suis : le membre que la clé ou le cookie représente.

RéponseMemberDto
GET /me/workspaces

Les entreprises où mon adresse a un compte.

RéponseWorkspaceDto[]
NoteLe compte courant, plus les comptes de la même adresse qui sont PROUVÉS : un compte dont l’adresse ou le mot de passe ont été tapés par un administrateur (MemberDto.emailUnproven) ne voit que lui-même, et n’apparaît chez personne. Une clé est liée à UN compte, donc à une entreprise : en changer se fait dans l’application. Le logo n’y est pas — ni en adresse, que la fenêtre ne chargerait pas, ni en octets, qui pèseraient jusqu’à deux méga-octets par espace dans une liste relue à chaque bascule : il se demande ligne par ligne.
GET /me/invitations

Les invitations qui attendent mon adresse : entreprise, rôle, qui a invité, échéance.

RéponseInvitationRecueDto[]
NoteJamais le code : rejoindre passe par le code reçu par courriel et POST /auth/accept-invite. Seulement ce que cette acceptation accepterait — ouverte, non expirée, entreprise non suspendue, compte invité qui attend encore —, une par entreprise.
POST /me/workspaces/:memberId session de l’application seulement

Bascule la session vers un autre de mes espaces.

CorpstotpCode, challenge (si le compte visé porte un second facteur)
RéponseMemberDto
Note404 quand le compte visé n’est pas la même personne : autre adresse, ou adresse non prouvée de part ou d’autre (changée ou mot de passe fixé par un administrateur, tant que la boîte n’a pas répondu).
POST /me/adresse/confirmer session de l’application seulement

Envoie à l’adresse du compte courant le lien qui la prouve (sept jours) : la personne y choisit un mot de passe que personne d’autre ne connaît, et le compte rejoint ses autres espaces.

Réponse202 { courriel: envoye | non-envoye } ; 204 si l’adresse est déjà prouvée
GET /me/portails session de l’application seulement

Les portails clients que des agences ont ouverts à MON adresse, à ouvrir depuis Nexus sans second mot de passe (vide quand l’adresse a été changée par un administrateur et n’est pas reprouvée).

RéponseMesPortailsDto
POST /me/portails/:contactId/passage session de l’application seulement

Remet un passage à usage unique (deux minutes) vers un de mes portails clients ; la fenêtre du portail l’échange par POST /portail/passage. 404 pour tout portail qui n’est pas à mon adresse.

RéponsePortailPassageDto
POST /me/workspaces session de l’application seulement

Crée une entreprise neuve dont je suis le propriétaire.

Corpsname
RéponseMemberDto
GET /me/premiers-pas

Mes premiers pas : la progression du parcours guidé d’un compte neuf.

RéponsePremiersPasDto { premiersPas }
Note`premiersPas: null` pour tout compte d’avant ce parcours : on ne l’impose pas à un compte déjà actif.
PUT /me/premiers-pas

Écrit ma progression (étape, écrans faits ou reportés, premier projet).

Corpsetat (EN_COURS | TERMINE), etape (OUTILS | QUESTION | PERIMETRE | ANALYSE | PLAN | MISE_EN_PLACE, ou ESPACE | CODE | PROJET pour une application d’avant), faites[], reportees[], projetId, visiteBureau (A_VOIR | VUE, facultatif)
RéponsePremiersPasDto
NoteLa version et les dates sont posées par le serveur. Un projet d’une autre entreprise est simplement oublié.
POST /me/mise-en-place/connus session de l’application seulement

Ce que l’espace connaît déjà de ce que le poste a trouvé : les dépôts portés par un projet de l’entreprise qui ne m’est pas confié, et mes discussions déjà dans Nexus.

Corpsdepots[] (1 000 au plus), discussions[] : { engine, id } (5 000 au plus)
RéponseConnusDto { depotsNonConfies[], discussions[] : { engine, id, projetId, projetNom } }
NoteUne lecture, mais réservée à une session : pour un agent ou une clé, ce serait un oracle sur les dépôts de l’entreprise. Un projet qui ne m’est pas confié n’est jamais nommé (`projetNom: null`, et pas même listé pour un dépôt).
DELETE /me/mise-en-place/projets/:id session de l’application seulement

Défait une mise en place : retire un projet qui n’a reçu aucun travail, hors les discussions que je viens d’y importer.

Réponse{ ok, discussions, sitesConserves, secretsATourner }
Note409 `TRAVAIL` dès qu’il y a autre chose : une tâche, une création, une discussion d’un collègue, une discussion conduite ici ou reprise. Un développeur n’efface pas un projet partagé (403 `ROLE`).
GET /me/totp session de l’application seulement

État du second facteur de mon compte.

RéponseTotpStateDto
POST /me/totp/enroll session de l’application seulement

Commence l’enrôlement du second facteur (graine et codes de secours, montrés une fois).

RéponseTotpEnrollDto
POST /me/totp/confirm session de l’application seulement

Active le second facteur avec un premier code valide.

Corpscode (6 chiffres)
RéponseTotpStateDto
POST /me/totp/disable session de l’application seulement

Désactive le second facteur, contre le mot de passe.

Corpspassword
RéponseTotpStateDto
GET /me/devices session de l’application seulement

Mes sessions ouvertes (appareils).

RéponseDeviceDto[]
DELETE /me/devices/:id session de l’application seulement

Ferme une session ouverte.

POST /me/devices/revoke-all session de l’application seulement

Ferme toutes mes sessions sauf celle-ci.

POST /postes/annonce application de bureau seulement

Le poste signale qu’il est allumé, et ce qui y tourne.

Corpsversion, nom (nom d’hôte de la machine), pilotable, projetsOuverts (liste), sessions (liste)
NoteAppelée toutes les 25 s par l’application de bureau. Rien n’est persisté : le registre vit en mémoire et s’oublie après 80 s sans annonce. Le nom d’hôte annoncé devient le libellé du poste ; sans lui, « Nexus <version> sur <système> » (en-tête x-nexus-plateforme).
GET /postes session de l’application seulement

Mes machines reliées, et les sessions d’agent qui y tournent.

RéponsePosteDto[]
NoteJamais par clé d’API. Un agent du poste (l’assistant, un agent de projet) la lit sans clic (7 novembre 2026), comme il envoie l’ordre : elle ne rend que les machines de la personne.
POST /postes/:deviceId/ordre session de l’application seulement

Fait exécuter un ordre par une de mes machines (télécommande).

Corpscanal (liste blanche CANAUX_DISTANTS), projectId, charge
Réponse{ ok, resultat }
NoteLe relais attend la réponse du poste (20 s max) et la rend telle quelle. Jamais par clé d’API : une clé lit des données, elle ne conduit pas une machine. Un agent du poste (l’assistant, un agent de projet) peut l’envoyer à un de MES postes, sans clic (6 novembre 2026) : la route ne joint que les appareils de la personne. Un poste éteint refuse tout de suite plutôt que de mettre en file.
POST /postes/reponse application de bureau seulement

Le poste rend le résultat d’un ordre.

CorpsordreId, ok, resultat, erreur
GET /projects/:id/postes session de l’application seulement

Les machines allumées des membres de ce projet, et celles qui partagent leur dossier.

RéponsePosteDuProjetDto[]
NoteAucune ne dit où vivent ses dossiers. Un poste qui refuse le partage y figure avec partage: false, pour que son absence ne se lise pas « cette personne n’est pas connectée ».
POST /projects/:id/postes/:deviceId/ordre session de l’application seulement

Lit ou écrit le dossier de ce projet sur la machine d’un membre du projet.

Corpscanal (liste blanche CANAUX_POSTE_PROJET : fsx:* et les lectures du dépôt), charge
Réponse{ ok, resultat }
NoteJamais l’agent du poste visé (C4) : il tourne sur le compte Claude de son propriétaire. La racine est écrasée par nexus-poste://<appareil> et remplacée par le poste lui-même — un ordre ne nomme jamais un dossier (C2). Ni clé d’API, ni agent.