Desarrolladores
API pública de publicación
Sube contenido, crea publicaciones y publica en Facebook, Instagram, TikTok, LinkedIn, Threads y Pinterest, todo limitado a un producto mediante una clave de API del espacio de trabajo. La forma recomendada de integrarse es la API Connect, una superficie plana en/api/connect/v1 que la mayoría de herramientas de programación pueden usar tal cual.
¿Necesitas control total, publicación explícita, consulta de ejecuciones, webhooks firmados, procesamiento por lotes, configuración por canal? La API avanzada /api/public/v1, más abajo, expone todo eso. Ambas comparten la misma autenticación, productos y flujo de publicación; usa únicamente estas rutas públicas versionadas (las rutas internas de la aplicación requieren autenticación de usuario de Firebase y no forman parte del contrato público).
Facebook, Instagram y TikTok son de publicación manual en la API por defecto. Las publicaciones para esos canales usan por defecto manual_reminder: Markaestro no llama a la API de la plataforma y mueve la publicación a la cola «Por publicar». Envía deliveryMode: "direct_publish" para usar la API oficial. En TikTok se usa por defecto el traspaso a la bandeja de entrada, salvo que settings.postMode sea direct_post. LinkedIn, Threads y Pinterest publican de forma programática por defecto.
Los espacios de trabajo pueden tener varios productos. Cada clave de API está limitada a un producto al crearla, así que las llamadas apuntan automáticamente a ese producto y las solicitudes para cualquier otro producto son rechazadas.
¿Estás creando un agente de IA?
Empieza mejor con la guía para agentes de IA. Incluye esquemas de herramientas listos para copiar y pegar, un resumen para el system prompt, las reglas de reintento y gestión de errores que necesita un agente, y una guía rápida de cuatro comandos. Tu agente también puede leer /llms.txt directamente.
Especificación legible por máquinas
Cada endpoint, formato de petición y respuesta, y código de error, en OpenAPI 3.1. Se genera a partir de los mismos esquemas con los que valida la API, así que no puede describir una API que no servimos.
/api/connect/v1 que la mayoría de herramientas de programación pueden usar tal cual. Adapta la convención habitual create-upload-url → PUT → post al mismo espacio de trabajo, autenticación, productos y flujo de publicación que la API completa de más abajo. Configura la URL base del cliente en /api/connect y autentícate con una clave de API del espacio de trabajo limitada a un producto (permisos posts.read, posts.write, media.write)./api/connect/v1/social-accountsLista los destinos conectados de Facebook, Instagram, TikTok y LinkedIn como cuentas planas, cada una etiquetada con su producto para que los clientes puedan agrupar y distinguir. Cada canal tiene su propia ruta, sin distribución entre canales.
/api/connect/v1/productsLista las marcas (nombre en la API: products) con sus cuentas conectadas anidadas, un selector centrado en la marca.
/api/connect/v1/media/create-upload-urlDevuelve una URL de subida firmada, de un solo uso y de corta duración, además de un id de contenido.
<upload_url>Sube los bytes de la imagen sin procesar a la URL firmada. No hace falta clave de API, la firma autoriza la petición.
/api/connect/v1/postsCrea un borrador por cada cuenta seleccionada. Define is_draft=false con scheduled_at para programar la entrega; TikTok usa el traspaso a la bandeja de entrada del creador.
/api/connect/v1/postsLista las publicaciones del espacio de trabajo con estado, texto y URLs de contenido en formato plano.
# 1. List connected accounts
curl "$MARKAESTRO_URL/api/connect/v1/social-accounts" \
-H "Authorization: Bearer $MARKAESTRO_API_KEY"
# 2. Request a signed upload url, then PUT the bytes
curl -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": "slide-1.png" }'
curl -X PUT "<upload_url>" -H "Content-Type: image/png" --data-binary @slide-1.png
# 3. Create a draft post for one or more accounts
curl -X POST "$MARKAESTRO_URL/api/connect/v1/posts" \
-H "Authorization: Bearer $MARKAESTRO_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"caption": "New drop",
"media": ["ast_111", "ast_222"],
"social_accounts": ["prod_123#instagram:instagram:ig_123"]
}'Cada cuenta de /social-accounts está etiquetada con su product, el nombre en formato API de una marca (la misma cuenta puede aparecer en varias marcas), y su id codifica productId#destinationId, pásalo de vuelta tal cual en social_accounts, y la solicitud se distribuye en una publicación por cuenta. Cada clave está limitada a una marca, así que solo ve y publica en esa marca. Las publicaciones de Facebook, Instagram y TikTok son de publicación manual, se crean como borradores y las publica de forma nativa el propietario del espacio de trabajo desde la cola «Por publicar» de Markaestro, nunca a través de la API de la plataforma. LinkedIn, Threads y Pinterest publican de forma programática tras una acción de publicación explícita. El estado de una publicación es uno de draft, processing, posted o failed. Facebook, Instagram, LinkedIn, TikTok y Threads son cada uno un destino dedicado propio, publicar en uno nunca se distribuye a otro. Consulta el estado de publicación mediante GET /api/connect/v1/posts.
Avanzado: API pública completa
La superficie completa de /api/public/v1, publicación explícita, ejecuciones asíncronas, webhooks firmados, creación por lotes y configuración por canal. Úsala cuando la API Connect no sea suficiente.
/api/public/v1/productsLista las marcas de la clave junto con los canales disponibles actualmente para cada una.
/api/public/v1/products/:id/destinationsLista los destinos de publicación de esa marca, incluyendo Instagram Login independiente, página de Facebook, Threads, perfil o página de LinkedIn, y destinos de TikTok conectados.
/api/public/v1/media/upload-sessionsCrea una sesión de subida directa de 15 minutos con nombre, tipo y tamaño exacto.
<uploadSession.uploadUrl>Sube los bytes directamente al almacenamiento con el Content-Type devuelto; no envíes la clave API.
/api/public/v1/media/upload-sessions/:id/finalizeVerifica tipo y tamaño y devuelve el activo multimedia; las sesiones completadas admiten reintentos seguros.
/api/public/v1/mediaSubida multipart de compatibilidad. Devuelve un id de activo y una URL alojada.
/api/public/v1/postsCrea un borrador en el espacio de trabajo. Facebook, Instagram y TikTok usan por defecto la publicación manual (deliveryMode manual_reminder); envía deliveryMode direct_publish para que la publicación use la API.
/api/public/v1/postsLista publicaciones, de más reciente a más antigua. Filtra con ?status=scheduled para ver lo programado, y ?productId= para limitar a una marca. Una clave limitada a una marca siempre está restringida a su propia marca y puede omitir productId.
/api/public/v1/posts/:idDevuelve el estado actual de la publicación, el modo de entrega y los resultados de publicación.
/api/public/v1/posts/:id/publishEncola una ejecución de publicación asíncrona. Las publicaciones manuales van a la cola «Por publicar» del espacio de trabajo para publicación nativa; LinkedIn, Threads y Pinterest publican directamente; las publicaciones de Meta que optaron por ello se publican vía API oficial, y las de TikTok que optaron por ello usan el traspaso a la bandeja de entrada.
/api/public/v1/posts/:idElimina la publicación de Markaestro. Usa el permiso existente posts.write. Devuelve 400 VALIDATION_POST_IS_PUBLISHING mientras una ejecución de publicación está en curso. Eliminar una publicación ya publicada no retira la copia activa en la plataforma.
/api/public/v1/job-runs/:idDevuelve queued, running, succeeded o failed.
/api/public/v1/webhook-endpointsRegistra un destino de webhook, hasta 25 endpoints activos por espacio de trabajo.
/api/public/v1/webhook-endpointsLista los destinos de webhook registrados para el alcance de esa clave de API.
/api/public/v1/webhook-endpoints/:idDesactiva un destino de webhook.
curl "$MARKAESTRO_URL/api/public/v1/products" \
-H "Authorization: Bearer $MARKAESTRO_API_KEY"destinationId devuelto cuando un producto tenga varios destinos, como un perfil de LinkedIn más páginas.curl "$MARKAESTRO_URL/api/public/v1/products/prod_123/destinations" \
-H "Authorization: Bearer $MARKAESTRO_API_KEY"# 1. Create a 15-minute upload session
UPLOAD=$(curl -s -X POST "$MARKAESTRO_URL/api/public/v1/media/upload-sessions" \
-H "Authorization: Bearer $MARKAESTRO_API_KEY" \
-H "Content-Type: application/json" \
-d '{"fileName":"launch-1.jpg","contentType":"image/jpeg","sizeBytes":184320}')
# 2. PUT bytes directly to uploadSession.uploadUrl with its returned headers
curl -X PUT "<upload_url>" -H "Content-Type: image/jpeg" --data-binary @launch-1.jpg
# 3. Finalize; the response contains asset.id for mediaAssetIds
curl -X POST "$MARKAESTRO_URL/api/public/v1/media/upload-sessions/<session_id>/finalize" \
-H "Authorization: Bearer $MARKAESTRO_API_KEY""deliveryMode": "direct_publish" para que esta publicación use la API oficial.curl -X POST "$MARKAESTRO_URL/api/public/v1/posts" \
-H "Authorization: Bearer $MARKAESTRO_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: post-001" \
-d '{
"channel": "instagram",
"caption": "Launch day carousel",
"mediaAssetIds": ["ast_123", "ast_124"],
"productId": "prod_123",
"destinationId": "instagram:instagram:ig_123"
}'deliveryMode: "platform_inbox" (o direct_publish), una publicación explícita envía el borrador a la bandeja de entrada del creador en TikTok.curl -X POST "$MARKAESTRO_URL/api/public/v1/posts" \
-H "Authorization: Bearer $MARKAESTRO_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: post-tt-001" \
-d '{
"channel": "tiktok",
"caption": "Spring drop teaser",
"mediaAssetIds": ["ast_vid_123"],
"productId": "prod_123",
"destinationId": "tiktok:tiktok:tt_open_123"
}'post.action_required; LinkedIn, Threads, Pinterest y las publicaciones de Meta que optaron por ello se publican directamente; las de TikTok que optaron por ello encolan el traspaso a la bandeja de entrada.curl -X POST "$MARKAESTRO_URL/api/public/v1/posts/pst_123/publish" \
-H "Authorization: Bearer $MARKAESTRO_API_KEY" \
-H "Idempotency-Key: publish-001"posts.read y posts.write.# The key is already bound to one brand
curl "$MARKAESTRO_URL/api/public/v1/posts?status=scheduled&limit=100" \
-H "Authorization: Bearer $MARKAESTRO_API_KEY"
# Cancel one
curl -X DELETE "$MARKAESTRO_URL/api/public/v1/posts/pst_123" \
-H "Authorization: Bearer $MARKAESTRO_API_KEY"{
"id": "evt_123",
"type": "post.action_required",
"createdAt": "2026-04-08T18:06:10.000Z",
"workspaceId": "ws_123",
"data": {
"postId": "pst_123",
"channel": "instagram",
"status": "platform_action_required",
"nextAction": "post_manually_from_reminder"
}
}Publicaciones de solo texto, imagen o vídeo. Hasta 10 imágenes o 1 vídeo por publicación. Publicación manual por defecto; publicación directa si se opta por ello.
Al menos una imagen o vídeo, hasta 10 elementos. Un solo vídeo se publica como Reel. Publicación manual por defecto; publicación directa si se opta por ello.
TikTok
Al menos una imagen o un vídeo. Hasta 35 imágenes o 1 vídeo. Publicación manual por defecto; las publicaciones activadas van a la bandeja de entrada de TikTok del creador, o directamente al perfil con postMode direct_post de TikTok.
Texto, imagen individual, vídeo individual, o publicaciones multiimagen orgánicas de hasta 20 imágenes. Dirígete al perfil conectado o a una página gestionada.
X
Texto, hasta cuatro imágenes, un GIF o un vídeo. Los controles de respuesta se aplican por publicación y la publicación se bloquea cuando se agota el presupuesto de costes de X del espacio de trabajo.