Para agentes de IA
Conecte seu agente em um passo. Ele cuida dos seus canais sociais.
O Markaestro foi feito para ser operado por software. Um cliente MCP como o Claude Code faz login pelo navegador e recebe uma chave vinculada a uma única marca; qualquer outro agente obtém a mesma chave nas Configurações. Nos dois casos o agente consegue descobrir em quais contas pode publicar, enviar mídia, redigir e agendar posts, publicá-los e reportar o que realmente saiu, no Facebook, Instagram, TikTok, LinkedIn, Threads e Pinterest.
Nenhum SDK para instalar e nenhuma credencial de plataforma para vigiar. Sua equipe conecta as contas uma vez no painel; a partir daí o agente fala com uma única API de token bearer.
Projetado para autonomia, limitado por propósito
Por que uma chave de API é toda a integração
A parte difícil de deixar um agente lidar com mídia social não é o HTTP. É garantir que um modelo confuso não publique na marca errada, publique em duplicidade em uma nova tentativa, ou envie algo que ninguém revisou. Essas garantias estão na própria superfície da API, não no seu prompt.
Clientes MCP
Faça login pelo cliente. Nada para colar.
Claude Code, Claude, Cursor, ChatGPT, Grok, Grok Bot, OpenClaw, Hermes e qualquer outro cliente que fale o Model Context Protocol podem se conectar ao servidor MCP hospedado do Markaestro sem nenhuma credencial configurada. A primeira chamada de ferramenta abre seu navegador: faça login, escolha o espaço de trabalho e a marca em que o agente pode atuar, revise as permissões e clique em Permitir. O cliente recebe uma chave vinculada a essa marca e a renova sozinho.
É OAuth 2.1 padrão com PKCE e registro dinâmico de clientes, o mesmo mecanismo por trás de outros servidores MCP hospedados, então funciona sem nenhum plugin específico do Markaestro. O servidor fica em https://markaestro.com/api/public/v1/mcp e expõe trinta e uma ferramentas sobre a API pública: descoberta de marcas e destinos, envio de mídia, rascunhos e posts agendados, publicação com acompanhamento de execuções, operações em lote, webhooks e as regras por canal.
Conecte seu agente
Escolha seu agente. Três passos e ele já pode publicar.
Todos os clientes abaixo chegam ao mesmo servidor MCP hospedado. A maioria entra pelo navegador: a primeira chamada de ferramenta abre uma página de consentimento onde você escolhe o workspace e a marca em que o agente pode atuar, e o cliente recebe uma chave vinculada a essa marca. Clientes que não conseguem abrir um navegador usam uma chave de API do workspace. Mesmo servidor, mesmas permissões, mesma lista em Configurações.
Claude Code
O plugin instala a skill e o servidor hospedado juntos. Nada para configurar, nada para colar.
Antes de começar
- Você é proprietário ou administrador do workspace com e-mail verificado, em um workspace com plano ativo e pelo menos uma marca.
- O Claude Code está instalado e conectado à sua conta Anthropic.
Entrar
- Pergunte ao Claude qualquer coisa sobre o Markaestro, ou execute /mcp e escolha markaestro.
- Seu navegador abre a página de consentimento. Escolha o workspace e a marca, revise as permissões e clique em Permitir.
- Para trocar de marca depois, execute /mcp de novo, saia e entre com a outra marca.
Verificar
- Peça ao agente para chamar list_products. Ele deve responder com a única marca autorizada e seus canais conectados.
- A conexão aparece em Configurações, API com o selo Agente conectado, o último uso e o volume de solicitações. Você pode revogá-la ali a qualquer momento.
Adicionar o servidor
- Execute os dois comandos do plugin em qualquer terminal, ou adicione só o servidor com o terceiro 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
O claude.ai e o Claude Desktop recebem a URL do servidor como conector personalizado e entram pela mesma página de consentimento.
Antes de começar
- Você é proprietário ou administrador do workspace com e-mail verificado, em um workspace com plano ativo e pelo menos uma marca.
- Conectores personalizados estão disponíveis nos planos pagos do Claude. Em Team e Enterprise, um proprietário pode precisar ativá-los.
Entrar
- Clique em Conectar ao lado de Markaestro. A página de consentimento abre em uma nova aba.
- Escolha o workspace e a marca, revise as permissões e clique em Permitir. A aba fecha e o conector aparece como conectado.
- Em um chat, ative o Markaestro no menu de ferramentas quando quiser que o agente o use.
Verificar
- Peça ao agente para chamar list_products. Ele deve responder com a única marca autorizada e seus canais conectados.
- A conexão aparece em Configurações, API com o selo Agente conectado, o último uso e o volume de solicitações. Você pode revogá-la ali a qualquer momento.
Adicionar o servidor
- Abra Configurações, Conectores e depois Adicionar conector personalizado.
- Cole a URL do servidor abaixo, deixe os campos de cliente OAuth vazios e clique em Adicionar.
https://markaestro.com/api/public/v1/mcpCursor
Um clique adiciona o servidor ao Cursor. A primeira chamada de ferramenta abre o login no navegador; o Cursor guarda o token nas chaves do sistema.
Antes de começar
- Você é proprietário ou administrador do workspace com e-mail verificado, em um workspace com plano ativo e pelo menos uma marca.
- Cursor com MCP ativado. Servidores MCP remotos funcionam em todos os planos do Cursor.
Entrar
- Abra Cursor Settings, Tools & MCP. O Markaestro mostra Needs login; clique nele.
- Seu navegador abre a página de consentimento. Escolha o workspace e a marca e clique em Permitir. O Cursor recebe o token e lista as ferramentas.
- O Grok Bot dentro do Cursor usa esta mesma entrada de servidor.
Verificar
- Peça ao agente para chamar list_products. Ele deve responder com a única marca autorizada e seus canais conectados.
- A conexão aparece em Configurações, API com o selo Agente conectado, o último uso e o volume de solicitações. Você pode revogá-la ali a qualquer momento.
Adicionar o servidor
- Clique em Adicionar ao Cursor e confirme a instalação no Cursor.
- Ou cole o JSON em .cursor/mcp.json em um projeto (compartilhado com a equipe via git) ou em ~/.cursor/mcp.json (só você).
// .cursor/mcp.json (project) or ~/.cursor/mcp.json (global)
{
"mcpServers": {
"markaestro": {
"url": "https://markaestro.com/api/public/v1/mcp"
}
}
}Para uma máquina de build compartilhada ou CI, uma chave de API do workspace nos headers substitui o login.
// 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
O ChatGPT se conecta ao Markaestro como app personalizado no modo desenvolvedor e entra pela página de consentimento.
Antes de começar
- Você é proprietário ou administrador do workspace com e-mail verificado, em um workspace com plano ativo e pelo menos uma marca.
- O modo desenvolvedor exige ChatGPT Pro, Business, Enterprise ou Edu. O Pro expõe só ferramentas de leitura; Business, Enterprise e Edu expõem todas.
- Em Business, Enterprise e Edu, um administrador pode precisar permitir apps personalizados no workspace.
Entrar
- A página de consentimento abre enquanto o ChatGPT escaneia as ferramentas. Escolha o workspace e a marca, clique em Permitir e depois em Criar.
- Em um chat, clique no botão de mais, Mais e depois em Markaestro para disponibilizar as ferramentas.
- O ChatGPT se registra no Markaestro uma vez por conexão. Reconectar cria uma nova conexão que você pode revogar separadamente.
Verificar
- Peça ao agente para chamar list_products. Ele deve responder com a única marca autorizada e seus canais conectados.
- A conexão aparece em Configurações, API com o selo Agente conectado, o último uso e o volume de solicitações. Você pode revogá-la ali a qualquer momento.
Adicionar o servidor
- Abra Configurações, Apps e conectores, Configurações avançadas e ative o modo desenvolvedor.
- De volta em Apps e conectores, clique em Criar. Nomeie como Markaestro, cole a URL do servidor, escolha OAuth como autenticação e clique em Escanear ferramentas.
https://markaestro.com/api/public/v1/mcpGrok
O Grok chega ao Markaestro de três formas: como conector personalizado no grok.com, pelo terminal Grok Build e como ferramenta MCP remota na API da xAI.
Antes de começar
- Você é proprietário ou administrador do workspace com e-mail verificado, em um workspace com plano ativo e pelo menos uma marca.
- Os conectores do grok.com funcionam em planos pessoais. Grok Business e Enterprise precisam que um administrador da equipe provisione o conector.
- O caminho da API da xAI roda no servidor, então sempre usa uma chave de API do workspace.
Entrar
- grok.com e Grok Build abrem a página de consentimento na primeira chamada de ferramenta. Escolha o workspace e a marca e clique em Permitir.
- Para a API da xAI, crie uma chave de API do workspace e passe-a no campo authorization.
Verificar
- Peça ao agente para chamar list_products. Ele deve responder com a única marca autorizada e seus canais conectados.
- A conexão aparece em Configurações, API com o selo Agente conectado, o último uso e o volume de solicitações. Você pode revogá-la ali a qualquer momento.
Adicionar o servidor
- grok.com: abra grok.com/connectors, clique em New Connector, escolha Custom e cole a URL do servidor. Se a caixa pedir um id de cliente, use os valores abaixo.
- Grok Build: execute os dois comandos em um terminal. O Grok Build também aproveita uma entrada Markaestro do .mcp.json do Claude Code ou do mcp.json do Cursor.
- API da xAI: adicione o bloco de ferramenta ao array tools de uma requisição à Responses API.
Conector personalizado do 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}"Bloco de ferramenta da 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
O Grok Bot roda em um computador na nuvem e aceita servidores MCP personalizados com uma chave estática. A beta ainda não tem login pelo navegador para servidores personalizados.
Antes de começar
- Você é proprietário ou administrador do workspace com e-mail verificado, em um workspace com plano ativo e pelo menos uma marca.
- O Grok Bot está em beta inicial nos planos SuperGrok e dentro do Cursor Pro. O acesso Enterprise é por lista de espera.
- Você tem uma chave de API do workspace com os escopos de agente. Crie uma com o botão abaixo.
Usar uma chave de API
Verificar
- Peça ao agente para chamar list_products. Ele deve responder com a única marca autorizada e seus canais conectados.
- A conexão aparece em Configurações, API com o selo Agente conectado, o último uso e o volume de solicitações. Você pode revogá-la ali a qualquer momento.
Adicionar o servidor
- Abra as configurações de conectores do seu Bot e adicione um servidor MCP personalizado.
- Cole a URL do servidor e adicione a chave como header com os valores abaixo.
Valores de header para a caixa do conector
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
O OpenClaw adiciona servidores MCP remotos pela sua CLI e conclui o login em uma porta loopback, então funciona na máquina que executa seu gateway.
Antes de começar
- Você é proprietário ou administrador do workspace com e-mail verificado, em um workspace com plano ativo e pelo menos uma marca.
- O OpenClaw está instalado e o gateway em execução.
- Um servidor sem navegador pode concluir o login com a alternativa --code.
Entrar
- openclaw mcp login markaestro imprime a URL de login e aguarda em uma porta loopback.
- Abra a URL, escolha o workspace e a marca e clique em Permitir. O OpenClaw guarda as credenciais fora do arquivo de configuração.
- Execute openclaw mcp reload para que agentes em execução carreguem as ferramentas.
Verificar
- Peça ao agente para chamar list_products. Ele deve responder com a única marca autorizada e seus canais conectados.
- A conexão aparece em Configurações, API com o selo Agente conectado, o último uso e o volume de solicitações. Você pode revogá-la ali a qualquer momento.
Adicionar o servidor
- Execute os três comandos, ou adicione o bloco do servidor em ~/.openclaw/openclaw.json.
- Quando a skill do Markaestro estiver no ClawHub, openclaw skills install markaestro adiciona também as instruções do 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 reloadEntrada de configuração equivalente
// ~/.openclaw/openclaw.json
{
"mcp": {
"servers": {
"markaestro": {
"url": "https://markaestro.com/api/public/v1/mcp",
"transport": "streamable-http",
"auth": "oauth"
}
}
}
}Sem navegador
# 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
O Hermes Agent registra servidores MCP HTTP a partir do config.yaml e faz o login sozinho, guardando o token em ~/.hermes/mcp-tokens.
Antes de começar
- Você é proprietário ou administrador do workspace com e-mail verificado, em um workspace com plano ativo e pelo menos uma marca.
- O Hermes Agent está instalado. Segredos ficam em ~/.hermes/.env e são referenciados como ${VAR} na configuração.
Entrar
Verificar
- Peça ao agente para chamar list_products. Ele deve responder com a única marca autorizada e seus canais conectados.
- A conexão aparece em Configurações, API com o selo Agente conectado, o último uso e o volume de solicitações. Você pode revogá-la ali a qualquer momento.
Adicionar o servidor
- Adicione o bloco mcp_servers ao ~/.hermes/config.yaml.
- Em uma sessão em andamento, envie /reload-mcp. As ferramentas aparecem como mcp_markaestro_<tool>.
# ~/.hermes/config.yaml
mcp_servers:
markaestro:
url: "https://markaestro.com/api/public/v1/mcp"
auth: oauthSem navegador
# 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}"Outro cliente MCP
Qualquer cliente que fale Streamable HTTP e OAuth 2.1 com registro dinâmico de cliente se conecta só com a URL do servidor.
Antes de começar
- Você é proprietário ou administrador do workspace com e-mail verificado, em um workspace com plano ativo e pelo menos uma marca.
- O cliente suporta servidores MCP remotos por Streamable HTTP e consegue abrir um navegador para OAuth. Se não conseguir, use a aba Chave de API.
Entrar
- A primeira chamada de ferramenta recebe um desafio de login e o cliente abre a página de consentimento.
- Escolha o workspace e a marca e clique em Permitir. O cliente troca o código por uma chave vinculada à marca e a renova a cada 30 dias.
Verificar
- Peça ao agente para chamar list_products. Ele deve responder com a única marca autorizada e seus canais conectados.
- A conexão aparece em Configurações, API com o selo Agente conectado, o último uso e o volume de solicitações. Você pode revogá-la ali a qualquer momento.
Adicionar o servidor
- Adicione a URL do servidor na configuração MCP do cliente. O JSON abaixo é a forma comum de mcpServers.
- Não configure id de cliente nem segredo. O cliente se registra sozinho no primeiro uso.
{
"mcpServers": {
"markaestro": {
"type": "http",
"url": "https://markaestro.com/api/public/v1/mcp"
}
}
}Chave de API
Para jobs de CI, workers cron e clientes que não abrem navegador: uma chave de API do workspace no header Authorization chega ao mesmo servidor com as mesmas permissões.
Antes de começar
- Você é proprietário ou administrador do workspace com e-mail verificado, em um workspace com plano ativo e pelo menos uma marca.
- Você pode criar chaves: proprietário ou administrador do workspace com e-mail verificado.
Usar uma chave de API
Verificar
- Peça ao agente para chamar list_products. Ele deve responder com a única marca autorizada e seus canais conectados.
- A conexão aparece em Configurações, API com o selo Agente conectado, o último uso e o volume de solicitações. Você pode revogá-la ali a qualquer momento.
Adicionar o servidor
- Crie uma chave vinculada a uma marca só com os escopos que o agente precisa e com validade.
- Passe-a como header bearer ao servidor hospedado, ou como MARKAESTRO_API_KEY ao servidor stdio local, que também pode enviar arquivos do 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_..." }
}
}
}O que acontece quando o cliente se conecta
Cinco passos, todos tratados pelo cliente e pelo navegador. Você só vê a página de consentimento.
POST /api/public/v1/mcp → 401 + WWW-AuthenticateO cliente chama o endpoint MCP sem credencial. O Markaestro responde 401 com um cabeçalho WWW-Authenticate que aponta o documento de metadados do recurso protegido. É esse cabeçalho que avisa o cliente de que há um login disponível.
GET /.well-known/oauth-protected-resource · /.well-known/oauth-authorization-serverO cliente lê dois documentos públicos: qual servidor de autorização protege o endpoint e onde ficam seus endpoints de registro, autorização e token. Os dois são servidos em markaestro.com e podem ser cacheados.
POST /api/public/v1/oauth/registerO cliente se registra com um nome e seu endereço de retorno. Endereços loopback, retornos https e esquemas de apps nativos são aceitos; http simples para um host real é recusado. Nenhum id de cliente pré-compartilhado é necessário.
GET /oauth/authorize (browser)Seu navegador abre a página de consentimento. Um proprietário ou administrador do espaço de trabalho com e-mail verificado escolhe o espaço e a marca, ajusta as permissões e clica em Permitir. O Markaestro devolve o navegador ao cliente com um código de uso único.
POST /api/public/v1/oauth/tokenO cliente troca o código mais seu verificador PKCE por um token de acesso e um token de atualização. O token de acesso é uma chave de API comum do espaço de trabalho, vinculada à marca escolhida. Ele expira em 30 dias; uma atualização rotaciona o segredo e o estende por mais 30.
O token é uma chave de API de verdade
Escopos, vínculo à marca, limites de taxa, verificações de assinatura, idempotência e revogação seguem o mesmo código de uma chave criada à mão. Não há um segundo modelo de permissões para entender.
Listado e revogável nas Configurações
Um agente conectado aparece em Configurações, API com o selo Agente conectado, o último uso e o volume de requisições. Revogue-o ali e a próxima chamada do cliente falha; o cliente também pode revogar o próprio token quando você o desconecta.
Uma conexão, uma marca
Cada conexão é vinculada a exatamente uma marca, escolhida no consentimento. Para deixar um agente trabalhar em uma segunda marca, conecte-o de novo e escolha essa marca. Um cliente nunca alcança uma marca que não lhe foi concedida.
Códigos e tokens de atualização de uso único
Os códigos de autorização duram dez minutos e são consumidos de forma atômica, então um código repetido falha. Os tokens de atualização rotacionam a cada uso e são armazenados com hash. Registros de cliente inativos expiram após 180 dias.
Pontos de acesso
Para quem constrói um cliente MCP ou audita o fluxo. Tudo é descoberto a partir dos dois documentos well-known; nada aqui precisa ser configurado à mão.
# 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 …" }O ciclo do agente
Cinco chamadas, do início ao fim
Toda automação do Markaestro é uma variação deste ciclo. Os passos um a três são a Connect API, a superfície simples que a maioria dos agentes deve usar. Os passos quatro e cinco acessam a API completa /api/public/v1 para publicação explícita e acompanhamento de execuções.
GET /api/connect/v1/social-accountsRetorna cada conta conectada e publicável da marca da chave, cada uma com uma plataforma, um nome de usuário e um id opaco. Chame no início de cada execução, as conexões mudam.
POST /api/connect/v1/media/create-upload-url → PUTGere uma URL assinada de uso único e curta duração, depois envie os bytes brutos para ela com PUT. Você recebe um id de mídia de volta. Imagens de até 10 MB; a API completa também aceita vídeo de até 250 MB.
POST /api/connect/v1/postsPasse a legenda, os ids de mídia e os ids de conta literalmente. Deixe como rascunho para revisão, ou envie is_draft false com scheduled_at para colocá-lo no calendário.
POST /api/public/v1/posts/:id/publishEnfileira uma execução assíncrona. LinkedIn, Threads e Pinterest saem pela API oficial. Facebook, Instagram e TikTok entram na fila 'Para Publicar' do workspace para uma pessoa publicar nativamente.
GET /api/public/v1/job-runs/:id · webhooksVerifique o id da execução, ou registre um endpoint de webhook e deixe o Markaestro enviar post.published, post.action_required e post.failed para você. Nunca assuma que uma publicação terminou de forma síncrona.
Guia Rápido
Uma integração funcional em quatro comandos
Primeiro, gere a chave: abra Configurações → API, escolha a marca que ela pode acessar, marque os escopos necessários e, opcionalmente, defina uma expiração. A chave é exibida apenas uma vez, coloque-a diretamente no armazenamento de segredos do seu agente. Criar chaves exige um administrador ou proprietário com e-mail verificado.
# 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 com um timestamp scheduled_at para colocar o post no calendário.# 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 para usar
Definições de ferramentas e um resumo para agentes
Duas coisas para copiar. A primeira é um conjunto de esquemas de ferramentas cobrindo todo o ciclo de publicação, escritos em JSON Schema, então funcionam como definições de ferramentas do Claude, funções da OpenAI, ou o formato de entrada para um servidor MCP que você hospedar. A segunda é o resumo operacional que evita que um modelo faça algo inesperado com elas.
[
{
"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.Seu agente também pode buscar isso sozinho: curl https://markaestro.com/llms.txt retorna um resumo em texto simples de toda a API, endpoints, regras e tratamento de erros, pequeno o suficiente para caber no contexto.
Receitas
Os quatro fluxos de trabalho que agentes realmente executam
# 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.Salvaguardas
O que o agente pode e não pode fazer
Autonomia só é útil se o raio de impacto for pequeno. Os padrões do Markaestro assumem que quem está chamando é um software que pode estar errado.
Facebook, Instagram e TikTok são manual-first
Posts que seu agente cria para esses canais usam por padrão manual_reminder: o Markaestro nunca chama a API da plataforma para eles. A publicação move o post para a fila 'Para Publicar' do workspace, onde uma pessoa baixa a mídia, publica nativamente e confirma, de modo que o post parece exatamente como se tivesse sido feito manualmente, e um humano vê cada um antes que ele exista publicamente. Um agente pode optar por publicação via API oficial em um único post com deliveryMode: "direct_publish", e no TikTok isso significa o envio para a caixa de entrada do criador, nunca um post público sem supervisão. LinkedIn, Threads e Pinterest publicam programaticamente assim que seu agente solicita explicitamente.
Limite a chave
Escolha apenas os escopos que o agente precisa: products.read, media.write, posts.read, posts.write, posts.publish, job_runs.read, webhooks.manage. Um agente de pesquisa que só lê o calendário recebe posts.read e nada mais.
Defina uma expiração
As chaves podem ser criadas com expiração. Uma chave expirada se comporta exatamente como uma revogada, então uma chave que vaza do ambiente de um agente para de funcionar sozinha.
Rotacione e revogue
Rotacione uma chave no local ou revogue-a completamente em Configurações → API. Cada chave mostra seu último uso e volume de solicitações, então um agente que fica quieto, ou sai do controle, é visível.
Limites de taxa são aplicados
60 solicitações por minuto por endpoint e 240 por minuto por chave. Toda resposta traz X-RateLimit-Limit, -Remaining e -Reset; um 429 traz Retry-After. Respeite-o em vez de insistir.
O Markaestro nunca escreve por você
Não há etapa de geração. A legenda vem do seu agente, a mídia vem da sua biblioteca ou do pipeline do seu agente. O Markaestro são as mãos, não a voz.
Exclusões são do lado do Markaestro
Excluir um post agendado o cancela antes de ir ao ar. Excluir um post publicado apenas para o Markaestro de acompanhá-lo, o post ao vivo permanece até que alguém o remova na plataforma.
Tratamento de falhas
Ensine quais erros valem uma nova tentativa
Toda resposta de erro é JSON com um código error estável e um requestId. Peça ao seu agente para citar o requestId ao reportar uma falha, é o que o suporte precisa para rastrear a chamada.
| Status | Código | O que o agente deve fazer |
|---|---|---|
| 401 | UNAUTHENTICATED | A chave está ausente, revogada ou expirada. Pare e peça a um humano uma nova, tentar novamente não ajudará. |
| 403 | FORBIDDEN | A chave não tem o escopo para essa chamada. Reporte qual chamada falhou; os escopos são alterados em Configurações → API. |
| 403 | API_KEY_NOT_BOUND_TO_PRODUCT | Uma chave emitida antes da vinculação de marca. Peça uma chave substituta. |
| 400 | VALIDATION_* | O payload violou uma regra do canal (mídia ausente, modo de entrega inválido, scheduled_at incorreto). Corrija a solicitação; não tente novamente sem alterá-la. |
| 400 | VALIDATION_IDEMPOTENCY_KEY_REUSED | O mesmo Idempotency-Key foi enviado com um corpo diferente. Gere uma nova chave para cada solicitação distinta. |
| 400 | VALIDATION_POST_IS_PUBLISHING | Tentativa de excluir um post enquanto uma execução de publicação está em andamento. Aguarde a execução se estabilizar, depois exclua. |
| 409 | VALIDATION_POST_ALREADY_PUBLISHING | Uma execução de publicação para esse post já está na fila. Não publique novamente, verifique a execução existente. |
| 402 | SUBSCRIPTION_REQUIRED | Nenhum plano ativo está associado a este workspace. Peça a um proprietário para revisar o faturamento nas Configurações. |
| 402 | QUOTA_EXCEEDED_MEDIA_UPLOADS | O workspace atingiu sua cota mensal de upload. Pare de enviar e informe isso, a mídia existente continua sendo publicada. |
| 404 | NOT_FOUND | O id está fora da marca dessa chave. Respondido como 404 em vez de 403 para que as chaves não possam sondar ids que não possuem. |
| 429 | RATE_LIMITED | Aguarde os segundos de Retry-After, então tente novamente a mesma solicitação com o mesmo Idempotency-Key. |
Use sua própria stack
Se puder fazer uma solicitação HTTPS, pode publicar
Não há biblioteca cliente do Markaestro para adotar nem framework para padronizar. Bearer token, JSON na entrada, JSON na saída.
Claude e o Claude Agent SDK
Adicione as definições de ferramentas acima à sua lista de ferramentas. Os formatos JSON Schema já estão no formato de uso de ferramentas do Claude.
Function calling da OpenAI
Os mesmos esquemas mapeiam diretamente para definições de função, renomeie input_schema para parameters.
Clientes MCP
Claude Code, Claude, Cursor, ChatGPT, Grok, Grok Bot, OpenClaw, Hermes: adicione a URL do servidor hospedado e faça login pelo navegador. Para clientes só stdio, npx -y @markaestro/mcp executa as mesmas trinta e uma ferramentas localmente.
n8n, Make, Zapier
Todo endpoint é uma solicitação HTTP simples com um bearer token. Sem SDK, sem cerimônia de assinatura, sem fluxo OAuth para o agente.
LangChain e LlamaIndex
Ferramentas REST padrão. O upload de mídia em duas etapas é o único fluxo com múltiplas chamadas, e são apenas duas linhas.
Um cron job e curl
Nem todo agente precisa de um framework. O guia rápido acima é uma integração completa e funcional em quatro comandos.