Para agentes de IA

Conecta tu agente en un paso. Él gestiona tus canales sociales.

Markaestro está hecho para que lo opere el software. Un cliente MCP como Claude Code inicia sesión en el navegador y recibe una clave ligada a una marca; cualquier otro agente obtiene esa misma clave desde Ajustes. En ambos casos el agente puede descubrir en qué cuentas puede publicar, subir contenido, redactar y programar publicaciones, publicarlas e informar de lo que realmente salió, en Facebook, Instagram, TikTok, LinkedIn, Threads y Pinterest.

Sin SDK que instalar ni credenciales de plataforma que vigilar. Tu equipo conecta las cuentas una vez en el panel; a partir de ahí el agente habla con una única API de token bearer.

Diseñado para la autonomía, limitado a propósito

Por qué una clave de API es toda la integración

Lo difícil de dejar que un agente toque las redes sociales no es el HTTP. Es asegurarse de que un modelo confundido no pueda publicar en la marca equivocada, publicar duplicado en un reintento, o enviar algo que nadie revisó. Esas garantías están en la propia superficie de la API, no en tu prompt.

Una clave, una marca
Cada clave de API está limitada a una sola marca al crearla. Un agente con esa clave solo puede ver y publicar en esa marca, las solicitudes entre marcas se rechazan en la autenticación, no por convención.
Descubrimiento, no ids fijos
El agente pregunta en qué cuentas puede publicar y recibe ids opacos que puede reenviar tal cual. Sin ids de Página, sin explorar el Business Manager, sin archivo de configuración que quede obsoleto cuando se vuelve a vincular una conexión.
Escrituras idempotentes
Envía una Idempotency-Key en cada creación o publicación. Una llamada repetida en menos de 24 horas reproduce la respuesta original en lugar de crear una segunda publicación, el fallo más común entre agentes.
Siempre hay una persona en el bucle
Las publicaciones de Facebook, Instagram y TikTok son de publicación manual: tu agente las prepara, una persona las publica de forma nativa. Nada sale sin supervisión a menos que actives esa opción explícitamente para esa publicación.

Clientes MCP

Inicia sesión desde el cliente. Nada que pegar.

Claude Code, Claude, Cursor, ChatGPT, Grok, Grok Bot, OpenClaw, Hermes y cualquier otro cliente que hable el Model Context Protocol pueden conectarse al servidor MCP alojado de Markaestro sin credenciales configuradas. La primera llamada a una herramienta abre tu navegador: inicia sesión, elige el espacio de trabajo y la marca sobre la que puede actuar el agente, revisa los permisos y pulsa Permitir. El cliente recibe una clave ligada a esa marca y la renueva por sí mismo.

Es OAuth 2.1 estándar con PKCE y registro dinámico de clientes, el mismo mecanismo que usan otros servidores MCP alojados, así que funciona sin ningún plugin específico de Markaestro. El servidor vive en https://markaestro.com/api/public/v1/mcp y expone treinta y una herramientas sobre la API pública: descubrimiento de marcas y destinos, subida de contenido, borradores y publicaciones programadas, publicación con seguimiento de ejecuciones, operaciones en lote, webhooks y las reglas por canal.

Conecta tu agente

Elige tu agente. Tres pasos y ya puede publicar.

Todos los clientes de abajo llegan al mismo servidor MCP alojado. La mayoría inicia sesión por el navegador: la primera llamada a una herramienta abre una página de consentimiento donde eliges el espacio de trabajo y la marca sobre la que puede actuar el agente, y el cliente recibe una clave ligada a esa marca. Los clientes que no pueden abrir un navegador usan una clave de API del espacio de trabajo. Mismo servidor, mismos permisos, misma lista en Ajustes.

Claude Code

El plugin instala la skill y el servidor alojado a la vez. Nada que configurar, nada que pegar.

Inicio de sesión o clave de APIDocumentación de Claude Code
01

Antes de empezar

  • Eres propietario o administrador del espacio de trabajo con correo verificado, en un espacio con plan activo y al menos una marca.
  • Claude Code está instalado y con sesión iniciada en tu cuenta de Anthropic.
03

Iniciar sesión

  1. Pregunta a Claude cualquier cosa sobre Markaestro, o ejecuta /mcp y elige markaestro.
  2. Tu navegador abre la página de consentimiento. Elige espacio de trabajo y marca, revisa los permisos y pulsa Permitir.
  3. Para cambiar de marca más tarde, ejecuta /mcp de nuevo, cierra sesión e inicia sesión con la otra marca.
Prefiere el inicio de sesión. Usa una clave solo cuando el cliente no pueda abrir un navegador.
04

