API de subida de YouTube Programa vídeos y Shorts

Sube vídeos a YouTube de forma programada, con tu propio título, descripción y visibilidad, desde un script, una tarea de CI o un agente de IA. Conecta el canal una sola vez con el inicio de sesión de Google.

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

Qué puedes publicar en YouTube

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.

VIDEO

Un archivo de vídeo. YouTube trata un vídeo vertical de hasta 3 minutos como un Short, así que no hay un tipo Shorts aparte.

Programa un post en YouTube

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":"build-time.mp4","mimetype":"video/mp4","size":209715200}]}'
    
    # → [{ "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 ./build-time.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": "YOUTUBE",
        "postType": "VIDEO",
        "text": "Cómo redujimos a la mitad el tiempo de compilación",
        "fileIds": ["<fileId>"],
        "scheduledAt": "2026-11-08T16:00:00Z",
        "metaData": {
          "title": "Cómo redujimos a la mitad el tiempo de compilación",
          "description": "Caché, trabajos en paralelo y una opción sorprendente.",
          "visibility": "public"
        }
      }'

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

Los archivos adjuntos con fileIds se comprueban contra los límites de YouTube 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 YouTube

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

CampoQué hace
metaData.titleEl título del vídeo. YouTube admite 100 caracteres, así que los títulos más largos se recortan. Si no se indica, se usa text.
metaData.descriptionLa descripción del vídeo. Si no se indica, se usa text.
metaData.visibilityprivate, unlisted o public (privacyStatus funciona como alias). Indícalo de forma explícita: un valor no válido o contradictorio falla antes de subir nada.
firstCommentUn comentario publicado bajo el vídeo una vez publicado, de hasta 10.000 caracteres.

Límites de medios de YouTube

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

Tipo de post VIDEO

Formatos
MP4, MOV
Tamaño máximo del archivo
350 MB
Archivos por post
1
Duración máxima
12 h
Dimensiones
≤ 7680 × 4320 px
Códecs de vídeo
H.264, H.265, VP9, AV1
Velocidad de fotogramas
≤ 60 fps

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": "YOUTUBE" }
}

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

so-me
so-me posts:create --platform YOUTUBE --post-type VIDEO \
  -m ./build-time.mp4 \
  -c "Cómo redujimos a la mitad el tiempo de compilación" \
  -s 2026-11-08T16:00:00Z \
  --metadata '{"title":"Cómo redujimos a la mitad el tiempo de compilación","visibility":"public"}'

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

Sí. Sube un vídeo vertical de hasta 3 minutos como postType VIDEO. YouTube lo clasifica como un Short; no hay un ajuste de Shorts aparte.

Sí. Social media studio acepta vídeos de YouTube de hasta 350 MB cada uno, muy por debajo del límite de YouTube. Comprime los vídeos largos o de alta tasa de bits antes de subirlos.

Sí. Establece metaData.visibility en private o unlisted. El valor debe ser private, unlisted o public.

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

API de subida de YouTube: programa vídeos y Shorts