Lumpa Posting Lumpa Posting/API de subida v1
Documentación

API de subida de Lumpa Posting

Dos endpoints para mandar contenido ya producido — videos renderizados y carruseles de imágenes — desde un proceso externo directo a un workspace de Lumpa Posting, donde queda pendiente de revisión humana. Nada de lo que se sube por esta API se publica solo en una red social.

🔑 Autentícate con el token del workspace

Cada request lleva un Bearer token ligado a un solo workspace — no hay sistema de API keys separado ni flujo OAuth.

Leer más →

🎬 Sube un video renderizado

Manda un .mp4 y queda en el workspace como video Rendered, pendiente de aprobación.

Leer más →

🖼️ Sube un carrusel de imágenes

Manda entre 2 y 10 imágenes en su orden final y se crea como Draft de publicación.

Leer más →

🕒 Programa con anticipación

Opcionalmente manda scheduled_at + timezone para precargar una fecha de publicación en cualquiera de los dos endpoints.

Leer más →

Autenticación

Los dos endpoints usan el mismo middleware. Manda el token como un header Bearer estándar — no existe un query parameter de API key ni una sesión por cookie.

Header del request

Authorization: Bearer <token>
Accept: application/json

El token identifica al workspace directamente — todo lo que se suba con ese token queda atribuido a ese workspace automáticamente. No existe un campo workspace_id en el body, y un token nunca puede escribir en más de un workspace.

El token se genera desde Lumpa Posting en Configuración del workspace → API — no hay endpoint para crear o listar tokens. Regenerarlo invalida de inmediato el token anterior de ese workspace.

Respuestas de error

StatusCausaBody
401 No se mandó el header Authorization {"message": "Falta el header Authorization: Bearer <token>."}
401 El token no coincide con ningún workspace {"message": "Token inválido."}

Subir video

POST /api/videos Requiere token de workspace

Sube un video ya renderizado. Se guarda en almacenamiento de objetos (nunca toca disco local) y crea un Video con status Rendered — el mismo estado que tendría un video generado de forma nativa en Lumpa Posting, así que pasa por la misma revisión humana antes de publicarse.

Content-Type: multipart/form-data

Parámetros del body

CampoTipoNotas
videorequeridofilevideo/mp4 o video/quicktime, máx. 500 MB
topicrequeridostringMáx. 255 caracteres
aspect_ratioopcionalstringUno de 9:16, 16:9, 1:1 — 9:16 por default
duration_secondsopcionalnumber≥ 0
anchor_urlopcionalurlArtículo o herramienta en la que se basa el video
scriptopcionalarrayDatos estructurados del guion, se guardan tal cual
post_bodyopcionalstringCopy del post; si no viene, usa topic al publicar
scheduled_atopcionaldateVer Programación y zonas horarias
timezoneopcionaltzVer Programación y zonas horarias

Respuesta · 201 Created

{
  "id": 123,
  "status": "rendered",
  "public_url": "https://.../videos/....mp4",
  "review_url": "https://www.lumpaposting.com/videos/123/review"
}

Reemplazar video

POST /api/videos/{id}/replace Requiere token de workspace

Cambia el archivo de un video que ya existe — por ejemplo, uno que se volvió a renderizar con música de fondo. Solo se reemplaza el archivo: el status, el copy, la fecha programada y las cuentas autorizadas se conservan, así que un video ya programado se publica a su hora con el archivo nuevo. El archivo anterior se borra después de guardar el nuevo.

Content-Type: multipart/form-data

Parámetros del body

CampoTipoNotas
videorequeridofileMismas reglas que en Subir video
duration_secondsopcionalnumberSi se omite se conserva la duración anterior

Errores específicos

CasoStatus
El video es de otro workspace o no existe404
El video ya se está publicando o ya se publicó409

Respuesta · 200 OK

{
  "id": 123,
  "status": "approved",
  "public_url": "https://.../videos/....mp4",
  "previous_url": "https://.../videos/....mp4",
  "review_url": "https://www.lumpaposting.com/videos/123/review"
}

Errores

Los dos endpoints comparten el mismo formato para fallas de autenticación y validación.

StatusSignificado
401Falta el Bearer token o es inválido — ver Autenticación
422Un campo no pasó validación. Formato estándar de Laravel: {"message", "errors": {"campo": ["…"]}}
201Creado — el video o carrusel se aceptó y quedó en cola de revisión

Programación y zonas horarias

Un scheduled_at sin más, como 2026-08-25 14:00, es ambiguo por sí solo — no dice si es hora de Ciudad de México, UTC o cualquier otra. Los dos endpoints lo resuelven igual:

  1. Se interpreta en el campo timezone, si mandas uno.
  2. Si no, en la zona horaria configurada del workspace.
  3. Si tampoco hay, en la zona horaria default de la aplicación.

El valor resuelto se convierte a UTC antes de guardarse — la base de datos siempre está en UTC, la conversión pasa solo en la frontera. Si omites scheduled_at en un video, lo recoge el scheduler de goteo en vez de necesitar una fecha explícita.

Cliente de referencia

El pipeline de video edicion-de-videos ya llama POST /api/videos desde un cliente pequeño en Python — sirve como ejemplo de implementación real más allá de esta referencia.

data = {"topic": topic, "aspect_ratio": aspect_ratio}
files = {"video": (video_path.name, f, "video/mp4")}

requests.post(
    f"https://www.lumpaposting.com/api/videos",
    headers={"Authorization": f"Bearer {token}", "Accept": "application/json"},
    data=data,
    files=files,
)
El token da acceso de escritura al contenido de un solo workspace — trátalo como cualquier otra credencial de escritura. Guárdalo como variable de entorno, nunca lo subas a un repositorio.