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.
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.
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.
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.
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.
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.
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.
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).
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.
POST
/social/sms/:id/relecture
Relit l’état et les statistiques de la campagne chez l’éditeur.
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.
DELETE
/social/sms-directs/:id
Supprime un SMS direct, numéros compris.
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.
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.
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).
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.
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.