Notifications
30 routes. Chemins relatifs à https://api.nexus-engine.eu/api/v1.
GET
/courriel-tiers
L’état de l’envoi « <Entreprise> via Nexus » à un tiers : ouvert ou non, plafonds, ce qu’il reste.
Réponse{ ouvert, message, plafonds, envoyes, reste, limites }
NoteÉteint par défaut : `ouvert` est faux tant que l’exploitant ne l’a pas ouvert sur ce serveur.
POST
/courriel-tiers
session de l’application seulement
Envoie un message écrit par la personne à un tiers, expédié « <Entreprise> via Nexus », réponse dirigée vers elle.
Corpsa (1 à 5 adresses), sujet, texte, pieces?
Réponse{ id, accepte, de, repondreA, a, reste }
NoteDu texte, mis en page par Nexus, sans pixel de suivi ; plafonné par espace et par personne sur 24 heures. 503 `FERME` quand le service n’est pas ouvert.
GET
/applications/:id/courriel
L’état de l’envoi « via Nexus » pour une application : ouvert ou non et pourquoi, plafonds, reste, refus du relais.
Réponse{ ouvert, raison, message, plafonds, envoyes, reste, refus24h, limites }
NoteÉteint par défaut. `raison` : NON_DECLARE (manifeste sans `messagerie.courriel`), ETEINT, ADRESSE_ABSENTE, TROP_DE_REFUS.
POST
/applications/:id/courriel
session de l’application seulement
Envoie un message à un tiers pour une application, expédié « <Entreprise> via Nexus » (repli de `nexus.messagerie.expedier`).
Corpsa (1 à 5 adresses), sujet, texte, pieces?, sansPersonne?, suivi?
Réponse{ id, accepte, voie: "nexus", de, repondreA, a, reste, suivi }
NoteAppelée par le poste après sa garde ; fermée au geste `agence` des applications. `sansPersonne` compte contre le plafond des envois sans personne de l’espace. 503 quand le service n’est pas ouvert.
GET
/applications/:id/courriel/:courrielId
Le suivi d’un message parti par cette application : état au relais et, si le suivi a été demandé, ouvertures.
Réponse{ id, etat, a, sujet, creeLe, partiLe, erreur, suivi, ouvert, ouvertLe, ouvertures, note }
NoteIndicatif : « parti » = accepté par le relais ; une ouverture est un pixel. `ouvert: null` quand le suivi n’a pas été demandé. Les clics ne sont pas suivis.
GET
/me/push
session de l’application seulement
De quoi abonner cet appareil aux alertes poussées.
Réponse{ disponible, cle, appareils }
Note`disponible` est faux quand le serveur n’a pas de clés VAPID : les alertes restent alors dans l’application.
POST
/me/push
session de l’application seulement
Abonne cet appareil aux alertes poussées.
Corpsendpoint, p256dh, auth
NoteL’abonnement est fabriqué par le navigateur. `endpoint` est unique : se réabonner remplace, jamais n’empile.
POST
/me/push/oubli
session de l’application seulement
Désabonne cet appareil des alertes poussées.
GET
/mobile/config
sans authentification
Ce que l’application mobile doit savoir avant de se connecter.
RéponseConfigMobileDto : { apiMobile, serveur, versionMinimale, fournisseursPush }
NoteUne application publiée ne se met pas à jour d’elle-même : `versionMinimale` (MOBILE_VERSION_MIN) lui dit de le demander.
POST
/me/push/natif
session de l’application seulement
Abonne ce téléphone aux alertes poussées.
Corpsfournisseur (expo), plateforme (ios, android), jeton
NoteRattaché à la session : fermer l’appareil coupe ses alertes. Le message poussé est neutre, l’application lit le vrai texte à la réception.
POST
/me/push/natif/oubli
session de l’application seulement
Désabonne ce téléphone des alertes poussées.
GET
/notifications
Mes notifications, et le nombre de non-lues.
Requêteunread=1, limit (≤ 200, défaut 50)
Réponse{ items: NotificationDto[], unread }
GET
/me/notification-prefs
Ce que je veux recevoir, sorte par sorte et canal par canal (cloche, courriel). Rendues complètes, défauts compris.
RéponseMemberNotificationPrefsDto
PUT
/me/notification-prefs
Règle MES alertes (cloche « app », courriel « mail ») : une case, plusieurs, ou toutes d’un coup. Un agent le fait quand la personne le demande (« coupe mes courriels de fin de tour »). Les réglages non nommés ne bougent pas.
Corpskind, app, mail (une case) — OU reglages: [{ kind, app, mail }] (plusieurs) — OU tout: { app, mail } (toutes les sortes). Les sortes : les clés de GET /me/notification-prefs
RéponseMemberNotificationPrefsDto
NotePour ne plus rien recevoir d’UN site, d’une machine ou d’un projet : PUT /me/notification-objets. L’annonce d’une nouvelle version de Nexus n’est pas une notification : elle ne se coupe pas.
GET
/me/notification-objets
L’AUTRE axe : les objets (site, machine, projet) dont j’ai coupé — ou rallumé — les notifications. Rendues toutes, coupées comme rallumées : une ligne à `true` dit que quelqu’un a rallumé, et qui.
Réponse{ lignes: [{ objectType, objectId, enabled, setAt, setById, setByName, parSoi }] }
PUT
/me/notification-objets
Couper, ou rallumer, POUR MOI les notifications d’un objet. Une ligne par (membre, objet), réécrite et jamais doublée.
CorpsobjectType (SITE | SERVER | PROJECT), objectId, enabled
Réponsela ligne posée
NoteLa coupure agit à l’ÉCRITURE : pendant qu’elle tient, rien n’est écrit, et rallumer ne fait pas revenir ce qui ne l’a pas été. Les citations, les réponses, les tâches confiées et les questions d’un agent passent toujours (SORTES_INCOUPABLES). Le COURRIEL, lui, n’est pas encore coupé par cet axe.
GET
/admin/notification-objets
Owner et Admin
Qui a coupé quoi, dans toute l’entreprise. Avec un objet en paramètre, les réglages de cet objet et les personnes CONCERNÉES par lui.
RequêteobjectType, objectId (les deux ensemble)
Réponse{ lignes: [… + memberId, memberName, memberEmail, objectName], concernes }
PUT
/admin/notification-objets
Owner et Admin session de l’application seulement
Couper, ou rallumer, POUR QUELQU’UN D’AUTRE. Sans exception de rôle : un administrateur règle un autre administrateur et lui-même. Chaque changement part au journal d’audit, sujet = la personne réglée.
CorpsmemberId, objectType, objectId, enabled
Réponsela ligne posée, avec memberId et memberName
NoteRéservée à une personne devant son écran : ni clé d’API, ni agent. Ce qu’on éteint contient des pannes et des intrusions, et ce qui n’est pas écrit pendant la coupure ne se retrouve jamais.
POST
/notifications/read
Marque lu : tout, ou les identifiants donnés ; `jusqua` borne « tout » à ce qui a été créé au plus tard à cette date.
Corpsids (liste, facultative), jusqua (date ISO, facultative)
Réponse{ marked, unread }
GET
/notifications/stream
Flux temps réel personnel (SSE).
GET
/notifications/centre
Le centre de triage : la liste ACTIVE (ni traitée, ni réglée-et-vue, 500 lignes au plus), les comptes par FIL et par catégorie, et le nombre de sujets traités aujourd’hui.
RéponseCentreNotificationsDto
GET
/notifications/historique
L’historique (traité, ou réglé et vu), paginé par curseur, avec recherche sur le titre, le corps, le projet et l’auteur.
Requêtecursor, limit (≤ 200, défaut 50), q, categorie, depuis, jusqua
Réponse{ lignes: NotificationDto[], suivant }
GET
/notifications/recherche
Recherche dans l’actif et l’historique confondus.
Requêteq (2 caractères au moins), limit
Réponse{ lignes: NotificationDto[] }
GET
/notifications/fils/:cle
Toutes les lignes d’un fil (la chronologie d’un incident, d’une demande, d’une tâche).
Réponse{ lignes: NotificationDto[] }
POST
/notifications/traiter
Traité : « ce sujet ne demande plus notre attention ». Idempotent, cibles restreintes aux siennes, pose aussi « vu ». Le fil de l’entreprise suit : chez les collègues, les lignes encore ouvertes passent traitées « par vous » (handledById), visibles chez eux jusqu’à leur premier regard.
Corpsids ou threadKeys
Réponse{ traitees, threadKeys }
POST
/notifications/traiter-lot
session de l’application seulement
Tout traiter, par lots : le serveur choisit ce qui reste à traiter pour la personne, écrit au plus `taille` fils dans une transaction (collègues compris, axe du fait intact) et rend le curseur du lot suivant. Idempotent : relancer reprend le reste.
CorpsmembreId, jusqua, categorie?, apres?, taille?
RéponseNotificationsLotDto
NoteFermée à tout agent (7 novembre 2026) : elle referme d’un coup les fils de toute l’équipe. Un agent traite UNE notification, ou quelques-unes, par `POST /notifications/traiter`.
POST
/notifications/rouvrir
Rouvre des sujets traités, reportés ou réglés : ils reviennent à traiter — chez soi seulement.
Corpsids ou threadKeys
Réponse{ rouvertes, threadKeys }
POST
/notifications/reporter
Plus tard : sort de la liste jusqu’à la date donnée (trente jours au plus), puis revient marqué reporté. Personnel : un agenda, pas une décision.
Corpsids ou threadKeys, jusqua
Réponse{ reportees, threadKeys }
POST
/notifications/en-tache
Des notifications en tâche(s) : une seule dont la description liste les sujets, ou une par ligne. Les notifications passent en traité et gardent le lien ; rejouer rend 409. Chez les collègues, les lignes des mêmes fils passent traitées et liées à la tâche née : une seconde conversion rend le même 409.
Corpsids, mode (une | par-notification), title, description, projectId, assigneeIds, priority, dueAt
Réponse{ tasks: TaskDto[] } (201)
NoteAffecter quelqu’un l’affecte au projet de la tâche — et au site, ou à la machine, de la demande dont elle vient (jamais les deux : un membre d’une machine voit déjà tous ses sites). Ajout seulement, jamais un retrait ; un affecté déjà en place n’est pas touché. Seul un membre ACTIF de cette entreprise est accepté (400 sinon, et rien n’est écrit). Ce qui a été posé va au journal (« affectation posée par une tâche »).
GET
/tasks/:id/notifications
D’où vient cette tâche : les notifications converties dedans.
Réponse{ lignes: NotificationDto[] }