Verificar

  • Pide al agente que llame a list_products. Debe responder con la única marca que autorizaste y sus canales conectados.
  • La conexión aparece en Ajustes, API con la insignia Agente conectado, su último uso y su volumen de solicitudes. Puedes revocarla ahí en cualquier momento.
Abrir Ajustes, API
02

Añadir el servidor

  1. Ejecuta los dos comandos del plugin en cualquier terminal, o añade solo el servidor con el tercer comando.
Bash
# 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/mcp

Qué ocurre cuando el cliente se conecta

Cinco pasos, todos a cargo del cliente y del navegador. Tú solo ves la página de consentimiento.

01Desafío
POST /api/public/v1/mcp → 401 + WWW-Authenticate

El cliente llama al endpoint MCP sin credencial. Markaestro responde 401 con una cabecera WWW-Authenticate que nombra el documento de metadatos del recurso protegido. Esa cabecera es la que indica al cliente que hay un inicio de sesión disponible.

02Descubrimiento
GET /.well-known/oauth-protected-resource · /.well-known/oauth-authorization-server

El cliente lee dos documentos públicos: qué servidor de autorización protege el endpoint y dónde están sus endpoints de registro, autorización y token. Ambos se sirven en markaestro.com y se pueden cachear.

03Registro
POST /api/public/v1/oauth/register

El cliente se registra con un nombre y su dirección de retorno. Se aceptan direcciones loopback, retornos https y esquemas de apps nativas; se rechaza http plano hacia un host real. No hace falta un id de cliente precompartido.

04Consentimiento
GET /oauth/authorize (browser)

Tu navegador abre la página de consentimiento. Un propietario o administrador del espacio de trabajo con correo verificado elige el espacio y la marca, ajusta los permisos y pulsa Permitir. Markaestro devuelve el navegador al cliente con un código de un solo uso.

05Token de acceso
POST /api/public/v1/oauth/token

El cliente intercambia el código más su verificador PKCE por un token de acceso y un token de refresco. El token de acceso es una clave de API normal del espacio de trabajo, ligada a la marca elegida. Caduca a los 30 días; un refresco rota su secreto y lo extiende otros 30.

El token es una clave de API real

Scopes, vínculo a la marca, límites de tasa, comprobaciones de suscripción, idempotencia y revocación siguen el mismo código que una clave creada a mano. No hay un segundo modelo de permisos que entender.

Visible y revocable en Ajustes

Un agente conectado aparece en Ajustes, API con la insignia Agente conectado, su último uso y su volumen de peticiones. Revócalo ahí y la siguiente llamada del cliente falla; el cliente también puede revocar su propio token al desconectarlo.

Una conexión, una marca

Cada conexión está ligada a exactamente una marca, elegida en el consentimiento. Para que un agente trabaje con una segunda marca, conéctalo de nuevo y elige esa marca. Un cliente nunca puede llegar a una marca que no se le concedió.

Códigos y tokens de refresco de un solo uso

Los códigos de autorización viven diez minutos y se consumen de forma atómica, así que un código repetido falla. Los tokens de refresco rotan en cada uso y se guardan con hash. Los registros de cliente inactivos caducan a los 180 días.

Puntos de conexión

Para quien construya un cliente MCP o audite el flujo. Todo se descubre desde los dos documentos well-known; nada de esto hay que configurarlo a mano.

Referencia
# 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 …" }

El ciclo del agente

Cinco llamadas, de principio a fin

Cada automatización de Markaestro es una variación de este ciclo. Los pasos uno a tres son la API Connect, la superficie plana que la mayoría de agentes deberían usar. Los pasos cuatro y cinco acceden a la API completa /api/public/v1 para publicación explícita y seguimiento de ejecuciones.

01Descubrir
GET /api/connect/v1/social-accounts

Devuelve cada cuenta conectada y publicable para la marca de la clave, cada una con plataforma, nombre de usuario e id opaco. Llámalo al inicio de cada ejecución, las conexiones cambian.

02Subir contenido
POST /api/connect/v1/media/create-upload-url → PUT

Genera una URL firmada de un solo uso y corta duración, luego envía los bytes en bruto mediante PUT. Recibes un id de contenido. Imágenes hasta 10 MB; la API completa también admite vídeo hasta 250 MB.

03Redactar o programar
POST /api/connect/v1/posts

Envía el texto, los ids de contenido y los ids de cuenta tal cual. Déjalo como borrador para revisión, o envía is_draft false con scheduled_at para ponerlo en el calendario.

04Publicar
POST /api/public/v1/posts/:id/publish

Encola una ejecución asíncrona. LinkedIn, Threads y Pinterest se publican mediante la API oficial. Facebook, Instagram y TikTok llegan a la cola «Por publicar» del espacio de trabajo para que una persona los publique de forma nativa.

05Reportar resultados
GET /api/public/v1/job-runs/:id · webhooks

