Aller au contenu

Social Hub

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

GET /social/applications

Les applications OAuth des réseaux (celle de l’entreprise, ou celle de l’instance), l’adresse de retour à déclarer, et si Nexus a un connecteur pour chacun.

Réponse{ fournisseur, nom, configuree, clientId, adaptateur, retour }[]
PUT /social/applications/:fournisseur Owner et Admin session de l’application seulement

Pose l’application OAuth d’un réseau pour l’entreprise.

CorpsclientId, clientSecret, jetonWebhook (Meta ; absent = inchangé, null = retiré)
Réponse{ ok }
NoteLe secret et le jeton de webhook sont chiffrés et ne ressortent jamais.
POST /social/applications/depuis-coffre Owner et Admin session de l’application seulement

Pose l’application OAuth d’un réseau DEPUIS LE COFFRE : on nomme les accès, le serveur lit les secrets — la clé secrète ne traverse ni la conversation, ni le poste.

Corpsfournisseur (META par défaut), clientId (l’identifiant, public) ou clientIdAcces, secretAcces, jetonWebhookAcces?
Réponse{ fournisseur, clientId, jetonWebhook }
NoteUne personne administratrice, ou l’agent qu’elle CONDUIT (seule exception d’agent : `ROUTES_OUVERTES_AUX_AGENTS_CONDUITS`) ; jamais une clé d’API, une tâche ni une routine. Un accès d’un autre espace, ou que la personne ne voit pas : 404. Journal `application.posee.coffre`, qui nomme l’accès, jamais la valeur.
GET /social/meta/mise-en-route

La mise en route de l’application Meta : étapes (FAIT, A_FAIRE, A_LA_PERSONNE), adresses à coller chez Meta — retour OAuth, webhooks, politique de confidentialité et rappel de suppression des données servis par Nexus —, textes de la revue d’application, ce qui reste à la personne.

RéponseMiseEnRouteMetaDto
NoteTire au sort, une fois, l’identifiant PUBLIC des pages de l’application posée (`publicId`). Aussi par l’outil `social.get_setup`.
POST /social/meta/verifier

Demande à Meta, en LECTURE seule, si l’ID et la clé secrète forment une paire acceptée, et quelle URL de confidentialité l’application déclare.

RéponseVerificationMetaDto
NoteUn jeton d’application (`client_credentials`) obtenu et employé au serveur, jamais rendu. Rien n’est écrit chez Meta. 409 `NON_CONFIGURE` sans application.
PUT /social/meta/contact Owner et Admin session de l’application seulement

L’adresse de contact écrite dans les pages publiques de l’application Meta (politique, suppression).

Corpscontact (une adresse de courriel, ou null)
Réponse{ ok }
NoteUne personne administratrice, ou l’agent qu’elle conduit. 409 `NON_CONFIGURE` tant que l’application Meta de l’entreprise n’est pas posée.
GET /social/connexions

Les connexions OAuth de l’entreprise (une identité chez un fournisseur, qui peut donner plusieurs comptes).

RéponseSocialConnexionDto[]
POST /social/connexions session de l’application seulement

Démarre la liaison d’un compte : rend l’adresse d’autorisation du fournisseur à ouvrir, et une clé de suivi.

Corpsfournisseur, publicite (demande aussi la lecture de la publicité), budgetsPublicitaires (case « Gérer la publicité : budgets, campagnes », Meta : ads_read et ads_management ; décochée par défaut)
Réponse{ url, suivi, scopes }
NoteLe jeton n’arrive jamais au poste : le fournisseur rappelle le serveur.
GET /social/connexions/suivi/:suivi

Où en est une liaison démarrée par cette personne.

Réponse{ etat: EN_ATTENTE } | { etat: TERMINEE, issue }
DELETE /social/connexions/:id session de l’application seulement

Déconnecte une connexion (révoque chez le fournisseur quand il le permet) ; ses comptes deviennent « à relier ».

GET /social/comptes

Les comptes sociaux visibles, avec leurs capacités EFFECTIVES et le plafond des agents.

Requêtegroupe, plateformes (liste), archives=1
RéponseSocialCompteDto[]
PATCH /social/comptes/:id Owner et Admin session de l’application seulement

Règle le plafond des agents d’un compte, ou l’archive.

Corpsplafond { autonomie, actions }, archive
RéponseSocialCompteDto
NoteAucune permission de projet ne dépasse ce plafond.
GET /social/groupes

Les groupes clients (portefeuilles de comptes), reliés ou non à un client du CRM.

