{"openapi":"3.1.0","info":{"title":"Originl API","description":"API pública de Originl.\n\n**Qué incluye cada plan.** Growth: claves de solo lectura (todos los `GET`) y el MCP de consulta. Viral: la API\ncompleta (también los `POST`), el MCP con cambios y los webhooks. Start no incluye API. Si la cuenta baja de plan, las\nclaves dejan de servir en la siguiente petición (403 `plan_sin_api`).\n\n**Autenticación.** Crea una clave en *Ajustes, API y MCP* y envíala en cada petición:\n`Authorization: Bearer ol_live_...`. La clave se enseña una sola vez. Alcances: `lectura` y `escritura`. Cada clave\ntiene el rol de quien la creó en el equipo.\n\n**Errores.** Siempre `{\"error\": {\"code\": \"...\", \"message\": \"...\"}}` con el status HTTP que toca. `message` va en llano.\n\n**Límites.** Por minuto: 60 por clave y 120 por cuenta en Viral; 30 y 60 en Growth. Cabeceras `X-RateLimit-Limit`,\n`X-RateLimit-Remaining` y `X-RateLimit-Reset` (segundos de época). Si te pasas, 429 con `Retry-After`.\n\n**Idempotencia.** En los POST, envía `Idempotency-Key: <uuid>`: repetir la misma petición con la misma clave en 24 h\ndevuelve la misma respuesta (`Idempotent-Replayed: true`) sin repetir la acción. Muy recomendable al crear variantes.\n\n**Paginación.** Las listas devuelven `{\"data\": [...], \"has_more\": bool, \"next_cursor\": \"...\"}`. Pide la siguiente\npágina con `?cursor=<next_cursor>` y `limite` de 1 a 100 (25 por defecto).\n\n**Gasto.** Crear con IA pide antes la cotización (`POST /v1/videos/{id}/ia/cotizacion`) y luego la creación con\n`max_creditos_ia`: nunca se gasta más de lo aceptado.\n\n**MCP.** El mismo acceso para tu asistente de IA (Claude, Claude Code, Cursor) en `/mcp`, con la misma clave.\n\nLas respuestas son JSON con los campos del producto en español.","version":"1.0.0"},"servers":[{"url":"https://api.getoriginl.com"}],"paths":{"/v1/cuenta":{"get":{"tags":["Cuenta"],"summary":"Quién soy: la cuenta y la clave","operationId":"get_cuenta_v1_cuenta_get","responses":{"200":{"description":"Correcto","content":{"application/json":{"schema":{},"example":{"cuenta":{"id":"1f2e3d4c-5b6a-4978-8a9b-0c1d2e3f4a5b","plan":"viral","perfiles_contratados":3},"clave":{"id":"9a8b7c6d-5e4f-4a3b-8c2d-1e0f9a8b7c6d","alcances":["lectura","escritura"]}}}}},"401":{"description":"Falta la clave o no es válida","content":{"application/json":{"example":{"error":{"code":"clave_no_valida","message":"La clave de API no es válida o se ha revocado."}}}}},"403":{"description":"Plan sin API, alcance insuficiente o rol sin permiso","content":{"application/json":{"example":{"error":{"code":"plan_sin_api","message":"Hacer cambios por la API (crear, aprobar, programar) está incluido en el plan Viral. Con tu plan, la API es de solo lectura.","planes_url":"https://getoriginl.com/dashboard/settings/billing"}}}}},"404":{"description":"No existe o no es de tu cuenta","content":{"application/json":{"example":{"error":{"code":"no_encontrado","message":"No se ha encontrado ese perfil (o no es de tu cuenta)."}}}}},"422":{"description":"Petición no válida","content":{"application/json":{"example":{"error":{"code":"peticion_no_valida","message":"La petición no es válida: revisa los campos.","campos":[{"campo":"n","motivo":"Input should be less than or equal to 10"}]}}}}},"429":{"description":"Límite de peticiones superado (mira Retry-After)","content":{"application/json":{"example":{"error":{"code":"demasiadas_peticiones","message":"Has hecho demasiadas peticiones seguidas. Espera un momento y vuelve a intentarlo."}}}}}}}},"/v1/saldo":{"get":{"tags":["Cuenta"],"summary":"Saldo de reels del mes y de créditos de IA","operationId":"get_saldo_v1_saldo_get","responses":{"200":{"description":"Correcto","content":{"application/json":{"schema":{},"example":{"reels":{"incluido":true,"usados_mes":41,"cupo_mes":300,"quedan_mes":259,"tandas_mes_quedan":12},"creditos_ia":{"cupo":45600,"monedero":5700,"disponibles":51300,"margen":1539}}}}},"401":{"description":"Falta la clave o no es válida","content":{"application/json":{"example":{"error":{"code":"clave_no_valida","message":"La clave de API no es válida o se ha revocado."}}}}},"403":{"description":"Plan sin API, alcance insuficiente o rol sin permiso","content":{"application/json":{"example":{"error":{"code":"plan_sin_api","message":"Hacer cambios por la API (crear, aprobar, programar) está incluido en el plan Viral. Con tu plan, la API es de solo lectura.","planes_url":"https://getoriginl.com/dashboard/settings/billing"}}}}},"404":{"description":"No existe o no es de tu cuenta","content":{"application/json":{"example":{"error":{"code":"no_encontrado","message":"No se ha encontrado ese perfil (o no es de tu cuenta)."}}}}},"422":{"description":"Petición no válida","content":{"application/json":{"example":{"error":{"code":"peticion_no_valida","message":"La petición no es válida: revisa los campos.","campos":[{"campo":"n","motivo":"Input should be less than or equal to 10"}]}}}}},"429":{"description":"Límite de peticiones superado (mira Retry-After)","content":{"application/json":{"example":{"error":{"code":"demasiadas_peticiones","message":"Has hecho demasiadas peticiones seguidas. Espera un momento y vuelve a intentarlo."}}}}}}}},"/v1/perfiles":{"get":{"tags":["Perfiles"],"summary":"Perfiles de la cuenta","operationId":"get_perfiles_v1_perfiles_get","parameters":[{"name":"limite","in":"query","required":false,"schema":{"anyOf":[{"type":"integer","maximum":100,"minimum":1},{"type":"null"}],"title":"Limite"}},{"name":"cursor","in":"query","required":false,"schema":{"anyOf":[{"type":"string","maxLength":200},{"type":"null"}],"title":"Cursor"}}],"responses":{"200":{"description":"Correcto","content":{"application/json":{"schema":{},"example":{"data":[{"id":"5a6b7c8d-9e0f-4a1b-8c2d-3e4f5a6b7c8d","nombre":"Luna","pais":"ES","idioma":"es","redes":[{"red":"instagram","url":"https://instagram.com/luna"}],"creado_at":"2026-10-01T09:00:00+00:00"}],"has_more":true,"next_cursor":"eyJvIjogMjV9"}}}},"401":{"description":"Falta la clave o no es válida","content":{"application/json":{"example":{"error":{"code":"clave_no_valida","message":"La clave de API no es válida o se ha revocado."}}}}},"403":{"description":"Plan sin API, alcance insuficiente o rol sin permiso","content":{"application/json":{"example":{"error":{"code":"plan_sin_api","message":"Hacer cambios por la API (crear, aprobar, programar) está incluido en el plan Viral. Con tu plan, la API es de solo lectura.","planes_url":"https://getoriginl.com/dashboard/settings/billing"}}}}},"404":{"description":"No existe o no es de tu cuenta","content":{"application/json":{"example":{"error":{"code":"no_encontrado","message":"No se ha encontrado ese perfil (o no es de tu cuenta)."}}}}},"422":{"description":"Petición no válida","content":{"application/json":{"example":{"error":{"code":"peticion_no_valida","message":"La petición no es válida: revisa los campos.","campos":[{"campo":"n","motivo":"Input should be less than or equal to 10"}]}}}}},"429":{"description":"Límite de peticiones superado (mira Retry-After)","content":{"application/json":{"example":{"error":{"code":"demasiadas_peticiones","message":"Has hecho demasiadas peticiones seguidas. Espera un momento y vuelve a intentarlo."}}}}}}}},"/v1/perfiles/{perfil_id}":{"get":{"tags":["Perfiles"],"summary":"Un perfil","operationId":"get_perfil_v1_perfiles__perfil_id__get","parameters":[{"name":"perfil_id","in":"path","required":true,"schema":{"type":"string","title":"Perfil Id"}}],"responses":{"200":{"description":"Correcto","content":{"application/json":{"schema":{},"example":{"id":"5a6b7c8d-9e0f-4a1b-8c2d-3e4f5a6b7c8d","nombre":"Luna","pais":"ES","idioma":"es","redes":[{"red":"instagram","url":"https://instagram.com/luna"}],"creado_at":"2026-10-01T09:00:00+00:00"}}}},"401":{"description":"Falta la clave o no es válida","content":{"application/json":{"example":{"error":{"code":"clave_no_valida","message":"La clave de API no es válida o se ha revocado."}}}}},"403":{"description":"Plan sin API, alcance insuficiente o rol sin permiso","content":{"application/json":{"example":{"error":{"code":"plan_sin_api","message":"Hacer cambios por la API (crear, aprobar, programar) está incluido en el plan Viral. Con tu plan, la API es de solo lectura.","planes_url":"https://getoriginl.com/dashboard/settings/billing"}}}}},"404":{"description":"No existe o no es de tu cuenta","content":{"application/json":{"example":{"error":{"code":"no_encontrado","message":"No se ha encontrado ese perfil (o no es de tu cuenta)."}}}}},"422":{"description":"Petición no válida","content":{"application/json":{"example":{"error":{"code":"peticion_no_valida","message":"La petición no es válida: revisa los campos.","campos":[{"campo":"n","motivo":"Input should be less than or equal to 10"}]}}}}},"429":{"description":"Límite de peticiones superado (mira Retry-After)","content":{"application/json":{"example":{"error":{"code":"demasiadas_peticiones","message":"Has hecho demasiadas peticiones seguidas. Espera un momento y vuelve a intentarlo."}}}}}}}},"/v1/perfiles/{perfil_id}/piloto":{"get":{"tags":["Piloto automático"],"summary":"Estado del piloto","description":"Si está pausado, cuántos tocan hoy, cuántos van y, si no publica, `motivo` con el texto en `motivo_textos` (es y en).","operationId":"get_piloto_v1_perfiles__perfil_id__piloto_get","parameters":[{"name":"perfil_id","in":"path","required":true,"schema":{"type":"string","title":"Perfil Id"}}],"responses":{"200":{"description":"Correcto","content":{"application/json":{"schema":{},"example":{"perfil_id":"5a6b7c8d-9e0f-4a1b-8c2d-3e4f5a6b7c8d","activado":true,"pausado":false,"motivo":null,"objetivo_dia":3,"cupo_hoy":3,"publicado_hoy":1,"programado":9,"proxima_publicacion":"2026-10-28T18:40:00+00:00"}}}},"401":{"description":"Falta la clave o no es válida","content":{"application/json":{"example":{"error":{"code":"clave_no_valida","message":"La clave de API no es válida o se ha revocado."}}}}},"403":{"description":"Plan sin API, alcance insuficiente o rol sin permiso","content":{"application/json":{"example":{"error":{"code":"plan_sin_api","message":"Hacer cambios por la API (crear, aprobar, programar) está incluido en el plan Viral. Con tu plan, la API es de solo lectura.","planes_url":"https://getoriginl.com/dashboard/settings/billing"}}}}},"404":{"description":"No existe o no es de tu cuenta","content":{"application/json":{"example":{"error":{"code":"no_encontrado","message":"No se ha encontrado ese perfil (o no es de tu cuenta)."}}}}},"422":{"description":"Petición no válida","content":{"application/json":{"example":{"error":{"code":"peticion_no_valida","message":"La petición no es válida: revisa los campos.","campos":[{"campo":"n","motivo":"Input should be less than or equal to 10"}]}}}}},"429":{"description":"Límite de peticiones superado (mira Retry-After)","content":{"application/json":{"example":{"error":{"code":"demasiadas_peticiones","message":"Has hecho demasiadas peticiones seguidas. Espera un momento y vuelve a intentarlo."}}}}}}}},"/v1/perfiles/{perfil_id}/piloto/pausar":{"post":{"tags":["Piloto automático"],"summary":"Pausar el piloto","description":"Lo que el piloto tenía programado y aún no ha salido se quita del calendario (`retiradas`). `no_retiradas` > 0 son publicaciones que el motor no dejó quitar y pueden salir. Alcance: escritura.","operationId":"post_pausar_v1_perfiles__perfil_id__piloto_pausar_post","parameters":[{"name":"perfil_id","in":"path","required":true,"schema":{"type":"string","title":"Perfil Id"}},{"name":"Idempotency-Key","in":"header","required":false,"description":"Opcional. La misma clave y la misma petición en 24 h devuelven la misma respuesta.","schema":{"type":"string","maxLength":255},"example":"4f7d2c1a-9b8e-4c3d-a2b1-0e9f8d7c6b5a"}],"responses":{"200":{"description":"Correcto","content":{"application/json":{"schema":{},"example":{"perfil_id":"5a6b7c8d-9e0f-4a1b-8c2d-3e4f5a6b7c8d","pausado":true,"retiradas":6,"no_retiradas":0}}}},"401":{"description":"Falta la clave o no es válida","content":{"application/json":{"example":{"error":{"code":"clave_no_valida","message":"La clave de API no es válida o se ha revocado."}}}}},"403":{"description":"Plan sin API, alcance insuficiente o rol sin permiso","content":{"application/json":{"example":{"error":{"code":"plan_sin_api","message":"Hacer cambios por la API (crear, aprobar, programar) está incluido en el plan Viral. Con tu plan, la API es de solo lectura.","planes_url":"https://getoriginl.com/dashboard/settings/billing"}}}}},"404":{"description":"No existe o no es de tu cuenta","content":{"application/json":{"example":{"error":{"code":"no_encontrado","message":"No se ha encontrado ese perfil (o no es de tu cuenta)."}}}}},"422":{"description":"Petición no válida","content":{"application/json":{"example":{"error":{"code":"peticion_no_valida","message":"La petición no es válida: revisa los campos.","campos":[{"campo":"n","motivo":"Input should be less than or equal to 10"}]}}}}},"429":{"description":"Límite de peticiones superado (mira Retry-After)","content":{"application/json":{"example":{"error":{"code":"demasiadas_peticiones","message":"Has hecho demasiadas peticiones seguidas. Espera un momento y vuelve a intentarlo."}}}}}}}},"/v1/perfiles/{perfil_id}/piloto/reanudar":{"post":{"tags":["Piloto automático"],"summary":"Reanudar el piloto","description":"Solo si ya se activó una vez en el panel (si no, 409 `sin_activar`). La pasada del piloto va en segundo plano. Alcance: escritura.","operationId":"post_reanudar_v1_perfiles__perfil_id__piloto_reanudar_post","parameters":[{"name":"perfil_id","in":"path","required":true,"schema":{"type":"string","title":"Perfil Id"}},{"name":"Idempotency-Key","in":"header","required":false,"description":"Opcional. La misma clave y la misma petición en 24 h devuelven la misma respuesta.","schema":{"type":"string","maxLength":255},"example":"4f7d2c1a-9b8e-4c3d-a2b1-0e9f8d7c6b5a"}],"responses":{"200":{"description":"Correcto","content":{"application/json":{"schema":{},"example":{"perfil_id":"5a6b7c8d-9e0f-4a1b-8c2d-3e4f5a6b7c8d","pausado":false,"pasada":"en_segundo_plano"}}}},"401":{"description":"Falta la clave o no es válida","content":{"application/json":{"example":{"error":{"code":"clave_no_valida","message":"La clave de API no es válida o se ha revocado."}}}}},"403":{"description":"Plan sin API, alcance insuficiente o rol sin permiso","content":{"application/json":{"example":{"error":{"code":"plan_sin_api","message":"Hacer cambios por la API (crear, aprobar, programar) está incluido en el plan Viral. Con tu plan, la API es de solo lectura.","planes_url":"https://getoriginl.com/dashboard/settings/billing"}}}}},"404":{"description":"No existe o no es de tu cuenta","content":{"application/json":{"example":{"error":{"code":"no_encontrado","message":"No se ha encontrado ese perfil (o no es de tu cuenta)."}}}}},"422":{"description":"Petición no válida","content":{"application/json":{"example":{"error":{"code":"peticion_no_valida","message":"La petición no es válida: revisa los campos.","campos":[{"campo":"n","motivo":"Input should be less than or equal to 10"}]}}}}},"429":{"description":"Límite de peticiones superado (mira Retry-After)","content":{"application/json":{"example":{"error":{"code":"demasiadas_peticiones","message":"Has hecho demasiadas peticiones seguidas. Espera un momento y vuelve a intentarlo."}}}}}}}},"/v1/perfiles/{perfil_id}/ganadores":{"get":{"tags":["Vídeos"],"summary":"Sus vídeos ganadores","description":"Reels del perfil por múltiplo sobre su mediana de vistas, con las estadísticas oficiales de Instagram. `elegible` dice si el piloto lo replicaría; `base_id`, si ya es vídeo base. Sin el Instagram conectado, `disponible: false` con el `motivo` en llano.","operationId":"get_ganadores_v1_perfiles__perfil_id__ganadores_get","parameters":[{"name":"perfil_id","in":"path","required":true,"schema":{"type":"string","title":"Perfil Id"}}],"responses":{"200":{"description":"Correcto","content":{"application/json":{"schema":{},"example":{"perfil_id":"5a6b7c8d-9e0f-4a1b-8c2d-3e4f5a6b7c8d","disponible":true,"motivo":null,"data":[{"codigo":"C9xYz12AbCd","url":"https://www.instagram.com/reel/C9xYz12AbCd/","portada_url":"https://cdn.getoriginl.com/ig/C9xYz12AbCd.jpg","texto":"3 errores al grabar reels","vistas":48200,"publicada_en":"2026-10-12T18:02:00+00:00","duracion_s":14,"multiplo":4.2,"multiplo_estimado":false,"detalle":"4.2x la mediana de su cuenta (11,480 vistas, 30 piezas).","elegible":true,"base_id":null}]}}}},"401":{"description":"Falta la clave o no es válida","content":{"application/json":{"example":{"error":{"code":"clave_no_valida","message":"La clave de API no es válida o se ha revocado."}}}}},"403":{"description":"Plan sin API, alcance insuficiente o rol sin permiso","content":{"application/json":{"example":{"error":{"code":"plan_sin_api","message":"Hacer cambios por la API (crear, aprobar, programar) está incluido en el plan Viral. Con tu plan, la API es de solo lectura.","planes_url":"https://getoriginl.com/dashboard/settings/billing"}}}}},"404":{"description":"No existe o no es de tu cuenta","content":{"application/json":{"example":{"error":{"code":"no_encontrado","message":"No se ha encontrado ese perfil (o no es de tu cuenta)."}}}}},"422":{"description":"Petición no válida","content":{"application/json":{"example":{"error":{"code":"peticion_no_valida","message":"La petición no es válida: revisa los campos.","campos":[{"campo":"n","motivo":"Input should be less than or equal to 10"}]}}}}},"429":{"description":"Límite de peticiones superado (mira Retry-After)","content":{"application/json":{"example":{"error":{"code":"demasiadas_peticiones","message":"Has hecho demasiadas peticiones seguidas. Espera un momento y vuelve a intentarlo."}}}}}}}},"/v1/perfiles/{perfil_id}/videos":{"get":{"tags":["Vídeos"],"summary":"Vídeos base del perfil","description":"Los vídeos ganadores que ya elegiste como base, con su `estado` (elegida, procesando, lista, agotada o error, con `mensaje` en llano).","operationId":"get_videos_v1_perfiles__perfil_id__videos_get","parameters":[{"name":"perfil_id","in":"path","required":true,"schema":{"type":"string","title":"Perfil Id"}},{"name":"limite","in":"query","required":false,"schema":{"anyOf":[{"type":"integer","maximum":100,"minimum":1},{"type":"null"}],"title":"Limite"}},{"name":"cursor","in":"query","required":false,"schema":{"anyOf":[{"type":"string","maxLength":200},{"type":"null"}],"title":"Cursor"}}],"responses":{"200":{"description":"Correcto","content":{"application/json":{"schema":{},"example":{"data":[{"id":"7d9e1a2b-3c4d-4e5f-8a6b-9c0d1e2f3a4b","model_id":"5a6b7c8d-9e0f-4a1b-8c2d-3e4f5a6b7c8d","origen":"mi_cuenta","url_original":"https://www.instagram.com/reel/C9xYz12AbCd/","multiplo":4.2,"estado":"lista","variantes_utiles_max":12,"creada":"2026-10-20T10:15:00+00:00","mensaje":null}],"has_more":true,"next_cursor":"eyJvIjogMjV9"}}}},"401":{"description":"Falta la clave o no es válida","content":{"application/json":{"example":{"error":{"code":"clave_no_valida","message":"La clave de API no es válida o se ha revocado."}}}}},"403":{"description":"Plan sin API, alcance insuficiente o rol sin permiso","content":{"application/json":{"example":{"error":{"code":"plan_sin_api","message":"Hacer cambios por la API (crear, aprobar, programar) está incluido en el plan Viral. Con tu plan, la API es de solo lectura.","planes_url":"https://getoriginl.com/dashboard/settings/billing"}}}}},"404":{"description":"No existe o no es de tu cuenta","content":{"application/json":{"example":{"error":{"code":"no_encontrado","message":"No se ha encontrado ese perfil (o no es de tu cuenta)."}}}}},"422":{"description":"Petición no válida","content":{"application/json":{"example":{"error":{"code":"peticion_no_valida","message":"La petición no es válida: revisa los campos.","campos":[{"campo":"n","motivo":"Input should be less than or equal to 10"}]}}}}},"429":{"description":"Límite de peticiones superado (mira Retry-After)","content":{"application/json":{"example":{"error":{"code":"demasiadas_peticiones","message":"Has hecho demasiadas peticiones seguidas. Espera un momento y vuelve a intentarlo."}}}}}}},"post":{"tags":["Vídeos"],"summary":"Elegir un vídeo ganador como vídeo base","description":"La `url` tiene que ser uno de los reels de `GET /v1/perfiles/{perfil_id}/ganadores`. No gasta nada: se gasta al crear variantes. Alcance: escritura.","operationId":"post_video_v1_perfiles__perfil_id__videos_post","parameters":[{"name":"perfil_id","in":"path","required":true,"schema":{"type":"string","title":"Perfil Id"}},{"name":"Idempotency-Key","in":"header","required":false,"description":"Opcional. La misma clave y la misma petición en 24 h devuelven la misma respuesta.","schema":{"type":"string","maxLength":255},"example":"4f7d2c1a-9b8e-4c3d-a2b1-0e9f8d7c6b5a"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ElegirVideoIn"}}}},"responses":{"200":{"description":"Correcto","content":{"application/json":{"schema":{},"example":{"id":"7d9e1a2b-3c4d-4e5f-8a6b-9c0d1e2f3a4b","model_id":"5a6b7c8d-9e0f-4a1b-8c2d-3e4f5a6b7c8d","origen":"mi_cuenta","url_original":"https://www.instagram.com/reel/C9xYz12AbCd/","multiplo":4.2,"estado":"elegida","variantes_utiles_max":null,"creada":"2026-10-20T10:15:00+00:00","mensaje":null}}}},"401":{"description":"Falta la clave o no es válida","content":{"application/json":{"example":{"error":{"code":"clave_no_valida","message":"La clave de API no es válida o se ha revocado."}}}}},"403":{"description":"Plan sin API, alcance insuficiente o rol sin permiso","content":{"application/json":{"example":{"error":{"code":"plan_sin_api","message":"Hacer cambios por la API (crear, aprobar, programar) está incluido en el plan Viral. Con tu plan, la API es de solo lectura.","planes_url":"https://getoriginl.com/dashboard/settings/billing"}}}}},"404":{"description":"No existe o no es de tu cuenta","content":{"application/json":{"example":{"error":{"code":"no_encontrado","message":"No se ha encontrado ese perfil (o no es de tu cuenta)."}}}}},"422":{"description":"Petición no válida","content":{"application/json":{"example":{"error":{"code":"peticion_no_valida","message":"La petición no es válida: revisa los campos.","campos":[{"campo":"n","motivo":"Input should be less than or equal to 10"}]}}}}},"429":{"description":"Límite de peticiones superado (mira Retry-After)","content":{"application/json":{"example":{"error":{"code":"demasiadas_peticiones","message":"Has hecho demasiadas peticiones seguidas. Espera un momento y vuelve a intentarlo."}}}}}}}},"/v1/videos/{video_id}":{"get":{"tags":["Vídeos"],"summary":"Un vídeo base, su trabajo en curso y sus variantes","description":"Consulta aquí el resultado de una tanda: `trabajo.estado` pasa de procesando a listo (o error, con `mensaje`) y las variantes nuevas aparecen en `variantes`. Mejor que consultar sin parar: el webhook `variante.lista`.","operationId":"get_video_v1_videos__video_id__get","parameters":[{"name":"video_id","in":"path","required":true,"schema":{"type":"string","title":"Video Id"}}],"responses":{"200":{"description":"Correcto","content":{"application/json":{"schema":{},"example":{"video":{"id":"7d9e1a2b-3c4d-4e5f-8a6b-9c0d1e2f3a4b","model_id":"5a6b7c8d-9e0f-4a1b-8c2d-3e4f5a6b7c8d","origen":"mi_cuenta","url_original":"https://www.instagram.com/reel/C9xYz12AbCd/","multiplo":4.2,"estado":"lista","variantes_utiles_max":12,"creada":"2026-10-20T10:15:00+00:00","mensaje":null},"trabajo":{"id":"t-91a2","estado":"listo","progreso":null,"mensaje":null},"variantes":[{"id":"0b6c3f2e-8a1d-4c5e-9f7a-2b3c4d5e6f70","base_id":"7d9e1a2b-3c4d-4e5f-8a6b-9c0d1e2f3a4b","perfil_id":"5a6b7c8d-9e0f-4a1b-8c2d-3e4f5a6b7c8d","vista_previa_url":"https://cdn.getoriginl.com/v/0b6c3f2e.mp4","portada_url":"https://cdn.getoriginl.com/p/0b6c3f2e.jpg","descarga_url":null,"cambios":["Gancho nuevo en los 2 primeros segundos","Fondo distinto"],"caption":"Esto no te lo cuentan...","calidad":86.5,"diferencia":0.41,"prioridad":1,"estado":"propuesta","programada_para":null,"publicada_en":null,"ig_media_id":null,"permalink":null,"motivo":null,"motivo_codigo":null,"metricas":null,"nombre":"Gancho nuevo en los 2 primeros segundos, Fondo distinto","origen":"piloto","red":"instagram"}]}}}},"401":{"description":"Falta la clave o no es válida","content":{"application/json":{"example":{"error":{"code":"clave_no_valida","message":"La clave de API no es válida o se ha revocado."}}}}},"403":{"description":"Plan sin API, alcance insuficiente o rol sin permiso","content":{"application/json":{"example":{"error":{"code":"plan_sin_api","message":"Hacer cambios por la API (crear, aprobar, programar) está incluido en el plan Viral. Con tu plan, la API es de solo lectura.","planes_url":"https://getoriginl.com/dashboard/settings/billing"}}}}},"404":{"description":"No existe o no es de tu cuenta","content":{"application/json":{"example":{"error":{"code":"no_encontrado","message":"No se ha encontrado ese perfil (o no es de tu cuenta)."}}}}},"422":{"description":"Petición no válida","content":{"application/json":{"example":{"error":{"code":"peticion_no_valida","message":"La petición no es válida: revisa los campos.","campos":[{"campo":"n","motivo":"Input should be less than or equal to 10"}]}}}}},"429":{"description":"Límite de peticiones superado (mira Retry-After)","content":{"application/json":{"example":{"error":{"code":"demasiadas_peticiones","message":"Has hecho demasiadas peticiones seguidas. Espera un momento y vuelve a intentarlo."}}}}}}}},"/v1/videos/{video_id}/variantes":{"post":{"tags":["Crear variantes"],"summary":"Crear variantes (reedición)","description":"Reedición fuerte del vídeo base. Gasta del cupo de reels del plan. El resultado llega a `GET /v1/videos/{video_id}` (y al webhook `variante.lista`). Alcance: escritura.","operationId":"post_reedicion_v1_videos__video_id__variantes_post","parameters":[{"name":"video_id","in":"path","required":true,"schema":{"type":"string","title":"Video Id"}},{"name":"Idempotency-Key","in":"header","required":false,"description":"Opcional. La misma clave y la misma petición en 24 h devuelven la misma respuesta.","schema":{"type":"string","maxLength":255},"example":"4f7d2c1a-9b8e-4c3d-a2b1-0e9f8d7c6b5a"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReedicionIn"}}}},"responses":{"200":{"description":"Correcto","content":{"application/json":{"schema":{},"example":{"disponible":true,"trabajo_id":"t-91a2","estado":"procesando","base_id":"7d9e1a2b-3c4d-4e5f-8a6b-9c0d1e2f3a4b","modo":"edicion"}}}},"401":{"description":"Falta la clave o no es válida","content":{"application/json":{"example":{"error":{"code":"clave_no_valida","message":"La clave de API no es válida o se ha revocado."}}}}},"403":{"description":"Plan sin API, alcance insuficiente o rol sin permiso","content":{"application/json":{"example":{"error":{"code":"plan_sin_api","message":"Hacer cambios por la API (crear, aprobar, programar) está incluido en el plan Viral. Con tu plan, la API es de solo lectura.","planes_url":"https://getoriginl.com/dashboard/settings/billing"}}}}},"404":{"description":"No existe o no es de tu cuenta","content":{"application/json":{"example":{"error":{"code":"no_encontrado","message":"No se ha encontrado ese perfil (o no es de tu cuenta)."}}}}},"422":{"description":"Petición no válida","content":{"application/json":{"example":{"error":{"code":"peticion_no_valida","message":"La petición no es válida: revisa los campos.","campos":[{"campo":"n","motivo":"Input should be less than or equal to 10"}]}}}}},"429":{"description":"Límite de peticiones superado (mira Retry-After)","content":{"application/json":{"example":{"error":{"code":"demasiadas_peticiones","message":"Has hecho demasiadas peticiones seguidas. Espera un momento y vuelve a intentarlo."}}}}}}}},"/v1/videos/{video_id}/ia/cotizacion":{"post":{"tags":["Crear variantes"],"summary":"Cotizar «Recrear con IA»","description":"Por modelo: créditos de IA que costará (`total`), si alcanza el saldo y su calidad. No gasta créditos. Un vídeo en revisión o rechazado vuelve con su `motivo`. Pasa el `total` del modelo elegido como `max_creditos_ia` al crear. Pide una clave con escritura y el plan Viral: analizar un vídeo nuevo para cotizarlo tiene coste, así que una clave de lectura no cotiza.","operationId":"post_cotizar_v1_videos__video_id__ia_cotizacion_post","parameters":[{"name":"video_id","in":"path","required":true,"schema":{"type":"string","title":"Video Id"}},{"name":"Idempotency-Key","in":"header","required":false,"description":"Opcional. La misma clave y la misma petición en 24 h devuelven la misma respuesta.","schema":{"type":"string","maxLength":255},"example":"4f7d2c1a-9b8e-4c3d-a2b1-0e9f8d7c6b5a"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CotizarIaIn"}}}},"responses":{"200":{"description":"Correcto","content":{"application/json":{"schema":{},"example":{"disponible":true,"en_prueba":false,"puede_recargar":true,"estado":"ok","contenido":"normal","duracion":14.2,"segundos_editados":4.0,"tramos":1,"resolucion":"720p","recomendado":"seedance-2.0-mini","modelo":"seedance-2.0-mini","motivo_eleccion":"Plano fijo y una persona: el modelo rápido da la misma calidad.","calidad_minima":null,"n":2,"unidad":"creditos","modelos":[{"modelo":"seedance-2.0-mini","nombre":"Seedance 2.0 Mini","calidad":"estandar","creditos":304,"creditos_por_segundo":76,"disponible":true,"motivo":null,"aviso":null,"recomendado":true,"total":608,"alcanza":true,"videos_con_saldo":168}],"calidades_disponibles":["estandar","premium"],"calidad":"estandar","calidad_por_defecto":"estandar","saldo":{"disponibles":51300,"margen":1539}}}}},"401":{"description":"Falta la clave o no es válida","content":{"application/json":{"example":{"error":{"code":"clave_no_valida","message":"La clave de API no es válida o se ha revocado."}}}}},"403":{"description":"Plan sin API, alcance insuficiente o rol sin permiso","content":{"application/json":{"example":{"error":{"code":"plan_sin_api","message":"Hacer cambios por la API (crear, aprobar, programar) está incluido en el plan Viral. Con tu plan, la API es de solo lectura.","planes_url":"https://getoriginl.com/dashboard/settings/billing"}}}}},"404":{"description":"No existe o no es de tu cuenta","content":{"application/json":{"example":{"error":{"code":"no_encontrado","message":"No se ha encontrado ese perfil (o no es de tu cuenta)."}}}}},"422":{"description":"Petición no válida","content":{"application/json":{"example":{"error":{"code":"peticion_no_valida","message":"La petición no es válida: revisa los campos.","campos":[{"campo":"n","motivo":"Input should be less than or equal to 10"}]}}}}},"429":{"description":"Límite de peticiones superado (mira Retry-After)","content":{"application/json":{"example":{"error":{"code":"demasiadas_peticiones","message":"Has hecho demasiadas peticiones seguidas. Espera un momento y vuelve a intentarlo."}}}}}}}},"/v1/videos/{video_id}/ia/variantes":{"post":{"tags":["Crear variantes"],"summary":"Crear variantes con IA","description":"Pasa siempre por la cotización y la retención de créditos de siempre: se comprueba el saldo antes de gastar, se retiene al aceptar el motor y se cobra lo real al terminar. `max_creditos_ia` es obligatorio. Alcance: escritura.","operationId":"post_crear_ia_v1_videos__video_id__ia_variantes_post","parameters":[{"name":"video_id","in":"path","required":true,"schema":{"type":"string","title":"Video Id"}},{"name":"Idempotency-Key","in":"header","required":false,"description":"Opcional. La misma clave y la misma petición en 24 h devuelven la misma respuesta.","schema":{"type":"string","maxLength":255},"example":"4f7d2c1a-9b8e-4c3d-a2b1-0e9f8d7c6b5a"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CrearIaIn"}}}},"responses":{"200":{"description":"Correcto","content":{"application/json":{"schema":{},"example":{"disponible":true,"trabajo_id":"ia3412","estado":"procesando","base_id":"7d9e1a2b-3c4d-4e5f-8a6b-9c0d1e2f3a4b","modo":"ia","creditos_ia":608,"modelo_ia":"seedance-2.0-mini"}}}},"401":{"description":"Falta la clave o no es válida","content":{"application/json":{"example":{"error":{"code":"clave_no_valida","message":"La clave de API no es válida o se ha revocado."}}}}},"403":{"description":"Plan sin API, alcance insuficiente o rol sin permiso","content":{"application/json":{"example":{"error":{"code":"plan_sin_api","message":"Hacer cambios por la API (crear, aprobar, programar) está incluido en el plan Viral. Con tu plan, la API es de solo lectura.","planes_url":"https://getoriginl.com/dashboard/settings/billing"}}}}},"404":{"description":"No existe o no es de tu cuenta","content":{"application/json":{"example":{"error":{"code":"no_encontrado","message":"No se ha encontrado ese perfil (o no es de tu cuenta)."}}}}},"422":{"description":"Petición no válida","content":{"application/json":{"example":{"error":{"code":"peticion_no_valida","message":"La petición no es válida: revisa los campos.","campos":[{"campo":"n","motivo":"Input should be less than or equal to 10"}]}}}}},"429":{"description":"Límite de peticiones superado (mira Retry-After)","content":{"application/json":{"example":{"error":{"code":"demasiadas_peticiones","message":"Has hecho demasiadas peticiones seguidas. Espera un momento y vuelve a intentarlo."}}}}}}}},"/v1/variantes":{"get":{"tags":["Variantes"],"summary":"Variantes","description":"Más recientes primero. Filtra por `perfil_id`, `video_id` y `estado`.","operationId":"get_variantes_v1_variantes_get","parameters":[{"name":"perfil_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","maxLength":64},{"type":"null"}],"title":"Perfil Id"}},{"name":"video_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","maxLength":64},{"type":"null"}],"title":"Video Id"}},{"name":"estado","in":"query","required":false,"schema":{"anyOf":[{"type":"string","maxLength":20},{"type":"null"}],"title":"Estado"}},{"name":"limite","in":"query","required":false,"schema":{"anyOf":[{"type":"integer","maximum":100,"minimum":1},{"type":"null"}],"title":"Limite"}},{"name":"cursor","in":"query","required":false,"schema":{"anyOf":[{"type":"string","maxLength":200},{"type":"null"}],"title":"Cursor"}}],"responses":{"200":{"description":"Correcto","content":{"application/json":{"schema":{},"example":{"data":[{"id":"0b6c3f2e-8a1d-4c5e-9f7a-2b3c4d5e6f70","base_id":"7d9e1a2b-3c4d-4e5f-8a6b-9c0d1e2f3a4b","perfil_id":"5a6b7c8d-9e0f-4a1b-8c2d-3e4f5a6b7c8d","vista_previa_url":"https://cdn.getoriginl.com/v/0b6c3f2e.mp4","portada_url":"https://cdn.getoriginl.com/p/0b6c3f2e.jpg","descarga_url":null,"cambios":["Gancho nuevo en los 2 primeros segundos","Fondo distinto"],"caption":"Esto no te lo cuentan...","calidad":86.5,"diferencia":0.41,"prioridad":1,"estado":"publicada","programada_para":null,"publicada_en":"2026-10-24T19:10:00+00:00","ig_media_id":"17912345678901234","permalink":"https://www.instagram.com/reel/DA1bC23dEfG/","motivo":null,"motivo_codigo":null,"metricas":{"vistas_24h":3120,"vistas_72h":5480,"alcance_no_seg":4710,"visitas_perfil":96,"seguidores":14,"guardados":41,"compartidos":27},"nombre":"Gancho nuevo en los 2 primeros segundos, Fondo distinto","origen":"piloto","red":"instagram"}],"has_more":true,"next_cursor":"eyJvIjogMjV9"}}}},"401":{"description":"Falta la clave o no es válida","content":{"application/json":{"example":{"error":{"code":"clave_no_valida","message":"La clave de API no es válida o se ha revocado."}}}}},"403":{"description":"Plan sin API, alcance insuficiente o rol sin permiso","content":{"application/json":{"example":{"error":{"code":"plan_sin_api","message":"Hacer cambios por la API (crear, aprobar, programar) está incluido en el plan Viral. Con tu plan, la API es de solo lectura.","planes_url":"https://getoriginl.com/dashboard/settings/billing"}}}}},"404":{"description":"No existe o no es de tu cuenta","content":{"application/json":{"example":{"error":{"code":"no_encontrado","message":"No se ha encontrado ese perfil (o no es de tu cuenta)."}}}}},"422":{"description":"Petición no válida","content":{"application/json":{"example":{"error":{"code":"peticion_no_valida","message":"La petición no es válida: revisa los campos.","campos":[{"campo":"n","motivo":"Input should be less than or equal to 10"}]}}}}},"429":{"description":"Límite de peticiones superado (mira Retry-After)","content":{"application/json":{"example":{"error":{"code":"demasiadas_peticiones","message":"Has hecho demasiadas peticiones seguidas. Espera un momento y vuelve a intentarlo."}}}}}}}},"/v1/variantes/{variante_id}":{"get":{"tags":["Variantes"],"summary":"Una variante","operationId":"get_variante_v1_variantes__variante_id__get","parameters":[{"name":"variante_id","in":"path","required":true,"schema":{"type":"string","title":"Variante Id"}}],"responses":{"200":{"description":"Correcto","content":{"application/json":{"schema":{},"example":{"id":"0b6c3f2e-8a1d-4c5e-9f7a-2b3c4d5e6f70","base_id":"7d9e1a2b-3c4d-4e5f-8a6b-9c0d1e2f3a4b","perfil_id":"5a6b7c8d-9e0f-4a1b-8c2d-3e4f5a6b7c8d","vista_previa_url":"https://cdn.getoriginl.com/v/0b6c3f2e.mp4","portada_url":"https://cdn.getoriginl.com/p/0b6c3f2e.jpg","descarga_url":null,"cambios":["Gancho nuevo en los 2 primeros segundos","Fondo distinto"],"caption":"Esto no te lo cuentan...","calidad":86.5,"diferencia":0.41,"prioridad":1,"estado":"propuesta","programada_para":null,"publicada_en":null,"ig_media_id":null,"permalink":null,"motivo":null,"motivo_codigo":null,"metricas":null,"nombre":"Gancho nuevo en los 2 primeros segundos, Fondo distinto","origen":"piloto","red":"instagram"}}}},"401":{"description":"Falta la clave o no es válida","content":{"application/json":{"example":{"error":{"code":"clave_no_valida","message":"La clave de API no es válida o se ha revocado."}}}}},"403":{"description":"Plan sin API, alcance insuficiente o rol sin permiso","content":{"application/json":{"example":{"error":{"code":"plan_sin_api","message":"Hacer cambios por la API (crear, aprobar, programar) está incluido en el plan Viral. Con tu plan, la API es de solo lectura.","planes_url":"https://getoriginl.com/dashboard/settings/billing"}}}}},"404":{"description":"No existe o no es de tu cuenta","content":{"application/json":{"example":{"error":{"code":"no_encontrado","message":"No se ha encontrado ese perfil (o no es de tu cuenta)."}}}}},"422":{"description":"Petición no válida","content":{"application/json":{"example":{"error":{"code":"peticion_no_valida","message":"La petición no es válida: revisa los campos.","campos":[{"campo":"n","motivo":"Input should be less than or equal to 10"}]}}}}},"429":{"description":"Límite de peticiones superado (mira Retry-After)","content":{"application/json":{"example":{"error":{"code":"demasiadas_peticiones","message":"Has hecho demasiadas peticiones seguidas. Espera un momento y vuelve a intentarlo."}}}}}}}},"/v1/variantes/{variante_id}/aprobar":{"post":{"tags":["Variantes"],"summary":"Aprobar una variante","description":"Una copia (diferencia baja) no se aprueba. Alcance: escritura.","operationId":"post_aprobar_v1_variantes__variante_id__aprobar_post","parameters":[{"name":"variante_id","in":"path","required":true,"schema":{"type":"string","title":"Variante Id"}},{"name":"Idempotency-Key","in":"header","required":false,"description":"Opcional. La misma clave y la misma petición en 24 h devuelven la misma respuesta.","schema":{"type":"string","maxLength":255},"example":"4f7d2c1a-9b8e-4c3d-a2b1-0e9f8d7c6b5a"}],"responses":{"200":{"description":"Correcto","content":{"application/json":{"schema":{},"example":{"id":"0b6c3f2e-8a1d-4c5e-9f7a-2b3c4d5e6f70","base_id":"7d9e1a2b-3c4d-4e5f-8a6b-9c0d1e2f3a4b","perfil_id":"5a6b7c8d-9e0f-4a1b-8c2d-3e4f5a6b7c8d","vista_previa_url":"https://cdn.getoriginl.com/v/0b6c3f2e.mp4","portada_url":"https://cdn.getoriginl.com/p/0b6c3f2e.jpg","descarga_url":null,"cambios":["Gancho nuevo en los 2 primeros segundos","Fondo distinto"],"caption":"Esto no te lo cuentan...","calidad":86.5,"diferencia":0.41,"prioridad":1,"estado":"aprobada","programada_para":null,"publicada_en":null,"ig_media_id":null,"permalink":null,"motivo":null,"motivo_codigo":null,"metricas":null,"nombre":"Gancho nuevo en los 2 primeros segundos, Fondo distinto","origen":"piloto","red":"instagram"}}}},"401":{"description":"Falta la clave o no es válida","content":{"application/json":{"example":{"error":{"code":"clave_no_valida","message":"La clave de API no es válida o se ha revocado."}}}}},"403":{"description":"Plan sin API, alcance insuficiente o rol sin permiso","content":{"application/json":{"example":{"error":{"code":"plan_sin_api","message":"Hacer cambios por la API (crear, aprobar, programar) está incluido en el plan Viral. Con tu plan, la API es de solo lectura.","planes_url":"https://getoriginl.com/dashboard/settings/billing"}}}}},"404":{"description":"No existe o no es de tu cuenta","content":{"application/json":{"example":{"error":{"code":"no_encontrado","message":"No se ha encontrado ese perfil (o no es de tu cuenta)."}}}}},"422":{"description":"Petición no válida","content":{"application/json":{"example":{"error":{"code":"peticion_no_valida","message":"La petición no es válida: revisa los campos.","campos":[{"campo":"n","motivo":"Input should be less than or equal to 10"}]}}}}},"429":{"description":"Límite de peticiones superado (mira Retry-After)","content":{"application/json":{"example":{"error":{"code":"demasiadas_peticiones","message":"Has hecho demasiadas peticiones seguidas. Espera un momento y vuelve a intentarlo."}}}}}}}},"/v1/variantes/{variante_id}/descartar":{"post":{"tags":["Variantes"],"summary":"Descartar una variante","description":"Alcance: escritura.","operationId":"post_descartar_v1_variantes__variante_id__descartar_post","parameters":[{"name":"variante_id","in":"path","required":true,"schema":{"type":"string","title":"Variante Id"}},{"name":"Idempotency-Key","in":"header","required":false,"description":"Opcional. La misma clave y la misma petición en 24 h devuelven la misma respuesta.","schema":{"type":"string","maxLength":255},"example":"4f7d2c1a-9b8e-4c3d-a2b1-0e9f8d7c6b5a"}],"responses":{"200":{"description":"Correcto","content":{"application/json":{"schema":{},"example":{"id":"0b6c3f2e-8a1d-4c5e-9f7a-2b3c4d5e6f70","base_id":"7d9e1a2b-3c4d-4e5f-8a6b-9c0d1e2f3a4b","perfil_id":"5a6b7c8d-9e0f-4a1b-8c2d-3e4f5a6b7c8d","vista_previa_url":"https://cdn.getoriginl.com/v/0b6c3f2e.mp4","portada_url":"https://cdn.getoriginl.com/p/0b6c3f2e.jpg","descarga_url":null,"cambios":["Gancho nuevo en los 2 primeros segundos","Fondo distinto"],"caption":"Esto no te lo cuentan...","calidad":86.5,"diferencia":0.41,"prioridad":1,"estado":"descartada","programada_para":null,"publicada_en":null,"ig_media_id":null,"permalink":null,"motivo":null,"motivo_codigo":null,"metricas":null,"nombre":"Gancho nuevo en los 2 primeros segundos, Fondo distinto","origen":"piloto","red":"instagram"}}}},"401":{"description":"Falta la clave o no es válida","content":{"application/json":{"example":{"error":{"code":"clave_no_valida","message":"La clave de API no es válida o se ha revocado."}}}}},"403":{"description":"Plan sin API, alcance insuficiente o rol sin permiso","content":{"application/json":{"example":{"error":{"code":"plan_sin_api","message":"Hacer cambios por la API (crear, aprobar, programar) está incluido en el plan Viral. Con tu plan, la API es de solo lectura.","planes_url":"https://getoriginl.com/dashboard/settings/billing"}}}}},"404":{"description":"No existe o no es de tu cuenta","content":{"application/json":{"example":{"error":{"code":"no_encontrado","message":"No se ha encontrado ese perfil (o no es de tu cuenta)."}}}}},"422":{"description":"Petición no válida","content":{"application/json":{"example":{"error":{"code":"peticion_no_valida","message":"La petición no es válida: revisa los campos.","campos":[{"campo":"n","motivo":"Input should be less than or equal to 10"}]}}}}},"429":{"description":"Límite de peticiones superado (mira Retry-After)","content":{"application/json":{"example":{"error":{"code":"demasiadas_peticiones","message":"Has hecho demasiadas peticiones seguidas. Espera un momento y vuelve a intentarlo."}}}}}}}},"/v1/calendario":{"get":{"tags":["Calendario"],"summary":"Calendario","description":"Todo lo programado y publicado, venga de donde venga, con su `origen` (piloto, ganchos o ia). Por defecto, de hace 7 días a 35 días después; como mucho 62 días.","operationId":"get_calendario_v1_calendario_get","parameters":[{"name":"desde","in":"query","required":false,"schema":{"anyOf":[{"type":"string","maxLength":40},{"type":"null"}],"title":"Desde"}},{"name":"hasta","in":"query","required":false,"schema":{"anyOf":[{"type":"string","maxLength":40},{"type":"null"}],"title":"Hasta"}},{"name":"perfil_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","maxLength":64},{"type":"null"}],"title":"Perfil Id"}}],"responses":{"200":{"description":"Correcto","content":{"application/json":{"schema":{},"example":{"desde":"2026-10-20T00:00:00+00:00","hasta":"2026-11-24T00:00:00+00:00","data":[{"variante_id":"0b6c3f2e-8a1d-4c5e-9f7a-2b3c4d5e6f70","perfil_id":"5a6b7c8d-9e0f-4a1b-8c2d-3e4f5a6b7c8d","perfil":"Luna","estado":"programada","cuando":"2026-10-29T19:10:00+00:00","origen":"piloto","ligera":false,"red":"instagram"}]}}}},"401":{"description":"Falta la clave o no es válida","content":{"application/json":{"example":{"error":{"code":"clave_no_valida","message":"La clave de API no es válida o se ha revocado."}}}}},"403":{"description":"Plan sin API, alcance insuficiente o rol sin permiso","content":{"application/json":{"example":{"error":{"code":"plan_sin_api","message":"Hacer cambios por la API (crear, aprobar, programar) está incluido en el plan Viral. Con tu plan, la API es de solo lectura.","planes_url":"https://getoriginl.com/dashboard/settings/billing"}}}}},"404":{"description":"No existe o no es de tu cuenta","content":{"application/json":{"example":{"error":{"code":"no_encontrado","message":"No se ha encontrado ese perfil (o no es de tu cuenta)."}}}}},"422":{"description":"Petición no válida","content":{"application/json":{"example":{"error":{"code":"peticion_no_valida","message":"La petición no es válida: revisa los campos.","campos":[{"campo":"n","motivo":"Input should be less than or equal to 10"}]}}}}},"429":{"description":"Límite de peticiones superado (mira Retry-After)","content":{"application/json":{"example":{"error":{"code":"demasiadas_peticiones","message":"Has hecho demasiadas peticiones seguidas. Espera un momento y vuelve a intentarlo."}}}}}}}},"/v1/calendario/{variante_id}/hueco":{"get":{"tags":["Calendario"],"summary":"¿Vale esa hora?","description":"Las reglas que rompería y el hueco válido más cercano, sin mover nada.","operationId":"get_hueco_v1_calendario__variante_id__hueco_get","parameters":[{"name":"variante_id","in":"path","required":true,"schema":{"type":"string","title":"Variante Id"}},{"name":"cuando","in":"query","required":true,"schema":{"type":"string","maxLength":40,"title":"Cuando"}},{"name":"idioma","in":"query","required":false,"schema":{"anyOf":[{"enum":["es","en"],"type":"string"},{"type":"null"}],"title":"Idioma"}}],"responses":{"200":{"description":"Correcto","content":{"application/json":{"schema":{},"example":{"vale":false,"reglas":[{"codigo":"misma_base","mensaje":"Hay otra variante del mismo vídeo a menos de 72 horas.","mensajes":{"es":"Hay otra variante del mismo vídeo a menos de 72 horas.","en":"There is another variant of the same video less than 72 hours away."}}],"propuesta":"2026-11-05T17:30:00+00:00"}}}},"401":{"description":"Falta la clave o no es válida","content":{"application/json":{"example":{"error":{"code":"clave_no_valida","message":"La clave de API no es válida o se ha revocado."}}}}},"403":{"description":"Plan sin API, alcance insuficiente o rol sin permiso","content":{"application/json":{"example":{"error":{"code":"plan_sin_api","message":"Hacer cambios por la API (crear, aprobar, programar) está incluido en el plan Viral. Con tu plan, la API es de solo lectura.","planes_url":"https://getoriginl.com/dashboard/settings/billing"}}}}},"404":{"description":"No existe o no es de tu cuenta","content":{"application/json":{"example":{"error":{"code":"no_encontrado","message":"No se ha encontrado ese perfil (o no es de tu cuenta)."}}}}},"422":{"description":"Petición no válida","content":{"application/json":{"example":{"error":{"code":"peticion_no_valida","message":"La petición no es válida: revisa los campos.","campos":[{"campo":"n","motivo":"Input should be less than or equal to 10"}]}}}}},"429":{"description":"Límite de peticiones superado (mira Retry-After)","content":{"application/json":{"example":{"error":{"code":"demasiadas_peticiones","message":"Has hecho demasiadas peticiones seguidas. Espera un momento y vuelve a intentarlo."}}}}}}}},"/v1/calendario/{variante_id}/programar":{"post":{"tags":["Calendario"],"summary":"Programar o mover una variante","description":"Con las reglas del calendario: misma base a menos de 72 h, variante ligera antes de 30 días, cupo del día, franja de 10:00 a 22:30, días del piloto y nada en el pasado. Si rompe alguna, 409 `regla` con `reglas` y `propuesta` (el hueco válido más cercano). Alcance: escritura.","operationId":"post_programar_v1_calendario__variante_id__programar_post","parameters":[{"name":"variante_id","in":"path","required":true,"schema":{"type":"string","title":"Variante Id"}},{"name":"idioma","in":"query","required":false,"schema":{"anyOf":[{"enum":["es","en"],"type":"string"},{"type":"null"}],"title":"Idioma"}},{"name":"Idempotency-Key","in":"header","required":false,"description":"Opcional. La misma clave y la misma petición en 24 h devuelven la misma respuesta.","schema":{"type":"string","maxLength":255},"example":"4f7d2c1a-9b8e-4c3d-a2b1-0e9f8d7c6b5a"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProgramarIn"}}}},"responses":{"200":{"description":"Correcto","content":{"application/json":{"schema":{},"example":{"id":"0b6c3f2e-8a1d-4c5e-9f7a-2b3c4d5e6f70","base_id":"7d9e1a2b-3c4d-4e5f-8a6b-9c0d1e2f3a4b","perfil_id":"5a6b7c8d-9e0f-4a1b-8c2d-3e4f5a6b7c8d","vista_previa_url":"https://cdn.getoriginl.com/v/0b6c3f2e.mp4","portada_url":"https://cdn.getoriginl.com/p/0b6c3f2e.jpg","descarga_url":null,"cambios":["Gancho nuevo en los 2 primeros segundos","Fondo distinto"],"caption":"Esto no te lo cuentan...","calidad":86.5,"diferencia":0.41,"prioridad":1,"estado":"programada","programada_para":"2026-11-03T17:30:00+00:00","publicada_en":null,"ig_media_id":null,"permalink":null,"motivo":null,"motivo_codigo":null,"metricas":null,"nombre":"Gancho nuevo en los 2 primeros segundos, Fondo distinto","origen":"piloto","red":"instagram"}}}},"409":{"description":"Rompe una regla del calendario","content":{"application/json":{"example":{"error":{"code":"regla","message":"Hay otra variante del mismo vídeo a menos de 72 horas.","reglas":[{"codigo":"misma_base","mensaje":"Hay otra variante del mismo vídeo a menos de 72 horas."}],"propuesta":"2026-11-05T17:30:00+00:00"}}}}},"401":{"description":"Falta la clave o no es válida","content":{"application/json":{"example":{"error":{"code":"clave_no_valida","message":"La clave de API no es válida o se ha revocado."}}}}},"403":{"description":"Plan sin API, alcance insuficiente o rol sin permiso","content":{"application/json":{"example":{"error":{"code":"plan_sin_api","message":"Hacer cambios por la API (crear, aprobar, programar) está incluido en el plan Viral. Con tu plan, la API es de solo lectura.","planes_url":"https://getoriginl.com/dashboard/settings/billing"}}}}},"404":{"description":"No existe o no es de tu cuenta","content":{"application/json":{"example":{"error":{"code":"no_encontrado","message":"No se ha encontrado ese perfil (o no es de tu cuenta)."}}}}},"422":{"description":"Petición no válida","content":{"application/json":{"example":{"error":{"code":"peticion_no_valida","message":"La petición no es válida: revisa los campos.","campos":[{"campo":"n","motivo":"Input should be less than or equal to 10"}]}}}}},"429":{"description":"Límite de peticiones superado (mira Retry-After)","content":{"application/json":{"example":{"error":{"code":"demasiadas_peticiones","message":"Has hecho demasiadas peticiones seguidas. Espera un momento y vuelve a intentarlo."}}}}}}}},"/v1/perfiles/{perfil_id}/resultados":{"get":{"tags":["Resultados"],"summary":"Resultados y métricas","description":"Por mes (el actual primero): publicados, cuántos tienen ya la métrica de 72 h y la media de vistas a 72 h; la variación frente al mes anterior y la mejor variante del periodo. Las métricas de cada variante (`metricas`) están en `GET /v1/variantes`.","operationId":"get_resultados_v1_perfiles__perfil_id__resultados_get","parameters":[{"name":"perfil_id","in":"path","required":true,"schema":{"type":"string","title":"Perfil Id"}},{"name":"meses","in":"query","required":false,"schema":{"type":"integer","maximum":12,"minimum":1,"default":2,"title":"Meses"}}],"responses":{"200":{"description":"Correcto","content":{"application/json":{"schema":{},"example":{"perfil_id":"5a6b7c8d-9e0f-4a1b-8c2d-3e4f5a6b7c8d","model_id":"5a6b7c8d-9e0f-4a1b-8c2d-3e4f5a6b7c8d","meses":[{"mes":"2026-10","publicados":46,"con_metricas":39,"vistas_medias_72h":4310.5},{"mes":"2026-09","publicados":41,"con_metricas":41,"vistas_medias_72h":3022.0}],"variacion_pct":42.6,"mejor_variante":{"variante_id":"0b6c3f2e-8a1d-4c5e-9f7a-2b3c4d5e6f70","base_id":"7d9e1a2b-3c4d-4e5f-8a6b-9c0d1e2f3a4b","nombre":"Gancho nuevo en los 2 primeros segundos","portada_url":"https://cdn.getoriginl.com/p/0b6c3f2e.jpg","permalink":"https://www.instagram.com/reel/DA1bC23dEfG/","vistas_72h":16020}}}}},"401":{"description":"Falta la clave o no es válida","content":{"application/json":{"example":{"error":{"code":"clave_no_valida","message":"La clave de API no es válida o se ha revocado."}}}}},"403":{"description":"Plan sin API, alcance insuficiente o rol sin permiso","content":{"application/json":{"example":{"error":{"code":"plan_sin_api","message":"Hacer cambios por la API (crear, aprobar, programar) está incluido en el plan Viral. Con tu plan, la API es de solo lectura.","planes_url":"https://getoriginl.com/dashboard/settings/billing"}}}}},"404":{"description":"No existe o no es de tu cuenta","content":{"application/json":{"example":{"error":{"code":"no_encontrado","message":"No se ha encontrado ese perfil (o no es de tu cuenta)."}}}}},"422":{"description":"Petición no válida","content":{"application/json":{"example":{"error":{"code":"peticion_no_valida","message":"La petición no es válida: revisa los campos.","campos":[{"campo":"n","motivo":"Input should be less than or equal to 10"}]}}}}},"429":{"description":"Límite de peticiones superado (mira Retry-After)","content":{"application/json":{"example":{"error":{"code":"demasiadas_peticiones","message":"Has hecho demasiadas peticiones seguidas. Espera un momento y vuelve a intentarlo."}}}}}}}},"/v1/ideas":{"get":{"tags":["Radar"],"summary":"Ideas del Radar","description":"Vídeos que se están haciendo virales en tu nicho, en otras cuentas, con la idea para grabar (`idea.formato`, `idea.gancho`, `idea.por_que_funciona`). Nunca se republican. Growth y Viral.","operationId":"get_ideas_v1_ideas_get","parameters":[{"name":"solo_top","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Solo Top"}},{"name":"orden","in":"query","required":false,"schema":{"enum":["multiplo","recientes"],"type":"string","default":"multiplo","title":"Orden"}},{"name":"perfil_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","maxLength":64},{"type":"null"}],"title":"Perfil Id"}},{"name":"limite","in":"query","required":false,"schema":{"anyOf":[{"type":"integer","maximum":100,"minimum":1},{"type":"null"}],"title":"Limite"}},{"name":"cursor","in":"query","required":false,"schema":{"anyOf":[{"type":"string","maxLength":200},{"type":"null"}],"title":"Cursor"}}],"responses":{"200":{"description":"Correcto","content":{"application/json":{"schema":{},"example":{"disponible":true,"motivo":null,"data":[{"id":"d41f9c3e-2b7a-4e8d-9c1f-6a5b4c3d2e1f","cuenta_vigilada_id":"c0ffee00-1a2b-4c3d-8e9f-0a1b2c3d4e5f","plataforma":"instagram","codigo":"DB7kL90mNoP","url":"https://www.instagram.com/reel/DB7kL90mNoP/","portada_url":null,"texto":"Lo que nadie te dice de...","autor":"otra_cuenta","publicada_en":"2026-10-25T12:30:00+00:00","vistas":912000,"me_gusta":40100,"comentarios":830,"compartidos":null,"duracion_s":null,"multiplo":11.3,"multiplo_estimado":false,"es_top":true,"guardada":false,"idea":{"formato":"reel","gancho":"Pregunta incómoda a cámara","por_que_funciona":"Abre una duda en el primer segundo y la cierra al final."}}],"has_more":true,"next_cursor":"eyJvIjogMjV9"}}}},"401":{"description":"Falta la clave o no es válida","content":{"application/json":{"example":{"error":{"code":"clave_no_valida","message":"La clave de API no es válida o se ha revocado."}}}}},"403":{"description":"Plan sin API, alcance insuficiente o rol sin permiso","content":{"application/json":{"example":{"error":{"code":"plan_sin_api","message":"Hacer cambios por la API (crear, aprobar, programar) está incluido en el plan Viral. Con tu plan, la API es de solo lectura.","planes_url":"https://getoriginl.com/dashboard/settings/billing"}}}}},"404":{"description":"No existe o no es de tu cuenta","content":{"application/json":{"example":{"error":{"code":"no_encontrado","message":"No se ha encontrado ese perfil (o no es de tu cuenta)."}}}}},"422":{"description":"Petición no válida","content":{"application/json":{"example":{"error":{"code":"peticion_no_valida","message":"La petición no es válida: revisa los campos.","campos":[{"campo":"n","motivo":"Input should be less than or equal to 10"}]}}}}},"429":{"description":"Límite de peticiones superado (mira Retry-After)","content":{"application/json":{"example":{"error":{"code":"demasiadas_peticiones","message":"Has hecho demasiadas peticiones seguidas. Espera un momento y vuelve a intentarlo."}}}}}}}}},"components":{"schemas":{"CotizarIaIn":{"properties":{"n":{"type":"integer","maximum":10.0,"minimum":1.0,"title":"N","description":"Variantes con IA que se pedirían.","default":2},"calidad":{"type":"string","enum":["natural","estandar","premium"],"title":"Calidad","default":"estandar"},"modelo":{"anyOf":[{"type":"string","maxLength":64},{"type":"null"}],"title":"Modelo","description":"Modelo de vídeo; sin él, el recomendado."}},"additionalProperties":false,"type":"object","title":"CotizarIaIn","examples":[{"calidad":"estandar","n":2}]},"CrearIaIn":{"properties":{"n":{"type":"integer","maximum":10.0,"minimum":1.0,"title":"N","default":2},"calidad":{"type":"string","enum":["natural","estandar","premium"],"title":"Calidad","default":"estandar"},"modelo":{"anyOf":[{"type":"string","maxLength":64},{"type":"null"}],"title":"Modelo"},"estilo_id":{"anyOf":[{"type":"string","maxLength":64},{"type":"null"}],"title":"Estilo Id","description":"Un estilo guardado en el panel."},"cambios":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Cambios","description":"Qué cambiar: gancho, escenario, ropa, objetos o regenerar."},"max_creditos_ia":{"type":"integer","maximum":2000000.0,"minimum":1.0,"title":"Max Creditos Ia","description":"Lo máximo que aceptas gastar (el «total» del modelo en la cotización). Si ahora cuesta más, 409 cotizacion_cambiada y no se gasta nada."},"repetir":{"type":"boolean","title":"Repetir","default":false}},"additionalProperties":false,"type":"object","required":["max_creditos_ia"],"title":"CrearIaIn","examples":[{"calidad":"estandar","cambios":{"escenario":{"preset":"playa"}},"max_creditos_ia":608,"n":2},{"estilo_id":"6f1c2a8e-3d4b-4f5a-9b7c-1e2d3c4b5a69","max_creditos_ia":304,"n":1}]},"ElegirVideoIn":{"properties":{"url":{"type":"string","maxLength":300,"title":"Url","description":"URL del reel de Instagram del propio perfil (de /ganadores)."}},"additionalProperties":false,"type":"object","required":["url"],"title":"ElegirVideoIn","examples":[{"url":"https://www.instagram.com/reel/C9xYz123AbC/"}]},"ProgramarIn":{"properties":{"programada_para":{"type":"string","maxLength":40,"title":"Programada Para","description":"Fecha y hora ISO 8601 con zona."}},"additionalProperties":false,"type":"object","required":["programada_para"],"title":"ProgramarIn","examples":[{"programada_para":"2026-11-03T18:30:00+01:00"}]},"ReedicionIn":{"properties":{"n":{"anyOf":[{"type":"string","const":"max"},{"type":"integer"}],"title":"N","description":"«max» (las que el detector deje pasar) o un número.","default":"max"},"repetir":{"type":"boolean","title":"Repetir","description":"Otra tanda de un vídeo ya listo o agotado: gasta una repetición del mes.","default":false}},"additionalProperties":false,"type":"object","title":"ReedicionIn","examples":[{"n":"max"},{"n":5,"repetir":true}]}},"securitySchemes":{"claveApi":{"type":"http","scheme":"bearer","bearerFormat":"ol_live_...","description":"Clave de API de Ajustes, API y MCP."}}},"security":[{"claveApi":[]}]}