MCP, référence des tools

Le serveur MCP expose 399 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.

Plateforme (53) Workspace (346)

Tools plateforme

Opérations cross-workspace. Super-admin uniquement.

agent.*

  • agent.provision_client_complete WRITE-safe AGENT

    Provisionne 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_workspace DESTRUCTIVE AGENT

    Archive 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_workspaces READ

    Liste 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_workspace READ

    Récupère le détail complet d'un workspace par slug : owner, billing, Stripe Connect, domaines, thème, nombre de membres.

    scope: *
  • list_members READ

    Liste 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_member READ

    Récupère un membre par user_id et workspace_id, avec les données de profil jointes.

    scope: *
  • list_audit READ

    Liste 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_overview READ

    Agrège les métriques de billing sur tous les workspaces : MRR, ARR, nombre d'abonnements actifs, nombre past_due, nombre comped.

    scope: *
  • list_domains READ

    Liste les domaines personnalisés de tous les workspaces.

    scope: *
  • list_themes READ

    Liste les thèmes de workspace actifs.

    scope: *
  • list_integrations READ

    Liste les intégrations par workspace (Stripe Connect, Google, Meta, LinkedIn, TikTok).

    scope: *
  • get_system_health READ

    Agrège la santé système : Apify en attente, publications studio en échec, approbations JIT en attente, nombre d'erreurs récentes.

    scope: *
  • list_plans READ

    Liste tous les plans de billing (id, name, monthly_price_cents, currency).

    scope: *
  • list_billing_accounts READ

    Liste 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_account READ

    Ré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_waitlist READ

    Liste les inscriptions de la waitlist (status, source, created_at).

    scope: *
  • search_global READ

    Recherche texte transversale sur les workspaces, membres et contacts (top 5 de chaque).

    scope: *
  • create_workspace WRITE-safe

    Cré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_identity WRITE-safe

    Met à jour name, brand_color, icon_url, logo_url d'un workspace.

    scope: *
  • set_workspace_plan WRITE-safe

    Change le plan de billing d'un workspace (met à jour workspaces.plan uniquement, le changement d'abonnement Stripe est séparé).

    scope: *
  • add_member WRITE-safe

    Invite un utilisateur existant comme membre d'un workspace.

    scope: *
  • update_member_role WRITE-safe

    Change le rôle d'un membre au sein d'un workspace.

    scope: *
  • set_platform_flag WRITE-safe

    Définit un feature flag global de la plateforme (scope Hypervisor). Affecte TOUS les workspaces.

    scope: *
  • connect_integration WRITE-safe

    Marque une intégration de workspace comme connectée (les credentials sont stockés ailleurs, cet outil ne fait que basculer le status).

    scope: *
  • add_domain WRITE-safe

    Ajoute un domaine personnalisé à un workspace (non vérifié tant que le contrôle DNS n'est pas passé).

    scope: *
  • archive_workspace DESTRUCTIVE

    Archive en douceur un workspace (définit archived_at). Réversible. L'abonnement Stripe reste actif jusqu'à annulation manuelle.

    scope: *
  • delete_workspace DESTRUCTIVE

    Suppression DÉFINITIVE d'un workspace par cascade. Irréversible. Utilise d'abord archive_workspace.

    scope: *
  • delete_member DESTRUCTIVE

    Retire un membre d'un workspace. Sa ligne auth.user est conservée.

    scope: *
  • purge_audit_older_than DESTRUCTIVE

    Supprime définitivement les lignes kernel_activity antérieures à la date ISO donnée. Impossible à annuler.

    scope: *
  • force_billing_cancel DESTRUCTIVE

    Force le billing d'un workspace à l'état annulé (workspace_billing.stripe_subscription_status = canceled). Stripe doit être annulé séparément.

    scope: *
  • revoke_token DESTRUCTIVE

    Révoque un token MCP par id. Définit revoked_at. Les appels suivants retournent 401.

    scope: *
  • replay_webhook DESTRUCTIVE

    Met en file un rejeu de webhook pour un workspace et un provider (Stripe/Meta/...).

    scope: *
  • list_partners READ

    Liste 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_tiers READ

    Liste les tiers du programme partenaire plateforme avec le type de commission, le taux (bps) et le modèle (referral/agency_override).

    scope: *
  • get_partner_referrals READ

    Liste les referrals attribués à un partenaire, avec le décompte par status (clicked/signed_up/trial/converted/churned).

    scope: *
  • get_partner_commissions READ

    Liste le registre de commissions d'un partenaire avec les totaux par status (pending/approved/paid/clawed_back). Montants en centimes.

    scope: *
  • get_partner READ

    Ré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_kit READ

    Ré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_partner WRITE-safe

    Approuve un partenaire en attente et lui assigne un tier. Active l'attribution des referrals et les commissions pour ce partenaire.

    scope: *
  • set_partner_tier WRITE-safe

    Change le tier assigné à un partenaire (override manuel).

    scope: *
  • reject_partner WRITE-safe

    Rejette une candidature de partenaire.

    scope: *
  • suspend_partner WRITE-safe

    Suspend un partenaire approuvé (stoppe les nouvelles attributions, les commissions existantes ne sont pas affectées).

    scope: *
  • set_partner_note WRITE-safe

    Dé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_kit WRITE-safe

    Remplace 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_partner WRITE-safe

    Réactive un partenaire suspendu (status → approved). Le tier précédemment assigné est conservé.

    scope: *
  • reconsider_partner WRITE-safe

    Remet une candidature refusée en attente (pending) pour la reconsidérer.

    scope: *
  • archive_partner WRITE-safe

    Archive un partenaire (le masque de la liste par défaut). Réversible. N'affecte ni les referrals ni les commissions.

    scope: *
  • unarchive_partner WRITE-safe

    Désarchive un partenaire (le restaure dans la liste par défaut).

    scope: *
  • delete_partner DESTRUCTIVE

    Supprime 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_stats READ

    Usage de la médiathèque par workspace (count, archivés, bytes, générés par IA, quota, dernier upload).

    scope: *
  • platform.media.orphans READ

    Liste les médias sans aucun usage enregistré et plus vieux que N jours. Triés par taille décroissante.

    scope: *
  • platform.media.set_quota WRITE-safe

    Définit storage_quota_bytes sur un workspace. Passe null pour retirer le quota (illimité).

    scope: *
  • platform.media.purge_workspace DESTRUCTIVE

    Supprime 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.list READ

    Liste les campagnes Ads.

    scope: ads:read
  • ads.campaigns.get_perf READ

    Récupère les métriques de performance d'une campagne Ads (dépense, impressions, clics, leads).

    scope: ads:read
  • ads.lead_funnel READ

    Funnel 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.list READ

    Liste 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.get READ

    Ré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.update WRITE-safe

    Met à jour les champs d'une campagne Ads.

    scope: ads:write
  • ads.campaign.pause WRITE-safe

    Met en pause une campagne Ads.

    scope: ads:write
  • ads.campaign.resume WRITE-safe

    Relance une campagne Ads en pause.

    scope: ads:write
  • ads.campaign.delete DESTRUCTIVE

    Supprime une campagne Ads.

    scope: ads:delete

agent.*

  • agent.weekly_studio_publish WRITE-safe AGENT

    Publie 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_lead WRITE-safe AGENT

    Traite 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_run WRITE-safe AGENT

    Gé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_autopilot WRITE-safe AGENT

    Lance 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_impayes WRITE-safe AGENT

    Pour 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_contacts WRITE-safe AGENT

    Met 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_briefing READ AGENT

    Agrège la veille : nouveaux contacts/deals/publications/paiements/inbox. Renvoie un briefing en markdown.

    scope: *
  • agent.send_dm_in_voice WRITE-safe AGENT

    Ré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_run READ

    Ré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.dispatch WRITE-safe

    Dé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. Utilise le mode "suggest" (par défaut, analyse en lecture seule) ou "act" (l'agent peut effectuer des actions write-safe).

    scope: agents:dispatch

ai.*

  • ai.set_instructions WRITE-safe

    Dé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.summary READ

    Ré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.calls READ

    Analytics 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.conversations READ

    Analytics 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.links READ

    Analytics 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.traffic READ

    KPIs 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_summary READ

    Ré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.funnel READ

    É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.geo READ

    Ré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.list READ

    Liste 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.create WRITE-safe

    Cré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, passe ["*"] pour un accès complet.

    scope: api_keys:write
  • api_keys.revoke DESTRUCTIVE

    Ré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

billing.*

  • billing.get_subscription READ

    Récupère l'état actuel de l'abonnement Kernel SaaS de ce workspace : plan, status, trial_end, fin de période, cancel_at_period_end.

    scope: billing:read
  • billing.get_usage READ

    Ré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_account READ

    Ré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_accounts READ

    Liste 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_checkout WRITE-safe

    Cré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_portal WRITE-safe

    Ouvre 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_portal WRITE-safe

    Ouvre 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_account WRITE-safe

    Cré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_account WRITE-safe

    Renomme 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_workspace WRITE-safe

    Affecte un workspace à un des comptes de facturation de l'utilisateur (change l'entité qui le paie). L'utilisateur doit posséder le workspace ET le compte. 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_account WRITE-safe

    Supprime 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_portal WRITE-safe

    Ouvre 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_attribution READ

    Renvoie 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_performance READ

    Performance 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.list READ

    Liste les types d'événements réservables dans le workspace.

    scope: booking:read
  • booking.bookings.list READ

    Liste les bookings (filtrables par status, since).

    scope: booking:read
  • booking.bookings.list_detailed READ

    Liste 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.get READ

    Ré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.event_type.update WRITE-safe

    Met à jour un type d'événement de booking (nom, durée, état actif).

    scope: booking:write
  • booking.event_type.delete DESTRUCTIVE

    Supprime un des types d'événement de réservation de l'hôte appelant. Irréversible.

    scope: booking:delete
  • booking.availability.get READ

    Ré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_rules WRITE-safe

    Remplace 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_override WRITE-safe

    Ajoute 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_override WRITE-safe

    Retire une exception de date du calendrier de l'utilisateur appelant par son id. Scopé au calendrier de l'appelant.

    scope: booking:write
  • booking.cancel WRITE-safe

    Annule 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_status WRITE-safe

    Marque 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_wizard WRITE-safe

    Enregistre 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.delete DESTRUCTIVE

    Supprime 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.list READ

    Liste 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.overview READ

    Vue 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.leaderboard READ

    Leaderboard 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.create WRITE-safe

    Cré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.update WRITE-safe

    Met à 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_program WRITE-safe

    Met à 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.agenda READ

    L'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

collections.*

  • collections.list READ

    Liste les collections de contenu du workspace avec leur id, nom, slug public et statut.

    scope: collections:read
  • collections.get READ

    Récupère une collection avec ses champs ordonnés (le schéma). Résolution par id ou slug.

    scope: collections:read
  • collections.records READ

    Liste les entrées d’une collection avec leur contenu. Filtrable par statut.

    scope: collections:read
  • collections.plans READ

    Liste les plans d’abonnement end-user du workspace (nom, prix, cadence, statut, si synchronisé à Stripe).

    scope: collections:read
  • collections.subscriptions READ

    Liste 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.revenue READ

    Le 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.create WRITE-safe

    Cré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_status WRITE-safe

    Publie, dépublie (retour en brouillon) ou archive une collection.

    scope: collections:write
  • collections.add_record WRITE-safe

    Ajoute 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_status WRITE-safe

    Publie, dépublie (retour en brouillon) ou archive une entrée de collection.

    scope: collections:write
  • collections.create_plan WRITE-safe

    Cré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_status WRITE-safe

    Archiver 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_pricing WRITE-safe

    Change 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.list READ

    Liste 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.count READ

    Compte 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.get READ

    Récupère un contact par id (doit appartenir au workspace courant).

    scope: contacts:read
  • contacts.get_360 READ

    Vue 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.search READ

    Recherche des contacts par sous-chaîne email/nom/linkedin.

    scope: contacts:read
  • contacts.hottest READ

    Les 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_customers READ

    Liste 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.list READ

    Liste 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_interaction WRITE-safe

    Journalise 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.upsert WRITE-safe

    Crée ou met à jour un contact (par id, email ou linkedin_url).

    scope: contacts:write
  • contacts.enrich WRITE-safe

    Met 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.tag WRITE-safe

    Ajoute un tag à un contact.

    scope: contacts:write
  • contacts.delete DESTRUCTIVE

    Supprime définitivement un contact et toutes ses données liées. Irréversible.

    scope: contacts:delete

conversations.*

  • conversations.transcripts.list READ

    Liste 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.get READ

    Ré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.create WRITE-safe

    Ajoute une note à la transcription d'une conversation.

    scope: conversations:write

copilot.*

  • copilot.briefing READ

    Le 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.ask WRITE-safe

    Pose 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.quotes.list READ

    Liste les devis Counsel.

    scope: counsel:read
  • counsel.invoices.list READ

    Liste les factures Counsel.

    scope: counsel:read
  • counsel.invoice.einvoicing_status READ

    Statut de transmission (Plateforme Agréée) d'une facture Counsel.

    scope: counsel:read
  • counsel.received.list READ

    Liste les factures fournisseurs reçues via la Plateforme Agréée (réception).

    scope: counsel:read
  • counsel.revenue.summary READ

    Revenu 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.get READ

    Récupère un contrat Counsel avec son corps, ses signataires et le contact lié.

    scope: counsel:read
  • counsel.contracts.templates_list READ

    Liste les modèles de contrat disponibles pour le workspace (les siens + les presets), avec leur corps.

    scope: counsel:read
  • counsel.contracts.preview READ

    Rend 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.quote.create WRITE-safe

    Crée un devis Counsel.

    scope: counsel:write
  • counsel.quote.send WRITE-safe

    Envoie un devis Counsel au contact (status → sent).

    scope: counsel:write
  • counsel.invoice.create WRITE-safe

    Crée une facture Counsel.

    scope: counsel:write
  • counsel.invoice.send WRITE-safe

    Envoie une facture Counsel (status → sent).

    scope: counsel:write
  • counsel.contracts.create WRITE-safe

    Cré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.update WRITE-safe

    Met à 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.

    scope: counsel:write
  • counsel.contracts.save_as_template WRITE-safe

    Enregistre 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.cancel DESTRUCTIVE

    Annule une facture Counsel (status → cancelled).

    scope: counsel:delete
  • counsel.payment.refund DESTRUCTIVE

    Rembourse le paiement d'une facture Counsel via Stripe.

    scope: counsel:refund
  • counsel.contracts.list READ

    Liste 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.list READ

    Liste les segments CRM du workspace courant.

    scope: contacts:read
  • crm.segments.get READ

    Récupère un segment CRM avec les prospects qui le composent.

    scope: contacts:read
  • crm.segments.create WRITE-safe

    Crée un nouveau segment CRM (appartenance manuelle).

    scope: contacts:write
  • crm.segments.create_from_query WRITE-safe

    Cré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.refresh WRITE-safe

    Re-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_members WRITE-safe

    Ajoute des contacts à un segment CRM (idempotent, doublons ignorés).

    scope: contacts:write
  • crm.segments.remove_members WRITE-safe

    Retire des contacts d'un segment CRM.

    scope: contacts:write
  • crm.segments.delete WRITE-safe

    Supprime un segment CRM (les lignes d'appartenance sont supprimées en cascade).

    scope: contacts:write

deals.*

  • deals.list READ

    Liste les deals du workspace courant, filtrables par stage.

    scope: deals:read
  • deals.get READ

    Récupère un deal par id.

    scope: deals:read
  • deals.create WRITE-safe

    Crée un nouveau deal pour un contact.

    scope: deals:write
  • deals.update WRITE-safe

    Met à jour un deal (n'importe quel champ).

    scope: deals:write
  • deals.move_stage WRITE-safe

    Déplace un deal vers une nouvelle étape du pipeline.

    scope: deals:write
  • deals.delete DESTRUCTIVE

    Supprime un deal.

    scope: deals:delete

design.*

  • design.list READ

    Liste 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.get READ

    Récupère un design du workspace par id, avec son URL d'édition.

    scope: design:read
  • design.get_doc READ

    Ré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.render READ

    Rend 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.create WRITE-safe

    Cré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.generate WRITE-safe

    Gé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_reference WRITE-safe

    Recré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_reference WRITE-safe

    Compare 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_carousel WRITE-safe

    Gé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_doc WRITE-safe

    Cré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_doc WRITE-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.delete DESTRUCTIVE

    Supprime définitivement un design (visuel Brand Studio) du workspace. Irréversible.

    scope: design:delete

domains.*

  • domains.remove DESTRUCTIVE

    Retire 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.list READ

    Liste 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_records READ

    Ré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.add WRITE-safe

    Connecte 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.refresh WRITE-safe

    Revé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_redirects WRITE-safe

    Enregistre 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_primary WRITE-safe

    Fait 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_console WRITE-safe

    Relie 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.list READ

    Liste 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.get READ

    Ré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.list READ

    Liste les campagnes email du workspace avec leur status et les stats principales (enrolled/sent/opened/replied).

    scope: campaigns:read
  • email.campaigns.get READ

    Récupère une campagne email par id avec ses stats complètes et ses audience rules.

    scope: campaigns:read
  • email.templates.update WRITE-safe

    Cré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.reset WRITE-safe

    Supprime l'override de ce workspace pour un template (pour une locale), retour au registry default.

    scope: email:write
  • email.send_test WRITE-safe

    Rend 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.create WRITE-safe

    Cré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.pause WRITE-safe

    Met 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.launch DESTRUCTIVE

    Active 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.list READ

    Liste les entitlements résolus (modules, fonctionnalités, limites) pour ce workspace selon son plan actuel + son état offert.

    scope: billing:read
  • entitlements.check READ

    Vé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.list READ

    Liste les formulaires de capture du workspace avec leur id, titre, slug public et statut (brouillon / publié / archivé).

    scope: forms:read
  • forms.get READ

    Récupère un formulaire par id avec ses champs ordonnés (type, label, options, requis).

    scope: forms:read
  • forms.submissions READ

    Liste 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.stats READ

    Funnel d’un formulaire : vues, soumissions (total + 7 derniers jours) et taux de complétion (%).

    scope: forms:read
  • forms.create WRITE-safe

    Cré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_status WRITE-safe

    Publie, dépublie (retour en brouillon) ou archive un formulaire.

    scope: forms:write
  • forms.set_allowed_origins WRITE-safe

    Dé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_actions WRITE-safe

    Remplace 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

inbox.*

  • inbox.threads.list READ

    Liste les fils de conversation Inbox (DMs / commentaires).

    scope: inbox:read
  • inbox.get_agent_modes READ

    Ré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_dm WRITE-safe

    Ré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_mode WRITE-safe

    Dé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_settings WRITE-safe

    Dé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.connect READ

    Renvoie 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.list READ

    Liste 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.create WRITE-safe

    Ajoute 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_approved WRITE-safe

    Approuve 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_devices READ

    Liste les navigateurs pairés du workspace courant : id, label, statut, santé, compte LinkedIn observé, dernier heartbeat.

    scope: linkedin:read
  • linkedin.list_jobs READ

    Liste les actions LinkedIn en file du workspace courant, plus récentes d'abord. Filtre par statut, action ou device.

    scope: linkedin:read
  • linkedin.enqueue_action WRITE-safe

    Met 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_search WRITE-safe

    Importe 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_engagement WRITE-safe

    Importe 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_code WRITE-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.list READ

    Auto-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.list READ

    Liste les médias du workspace courant avec des filtres optionnels (kind, collection, tags, source). Paginé par cursor created_at.

    scope: media:read
  • media.search READ

    Recherche full-text sur alt_text, caption et generation_prompt. Mêmes filtres que media.list.

    scope: media:read
  • media.get READ

    Ré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.lineage READ

    Renvoie 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.usages READ

    Liste les entités (pages, drafts, ad creatives, etc.) qui référencent ce média.

    scope: media:read
  • media.upload WRITE-safe

    Upload 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.tag WRITE-safe

    Ajoute/retire des tags, change la collection, met à jour l'alt-text ou la caption d'un média.

    scope: media:write
  • media.record_usage WRITE-safe

    Enregistre qu'une entité (page, draft, creative, …) référence ce média. Idempotent sur (media, entity, field).

    scope: media:write
  • media.archive WRITE-safe

    Archive en douceur un média (renseigne archived_at). Réversible.

    scope: media:write
  • media.delete DESTRUCTIVE

    Supprime définitivement un média (row DB + bytes du storage). Irréversible. Nécessite une approbation JIT.

    scope: media:delete

members_app.*

  • members_app.overview READ

    Aperç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.list READ

    Liste 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.list READ

    Liste 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.toggle WRITE-safe

    Active 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.add WRITE-safe

    Ajoute une nouvelle entrée de menu à la navigation de l'app membres. Positionnée automatiquement à la fin.

    scope: members_app:write
  • members_app.menu.remove WRITE-safe

    Supprime un élément de menu par id (doit appartenir au workspace courant).

    scope: members_app:write
  • members_app.appearance.set_mode WRITE-safe

    Définit le mode de thème utilisé par l'app membres : light, dark ou auto.

    scope: members_app:write

memory.*

  • memory.list READ

    Liste 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.remember WRITE-safe

    Enregistre 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.forget WRITE-safe

    Supprime 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.list READ

    Liste 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.counts READ

    Nombre de commandes par statut pour la boutique du workspace — un aperçu rapide pending / paid / cancelled / refunded.

    scope: products:read
  • orders.get READ

    Ré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_status WRITE-safe

    Dé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_fulfillment WRITE-safe

    Met à 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.get READ

    Ré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.set WRITE-safe

    Met à 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.list READ

    Liste les pages CMS de ce workspace.

    scope: pages:read
  • pages.list_templates READ

    Liste 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_blocks READ

    Liste 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_draft WRITE-safe

    Crée une nouvelle page CMS au statut brouillon.

    scope: pages:write
  • pages.publish WRITE-safe

    Publie une page CMS (status → published, published_at = now).

    scope: pages:write
  • pages.create_from_template WRITE-safe

    Cré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_prompt WRITE-safe

    Cré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_block WRITE-safe

    Insè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_block WRITE-safe

    Met à 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_block WRITE-safe

    Re-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_block WRITE-safe

    Supprime un bloc (et ses descendants) du brouillon d'une page. Cascade le sous-arbre.

    scope: pages:write
  • pages.delete DESTRUCTIVE

    Supprime une page CMS.

    scope: pages:delete

payments.*

  • payments.create_link WRITE-safe

    Gé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_list READ

    Liste les Sites du workspace (surfaces publiques : domaine + pages + audience + plans). Le site par défaut est renvoyé en premier.

    scope: sites:read
  • sites_create WRITE-safe

    Cré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_update WRITE-safe

    Renomme, 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_set_default WRITE-safe

    Promeut un Site en tant que défaut du workspace (celui servi sur le sous-domaine nu du workspace).

    scope: sites:write
  • sites_delete DESTRUCTIVE

    Supprime 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
  • http_request WRITE-safe

    Appelle 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_email WRITE-safe

    Envoie 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_sms WRITE-safe

    Envoie 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_pdf WRITE-safe

    Gé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.delete DESTRUCTIVE

    Supprime définitivement une présentation (deck de closing / slides d'audit) du workspace. Irréversible.

    scope: presentations:delete
  • presentations.list READ

    Liste 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.create WRITE-safe

    Cré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_status WRITE-safe

    Change le status de visibilité d'une présentation : draft (privé), unlisted (lien seulement) ou published.

    scope: presentations:write

products.*

  • products.list READ

    Liste les produits / offres du workspace (filtre optionnel par état actif).

    scope: products:read
  • products.get READ

    Récupère un produit avec ses compteurs de détail (modules, fichiers, achats actifs).

    scope: products:read
  • products.files.list READ

    Liste les fichiers téléchargeables attachés à un produit.

    scope: products:read
  • products.create WRITE-safe

    Cré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_active WRITE-safe

    Active ou désactive (archive) un produit.

    scope: products:write
  • products.duplicate WRITE-safe

    Duplique 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.delete DESTRUCTIVE

    Supprime 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.list READ

    Liste les modules du curriculum d'un produit (programme).

    scope: programme:read
  • programme.lessons.list READ

    Liste les leçons à l'intérieur d'un module du curriculum.

    scope: programme:read
  • programme.module.set_published WRITE-safe

    Publie ou dépublie un module de programme.

    scope: programme:write
  • programme.lesson.set_published WRITE-safe

    Publie ou dépublie une leçon de programme.

    scope: programme:write
  • programme.lesson.delete DESTRUCTIVE

    Supprime définitivement une leçon d'un module de curriculum (scopé workspace). Retire aussi ses tâches/ressources. Irréversible.

    scope: programme:delete
  • programme.task.delete DESTRUCTIVE

    Supprime définitivement une tâche d'une leçon (scopé workspace). Irréversible.

    scope: programme:delete
  • programme.resource.delete DESTRUCTIVE

    Supprime définitivement une ressource (fichier ou lien) d'un module/leçon/tâche (scopé workspace). Irréversible.

    scope: programme:delete

seo.*

  • seo.get_profile READ

    Récupère le profil SEO/GEO du workspace (nom de marque, alias, domaines, marché) et les concurrents suivis.

    scope: seo:read
  • seo.list_prompts READ

    Liste les prompts suivis dans les moteurs IA pour ce workspace, avec leur état activé et leur catégorie.

    scope: seo:read
  • seo.visibility READ

    Ré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_profile WRITE-safe

    Cré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_prompt WRITE-safe

    Ajoute un prompt à suivre dans les moteurs IA (une vraie question que tes prospects posent).

    scope: seo:write
  • seo.suggest_prompts WRITE-safe

    Gé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_enabled WRITE-safe

    Active ou désactive un prompt suivi sans le supprimer.

    scope: seo:write
  • seo.delete_prompt WRITE-safe

    Supprime un prompt suivi.

    scope: seo:write
  • seo.run_scan WRITE-safe

    Interroge 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_topics READ

    Liste 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_articles READ

    Liste 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_topics WRITE-safe

    Suggè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_article WRITE-safe

    Gé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_autopilot WRITE-safe

    Active 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.get READ

    Ré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.update WRITE-safe

    Met à 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.list READ

    Liste 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.save WRITE-safe

    Remplace 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_context READ

    L'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.list READ

    Liste les drafts Studio (contenus). Filtre par status / target_platform.

    scope: studio:read
  • studio.drafts.get READ

    Récupère un draft Studio par id (contenu complet).

    scope: studio:read
  • studio.publications.list READ

    Liste 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.list READ

    Liste 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.list READ

    Liste 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_state READ

    Vé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.lineage READ

    Ré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.virality READ

    Dernier 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.list READ

    Liste 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.create WRITE-safe

    Crée un nouveau brouillon Studio.

    scope: studio:write
  • studio.draft.update WRITE-safe

    Met à jour les champs d'un brouillon Studio.

    scope: studio:write
  • studio.draft.approve WRITE-safe

    Marque un brouillon Studio comme approuvé pour publication (publish_approved_at = now).

    scope: studio:write
  • studio.draft.unapprove WRITE-safe

    Ré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.publish WRITE-safe

    Publie 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_blog WRITE-safe

    Publie 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_blog WRITE-safe

    Retire 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_cover WRITE-safe

    Dé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.archive WRITE-safe

    Dé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.archive WRITE-safe

    Archive une idée Studio pour qu'elle n'apparaisse plus dans le pipeline d'idéation actif. Réversible.

    scope: studio:write
  • studio.draft.delete DESTRUCTIVE

    Supprime un brouillon Studio.

    scope: studio:delete
  • studio.publication.delete DESTRUCTIVE

    Supprime 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.list READ

    Liste les fournisseurs (dropship / logistique) configurés pour la boutique du workspace (nom, site, email de contact, notes).

    scope: products:read
  • suppliers.create WRITE-safe

    Ajoute un fournisseur (dropship / logistique) à la boutique du workspace. Renvoie le nouvel id du fournisseur.

    scope: products:write
  • suppliers.update WRITE-safe

    Met à jour un fournisseur de la boutique (nom, site, email de contact, notes). Scopé au workspace.

    scope: products:write
  • suppliers.delete DESTRUCTIVE

    Supprime 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.list READ

    Liste 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.get READ

    Récupère un fil de support membre avec tout son historique de messages. Scopé au workspace courant.

    scope: support:read
  • support.reply WRITE-safe

    Publie 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_status WRITE-safe

    Ré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.list READ

    Liste 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.get READ

    Ré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.list READ

    Liste 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.get READ

    Ré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_log READ

    Journal 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.list READ

    Liste 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_role WRITE-safe

    Change 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.suspend WRITE-safe

    Suspend 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.reactivate WRITE-safe

    Ré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.resend WRITE-safe

    Renvoie 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.create WRITE-safe

    Cré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.update WRITE-safe

    Met à 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_permissions WRITE-safe

    Remplace 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.delete DESTRUCTIVE

    Supprime 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.remove DESTRUCTIVE

    Retire 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.invite WRITE-safe

    Invite 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_calls READ

    Liste 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_detail READ

    Ré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_lists READ

    Liste les call lists du workspace courant avec les compteurs de progression (total / completed / positive).

    scope: voice:read
  • voice.start_call WRITE-safe

    Pré-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_phone WRITE-safe

    Enrichit 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_dnc WRITE-safe

    Ajoute 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.list READ

    Liste 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.get READ

    Ré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.list READ

    Liste les webinaires du workspace (les mis en avant d'abord, puis par date planifiée).

    scope: webinars:read
  • webinaires.get READ

    Récupère un webinaire par id.

    scope: webinars:read
  • webinaires.set_featured WRITE-safe

    Marque un webinaire comme étant celui mis en avant (retire la mise en avant des autres).

    scope: webinars:write
  • webinaires.create WRITE-safe

    Cré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.update WRITE-safe

    Met à 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.archive WRITE-safe

    Archive un webinaire (le retire de la liste active ; inscrits et historique sont conservés).

    scope: webinars:write
  • webinaires.delete DESTRUCTIVE

    Supprime 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

workbench.*

  • workbench.tasks.list READ

    Liste les tâches Workbench.

    scope: workbench:read
  • workbench.projects.list READ

    Liste les projets Workbench.

    scope: workbench:read
  • workbench.milestones.list READ

    Liste 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.kpis READ

    KPIs 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.list READ

    Liste 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_projects READ

    Liste 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_heatmap READ

    Heatmap 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_activity READ

    É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.create WRITE-safe

    Crée une nouvelle tâche Workbench.

    scope: workbench:write
  • workbench.task.update WRITE-safe

    Met à jour une tâche Workbench.

    scope: workbench:write
  • workbench.task.assign WRITE-safe

    Assigne une tâche Workbench à un utilisateur.

    scope: workbench:write
  • workbench.task.update_status WRITE-safe

    Changement 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_up WRITE-safe

    Cré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.delete DESTRUCTIVE

    Supprime une tâche Workbench.

    scope: workbench:delete

workspace.*

  • workspace.branding.get READ

    Ré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