Requêtearchives=1
RéponseSocialGroupeDto[]
POST /social/groupes

Crée un groupe client.

Corpsnom, description, couleur (#RRGGBB), clientId, collaborateurIds
RéponseSocialGroupeDto
PATCH /social/groupes/:id

Renomme, recolore, relie à un client, change les collaborateurs ou archive un groupe.

Corpsnom, description, couleur, clientId, collaborateurIds, archive
RéponseSocialGroupeDto
GET /social/groupes/:id/projet

Le projet où se rangent les créations d’un portefeuille, ou `null`.

Réponse{ projet: { id, nom, aveugle, cree, lien } | null }
POST /social/groupes/:id/projet

Le projet d’un portefeuille, créé d’office s’il manque : à son nom, même client, relié, l’appelant affecté.

Réponse{ projet: { id, nom, aveugle, cree, lien } }
NoteUn seul projet, sous verrou. 409 `ETAT` sur un portefeuille archivé ; 409 `OU_RANGER` si son projet a été délié exprès.
POST /social/rapports/studio

Dépose le rapport d’un portefeuille au Studio : une page HTML autonome, dans le dossier « Rapports » de son projet.

Corpsgroupe, depuis?, jusqua?
Réponse{ creationId, titre, version, nouveau, dossier, projet, lien, periode, tableaux, suite }
NoteRégénérer la même période dépose une version de plus. 403 `AVEUGLE` si le projet est en mode aveugle. Le lien de partage reste le geste de la personne.
GET /social/bibliotheque

Les modules de la Bibliothèque rangés « Social Hub », leur activation, et les connecteurs de l’espace.

Réponse{ modules, connecteurs, note }
PUT /social/bibliotheque/modules/:id

Active ou désactive un module de la Bibliothèque pour Social Hub.

Corpsactif
POST /social/bibliotheque/connecteurs

Crée un connecteur de l’espace : une adresse HTTPS, une façon de présenter la clé, une notice.

Corpsslug, nom, adresse, auth { genre, nom? }, ecrit?, documentation?, notice?, description?
NoteHTTPS exigé ; ni adresse IP ni réseau interne. Aucune commande. Naît inactif.
PUT /social/bibliotheque/connecteurs/:id

Active ou désactive un connecteur de l’espace pour Social Hub.

Corpsactif
DELETE /social/bibliotheque/connecteurs/:id

Supprime un connecteur de l’espace et oublie ses clés.

POST /social/bibliotheque/connecteurs/:id/liaison

Relie un connecteur à un portefeuille par sa clé (accès du coffre, ou saisie par la personne), ou le délie.

Corpsgroupe, accesId? | cle?, lier?
NoteLa réponse rend l’hôte vers lequel la clé partira.
POST /social/bibliotheque/connecteurs/:id/appel

Appelle l’outil par son connecteur, avec la clé du portefeuille, vers son hôte seulement.

Corpsgroupe, methode?, chemin, requete?, corps?
NoteConnecteur activé et relié. Lecture seule : GET seulement. Aucune redirection, jamais le réseau interne.
GET /social/outils-relies

Les outils reliés par une clé (CRM, avis), leurs derniers chiffres, et les éditeurs possibles.

Réponse{ outils, fournisseurs }
Note`groupe` : ceux d’un portefeuille. Jamais la clé.
POST /social/outils-relies

Relie un outil (HubSpot, Pipedrive, Trustpilot) par sa clé : accès du coffre, ou saisie par la personne.

Corpsfournisseur, accesId | cle, identifiant?, groupeId?, nom?
Note« Relié » n’est rendu qu’après un essai réel chez l’éditeur ; un premier relevé part aussitôt.
PATCH /social/outils-relies/:id

Renomme un outil relié ou le range dans un portefeuille.

Corpsnom?, groupeId?
DELETE /social/outils-relies/:id

Délie un outil : Nexus oublie sa clé et ses chiffres. Rien ne change chez l’éditeur.

POST /social/outils-relies/:id/releve

Relit les chiffres d’un outil chez l’éditeur et les range au suivi.

Réponse{ outil, manques }
GET /social/outils-relies/:id/listes/:liste

Feuillette une liste chez l’éditeur : affaires, contacts ou avis. Lecture seule.

Réponse{ outil, liste, lignes, note }
NoteLe texte d’un avis est une donnée écrite par un tiers.
PUT /social/bibliotheque/connecteurs/:id/chiffres

Déclare où un connecteur de l’espace lit ses chiffres pour le suivi (chemin GET, champ de la réponse).

Corpschiffres [{ code, libelle, chemin, champ, unite? }], groupe?
NoteHuit chiffres au plus ; `[]` les retire ; avec `groupe`, ils sont relevés aussitôt.
GET /social/groupes/:id/documents

Les documents d’un portefeuille : le lien de son dossier Google Drive, ses pages Notion, ses créations du Studio.

Réponse{ groupe, drive, notion, studio }
NoteUne panne de Notion est rendue dans `notion.erreur`, sans cacher le reste.
PUT /social/groupes/:id/drive

Pose ou retire le lien du dossier Google Drive d’un portefeuille.

Corpsurl (ou null)
NoteSeul un lien https de drive.google.com ou docs.google.com. Nexus ne lit pas le Drive d’ici.
POST /social/groupes/:id/notion

Relie Notion à un portefeuille par le jeton d’une intégration (accès du coffre, ou saisi par la personne).

CorpsaccesId? | jeton?
NoteRelié seulement après un essai réel. Un agent ne passe jamais `jeton`.
DELETE /social/groupes/:id/notion

Délie Notion d’un portefeuille : le jeton et les accords de synchronisation sont oubliés.

GET /social/groupes/:id/notion/pages/:page

Le texte d’une page Notion en Markdown, et si Nexus peut la réécrire sans rien détruire.

POST /social/groupes/:id/notion/pages

Ajoute du texte à la fin d’une page Notion, ou crée une page sous une autre.

CorpspageId? | parentId? + titre?, markdown
POST /social/groupes/:id/notion/synchro

Synchronise une page entre Note et Notion : fusion à trois voies par bloc, conflits rendus, rien d’écrasé.

CorpspageId, noteMarkdown, noteRef?, garder?
Note403 `AVEUGLE` sur un projet en mode aveugle. N’écrit pas dans Note : l’appelant écrit `markdown`.
POST /social/rapports/suivi

Dépose le suivi d’un portefeuille au Studio : la page des trente derniers jours, une création par portefeuille, remise à jour chaque jour.

Corpsgroupe
Réponse{ creationId, titre, version, nouveau, change, dossier, projet, lien, periode, comptes, tableaux, suite }
NoteUne version de plus seulement si les chiffres ont changé. 403 `AVEUGLE` si le projet est en mode aveugle. Le lien de partage reste le geste de la personne.
GET /social/courriels/comptes

Les comptes d’emailing reliés (Brevo, Mailchimp, Mailjet, ActiveCampaign) que l’appelant voit, et le catalogue des éditeurs.

Réponse{ comptes: [{ id, fournisseur, editeur, nom, identite, finDeCle, hote, groupeId, etat, plafond, sansConfirmation, capacites }], fournisseurs }
NoteRequête `groupe` pour un portefeuille. Jamais la clé : ses quatre derniers caractères seulement.
POST /social/courriels/comptes

Relie un compte d’emailing par sa clé d’API, après un essai réel chez l’éditeur.

Corpsfournisseur, cle | accesId, identifiant?, groupeId?, nom?
RéponseLe compte (201)
NoteLa clé dans le corps : d’une PERSONNE seulement. Un agent conduit par une personne nomme un accès du coffre (`accesId`). Une application ou une clé d’API : 403 `PERSONNE_SEULE`.
PATCH /social/courriels/comptes/:id

Règle un compte d’emailing : nom, portefeuille, plafond de destinataires, dispense de confirmation.

Corpsnom?, groupeId?, plafond?, sansConfirmation?
RéponseLe compte
NoteLe plafond : par la personne seule. La dispense est journalisée (qui, quelle discussion).
POST /social/courriels/comptes/:id/verification

Essaie la clé du compte chez l’éditeur et met son état à jour.

RéponseLe compte
NoteUne clé refusée rend le compte « à relier », sans erreur HTTP.
DELETE /social/courriels/comptes/:id

Délie un compte d’emailing : Nexus oublie sa clé et ses campagnes préparées.

Réponse204
Note409 `ETAT` tant qu’une campagne est programmée ou en cours. Rien ne change chez l’éditeur.
GET /social/courriels/comptes/:id/listes

Les listes (avec leur nombre de contacts) et les expéditeurs validés d’un compte, lus chez l’éditeur.

Réponse{ listes: [{ id, nom, contacts }], expediteurs: [{ nom, adresse, valide }] }
NoteJamais une adresse de contact. `contacts` nul : l’éditeur ne le donne pas.
GET /social/courriels/comptes/:id/campagnes-editeur

Les dernières campagnes du compte chez l’éditeur, y compris celles montées hors de Nexus.

Réponse{ campagnes: [{ externalId, nom, objet, etat, envoyeeA, stats }] }
NoteRequête `limite` (50 au plus).
GET /social/courriels/campagnes

Les campagnes d’e-mail préparées dans Nexus, paginées.

Réponse{ campagnes, total }
NoteRequêtes `groupe`, `compte`, `etat` (liste séparée par des virgules), `limite`, `decalage`.
POST /social/courriels/campagnes

Prépare une campagne : un brouillon dans Nexus, depuis un HTML ou un gabarit de courriel du Studio.

CorpscompteId, nom, objet, expediteurNom, expediteurAdresse, repondreA?, listeId, html | creationId
RéponseLa campagne (201)
NoteRien ne part. La liste est relue chez l’éditeur. 403 `AVEUGLE` pour une création d’un projet en mode aveugle.
GET /social/courriels/campagnes/:id

Une campagne, avec son HTML.

RéponseLa campagne
PATCH /social/courriels/campagnes/:id

Modifie une campagne en brouillon, à confirmer ou refusée.

Corpsnom?, objet?, expediteurNom?, expediteurAdresse?, repondreA?, listeId?, html?, creationId?
RéponseLa campagne
Note409 `ETAT` si elle est programmée (annuler d’abord) ou partie.
DELETE /social/courriels/campagnes/:id

Retire une campagne de Nexus.

Réponse204
Note409 `ETAT` si elle est programmée, en cours ou à relire.
POST /social/courriels/campagnes/:id/apercu

Ce qui partirait, tel que la fenêtre de confirmation le montre, et son empreinte.

Corpstest?, quand?
Réponse{ genre, compte, editeur, portefeuille, expediteur, objet, liste, destinataires, adresses, quand, remarques, lignes, empreinte }
NoteRien n’est écrit, rien ne part. L’effectif de la liste est relu chez l’éditeur.
POST /social/contenu/:id/publication

Écrit l’article d’une carte du planning sur un site WordPress du portefeuille (brouillon par défaut).

CorpssiteId?, accesId?, statut? (BROUILLON | PUBLIE | PROGRAMME), quand?, contenu?
Réponse{ statut, etatDuSite, adresse, articleId, site, acces, miseAJour, message }
NoteGeste d’une personne ou de l’agent qu’elle conduit. L’accès est un mot de passe d’application du coffre, rattaché au site.
GET /social/sms

Les campagnes SMS préparées dans Nexus (`groupe` : celles d’un portefeuille).

Réponse{ campagnes: [{ id, compte, nom, expediteur, texte, liste, mesure, etat, attente, stats }] }
POST /social/sms

Prépare une campagne SMS sur un compte Brevo relié. Rien ne part.

CorpscompteId, nom, expediteur, texte, listeId, stop?
RéponseLa campagne.
GET /social/sms/:id

Une campagne SMS.

RéponseLa campagne.
PATCH /social/sms/:id

Modifie une campagne SMS qui n’est ni programmée ni partie.

Corpsnom?, expediteur?, texte?, listeId?, stop?
RéponseLa campagne.
DELETE /social/sms/:id

Retire une campagne SMS de Nexus (rien n’est supprimé chez l’éditeur).

Réponse204
POST /social/sms/:id/apercu

Ce qui partirait, et son empreinte : les lignes de la fenêtre de confirmation. Rien ne part.

Corpstest?, quand?
Réponse{ lignes, destinataires, segments, remarques, empreinte }
POST /social/sms/:id/envoi

Teste, envoie ou programme une campagne SMS — toujours confirmé par une personne, sauf dispense.

Corpstest?, quand?, confirmation?, sansConfirmation?
Réponse{ issue (A_CONFIRMER | FAIT | INCONNU), message, apercu, campagne }
NoteLa même garde que l’e-mail, au serveur. Un agent sans personne, une application, une clé d’API préparent toujours.
POST /social/sms/:id/annulation

Suspend la programmation chez l’éditeur, ou écarte l’envoi préparé qui attendait.

RéponseLa campagne.
POST /social/sms/:id/relecture

Relit l’état et les statistiques de la campagne chez l’éditeur.

RéponseLa campagne.
GET /social/sms-directs

Les SMS directs (Twilio, OVHcloud) que la personne voit. `groupe`, `limite`.

Réponse{ sms: [{ id, outil, editeur, nom, texte, destinataires, numeros, etat, attente, resultat }] }
NoteLes numéros ne sont rendus que tant qu’ils sont gardés : ils sont effacés à l’envoi.
POST /social/sms-directs

Prépare un SMS direct : compte SMS relié, texte, numéros au format international (200 au plus).

RéponseLe SMS, en brouillon.
NoteRien ne part. Un numéro sans indicatif est refusé, nommé.
PATCH /social/sms-directs/:id

Modifie un SMS direct qui n’est pas parti.

RéponseLe SMS.
DELETE /social/sms-directs/:id

Supprime un SMS direct, numéros compris.

Réponse204.
POST /social/sms-directs/:id/apercu

Ce qui partirait : compte, expéditeur, texte, nombre de numéros, coût estimé, remarques, et l’empreinte à confirmer.

Réponse{ lignes, destinataires, segments, remarques, empreinte }
POST /social/sms-directs/:id/envoi

Envoie un SMS direct, ou le programme chez l’éditeur (`quand`). Une personne passe `confirmation` (l’empreinte de l’aperçu) ; tout autre appelant PRÉPARE, sauf dispense donnée dans la discussion.

Réponse{ issue: A_CONFIRMER | FAIT | INCONNU, message, apercu, sms }
NoteUn envoi ne se rejoue jamais. Les numéros sont effacés dès que l’éditeur a répondu.
POST /social/sms-directs/:id/relecture

Relit chez l’éditeur la délivrance d’un SMS direct parti ou programmé (Twilio, OVHcloud).

RéponseLe SMS, avec `resultat.suivi` : { delivres, envoyes, enAttente, echecs, inconnus, luA }.
NoteOctopush ne donne pas la délivrance d’ici : refus CAPACITE.
POST /social/sms-directs/:id/annulation

Écarte l’envoi qu’un agent a préparé, ou annule chez l’éditeur une programmation pas encore partie.

RéponseLe SMS.
POST /social/courriels/campagnes/:id/envoi

Teste, envoie ou programme une campagne — toujours confirmé par une personne, sauf dispense.

Corpstest?, quand?, confirmation?, sansConfirmation?
Réponse{ issue (A_CONFIRMER | FAIT | INCONNU), message, apercu, campagne }
NoteLa garde est au serveur. Une personne passe l’empreinte de l’aperçu (`confirmation`) ; 409 `CONFIRMATION_PERIMEE` si ce qui part a changé. Un agent, une application, une clé d’API PRÉPARENT (`A_CONFIRMER`). `sansConfirmation` n’est écouté que d’un agent conduit par une personne, sous le plafond du compte.
POST /social/courriels/campagnes/:id/annulation

Annule une programmation chez l’éditeur, ou écarte un envoi en attente de confirmation.

RéponseLa campagne
NoteGeste d’une personne ou de l’agent qu’elle conduit.
POST /social/courriels/campagnes/:id/relecture

Relit l’état et les chiffres d’une campagne chez l’éditeur.

RéponseLa campagne
NoteC’est cette relecture qui écrit « envoyée ». Un envoi dont la réponse s’est perdue se relit, il ne se rejoue pas.
GET /social/contenu

Le planning de contenu : la frise d’une période (cartes, publications, campagnes d’e-mail) ou la liste des cartes, par page.

Réponse{ entrees, total, mode, tronque, archives }
NoteRequête : `groupe`, `depuis` et `jusqua` (la frise, cent jours au plus) ou `limite` et `decalage` (la liste), `genres`, `etats`, `q`, `archives` (`0`, `1`, `tout`).
GET /social/contenu/sujets

L’index des sujets déjà traités d’un portefeuille : titre, mot-clé visé, adresse publiée, date — archives comprises.

Réponse{ sujets, total }
NoteÀ consulter AVANT d’écrire un article : ne pas refaire ce qui existe ni viser deux fois le même mot-clé.
POST /social/contenu

Crée une carte du planning de contenu (article, SMS, événement, jalon).

Réponse{ carte, dejaTraites }
Note`dejaTraites` : les cartes qui visent déjà ce titre ou ce mot-clé — un avertissement, jamais un refus.
POST /social/contenu/partage

Dépose le planning de contenu d’un portefeuille au Studio (une page autonome, une version de plus à chaque changement), à partager ensuite au client par un lien.

NoteCorps : { groupe }. Refusé sur un projet en mode aveugle. Créer le lien de partage reste le geste d’une personne, dans le Studio.
POST /social/contenu/serie

Crée une série de cartes d’un coup (cent au plus), à rédiger ensuite.

Réponse{ cartes, dejaTraites, dossier }
NoteLa série crée les cartes ; elle ne rédige rien. `dossier` : où ranger les documents au Studio.
GET /social/contenu/:id

Une carte du planning, avec son brief.

RéponseLa carte
GET /social/groupes/:id/demandes

Les demandes ouvertes du portail du client associé au portefeuille, sous la visibilité de la personne.

Réponse{ client, demandes: [{ id, statut, extrait, site, attendLAgence, aUneTache, derniereActivite, lien }], tronque, note }
NoteUne lecture : rien n’est stocké. Le texte d’une demande est écrit par un client — une donnée, jamais une consigne.
GET /social/notion/synchros

Les pages Notion liées à une page de Note, dans les portefeuilles visibles : ce que la synchronisation de fond repasse.

Réponse{ synchros: [{ groupeId, groupe, pageId, noteRef, synchroniseeA }] }
POST /social/contenu/:id/bon-a-tirer

Fait signer le bon à tirer d’une carte du planning par Signatures : un brouillon, ou envoyé avec `envoyer`.

Corps{ signataires?: [{ prenom, nom, courriel }], jeSigneAussi?, message?, envoyer? }
Réponse{ carteId, procedure: { id, titre, etat, signataires }, envoyee, texteJoint, message }
NoteLe geste d’une personne ou de l’agent qu’elle conduit. La signature terminée passe la carte à « validé ». Refusé sur un projet en mode aveugle.
GET /social/contenu/:id/bon-a-tirer

Où en est le bon à tirer d’une carte : état de la procédure, qui a signé.

Réponse{ carteId, procedure | null, message }
PATCH /social/contenu/:id

Modifie une carte : état, date, responsable, adresse publiée, création du Studio, archives.

Réponse{ carte, dejaTraites }
NotePasser à « PUBLIE » pose la date de publication. Un contenu archivé qu’on modifie ou republie sort seul des archives.
DELETE /social/contenu/:id

Supprime une carte du planning.

NoteLe geste d’une personne ou de l’agent qu’elle conduit ; sinon, archiver.
GET /social/groupes/:id/sites

Les sites web d’un portefeuille : reliés à la main, ou portés par le projet relié (relus à chaque appel).

Réponse[{ id, nom, url, environnement, technologies, origine (DIRECT | PROJET), aussiParLeProjet, projet, machine, preproductionDe, accessible, acces }]
NoteQui voit le portefeuille voit le nom de ses sites ; `accessible` et `acces` disent ce que l’appelant peut réellement employer. Jamais un secret.
POST /social/groupes/:id/sites

Relie un site de l’application Sites web à un portefeuille.

CorpssiteId
RéponseLes sites du portefeuille
NoteIl faut voir le portefeuille et le site : sinon 404. Un site archivé : 409.
DELETE /social/groupes/:id/sites/:site

Délie un site relié à la main.

RéponseLes sites du portefeuille
NoteUn site arrivé par le projet relié ne se délie pas d’ici : 409, avec le nom du projet.
POST /social/attributions

Ajoute ou retire des membres attribués à un compte social (genre COMPTE) ou à un groupe client (GROUPE). Un non-administrateur ne voit et ne gère que les comptes qu’on lui attribue (directement ou par un groupe) ; un compte qui ne lui est pas attribué lui est introuvable (404).

Corpsgenre (COMPTE | GROUPE), id, ajouter [identifiant ou courriel], retirer [identifiant ou courriel]
Réponse{ genre, id, nom, membres [{ id, nom }], ajoutes, retires, inchanges }
NoteAdministrateur, en personne ou par l’agent qu’il conduit (outil social.assign_members) ; refus PERSONNE_SEULE pour un agent sans personne ou une application, ADMIN pour un non-administrateur. Journal compte.attributions / groupe.attributions.
POST /social/rangement

Range un compte dans un groupe, l’en retire (sans le déconnecter) ou le déplace d’un groupe à l’autre.

CorpscompteId, versGroupeId (null = retirer), depuisGroupeId
Réponse{ ok }
GET /projects/:id/ressources-connectees

Les ressources du Social Hub ouvertes aux agents d’un projet (groupe, compte, compte publicitaire), avec leur autonomie et leurs actions.

RéponseRessourceConnecteeDto[]
POST /projects/:id/ressources-connectees session de l’application seulement

Ouvre une ressource du Social Hub aux agents d’un projet.

Corpsgenre (SOCIAL_GROUPE | SOCIAL_COMPTE | SOCIAL_PUBLICITE), ressourceId, autonomie, actions, rolesAgents, note
RéponseRessourceConnecteeDto
NoteGeste de personne. Une publicité ne s’ouvre qu’en lecture.
DELETE /projects/:id/ressources-connectees/:ressource session de l’application seulement

Retire une ressource du projet.

GET /social/publications

Les publications visibles.

Requêtecompte, groupe, etats (liste), depuis, jusqua, limite
RéponseSocialPublicationDto[]
GET /social/publications/:id

Une publication et chacune de ses destinations.

RéponseSocialPublicationDto
GET /social/publications/:id/statistiques

Les statistiques d’une publication, destination par destination : la dernière valeur relevée de chaque métrique (cumul à la date du relevé, avec sa source), ce que la plateforme ne fournit pas (nonFournies, avec la raison) et ce qui n’a pas encore été relevé. Jamais un zéro inventé.

RéponseSocialStatistiquesPublicationDto
POST /social/publications/:id/statistiques/relever

Relit chez les plateformes les statistiques d’une publication partie (Facebook, Instagram, X, YouTube), les range, et les rend comme la lecture.

RéponseSocialStatistiquesPublicationDto
POST /social/publications

Prépare une publication (brouillon), ou la programme si programmeeA est donnée.

Corpstexte, medias, destinations [{ compteId, texte, titre }], groupeId, projectId, programmeeA, fuseau, hashtags, note, cle (idempotence)
RéponseSocialPublicationDto
PATCH /social/publications/:id

Modifie une publication qui n’est pas encore partie.

Corpstexte, medias, destinations, programmeeA, fuseau, hashtags, note
RéponseSocialPublicationDto
POST /social/publications/:id/publier

Publie maintenant, ou programme (quand) — jugé selon qui appelle : une destination peut revenir « A_VALIDER ».

Corpsquand (ISO, ou null = maintenant)
RéponseSocialPublicationDto
Note« PUBLIEE » seulement avec l’identifiant rendu par la plateforme ; une coupure donne INCONNU, relu, jamais rejoué.
POST /social/publications/:id/deplacer

Déplace une publication programmée.

Corpsquand (ISO)
RéponseSocialPublicationDto
POST /social/publications/:id/annuler

Annule ce qui n’est pas encore parti.

RéponseSocialPublicationDto
POST /social/publications/:id/dupliquer

Copie une publication en brouillon, sur les mêmes comptes ou sur d’autres.

CorpscompteIds
RéponseSocialPublicationDto
GET /social/modeles

Les modèles de publication de l’entreprise ou d’un groupe.

Requêtegroupe
RéponseSocialModeleDto[]
POST /social/modeles

Crée un modèle de publication.

Corpsnom, texte (champs {{nom}}), variantes { PLATEFORME: texte }, hashtags, medias, groupeId
RéponseSocialModeleDto
PUT /social/modeles/:id

Modifie un modèle.

Corpscomme à la création
RéponseSocialModeleDto
DELETE /social/modeles/:id

Supprime un modèle.

POST /social/modeles/:id/brouillon

Crée un BROUILLON depuis un modèle : champs remplis, variante de chaque réseau.

CorpscompteIds, valeurs { champ: texte }, programmeeA
RéponseSocialPublicationDto
NoteUn champ sans valeur reste visible dans le brouillon.
GET /social/calendrier

Les publications d’une période, destination par destination.

Requêtedepuis, jusqua (400 jours au plus), groupe, groupes (plusieurs portefeuilles), compte, plateformes
GET /social/validations

Les demandes de validation (publication, réponse, modération, question d’une automatisation).

Requêtetoutes=1
POST /social/validations/:id/decision session de l’application seulement

Approuve ou refuse une demande — une approbation exécute le geste.

Corpsdecision (APPROUVEE | REFUSEE), raison
Réponse{ ok }
NoteGeste de personne : un agent la demande, il ne la prend pas.
GET /social/boite

La boîte unifiée : commentaires, mentions, messages privés.

Requêtegroupe, compte, plateformes, etats, genres, classe, recherche, limite, avant + avantId (la page suivante)
RéponseSocialInteractionDto[]
NotePar pages : redonner en `avant` la date `recueA` et en `avantId` l’identifiant de la dernière ligne reçue.
GET /social/boite/compteurs

Les compteurs de toute la boîte filtrée : total et nombre par état.

Requêtegroupe, compte, plateformes, genres, classe, recherche
Réponse{ total, parEtat }
PATCH /social/interactions/:id

Classe, assigne (personne ou agent) ou change l’état d’une interaction.

Corpsetat, classe, assigneeMemberId, assigneeAgent
RéponseSocialInteractionDto
POST /social/interactions/:id/repondre

Répond à un commentaire ou à un message privé (24 h pour Meta).

Corpstexte, cle
Réponse{ verdict, interaction }
POST /social/interactions/:id/moderer

Masque, réaffiche ou supprime un commentaire.

Corpsgeste (MASQUER | AFFICHER | SUPPRIMER)
Réponse{ verdict }
GET /social/statistiques

Les valeurs relevées (source, période, date de relevé), ou leur export CSV.

Requêtecompte, groupe, metriques, depuis, jusqua, format=csv
Réponse{ metriques: SocialMetriqueDto[], note } | text/csv
GET /social/rapports

Le rapport d’un groupe client sur une période : dernière valeur de chaque métrique, publications, interactions, et ce qui manque.

Requêtegroupe, depuis, jusqua
RéponseSocialRapportDto
GET /social/publicite

Les comptes publicitaires visibles et leurs campagnes (lecture seule).

Requêtecompte
RéponseSocialComptePubliciteDto[]
POST /social/publicite/relever

Relit chez la plateforme les comptes publicitaires et campagnes des connexions de la personne (ads_read).

Réponse{ comptes, campagnes, erreurs }
NoteUne LECTURE ; Nexus ne modifie aucun budget.
POST /social/publicite/campagnes/:id session de l’application seulement

Modifie le budget quotidien, le budget total ou l’état (ACTIVE, PAUSED) d’une campagne payante, chez la plateforme (ads_management).

Corps{ budgetJour?, budgetTotal?, etat? }
Réponse{ verdict, campagne, compte, avant, apres, message, operations }
NoteENGAGE DE L’ARGENT, À L’ÉCRAN : le geste d’une personne (`ROUTES_SESSION_SEULE`). Un agent passe par nexus_social (`social.update_ad_campaign`, `social.update_ad_budget`, `social.set_ad_status`…), jugé par le plafond de dépense réglé par la personne (9 novembre 2026). Envoyé en deux gestes (budget, puis état), idempotents ; une coupure rend 504 `INCONNU`, jamais rejouée.
GET /social/publicite/operations

Ce que les agents (et les personnes) ont fait en publicité : créations, diffusions, pauses, budgets, duplications — avant → après, montant, qui et à la demande de qui, issue.

Requêtecompte?, limite? (50, 200 au plus)
RéponseOperationPubliciteDto[]
NoteLes seuls comptes publicitaires que l’appelant voit ; un compte nommé invisible ou d’un autre espace : 404. Outil `social.get_ad_operations`.
PUT /social/publicite/comptes/:id/plafond session de l’application seulement

Règle le plafond de dépense des agents d’un compte publicitaire : budget quotidien et budget total qu’un agent conduit peut poser ou activer, par geste, sans revenir vers la personne.

Corps{ plafond: { budgetJourMax: number | null, budgetTotalMax: number | null } | null }
Réponse{ plafond }
NoteLe geste d’une personne (`ROUTES_SESSION_SEULE`) qui GÈRE le compte (administrateur, ou qui a relié sa connexion ; sinon 403 `GESTION`). `null` : plus de plafond. Au-dessus, la demande d’un agent revient A_VALIDER avec le montant. Journal `publicite.plafond.regle`, avant → après.
GET /social/automatisations

Les règles d’automatisation du Social Hub.

POST /social/automatisations

Crée une règle : déclencheur, conditions, action.

Corpsnom, declencheur, conditions, action, config, actif
PUT /social/automatisations/:id

Modifie une règle.

Corpscomme à la création
DELETE /social/automatisations/:id

Supprime une règle.

GET /social/activite

Le journal du Social Hub : qui (personne, agent, application, automatisation) a fait quoi.

Requêtelimite
RéponseSocialActiviteDto[]
GET /social/evenements

Le fil des évènements social.* que l’application relaie sur le bus des applications.

Requêtedepuis, limite
RéponseSocialEvenementDto[]
GET /social/outils

Le catalogue des outils social.* (ceux des agents et des applications).

POST /social/outils/:outil

Appelle un outil social.* — jugé selon qui appelle (agent de projet : ses ressources connectées ; application : écritures en validation).

Corpsentrees, appelant { genre: personne | application | agent, nom }
RéponseResultatOutilSocial
NoteLe genre déclaré ne fait que restreindre : un agent est reconnu au marqueur du poste.