{"openapi":"3.1.0","info":{"title":"Eviolite API","version":"1.0.0","description":"Genera vídeo e imágenes con IA. Autentícate con tu API key: `Authorization: Bearer evio_live_...` (créala en Mi cuenta). 1 crédito por generación."},"servers":[{"url":"https://eviolite.app"}],"security":[{"bearerAuth":[]}],"components":{"securitySchemes":{"bearerAuth":{"type":"http","scheme":"bearer","description":"Tu API key evio_live_..."}}},"paths":{"/api/v1/generate":{"post":{"summary":"Crear una generación (cuesta 1 crédito)","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["mode","prompt"],"properties":{"mode":{"type":"string","enum":["text","frames","ingredients","image"]},"prompt":{"type":"string","minLength":3,"maxLength":5000},"aspect":{"type":"string","enum":["portrait","landscape"],"default":"portrait"},"duration":{"type":"integer","description":"Segundos de vídeo. Sólo los que admita el modelo elegido."},"resolution":{"type":"string","description":"Vídeo: 480p/720p/1080p · Imagen: 1K/2K/4K. Según el modelo."},"quality":{"type":"string","description":"Modo de calidad en los modelos que lo cobran aparte (Kling, Seedance)."},"count":{"type":"integer","minimum":1,"maximum":4,"default":1},"upscale":{"type":"boolean","description":"1080p (solo vídeo)"},"model":{"type":"string","enum":["sg_veo","sg_veo_lite","sg_veo_max","sg_veo_2","sg_omni_flash","sg_grok_video","sg_kling_3","sg_kling_o1","sg_kling_26","sg_kling_25","sg_kling_21_5","sg_kling_21_10","sg_seedance","sg_seedance_mini","sg_seedance_omni","sg_nano_banana_2","sg_nano_banana_lite","sg_nano_banana_pro","sg_grok_image","sg_gpt_image_2","sg_meta_ai"],"description":"Id del modelo (mismo para vídeo e imagen). Por defecto sg_veo en vídeo y sg_nano_banana_2 en imagen. El coste en créditos depende del modelo."},"refs":{"type":"array","items":{"type":"string","format":"uri"},"description":"URLs http(s) públicas de referencia (image: ≤5 · ingredients: 1–3)"},"startImage":{"type":"string","format":"uri","description":"Solo mode=frames"},"endImage":{"type":"string","format":"uri","description":"Solo mode=frames (opcional)"}}}}}},"responses":{"202":{"description":"Generación en cola","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"status":{"type":"string"}}}}}},"400":{"description":"Datos inválidos o URL de referencia bloqueada"},"402":{"description":"Sin créditos"}}}},"/api/v1/upload":{"post":{"summary":"Subir una imagen y obtener su URL pública (para refs/startImage). No gasta créditos.","requestBody":{"required":true,"description":"Bytes de la imagen en crudo. Content-Type: image/png, image/jpeg o image/webp. Máx. 4 MB.","content":{"image/png":{"schema":{"type":"string","format":"binary"}},"image/jpeg":{"schema":{"type":"string","format":"binary"}},"image/webp":{"schema":{"type":"string","format":"binary"}}}},"responses":{"200":{"description":"Imagen guardada","content":{"application/json":{"schema":{"type":"object","properties":{"url":{"type":"string","format":"uri"},"bytes":{"type":"integer"}}}}}},"413":{"description":"Imagen mayor de 4 MB"},"415":{"description":"Tipo de imagen no admitido"}}}},"/api/v1/generations/{id}":{"get":{"summary":"Estado y resultado de una generación (sondea hasta status=completed)","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Estado actual","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"kind":{"type":"string","enum":["image","video"]},"status":{"type":"string","enum":["processing","completed","failed","refunded"]},"files":{"type":"array","items":{"type":"string"},"description":"Rutas a /api/v1/media/... (usa la misma API key)"},"error":{"type":["string","null"]},"createdAt":{"type":"string","format":"date-time"}}}}}},"404":{"description":"No existe"}}}},"/api/v1/media/{id}/{file}":{"get":{"summary":"Descargar un archivo generado (con tu API key)","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"file","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Bytes del archivo (image/png o video/mp4)"}}}},"/api/v1/credits":{"get":{"summary":"Saldo de créditos","responses":{"200":{"description":"Saldo","content":{"application/json":{"schema":{"type":"object","properties":{"credits":{"type":"integer"},"next_expiry":{"type":["string","null"],"format":"date-time"}}}}}}}}}}}