MCP, référence des tools
Le serveur MCP expose 448 tools pour Claude Desktop / Code / web. Tu connectes le serveur en une commande depuis /settings/mcp dans l'app. Token au niveau workspace ou accès plateforme pour les super-admins. Voir aussi les recettes MCP.
Tools plateforme
Opérations cross-workspace. Super-admin uniquement.
agent.*
-
agent.provision_client_completeWRITE-safe AGENTProvisionne un workspace client Kernel complet : workspace + utilisateur admin + lien d'onboarding Stripe Connect + données initiales + email d'onboarding. Renvoie les détails du nouveau workspace. Idempotent sur le slug.
scope: * -
agent.archive_workspaceDESTRUCTIVE AGENTArchive proprement un workspace : export en dry-run, annulation de l'abonnement Stripe, archivage en douceur en base, notification de l'owner. Multi-étapes avec remontée des échecs partiels.
scope: *
platform.*
-
list_workspacesREADListe tous les workspaces avec billing, nombre de membres et dernière activité. Filtre par status (active/archived/past_due/comped/all), plan, ou recherche texte sur name/slug.
scope: * -
get_workspaceREADRécupère le détail complet d'un workspace par slug : owner, billing, Stripe Connect, domaines, thème, nombre de membres.
scope: * -
list_membersREADListe les membres d'un workspace. Si workspace_id est fourni, la requête est limitée à ce workspace, sinon retourne tous les membres de tous les workspaces.
scope: * -
get_memberREADRécupère un membre par user_id et workspace_id, avec les données de profil jointes.
scope: * -
list_auditREADListe les entrées kernel_activity récentes, sur tous les workspaces ou au sein d'un workspace. since : date ISO (24h par défaut).
scope: * -
get_billing_overviewREADAgrège les métriques de billing sur tous les workspaces : MRR, ARR, nombre d'abonnements actifs, nombre past_due, nombre comped.
scope: * -
list_domainsREADListe les domaines personnalisés de tous les workspaces.
scope: * -
list_themesREADListe les thèmes de workspace actifs.
scope: * -
list_integrationsREADListe les intégrations par workspace (Stripe Connect, Google, Meta, LinkedIn, TikTok).
scope: * -
get_system_healthREADAgrège la santé système : Apify en attente, publications studio en échec, approbations JIT en attente, nombre d'erreurs récentes.
scope: * -
list_plansREADListe tous les plans de billing (id, name, monthly_price_cents, currency).
scope: * -
list_billing_accountsREADListe les Billing Accounts (un utilisateur possède N comptes, chacun payant N workspaces). Chaque BA possède un seul client Stripe et une carte, et peut payer pour plusieurs workspaces. Filtre par has_card (les BA avec un client Stripe attaché) ou recherche texte sur l'email de l'owner.
scope: * -
get_billing_accountREADRécupère un Billing Account par id ou par owner_user_id. Retourne la ligne BA, le moyen de paiement Stripe (brand/last4/exp), et chaque workspace facturé par ce BA avec son plan et son statut d'abonnement.
scope: * -
list_waitlistREADListe les inscriptions de la waitlist (status, source, created_at).
scope: * -
search_globalREADRecherche texte transversale sur les workspaces, membres et contacts (top 5 de chaque).
scope: * -
create_workspaceWRITE-safeCrée un nouveau workspace via la RPC create_workspace_for_owner_v2_with_domains. Nécessite un user_id d'owner existant.
scope: * -
update_workspace_identityWRITE-safeMet à jour name, brand_color, icon_url, logo_url d'un workspace.
scope: * -
set_workspace_planWRITE-safeChange le plan de billing d'un workspace (met à jour workspaces.plan uniquement, le changement d'abonnement Stripe est séparé).
scope: * -
add_memberWRITE-safeInvite un utilisateur existant comme membre d'un workspace.
scope: * -
update_member_roleWRITE-safeChange le rôle d'un membre au sein d'un workspace.
scope: * -
set_platform_flagWRITE-safeDéfinit un feature flag global de la plateforme (scope Hypervisor). Affecte TOUS les workspaces.
scope: * -
connect_integrationWRITE-safeMarque une intégration de workspace comme connectée (les credentials sont stockés ailleurs, cet outil ne fait que basculer le status).
scope: * -
add_domainWRITE-safeAjoute un domaine personnalisé à un workspace (non vérifié tant que le contrôle DNS n'est pas passé).
scope: * -
archive_workspaceDESTRUCTIVEArchive en douceur un workspace (définit archived_at). Réversible. L'abonnement Stripe reste actif jusqu'à annulation manuelle.
scope: * -
delete_workspaceDESTRUCTIVESuppression DÉFINITIVE d'un workspace par cascade. Irréversible. Utilise d'abord archive_workspace.
scope: * -
delete_memberDESTRUCTIVERetire un membre d'un workspace. Sa ligne auth.user est conservée.
scope: * -
purge_audit_older_thanDESTRUCTIVESupprime définitivement les lignes kernel_activity antérieures à la date ISO donnée. Impossible à annuler.
scope: * -
force_billing_cancelDESTRUCTIVEForce le billing d'un workspace à l'état annulé (workspace_billing.stripe_subscription_status = canceled). Stripe doit être annulé séparément.
scope: * -
revoke_tokenDESTRUCTIVERévoque un token MCP par id. Définit revoked_at. Les appels suivants retournent 401.
scope: * -
replay_webhookDESTRUCTIVEMet en file un rejeu de webhook pour un workspace et un provider (Stripe/Meta/...).
scope: * -
list_partnersREADListe les partenaires du programme partenaire plateforme (Freelance OS). Filtre optionnel par status (pending/approved/rejected/suspended). Retourne name, email, company, referral code, status et tier.
scope: * -
list_partner_tiersREADListe les tiers du programme partenaire plateforme avec le type de commission, le taux (bps) et le modèle (referral/agency_override).
scope: * -
get_partner_referralsREADListe les referrals attribués à un partenaire, avec le décompte par status (clicked/signed_up/trial/converted/churned).
scope: * -
get_partner_commissionsREADListe le registre de commissions d'un partenaire avec les totaux par status (pending/approved/paid/clawed_back). Montants en centimes.
scope: * -
get_partnerREADRécupère le détail admin complet pour un partenaire : profile, application (channels/audience), tier, referrals (avec le canal d'attribution), commissions, et le récapitulatif des décomptes/totaux. Miroir de la fiche partenaire Hypervisor.
scope: * -
get_partner_kitREADRécupère le contenu du kit partenaire (markdown) affiché/téléchargé sur la page Ressources du programme partenaire. Retourne le markdown et le timestamp de dernière mise à jour.
scope: * -
approve_partnerWRITE-safeApprouve un partenaire en attente et lui assigne un tier. Active l'attribution des referrals et les commissions pour ce partenaire.
scope: * -
set_partner_tierWRITE-safeChange le tier assigné à un partenaire (override manuel).
scope: * -
reject_partnerWRITE-safeRejette une candidature de partenaire.
scope: * -
suspend_partnerWRITE-safeSuspend un partenaire approuvé (stoppe les nouvelles attributions, les commissions existantes ne sont pas affectées).
scope: * -
set_partner_noteWRITE-safeDéfinit la note admin interne sur un partenaire (stockée dans profile JSONB, admin uniquement, jamais montrée au partenaire). Une chaîne vide l'efface. Plafonnée à 2000 caractères.
scope: * -
set_partner_kitWRITE-safeRemplace le contenu du kit partenaire (markdown) affiché/téléchargé sur la page Ressources du programme partenaire. Le nouveau contenu prend effet immédiatement.
scope: * -
reactivate_partnerWRITE-safeRéactive un partenaire suspendu (status → approved). Le tier précédemment assigné est conservé.
scope: * -
reconsider_partnerWRITE-safeRemet une candidature refusée en attente (pending) pour la reconsidérer.
scope: * -
archive_partnerWRITE-safeArchive un partenaire (le masque de la liste par défaut). Réversible. N'affecte ni les referrals ni les commissions.
scope: * -
unarchive_partnerWRITE-safeDésarchive un partenaire (le restaure dans la liste par défaut).
scope: * -
delete_partnerDESTRUCTIVESupprime définitivement un partenaire. Refusé si le partenaire a des referrals ou des commissions (archive-le plutôt). Pensé pour purger les candidatures test/spam.
scope: * -
platform.media.workspace_statsREADUsage de la médiathèque par workspace (count, archivés, bytes, générés par IA, quota, dernier upload).
scope: * -
platform.media.orphansREADListe les médias sans aucun usage enregistré et plus vieux que N jours. Triés par taille décroissante.
scope: * -
platform.media.set_quotaWRITE-safeDéfinit storage_quota_bytes sur un workspace. Passe null pour retirer le quota (illimité).
scope: * -
platform.media.purge_workspaceDESTRUCTIVESupprime définitivement tous les media_items et objets de stockage archivés depuis plus de N jours pour un workspace donné. Irréversible.
scope: *
Tools workspace
Scopés à un seul workspace via token OAuth.
ads.*
-
ads.campaigns.listREADListe les campagnes Ads.
scope: ads:read -
ads.campaigns.get_perfREADRécupère les métriques de performance d'une campagne Ads (dépense, impressions, clics, leads).
scope: ads:read -
ads.lead_funnelREADFunnel de qualité des leads de bout en bout pour les ads du workspace sur une fenêtre configurable. Renvoie les compteurs agrégés à chaque étape : leads soumis, appels bookés, contacts ayant payé, et revenu total en centimes. Permet à un agent de répondre "quel est mon ROI ads" sans fouiller chaque table.
scope: ads:read -
ads.launches.listREADListe les groupes de lancement multi-plateformes. Chaque lancement a éclaté un seul brief en 2 à 4 campagnes par plateforme. Renvoie le launch_group_id, le nom de haut niveau, l'objectif abstrait, le nombre de plateformes et le budget quotidien total sur toutes les plateformes.
scope: ads:read -
ads.launches.getREADRécupère un groupe de lancement multi-plateformes avec ses sous-campagnes + les métriques agrégées sur 7 jours (impressions, clics, dépense, conversions) sur toutes les plateformes.
scope: ads:read -
ads.campaign.updateWRITE-safeMet à jour les champs d'une campagne Ads.
scope: ads:write -
ads.campaign.pauseWRITE-safeMet en pause une campagne Ads.
scope: ads:write -
ads.campaign.resumeWRITE-safeRelance une campagne Ads en pause.
scope: ads:write -
ads.campaign.deleteDESTRUCTIVESupprime une campagne Ads.
scope: ads:delete
agent.*
-
agent.weekly_studio_publishWRITE-safe AGENTPublie tous les brouillons Studio approuvés sur les canaux demandés (LinkedIn / TikTok / Instagram / YouTube). Limites par canal. Continue en cas d'échec partiel et renvoie le détail par canal.
scope: * -
agent.process_inbound_leadWRITE-safe AGENTTraite un lead entrant (URL LinkedIn ou email) : enrichit via Apollo + Apify, upsert le contact, crée un deal d'opportunité, l'inscrit dans la séquence de bienvenue. Continue malgré les échecs best-effort (ex. timeout Apify).
scope: * -
agent.monthly_invoice_runDESTRUCTIVE AGENTGénère + envoie les factures mensuelles récurrentes pour tous les clients en régie actifs d'un workspace. Idempotent sur (workspace_id, billing_month). dry_run=true renvoie la liste sans créer de factures.
scope: * -
agent.seo_autopilotWRITE-safe AGENTLance l'autopilot de contenu SEO pour ce workspace : recharge le pool de sujets depuis les opportunités Search Console, met en file selon la cadence hebdo, génère les articles en file, et (seulement si l'auto-publication est activée) les approuve et les publie. Renvoie les compteurs. Ne fait rien si l'autopilot est désactivé.
scope: seo:write -
agent.relance_impayesDESTRUCTIVE AGENTPour chaque facture en retard : classe la sévérité (1=légère, 2=moyenne, 3=recouvrement), choisit le modèle, envoie l'email de relance.
scope: * -
agent.bulk_enrich_contactsWRITE-safe AGENTMet en file des scrapes de profils LinkedIn (Apify) pour des contacts en masse. Filtre par lifecycle_stage ou liste d'ids. Idempotent : ignore les contacts ayant déjà un scrape en cours.
scope: * -
agent.daily_briefingREAD AGENTAgrège la veille : nouveaux contacts/deals/publications/paiements/inbox. Renvoie un briefing en markdown.
scope: * -
agent.send_dm_in_voiceWRITE-safe AGENTRédige un DM dans le profil de voix de l'utilisateur et le dépose comme réponse suggérée dans le fil inbox (l'humain valide/envoie).
scope: *
agents.*
-
agents.get_runREADRécupère le status et le résultat d'un run d'agent en arrière-plan lancé dans ce workspace.
scope: agents:read -
agents.dispatchWRITE-safeDélègue une tâche à un agent en arrière-plan dans ce workspace. Retourne un run_id. L'agent s'exécute de manière asynchrone avec accès aux données et aux outils du workspace, interroge agents.get_run pour son status et son résultat. Le run est en LECTURE SEULE : pour qu'un agent écrive sans surveillance, il faut une définition d'agent portant une liste d'outils déclarée par un humain, pas un dispatch.
scope: agents:dispatch
ai.*
-
ai.set_instructionsWRITE-safeDéfinit les instructions IA globales du workspace (Cerveau IA — la couche de voix ajoutée à chaque génération: DM, posts, pages, emails). language est une langue forcée optionnelle (vide = s'adapte à l'audience). enabled=false désactive entièrement la couche. Sauver le défaut plateforme inchangé efface l'override pour continuer à suivre les futures mises à jour du défaut.
scope: settings:write
analytics.*
-
analytics.summaryREADRésumé business cross-canal sur une fenêtre : dépense ads + funnel de leads (leads, appels, revenu) + résultats de bookings + revenu total. Renvoie les ratios dérivés (CPL, CAC, close rate, ROAS, ROI mixé). L'outil en un appel pour répondre 'comment tourne le business ce mois'.
scope: analytics:read -
analytics.callsREADAnalytics des appels sur une fenêtre (7d/30d/90d/ytd) : appels de la période vs la précédente (par status) plus les bookings générés. Complète analytics.summary avec le canal d'appels.
scope: analytics:read -
analytics.conversationsREADAnalytics Inbox / conversations sur une fenêtre : volumes, temps de réponse et résultats par canal. La vue DM + messagerie du business.
scope: analytics:read -
analytics.linksREADAnalytics des liens trackés sur une fenêtre : clics par lien court (les redirections /r/<code>) pour voir lesquels performent. Pour répondre à 'quels liens marchent'.
scope: analytics:read -
analytics.trafficREADKPIs de trafic du site sur les N derniers jours : sessions, visiteurs, conversions et revenu suivis sur le site du workspace. La vue audience (distincte de analytics.summary, qui est le funnel ads → leads → cash).
scope: analytics:read -
analytics.exec_summaryREADRésumé analytics exécutif sur une fenêtre (7d/30d/90d/ytd) : les métriques de santé clés du workspace en un appel.
scope: analytics:read -
analytics.funnelREADÉtapes du funnel de conversion sur une fenêtre (7d/30d/90d/ytd) : le volume à chaque étape (visiteurs → leads → appels → clients) pour voir où les prospects décrochent.
scope: analytics:read -
analytics.geoREADRépartition géographique de l'audience du workspace sur une fenêtre (7d/30d/90d/ytd) : sessions/visiteurs par pays. Répond à 'd'où vient mon trafic'.
scope: analytics:read
api_keys.*
-
api_keys.listREADListe les clés API (fos_sk_live_...) du workspace courant. Retourne uniquement les métadonnées, les tokens en clair ne sont jamais lisibles après création.
scope: api_keys:read -
api_keys.createDESTRUCTIVECrée une clé API longue durée pour le workspace courant. Le token en clair est retourné UNE SEULE FOIS dans cette réponse, stocke-le immédiatement. Les scopes valent ["read:*"] par défaut et s'énumèrent, par exemple ["read:*", "write:contacts"] ; le joker "*" est refusé. Passe site_id pour une clé qui parle au nom d'un site, ce qu'exigent les routes /v1/end-user.
scope: api_keys:write -
api_keys.revokeDESTRUCTIVERévoque une clé API par id. Met revoked_at = now. Les appels suivants avec le token révoqué retournent 401. Idempotent.
scope: api_keys:write
autonomy.*
-
autonomy.getREADRécupère la politique d'autonomie du copilot pour ce workspace : mode (observe/propose/scoped/autonomous), domaines où il peut agir seul, domaines toujours sous validation, plafond de dépense autonome quotidien, cadence et canal de compte rendu. Renvoie un défaut fail-closed (propose) si rien n'est configuré.
scope: autonomy:read -
autonomy.setWRITE-safeDéfinit la politique d'autonomie du copilot, CE QUE le copilot peut faire seul. mode : observe (n'agit jamais), propose (demande toujours), scoped (agit seul uniquement sur auto_domains), autonomous (agit seul sauf always_confirm_domains). auto_domains/always_confirm_domains sont des préfixes de module (ex. 'email','contacts'). daily_spend_cap_cents borne la dépense autonome (0 = aucune). Les domaines sensibles (billing, payments, counsel, team) exigent toujours une validation. À ne changer que sur demande explicite de l'utilisateur.
scope: autonomy:write
billing.*
-
billing.get_subscriptionREADRécupère l'état actuel de l'abonnement Freelance OS de ce workspace : plan, status, trial_end, fin de période, cancel_at_period_end.
scope: billing:read -
billing.get_usageREADRécupère le résumé d'usage de la période courante (service, quota inclus, utilisé, coût estimé du dépassement) pour ce workspace.
scope: billing:read -
billing.get_accountREADRécupère le compte de facturation qui paie ce workspace (un utilisateur possède N comptes, chacun payant N workspaces). Renvoie le propriétaire, le client Stripe, le moyen de paiement (marque/4 derniers chiffres/expiration). La liste des workspaces facturés par le même compte n'est renvoyée qu'au propriétaire du compte (viewer_is_owner=true) ; les invités ne voient que le workspace courant.
scope: billing:read -
billing.list_my_accountsREADListe les comptes de facturation de l'utilisateur courant (un utilisateur possède N comptes, un par entité payeuse ; chacun paie N workspaces). Retourne id, nom, billing_email, présence d'une carte, et le nombre de workspaces facturés par chacun. Utilise billing.create_account / rename_account / assign_workspace / delete_account / open_account_portal pour les gérer.
scope: billing:read -
billing.upgrade_checkoutWRITE-safeCrée une session Stripe Checkout pour faire passer ce workspace en Pro (essai de 14 jours, CB requise). Retourne l'URL Checkout hébergée, ouvre-la dans un navigateur pour finaliser le paiement.
scope: billing:write -
billing.open_portalWRITE-safeOuvre une session Stripe Customer Portal pour ce workspace (mettre à jour la carte, changer de plan, annuler). Retourne l'URL du portail.
scope: billing:write -
billing.open_user_portalWRITE-safeOuvre une session Stripe Customer Portal pour le Billing Account de l'utilisateur courant (cross-workspace : chaque abonnement payé par la même carte est gérable depuis un seul portail). À utiliser quand l'utilisateur veut mettre à jour sa carte une seule fois pour tous les workspaces dont il est propriétaire.
scope: billing:write -
billing.create_accountWRITE-safeCrée un nouveau compte de facturation pour l'utilisateur courant (un par entité payeuse, ex. une société). Un utilisateur possède N comptes, chacun avec son propre client Stripe et sa carte, chacun pouvant payer N workspaces. Retourne l'id du nouveau compte.
scope: billing:write -
billing.rename_accountWRITE-safeRenomme un des comptes de facturation de l'utilisateur courant. Réservé au propriétaire. Nom de 2 à 80 caractères.
scope: billing:write -
billing.assign_workspaceWRITE-safeAffecte le workspace COURANT à un des comptes de facturation de l'utilisateur (change l'entité qui le paie). L'utilisateur doit posséder le workspace et le compte. Pour en déplacer un autre, bascule dessus d'abord. Refusé tant que le workspace a un abonnement actif, annule-le d'abord (déplacer un abonnement Stripe vivant entre clients ne se fait pas ici).
scope: billing:write -
billing.delete_accountWRITE-safeSupprime un des comptes de facturation de l'utilisateur. Réservé au propriétaire. Refusé tant qu'un workspace y est rattaché (réaffecte-les d'abord). Le client Stripe est conservé pour garder l'accès aux factures passées.
scope: billing:write -
billing.open_account_portalWRITE-safeOuvre une session Stripe Customer Portal pour un compte de facturation PRÉCIS de l'utilisateur (gérer/ajouter sa carte, l'adresse de facturation). Réservé au propriétaire. Crée le client Stripe si besoin, donc marche même pour un compte tout neuf. Retourne l'URL du portail.
scope: billing:write
booking.*
-
booking.revenue_attributionREADRenvoie l'attribution de revenu des bookings sur une période : total des bookings, complétés, annulés, no-show, revenu attribué aux contacts ayant eu un booking + une transaction réussie dans la fenêtre. La métrique business clé pour un dev freelance qui vit des appels jusqu'à la vente.
scope: booking:read -
booking.closer_performanceREADPerformance commerciale par closer (le cockpit closer) : leads captés, bookings, taux de présence, close rate, cash encaissé et commission gagnée sur une période, plus les totaux du workspace. Répond à 'comment vont mes closers' / 'qui convertit'. Le cash est attribué en associant une transaction payée au prospect assigné du closer.
scope: booking:read -
booking.event_types.listREADListe les types d'événements réservables dans le workspace.
scope: booking:read -
booking.bookings.listREADListe les bookings (filtrables par status, since).
scope: booking:read -
booking.bookings.list_detailedREADListe détaillée et paginée des bookings avec nom / email / fuseau horaire de l'invité / type d'événement lié / hôte. À utiliser quand la liste simple ne donne pas assez de contexte.
scope: booking:read -
booking.bookings.getREADRécupère un booking de l'hôte appelant : status, invité, type d'événement lié, lien de réunion et créneau planifié. Renvoie not_found pour le booking d'un autre hôte.
scope: booking:read -
booking.pages.listREADListe les pages de réservation du workspace (modèle multi-pages) : slug, nom affiché, mode d'affichage (person/entity), mode d'assignation (fixed/round_robin/routing), si elle est publique, et le site auquel elle est rattachée. Pour répondre à 'quelles pages de réservation j'ai'.
scope: booking:read -
booking.pages.getREADRécupère une page de réservation par son id, avec les ids des types de RDV attachés (les types de rendez-vous proposés sur cette page). Renvoie not_found pour une page d'un autre workspace.
scope: booking:read -
booking.event_type.updateWRITE-safeMet à jour un type d'événement de booking (nom, durée, état actif).
scope: booking:write -
booking.pages.createWRITE-safeCrée une page de réservation (modèle multi-pages) avec seulement un slug + un nom affiché ; le reste (bio, avatar, mode d'affichage/d'assignation, visibilité, types de RDV attachés) prend ses valeurs par défaut et s'édite ensuite avec booking.pages.update. Une nouvelle page est en person / fixed et N'EST PAS publique. Le slug doit être unique dans le workspace. Renvoie l'id de la nouvelle page.
scope: booking:write -
booking.pages.updateWRITE-safeMet à jour l'identité d'une page de réservation (nom affiché, bio, avatar), son mode d'affichage (person/entity), son mode d'assignation (fixed/round_robin/routing), sa visibilité publique, et le site auquel elle est rattachée (site_id, ou null pour un lien direct). Le site est vérifié appartenir à ce workspace. Renvoie not_found pour une page d'un autre workspace. Utilise booking.page.set_event_types pour changer les types de RDV proposés.
scope: booking:write -
booking.page.set_event_typesWRITE-safeRemplace la liste des types de RDV proposés sur une page de réservation, dans l'ordre donné. Tout id de type de RDV qui n'appartient pas à ce workspace est ignoré, jamais attaché. Passe une liste vide pour tout retirer. Renvoie not_found pour une page d'un autre workspace.
scope: booking:write -
booking.event_type.deleteDESTRUCTIVESupprime un des types d'événement de réservation de l'hôte appelant. Irréversible.
scope: booking:delete -
booking.pages.deleteDESTRUCTIVESupprime une page de réservation (modèle multi-pages) par son id. La page est une simple surface, jamais référencée par les RDV, donc la supprimer n'orpheline aucun rendez-vous. Scopé au workspace appelant : renvoie not_found pour une page d'un autre workspace. Irréversible.
scope: booking:write -
booking.availability.getREADRécupère la disponibilité de booking de l'utilisateur appelant : les règles hebdomadaires récurrentes (jour + début/fin + fuseau) et les exceptions de dates (jours fermés / horaires spéciaux). Scopé au calendrier de l'appelant.
scope: booking:read -
booking.availability.set_rulesWRITE-safeRemplace la disponibilité hebdomadaire récurrente de l'utilisateur appelant par un nouveau jeu de règles (chacune : weekday 0-6 où 0=dimanche, start_time et end_time en 'HH:MM'). ÉCRASE toutes les règles hebdomadaires existantes. Scopé au calendrier de l'appelant.
scope: booking:write -
booking.availability.add_overrideWRITE-safeAjoute une exception de date au calendrier de l'utilisateur appelant : soit fermer une date précise (is_closed=true), soit définir des horaires spéciaux (is_closed=false + start_time/end_time 'HH:MM'). Scopé au calendrier de l'appelant.
scope: booking:write -
booking.availability.delete_overrideWRITE-safeRetire une exception de date du calendrier de l'utilisateur appelant par son id. Scopé au calendrier de l'appelant.
scope: booking:write -
booking.cancelWRITE-safeAnnule un rendez-vous confirmé par son id (le trouver d'abord via booking.bookings.list). Déroule tout : statut annulé, suppression de l'événement agenda, et email d'annulation à l'invité. Scopé au calendrier de l'appelant. Donne une raison courte si l'utilisateur en fournit une. Irréversible.
scope: booking:write -
booking.mark_statusWRITE-safeMarque un rendez-vous passé comme 'no_show' (l'invité n'est pas venu) ou 'completed' (l'appel a eu lieu), par son id. Le trouver via booking.bookings.list. Scopé au calendrier de l'appelant. Aucun email envoyé. Utilise booking.cancel (pas ceci) pour annuler un rendez-vous à venir.
scope: booking:write
brand.*
-
brand.save_theme_wizardWRITE-safeEnregistre le design system du workspace en un seul appel : preset de vibe + couleur d'accent + typographie + radius + densité. Compile le bundle complet de tokens (color/font/radius/shadow + layout) et l'écrit dans workspace_theme. Reflète l'accent dans workspaces.brand_color.
scope: settings:write
business.*
-
business.coupons.deleteDESTRUCTIVESupprime définitivement un coupon (scopé workspace). Refusé si le coupon a déjà été utilisé, pour préserver l'historique des transactions — mets-le en pause à la place. Irréversible.
scope: business:delete -
business.coupons.listREADListe les coupons de réduction du workspace : code, type/valeur de remise, nombre d'utilisations, fenêtre de validité et status. Répond à 'quels codes promo j'ai'.
scope: business:read -
business.referral.overviewREADVue d'ensemble du programme de parrainage : la config du programme (status, récompenses, déclencheur de paiement) plus les compteurs agrégés d'événements par status et les paiements en attente. Répond à 'comment tourne mon parrainage'.
scope: business:read -
business.referral.leaderboardREADLeaderboard de parrainage : par parrain, les visites, signups, conversions, revenu et récompense sur tout l'historique, trié par récompense/conversions/visites/signups/revenu. Répond à 'qui sont mes meilleurs parrains'.
scope: business:read -
business.coupons.createWRITE-safeCrée un coupon de réduction pour le workspace. code normalisé en MAJUSCULES (unique par workspace). discount_type : 'percentage' (discount_value = 0-100), 'fixed_amount' (discount_value = montant dans la plus petite unité de la devise, ex. 2000 = 20€), ou 'free_trial'. Créé en 'draft' par défaut — mets status:'active' pour le rendre utilisable tout de suite. max_redemptions et valid_until (date ISO) optionnels. Répond à 'crée un code promo'.
scope: business:write -
business.coupons.updateWRITE-safeMet à jour un coupon existant par id (scopé workspace). Chaque champ fourni est patché ; omets un champ pour le laisser inchangé. Utilise status pour activer ('active'), mettre en pause ('disabled') ou repasser en 'draft'. Répond à 'modifie / active / suspends un code promo'.
scope: business:write -
business.referral.update_programWRITE-safeMet à jour la config du programme de parrainage du workspace : status ('active' / 'paused' / 'archived'), récompense parrain (cash en cents ou pourcentage), récompense filleul, déclencheur de paiement, fenêtre cookie et paiement minimum. Crée le programme s'il n'existe pas. Répond à 'configure / modifie mon parrainage'.
scope: business:write
calendar.*
-
calendar.agendaREADL'agenda du workspace sur une période : tous les items datés fusionnés et triés — tâches et échéances dues, rendez-vous planifiés, posts programmés ou à vérifier, personnes à appeler, relances, factures à échéance, webinars. À UTILISER pour 'qu'est-ce que j'ai au calendrier / cette semaine / qu'est-ce qui est dû'. Ne renvoie que les domaines que l'appelant peut lire.
scope: calendar:read
classes.*
-
classes.createWRITE-safeCrée une classe de style nommée et réutilisable (façon Webflow). Donne un nom et un BlockStyle optionnel (base/hover/focus/active/sm/md/lg). Retourne l'id de la classe. Applique-la aux éléments avec classes.apply, puis classes.update l'édite une seule fois pour tous les éléments qui la portent.
scope: pages:write -
classes.listWRITE-safeListe les classes de style du workspace (id, name, style, updated_at), la plus récemment éditée en premier.
scope: pages:write -
classes.updateWRITE-safeÉdite une classe de style — c'est le chemin édite-une-fois-tout-suit. Change son nom et/ou son BlockStyle ; tous les éléments qui la portent suivent au prochain rendu. Au moins un de name/style doit être fourni.
scope: pages:write -
classes.deleteWRITE-safeSupprime une classe de style. Elle se détache automatiquement : les ids restés sur les éléments sont ignorés au rendu (aucune règle émise) et nettoyés au prochain enregistrement de page.
scope: pages:write -
classes.applyWRITE-safeApplique une classe à un bloc élément : ajoute l'id de la classe aux classIds du bloc (idempotent, ordre préservé, plafonné à 20). Le bloc doit être un `element` du même workspace. Modifie le brouillon ; la page en ligne change au prochain publish.
scope: pages:write
collections.*
-
collections.listREADListe les collections de contenu du workspace avec leur id, nom, slug public et statut.
scope: collections:read -
collections.getREADRécupère une collection avec ses champs ordonnés (le schéma). Résolution par id ou slug.
scope: collections:read -
collections.recordsREADListe les entrées d’une collection avec leur contenu. Filtrable par statut.
scope: collections:read -
collections.plansREADListe les plans d’abonnement end-user du workspace (nom, prix, cadence, statut, si synchronisé à Stripe).
scope: collections:read -
collections.subscriptionsREADListe les abonnements end-user du workspace avec l’email du client, le nom du plan et le statut (qui est abonné à quoi).
scope: collections:read -
collections.revenueREADLe revenu récurrent end-user du workspace : MRR par devise (plans annuels ramenés au mois) plus le nombre d’abonnements actifs, en essai, en échec de paiement et se terminant bientôt.
scope: collections:read -
collections.createWRITE-safeCrée une collection de contenu en BROUILLON avec ses champs (le schéma). Ne publie jamais automatiquement, appelle collections.set_status pour publier. Marque un champ is_title pour le nom affiché.
scope: collections:write -
collections.set_statusWRITE-safePublie, dépublie (retour en brouillon) ou archive une collection.
scope: collections:write -
collections.add_recordWRITE-safeAjoute une entrée à une collection. `data` est indexé par clé de champ et validé contre le schéma. Créé en brouillon sauf si un statut est fourni.
scope: collections:write -
collections.set_record_statusWRITE-safePublie, dépublie (retour en brouillon) ou archive une entrée de collection.
scope: collections:write -
collections.create_planWRITE-safeCrée un plan d’abonnement end-user pour l’app du workspace. Synchronise un Stripe Price récurrent sur le compte connecté si Stripe est connecté (sinon le plan est créé mais pas encore souscriptible).
scope: collections:write -
collections.set_plan_statusWRITE-safeArchiver ou réactiver un plan d’abonnement end-user. Les plans archivés restent pour l’historique mais disparaissent des tarifs publics (seuls les plans actifs sont publics).
scope: collections:write -
collections.update_plan_pricingWRITE-safeChange le prix, la devise ou la cadence d’un plan end-user. Un Stripe Price est immuable, donc un nouveau Price est créé et le plan y est repointé : les abonnés existants gardent leur prix, les nouveaux checkouts prennent le nouveau. amount_cents est dans la plus petite unité (ex. 2500 = 25,00 EUR).
scope: collections:write
contacts.*
-
contacts.listREADListe les contacts du workspace courant, filtrables par lifecycle_stage / source / q (texte libre) / country / city / role (intitulé de poste ou headline) / company / icp_score_min / icp_score_max / has_linkedin / has_email / created_after / created_before (ISO). Renvoie les lignes correspondantes (avec company / role / country / icp_score). Pour répondre à "combien", utilise plutôt contacts.count, ne pagine pas pour compter à la main.
scope: contacts:read -
contacts.countREADCompte les contacts correspondant à un filtre structuré (lifecycle_stage / source / q (texte libre) / country / city / role (intitulé de poste ou headline) / company / icp_score_min / icp_score_max / has_linkedin / has_email / created_after / created_before (ISO).) SANS renvoyer les lignes. L'outil pour "combien de contacts sont <critères>" (ex. développeurs en France avec icp_score >= 70). Un appel, compte exact, jamais lister puis compter de tête.
scope: contacts:read -
contacts.getREADRécupère un contact par id (doit appartenir au workspace courant). Renvoie l'identité de facturation reprise sur les factures (société, SIRET, numéro de TVA, adresse postale), que les outils de liste ne portent pas.
scope: contacts:read -
contacts.get_360READVue 360 du prospect : contact (avec icp_score) + conversations récentes + bookings + audits + deals + le brief outreach IA (hook/pain/belief/CTA + faits utilisés).
scope: contacts:read -
contacts.searchREADRecherche des contacts par sous-chaîne email/nom/linkedin.
scope: contacts:read -
contacts.hottestREADLes contacts à traiter en priorité, classés par un score d'intent composite (réponses/bookings/ouvertures mail + étape funnel + fit ICP + récence), top N en UN seul appel. mode 'hot' = contacts engagés à closer ; 'cold_fit' = fort fit ICP pas encore engagés, à prospecter. À UTILISER pour 'qui contacter en priorité / le plus susceptible d'acheter' — ne jamais boucler sur contacts.get_360. Chaque contact renvoie hotness, why_hot, l'accroche en cache (le message à envoyer) + opener_status, le canal + linkedin_url/email, et le détail des composantes. Pour agir : présente l'accroche et propose un bouton ui.link_action vers le linkedin_url du contact (envoi assisté — l'utilisateur relit et envoie ; ne prétends jamais avoir envoyé).
scope: contacts:read -
contacts.paying_customersREADListe les contacts qui ont payé sur la période, triés par montant total décroissant. Joint prospects.email avec transactions.email pour récupérer le contact_id quand il est présent. Utile pour un agent qui répond 'qui m'a acheté' ou pour déclencher des workflows de relance.
scope: contacts:read -
contacts.interactions.listREADListe les interactions journalisées (appels, emails, rdv, notes...) d'un contact, plus récentes d'abord. La timeline écrite par contacts.log_interaction. À UTILISER pour 'quel est l'historique avec X / quand ai-je parlé à Y la dernière fois'.
scope: contacts:read -
contacts.log_interactionWRITE-safeJournalise une interaction réelle avec un contact sur sa timeline (un appel, un email, un rdv, un message...). À UTILISER pour 'note que j'ai appelé X / log mon rdv avec Y' — ça ajoute une entrée horodatée, ça n'écrase PAS les notes du contact. kind vaut 'note' par défaut. occurred_at vaut maintenant par défaut (passe une date ISO pour une interaction passée). Trouve l'id du contact via contacts.search d'abord.
scope: contacts:write -
contacts.upsertWRITE-safeCrée ou met à jour un contact (par id, email ou linkedin_url), y compris l'identité de facturation reprise sur les factures : société, SIRET, numéro de TVA et adresse postale.
scope: contacts:write -
contacts.enrichWRITE-safeMet en file un scrape de profil LinkedIn pour un contact (via Apify). Idempotent : réutilise un job en cours s'il en existe déjà un.
scope: contacts:write -
contacts.tagWRITE-safeAjoute un tag à un contact.
scope: contacts:write -
contacts.deleteDESTRUCTIVESupprime définitivement un contact et toutes ses données liées. Irréversible.
scope: contacts:delete
conversations.*
-
conversations.transcripts.listREADListe les enregistrements d'appels de ce workspace : réunions Fathom et appels vocaux Twilio, unifiés. Chaque élément porte provider, summary, durée, URL d'enregistrement et recording id.
scope: conversations:read -
conversations.transcripts.getREADRécupère la transcription d'un enregistrement d'appel par id (summary + tours Fathom ou segments vocaux diarisés). id est le transcript id renvoyé par conversations.transcripts.list.
scope: conversations:read -
conversations.note.createWRITE-safeAjoute une note à la transcription d'une conversation.
scope: conversations:write
copilot.*
-
copilot.briefingREADLe point proactif 'que dois-je faire maintenant' : les actions prioritaires entre contacts chauds à contacter, rendez-vous à préparer, tâches ouvertes, et factures impayées à relancer. À UTILISER pour 'que faire aujourd'hui / fais le point / où on en est'. Chaque item porte un compte + l'outil pour agir. Ne renvoie que ce que l'appelant a le droit de voir.
scope: agents:read -
copilot.plan.previewREADDécompose un plan multi-étapes face à la policy d'autonomie du workspace AVANT de l'exécuter. Donne les actions ordonnées que tu comptes lancer (tool_name + domain + un libellé court). Renvoie, par action, si elle tourne automatiquement, si elle est couverte par une unique validation de plan en tête (bulk), si elle garde sa propre approbation dédiée (fort enjeu : billing/payments/counsel/team), ou si elle est bloquée par la policy courante. Renvoie aussi le texte d'approbation prêt à afficher qui regroupe les actions bulk. À UTILISER avant de lancer un playbook ou toute suite d'écritures, pour que l'utilisateur valide UNE fois au lieu d'une modale par étape. Aperçu seulement : ne change rien.
scope: autonomy:read -
copilot.askWRITE-safePose une question au copilote du workspace et récupère la réponse complète en synchrone. S'exécute en lecture seule sur les données et outils du workspace. Tu peux joindre des images ou PDF par URL, le copilote les lit (vision / document). Pour un travail autonome long pouvant écrire, utilise plutôt agents.dispatch.
scope: agents:dispatch
counsel.*
-
counsel.legal_entity.getREADLit l'identité de l'ÉMETTEUR du workspace : dénomination, forme juridique, SIREN/SIRET, numéro de TVA, adresse du siège, IBAN/BIC et conditions de paiement par défaut, c'est-à-dire tout ce qui DOIT figurer sur chaque facture, devis et contrat émis. Renvoie `configured` (l'entité a-t-elle déjà été remplie) et `missing_for_invoicing` (les champs obligatoires encore vides). À APPELER AVANT de créer ou d'envoyer une facture, un devis ou un contrat : sans ça les documents ne sont pas conformes, et rien d'autre dans l'API ne te préviendra. C'est aussi ici qu'on lit l'IBAN quand un client demande comment payer par virement.
scope: counsel:read -
counsel.quotes.listREADListe les devis Counsel.
scope: counsel:read -
counsel.invoices.listREADListe les factures Counsel.
scope: counsel:read -
counsel.invoice.einvoicing_statusREADStatut de transmission (Plateforme Agréée) d'une facture Counsel.
scope: counsel:read -
counsel.received.listREADListe les factures fournisseurs reçues via la Plateforme Agréée (réception).
scope: counsel:read -
counsel.revenue.summaryREADRevenu total des transactions réussies sur une fenêtre. Ventile par semaine et donne les meilleurs clients contributeurs (email + total). Permet à un agent de répondre 'combien j'ai encaissé ce mois' en un seul appel.
scope: counsel:read -
counsel.contracts.getREADRécupère un contrat Counsel avec son corps, ses signataires et le contact lié.
scope: counsel:read -
counsel.contracts.templates_listREADListe les modèles de contrat disponibles pour le workspace (les siens + les presets), avec leur corps.
scope: counsel:read -
counsel.contracts.previewREADRend le corps d'un contrat avec ses variables résolues, tel que le client le lira. Passe un id de contrat, ou du markdown brut pour tester.
scope: counsel:read -
counsel.legal_entity.upsertWRITE-safeRenseigne ou met à jour l'identité de l'ÉMETTEUR du workspace, celle qui figure sur chaque facture, devis et contrat : dénomination, forme juridique, SIREN/SIRET, numéro de TVA, adresse du siège, IBAN/BIC, conditions de paiement par défaut. Mise à jour partielle : les champs omis gardent leur valeur, on peut donc remplir l'IBAN seul sans renvoyer l'adresse. `legal_name` n'est obligatoire qu'à la première écriture. SIREN, SIRET, TVA, IBAN et BIC acceptent les espaces, ils sont normalisés. Appelle counsel.legal_entity.get d'abord pour voir ce qui manque.
scope: counsel:write -
counsel.contract.set_payment_scheduleWRITE-safeDéfinit l'échéancier de paiement du contrat, c'est-à-dire les échéances qui deviennent chacune une facture à la signature. C'est comme ça qu'on gère un acompte et un solde, pas en créant des factures isolées à la main. Chaque entrée porte un libellé, un type (acompte, facture ou solde), un montant en centimes TTC, une devise et un délai en jours à compter de la signature. À la signature les factures sont créées automatiquement et la première est finalisée et envoyée. Une seule entrée peut avoir delay_days à 0, sinon deux demandes de paiement partent en même temps. Uniquement sur un contrat en brouillon : une fois envoyé, le client a lu ces conditions. Passe un échéancier vide pour l'effacer. mode est le mode de collecte, manual (un lien de paiement par échéance) est le bon pour un client qui paie par virement.
scope: counsel:write -
counsel.payment.record_external_refundWRITE-safeEnregistre un remboursement que tu as DÉJÀ fait en dehors du prestataire de paiement : un virement retour au client, un chèque, des espèces. Aucun argent ne bouge ici, le virement est déjà parti de ta banque. Ceci inscrit le remboursement au registre, émet l'avoir que le client reçoit, et cesse de compter l'encaissement dans ton chiffre d'affaires. Passe reference avec le numéro du virement ou du chèque, c'est ce qui relie la ligne à ton relevé bancaire. Sans amount_cents, enregistre un remboursement total. À UTILISER pour « je l'ai remboursé par virement ». Pour un paiement par carte que Kernel doit rendre lui-même, utilise counsel.payment.refund.
scope: counsel:refund -
counsel.invoice.repairWRITE-safeComplète une facture numérotée sans être passée par la finalisation : renseigne l'instantané de l'émetteur (raison sociale, SIRET, adresse, IBAN), crée sa page publique et son lien de paiement, régénère le PDF. N'envoie rien. À utiliser quand un client signale un PDF sans coordonnées bancaires ni moyen de payer. Ne touche ni au numéro, ni aux dates, ni au statut : c'est ce que le client a déjà reçu.
scope: counsel:write -
counsel.invoice.resendWRITE-safeRenvoie par email une facture Counsel déjà envoyée, avec son PDF en pièce jointe. À utiliser quand le premier envoi n'est pas arrivé, ou quand le client redemande un exemplaire. `counsel.invoice.send` refuse une facture qui porte déjà son numéro : c'est cet outil-là pour ce cas. Répond si le fournisseur a accepté l'email.
scope: counsel:write -
counsel.contract.suspend_collectionWRITE-safeArrête les prélèvements automatiques à venir d'un contrat SIGNÉ, de façon réversible. Rien n'est annulé et aucune date n'est perdue : les échéances gardent leur date d'échéance, seul le prélèvement automatique est désarmé, et counsel.contract.resume_collection le réarme sur ces mêmes dates. C'est le geste tant que la discussion avec le client est ouverte, avant que quoi que ce soit ne soit décidé. Pour mettre fin au contrat, utilise counsel.contract.terminate.
scope: counsel:write -
counsel.contract.resume_collectionWRITE-safeRéarme les prélèvements automatiques d'un contrat suspendu par counsel.contract.suspend_collection. Chaque échéance est réarmée sur la date d'échéance signée par le client, jamais repoussée : une échéance déjà dépassée est prélevée au prochain passage du cron, exactement comme elle l'aurait été sans la suspension.
scope: counsel:write -
counsel.contract.link_quoteWRITE-safeRattache un devis à un contrat, ou le détache en passant contract_id à null. Un contrat peut porter PLUSIEURS devis : celui dont il est issu, plus tous ceux signés ensuite sous le même contrat cadre. À utiliser quand un client déjà sous contrat valide une nouvelle prestation, plutôt que de créer un second contrat. Le devis et le contrat doivent appartenir à ce workspace, un id étranger est refusé et pas ignoré en silence.
scope: counsel:write -
counsel.invoice.record_paymentWRITE-safeEnregistre un paiement reçu sur une facture EN DEHORS de Stripe : un virement, un chèque, des espèces. Passe amount_cents pour un règlement partiel (la facture passe en partially_paid et garde son reste à payer), ou omets-le pour solder ce qui reste dû. Passe paid_at avec la date de VALEUR du virement, pas le jour de la saisie : c'est cette date qui part dans le revenu et rattache le montant au bon exercice. reference conserve le numéro de virement ou de chèque pour le rapprochement bancaire. Refuse un montant supérieur au reste dû, une facture déjà soldée et une facture annulée. À UTILISER pour « le client a payé par virement », « marque l'acompte comme reçu », « il a payé la moitié ». Pas pour un paiement Stripe, que le webhook enregistre tout seul.
scope: counsel:write -
counsel.quote.createWRITE-safeCrée un devis Counsel en brouillon. PRÉFÈRE `lines` : elles portent la TVA et le détail que lit le destinataire. `amount_cents` seul enregistre le devis en HT = TTC SANS TVA, ce qu'un workspace assujetti ne peut pas envoyer légalement et qui contredira un contrat annonçant un prix TTC. `body_md` est le texte affiché sur la page publique du devis, le seul endroit où le client lit ce qui est compris. Corrige un brouillon avec counsel.quote.update, puis envoie avec counsel.quote.send.
scope: counsel:write -
counsel.quote.updateWRITE-safeCorrige un devis en BROUILLON : titre, lignes, corps, validité, contrat lié. Passer `lines` remplace toute la liste et recalcule HT, TVA et TTC. Un devis envoyé est immuable, le client l'a déjà lu. Les champs omis restent inchangés.
scope: counsel:write -
counsel.quote.sendWRITE-safeEnvoie un devis Counsel au contact (status → sent).
scope: counsel:write -
counsel.invoice.createWRITE-safeCrée une facture Counsel.
scope: counsel:write -
counsel.invoice.sendWRITE-safeFinalise et ENVOIE une facture Counsel en brouillon à son destinataire : alloue le numéro légal, rend le PDF et l'envoie par email. Répond si l'email a bien été accepté par le fournisseur. Uniquement sur un brouillon : une facture déjà envoyée garde son numéro, elle se renvoie depuis l'écran de la facture.
scope: counsel:write -
counsel.contracts.createWRITE-safeCrée un contrat en brouillon. Part d'un modèle (template_head_id) ou d'un body_md. Les signataires peuvent être ajoutés maintenant ou plus tard ; l'envoi reste une action manuelle dans l'app.
scope: counsel:write -
counsel.contracts.updateWRITE-safeMet à jour un contrat en BROUILLON (titre, corps, client, signataires). Un contrat envoyé ou signé est immuable. Les champs omis ne bougent pas ; passer signers remplace toute la liste. Pour changer un seul passage, utilise body_replace {find, replace} plutôt que de renvoyer tout le corps : il refuse si le passage est absent ou présent deux fois, donc une ancre périmée échoue bruyamment. Le PDF stocké est régénéré après toute modification.
scope: counsel:write -
counsel.contracts.save_as_templateWRITE-safeEnregistre le corps d'un contrat comme modèle réutilisable et publié. Les variables sont conservées telles quelles pour se résoudre sur le client suivant.
scope: counsel:write -
counsel.invoice.cancelDESTRUCTIVEAnnule une facture Counsel (status → cancelled).
scope: counsel:delete -
counsel.payment.refundDESTRUCTIVERembourse une facture Counsel encaissée, via le prestataire de paiement. L'argent part réellement. Sans amount_cents, rembourse tout ce qui reste remboursable ; avec, rembourse partiellement. L'avoir suit l'événement du prestataire, il n'est pas émis ici.
scope: counsel:refund -
counsel.contract.terminateDESTRUCTIVEMet fin à un contrat signé : annule toutes les échéances qui restaient à encaisser et inscrit la date et le motif sur le contrat. L'argent déjà payé n'est pas touché, rembourser est un geste distinct (counsel.payment.refund).
scope: counsel:delete -
counsel.contracts.listREADListe les contrats Counsel du workspace (numéro, titre, status, sent_at, fully_signed_at), filtrables par status. Complète counsel.quotes.list / counsel.invoices.list.
scope: counsel:read
crm.*
-
crm.segments.listREADListe les segments CRM du workspace courant.
scope: contacts:read -
crm.segments.getREADRécupère un segment CRM avec les prospects qui le composent.
scope: contacts:read -
crm.segments.createWRITE-safeCrée un nouveau segment CRM (appartenance manuelle).
scope: contacts:write -
crm.segments.create_from_queryWRITE-safeCrée un segment CRM DYNAMIQUE à partir d'un filtre contact structuré et le remplit côté serveur en UN appel, sans boucle par contact ni filtrage en contexte. Filtre : lifecycle_stage / source / q (texte libre) / country / city / role (intitulé de poste ou headline) / company / icp_score_min / icp_score_max / has_linkedin / has_email / created_after / created_before (ISO). Le filtre est stocké sur le segment, appelle crm.segments.refresh plus tard pour le re-matérialiser. À UTILISER pour "crée un segment de <critères>" (ex. développeurs en France avec icp_score >= 70). Renvoie l'id du segment + member_count.
scope: contacts:write -
crm.segments.refreshWRITE-safeRe-matérialise un segment DYNAMIQUE à partir de son filtre stocké : ré-évalue les contacts correspondants et remplace les membres. Ne marche que sur les segments créés via crm.segments.create_from_query. Renvoie le nouveau member_count.
scope: contacts:write -
crm.segments.add_membersWRITE-safeAjoute des contacts à un segment CRM (idempotent, doublons ignorés).
scope: contacts:write -
crm.segments.remove_membersWRITE-safeRetire des contacts d'un segment CRM.
scope: contacts:write -
crm.segments.deleteWRITE-safeSupprime un segment CRM (les lignes d'appartenance sont supprimées en cascade).
scope: contacts:write
data.*
-
data.queryREADInterroge les données du workspace en GraphQL, en lecture seule. Un seul appel répond aux questions qu'aucun outil dédié ne couvre : filtrer, relier et agréger. Couverture : contacts, deals et segments, tâches, projets et jalons, réservations et types de RDV, factures, devis et revenu, conversations et messages, appels, transcripts et campagnes vocales, contenu Studio et publications, ads, campagnes email, produits, commandes, achats et abonnements, webinaires, collections, coupons, formulaires et réponses, avis, médias, programme et progression des membres, wiki, pages et sites, consommation. L'audience aussi, sur une fenêtre de dates obligatoire : `webAudience` pour Google Analytics (visites, sources de trafic, pays, appareils), `webAudienceHourly` pour le trafic par heure locale (c'est lui qui répond à 'visiteurs entre 8h et 10h' : lis `byHour` et divise par `days` pour une moyenne par jour), `searchConsole` pour Search Console (clics, impressions, position, requêtes), `geoVisibility` pour la visibilité dans les réponses des IA. Pour 'qui contacter en premier', hottestContacts classe les contacts par un score composite calculé en direct (intention, pipeline, fit ICP, récence) qu'aucun filtre ne reproduit. Ce qui reste aux outils d'analytics, c'est le chiffre consolidé qu'aucune requête ne reconstitue : le résumé multi-sources, le funnel, la géo croisée avec les leads et le revenu, la fraîcheur des sources, et les compteurs de membres actifs. Récupère une fois le champ `schemaDigest` pour la carte complète des champs (chaque champ racine avec ses arguments, chaque type avec ses champs, chaque enum), puis demande exactement les champs utiles au lieu de deviner les noms. Le workspace est implicite et ne peut jamais être passé en argument. Les montants reviennent masqués (amountCents null, redacted true) sans la permission finance : dis-le, ne lis jamais ça comme zéro. Le revenu a trois définitions distinctes ici, donc revenueTimeseries exige une base explicite. Si une requête est refusée, l'erreur porte une indication pour la réécrire.
scope: data:read
deals.*
-
deals.listREADListe les deals du workspace courant, filtrables par stage.
scope: deals:read -
deals.getREADRécupère un deal par id.
scope: deals:read -
deals.createWRITE-safeCrée un nouveau deal pour un contact.
scope: deals:write -
deals.updateWRITE-safeMet à jour un deal (n'importe quel champ).
scope: deals:write -
deals.move_stageWRITE-safeDéplace un deal vers une nouvelle étape du pipeline.
scope: deals:write -
deals.deleteDESTRUCTIVESupprime un deal.
scope: deals:delete
design.*
-
design.listREADListe les designs visuels du workspace (Brand Studio / éditeur de design) avec leurs URLs d'édition. Utilise design.create pour en démarrer un que l'utilisateur pourra ensuite éditer.
scope: design:read -
design.getREADRécupère un design du workspace par id, avec son URL d'édition.
scope: design:read -
design.get_docREADRécupère le document éditable complet d'un design : ses artboards et les layers de chacun (type, x/y/w/h, rotation, props). C'est la moitié lecture d'une boucle lire-modifier-écrire — récupère-le, change les layers, puis renvoie-les avec design.update_doc. Renvoie les artboards + l'URL d'édition.
scope: design:read -
design.renderREADRend un design en images PNG d'aperçu et renvoie leurs URLs publiques — pour voir le résultat, pas juste le lien d'édition. Rasterise chaque artboard côté serveur (une image par slide de carrousel / page de deck), fidèle à la vignette de l'éditeur. À enchaîner après design.create_from_doc / generate / generate_carousel / update_doc. Renvoie slides[] (index + preview_url + dimensions), preview_url (première) + edit_url.
scope: design:read -
design.createWRITE-safeCrée un nouveau design visuel vierge dans l'éditeur de design du workspace, au format d'un canal, et retourne son URL d'édition. Canaux : linkedin_square, linkedin_portrait, story_9x16, ad_square, one_pager_a4, wide_16x9, web_banner. L'utilisateur (ou un autre outil) l'édite ensuite dans l'éditeur de design.
scope: design:write -
design.generateWRITE-safeGénère un design visuel à la marque depuis une intention en texte (utilise le BrandContext du workspace + l'IA), au format d'un canal, et l'enregistre. Renvoie l'id du design + l'URL d'édition pour relecture. Canaux : linkedin_square, linkedin_portrait, story_9x16, ad_square, one_pager_a4, wide_16x9, web_banner. IA facturée : nécessite un moyen de paiement et le module design dans le plan.
scope: design:write -
design.from_referenceWRITE-safeRecrée le LANGAGE DE MISE EN PAGE d'une image d'inspiration en un design éditable à la marque. Un modèle de vision étudie la structure de la référence (grille, hiérarchie, style typo, rythme des couleurs, échelle des images) et la reconstruit avec la marque du workspace + un contenu original. Il ne copie PAS les logos, marques, noms ou textes exacts de la source : c'est un outil d'inspiration, pas un clone. Fournis une URL d'image publique. Renvoie l'id + l'URL d'édition. Canaux : linkedin_square, linkedin_portrait, story_9x16, ad_square, one_pager_a4, wide_16x9, web_banner. IA facturée : nécessite un moyen de paiement et le module design dans le plan.
scope: design:write -
design.compare_to_referenceWRITE-safeCompare visuellement un design à une image d'inspiration et renvoie une critique MESURÉE pour converger sur la mise en page. Rend le design, montre les deux à un modèle de vision, et renvoie un score de similarité (0-100), des problèmes classés, et surtout adjustments[] : pour chaque élément, une cible { x, y, w, h } en pixels du canvas, mesurée sur la référence. Compare chaque cible à la position actuelle de l'élément pour obtenir un déplacement exact au pixel, applique via design.update_doc, puis recompare jusqu'à ce que la similarité plafonne. Le rendu peut afficher des carrés à la place du texte (polices non embarquées), donc il juge la POSITION et la TAILLE, pas la forme des glyphes. IA facturée : nécessite un moyen de paiement et le module design.
scope: design:write -
design.generate_carouselWRITE-safeGénère un carrousel multi-slides à la marque depuis une intention en texte (BrandContext du workspace + IA), au format d'un canal, et l'enregistre comme un seul design. Renvoie l'id du design + l'URL d'édition. Canaux : linkedin_square, linkedin_portrait, story_9x16, ad_square, one_pager_a4, wide_16x9, web_banner. IA facturée : nécessite un moyen de paiement et le module design dans le plan.
scope: design:write -
design.create_from_docWRITE-safeCrée un design à partir d'un document de layers précis — la voie "design en détail" (comme construire dans Figma). Tu places chaque layer toi-même : text, image ou shape, positionné en x/y/w/h (pixels, origine en haut à gauche) dans l'artboard du canal, plus des props par type. Pas d'IA, déterministe : ce que tu envoies est ce qui est construit. Renvoie l'id du design + une URL d'édition. Canaux : linkedin_square, linkedin_portrait, story_9x16, ad_square, one_pager_a4, wide_16x9, web_banner. Props par layer : - text : { text, fontSize, color (hex), fontWeight (400-800), align (left|center|right), lineHeight } - image : { src (URL https publique) } - shape : { fill (hex), radius, stroke, strokeWidth } Nécessite le module design dans le plan (pas de carte, rien n'est facturé).
scope: design:write -
design.update_docWRITE-safeÉdite un design existant en remplaçant ses artboards par ceux que tu fournis — la moitié écriture d'une boucle lire-modifier-écrire (lis avec design.get_doc, change les layers, renvoie-les ici). Chaque artboard est un document complet (background + layers). Optionnellement change aussi le titre/statut. Déterministe, incrémente la version. Renvoie l'URL d'édition. Nécessite l'écriture design.
scope: design:write -
design.deleteDESTRUCTIVESupprime définitivement un design (visuel Brand Studio) du workspace. Irréversible.
scope: design:delete
domains.*
-
domains.removeDESTRUCTIVERetire un domaine personnalisé du workspace : le détache de l'hébergeur et le met hors ligne (le site ne répond plus sur cet hôte). Retire son drapeau principal. Réversible en le rajoutant via domains.add. Nécessite les droits d'écriture des réglages.
scope: settings:write -
domains.listREADListe les domaines personnalisés du workspace (site, membres, blog, pages) avec leur statut de vérification + SSL. Pour répondre à 'mon domaine est connecté / vérifié'.
scope: settings:read -
domains.dns_recordsREADRécupère les enregistrements DNS à poser chez le registrar pour un domaine personnalisé (les entrées A / CNAME / TXT qui le font vérifier et servir). À combiner avec domains.list pour le statut de vérification, et domains.refresh une fois posés.
scope: settings:read -
domains.addWRITE-safeConnecte un domaine personnalisé au site public ou à l'espace membres du workspace. L'enregistre chez l'hébergeur, stocke les DNS à poser et lance la vérification (statut 'verifying' jusqu'à propagation + SSL). Renvoie l'id du domaine et les enregistrements DNS. Nécessite le plan Pro. Sortant mais réversible avec domains.remove.
scope: settings:write -
domains.refreshWRITE-safeRevérifie la vérification et le SSL d'un domaine personnalisé auprès de l'hébergeur et met à jour son statut + ses DNS stockés. À appeler après avoir posé les DNS (ou pour suivre un domaine 'verifying').
scope: settings:write -
domains.sync_auth_redirectsWRITE-safeEnregistre les domaines personnalisés actifs du workspace dans la liste d'autorisation des redirections auth Supabase, pour que la connexion sociale end-user (Google) sur ces domaines revienne sur le site au lieu du Site URL par défaut. Idempotent, à lancer une fois après avoir connecté un domaine. Les domaines fraîchement vérifiés sont enregistrés automatiquement, ceci rattrape les existants. Sans effet si le token Management API n'est pas configuré.
scope: settings:write -
domains.set_primaryWRITE-safeFait d'un domaine personnalisé actif le domaine principal du workspace — l'hôte canonique utilisé pour les balises OG, le sitemap et les liens des emails sortants. Un seul principal par workspace ; le domaine doit être vérifié/actif.
scope: settings:write -
domains.connect_search_consoleWRITE-safeRelie un domaine de site public actif à Google Search Console en une étape : vérification de propriété (servie automatiquement par le site), création de la propriété et soumission du sitemap. Nécessite que le compte Google du workspace soit connecté avec accès en écriture. Renvoie 'connected', 'not_connected' (connecte Google d'abord) ou 'reconnect_required' (reconnecte Google pour autoriser l'écriture Search Console).
scope: settings:write
email.*
-
email.templates.listREADListe tous les templates email système (transactionnels + marketing) fusionnés avec les overrides de ce workspace. Affiche key, label, category, si le template est personnalisé et s'il est activé.
scope: email:read -
email.templates.getREADRécupère un template email effectif (subject + corps HTML, override ou registry default) par key, éventuellement pour une locale (fr/en).
scope: email:read -
email.campaigns.listREADListe les campagnes email du workspace avec leur status et les stats principales (enrolled/sent/opened/replied).
scope: campaigns:read -
email.campaigns.getREADRécupère une campagne email par id avec ses stats complètes et ses audience rules.
scope: campaigns:read -
email.templates.updateWRITE-safeCrée ou met à jour l'override de ce workspace pour un template email. Subject + bodyHtml peuvent utiliser des placeholders {{variable}} (voir email.templates.get pour les variables autorisées). Mets enabled=false pour arrêter complètement l'envoi de cet email.
scope: email:write -
email.templates.resetWRITE-safeSupprime l'override de ce workspace pour un template (pour une locale), retour au registry default.
scope: email:write -
email.send_testWRITE-safeRend un template email avec les variables d'exemple fournies et l'envoie à une adresse de test. Utilise le sender vérifié du workspace.
scope: email:write -
email.campaigns.createWRITE-safeCrée une campagne email en DRAFT (aucun email envoyé). Choisis une outbound sequence existante et des audience rules optionnelles. Utilise email.campaigns.launch pour enrôler l'audience et démarrer l'envoi.
scope: campaigns:write -
email.campaigns.pauseWRITE-safeMet en pause, reprend ou termine une campagne. action='pause' (active vers paused), 'resume' (paused vers active), 'done' (active|paused vers done). L'outbound runner vérifie le status avant chaque envoi.
scope: campaigns:write -
email.campaigns.launchDESTRUCTIVEActive une campagne et enrôle l'audience correspondante dans son outbound sequence. De VRAIS emails seront envoyés par l'outbound runner. Idempotent : relancer enrôle les prospects nouvellement correspondants. Nécessite une approbation.
scope: campaigns:write
entitlements.*
-
entitlements.listREADListe les entitlements résolus (modules, fonctionnalités, limites) pour ce workspace selon son plan actuel + son état offert.
scope: billing:read -
entitlements.checkREADVérifie si le workspace a accès à une fonctionnalité (module.* ou feature.*). Renvoie allowed + reason + required_plan en cas de refus.
scope: billing:read
forms.*
-
forms.listREADListe les formulaires de capture du workspace avec leur id, titre, slug public et statut (brouillon / publié / archivé).
scope: forms:read -
forms.getREADRécupère un formulaire par id avec ses champs ordonnés (type, label, options, requis).
scope: forms:read -
forms.submissionsREADListe les soumissions récentes d’un formulaire : données des réponses, id du contact lié (quand un email a été capturé) et horodatage submitted_at.
scope: forms:read -
forms.statsREADFunnel d’un formulaire : vues, soumissions (total + 7 derniers jours) et taux de complétion (%).
scope: forms:read -
forms.createWRITE-safeCrée un formulaire de capture en BROUILLON avec ses champs. Ne publie jamais automatiquement, appelle forms.set_status pour publier. Ajoute un champ email pour relier les soumissions aux contacts.
scope: forms:write -
forms.set_statusWRITE-safePublie, dépublie (retour en brouillon) ou archive un formulaire.
scope: forms:write -
forms.set_allowed_originsWRITE-safeDéfinit les domaines externes autorisés à envoyer ce formulaire depuis un autre site (Connexion site externe). Remplace la liste actuelle. Un domaine exact par entrée, ex https://mon-site.com. Vide = même origine seulement.
scope: forms:write -
forms.set_actionsWRITE-safeRemplace les actions à l'envoi de ce formulaire (Connexion site externe) : notify_internal (email à l'équipe), confirm_lead (email au contact), webhook (POST signé). Livrées en tâche de fond avec réessais.
scope: forms:write
goals.*
-
goals.getREADRécupère l'objectif actif courant du workspace (la cible chiffrée que l'utilisateur vise) et sa progression. Renvoie un objectif null si aucun n'est défini. Cet objectif est aussi réinjecté automatiquement dans le contexte du copilot pour prioriser les suggestions.
scope: goals:read -
goals.setWRITE-safeDéfinit l'objectif actif du workspace, la cible chiffrée que l'utilisateur vise (ex. titre 'Passer à 5000€/mois', métrique 'revenu mensuel', cible 5000, unité '€', échéance '2026-09-30'). Remplace tout objectif actif existant. À définir dès que l'utilisateur dit où il veut arriver, pour prioriser les suggestions futures.
scope: goals:write
inbox.*
-
inbox.threads.listREADListe les fils de conversation Inbox (DMs / commentaires).
scope: inbox:read -
inbox.get_agent_modesREADRécupère le mode de l'agent DM par canal (off | suggested | auto) pour Instagram, WhatsApp, LinkedIn, Messenger. Le mode 'auto' de LinkedIn est interdit (TOS) et toujours rapporté comme 'suggested' ou 'off'. Renvoie aussi le framework, le prompt de voix et la config de booking. Scopé au workspace appelant, renvoie les valeurs par défaut (tout en 'off') si aucune ligne de réglages n'existe encore pour ce workspace.
scope: inbox:read -
inbox.send_dmWRITE-safeRépond par DM dans un fil Inbox. Envoie réellement uniquement si le workspace a ce canal en mode auto (LinkedIn) ; sinon dépose une suggestion à valider par un humain.
scope: inbox:write -
inbox.set_agent_modeWRITE-safeDéfinit le mode de l'agent DM pour un seul canal (instagram_dm | whatsapp | linkedin | messenger). Modes : off | suggested | auto. Le mode 'auto' LinkedIn est refusé (TOS Microsoft, risque de bannissement du compte) et ramené à 'suggested'. L'ancien dm_agent_mode global est tenu à jour comme max(IG/WA/Messenger). Limité au workspace appelant, refuse si aucune ligne de réglages n'existe encore pour ce workspace.
scope: inbox:write -
inbox.set_dm_agent_settingsWRITE-safeDéfinit le positionnement de l'agent DM : son framework conversationnel (spin | bant | awareness | custom) et/ou son prompt de voix libre (le contexte business et le ton dans lequel il écrit). Mise à jour partielle, seuls les champs fournis sont modifiés, un prompt de voix vide l'efface. Sert à configurer comment l'agent sonne, pas le mode on/off par canal (voir inbox.set_agent_mode).
scope: inbox:write
integrations.*
-
integrations.connectREADRenvoie la page in-app pour connecter une intégration (linkedin, stripe, whatsapp, instagram, messenger, google_calendar, youtube, tiktok, analytics, resend). Le copilote NE PEUT PAS connecter à la place de l'utilisateur — combine avec ui.link_action pour qu'il finisse le flux OAuth/connexion. Vérifie d'abord team.integrations.list pour voir ce qui est déjà connecté.
scope: settings:read
knowledge.*
-
knowledge.listREADListe les éléments de la base de connaissance (faits, objections, preuves que le copilote peut réutiliser pour répondre aux prospects), filtrables par type. Chacun a son texte, son type, sa catégorie et son état d'approbation.
scope: knowledge:read -
knowledge.createWRITE-safeAjoute un élément à la base de connaissance que le copilote réutilise pour répondre aux prospects. type : 'objection', 'pain', 'win_phrase', 'story', 'vocabulary' ou 'anti_pattern'. text est le contenu (ex. l'objection et comment y répondre). category + context optionnels. Créé en source MANUAL et approuvé (l'utilisateur l'a saisi exprès). À utiliser pour 'retiens cette objection / ajoute à ma base de connaissance'.
scope: knowledge:write -
knowledge.set_approvedWRITE-safeApprouve ou retire l'approbation d'un élément de la base de connaissance. Les éléments approuvés sont ceux réutilisés pour répondre aux prospects.
scope: knowledge:write
linkedin.*
-
linkedin.list_devicesREADListe les navigateurs pairés du workspace courant : id, label, statut, santé, compte LinkedIn observé, dernier heartbeat.
scope: linkedin:read -
linkedin.list_jobsREADListe les actions LinkedIn en file du workspace courant, plus récentes d'abord. Filtre par statut, action ou device.
scope: linkedin:read -
linkedin.enqueue_actionWRITE-safeMet en file une action LinkedIn à exécuter par un navigateur pairé (connect, message, comment, react, visit, scrape_profile, post). Fournis target_urn ou un contact_id. Utilise dedupe_key pour éviter les doublons vivants. L'action s'exécute dans le vrai navigateur sous la politique anti-ban, pas immédiatement.
scope: linkedin:write -
linkedin.import_searchWRITE-safeImporte des leads depuis une recherche LinkedIn ou Sales Navigator dans les contacts, via un navigateur pairé (acquisition à la Waalaxy). Fournis un search_url (la page de résultats) ou des keywords, et le nombre max de leads. Le navigateur scrape la recherche et les leads sont upsertés en contacts, dédupliqués par URL de profil. Sous la politique anti-ban.
scope: linkedin:write -
linkedin.scrape_engagementWRITE-safeImporte en contacts (leads chauds) les personnes qui ont réagi ou commenté un post LinkedIn, via un navigateur pairé. Fournis le post_url (ou activity_urn). Remplace le pipeline d'engagement Unipile ; dédup par (post, auteur, type). Sous la politique anti-ban.
scope: linkedin:write -
linkedin.generate_pairing_codeWRITE-safeÉmet un code de pairing à usage unique pour connecter une extension navigateur à ce workspace. Renvoie le code une seule fois, à coller dans l'extension. Expire en 15 minutes.
scope: linkedin:manage_devices
mcp.*
-
mcp.tools.listREADAuto-introspection : renvoie le catalogue de tous les outils MCP que ce workspace peut appeler, filtrable par préfixe de module ou par tier. Utile quand un agent doit découvrir les actions disponibles avant de planifier un workflow multi-étapes.
scope: mcp:read
media.*
-
media.listREADListe les médias du workspace courant avec des filtres optionnels (kind, collection, tags, source). Paginé par cursor created_at.
scope: media:read -
media.searchREADRecherche full-text sur alt_text, caption et generation_prompt. Mêmes filtres que media.list.
scope: media:read -
media.getREADRécupère un média avec une signed URL fraîche (TTL 1h) ou une URL publique pour les assets publics.
scope: media:read -
media.lineageREADRenvoie les parents (refs utilisées pour générer cette image) et les enfants (images générées à partir d'elle).
scope: media:read -
media.usagesREADListe les entités (pages, drafts, ad creatives, etc.) qui référencent ce média.
scope: media:read -
media.uploadWRITE-safeUpload un média dans la librairie du workspace depuis des données base64. Auto-dédup sur le checksum. Renvoie la row persistée.
scope: media:write -
media.tagWRITE-safeAjoute/retire des tags, change la collection, met à jour l'alt-text ou la caption d'un média.
scope: media:write -
media.record_usageWRITE-safeEnregistre qu'une entité (page, draft, creative, …) référence ce média. Idempotent sur (media, entity, field).
scope: media:write -
media.archiveWRITE-safeArchive en douceur un média (renseigne archived_at). Réversible.
scope: media:write -
media.deleteDESTRUCTIVESupprime définitivement un média (row DB + bytes du storage). Irréversible. Nécessite une approbation JIT.
scope: media:delete
members_app.*
-
members_app.overviewREADAperçu de la config actuelle de l'app membres pour le workspace : domaine actif (kind=members), nombre de fonctionnalités activées, nombre d'éléments de menu.
scope: members_app:read -
members_app.features.listREADListe complète des bascules de fonctionnalités de l'app membres (registry + override workspace). Chaque entrée : key, label, href, default_enabled, enabled.
scope: members_app:read -
members_app.menu.listREADListe les éléments de menu personnalisés configurés pour la navigation de l'app membres (handle="members"). Retourne id, label, url, position, target.
scope: members_app:read -
members_app.features.toggleWRITE-safeActive ou désactive une fonctionnalité de l'app membres pour le workspace. Stocke un override seulement s'il diffère de la valeur par défaut du registry (sinon la ligne est supprimée).
scope: members_app:write -
members_app.menu.addWRITE-safeAjoute une nouvelle entrée de menu à la navigation de l'app membres. Positionnée automatiquement à la fin.
scope: members_app:write -
members_app.menu.removeWRITE-safeSupprime un élément de menu par id (doit appartenir au workspace courant).
scope: members_app:write -
members_app.appearance.set_modeWRITE-safeDéfinit le mode de thème utilisé par l'app membres : light, dark ou auto.
scope: members_app:write
memory.*
-
memory.listREADListe les faits durables que l'assistant retient sur ce workspace (TJM, ton, contraintes, préférences), plus récents d'abord. Ils sont aussi réinjectés automatiquement dans le contexte du copilot. À utiliser quand l'utilisateur demande "qu'est-ce que tu retiens de moi / mon activité".
scope: memory:read -
memory.rememberWRITE-safeEnregistre un fait durable sur ce workspace pour t'en souvenir dans les prochaines conversations (ex. 'TJM cible 600€', 'préfère un ton direct', 'cible les startups fintech'). Passe une `key` stable optionnelle (ex. 'tjm', 'ton', 'icp') pour METTRE À JOUR un fait existant au lieu d'empiler des doublons. Ne mémorise que des faits stables et utiles que l'utilisateur énonce sur lui ou son activité, jamais du bavardage passager.
scope: memory:write -
memory.forgetDESTRUCTIVESupprime un fait mémorisé par id (scopé à ce workspace). À utiliser après memory.list quand l'utilisateur demande d'oublier quelque chose. Irréversible, le fait est retiré.
scope: memory:write
orders.*
-
orders.listREADListe les commandes de la boutique du workspace, filtrées optionnellement par statut (pending / paid / cancelled / refunded). Chaque ligne porte le client, les totaux, le statut et l'état de préparation.
scope: products:read -
orders.countsREADNombre de commandes par statut pour la boutique du workspace — un aperçu rapide pending / paid / cancelled / refunded.
scope: products:read -
orders.getREADRécupère une commande avec ses lignes, le client, l'adresse de livraison, les totaux, le statut et la préparation (suivi). Renvoie null si la commande n'est pas dans ce workspace.
scope: products:read -
orders.set_statusWRITE-safeDéfinit le statut d'une commande : pending, paid, cancelled ou refunded. Marquer payé/remboursé est un changement d'état comptable ici (ça ne déplace pas l'argent chez le prestataire de paiement). Scopé au workspace.
scope: products:write -
orders.set_fulfillmentWRITE-safeMet à jour la préparation d'une commande : unfulfilled / partial / fulfilled, plus un numéro et une URL de suivi optionnels à partager avec le client. Scopé au workspace.
scope: products:write
outreach.*
-
outreach.strategy.getREADRécupère la stratégie outreach du workspace (offre, ICP, croyances à casser, CTA, ton, instruction personnalisée) qui pilote la personnalisation du brief par contact. Renvoie des valeurs nulles si non définie.
scope: contacts:read -
outreach.strategy.setWRITE-safeMet à jour la stratégie d'outreach du workspace (offre, ICP, croyances à casser, CTA, ton, instruction personnalisée) qui pilote la personnalisation du brief par contact. Seuls les champs fournis sont modifiés.
scope: contacts:write
pages.*
-
pages.listREADListe les pages CMS de ce workspace.
scope: pages:read -
pages.list_templatesREADListe les templates de page sélectionnés disponibles pour pages.create_from_template (id, name, description, slug/titre suggérés, nombre de blocs).
scope: pages:read -
pages.list_blocksREADListe les blocs brouillon d'une page (la copie de travail que l'éditeur visuel et les éditions MCP modifient, PAS le snapshot publié en ligne). Retourne pour chaque bloc id, type, parent_id, position, visibilité et props. À utiliser avant pages.update_block / pages.move_block pour connaître les ids actuels.
scope: pages:read -
pages.create_draftWRITE-safeCrée une nouvelle page CMS au statut brouillon.
scope: pages:write -
pages.publishWRITE-safePublie une page CMS (status → published, published_at = now).
scope: pages:write -
pages.create_from_templateWRITE-safeCrée une nouvelle page brouillon à partir d'un des 5 templates sélectionnés (landing-coaching, about, pricing-3-tiers, contact, blog-post). Retourne le nouvel id de page + blocks_count. Utilise d'abord pages.list_templates pour voir les ids disponibles.
scope: pages:write -
pages.generate_from_promptWRITE-safeCrée une nouvelle page brouillon en demandant à Claude de générer 6 à 12 blocs à partir d'un prompt en langage naturel. Le même générateur que le Mode IA de l'éditeur. Retourne le nouvel id de page + blocks_count.
scope: pages:write -
pages.insert_blockWRITE-safeInsère un bloc dans le brouillon d'une page. Valide le type + les props contre le design system et sanitise le rawHtml. parent_id optionnel (doit être un bloc existant de la page) et position (défaut : fin). Utilise site.get_design_context pour les types de blocs valides + props par défaut.
scope: pages:write -
pages.update_blockWRITE-safeMet à jour un bloc du brouillon d'une page : ses props et/ou sa visibilité. Valide + sanitise comme insert. Au moins props ou visible requis.
scope: pages:write -
pages.move_blockWRITE-safeRe-parente et/ou repositionne un bloc dans le brouillon d'une page. parent_id null = racine. Refuse un déplacement qui créerait un cycle.
scope: pages:write -
pages.delete_blockWRITE-safeSupprime un bloc (et ses descendants) du brouillon d'une page. Cascade le sous-arbre.
scope: pages:write -
pages.convert_baked_sectionsWRITE-safeRecompose une page faite de sections figées en éléments HTML éditables. Par défaut, un brouillon dupliqué non destructif ; mode="in_place" pour convertir la page elle-même.
scope: pages:write -
pages.import_from_urlWRITE-safeImporte une page web publique depuis son URL vers une NOUVELLE page brouillon, en blocs élément fidèles et éditables (façon Webflow). La seule entrée client est l'URL (et un titre optionnel) ; le workspace est toujours l'actif, jamais fourni par le client. Vérifie le SSRF, rend la page dans un navigateur headless externe (hors du bundle de l'app), puis convertit le DOM en blocs élément avec styles calculés. Retourne { pageId, slug, stats }. Nécessite une carte enregistrée (rendu facturé) et SITE_IMPORT_RENDER_URL.
scope: pages:write -
pages.deleteDESTRUCTIVESupprime une page CMS.
scope: pages:delete
payments.*
-
payments.create_linkWRITE-safeGénère un lien de paiement ponctuel que l'acheteur règle en ligne, et l'envoie par email en option. Vends un produit du catalogue (passe product_id, son prix est utilisé) ou un montant ad-hoc (passe label + amount_cents). Nécessite l'email de l'acheteur : il est upserté en contact et une vraie facture réconciliée est créée derrière le lien, donc la vente apparaît dans le revenu (pas un encaissement non tracé). Renvoie l'URL de paiement hébergée — partage-la, mets-la en DM, ou send_email=true pour l'envoyer à l'acheteur. amount_cents est dans la plus petite unité (600000 = 6000€). À UTILISER pour 'sors-moi un lien de paiement pour X' / 'envoie un lien de paiement à <email>'. Nécessite une entité légale configurée et (pour la page en ligne) Stripe connecté.
scope: counsel:write
platform.*
-
sites_listREADListe les Sites du workspace (surfaces publiques : domaine + pages + audience + plans). Le site par défaut est renvoyé en premier.
scope: sites:read -
sites_createWRITE-safeCrée un Site secondaire dans le workspace (ex. un site SEO/marketing de niche sur son propre domaine qui draine vers le principal). Donne un nom ; le slug est dérivé ou fourni.
scope: sites:write -
sites_updateWRITE-safeRenomme, change le slug ou le mode de thème d'un Site. Le slug du site par défaut est verrouillé (son sous-domaine ne bouge jamais).
scope: sites:write -
sites_auth_getREADLit les réglages d'authentification des utilisateurs finaux d'un Site : si le site a une audience à lui (owns_end_user_auth, l'interrupteur maître), et comment cette audience se connecte. Un site sans ligne de réglages répond les valeurs par défaut.
scope: sites:read -
sites_auth_updateWRITE-safeActive ou désactive les comptes utilisateurs d'un Site, et règle la façon dont son audience se connecte. `owns_end_user_auth` est l'interrupteur maître : tant qu'il est faux, inscription et connexion sont refusées quels que soient les autres réglages. Un réglage omis garde sa valeur actuelle.
scope: sites:write -
sites_set_defaultWRITE-safePromeut un Site en tant que défaut du workspace (celui servi sur le sous-domaine nu du workspace).
scope: sites:write -
sites_deleteDESTRUCTIVESupprime un Site et tout ce qui lui est rattaché (pages, audience, plans, domaines en cascade). Le site par défaut ne peut pas être supprimé.
scope: sites:delete -
sites_audience_listREADListe les utilisateurs finaux d'un site (les gens inscrits sur ce site public, pas les membres du workspace). Rend pour chacun son email, son nom, si son email est vérifié, le rôle que le site lui a donné, et combien d'enregistrements lui appartiennent. Rend aussi les rôles définis par le site, pour pouvoir traduire un id de rôle en nom. Scopé à ce seul site : un utilisateur d'un autre site du même workspace est quelqu'un d'autre ici.
scope: sites:read -
sites_audience_removeDESTRUCTIVERetire un utilisateur final d'un site. Supprime son adhésion à CE site uniquement : son compte de connexion existe toujours, et ses adhésions aux autres sites du workspace ne bougent pas. La cascade en base supprime aussi les enregistrements qu'il possède sur ce site et ses jetons de réinitialisation en attente. Irréversible.
scope: sites:write -
reviews_listREADListe les avis du workspace. Filtre par statut (pending/published/rejected), sujet (product/program/brand + id), site d'affichage ou source. Chaque ligne porte un `verified` résolu (la réservation liée a été gagnée ou la transaction payée).
scope: reviews:read -
reviews_aggregateREADAgrège les avis publiés (nombre + note moyenne arrondie à 0,1) pour un sujet, un site d'affichage, ou tout le workspace. Utile pour afficher un badge de note.
scope: reviews:read -
reviews_moderateWRITE-safeChange le statut d'un avis : le publier, le rejeter, ou le renvoyer en attente. Tout avis atterrit en attente ; c'est ainsi qu'il passe en ligne sur la surface publique.
scope: reviews:moderate -
reviews_requestWRITE-safeCrée une demande d'avis pour un sujet (produit/programme/marque) et renvoie le lien public que le client suit pour déposer son avis.
scope: reviews:request -
sites_rooms_listREADListe les salons temps réel d'un site (les espaces vocaux ou de discussion que ses utilisateurs finaux peuvent rejoindre). Rend pour chacun son slug, son nom, son statut, son plafond de participants et le plan d'abonnement qui en ouvre la porte, s'il y en a un. Scopé à ce seul site : deux sites du même workspace peuvent tous les deux avoir un salon « general », ce sont deux salons différents.
scope: sites:read -
sites_rooms_createWRITE-safeCrée un salon temps réel sur un site. Donne-lui un nom, le slug se déduit du nom si tu n'en fournis pas. Passe required_plan_id pour réserver le salon aux abonnés d'un plan utilisateur final (voir collections_plans) ; sans lui, tout utilisateur connecté du site peut entrer. max_participants à 0 veut dire pas de plafond. Le salon ne transporte pas d'audio à lui seul : il porte l'identité et le droit d'entrer, le serveur média fait le reste.
scope: sites:write -
sites_rooms_updateWRITE-safeMet à jour un salon d'un site. Tous les champs sont optionnels, seul ce que tu passes change. Fermer un salon refuse l'entrée sans le supprimer ni perdre son historique. Mettre required_plan_id à null ouvre le salon à tout utilisateur final connecté du site.
scope: sites:write -
sites_rooms_deleteDESTRUCTIVESupprime un salon d'un site. Irréversible. Pour empêcher les entrées sans perdre le salon, mets plutôt son statut à closed.
scope: sites:write -
http_requestWRITE-safeAppelle une API externe en HTTP(S) et retourne { status, ok, headers, body, json }. Bloque les adresses internes (anti-SSRF). Utilise les références {{node:...}} pour injecter des valeurs d'étapes précédentes dans l'URL, les headers ou le body.
scope: automation:http -
send_emailWRITE-safeEnvoie un email (sujet + corps HTML) à une adresse, depuis l'expéditeur vérifié du workspace. Pièces jointes par URL (`url`) ou contenu base64 (`content_base64`, ex. la sortie de generate_pdf). Accepte les références {{node:...}} dans tous les champs.
scope: email:write -
send_smsWRITE-safeEnvoie un SMS (texte court) à un numéro de téléphone, depuis le numéro du workspace. Respecte la liste anti-appel (DNC). Accepte les références {{node:...}} dans tous les champs (ex. {{node:<déclencheur>.contact.phone}}).
scope: voice:sms -
generate_pdfWRITE-safeGénère un PDF (titre + contenu texte, un paragraphe par ligne), l'archive dans la bibliothèque média du workspace, et retourne { mediaId, filename, sizeBytes, base64 }. Le `base64` se branche directement sur send_email via {{node:<id>.base64}}.
scope: media:write
presentations.*
-
presentations.deleteDESTRUCTIVESupprime définitivement une présentation (deck de closing / slides d'audit) du workspace. Irréversible.
scope: presentations:delete -
presentations.listREADListe les présentations du workspace (decks de closing / slides d'audit), filtrables par status (draft / unlisted / published). Chacune a un id, slug, titre, status et updated_at.
scope: presentations:read -
presentations.createWRITE-safeCrée une présentation (deck de closing / slides d'audit) dans le workspace. Donne un titre ; le slug est dérivé s'il est omis. Amorce optionnellement le deck avec slides_html + speaker_notes_html, sinon il démarre vide pour l'édition. Status : draft (privé) / unlisted (lien seul) / published. Renvoie l'id + le slug.
scope: presentations:write -
presentations.set_statusWRITE-safeChange le status de visibilité d'une présentation : draft (privé), unlisted (lien seulement) ou published.
scope: presentations:write
products.*
-
products.listREADListe les produits / offres du workspace (filtre optionnel par état actif).
scope: products:read -
products.getREADRécupère un produit avec ses compteurs de détail (modules, fichiers, achats actifs).
scope: products:read -
products.files.listREADListe les fichiers téléchargeables attachés à un produit.
scope: products:read -
products.createWRITE-safeCrée un produit/offre dans le catalogue (ex. un accompagnement, un ebook, un abonnement). Donne au moins un titre ; price_cents est le prix dans la plus petite unité de la devise (600000 = 6000€). kind vaut 'consulting' par défaut, et le produit est créé INACTIF (brouillon) — active-le avec products.set_active après relecture. Le slug est dérivé du titre. Renvoie l'id du nouveau produit + kind.
scope: products:write -
products.set_activeWRITE-safeActive ou désactive (archive) un produit.
scope: products:write -
products.duplicateWRITE-safeDuplique un produit existant en un nouveau brouillon INACTIF (le price_id/payment_link Stripe ne sont volontairement PAS copiés, pour éviter une double facturation). Renvoie l'id du nouveau produit. Active-le avec products.set_active une fois son propre prix Stripe branché.
scope: products:write -
products.deleteDESTRUCTIVESupprime définitivement un produit du catalogue (scopé workspace). Refusé si le produit a encore des achats membres actifs, pour préserver l'historique d'accès — archive-le avec products.set_active à la place. Irréversible.
scope: products:delete
programme.*
-
programme.modules.listREADListe les modules du curriculum d'un produit (programme).
scope: programme:read -
programme.lessons.listREADListe les leçons à l'intérieur d'un module du curriculum.
scope: programme:read -
programme.module.set_publishedWRITE-safePublie ou dépublie un module de programme.
scope: programme:write -
programme.lesson.set_publishedWRITE-safePublie ou dépublie une leçon de programme.
scope: programme:write -
programme.lesson.deleteDESTRUCTIVESupprime définitivement une leçon d'un module de curriculum (scopé workspace). Retire aussi ses tâches/ressources. Renvoie not_found pour une leçon d'un autre workspace. Irréversible.
scope: programme:delete -
programme.task.deleteDESTRUCTIVESupprime définitivement une tâche d'une leçon (scopé workspace). Irréversible.
scope: programme:delete -
programme.resource.deleteDESTRUCTIVESupprime définitivement une ressource (fichier ou lien) d'un module/leçon/tâche (scopé workspace). Irréversible.
scope: programme:delete
seo.*
-
seo.get_profileREADRécupère le profil SEO/GEO du workspace (nom de marque, alias, domaines, marché) et les concurrents suivis.
scope: seo:read -
seo.list_promptsREADListe les prompts suivis dans les moteurs IA pour ce workspace, avec leur état activé et leur catégorie.
scope: seo:read -
seo.visibilityREADRécupère le score de visibilité IA (0-100) et le dernier snapshot par prompt suivi (taux de mention, de citation, stabilité).
scope: seo:visibility -
seo.upsert_profileWRITE-safeCrée ou met à jour le profil SEO/GEO. Le nom de marque est requis ; les autres champs sont optionnels et préservés s'ils sont omis.
scope: seo:write -
seo.add_promptWRITE-safeAjoute un prompt à suivre dans les moteurs IA (une vraie question que tes prospects posent).
scope: seo:write -
seo.suggest_promptsWRITE-safeGénère automatiquement des prompts à suivre à partir du profil business (vraies questions de prospects) et les ajoute, dédupliqués contre les existants. Utilise la génération IA (bornée par le quota du plan).
scope: seo:write -
seo.set_prompt_enabledWRITE-safeActive ou désactive un prompt suivi sans le supprimer.
scope: seo:write -
seo.delete_promptWRITE-safeSupprime un prompt suivi.
scope: seo:write -
seo.run_scanWRITE-safeInterroge les moteurs IA maintenant pour tous les prompts actifs et persiste les snapshots de visibilité. Consomme des tokens IA, borné par le quota du plan.
scope: seo:visibility -
seo.list_topicsREADListe les sujets d'articles SEO suivis pour ce workspace, avec leur statut (suggéré/en file/en cours/rédigé) et leur source.
scope: seo:read -
seo.list_articlesREADListe les articles de blog du workspace (publiés + brouillons) avec leur performance Google Search Console (indexé, position, clics, impressions sur 28 jours).
scope: seo:read -
seo.suggest_topicsWRITE-safeSuggère par IA des sujets d'articles ancrés sur le profil de marque et les requêtes d'opportunité Google Search Console (termes classés en page 2+). Dédupliqués contre les sujets existants. Consomme des tokens IA, borné par le quota du plan.
scope: seo:write -
seo.generate_articleWRITE-safeGénère un brouillon d'article complet depuis un sujet suivi : brief SEO (recherche web) + rédaction + scoring SEO. Crée un studio_draft (statut brouillon, non auto-publié) lié au sujet. Consomme des tokens IA, borné par le quota du plan.
scope: seo:write -
seo.set_autopilotWRITE-safeActive ou désactive le pilote automatique SEO et règle sa cadence hebdo d'articles (0-14). Activé, le cron suggère, met en file et rédige des brouillons dans la limite. Les articles restent en brouillon (gate d'approbation conservée).
scope: seo:write
settings.*
-
settings.getREADRécupère les réglages généraux du workspace : nom, slug, couleur de marque, hashtag, titre/description SEO, et les modes de thème (app membre / site public). La lecture unique pour 'comment s'appelle mon espace / comment il est marqué'.
scope: settings:read -
settings.updateWRITE-safeMet à jour l'identité générale du workspace : au choix nom, couleur de marque (hex ou null), hashtag, titre SEO, description SEO, mode de thème app membre, mode de thème site public. Seuls les champs fournis changent ; le reste est conservé. Ne touche PAS au logo/icône/favicon (utilise le flux d'upload pour ça).
scope: settings:write
shipping.*
-
shipping.listREADListe les tarifs de livraison de la boutique (forfait ou au poids, avec seuil de gratuité éventuel) utilisés pour chiffrer la livraison au checkout.
scope: products:read -
shipping.saveWRITE-safeRemplace tout le jeu de tarifs de livraison de la boutique par ceux fournis (écrase les tarifs existants, envoie la liste complète). Chaque tarif est forfaitaire ou au poids, en centimes, avec un seuil de gratuité optionnel. Scopé au workspace.
scope: products:write
site.*
-
site.get_design_contextREADL'identité visuelle (DA) du workspace : marque (nom, couleur, logo, favicon), tokens de design du thème (couleurs, typo, radius), menus du site, et le catalogue des types de blocs disponibles avec leurs props par défaut. À appeler AVANT de créer ou éditer des pages pour que le contenu généré respecte le look du site et utilise des blocs valides. Lecture seule, public-safe (ni CSS custom ni internes de thème).
scope: pages:read
studio.*
-
studio.drafts.listREADListe les drafts Studio (contenus). Filtre par status / target_platform.
scope: studio:read -
studio.drafts.getREADRécupère un draft Studio par id (contenu complet).
scope: studio:read -
studio.publications.listREADListe les publications Studio (drafts planifiés ou déjà poussés sur un canal). Chaque ligne porte les champs scheduled_at / published_at / publish_error pour qu'un agent puisse auditer ce qui est en ligne, en file, ou en échec.
scope: studio:read -
studio.ideas.listREADListe les idées Studio (en amont des drafts). Chaque idée a un titre, un hook, un angle, un status et un score. Utile quand un agent de contenu a besoin du prochain lot d'inspirations à transformer en drafts.
scope: studio:read -
studio.seo_briefs.listREADListe les briefs SEO (mot-clé + intention de recherche + nombre de mots cible). Utilisés par les agents de contenu pour planifier des articles alignés avec la stratégie SEO du workspace.
scope: studio:read -
studio.draft.approval_stateREADVérifie si un draft est approuvé pour la publication en autopilot, et par qui / quand. Renvoie null si le draft n'existe pas ou n'a pas encore été relu.
scope: studio:read -
studio.draft.lineageREADRésout l'origine d'un draft : le post concurrent, le pattern décodé, et / ou le draft source qui l'a inspiré. Aide un agent à retracer pourquoi un draft a été généré avant d'itérer.
scope: studio:read -
studio.draft.viralityREADDernier score de viralité pour une entité Studio (draft, idée, publication). Renvoie le score prédit calculé par Gemini ainsi que le détail du raisonnement.
scope: studio:read -
studio.inspiration_packs.listREADListe les packs d'inspiration (post concurrent + structure décodée) disponibles pour que le workspace les remixe en nouveaux drafts.
scope: studio:read -
studio.draft.createWRITE-safeCrée un nouveau brouillon Studio.
scope: studio:write -
studio.draft.updateWRITE-safeMet à jour les champs d'un brouillon Studio.
scope: studio:write -
studio.draft.approveWRITE-safeMarque un brouillon Studio comme approuvé pour publication (publish_approved_at = now).
scope: studio:write -
studio.draft.unapproveWRITE-safeRévoque l'approbation de publication d'un brouillon Studio. À utiliser quand un agent ou l'utilisateur repère un problème après l'approbation et veut bloquer le prochain cycle autopilot.
scope: studio:write -
studio.draft.publishWRITE-safePublie un brouillon Studio sur LinkedIn maintenant, ou le programme. Sans scheduled_at, le post part immédiatement ; avec un scheduled_at ISO 8601, il est mis en file (un cron le publie à l'heure prévue une fois le brouillon approuvé). Publie via le compte LinkedIn OAuth connecté, ou, à défaut, via l'extension navigateur pairée (mise en ligne asynchrone). Nécessite un linkedin_text sur le brouillon et soit OAuth soit un device pairé. Une publication immédiate est sortante et non réversible une fois en ligne.
scope: studio:write -
studio.draft.publish_blogWRITE-safePublie un brouillon Studio en article de blog sur le site du workspace (le met en ligne et ping IndexNow). Le brouillon doit avoir un slug, un corps d'article, meta_title, meta_description et être approuvé pour publication (studio.draft.approve). Action sortante : l'article devient public et indexable. Renvoie l'URL publique de l'article.
scope: studio:write -
studio.draft.unpublish_blogWRITE-safeRetire un article de blog publié : efface sa date de publication pour qu'il n'apparaisse plus sur le blog ni dans le sitemap, et le repasse en état approuvé. Réversible avec studio.draft.publish_blog. La ligne et son contenu sont conservés.
scope: studio:write -
studio.draft.set_coverWRITE-safeDéfinit l'image de couverture d'un brouillon Studio / article de blog, depuis un média de la librairie (media_id, ex. un média ajouté via media.upload) ou une URL d'image publique (image_url). Exactement une source. L'image est ré-hébergée dans le workspace pour servir de cover d'article, d'og:image et d'ImageObject schema.org. Renseigne alt pour l'accessibilité et le SEO. Remplace la cover actuelle.
scope: studio:write -
studio.draft.archiveWRITE-safeDéplace un brouillon Studio vers l'archive (masquage léger des listes par défaut). Réversible : la ligne reste en DB. À préférer à la suppression sauf si le brouillon est inutilisable.
scope: studio:write -
studio.idea.archiveWRITE-safeArchive une idée Studio pour qu'elle n'apparaisse plus dans le pipeline d'idéation actif. Réversible.
scope: studio:write -
studio.draft.deleteDESTRUCTIVESupprime un brouillon Studio.
scope: studio:delete -
studio.publication.deleteDESTRUCTIVESupprime un enregistrement de publication Studio (historique des push vers les canaux). Ne retire rien du canal réel ; supprime seulement la ligne du registre du workspace.
scope: studio:delete
suppliers.*
-
suppliers.listREADListe les fournisseurs (dropship / logistique) configurés pour la boutique du workspace (nom, site, email de contact, notes).
scope: products:read -
suppliers.createWRITE-safeAjoute un fournisseur (dropship / logistique) à la boutique du workspace. Renvoie le nouvel id du fournisseur.
scope: products:write -
suppliers.updateWRITE-safeMet à jour un fournisseur de la boutique (nom, site, email de contact, notes). Scopé au workspace.
scope: products:write -
suppliers.deleteDESTRUCTIVESupprime un fournisseur de la boutique. Irréversible. Les produits qui le référencent gardent leurs données mais perdent le lien fournisseur.
scope: products:write
support.*
-
support.threads.listREADListe les fils de support membre de ce workspace (la messagerie support in-app), filtrables par status (open / pending_member / pending_team / resolved / archived) ou une requête texte. Chaque ligne porte le membre, le sujet, le status, les non-lus et l'aperçu du dernier message.
scope: support:read -
support.thread.getREADRécupère un fil de support membre avec tout son historique de messages. Scopé au workspace courant.
scope: support:read -
support.replyWRITE-safePublie une réponse de l'équipe dans un fil de support membre. Scopé au workspace courant ; le message est attribué à l'utilisateur appelant.
scope: support:write -
support.set_statusWRITE-safeRésout ou rouvre un fil de support membre. action 'resolve' le clôt ; 'reopen' le remet en ouvert. Scopé au workspace courant.
scope: support:write
team.*
-
team.listREADListe les membres de l'équipe du workspace (jointure workspace_members + profile). Chaque ligne porte user_id, role (owner / admin / staff / member), status (active / invited / suspended), joined_at.
scope: team:read -
team.getREADRécupère un membre du workspace avec son profil (nom affiché, avatar, email). Renvoie null si l'utilisateur n'est pas membre du workspace.
scope: team:read -
team.roles.listREADListe les rôles du workspace (système + custom) avec, pour chacun, son nombre de membres et combien de permissions il accorde. Utilise un id de rôle ici avec team.member.set_role ou team.roles.get.
scope: team:read -
team.roles.getREADRécupère un rôle du workspace avec les clés de permission exactes qu'il accorde et son nombre de membres, plus le catalogue des permissions attribuables (clé + libellé). Passe les clés accordées à team.roles.set_permissions pour les ajuster.
scope: team:read -
team.audit_logREADJournal d'audit du workspace : qui a fait quoi (login, changement de rôle, connexion d'intégration, etc.). Filtre par type d'événement ou récence.
scope: team:read -
team.integrations.listREADListe les intégrations tierces connectées au workspace (Stripe, Google, Meta, LinkedIn, TikTok, etc.) avec leur état de connexion.
scope: team:read -
team.member.set_roleWRITE-safeChange le rôle d'un membre du workspace (donc ses permissions). role_id est un id de rôle workspace vu dans team.get. Impossible de changer son propre rôle, de cibler le propriétaire du workspace, ou d'attribuer le rôle propriétaire. Nécessite la permission de gestion des rôles.
scope: team:manage_roles -
team.member.suspendWRITE-safeSuspend un membre du workspace : il garde son compte mais perd l'accès jusqu'à réactivation, et le siège facturé est libéré. Impossible de se suspendre soi-même ou de suspendre le propriétaire. Réversible avec team.member.reactivate. Nécessite la permission de retrait de membre.
scope: team:remove -
team.member.reactivateWRITE-safeRéactive un membre suspendu : restaure son accès et rétablit le siège facturé. Nécessite la permission de retrait de membre.
scope: team:remove -
team.invite.resendWRITE-safeRenvoie l'invitation d'un membre du workspace : lui envoie par email un nouveau lien magique de connexion à l'espace membres. Pour un membre en attente qui a perdu ou jamais reçu la première invitation. La cible doit déjà être membre de ce workspace. Nécessite la permission d'invitation.
scope: team:write -
team.roles.createWRITE-safeCrée un rôle custom du workspace. key est un slug minuscule (unique, pas une clé système réservée). duplicate_from_id copie optionnellement les permissions d'un autre rôle comme point de départ. Règle les permissions ensuite avec team.roles.set_permissions. Nécessite la permission de gestion des rôles.
scope: team:manage_roles -
team.roles.updateWRITE-safeMet à jour les métadonnées d'un rôle custom (nom, description, couleur, ou s'il est le rôle par défaut des nouveaux membres). Ne touche pas ses permissions, utilise team.roles.set_permissions pour ça. Nécessite la permission de gestion des rôles.
scope: team:manage_roles -
team.roles.set_permissionsWRITE-safeRemplace tout l'ensemble de permissions d'un rôle par les clés fournies (tout ce qui n'est pas listé est retiré). Les clés valides et l'ensemble actuel viennent de team.roles.get. Le rôle propriétaire est verrouillé. Nécessite la permission de gestion des rôles.
scope: team:manage_roles -
team.roles.deleteDESTRUCTIVESupprime un rôle custom du workspace. Les rôles système ne peuvent pas être supprimés. Les membres portant ce rôle sont réassignés au rôle par défaut du workspace. Nécessite la permission de gestion des rôles.
scope: team:manage_roles -
team.member.removeDESTRUCTIVERetire définitivement un membre du workspace : révoque son accès et libère le siège facturé. Impossible de se retirer soi-même ou de retirer le propriétaire. La personne garde son compte mais n'est plus membre. Irréversible via MCP, il faut ré-inviter pour le rajouter.
scope: team:remove -
team.inviteWRITE-safeInvite une personne dans l'équipe du workspace par email avec un rôle : 'admin', 'coach', 'closer' ou 'setter' (jamais 'owner'). Lui envoie un email d'invitation/lien magique et crée son accès. Un plan facturé au siège peut exiger une carte. À UTILISER pour 'invite X dans mon équipe / ajoute Y comme closer'. Action conséquente, une approbation s'affiche d'abord.
scope: team:write
voice.*
-
voice.list_callsREADListe les appels voix récents du workspace courant. Renvoie id, direction, status, duration, contact_id, slug de disposition, created_at.
scope: voice:read -
voice.get_call_detailREADRécupère le détail complet d'un appel voix : call row, metadata d'enregistrement, résumé de transcript, segments, score (si Tier 3 activé).
scope: voice:read -
voice.list_call_listsREADListe les call lists du workspace courant avec les compteurs de progression (total / completed / positive).
scope: voice:read -
voice.start_callWRITE-safePré-crée une row voice_calls pour qu'un client (dialer navigateur ou AI Voice Agent) puisse initier un appel. Renvoie le callId + le caller-id E.164. Ne compose PAS réellement le numéro, la composition est faite par le client via le Twilio Voice JS SDK ou par le provider AI Voice Agent.
scope: voice:write -
voice.enrich_prospect_phoneWRITE-safeEnrichit un prospect (ou des données de contact quelconques) avec des numéros de téléphone via Dropcontact. Écrit éventuellement le meilleur numéro dans la row prospects quand contact_id est fourni. Coûte 1 crédit Dropcontact par row enrichie.
scope: voice:write -
voice.add_to_dncWRITE-safeAjoute un numéro de téléphone à la liste Do-Not-Call du workspace. Le numéro est bloqué avant composition dans le queue runner, le MCP voice.start_call et les campagnes AI Voice Agent.
scope: voice:write -
voice.campaigns.listREADListe les campagnes d'appels IA (cold-calling) du workspace : nom, provider, status, nombre d'appels, bookings réussis, coût total et cap quotidien. Complète voice.list_calls (appels individuels).
scope: voice:read -
voice.campaign.getREADRécupère une campagne d'appels IA en détail (script, voix, langue, objectif, caps, horodatages) plus ses appels les plus récents et leurs résultats.
scope: voice:read
webinaires.*
-
webinaires.listREADListe les webinaires du workspace (les mis en avant d'abord, puis par date planifiée).
scope: webinars:read -
webinaires.getREADRécupère un webinaire par id.
scope: webinars:read -
webinaires.set_featuredWRITE-safeMarque un webinaire comme étant celui mis en avant (retire la mise en avant des autres).
scope: webinars:write -
webinaires.createWRITE-safeCrée une session de webinaire. Donne un titre ; le slug en est dérivé s'il est omis. status vaut 'draft' par défaut (mets 'scheduled' une fois la date fixée). scheduled_at est une date ISO. Renvoie l'id du nouveau webinaire.
scope: webinars:write -
webinaires.updateWRITE-safeMet à jour un webinaire par id. Seuls les champs fournis changent ; le reste est conservé (lu puis fusionné). Passe null sur subtitle/scheduled_at/replay_url pour les vider. Répond à 'reprogramme / renomme / publie un webinaire'.
scope: webinars:write -
webinaires.archiveWRITE-safeArchive un webinaire (le retire de la liste active ; inscrits et historique sont conservés).
scope: webinars:write -
webinaires.deleteDESTRUCTIVESupprime définitivement un webinaire (scopé workspace). Refusé s'il a déjà des inscrits, pour préserver l'historique des inscriptions — archive-le avec webinaires.archive à la place. Irréversible.
scope: webinars:write
wiki.*
-
wiki.list_treeREADListe tout l’arbre du wiki (docs, dossiers et fichiers) du workspace courant, avec parent/position/icône/visibilité de chaque nœud.
scope: wiki:read -
wiki.get_docREADRécupère un doc du wiki par id, avec son titre, son icône et son contenu en markdown.
scope: wiki:read -
wiki.create_docWRITE-safeCrée un nouveau doc du wiki, éventuellement sous un dossier ou un doc parent, avec un contenu markdown optionnel.
scope: wiki:write -
wiki.create_folderWRITE-safeCrée un nouveau dossier du wiki, éventuellement sous un dossier parent.
scope: wiki:write -
wiki.save_doc_bodyWRITE-safeRemplace le contenu d’un doc du wiki par le markdown fourni (une version de la précédente est archivée).
scope: wiki:write -
wiki.publishWRITE-safePublie un doc du wiki en page publique (fige titre + contenu sous un slug public stable). Renvoie le slug.
scope: wiki:publish
workbench.*
-
workbench.tasks.listREADListe les tâches Workbench.
scope: workbench:read -
workbench.projects.listREADListe les projets Workbench.
scope: workbench:read -
workbench.milestones.listREADListe les jalons Workbench avec leur progression + date d'échéance. Utile quand un agent a besoin des prochains livrables d'un projet avant d'assigner de nouvelles tâches.
scope: workbench:read -
workbench.kpisREADKPIs du cockpit Workbench : tâches terminées sur les 7 derniers jours (vs les 7 jours précédents), compteurs ouvertes / en retard / bloquées actuelles, et la sparkline de complétion quotidienne.
scope: workbench:read -
workbench.focus_tasks.listREADListe les tâches actuellement assignées à l'appelant et encore ouvertes (todo / in_progress / blocked). La "liste focus" de l'utilisateur, ce que l'opérateur devrait faire aujourd'hui.
scope: workbench:read -
workbench.active_projectsREADListe les projets actifs avec leurs données de cockpit (couleur, deadline, owner, status). Limité à ce que le widget du dashboard affiche.
scope: workbench:read -
workbench.workload_heatmapREADHeatmap de charge de l'équipe : nombre de tâches ouvertes par assigné et par jour pour les ~14 prochains jours. Sert à repérer les surcharges avant d'assigner du nouveau travail.
scope: workbench:read -
workbench.recent_activityREADÉvénements récents de tâches / projets / jalons dans le journal d'audit Workbench (création, changement de status, assignation, suppression) sur les dernières 24 heures.
scope: workbench:read -
workbench.task.createWRITE-safeCrée une nouvelle tâche Workbench.
scope: workbench:write -
workbench.task.updateWRITE-safeMet à jour une tâche Workbench.
scope: workbench:write -
workbench.task.assignWRITE-safeAssigne une tâche Workbench à un utilisateur.
scope: workbench:write -
workbench.task.update_statusWRITE-safeChangement rapide de statut sur une tâche Workbench (todo / in_progress / blocked / done / cancelled). Renseigne automatiquement completed_at quand le statut passe à done, le vide sinon. Moins coûteux que le tool de mise à jour complet quand seul le statut change.
scope: workbench:write -
workbench.task.follow_upWRITE-safeCrée une tâche de relance liée à une autre entité (par ex. après un appel Voice : une tâche liée au prospect avec une échéance et une priorité).
scope: workbench:write -
workbench.task.deleteDESTRUCTIVESupprime une tâche Workbench.
scope: workbench:delete
workspace.*
-
workspace.branding.getREADRécupère le branding configuré du workspace : nom, URLs du logo / de l'icône / du favicon et couleur de marque. Ce sont les assets définis dans Réglages → Marque, stockés sur le workspace lui-même, PAS dans la bibliothèque média — sers-toi de CET outil (pas de media.search) pour afficher ou référencer le logo du workspace. has_logo est false si aucun logo n'est encore défini ; propose ui.request_upload seulement dans ce cas.
scope: agents:read