Publica en Instagram por API Reels, carruseles y Stories

Programa fotos, carruseles, Reels y Stories de Instagram desde tu backend o tu agente de IA. Sube los medios, envía un POST /v1/posts y recibe un webhook firmado cuando se publique.

URL base https://api.so-me.studio/v1 · Autenticación X-API-Key · socialMedia: INSTAGRAM

Qué puedes publicar en Instagram

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.

IMAGE

Una sola foto en el feed.

CAROUSEL

De 2 a 10 fotos en un solo post deslizable. También se acepta MULTIPLE_IMAGES.

REEL

Un vídeo, publicado como Reel.

VIDEO

Un vídeo, que Instagram también publica como Reel. Sus reglas de tamaño son más flexibles que las de REEL.

STORY

Una foto o un vídeo como Story. Instagram no muestra pie de foto en las Stories.

Programa un post en Instagram

Sube los medios y luego crea el post. Omite scheduledAt para publicar de inmediato.

  1. Reserva una URL de subida

    POST /v1/media/presign-upload añade el archivo a tu biblioteca de medios y devuelve un fileId y una uploadUrl prefirmada.

    Reserva una URL de subida
    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":"launch-reel.mp4","mimetype":"video/mp4","size":48211904}]}'
    
    # → [{ "fileId": "…", "uploadUrl": "https://…", "fileSrc": "…", "s3Key": "…" }]
  2. Sube el archivo

    Haz un PUT de los bytes a uploadUrl con exactamente el Content-Type que declaraste. La URL es válida durante una hora.

    Sube el archivo
    curl -X PUT "$UPLOAD_URL" \
      -H "Content-Type: video/mp4" \
      --upload-file ./launch-reel.mp4
  3. Crea el post

    POST /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.

    Crea el post
    curl -X POST https://api.so-me.studio/v1/posts \
      -H "X-API-Key: $SOME_API_KEY" \
      -H "Content-Type: application/json" \
      -d '{
        "socialMedia": "INSTAGRAM",
        "postType": "REEL",
        "text": "Así fue la semana de lanzamiento, entre bastidores",
        "fileIds": ["<fileId>"],
        "scheduledAt": "2026-11-03T15:00:00Z",
        "firstComment": "#semanadelanzamiento #buildinpublic"
      }'

accountId es opcional cuando el espacio de trabajo tiene una sola cuenta de Instagram. En caso contrario, pasa un id de GET /v1/accounts.

Los archivos adjuntos con fileIds se comprueban contra los límites de Instagram indicados abajo antes de poner nada en cola. Si un archivo incumple una regla, se devuelve un 400 con un informe por archivo.

Opciones de Instagram

Los campos que cambian cómo se publica un post en Instagram.

CampoQué hace
firstCommentUn comentario que se publica bajo el post justo después de que salga, de hasta 2.200 caracteres. Útil para hashtags o un enlace.
metaData.taggedPeopleUn array de nombres de usuario públicos de Instagram para etiquetar en fotos, fotos de carruseles y Reels. El etiquetado se hace en la medida de lo posible: un nombre de usuario incorrecto nunca bloquea el post.
accountIdLa cuenta de Instagram desde la que publicar, tal como la lista GET /v1/accounts. Opcional cuando el espacio de trabajo solo tiene una.

Límites de medios de Instagram

Social media studio comprueba cada archivo contra estos límites antes de publicar. Son los límites que tenemos configurados, no una promesa de Instagram: GET /v1/media/rules devuelve la tabla vigente y POST /v1/media/validate comprueba un archivo sin publicarlo.

Tipo de post IMAGE

Formatos
JPEG, PNG, WebP
Tamaño máximo del archivo
8 MB
Archivos por post
1
Dimensiones
≥ 320 px de ancho
Relación de aspecto
4:5 a 1.91:1

Tipo de post CAROUSEL

Formatos
JPEG, PNG, WebP
Tamaño máximo del archivo
8 MB cada uno
Archivos por post
2–10
Dimensiones
≥ 320 px de ancho
Relación de aspecto
4:5 a 1.91:1

Tipo de post REEL

Formatos
MP4, MOV
Tamaño máximo del archivo
300 MB
Archivos por post
1
Duración máxima
15 min
Dimensiones
≥ 540 × 960 px, ≤ 1920 px de ancho
Códecs de vídeo
H.264, H.265
Velocidad de fotogramas
≤ 60 fps

Tipo de post VIDEO

Formatos
MP4, MOV
Tamaño máximo del archivo
300 MB
Archivos por post
1
Duración máxima
15 min
Dimensiones
320–1920 px de ancho
Códecs de vídeo
H.264, H.265
Velocidad de fotogramas
≤ 60 fps

Tipo de post STORY

Formatos
JPEG, PNG, MP4, MOV
Tamaño máximo del archivo
100 MB
Archivos por post
1
Duración máxima
60 s
Dimensiones
≥ 320 px de ancho
Relación de aspecto
1:2 a 1.91:1

Entérate cuando se publique

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.

Suscríbete una vez
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.
Cómo es cada entrega
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": "INSTAGRAM" }
}

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.

¿Estás creando un agente de IA?

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 Instagram sin llamadas HTTP escritas a mano.

Servidor MCP

Añade el servidor a Claude, Cursor o cualquier cliente MCP con tu clave de API. OAuth también funciona. Para Instagram, el agente llama a estas herramientas con los mismos campos que la petición REST:

  • presign_media_upload
  • validate_post_media
  • create_post
mcp.json
{
  "mcpServers": {
    "so-me-studio": {
      "url": "https://api.so-me.studio/mcp",
      "headers": { "X-API-Key": "sk_live_…" }
    }
  }
}

CLI

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 Instagram con un solo comando.

so-me
so-me posts:create --platform INSTAGRAM --post-type REEL \
  -m ./launch-reel.mp4 \
  -c "Así fue la semana de lanzamiento, entre bastidores" \
  -s 2026-11-03T15:00:00Z \
  --first-comment "#semanadelanzamiento #buildinpublic"

El 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

Sigue leyendo

Guías de otras plataformas

Una cuenta profesional de Instagram, Business o Creator. Instagram no permite que las apps publiquen en cuentas personales. Conectas la cuenta una sola vez en el panel de Social media studio.

No. Instagram necesita una foto o un vídeo en cada post, así que un post de Instagram solo con texto falla. Adjunta los medios con fileIds; la comprobación de medios se ejecuta antes de poner el post en cola.

Sí. Envía postType STORY con una foto o un vídeo y una hora scheduledAt. La API sigue exigiendo texto, pero Instagram no muestra pies de foto en las Stories.

No. Conectas la cuenta de Instagram una sola vez en el panel de Social media studio mediante el inicio de sesión de Instagram. 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.

Programa una vez.
Publica en todas partes.

Deja de hacer malabares con pestañas: redacta, adapta y publica en 20 plataformas desde un único calendario.

Publica en Instagram por API: Reels, carruseles y Stories