Per agenti IA
Collega il tuo agente in un passaggio. Gestisce lui i tuoi canali social.
Markaestro è fatto per essere usato dal software. Un client MCP come Claude Code accede dal browser e riceve una chiave legata a un solo brand; qualsiasi altro agente ottiene la stessa chiave dalle Impostazioni. In entrambi i casi l'agente può scoprire su quali account può pubblicare, caricare media, scrivere e programmare post, pubblicarli e riferire cosa è davvero uscito, su Facebook, Instagram, TikTok, LinkedIn, Threads e Pinterest.
Nessun SDK da installare, nessuna credenziale di piattaforma da custodire. Il tuo team collega gli account una volta nella dashboard; da lì in poi l'agente parla con un'unica API a token bearer.
Progettata per l'autonomia, limitata di proposito
Perché una chiave API è tutta l'integrazione
La parte difficile di lasciare che un agente tocchi i social media non è l'HTTP. È assicurarsi che un modello confuso non possa pubblicare sul brand sbagliato, pubblicare due volte durante un tentativo ripetuto, o inviare qualcosa che nessuno ha letto. Queste garanzie sono nella superficie dell'API stessa, non nel tuo prompt.
Client MCP
Accedi dal client. Niente da incollare.
Claude Code, Claude, Cursor, ChatGPT, Grok, Grok Bot, OpenClaw, Hermes e ogni altro client che parla il Model Context Protocol possono collegarsi al server MCP ospitato di Markaestro senza credenziali configurate. La prima chiamata a uno strumento apre il browser: accedi, scegli lo spazio di lavoro e il brand su cui l'agente può agire, controlla i permessi e premi Consenti. Il client riceve una chiave legata a quel brand e la rinnova da solo.
È OAuth 2.1 standard con PKCE e registrazione dinamica dei client, lo stesso meccanismo degli altri server MCP ospitati, quindi funziona senza alcun plugin specifico di Markaestro. Il server si trova su https://markaestro.com/api/public/v1/mcp ed espone trentuno strumenti sopra l'API pubblica: scoperta di brand e destinazioni, caricamento media, bozze e post programmati, pubblicazione con monitoraggio delle esecuzioni, operazioni in blocco, webhook e regole per canale.
Collega il tuo agente
Scegli il tuo agente. Tre passaggi e può pubblicare.
Ogni client qui sotto raggiunge lo stesso server MCP ospitato. La maggior parte accede tramite browser: la prima chiamata a uno strumento apre una pagina di consenso dove scegli lo spazio di lavoro e il brand su cui l'agente può agire, e il client riceve una chiave legata a quel brand. I client che non possono aprire un browser usano una chiave API dello spazio di lavoro. Stesso server, stessi permessi, stesso elenco nelle Impostazioni.
Claude Code
Il plugin installa la skill e il server ospitato insieme. Niente da configurare, niente da incollare.
Prima di iniziare
- Sei proprietario o amministratore dello spazio di lavoro con email verificata, in uno spazio con piano attivo e almeno un brand.
- Claude Code è installato e connesso al tuo account Anthropic.
Accedi
- Chiedi a Claude qualcosa su Markaestro, oppure esegui /mcp e scegli markaestro.
- Il browser apre la pagina di consenso. Scegli spazio di lavoro e brand, controlla i permessi, fai clic su Consenti.
- Per cambiare brand in seguito, esegui di nuovo /mcp, esci e accedi con l'altro brand.
Verifica
- Chiedi all'agente di chiamare list_products. Deve rispondere con l'unico brand autorizzato e i suoi canali collegati.
- La connessione compare in Impostazioni, API con il badge Agente collegato, l'ultimo utilizzo e il volume di richieste. Puoi revocarla lì in qualsiasi momento.
Aggiungi il server
- Esegui i due comandi del plugin in un terminale, oppure aggiungi solo il server con il terzo comando.
# 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 e Claude Desktop prendono l'URL del server come connettore personalizzato e accedono tramite la stessa pagina di consenso.
Prima di iniziare
- Sei proprietario o amministratore dello spazio di lavoro con email verificata, in uno spazio con piano attivo e almeno un brand.
- I connettori personalizzati sono disponibili nei piani Claude a pagamento. Su Team ed Enterprise potrebbe doverli abilitare un proprietario.
Accedi
- Fai clic su Connetti accanto a Markaestro. La pagina di consenso si apre in una nuova scheda.
- Scegli spazio di lavoro e brand, controlla i permessi, fai clic su Consenti. La scheda si chiude e il connettore risulta collegato.
- In una chat, abilita Markaestro dal menu degli strumenti quando vuoi che l'agente lo usi.
Verifica
- Chiedi all'agente di chiamare list_products. Deve rispondere con l'unico brand autorizzato e i suoi canali collegati.
- La connessione compare in Impostazioni, API con il badge Agente collegato, l'ultimo utilizzo e il volume di richieste. Puoi revocarla lì in qualsiasi momento.
Aggiungi il server
- Apri Impostazioni, Connettori, poi Aggiungi connettore personalizzato.
- Incolla l'URL del server qui sotto, lascia vuoti i campi del client OAuth e fai clic su Aggiungi.
https://markaestro.com/api/public/v1/mcpCursor
Un clic aggiunge il server a Cursor. La prima chiamata a uno strumento apre l'accesso nel browser; Cursor conserva il token nel portachiavi del sistema.
Prima di iniziare
- Sei proprietario o amministratore dello spazio di lavoro con email verificata, in uno spazio con piano attivo e almeno un brand.
- Cursor con MCP abilitato. I server MCP remoti funzionano su tutti i piani Cursor.
Accedi
- Apri Cursor Settings, Tools & MCP. Markaestro mostra Needs login; fai clic.
- Il browser apre la pagina di consenso. Scegli spazio di lavoro e brand, fai clic su Consenti. Cursor recupera il token ed elenca gli strumenti.
- Grok Bot dentro Cursor usa questa stessa voce di server.
Verifica
- Chiedi all'agente di chiamare list_products. Deve rispondere con l'unico brand autorizzato e i suoi canali collegati.
- La connessione compare in Impostazioni, API con il badge Agente collegato, l'ultimo utilizzo e il volume di richieste. Puoi revocarla lì in qualsiasi momento.
Aggiungi il server
- Fai clic su Aggiungi a Cursor e conferma l'installazione in Cursor.
- Oppure incolla il JSON in .cursor/mcp.json in un progetto (condiviso con il team via git) o in ~/.cursor/mcp.json (solo tu).
// .cursor/mcp.json (project) or ~/.cursor/mcp.json (global)
{
"mcpServers": {
"markaestro": {
"url": "https://markaestro.com/api/public/v1/mcp"
}
}
}Per una macchina di build condivisa o la CI, una chiave API dello spazio di lavoro negli header sostituisce l'accesso.
// 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 si collega a Markaestro come app personalizzata in modalità sviluppatore e accede tramite la pagina di consenso.
Prima di iniziare
- Sei proprietario o amministratore dello spazio di lavoro con email verificata, in uno spazio con piano attivo e almeno un brand.
- La modalità sviluppatore richiede ChatGPT Pro, Business, Enterprise o Edu. Pro espone solo strumenti di lettura; Business, Enterprise ed Edu li espongono tutti.
- Su Business, Enterprise ed Edu potrebbe servire che un amministratore consenta le app personalizzate per lo spazio di lavoro.
Accedi
- La pagina di consenso si apre mentre ChatGPT scansiona gli strumenti. Scegli spazio di lavoro e brand, fai clic su Consenti, poi su Crea.
- In una chat, fai clic sul pulsante più, Altro, poi Markaestro per rendere disponibili gli strumenti.
- ChatGPT si registra su Markaestro una volta per connessione. Ricollegarsi crea una nuova connessione che puoi revocare separatamente.
Verifica
- Chiedi all'agente di chiamare list_products. Deve rispondere con l'unico brand autorizzato e i suoi canali collegati.
- La connessione compare in Impostazioni, API con il badge Agente collegato, l'ultimo utilizzo e il volume di richieste. Puoi revocarla lì in qualsiasi momento.
Aggiungi il server
- Apri Impostazioni, App e connettori, Impostazioni avanzate e attiva la modalità sviluppatore.
- Tornato in App e connettori, fai clic su Crea. Chiamala Markaestro, incolla l'URL del server, scegli OAuth come autenticazione, poi fai clic su Scansiona strumenti.
https://markaestro.com/api/public/v1/mcpGrok
Grok raggiunge Markaestro in tre modi: come connettore personalizzato su grok.com, dal terminale Grok Build e come strumento MCP remoto nell'API xAI.
Prima di iniziare
- Sei proprietario o amministratore dello spazio di lavoro con email verificata, in uno spazio con piano attivo e almeno un brand.
- I connettori di grok.com funzionano sui piani personali. Grok Business ed Enterprise richiedono che un amministratore del team predisponga il connettore.
- La via dell'API xAI gira lato server, quindi usa sempre una chiave API dello spazio di lavoro.
Accedi
- grok.com e Grok Build aprono la pagina di consenso alla prima chiamata a uno strumento. Scegli spazio di lavoro e brand, fai clic su Consenti.
- Per l'API xAI, crea una chiave API dello spazio di lavoro e passala nel campo authorization.
Verifica
- Chiedi all'agente di chiamare list_products. Deve rispondere con l'unico brand autorizzato e i suoi canali collegati.
- La connessione compare in Impostazioni, API con il badge Agente collegato, l'ultimo utilizzo e il volume di richieste. Puoi revocarla lì in qualsiasi momento.
Aggiungi il server
- grok.com: apri grok.com/connectors, fai clic su New Connector, scegli Custom e incolla l'URL del server. Se la finestra chiede un id client, usa i valori qui sotto.
- Grok Build: esegui i due comandi in un terminale. Grok Build recupera una voce Markaestro anche dal .mcp.json di Claude Code o dal mcp.json di Cursor.
- API xAI: aggiungi il blocco strumento all'array tools di una richiesta Responses API.
Connettore personalizzato 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.)Terminale 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}"Blocco strumento 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 gira su un computer cloud e accetta server MCP personalizzati con una chiave statica. La beta non ha ancora l'accesso dal browser per i server personalizzati.
Prima di iniziare
- Sei proprietario o amministratore dello spazio di lavoro con email verificata, in uno spazio con piano attivo e almeno un brand.
- Grok Bot è in beta iniziale sui piani SuperGrok e dentro Cursor Pro. L'accesso Enterprise è su lista d'attesa.
- Hai una chiave API dello spazio di lavoro con gli scope agente. Creane una con il pulsante qui sotto.
Usa una chiave API
Verifica
- Chiedi all'agente di chiamare list_products. Deve rispondere con l'unico brand autorizzato e i suoi canali collegati.
- La connessione compare in Impostazioni, API con il badge Agente collegato, l'ultimo utilizzo e il volume di richieste. Puoi revocarla lì in qualsiasi momento.
Aggiungi il server
- Apri le impostazioni dei connettori del tuo Bot e aggiungi un server MCP personalizzato.
- Incolla l'URL del server, poi aggiungi la chiave come header con i valori qui sotto.
Valori header per la finestra del connettore
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 aggiunge server MCP remoti dalla sua CLI e completa l'accesso su una porta loopback, quindi funziona sulla macchina che esegue il tuo gateway.
Prima di iniziare
- Sei proprietario o amministratore dello spazio di lavoro con email verificata, in uno spazio con piano attivo e almeno un brand.
- OpenClaw è installato e il gateway è in esecuzione.
- Un server senza browser può completare l'accesso con il fallback --code.
Accedi
- openclaw mcp login markaestro stampa l'URL di accesso e attende su una porta loopback.
- Apri l'URL, scegli spazio di lavoro e brand, fai clic su Consenti. OpenClaw salva le credenziali fuori dal file di configurazione.
- Esegui openclaw mcp reload perché gli agenti in esecuzione carichino gli strumenti.
Verifica
- Chiedi all'agente di chiamare list_products. Deve rispondere con l'unico brand autorizzato e i suoi canali collegati.
- La connessione compare in Impostazioni, API con il badge Agente collegato, l'ultimo utilizzo e il volume di richieste. Puoi revocarla lì in qualsiasi momento.
Aggiungi il server
- Esegui i tre comandi, oppure aggiungi il blocco server a ~/.openclaw/openclaw.json.
- Quando la skill Markaestro sarà su ClawHub, openclaw skills install markaestro aggiunge anche le istruzioni per l'agente.
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 reloadVoce di configurazione equivalente
// ~/.openclaw/openclaw.json
{
"mcp": {
"servers": {
"markaestro": {
"url": "https://markaestro.com/api/public/v1/mcp",
"transport": "streamable-http",
"auth": "oauth"
}
}
}
}Senza browser
# 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 registra i server MCP HTTP da config.yaml ed esegue l'accesso da solo, salvando il token in ~/.hermes/mcp-tokens.
Prima di iniziare
- Sei proprietario o amministratore dello spazio di lavoro con email verificata, in uno spazio con piano attivo e almeno un brand.
- Hermes Agent è installato. I segreti vanno in ~/.hermes/.env e si richiamano come ${VAR} nella configurazione.
Accedi
Verifica
- Chiedi all'agente di chiamare list_products. Deve rispondere con l'unico brand autorizzato e i suoi canali collegati.
- La connessione compare in Impostazioni, API con il badge Agente collegato, l'ultimo utilizzo e il volume di richieste. Puoi revocarla lì in qualsiasi momento.
Aggiungi il server
- Aggiungi il blocco mcp_servers a ~/.hermes/config.yaml.
- In una sessione attiva, invia /reload-mcp. Gli strumenti compaiono come mcp_markaestro_<tool>.
# ~/.hermes/config.yaml
mcp_servers:
markaestro:
url: "https://markaestro.com/api/public/v1/mcp"
auth: oauthSenza browser
# 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}"Altro client MCP
Qualsiasi client che parla Streamable HTTP e OAuth 2.1 con registrazione dinamica del client si collega con la sola URL del server.
Prima di iniziare
- Sei proprietario o amministratore dello spazio di lavoro con email verificata, in uno spazio con piano attivo e almeno un brand.
- Il client supporta server MCP remoti su Streamable HTTP e può aprire un browser per OAuth. Se non può, usa la scheda Chiave API.
Accedi
- La prima chiamata a uno strumento riceve una richiesta di accesso e il client apre la pagina di consenso.
- Scegli spazio di lavoro e brand, fai clic su Consenti. Il client scambia il codice con una chiave legata al brand e la rinnova ogni 30 giorni.
Verifica
- Chiedi all'agente di chiamare list_products. Deve rispondere con l'unico brand autorizzato e i suoi canali collegati.
- La connessione compare in Impostazioni, API con il badge Agente collegato, l'ultimo utilizzo e il volume di richieste. Puoi revocarla lì in qualsiasi momento.
Aggiungi il server
- Aggiungi l'URL del server nella configurazione MCP del client. Il JSON qui sotto è la forma comune di mcpServers.
- Non configurare id client o segreto. Il client si registra da solo al primo utilizzo.
{
"mcpServers": {
"markaestro": {
"type": "http",
"url": "https://markaestro.com/api/public/v1/mcp"
}
}
}Chiave API
Per job CI, worker cron e client che non possono aprire un browser: una chiave API dello spazio di lavoro nell'header Authorization raggiunge lo stesso server con gli stessi permessi.
Prima di iniziare
- Sei proprietario o amministratore dello spazio di lavoro con email verificata, in uno spazio con piano attivo e almeno un brand.
- Puoi creare chiavi: proprietario o amministratore dello spazio di lavoro con email verificata.
Usa una chiave API
Verifica
- Chiedi all'agente di chiamare list_products. Deve rispondere con l'unico brand autorizzato e i suoi canali collegati.
- La connessione compare in Impostazioni, API con il badge Agente collegato, l'ultimo utilizzo e il volume di richieste. Puoi revocarla lì in qualsiasi momento.
Aggiungi il server
- Crea una chiave legata a un brand con solo gli scope necessari all'agente e una scadenza.
- Passala come header bearer al server ospitato, oppure come MARKAESTRO_API_KEY al server stdio locale, che può anche caricare file dal disco.
# 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_..." }
}
}
}Cosa succede quando il client si collega
Cinque passaggi, tutti gestiti dal client e dal browser. Tu vedi solo la pagina di consenso.
POST /api/public/v1/mcp → 401 + WWW-AuthenticateIl client chiama l'endpoint MCP senza credenziali. Markaestro risponde 401 con un header WWW-Authenticate che indica il documento di metadati della risorsa protetta. È quell'header a dire al client che è disponibile un accesso.
GET /.well-known/oauth-protected-resource · /.well-known/oauth-authorization-serverIl client legge due documenti pubblici: quale server di autorizzazione protegge l'endpoint e dove si trovano i suoi endpoint di registrazione, autorizzazione e token. Entrambi sono serviti su markaestro.com e memorizzabili in cache.
POST /api/public/v1/oauth/registerIl client si registra con un nome e il suo indirizzo di ritorno. Sono accettati indirizzi loopback, ritorni https e schemi di app native; l'http semplice verso un host reale è rifiutato. Non serve alcun id client precondiviso.
GET /oauth/authorize (browser)Il browser apre la pagina di consenso. Un proprietario o amministratore dello spazio di lavoro con email verificata sceglie spazio e brand, regola i permessi e premi Consenti. Markaestro rimanda il browser al client con un codice monouso.
POST /api/public/v1/oauth/tokenIl client scambia il codice più il suo verificatore PKCE con un token di accesso e un token di refresh. Il token di accesso è una normale chiave API dello spazio di lavoro, legata al brand scelto. Scade dopo 30 giorni; un refresh ne ruota il segreto e lo estende di altri 30.
Il token è una vera chiave API
Scope, vincolo al brand, limiti di frequenza, controlli dell'abbonamento, idempotenza e revoca seguono lo stesso codice di una chiave creata a mano. Non c'è un secondo modello di permessi da capire.
Elencato e revocabile nelle Impostazioni
Un agente collegato compare in Impostazioni, API con il badge Agente collegato, l'ultimo utilizzo e il volume di richieste. Revocalo lì e la chiamata successiva del client fallisce; il client può anche revocare il proprio token quando lo scolleghi.
Una connessione, un brand
Ogni connessione è legata a esattamente un brand, scelto al consenso. Per far lavorare un agente su un secondo brand, collegalo di nuovo e scegli quel brand. Un client non può mai raggiungere un brand che non gli è stato concesso.
Codici e token di refresh monouso
I codici di autorizzazione durano dieci minuti e vengono consumati in modo atomico, quindi un codice riutilizzato fallisce. I token di refresh ruotano a ogni uso e sono salvati come hash. Le registrazioni dei client inattivi scadono dopo 180 giorni.
Punti di accesso
Per chi costruisce un client MCP o verifica il flusso. Tutto è individuabile dai due documenti well-known; niente di questo va configurato a mano.
# 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 …" }Il ciclo dell'agente
Cinque chiamate, dall'inizio alla fine
Ogni automazione Markaestro è una variazione di questo ciclo. I passaggi da uno a tre sono la Connect API, la superficie piatta su cui la maggior parte degli agenti dovrebbe puntare. I passaggi quattro e cinque raggiungono l'API completa /api/public/v1 per la pubblicazione esplicita e il tracciamento delle esecuzioni.
GET /api/connect/v1/social-accountsRestituisce ogni account connesso e pubblicabile per il brand della chiave, ciascuno con una piattaforma, un nome utente e un id opaco. Chiamalo all'inizio di ogni esecuzione, le connessioni cambiano.
POST /api/connect/v1/media/create-upload-url → PUTGenera un URL firmato, monouso e di breve durata, poi fai PUT dei byte grezzi verso di esso. Ricevi indietro un id del contenuto. Immagini fino a 10 MB; l'API completa accetta anche video fino a 250 MB.
POST /api/connect/v1/postsPassa la didascalia, gli id dei contenuti e gli id degli account testualmente. Lascialo come bozza per la revisione, oppure invia is_draft false con scheduled_at per metterlo sul calendario.
POST /api/public/v1/posts/:id/publishMette in coda un'esecuzione asincrona. LinkedIn, Threads e Pinterest escono tramite l'API ufficiale. Facebook, Instagram e TikTok finiscono nella coda 'Da Pubblicare' del workspace affinché una persona pubblichi nativamente.
GET /api/public/v1/job-runs/:id · webhooksInterroga l'id dell'esecuzione, oppure registra un endpoint webhook e lascia che Markaestro ti invii post.published, post.action_required e post.failed. Non presumere mai che una pubblicazione sia terminata in modo sincrono.
Guida Rapida
Un'integrazione funzionante in quattro comandi
Prima, genera la chiave: apri Impostazioni → API, scegli il brand a cui può accedere, seleziona gli ambiti di cui ha bisogno e, facoltativamente, imposta una scadenza. La chiave viene mostrata una sola volta, inseriscila direttamente nell'archivio segreti del tuo agente. La creazione di chiavi richiede un amministratore o proprietario con email verificata.
# 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 con un timestamp scheduled_at per mettere invece il post sul calendario.# 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"Pronto all'uso
Definizioni degli strumenti e guida per l'agente
Due cose da copiare. La prima è un set di schemi di strumenti che copre l'intero ciclo di pubblicazione, scritto in JSON Schema, così funziona come definizioni di strumenti Claude, funzioni OpenAI, o la forma di input per un server MCP che ospiti tu. La seconda è la guida operativa che impedisce a un modello di fare qualcosa di inaspettato con essi.
[
{
"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.Il tuo agente può anche recuperare questo contenuto da solo: curl https://markaestro.com/llms.txt restituisce una guida in testo semplice dell'intera API, endpoint, regole e gestione degli errori, abbastanza piccola da stare nel contesto.
Ricette
I quattro workflow che gli agenti eseguono davvero
# 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.Salvaguardie
Cosa l'agente può e non può fare
L'autonomia è utile solo se il raggio d'azione è limitato. Le impostazioni predefinite di Markaestro presumono che chi chiama sia software che potrebbe sbagliare.
Facebook, Instagram e TikTok sono manuali per prima cosa
I post che il tuo agente crea per questi canali usano di default manual_reminder: Markaestro non chiama mai l'API della piattaforma per loro. La pubblicazione sposta il post nella coda 'Da Pubblicare' del workspace, dove una persona scarica i contenuti, pubblica nativamente e conferma, così il post appare esattamente come se fosse stato fatto a mano, e una persona vede ognuno di essi prima che esista pubblicamente. Un agente può optare per la pubblicazione via API ufficiale di un singolo post con deliveryMode: "direct_publish", e su TikTok questo significa il trasferimento in casella in arrivo del creator, mai un post pubblico senza supervisione. LinkedIn, Threads e Pinterest pubblicano programmaticamente solo quando il tuo agente lo richiede esplicitamente.
Limita gli ambiti della chiave
Scegli solo gli ambiti di cui l'agente ha bisogno: products.read, media.write, posts.read, posts.write, posts.publish, job_runs.read, webhooks.manage. Un agente di ricerca che legge solo il calendario riceve posts.read e nient'altro.
Imposta una scadenza
Le chiavi possono essere create con una scadenza. Una chiave scaduta si comporta esattamente come una revocata, così una chiave che fuoriesce dall'ambiente di un agente smette di funzionare da sola.
Ruota e revoca
Ruota una chiave sul posto o revocala completamente da Impostazioni → API. Ogni chiave mostra l'ora dell'ultimo utilizzo e il volume di richieste, così un agente che diventa silenzioso, o incontrollato, è visibile.
I limiti di frequenza sono applicati
60 richieste al minuto per endpoint e 240 al minuto per chiave. Ogni risposta porta X-RateLimit-Limit, -Remaining e -Reset; un 429 porta Retry-After. Rispettalo invece di insistere.
Markaestro non scrive mai per te
Non esiste alcun passaggio di generazione. La didascalia proviene dal tuo agente, i contenuti provengono dalla tua libreria o dalla pipeline del tuo agente. Markaestro sono le mani, non la voce.
Le eliminazioni sono lato Markaestro
Eliminare un post programmato lo annulla prima che venga pubblicato. Eliminare un post pubblicato ferma solo il tracciamento di Markaestro, il post in diretta resta attivo finché qualcuno non lo rimuove sulla piattaforma.
Gestione degli errori
Insegnagli quali errori vale la pena ripetere
Ogni risposta di errore è JSON con un codice error stabile e un requestId. Fai in modo che il tuo agente citi il requestId quando segnala un fallimento, è ciò di cui il supporto ha bisogno per tracciare la chiamata.
| Stato | Codice | Cosa dovrebbe fare l'agente |
|---|---|---|
| 401 | UNAUTHENTICATED | La chiave è mancante, revocata, o scaduta. Fermati e chiedi a una persona una nuova chiave, ripetere il tentativo non aiuterà. |
| 403 | FORBIDDEN | La chiave manca dell'ambito per questa chiamata. Segnala quale chiamata è fallita; gli ambiti si cambiano in Impostazioni → API. |
| 403 | API_KEY_NOT_BOUND_TO_PRODUCT | Una chiave emessa prima del vincolo al brand. Richiedi una chiave sostitutiva. |
| 400 | VALIDATION_* | Il payload ha violato una regola del canale (contenuti mancanti, modalità di consegna errata, scheduled_at sbagliato). Correggi la richiesta; non ripeterla senza modifiche. |
| 400 | VALIDATION_IDEMPOTENCY_KEY_REUSED | Lo stesso Idempotency-Key è stato inviato con un corpo diverso. Genera una nuova chiave per ogni richiesta distinta. |
| 400 | VALIDATION_POST_IS_PUBLISHING | Tentativo di eliminare un post mentre un'esecuzione di pubblicazione è in corso. Attendi che l'esecuzione si stabilizzi, poi elimina. |
| 409 | VALIDATION_POST_ALREADY_PUBLISHING | Un'esecuzione di pubblicazione per questo post è già in coda. Non pubblicare di nuovo, interroga invece l'esecuzione esistente. |
| 402 | SUBSCRIPTION_REQUIRED | Nessun piano attivo è associato a questo workspace. Chiedi a un proprietario di controllare la fatturazione nelle Impostazioni. |
| 402 | QUOTA_EXCEEDED_MEDIA_UPLOADS | Il workspace ha raggiunto la sua quota mensile di caricamento. Smetti di caricare e segnalalo, i contenuti esistenti continuano a essere pubblicati. |
| 404 | NOT_FOUND | L'id è fuori dal brand di questa chiave. Risposto come 404 invece di 403 così le chiavi non possono sondare id che non possiedono. |
| 429 | RATE_LIMITED | Attendi i secondi indicati da Retry-After, poi ripeti la stessa richiesta con lo stesso Idempotency-Key. |
Usa il tuo stack preferito
Se può fare una richiesta HTTPS, può pubblicare
Non esiste una libreria client Markaestro da adottare né un framework da standardizzare. Bearer token, JSON in ingresso, JSON in uscita.
Claude e il Claude Agent SDK
Aggiungi le definizioni degli strumenti qui sopra alla tua lista di strumenti. Le forme JSON Schema sono già nel formato di utilizzo strumenti di Claude.
Function calling di OpenAI
Gli stessi schemi si mappano uno a uno sulle definizioni di funzione, rinomina input_schema in parameters.
Client MCP
Claude Code, Claude, Cursor, ChatGPT, Grok, Grok Bot, OpenClaw, Hermes: aggiungi l'URL del server ospitato e accedi dal browser. Per i client solo stdio, npx -y @markaestro/mcp esegue gli stessi trentuno strumenti in locale.
n8n, Make, Zapier
Ogni endpoint è una semplice richiesta HTTP con un bearer token. Nessun SDK, nessuna cerimonia di firma, nessuna danza OAuth per l'agente.
LangChain e LlamaIndex
Strumenti REST standard. Il caricamento contenuti in due passaggi è l'unico flusso con chiamate multiple, ed è due righe.
Un cron job e curl
Non ogni agente ha bisogno di un framework. La guida rapida qui sopra è un'integrazione completa e funzionante in quattro comandi.