Pour les agents IA
Connectez votre agent en une étape. Il gère vos réseaux sociaux.
Markaestro est conçu pour être piloté par du logiciel. Un client MCP comme Claude Code se connecte via le navigateur et reçoit une clé liée à une seule marque ; tout autre agent obtient la même clé depuis les Paramètres. Dans les deux cas, l'agent peut découvrir sur quels comptes il peut publier, importer des médias, rédiger et planifier des posts, les publier et rendre compte de ce qui est réellement parti, sur Facebook, Instagram, TikTok, LinkedIn, Threads et Pinterest.
Aucun SDK à installer, aucun identifiant de plateforme à surveiller. Votre équipe connecte les comptes une fois dans le tableau de bord ; l'agent parle ensuite à une seule API à jeton bearer.
Conçu pour l'autonomie, limité à dessein
Pourquoi une clé API constitue toute l'intégration
La difficulté de laisser un agent toucher aux réseaux sociaux n'est pas le HTTP. C'est de s'assurer qu'un modèle en confusion ne puisse pas publier sur la mauvaise marque, publier en double lors d'une nouvelle tentative, ou envoyer quelque chose que personne n'a relu. Ces garanties se trouvent dans la surface de l'API elle-même, pas dans votre prompt.
Clients MCP
Connectez-vous depuis le client. Rien à coller.
Claude Code, Claude, Cursor, ChatGPT, Grok, Grok Bot, OpenClaw, Hermes et tout autre client parlant le Model Context Protocol peuvent se connecter au serveur MCP hébergé de Markaestro sans aucun identifiant configuré. Le premier appel d'outil ouvre votre navigateur : connectez-vous, choisissez l'espace de travail et la marque sur laquelle l'agent peut agir, vérifiez les autorisations et cliquez sur Autoriser. Le client reçoit une clé liée à cette marque et la renouvelle tout seul.
Il s'agit d'OAuth 2.1 standard avec PKCE et enregistrement dynamique des clients, le même mécanisme que les autres serveurs MCP hébergés, donc cela fonctionne sans plugin propre à Markaestro. Le serveur se trouve à https://markaestro.com/api/public/v1/mcp et expose trente et un outils au-dessus de l'API publique : découverte des marques et destinations, import de médias, brouillons et posts planifiés, publication avec suivi des exécutions, opérations en masse, webhooks et règles par canal.
Connectez votre agent
Choisissez votre agent. Trois étapes, puis il peut publier.
Chaque client ci-dessous atteint le même serveur MCP hébergé. La plupart se connectent via le navigateur : le premier appel d'outil ouvre une page de consentement où vous choisissez l'espace de travail et la marque sur laquelle l'agent peut agir, et le client reçoit une clé liée à cette marque. Les clients qui ne peuvent pas ouvrir de navigateur utilisent une clé API d'espace de travail. Même serveur, mêmes autorisations, même liste dans les Paramètres.
Claude Code
Le plugin installe la skill et le serveur hébergé ensemble. Rien à configurer, rien à coller.
Avant de commencer
- Vous êtes propriétaire ou administrateur de l'espace de travail avec un e-mail vérifié, sur un espace avec un forfait actif et au moins une marque.
- Claude Code est installé et connecté à votre compte Anthropic.
Se connecter
- Posez à Claude une question sur Markaestro, ou exécutez /mcp et choisissez markaestro.
- Votre navigateur ouvre la page de consentement. Choisissez l'espace de travail et la marque, vérifiez les autorisations, cliquez sur Autoriser.
- Pour changer de marque plus tard, exécutez /mcp à nouveau, déconnectez-vous et reconnectez-vous avec l'autre marque.
Vérifier
- Demandez à l'agent d'appeler list_products. Il doit répondre avec la seule marque autorisée et ses canaux connectés.
- La connexion figure dans Paramètres, API avec le badge Agent connecté, sa dernière utilisation et son volume de requêtes. Vous pouvez la révoquer là à tout moment.
Ajouter le serveur
- Exécutez les deux commandes du plugin dans un terminal, ou ajoutez seulement le serveur avec la troisième commande.
# The plugin bundles the skill and the hosted server.
claude plugin marketplace add D3vBaba/Markaestro
claude plugin install markaestro@markaestro
# Or add just the server. No key, no header: the first call opens the browser.
claude mcp add --transport http markaestro https://markaestro.com/api/public/v1/mcpClaude
claude.ai et Claude Desktop prennent l'URL du serveur comme connecteur personnalisé et se connectent via la même page de consentement.
Avant de commencer
- Vous êtes propriétaire ou administrateur de l'espace de travail avec un e-mail vérifié, sur un espace avec un forfait actif et au moins une marque.
- Les connecteurs personnalisés sont disponibles sur les forfaits Claude payants. Sur Team et Enterprise, un propriétaire doit parfois les activer.
Se connecter
- Cliquez sur Connecter à côté de Markaestro. La page de consentement s'ouvre dans un nouvel onglet.
- Choisissez l'espace de travail et la marque, vérifiez les autorisations, cliquez sur Autoriser. L'onglet se ferme et le connecteur apparaît connecté.
- Dans une discussion, activez Markaestro depuis le menu des outils quand vous voulez que l'agent l'utilise.
Vérifier
- Demandez à l'agent d'appeler list_products. Il doit répondre avec la seule marque autorisée et ses canaux connectés.
- La connexion figure dans Paramètres, API avec le badge Agent connecté, sa dernière utilisation et son volume de requêtes. Vous pouvez la révoquer là à tout moment.
Ajouter le serveur
- Ouvrez Paramètres, Connecteurs, puis Ajouter un connecteur personnalisé.
- Collez l'URL du serveur ci-dessous, laissez les champs client OAuth vides et cliquez sur Ajouter.
https://markaestro.com/api/public/v1/mcpCursor
Un clic ajoute le serveur à Cursor. Le premier appel d'outil ouvre la connexion dans le navigateur ; Cursor garde le jeton dans le trousseau du système.
Avant de commencer
- Vous êtes propriétaire ou administrateur de l'espace de travail avec un e-mail vérifié, sur un espace avec un forfait actif et au moins une marque.
- Cursor avec MCP activé. Les serveurs MCP distants fonctionnent sur tous les forfaits Cursor.
Se connecter
- Ouvrez Cursor Settings, Tools & MCP. Markaestro affiche Needs login ; cliquez dessus.
- Votre navigateur ouvre la page de consentement. Choisissez l'espace de travail et la marque, cliquez sur Autoriser. Cursor récupère le jeton et liste les outils.
- Grok Bot dans Cursor utilise la même entrée de serveur.
Vérifier
- Demandez à l'agent d'appeler list_products. Il doit répondre avec la seule marque autorisée et ses canaux connectés.
- La connexion figure dans Paramètres, API avec le badge Agent connecté, sa dernière utilisation et son volume de requêtes. Vous pouvez la révoquer là à tout moment.
Ajouter le serveur
- Cliquez sur Ajouter à Cursor et confirmez l'installation dans Cursor.
- Ou collez le JSON dans .cursor/mcp.json d'un projet (partagé avec l'équipe via git) ou dans ~/.cursor/mcp.json (vous seul).
// .cursor/mcp.json (project) or ~/.cursor/mcp.json (global)
{
"mcpServers": {
"markaestro": {
"url": "https://markaestro.com/api/public/v1/mcp"
}
}
}Pour une machine de build partagée ou la CI, une clé API d'espace de travail dans les en-têtes remplace la connexion.
// Without a browser: pass a workspace API key instead.
{
"mcpServers": {
"markaestro": {
"url": "https://markaestro.com/api/public/v1/mcp",
"headers": { "Authorization": "Bearer mk_live_..." }
}
}
}ChatGPT
ChatGPT se connecte à Markaestro comme application personnalisée en mode développeur et se connecte via la page de consentement.
Avant de commencer
- Vous êtes propriétaire ou administrateur de l'espace de travail avec un e-mail vérifié, sur un espace avec un forfait actif et au moins une marque.
- Le mode développeur nécessite ChatGPT Pro, Business, Enterprise ou Edu. Pro n'expose que les outils en lecture ; Business, Enterprise et Edu les exposent tous.
- Sur Business, Enterprise et Edu, un administrateur doit parfois autoriser les applications personnalisées pour l'espace de travail.
Se connecter
- La page de consentement s'ouvre pendant que ChatGPT analyse les outils. Choisissez l'espace de travail et la marque, cliquez sur Autoriser, puis sur Créer.
- Dans une discussion, cliquez sur le bouton plus, Plus, puis Markaestro pour rendre les outils disponibles.
- ChatGPT s'enregistre auprès de Markaestro une fois par connexion. Se reconnecter crée une nouvelle connexion que vous pouvez révoquer séparément.
Vérifier
- Demandez à l'agent d'appeler list_products. Il doit répondre avec la seule marque autorisée et ses canaux connectés.
- La connexion figure dans Paramètres, API avec le badge Agent connecté, sa dernière utilisation et son volume de requêtes. Vous pouvez la révoquer là à tout moment.
Ajouter le serveur
- Ouvrez Paramètres, Applications et connecteurs, Paramètres avancés, puis activez le mode développeur.
- De retour dans Applications et connecteurs, cliquez sur Créer. Nommez-la Markaestro, collez l'URL du serveur, choisissez OAuth comme authentification, puis cliquez sur Analyser les outils.
https://markaestro.com/api/public/v1/mcpGrok
Grok atteint Markaestro de trois façons : comme connecteur personnalisé sur grok.com, depuis le terminal Grok Build, et comme outil MCP distant dans l'API xAI.
Avant de commencer
- Vous êtes propriétaire ou administrateur de l'espace de travail avec un e-mail vérifié, sur un espace avec un forfait actif et au moins une marque.
- Les connecteurs grok.com fonctionnent sur les forfaits personnels. Grok Business et Enterprise nécessitent qu'un administrateur d'équipe provisionne le connecteur.
- La voie de l'API xAI s'exécute côté serveur, donc elle utilise toujours une clé API d'espace de travail.
Se connecter
- grok.com et Grok Build ouvrent la page de consentement au premier appel d'outil. Choisissez l'espace de travail et la marque, cliquez sur Autoriser.
- Pour l'API xAI, créez une clé API d'espace de travail et passez-la dans le champ authorization.
Vérifier
- Demandez à l'agent d'appeler list_products. Il doit répondre avec la seule marque autorisée et ses canaux connectés.
- La connexion figure dans Paramètres, API avec le badge Agent connecté, sa dernière utilisation et son volume de requêtes. Vous pouvez la révoquer là à tout moment.
Ajouter le serveur
- grok.com : ouvrez grok.com/connectors, cliquez sur New Connector, choisissez Custom et collez l'URL du serveur. Si la boîte de dialogue demande un id client, utilisez les valeurs ci-dessous.
- Grok Build : exécutez les deux commandes dans un terminal. Grok Build reprend aussi une entrée Markaestro depuis le .mcp.json de Claude Code ou le mcp.json de Cursor.
- API xAI : ajoutez le bloc d'outil au tableau tools d'une requête Responses API.
Connecteur personnalisé grok.com
Server URL: https://markaestro.com/api/public/v1/mcp
grok.com's Custom Connector asks only for a name and this URL. It registers
itself and opens the browser sign-in, no client id or secret to enter.
(If a future dialog does ask, use client id markaestro-grok-web with a blank secret.)Terminal Grok Build
# Grok Build (terminal). The first tool call opens the browser.
grok mcp add --transport http markaestro https://markaestro.com/api/public/v1/mcp
grok mcp doctor markaestro
# Headless: pass a workspace API key instead.
grok mcp add --transport http markaestro https://markaestro.com/api/public/v1/mcp \
--header "Authorization: Bearer ${MARKAESTRO_API_KEY}"Bloc d'outil xAI Responses API
// xAI Responses API: one entry in the request's "tools" array.
// Server-side, so it always uses a workspace API key.
{
"type": "mcp",
"server_url": "https://markaestro.com/api/public/v1/mcp",
"server_label": "markaestro",
"authorization": "Bearer mk_live_...",
"allowed_tools": ["list_products", "list_destinations", "upload_media",
"create_post", "publish_post", "get_job_run"]
}Grok Bot
Grok Bot s'exécute sur un ordinateur cloud et accepte des serveurs MCP personnalisés avec une clé statique. La bêta n'a pas encore de connexion par navigateur pour les serveurs personnalisés.
Avant de commencer
- Vous êtes propriétaire ou administrateur de l'espace de travail avec un e-mail vérifié, sur un espace avec un forfait actif et au moins une marque.
- Grok Bot est en bêta précoce sur les forfaits SuperGrok et dans Cursor Pro. L'accès Enterprise passe par une liste d'attente.
- Vous avez une clé API d'espace de travail avec les portées agent. Créez-en une avec le bouton ci-dessous.
Utiliser une clé API
- Créez une clé limitée à une marque avec une expiration. Stockez-la uniquement dans les paramètres de connecteurs du Bot, jamais dans un message.
- Si Grok Bot ajoute la connexion par navigateur pour les serveurs personnalisés, retirez l'en-tête et reconnectez. Cette voie fonctionne déjà sur ce serveur.
Vérifier
- Demandez à l'agent d'appeler list_products. Il doit répondre avec la seule marque autorisée et ses canaux connectés.
- La connexion figure dans Paramètres, API avec le badge Agent connecté, sa dernière utilisation et son volume de requêtes. Vous pouvez la révoquer là à tout moment.
Ajouter le serveur
- Ouvrez les paramètres de connecteurs de votre Bot et ajoutez un serveur MCP personnalisé.
- Collez l'URL du serveur, puis ajoutez la clé en en-tête avec les valeurs ci-dessous.
Valeurs d'en-tête pour la boîte de dialogue du connecteur
Server URL: https://markaestro.com/api/public/v1/mcp
Header name: Authorization (or x-api-key if that is the only field)
Header value: Bearer mk_live_... (with x-api-key: just mk_live_...)OpenClaw
OpenClaw ajoute des serveurs MCP distants depuis sa CLI et termine la connexion sur un port loopback, donc sur la machine qui exécute votre gateway.
Avant de commencer
- Vous êtes propriétaire ou administrateur de l'espace de travail avec un e-mail vérifié, sur un espace avec un forfait actif et au moins une marque.
- OpenClaw est installé et la gateway tourne.
- Un serveur sans navigateur peut terminer la connexion avec le repli --code.
Se connecter
- openclaw mcp login markaestro affiche l'URL de connexion et attend sur un port loopback.
- Ouvrez l'URL, choisissez l'espace de travail et la marque, cliquez sur Autoriser. OpenClaw stocke les identifiants hors du fichier de configuration.
- Exécutez openclaw mcp reload pour que les agents en cours récupèrent les outils.
Vérifier
- Demandez à l'agent d'appeler list_products. Il doit répondre avec la seule marque autorisée et ses canaux connectés.
- La connexion figure dans Paramètres, API avec le badge Agent connecté, sa dernière utilisation et son volume de requêtes. Vous pouvez la révoquer là à tout moment.
Ajouter le serveur
- Exécutez les trois commandes, ou ajoutez le bloc serveur à ~/.openclaw/openclaw.json.
- Une fois la skill Markaestro sur ClawHub, openclaw skills install markaestro ajoute aussi les instructions de l'agent.
openclaw mcp add markaestro \
--url https://markaestro.com/api/public/v1/mcp \
--transport streamable-http \
--auth oauth
openclaw mcp login markaestro # prints the sign-in URL; add --code <code> when headless
openclaw mcp reloadEntrée de configuration équivalente
// ~/.openclaw/openclaw.json
{
"mcp": {
"servers": {
"markaestro": {
"url": "https://markaestro.com/api/public/v1/mcp",
"transport": "streamable-http",
"auth": "oauth"
}
}
}
}Sans navigateur
# Without a browser: a workspace API key from the environment.
openclaw mcp add markaestro \
--url https://markaestro.com/api/public/v1/mcp \
--transport streamable-http \
--header "Authorization: Bearer ${MARKAESTRO_API_KEY}"Hermes
Hermes Agent enregistre les serveurs MCP HTTP depuis config.yaml et gère la connexion lui-même, en stockant le jeton sous ~/.hermes/mcp-tokens.
Avant de commencer
- Vous êtes propriétaire ou administrateur de l'espace de travail avec un e-mail vérifié, sur un espace avec un forfait actif et au moins une marque.
- Hermes Agent est installé. Les secrets vont dans ~/.hermes/.env et sont référencés comme ${VAR} dans la configuration.
Se connecter
- Au premier appel d'outil, Hermes ouvre la page de consentement. Choisissez l'espace de travail et la marque, cliquez sur Autoriser.
- Hermes renouvelle le jeton lui-même. Révoquez-le depuis Paramètres, API quand vous avez terminé.
Vérifier
- Demandez à l'agent d'appeler list_products. Il doit répondre avec la seule marque autorisée et ses canaux connectés.
- La connexion figure dans Paramètres, API avec le badge Agent connecté, sa dernière utilisation et son volume de requêtes. Vous pouvez la révoquer là à tout moment.
Ajouter le serveur
- Ajoutez le bloc mcp_servers à ~/.hermes/config.yaml.
- Dans une session en cours, envoyez /reload-mcp. Les outils apparaissent comme mcp_markaestro_<tool>.
# ~/.hermes/config.yaml
mcp_servers:
markaestro:
url: "https://markaestro.com/api/public/v1/mcp"
auth: oauthSans navigateur
# Without a browser: a workspace API key, kept in ~/.hermes/.env
mcp_servers:
markaestro:
url: "https://markaestro.com/api/public/v1/mcp"
headers:
Authorization: "Bearer ${MARKAESTRO_API_KEY}"Autre client MCP
Tout client qui parle Streamable HTTP et OAuth 2.1 avec enregistrement dynamique de client se connecte avec la seule URL du serveur.
Avant de commencer
- Vous êtes propriétaire ou administrateur de l'espace de travail avec un e-mail vérifié, sur un espace avec un forfait actif et au moins une marque.
- Le client prend en charge les serveurs MCP distants en Streamable HTTP et peut ouvrir un navigateur pour OAuth. Sinon, utilisez l'onglet Clé API.
Se connecter
- Le premier appel d'outil reçoit un défi de connexion et le client ouvre la page de consentement.
- Choisissez l'espace de travail et la marque, cliquez sur Autoriser. Le client échange le code contre une clé liée à la marque et la renouvelle tous les 30 jours.
Vérifier
- Demandez à l'agent d'appeler list_products. Il doit répondre avec la seule marque autorisée et ses canaux connectés.
- La connexion figure dans Paramètres, API avec le badge Agent connecté, sa dernière utilisation et son volume de requêtes. Vous pouvez la révoquer là à tout moment.
Ajouter le serveur
- Ajoutez l'URL du serveur dans la configuration MCP du client. Le JSON ci-dessous est la forme mcpServers habituelle.
- Ne configurez ni id client ni secret. Le client s'enregistre lui-même à la première utilisation.
{
"mcpServers": {
"markaestro": {
"type": "http",
"url": "https://markaestro.com/api/public/v1/mcp"
}
}
}Clé API
Pour les jobs CI, les workers cron et les clients sans navigateur : une clé API d'espace de travail dans l'en-tête Authorization atteint le même serveur avec les mêmes autorisations.
Avant de commencer
- Vous êtes propriétaire ou administrateur de l'espace de travail avec un e-mail vérifié, sur un espace avec un forfait actif et au moins une marque.
- Vous pouvez créer des clés : propriétaire ou administrateur de l'espace de travail avec un e-mail vérifié.
Utiliser une clé API
Vérifier
- Demandez à l'agent d'appeler list_products. Il doit répondre avec la seule marque autorisée et ses canaux connectés.
- La connexion figure dans Paramètres, API avec le badge Agent connecté, sa dernière utilisation et son volume de requêtes. Vous pouvez la révoquer là à tout moment.
Ajouter le serveur
- Créez une clé liée à une marque avec seulement les portées nécessaires à l'agent et une expiration.
- Passez-la en en-tête bearer au serveur hébergé, ou en MARKAESTRO_API_KEY au serveur stdio local, qui peut aussi téléverser des fichiers depuis le disque.
# CI, cron, or any client without a browser: pass a key instead.
claude mcp add --transport http markaestro https://markaestro.com/api/public/v1/mcp \
--header "Authorization: Bearer mk_live_..."
# Local stdio server (can also upload files from disk)
claude mcp add markaestro -e MARKAESTRO_API_KEY=mk_live_... -- npx -y @markaestro/mcp{
"mcpServers": {
"markaestro": {
"type": "http",
"url": "https://markaestro.com/api/public/v1/mcp",
"headers": { "Authorization": "Bearer mk_live_..." }
}
}
}Ce qui se passe quand le client se connecte
Cinq étapes, toutes prises en charge par le client et le navigateur. Vous ne voyez que la page de consentement.
POST /api/public/v1/mcp → 401 + WWW-AuthenticateLe client appelle le point de terminaison MCP sans identifiant. Markaestro répond 401 avec un en-tête WWW-Authenticate qui nomme le document de métadonnées de la ressource protégée. C'est cet en-tête qui indique au client qu'une connexion est possible.
GET /.well-known/oauth-protected-resource · /.well-known/oauth-authorization-serverLe client lit deux documents publics : quel serveur d'autorisation protège le point de terminaison, et où se trouvent ses points d'enregistrement, d'autorisation et de jeton. Les deux sont servis sur markaestro.com et peuvent être mis en cache.
POST /api/public/v1/oauth/registerLe client s'enregistre avec un nom et son adresse de retour. Les adresses loopback, les retours https et les schémas d'applications natives sont acceptés ; le http simple vers un vrai hôte est refusé. Aucun identifiant client prépartagé n'est nécessaire.
GET /oauth/authorize (browser)Votre navigateur ouvre la page de consentement. Un propriétaire ou administrateur de l'espace de travail avec e-mail vérifié choisit l'espace et la marque, ajuste les autorisations et clique sur Autoriser. Markaestro renvoie le navigateur vers le client avec un code à usage unique.
POST /api/public/v1/oauth/tokenLe client échange le code et son vérificateur PKCE contre un jeton d'accès et un jeton de rafraîchissement. Le jeton d'accès est une clé API d'espace de travail ordinaire, liée à la marque choisie. Il expire après 30 jours ; un rafraîchissement fait tourner son secret et le prolonge de 30 jours.
Le jeton est une vraie clé API
Scopes, liaison à la marque, limites de débit, contrôles d'abonnement, idempotence et révocation passent par le même code qu'une clé créée à la main. Il n'y a pas de second modèle d'autorisations à comprendre.
Listé et révocable dans les Paramètres
Un agent connecté apparaît dans Paramètres, API avec le badge Agent connecté, sa dernière utilisation et son volume de requêtes. Révoquez-le là et le prochain appel du client échoue ; le client peut aussi révoquer son propre jeton quand vous le déconnectez.
Une connexion, une marque
Chaque connexion est liée à exactement une marque, choisie au consentement. Pour qu'un agent travaille sur une seconde marque, reconnectez-le et choisissez cette marque. Un client ne peut jamais atteindre une marque qui ne lui a pas été accordée.
Codes et jetons de rafraîchissement à usage unique
Les codes d'autorisation vivent dix minutes et sont consommés de façon atomique, donc un code rejoué échoue. Les jetons de rafraîchissement tournent à chaque usage et sont stockés hachés. Les enregistrements de clients inactifs expirent après 180 jours.
Points de terminaison
Pour qui construit un client MCP ou audite le flux. Tout est découvrable depuis les deux documents well-known ; rien ici ne se configure à la main.
# Discovery (public, cacheable)
GET /.well-known/oauth-protected-resource RFC 9728
GET /.well-known/oauth-authorization-server RFC 8414
# Authorization server
POST /api/public/v1/oauth/register RFC 7591, public clients (PKCE) or client_secret
GET /oauth/authorize?response_type=code&client_id=…&redirect_uri=…
&code_challenge=…&code_challenge_method=S256&state=…
POST /api/public/v1/oauth/token grant_type=authorization_code | refresh_token
POST /api/public/v1/oauth/revoke RFC 7009
# Token response
{ "access_token": "mk_live_<ws>.<client>.<secret>", "token_type": "Bearer",
"expires_in": 2592000, "refresh_token": "…", "scope": "products.read posts.write …" }Le cycle de l'agent
Cinq appels, du début à la fin
Chaque automatisation Markaestro est une variation de ce cycle. Les étapes une à trois relèvent de l<connectLink>API Connect</connectLink>, la surface plate que la plupart des agents devraient viser. Les étapes quatre et cinq accèdent à lAPI complète /api/public/v1 pour la publication explicite et le suivi des exécutions.
GET /api/connect/v1/social-accountsRenvoie chaque compte connecté et publiable pour la marque de la clé, chacun avec plateforme, nom d'utilisateur et id opaque. Appelez-le au début de chaque exécution, les connexions changent.
POST /api/connect/v1/media/create-upload-url → PUTGénérez une URL signée, à usage unique et de courte durée, puis envoyez les octets bruts via PUT. Vous recevez un id de contenu. Images jusqu'à 10 Mo ; l'API complète accepte aussi la vidéo jusqu'à 250 Mo.
POST /api/connect/v1/postsEnvoyez le texte, les ids de contenu et les ids de compte tels quels. Laissez en brouillon pour révision, ou envoyez is_draft false avec scheduled_at pour le placer sur le calendrier.
POST /api/public/v1/posts/:id/publishMet en file une exécution asynchrone. LinkedIn, Threads et Pinterest se publient via l'API officielle. Facebook, Instagram et TikTok arrivent dans la file « À publier » de l'espace de travail pour qu'une personne les publie de façon native.
GET /api/public/v1/job-runs/:id · webhooksConsultez l'id de l'exécution, ou enregistrez un endpoint de webhook et laissez Markaestro vous envoyer post.published, post.action_required et post.failed. Ne supposez jamais qu'une publication s'est terminée de façon synchrone.
Démarrage rapide
Une intégration fonctionnelle en quatre commandes
D'abord, générez la clé : ouvrez Paramètres → API, choisissez la marque à laquelle elle aura accès, cochez les permissions nécessaires et, éventuellement, définissez une date d'expiration. La clé s'affiche une seule fois, placez-la directement dans le coffre à secrets de votre agent. Créer des clés nécessite un administrateur ou propriétaire avec un e-mail vérifié.
# The API is served from the marketing apex and the app subdomain alike.
export MARKAESTRO_URL="https://markaestro.com"
export MARKAESTRO_API_KEY="mk_live_<workspaceId>.<clientId>.<secret>"
# 1. What can this key post to?
curl -s "$MARKAESTRO_URL/api/connect/v1/social-accounts" \
-H "Authorization: Bearer $MARKAESTRO_API_KEY"{
"data": [
{
"id": "prod_123#instagram:instagram:ig_123",
"product_id": "prod_123",
"product": "Northwind Coffee",
"platform": "instagram",
"username": "northwindcoffee"
}
]
}# 2. Mint a signed upload url, then PUT the bytes.
RESP=$(curl -s -X POST "$MARKAESTRO_URL/api/connect/v1/media/create-upload-url" \
-H "Authorization: Bearer $MARKAESTRO_API_KEY" \
-H "Content-Type: application/json" \
-d '{ "mime_type": "image/png", "size_bytes": 184320, "name": "cold-brew.png" }')
# → { "media_id": "ast_777", "upload_url": "https://.../media/upload?token=..." }
curl -X PUT "<upload_url>" \
-H "Content-Type: image/png" \
--data-binary @cold-brew.pngis_draft: false avec un horodatage scheduled_at pour le placer sur le calendrier à la place.# 3. Put it on the calendar. Pass the account id back verbatim.
curl -X POST "$MARKAESTRO_URL/api/connect/v1/posts" \
-H "Authorization: Bearer $MARKAESTRO_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"caption": "Cold brew season starts Friday.",
"media": ["ast_777"],
"social_accounts": ["prod_123#instagram:instagram:ig_123"],
"is_draft": false,
"scheduled_at": "2026-08-14T15:00:00.000Z"
}'
# 4. Check where everything stands.
curl -s "$MARKAESTRO_URL/api/connect/v1/posts?limit=20" \
-H "Authorization: Bearer $MARKAESTRO_API_KEY"Prêt à l'emploi
Définitions d'outils et résumé pour l'agent
Deux choses à copier. La première est un ensemble de schémas d'outils couvrant tout le cycle de publication, écrits en JSON Schema, ils fonctionnent donc comme des définitions d'outils Claude, des fonctions OpenAI, ou la forme d'entrée pour un serveur MCP que vous hébergez. La seconde est le résumé opérationnel qui empêche un modèle de faire quelque chose d'inattendu avec eux.
[
{
"name": "markaestro_list_accounts",
"description": "List the social accounts this Markaestro key can publish to. Call this first in every run. Never hardcode account ids. Returns id, platform, and username.",
"input_schema": { "type": "object", "properties": {}, "required": [] }
},
{
"name": "markaestro_upload_media",
"description": "Upload one image or video to Markaestro and return a media asset id. Images: png, jpeg, webp, gif up to 10 MB. Video: mp4, mov, webm up to 250 MB.",
"input_schema": {
"type": "object",
"properties": {
"file_path": { "type": "string", "description": "Local path to the file to upload." },
"mime_type": { "type": "string", "description": "MIME type of the file." }
},
"required": ["file_path", "mime_type"]
}
},
{
"name": "markaestro_create_post",
"description": "Create a post for one channel. Facebook, Instagram, and TikTok are manual-first: a human posts them natively from the To Post queue. Omit delivery_mode unless the user explicitly asked for unattended publishing.",
"input_schema": {
"type": "object",
"properties": {
"channel": {
"type": "string",
"enum": ["facebook", "instagram", "tiktok", "linkedin", "threads", "pinterest", "x"]
},
"caption": { "type": "string", "description": "Caption text, max 4000 characters." },
"media_asset_ids": {
"type": "array",
"items": { "type": "string" },
"description": "Ids from markaestro_upload_media. Instagram and TikTok require at least one."
},
"destination_id": {
"type": "string",
"description": "From markaestro_list_accounts. Required only when the brand has more than one destination on that channel."
},
"delivery_mode": {
"type": "string",
"enum": ["manual_reminder", "direct_publish", "platform_inbox"],
"description": "Omit for the channel default."
}
},
"required": ["channel", "caption"]
}
},
{
"name": "markaestro_publish_post",
"description": "Queue an async publish run for an existing post. Returns a run id. Poll it, do not assume the post is live.",
"input_schema": {
"type": "object",
"properties": { "post_id": { "type": "string" } },
"required": ["post_id"]
}
},
{
"name": "markaestro_list_posts",
"description": "List posts for this brand, newest first. Filter by status: draft, scheduled, publishing, published, platform_action_required, failed, partial_failed.",
"input_schema": {
"type": "object",
"properties": {
"status": { "type": "string" },
"limit": { "type": "integer", "minimum": 1, "maximum": 100 }
},
"required": []
}
},
{
"name": "markaestro_delete_post",
"description": "Remove a post from Markaestro. Use it to cancel something scheduled. Deleting an already-published post does NOT retract the live copy on the platform.",
"input_schema": {
"type": "object",
"properties": { "post_id": { "type": "string" } },
"required": ["post_id"]
}
}
]You have a Markaestro API key for exactly one brand. Markaestro is the
publishing layer: you supply the caption and the media, it handles the
platform rules, the calendar, and delivery.
Base URL: https://markaestro.com
Auth: Authorization: Bearer $MARKAESTRO_API_KEY
Rules:
- Call GET /api/connect/v1/social-accounts before posting. Pass the returned
account ids back verbatim. Never invent or cache an id across runs.
- Upload media before creating a post; posts reference media ids, not files.
- Facebook, Instagram, and TikTok are manual-first. Creating and publishing
them queues a reminder for a human. That is the intended behavior. Only
send deliveryMode "direct_publish" if the operator explicitly asked for it.
- Send a unique Idempotency-Key on every POST. Reuse the SAME key when
retrying the SAME request; never reuse it for a different one.
- On 429, wait the number of seconds in Retry-After, then retry. On 4xx other
than 429, do not retry. Report the error code and requestId and stop.
- Publishing is async. POST /publish returns a run id; poll
GET /api/public/v1/job-runs/<id> until succeeded or failed.
- To cancel, list with ?status=scheduled and DELETE the post id. Deleting a
published post does not remove it from the platform.
- Never claim a post is live until a run reports succeeded or a post reports
published.Votre agent peut aussi récupérer ceci lui-même : curl https://markaestro.com/llms.txt renvoie un résumé en texte brut de toute l'API, endpoints, règles et gestion des erreurs, assez compact pour tenir dans le contexte.
Recettes
Les quatre flux de travail que les agents utilisent réellement
# Full control: draft → publish → poll. No productId needed:
# the key is already bound to one brand.
POST_ID=$(curl -s -X POST "$MARKAESTRO_URL/api/public/v1/posts" \
-H "Authorization: Bearer $MARKAESTRO_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: post-2026-08-14-linkedin" \
-d '{
"channel": "linkedin",
"caption": "We shipped agent-driven publishing.",
"mediaAssetIds": ["ast_777"]
}' | jq -r .post.id)
RUN_ID=$(curl -s -X POST "$MARKAESTRO_URL/api/public/v1/posts/$POST_ID/publish" \
-H "Authorization: Bearer $MARKAESTRO_API_KEY" \
-H "Idempotency-Key: publish-$POST_ID" | jq -r .run.id)
# queued → running → succeeded | failed
curl -s "$MARKAESTRO_URL/api/public/v1/job-runs/$RUN_ID" \
-H "Authorization: Bearer $MARKAESTRO_API_KEY"# Review the queue, then cancel what the operator rejected.
curl -s "$MARKAESTRO_URL/api/public/v1/posts?status=scheduled&limit=100" \
-H "Authorization: Bearer $MARKAESTRO_API_KEY"
curl -X DELETE "$MARKAESTRO_URL/api/public/v1/posts/pst_123" \
-H "Authorization: Bearer $MARKAESTRO_API_KEY"
# → { "deleted": true, "id": "pst_123" }# One call, up to 25 posts. Per-item results: one bad item
# does not fail the batch.
curl -X POST "$MARKAESTRO_URL/api/public/v1/posts" \
-H "Authorization: Bearer $MARKAESTRO_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: week-33-drop" \
-d '{
"posts": [
{ "channel": "instagram", "caption": "Monday", "mediaAssetIds": ["ast_1"] },
{ "channel": "facebook", "caption": "Tuesday", "mediaAssetIds": ["ast_2"] },
{ "channel": "linkedin", "caption": "Thursday" }
]
}'
# → { "results": [...], "created": 3, "total": 3 }# Let Markaestro call you instead of polling.
curl -X POST "$MARKAESTRO_URL/api/public/v1/webhook-endpoints" \
-H "Authorization: Bearer $MARKAESTRO_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"url": "https://your-agent.example.com/hooks/markaestro",
"events": ["post.published", "post.action_required", "post.failed"]
}'
# Each delivery carries:
# X-Markaestro-Event post.action_required
# X-Markaestro-Timestamp 2026-08-14T15:00:04.000Z
# X-Markaestro-Signature HMAC of the body with your webhook secret
# The secret is shown once at creation and stored hashed. Verify before acting.Garde-fous
Ce que l'agent peut et ne peut pas faire
L'autonomie n'est utile que si le rayon d'impact reste faible. Les valeurs par défaut de Markaestro supposent que l'appelant est un logiciel qui pourrait se tromper.
Facebook, Instagram et TikTok sont en publication manuelle
Les publications que votre agent crée pour ces canaux utilisent par défaut manual_reminder : Markaestro n'appelle jamais l'API de la plateforme pour elles. Publier déplace la publication vers la file « À publier » de l'espace de travail, où une personne télécharge le contenu, publie de façon native et confirme, ainsi la publication a l'air d'avoir été faite à la main, et une personne voit chacune d'elles avant qu'elle n'existe publiquement. Un agent peut activer la publication via API officielle pour une publication donnée avec deliveryMode: "direct_publish", et sur TikTok cela signifie la transmission vers la boîte de réception du créateur, jamais une publication publique sans supervision. LinkedIn, Threads et Pinterest publient de façon programmatique dès que votre agent le demande explicitement.
Limitez la portée de la clé
Choisissez uniquement les permissions dont l'agent a besoin : products.read, media.write, posts.read, posts.write, posts.publish, job_runs.read, webhooks.manage. Un agent de recherche qui ne fait que lire le calendrier reçoit posts.read et rien d'autre.
Donnez-lui une date d'expiration
Les clés peuvent être créées avec une expiration. Une clé expirée se comporte exactement comme une clé révoquée, si bien qu'une clé qui fuit hors de l'environnement d'un agent cesse de fonctionner d'elle-même.
Faites tourner et révoquez
Faites tourner une clé sans changer son id, ou révoquez-la directement depuis Paramètres → API. Chaque clé affiche sa dernière heure d'utilisation et son volume de requêtes, si bien qu'un agent qui se tait, ou qui dérape, reste visible.
Les limites de débit s'appliquent
60 requêtes par minute par endpoint et 240 par minute par clé. Chaque réponse porte X-RateLimit-Limit, -Remaining et -Reset ; un 429 porte Retry-After. Respectez-le plutôt que d'insister.
Markaestro n'écrit jamais à votre place
Il n'y a aucune étape de génération. Le texte vient de votre agent, le contenu vient de votre bibliothèque ou du pipeline de votre agent. Markaestro fournit les mains, pas la voix.
Les suppressions sont côté Markaestro
Supprimer une publication programmée l'annule avant sa sortie. Supprimer une publication déjà publiée fait seulement cesser le suivi par Markaestro, la publication active reste en ligne jusqu'à ce que quelqu'un la supprime sur la plateforme.
Gestion des échecs
Apprenez-lui quelles erreurs méritent une nouvelle tentative
Chaque réponse d'erreur est du JSON avec un code error stable et un requestId. Faites en sorte que votre agent cite le requestId lorsqu'il signale un échec, c'est ce dont le support a besoin pour retrouver l'appel.
| Statut | Code | Ce que l'agent devrait faire |
|---|---|---|
| 401 | UNAUTHENTICATED | La clé est manquante, révoquée ou expirée. Arrêtez et demandez-en une nouvelle à une personne, réessayer ne servira à rien. |
| 403 | FORBIDDEN | La clé n'a pas la permission nécessaire pour cet appel. Signalez quel appel a échoué ; les permissions se modifient dans Paramètres → API. |
| 403 | API_KEY_NOT_BOUND_TO_PRODUCT | Une clé créée avant la limitation par marque. Demandez une clé de remplacement. |
| 400 | VALIDATION_* | Le payload a enfreint une règle du canal (contenu manquant, mode de livraison invalide, scheduled_at incorrect). Corrigez la requête ; ne réessayez pas sans modification. |
| 400 | VALIDATION_IDEMPOTENCY_KEY_REUSED | La même Idempotency-Key a été envoyée avec un corps différent. Générez une nouvelle clé pour chaque requête distincte. |
| 400 | VALIDATION_POST_IS_PUBLISHING | Tentative de suppression d'une publication pendant qu'une exécution de publication était en cours. Attendez qu'elle se termine, puis supprimez. |
| 409 | VALIDATION_POST_ALREADY_PUBLISHING | Une exécution de publication pour cette publication est déjà en file. Ne republiez pas, consultez l'exécution existante. |
| 402 | SUBSCRIPTION_REQUIRED | Aucune offre active n'est associée à cet espace de travail. Demandez à un propriétaire de vérifier la facturation dans les paramètres. |
| 402 | QUOTA_EXCEEDED_MEDIA_UPLOADS | L'espace de travail a atteint son quota mensuel d'imports. Arrêtez d'importer et signalez-le, le contenu existant continue de se publier. |
| 404 | NOT_FOUND | L'id est en dehors de la marque de cette clé. Renvoyé en 404 plutôt qu'en 403 pour que les clés ne puissent pas sonder des ids qu'elles ne possèdent pas. |
| 429 | RATE_LIMITED | Attendez le nombre de secondes indiqué dans Retry-After, puis réessayez la même requête avec la même Idempotency-Key. |
Utilisez votre propre pile technique
Si ça peut faire une requête HTTPS, ça peut publier
Il n'y a aucune bibliothèque cliente Markaestro à adopter, ni aucun framework à respecter. Jeton porteur, JSON en entrée, JSON en sortie.
Claude et le Claude Agent SDK
Ajoutez les définitions d'outils ci-dessus à votre liste d'outils. Les formes JSON Schema sont déjà au format d'utilisation d'outils de Claude.
Appels de fonctions OpenAI
Les mêmes schémas correspondent un à un aux définitions de fonctions, il suffit de renommer input_schema en parameters.
Clients MCP
Claude Code, Claude, Cursor, ChatGPT, Grok, Grok Bot, OpenClaw, Hermes : ajoutez l'URL du serveur hébergé et connectez-vous via le navigateur. Pour les clients stdio uniquement, npx -y @markaestro/mcp exécute les mêmes trente et un outils en local.
n8n, Make, Zapier
Chaque endpoint est une simple requête HTTP avec un jeton porteur. Pas de SDK, pas de cérémonie de signature, pas de danse OAuth pour l'agent.
LangChain et LlamaIndex
Outils REST standards. L'import de contenu en deux étapes est le seul flux à plusieurs appels, et cela tient en deux lignes.
Un cron job et curl
Tous les agents n'ont pas besoin d'un framework. Le démarrage rapide ci-dessus est une intégration complète et fonctionnelle en quatre commandes.