Publica y programa posts, hilos, imágenes y vídeo en X (Twitter) a través de un único endpoint REST. Conecta tu cuenta de X una sola vez: no necesitas una cuenta de desarrollador de X ni un plan de la API de X propio.
URL base https://api.so-me.studio/v1 · Autenticación X-API-Key · socialMedia: TWITTER
Envía uno de estos valores como postType. Todo post necesita texto, y las fotos o los vídeos se adjuntan por fileId desde tu biblioteca de medios.
TEXT
Un post solo de texto.
IMAGE
Una imagen.
CAROUSEL
De 2 a 4 imágenes en un post.
VIDEO
Un vídeo.
Sube los medios y luego crea el post. Omite scheduledAt para publicar de inmediato.
POST /v1/media/presign-upload añade el archivo a tu biblioteca de medios y devuelve un fileId y una uploadUrl prefirmada.
curl -X POST https://api.so-me.studio/v1/media/presign-upload \
-H "X-API-Key: $SOME_API_KEY" \
-H "Content-Type: application/json" \
-d '{"files":[{"filename":"onboarding.png","mimetype":"image/png","size":412300}]}'
# → [{ "fileId": "…", "uploadUrl": "https://…", "fileSrc": "…", "s3Key": "…" }]Haz un PUT de los bytes a uploadUrl con exactamente el Content-Type que declaraste. La URL es válida durante una hora.
curl -X PUT "$UPLOAD_URL" \
-H "Content-Type: image/png" \
--upload-file ./onboarding.pngPOST /v1/posts con el fileId. La respuesta es el post con estado SCHEDULED, y se publica a la hora indicada en scheduledAt a través de una cola que reintenta si hay un fallo.
curl -X POST https://api.so-me.studio/v1/posts \
-H "X-API-Key: $SOME_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"socialMedia": "TWITTER",
"postType": "IMAGE",
"text": "Rediseñamos nuestro onboarding. 3 cosas que aprendimos:",
"fileIds": ["<fileId>"],
"threadParts": [
{ "text": "1. Pide una sola cosa por pantalla." },
{ "text": "2. Muestra el resultado antes de la configuración." },
{ "text": "3. Mide el abandono por paso, no por embudo." }
],
"scheduledAt": "2026-11-06T13:00:00Z"
}'accountId es opcional cuando el espacio de trabajo tiene una sola cuenta de X. En caso contrario, pasa un id de GET /v1/accounts.
Los archivos adjuntos con fileIds se comprueban contra los límites de X indicados abajo antes de poner nada en cola. Si un archivo incumple una regla, se devuelve un 400 con un informe por archivo.
Los campos que cambian cómo se publica un post en X.
| Campo | Qué hace |
|---|---|
| threadParts | Los posts siguientes, en orden, publicados como una cadena de respuestas bajo el primero. Hasta 24 partes de 280 caracteres, cada una con hasta 4 fileIds. |
| firstComment | Una respuesta publicada bajo el post, o bajo la última parte de un hilo, una vez que está publicado. Hasta 280 caracteres, y X cuenta cada enlace como 23. |
| accountId | La cuenta de X desde la que publicar. Opcional cuando el espacio de trabajo solo tiene una. |
Social media studio comprueba cada archivo contra estos límites antes de publicar. Son los límites que tenemos configurados, no una promesa de X: GET /v1/media/rules devuelve la tabla vigente y POST /v1/media/validate comprueba un archivo sin publicarlo.
Tipo de post TEXT
Solo texto, sin medios
Tipo de post IMAGE
Tipo de post CAROUSEL
Tipo de post VIDEO
La publicación es asíncrona. Suscríbete a post.published y post.failed, o consulta GET /v1/posts/:id de forma periódica hasta que postStatus sea POSTED o FAILED.
curl -X POST https://api.so-me.studio/v1/webhooks/subscriptions \
-H "X-API-Key: $SOME_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"url": "https://example.com/hooks/social",
"categories": ["post"],
"events": ["post.published", "post.failed"]
}'
# The response includes the secret that signs every delivery.POST /hooks/social
X-Webhook-Event: post.published
X-Webhook-Signature: <hex HMAC-SHA256 of the raw body>
{
"event": "post.published",
"category": "post",
"timestamp": "2026-11-03T15:00:07.412Z",
"data": { "postId": "…", "platform": "TWITTER" }
}Cada entrega va firmada con HMAC-SHA256 en X-Webhook-Signature. post.failed se dispara tras el último reintento; corrige la causa y llama a POST /v1/posts/:id/retry. Un primer comentario informa por su cuenta con post.first_comment_posted o post.first_comment_failed.
La misma clave de API sirve para un servidor MCP con más de 200 herramientas y para una CLI, así que un agente puede publicar en X sin llamadas HTTP escritas a mano.
Añade el servidor a Claude, Cursor o cualquier cliente MCP con tu clave de API. OAuth también funciona. Para X, el agente llama a estas herramientas con los mismos campos que la petición REST:
{
"mcpServers": {
"so-me-studio": {
"url": "https://api.so-me.studio/mcp",
"headers": { "X-API-Key": "sk_live_…" }
}
}
}Instálala con npm i -g @social-media-scheduler/cli. Sube los archivos locales por ti e imprime JSON, así que un script o una tarea de CI pueden programar un post en X con un solo comando.
so-me posts:create --platform TWITTER --post-type IMAGE \
-m ./onboarding.png \
-c "Rediseñamos nuestro onboarding. 3 cosas que aprendimos:" \
--thread "1. Pide una sola cosa por pantalla." \
--thread "2. Muestra el resultado antes de la configuración." \
-s 2026-11-06T13:00:00ZEl acceso a la API, la CLI y MCP está incluido en todos los planes de pago: Lite, Creator, Standard, Advanced y Lifetime. Ver planes y límites
Sí. Pon el primer post en text y el resto en threadParts. Cada parte puede llevar su propio texto y sus fileIds. Si falla una parte posterior, las partes que ya están publicadas permanecen y el post registra cuántas se publicaron.
No. Conectas tu cuenta de X a Social media studio una sola vez, y la publicación se realiza a través de la integración de X de Social media studio. Tu código solo envía tu clave de API de Social media studio.
No. Conectas la cuenta de X una sola vez en el panel de Social media studio mediante el inicio de sesión de X. Sus tokens se guardan cifrados y los renovamos nosotros, y tu código solo envía tu clave de API de Social media studio en la cabecera X-API-Key.
No. Responde en cuanto el post queda en cola. La publicación se ejecuta en un worker que reintenta si falla, así que escucha post.published y post.failed, o consulta GET /v1/posts/:id de forma periódica.
La REST API, la CLI y el servidor MCP están incluidos en todos los planes de pago: Lite, Creator, Standard, Advanced y Lifetime. Lite, Creator, Standard y Advanced empiezan con una prueba de 7 días (se requiere tarjeta) y Lifetime es un pago único.
Deja de hacer malabares con pestañas: redacta, adapta y publica en 20 plataformas desde un único calendario.