Consulta el id de la ejecución, o registra un endpoint de webhook y deja que Markaestro te envíe post.published, post.action_required y post.failed. Nunca asumas que una publicación terminó de forma síncrona.

Guía rápida

Una integración funcional en cuatro comandos

Primero, genera la clave: abre Configuración → API, elige la marca a la que tendrá acceso, marca los permisos que necesita y, opcionalmente, dale una fecha de vencimiento. La clave se muestra una sola vez, guárdala directamente en el almacén de secretos de tu agente. Crear claves requiere un administrador o propietario con correo verificado.

1. Descubrir las cuentas
La primera llamada en cada ejecución. Las conexiones cambian; los ids nunca deberían quedar fijos en un prompt.
Bash
# 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"
Respuesta
{
  "data": [
    {
      "id": "prod_123#instagram:instagram:ig_123",
      "product_id": "prod_123",
      "product": "Northwind Coffee",
      "platform": "instagram",
      "username": "northwindcoffee"
    }
  ]
}
2. Subir el contenido
Dos pasos: genera una URL firmada de un solo uso, luego envía los bytes mediante PUT. La URL expira a los 15 minutos y no necesita cabecera de autenticación propia.
Bash
# 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.png
3. Prográmalo y luego obsérvalo
Crear es de tipo borrador por defecto. Envía is_draft: false junto con una marca de tiempo scheduled_at para ponerlo en el calendario en su lugar.
Bash
# 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"

Listo para usar

Definiciones de herramientas y un resumen para el agente

Dos cosas para copiar. La primera es un conjunto de esquemas de herramientas que cubren todo el ciclo de publicación, escritos en JSON Schema, así que funcionan como definiciones de herramientas de Claude, funciones de OpenAI, o la forma de entrada para un servidor MCP que alojes tú. La segunda es el resumen operativo que evita que un modelo haga algo inesperado con ellas.

Esquemas de herramientas
Seis herramientas: listar cuentas, subir contenido, crear, publicar, listar, eliminar. Conecta cada una con el endpoint correspondiente de arriba.
tools.json
[
  {
    "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"]
    }
  }
]
Resumen para el agente
Pégalo en tu system prompt. Recoge los comportamientos que diferencian a un agente de publicación fiable de uno que publica por duplicado y da por hecho el éxito antes de tiempo.
System prompt
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.

Tu agente también puede obtener esto directamente: curl https://markaestro.com/llms.txt devuelve un resumen en texto plano de toda la API, endpoints, reglas y gestión de errores, lo bastante compacto para caber en el contexto.

Recetas

Los cuatro flujos de trabajo que realmente usan los agentes

Publicar y confirmar
Crea un borrador, publícalo explícitamente y luego consulta la ejecución. La única forma honesta de decirle al operador que una publicación salió.
Bash
# 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"
Revisar y cancelar la cola
Lista lo que está programado, muéstraselo a una persona, elimina lo que rechacen. Ambas llamadas usan permisos que una clave existente ya tiene.
Bash
# 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" }
Llena una semana en una sola llamada
La creación por lotes admite hasta 25 publicaciones y devuelve resultados por elemento, así que un solo elemento incorrecto no arruina toda la operación.
Bash
# 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 }
Recibe una llamada en lugar de consultar
Los agentes de larga duración deberían registrar un webhook y esperar. Las entregas están firmadas con HMAC usando un secreto que se muestra una sola vez al crearlo.
Bash
# 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.

Límites de seguridad

Qué puede y qué no puede hacer el agente

La autonomía solo sirve si el radio de impacto es pequeño. Los valores por defecto de Markaestro asumen que quien llama es software que podría estar equivocado.

Facebook, Instagram y TikTok son de publicación manual

Las publicaciones que tu agente crea para esos canales usan por defecto manual_reminder: Markaestro nunca llama a la API de la plataforma para ellas. Publicar mueve la publicación a la cola «Por publicar» del espacio de trabajo, donde una persona descarga el contenido, lo publica de forma nativa y lo confirma, así la publicación se ve exactamente como si se hubiera hecho a mano, y una persona ve cada una antes de que exista públicamente. Un agente puede activar la publicación vía API oficial para una publicación concreta con deliveryMode: "direct_publish", y en TikTok eso significa el traspaso a la bandeja de entrada del creador, nunca una publicación pública sin supervisión. LinkedIn, Threads y Pinterest publican de forma programática en cuanto tu agente lo solicita explícitamente.

Limita el alcance de la clave

Elige solo los permisos que el agente necesita: products.read, media.write, posts.read, posts.write, posts.publish, job_runs.read, webhooks.manage. Un agente de investigación que solo lee el calendario recibe posts.read y nada más.

Dale una fecha de vencimiento

Las claves pueden crearse con vencimiento. Una clave vencida se comporta exactamente como una revocada, así que una clave que se filtre del entorno de un agente deja de funcionar por sí sola.

Rota y revoca

Rota una clave manteniendo el mismo id o revócala directamente desde Configuración → API. Cada clave muestra su última hora de uso y volumen de solicitudes, así que un agente que se queda en silencio, o que se descontrola, es visible.

Los límites de velocidad se aplican

60 solicitudes por minuto por endpoint y 240 por minuto por clave. Cada respuesta incluye X-RateLimit-Limit, -Remaining y -Reset; un 429 incluye Retry-After. Respétalo en lugar de insistir.

Markaestro nunca escribe por ti

No hay ningún paso de generación. El texto viene de tu agente, el contenido viene de tu biblioteca o de la canalización de tu agente. Markaestro son las manos, no la voz.

Las eliminaciones son del lado de Markaestro

Eliminar una publicación programada la cancela antes de que salga. Eliminar una publicación ya publicada solo hace que Markaestro deje de rastrearla, la publicación activa permanece hasta que alguien la elimine en la plataforma.

Gestión de fallos

Enséñale qué errores merece la pena reintentar

Cada respuesta de error es JSON con un código error estable y un requestId. Haz que tu agente cite el requestId cuando reporte un fallo, es lo que soporte necesita para rastrear la llamada.

EstadoCódigoQué debería hacer el agente
401UNAUTHENTICATEDLa clave falta, fue revocada o venció. Detente y pide una nueva a una persona, reintentar no servirá de nada.
403FORBIDDENLa clave no tiene el permiso necesario para esta llamada. Reporta qué llamada falló; los permisos se cambian en Configuración → API.
403API_KEY_NOT_BOUND_TO_PRODUCTUna clave creada antes de la vinculación a marca. Pide una clave de reemplazo.
400VALIDATION_*El payload rompió una regla del canal (falta contenido, modo de entrega inválido, scheduled_at incorrecto). Corrige la solicitud; no reintentes sin cambios.
400VALIDATION_IDEMPOTENCY_KEY_REUSEDSe envió la misma Idempotency-Key con un cuerpo diferente. Genera una nueva clave por cada solicitud distinta.
400VALIDATION_POST_IS_PUBLISHINGSe intentó eliminar una publicación mientras una ejecución de publicación estaba en curso. Espera a que se resuelva y luego elimínala.
409VALIDATION_POST_ALREADY_PUBLISHINGYa hay una ejecución de publicación encolada para esta publicación. No la publiques de nuevo, consulta la ejecución existente.
402SUBSCRIPTION_REQUIREDNo hay un plan activo asociado a este espacio de trabajo. Pide a un propietario que revise la facturación en Configuración.
402QUOTA_EXCEEDED_MEDIA_UPLOADSEl espacio de trabajo alcanzó su cuota mensual de subidas. Deja de subir contenido y notifícalo, el contenido existente sigue publicándose.
404NOT_FOUNDEl id está fuera de la marca de esta clave. Se responde como 404 en lugar de 403 para que las claves no puedan sondear ids que no poseen.
429RATE_LIMITEDEspera los segundos indicados en Retry-After y reintenta la misma solicitud con la misma Idempotency-Key.

Usa tu propia pila tecnológica

Si puede hacer una solicitud HTTPS, puede publicar

No hay ninguna librería cliente de Markaestro que instalar ni ningún framework al que adaptarse. Token de portador, JSON de entrada, JSON de salida.

Claude y el Claude Agent SDK

Añade las definiciones de herramientas de arriba a tu lista de herramientas. Los esquemas JSON Schema ya están en el formato de uso de herramientas de Claude.

Llamadas a funciones de OpenAI

Los mismos esquemas se corresponden uno a uno con las definiciones de funciones, solo hay que renombrar input_schema a parameters.

Clientes MCP

Claude Code, Claude, Cursor, ChatGPT, Grok, Grok Bot, OpenClaw, Hermes: añade la URL del servidor alojado e inicia sesión en el navegador. Para clientes solo stdio, npx -y @markaestro/mcp ejecuta las mismas treinta y una herramientas en local.

n8n, Make, Zapier

Cada endpoint es una simple solicitud HTTP con un token de portador. Sin SDK, sin ceremonia de firmas, sin baile de OAuth para el agente.

LangChain y LlamaIndex

Herramientas REST estándar. La subida de contenido en dos pasos es el único flujo con varias llamadas, y son solo dos líneas.

Un cron job y curl

No todo agente necesita un framework. La guía rápida de arriba es una integración completa y funcional en cuatro comandos.

Dale a tu agente algo real que hacer

Conecta tus canales y después tu agente: inicia sesión desde un cliente MCP o crea una clave ligada a una marca. Cualquiera de los dos es toda la integración.