{"openapi":"3.1.0","info":{"title":"PixelAPI","description":"AI Image & Video Generation API","version":"1.0.0"},"paths":{"/v1/load":{"get":{"tags":["ETA"],"summary":"Load Overview","description":"Cluster-wide summary — every heavy endpoint's current state.","operationId":"load_overview_v1_load_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/v1/portrait/studio/eta":{"get":{"tags":["ETA"],"summary":"Eta Portrait Studio","operationId":"eta_portrait_studio_v1_portrait_studio_eta_get","parameters":[{"name":"canonical","in":"query","required":false,"schema":{"default":"/v1/portrait/studio","title":"Canonical"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/portrait/generate/eta":{"get":{"tags":["ETA"],"summary":"Eta Portrait Generate","operationId":"eta_portrait_generate_v1_portrait_generate_eta_get","parameters":[{"name":"canonical","in":"query","required":false,"schema":{"default":"/v1/portrait/studio","title":"Canonical"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/virtual-tryon/eta":{"get":{"tags":["ETA"],"summary":"Eta Virtual-Tryon","operationId":"eta_virtual_tryon_v1_virtual_tryon_eta_get","parameters":[{"name":"canonical","in":"query","required":false,"schema":{"default":"/v1/virtual-tryon","title":"Canonical"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/3d/generate/eta":{"get":{"tags":["ETA"],"summary":"Eta 3D Generate","operationId":"eta_3d_generate_v1_3d_generate_eta_get","parameters":[{"name":"canonical","in":"query","required":false,"schema":{"default":"/v1/3d/generate","title":"Canonical"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/threed/generate/eta":{"get":{"tags":["ETA"],"summary":"Eta Threed Generate","operationId":"eta_threed_generate_v1_threed_generate_eta_get","parameters":[{"name":"canonical","in":"query","required":false,"schema":{"default":"/v1/threed/generate","title":"Canonical"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/song/generate/eta":{"get":{"tags":["ETA"],"summary":"Eta Song Generate","operationId":"eta_song_generate_v1_song_generate_eta_get","parameters":[{"name":"canonical","in":"query","required":false,"schema":{"default":"/v1/song/generate","title":"Canonical"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/image/upscale/eta":{"get":{"tags":["ETA"],"summary":"Eta Image Upscale","operationId":"eta_image_upscale_v1_image_upscale_eta_get","parameters":[{"name":"canonical","in":"query","required":false,"schema":{"default":"/v1/image/upscale","title":"Canonical"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/image/generate/eta":{"get":{"tags":["ETA"],"summary":"Eta Image Generate","operationId":"eta_image_generate_v1_image_generate_eta_get","parameters":[{"name":"canonical","in":"query","required":false,"schema":{"default":"/v1/image/generate","title":"Canonical"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/image/firered-edit/eta":{"get":{"tags":["ETA"],"summary":"Eta Image Firered-Edit","operationId":"eta_image_firered_edit_v1_image_firered_edit_eta_get","parameters":[{"name":"canonical","in":"query","required":false,"schema":{"default":"/v1/image/firered-edit","title":"Canonical"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/image/remove-background/eta":{"get":{"tags":["ETA"],"summary":"Eta Image Remove-Background","operationId":"eta_image_remove_background_v1_image_remove_background_eta_get","parameters":[{"name":"canonical","in":"query","required":false,"schema":{"default":"/v1/image/remove-background","title":"Canonical"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/image/replace-background/eta":{"get":{"tags":["ETA"],"summary":"Eta Image Replace-Background","operationId":"eta_image_replace_background_v1_image_replace_background_eta_get","parameters":[{"name":"canonical","in":"query","required":false,"schema":{"default":"/v1/image/replace-background","title":"Canonical"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/image/remove-object/eta":{"get":{"tags":["ETA"],"summary":"Eta Image Remove-Object","operationId":"eta_image_remove_object_v1_image_remove_object_eta_get","parameters":[{"name":"canonical","in":"query","required":false,"schema":{"default":"/v1/image/remove-object","title":"Canonical"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/image/restore-face/eta":{"get":{"tags":["ETA"],"summary":"Eta Image Restore-Face","operationId":"eta_image_restore_face_v1_image_restore_face_eta_get","parameters":[{"name":"canonical","in":"query","required":false,"schema":{"default":"/v1/image/restore-face","title":"Canonical"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/photo-restore/eta":{"get":{"tags":["ETA"],"summary":"Eta Photo-Restore","operationId":"eta_photo_restore_v1_photo_restore_eta_get","parameters":[{"name":"canonical","in":"query","required":false,"schema":{"default":"/v1/photo-restore","title":"Canonical"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/interior-design/eta":{"get":{"tags":["ETA"],"summary":"Eta Interior-Design","operationId":"eta_interior_design_v1_interior_design_eta_get","parameters":[{"name":"canonical","in":"query","required":false,"schema":{"default":"/v1/interior-design","title":"Canonical"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/ad-creative/eta":{"get":{"tags":["ETA"],"summary":"Eta Ad-Creative","operationId":"eta_ad_creative_v1_ad_creative_eta_get","parameters":[{"name":"canonical","in":"query","required":false,"schema":{"default":"/v1/ad-creative","title":"Canonical"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/thumbnail/eta":{"get":{"tags":["ETA"],"summary":"Eta Thumbnail","operationId":"eta_thumbnail_v1_thumbnail_eta_get","parameters":[{"name":"canonical","in":"query","required":false,"schema":{"default":"/v1/thumbnail","title":"Canonical"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/pixelforge/eta":{"get":{"tags":["ETA"],"summary":"Eta Pixelforge","operationId":"eta_pixelforge_v1_pixelforge_eta_get","parameters":[{"name":"canonical","in":"query","required":false,"schema":{"default":"/v1/pixelforge","title":"Canonical"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/svdxt/eta":{"get":{"tags":["ETA"],"summary":"Eta Svdxt","operationId":"eta_svdxt_v1_svdxt_eta_get","parameters":[{"name":"canonical","in":"query","required":false,"schema":{"default":"/v1/svdxt","title":"Canonical"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/vastu/render-walkthrough/eta":{"get":{"tags":["ETA"],"summary":"Eta Vastu Render-Walkthrough","operationId":"eta_vastu_render_walkthrough_v1_vastu_render_walkthrough_eta_get","parameters":[{"name":"canonical","in":"query","required":false,"schema":{"default":"/v1/vastu/render-walkthrough","title":"Canonical"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/vastu/render-photoreal/eta":{"get":{"tags":["ETA"],"summary":"Eta Vastu Render-Photoreal","operationId":"eta_vastu_render_photoreal_v1_vastu_render_photoreal_eta_get","parameters":[{"name":"canonical","in":"query","required":false,"schema":{"default":"/v1/vastu/render-photoreal","title":"Canonical"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/{slug}/eta":{"get":{"tags":["ETA"],"summary":"Get Eta Unknown","operationId":"get_eta_unknown_v1__slug__eta_get","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string","title":"Slug"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/image/{generation_id}":{"get":{"tags":["Image"],"summary":"Get Generation","operationId":"get_generation_v1_image__generation_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"generation_id","in":"path","required":true,"schema":{"type":"string","title":"Generation Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenerationStatus"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/telemetry/event":{"post":{"tags":["telemetry"],"summary":"Submit Event","description":"Anonymous crash/error reporter. No auth required. Rate-limited per IP.\n\nThe app sends X-Install-Id (a random UUID generated on first launch and\nstored locally — not the user's API key, not their email, not anything\nthat points back to their identity). We hash it once more on the server\nside so the DB only ever sees an opaque 16-char digest used purely for\nduplicate-event collapsing.\n\nStrict privacy: we DO NOT log the client IP. CF-IPCountry (a 2-letter\ncode) is the only geographic signal kept, and only so the evolve loop\ncan detect 'this bug only hits Indian users' patterns.","operationId":"submit_event_v1_telemetry_event_post","parameters":[{"name":"x-install-id","in":"header","required":false,"schema":{"type":"string","default":"","title":"X-Install-Id"}},{"name":"cf-ipcountry","in":"header","required":false,"schema":{"type":"string","default":"","title":"Cf-Ipcountry"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TelemetryEvent"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/vastu/analyze":{"post":{"tags":["vastu"],"summary":"Vastu Analyze","description":"Score a floor plan against ~21 traditional Vastu rules.\n\nInput shape (all dimensions in feet, origin at SW corner):\n```\n{\n  \"facing\": \"north\",\n  \"plot\":   {\"width_ft\": 40, \"depth_ft\": 60},\n  \"rooms\":  [{\"name\":\"kitchen\",\"x\":30,\"y\":2,\"w\":8,\"h\":10}, ...],\n  \"main_entrance\": {\"x\":20,\"y\":58},\n  \"features\": {\"water_tank\":{\"x\":35,\"y\":55}, \"septic_tank\":{\"x\":5,\"y\":50}}\n}\n```\n\nReturns:\n```\n{\n  \"score\": 87.3,\n  \"bucket\": \"good\",\n  \"summary\": \"Mostly compliant; ...\",\n  \"rule_counts\": {\"pass\": 9, \"fail\": 1, \"warning\": 2, \"na\": 9},\n  \"findings\": [\n    {\"rule_id\":\"kitchen_se\",\"name\":\"Kitchen in Southeast (Agneya)\",\n     \"status\":\"pass\",\"severity\":\"high\",\"detail\":\"...\",\"suggestion\":\"\"},\n    ...\n  ]\n}\n```","operationId":"vastu_analyze_v1_vastu_analyze_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/VastuRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Vastu Analyze V1 Vastu Analyze Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/vastu/rules":{"get":{"tags":["vastu"],"summary":"List Rules","description":"List every rule the engine evaluates, with severity + a one-line\ndescription. Useful for client UIs that want to render a checklist\nbefore the user submits.","operationId":"list_rules_v1_vastu_rules_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response List Rules V1 Vastu Rules Get"}}}}}}},"/v1/vastu/photoreal-styles":{"get":{"tags":["vastu"],"summary":"List Photoreal Styles","description":"List the valid `style` enum values for /v1/vastu/render-photoreal.\n\nFrontend dropdown source-of-truth so unknown styles can't sneak in.","operationId":"list_photoreal_styles_v1_vastu_photoreal_styles_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response List Photoreal Styles V1 Vastu Photoreal Styles Get"}}}}}}},"/v1/vastu/export-dxf":{"post":{"tags":["vastu"],"summary":"Vastu Export Dxf","description":"Render the same layout as a downloadable DXF file (AutoCAD-compatible).\n\nThe DXF carries:\n  - Plot boundary, 3×3 Vastu zone grid (zones labelled with cardinal +\n    Sanskrit name), main entrance triangle, water/septic feature circles.\n  - Each room drawn as a closed polyline, colour-coded by compliance:\n    green=pass, yellow=warning, red=fail, white=not-evaluated.\n  - A compliance report (score, bucket, issues, recommendations) in the\n    right margin.\n  - Layers: PLOT, VASTU_ZONES, ROOMS_PASS/WARN/FAIL/NA, ROOM_LABELS,\n    ENTRANCE, FEATURES, REPORT.\n  - Units: decimal feet.\n\nOpens cleanly in AutoCAD, DraftSight, LibreCAD, BricsCAD, etc.","operationId":"vastu_export_dxf_v1_vastu_export_dxf_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/VastuRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/vastu/parse-dxf":{"post":{"tags":["vastu"],"summary":"Vastu Parse Dxf","description":"Parse a .dxf upload to a Vastu Layout JSON, then analyze it.\n\nFree during beta. Pure CPU work, deterministic.\nOptional `return_dxf=true` returns a ZIP with layout.json + analyze.json\n+ annotated.dxf.","operationId":"vastu_parse_dxf_v1_vastu_parse_dxf_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"return_dxf","in":"query","required":false,"schema":{"type":"boolean","description":"If true, return ZIP with annotated DXF.","default":false,"title":"Return Dxf"},"description":"If true, return ZIP with annotated DXF."}],"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_vastu_parse_dxf_v1_vastu_parse_dxf_post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/vastu/parse-dwg":{"post":{"tags":["vastu"],"summary":"Vastu Parse Dwg","description":"Parse a .dwg upload via LibreDWG dwg2dxf, then route through parse-dxf.","operationId":"vastu_parse_dwg_v1_vastu_parse_dwg_post","requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_vastu_parse_dwg_v1_vastu_parse_dwg_post"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/v1/vastu/parse-pdf":{"post":{"tags":["vastu"],"summary":"Vastu Parse Pdf","description":"Parse a vector / scanned PDF floor plan to Layout JSON.\n\nProxies to the llm5 sidecar (PyMuPDF + OpenCV + Tesseract).","operationId":"vastu_parse_pdf_v1_vastu_parse_pdf_post","requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_vastu_parse_pdf_v1_vastu_parse_pdf_post"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/v1/vastu/parse-image":{"post":{"tags":["vastu"],"summary":"Vastu Parse Image","description":"Parse a raster (PNG/JPG) floor plan via the CV+OCR sidecar.","operationId":"vastu_parse_image_v1_vastu_parse_image_post","requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_vastu_parse_image_v1_vastu_parse_image_post"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/v1/vastu/parse-ifc":{"post":{"tags":["vastu"],"summary":"Vastu Parse Ifc","description":"Parse an IFC building model into a Layout JSON for one floor.","operationId":"vastu_parse_ifc_v1_vastu_parse_ifc_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"floor_index","in":"query","required":false,"schema":{"type":"integer","maximum":20,"minimum":0,"description":"0=ground (lowest elevation)","default":0,"title":"Floor Index"},"description":"0=ground (lowest elevation)"}],"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_vastu_parse_ifc_v1_vastu_parse_ifc_post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/vastu/render-walkthrough":{"post":{"tags":["vastu"],"summary":"Vastu Render Walkthrough","description":"Queue a Blender walkthrough render of a Layout JSON.\n\nBody = Layout JSON (same shape as /v1/vastu/analyze).\nCost: 599 credits. Returns {job_id, status:'queued', eta_seconds:600}.\nPoll via GET /v1/vastu/render-walkthrough/{job_id}.","operationId":"vastu_render_walkthrough_v1_vastu_render_walkthrough_post","requestBody":{"content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Payload"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/v1/vastu/render-walkthrough/{job_id}":{"get":{"tags":["vastu"],"summary":"Vastu Render Status","description":"Status / output URL for a queued vastu render job.","operationId":"vastu_render_status_v1_vastu_render_walkthrough__job_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","title":"Job Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/vastu/render-photoreal":{"post":{"tags":["vastu"],"summary":"Vastu Render Photoreal","description":"Queue a photoreal Flux walkthrough render of a Layout JSON.\n\nBody = Layout JSON (same shape as /v1/vastu/analyze input).\nOptional top-level keys: `style` (default \"indian-traditional\"),\n`callback_url` (optional URL to POST results to when done).\n\nCost: 1999 credits. Returns 202 with {job_id, status:\"queued\",\neta_seconds:900}. Poll via GET /v1/vastu/render-photoreal/{job_id}.\n\nThe worker:\n  1. For each room, computes its Vastu zone, builds an Indian-residential\n     photoreal prompt, calls /v1/image/generate (flux-schnell), saves PNG.\n  2. Renders narration (edge-tts en-IN-NeerjaNeural) over the room images\n     with Ken Burns motion, ducked BGM, brand outro, CTA overlay.\n  3. Produces reel.mp4 (9:16, ~30-45s), yt.mp4 (16:9), grid.png (4x2).","operationId":"vastu_render_photoreal_v1_vastu_render_photoreal_post","requestBody":{"content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Payload"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/v1/vastu/render-photoreal/{job_id}":{"get":{"tags":["vastu"],"summary":"Vastu Render Photoreal Status","description":"Status / output URLs for a queued Vastu photoreal render job.","operationId":"vastu_render_photoreal_status_v1_vastu_render_photoreal__job_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","title":"Job Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/image/detect-faces":{"post":{"tags":["Image"],"summary":"Detect Faces","description":"Detect face bounding boxes in an uploaded image and return them with\nsmall (192x192 max) JPEG thumbnails base64-encoded for UI selection.","operationId":"detect_faces_v1_image_detect_faces_post","requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_detect_faces_v1_image_detect_faces_post"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/v1/video/{generation_id}/notify":{"post":{"tags":["Video"],"summary":"Set Video Notify Email","description":"Register an email to notify when video is ready.","operationId":"set_video_notify_email_v1_video__generation_id__notify_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"generation_id","in":"path","required":true,"schema":{"type":"string","title":"Generation Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/video/{generation_id}":{"get":{"tags":["Video"],"summary":"Get Video Generation","operationId":"get_video_generation_v1_video__generation_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"generation_id","in":"path","required":true,"schema":{"type":"string","title":"Generation Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/VideoStatus"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/video/void_removal":{"post":{"tags":["Video"],"summary":"Void Removal","operationId":"void_removal_v1_video_void_removal_post","requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_void_removal_v1_video_void_removal_post"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/v1/video/merge":{"post":{"tags":["Video"],"summary":"Video Merge","operationId":"video_merge_v1_video_merge_post","requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_video_merge_v1_video_merge_post"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/v1/svdxt/video/{video_id}":{"get":{"tags":["SVD-XT Video"],"summary":"Get Video","operationId":"get_video_v1_svdxt_video__video_id__get","parameters":[{"name":"video_id","in":"path","required":true,"schema":{"type":"string","title":"Video Id"}},{"name":"api_key","in":"query","required":true,"schema":{"type":"string","title":"Api Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/svdxt/status":{"get":{"tags":["SVD-XT Video"],"summary":"Status","operationId":"status_v1_svdxt_status_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/v1/image/upscale":{"post":{"tags":["Upscale"],"summary":"Upscale Image","description":"Upscale an image to 4x resolution using Real-ESRGAN.\n\nAccepts either:\n- File upload (multipart/form-data with 'image' field)\n- image_url (form field with URL to fetch)\n\nCost: 20 credits ($0.02)","operationId":"upscale_image_v1_image_upscale_post","requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_upscale_image_v1_image_upscale_post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/v1/image/upscale/{generation_id}":{"get":{"tags":["Upscale"],"summary":"Get Upscale Status","operationId":"get_upscale_status_v1_image_upscale__generation_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"generation_id","in":"path","required":true,"schema":{"type":"string","title":"Generation Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpscaleStatus"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/audio/denoise":{"post":{"tags":["Audio Denoise"],"summary":"Audio Denoise","description":"Remove background noise from speech audio via DeepFilterNet3.\n\nAccepts wav / mp3 / m4a / flac / ogg / webm (any sample rate).\nReturns mp3 (96kbps mono, 48kHz internal). Up to 10 min input.\n\nCost: 0.5 credits/sec (min 5). 60s clip = 30 credits = $0.03.","operationId":"audio_denoise_v1_audio_denoise_post","requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_audio_denoise_v1_audio_denoise_post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/v1/audio/denoise/{generation_id}":{"get":{"tags":["Audio Denoise"],"summary":"Audio Denoise Status","operationId":"audio_denoise_status_v1_audio_denoise__generation_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"generation_id","in":"path","required":true,"schema":{"type":"string","title":"Generation Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PolishStatus"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/video/upscale":{"post":{"tags":["Video Polish"],"summary":"Video Upscale","description":"Upscale a video 4x using Real-ESRGAN x4plus, frame-by-frame.\n\nAccepts mp4 / mov / webm / mkv. Inputs >1080p are pre-shrunk to 1080p\nso output stays ≤4K. Audio (if present) is preserved. Up to 5 min input.\n\nCost: 3 credits/sec (min 30). 60s clip = 180 credits = $0.18.","operationId":"video_upscale_v1_video_upscale_post","requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_video_upscale_v1_video_upscale_post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/v1/video/upscale/{generation_id}":{"get":{"tags":["Video Polish"],"summary":"Video Upscale Status","operationId":"video_upscale_status_v1_video_upscale__generation_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"generation_id","in":"path","required":true,"schema":{"type":"string","title":"Generation Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PolishStatus"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/video/denoise":{"post":{"tags":["Video Polish"],"summary":"Video Denoise","description":"Remove sensor noise / film grain from a video while preserving (and slightly enhancing) edges.\n\nUses Real-ESRGAN x4plus (which was trained on a degradation pipeline that\nincludes noise) then downscales back to original size. Output dims = input dims.\n\nCost: 2 credits/sec (min 20). 60s clip = 120 credits = $0.12.","operationId":"video_denoise_v1_video_denoise_post","requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_video_denoise_v1_video_denoise_post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/v1/video/denoise/{generation_id}":{"get":{"tags":["Video Polish"],"summary":"Video Denoise Status","operationId":"video_denoise_status_v1_video_denoise__generation_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"generation_id","in":"path","required":true,"schema":{"type":"string","title":"Generation Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PolishStatus"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/models":{"get":{"tags":["Models"],"summary":"List Models","operationId":"list_models_v1_models_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/v1/auth/signup":{"post":{"tags":["Account"],"summary":"Signup","operationId":"signup_v1_auth_signup_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SignupRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AuthResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/auth/login":{"post":{"tags":["Account"],"summary":"Login","operationId":"login_v1_auth_login_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LoginRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AuthResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/auth/google/mobile":{"post":{"tags":["Account"],"summary":"Google Mobile Auth","description":"Mobile Google Sign-In via verified ID token.\n\nMobile app obtains an ID token from Google Credential Manager (Android) or\nGoogleSignIn (iOS) using our Web Client ID as serverClientId. We verify\nagainst the same Web Client ID and reuse _finalize_google_login. Returns\napi_key for subsequent Bearer auth — same data as web flow but as JSON\ninstead of a redirect.","operationId":"google_mobile_auth_v1_auth_google_mobile_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GoogleMobileAuthRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GoogleMobileAuthResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/auth/google":{"get":{"tags":["Account"],"summary":"Google Login","description":"Redirect user to Google consent screen.\n\nstate: optional opaque value passed through to callback. Mobile clients\npass `mobile:<nonce>` so the callback stashes the api_key in Redis under\nthat nonce, then a polling endpoint hands it back to the app — no deep\nlink or Android OAuth client needed.","operationId":"google_login_v1_auth_google_get","parameters":[{"name":"state","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"State"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/auth/google/callback":{"get":{"tags":["Account"],"summary":"Google Callback","description":"Handle Google OAuth callback — creates or logs in user.","operationId":"google_callback_v1_auth_google_callback_get","parameters":[{"name":"code","in":"query","required":true,"schema":{"type":"string","title":"Code"}},{"name":"error","in":"query","required":false,"schema":{"type":"string","title":"Error"}},{"name":"state","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"State"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/auth/google/mobile_pickup":{"get":{"tags":["Account"],"summary":"Google Mobile Pickup","description":"Mobile app polls this with the nonce it generated before opening the\nCustom Tab. Returns 204 while pending, 200 + payload after callback fired.\nSingle-use (deleted after pickup), 5-minute TTL on the stash.","operationId":"google_mobile_pickup_v1_auth_google_mobile_pickup_get","parameters":[{"name":"nonce","in":"query","required":true,"schema":{"type":"string","minLength":16,"maxLength":128,"title":"Nonce"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/account":{"get":{"tags":["Account"],"summary":"Get Account","operationId":"get_account_v1_account_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]},"delete":{"tags":["Account"],"summary":"Delete Account","description":"GDPR erasure: permanently delete this account and all personal data.","operationId":"delete_account_v1_account_delete","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/v1/account/balance":{"get":{"tags":["Account"],"summary":"Get Balance","operationId":"get_balance_v1_account_balance_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BalanceResponse"}}}}},"security":[{"HTTPBearer":[]}]}},"/v1/billing/checkout-target":{"get":{"tags":["Account"],"summary":"Get Checkout Target","description":"Cross-channel checkout router. Asks: where should THIS user pay?\n\nRules (canonical per Om 2026-05-17):\n1. If the user already has an active subscription in some channel, the\n   answer is \"manage it where you bought it\" — never sell a second\n   subscription. Razorpay/PayPal → manage on web; Google Play → manage\n   in the Play Store; Apple → App Store.\n2. Otherwise, route by the calling platform's payment surface.\n   Mobile-Android → Google Play. Web → Razorpay (India) or PayPal\n   (everyone else), based on billing/signup country.\n\nClient must send `X-Client-Platform: mobile-android | mobile-ios | web`\nso we know where the request is coming from. Default is `web`.","operationId":"get_checkout_target_v1_billing_checkout_target_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/v1/account/usage":{"get":{"tags":["Account"],"summary":"Get Usage","operationId":"get_usage_v1_account_usage_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":50,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/admin/create-account":{"post":{"tags":["Account"],"summary":"Create Manual Account","description":"Create a manual email/password account (admin only, LAN restricted via Nginx).","operationId":"create_manual_account_v1_admin_create_account_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/v1/account/webhook":{"get":{"tags":["Account"],"summary":"Get Webhook Config","description":"Get current webhook configuration.","operationId":"get_webhook_config_v1_account_webhook_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]},"put":{"tags":["Account"],"summary":"Configure Webhook","description":"Set or remove a webhook URL. PixelAPI will POST job results here when complete.","operationId":"configure_webhook_v1_account_webhook_put","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebhookConfigRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/v1/account/webhook/deliveries":{"get":{"tags":["Account"],"summary":"Webhook Delivery History","description":"List recent webhook delivery attempts.","operationId":"webhook_delivery_history_v1_account_webhook_deliveries_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":50,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/account/analytics":{"get":{"tags":["Account"],"summary":"Get Usage Analytics","description":"Return usage analytics for the authenticated user.","operationId":"get_usage_analytics_v1_account_analytics_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"days","in":"query","required":false,"schema":{"type":"integer","default":30,"title":"Days"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/account/billing":{"get":{"tags":["Account"],"summary":"Get Billing Address","operationId":"get_billing_address_v1_account_billing_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]},"put":{"tags":["Account"],"summary":"Update Billing Address","operationId":"update_billing_address_v1_account_billing_put","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BillingAddressUpdate"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/v1/feedback":{"post":{"tags":["Feedback"],"summary":"Submit Feedback","operationId":"submit_feedback_v1_feedback_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FeedbackRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FeedbackResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/v1/feedback/my":{"get":{"tags":["Feedback"],"summary":"My Feedback","description":"List user's own feedback history.","operationId":"my_feedback_v1_feedback_my_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":50,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/feedback/churn":{"post":{"tags":["Feedback"],"summary":"Submit Churn Feedback","description":"Public endpoint — linked in cancellation emails. Token = HMAC of user_id.","operationId":"submit_churn_feedback_v1_feedback_churn_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChurnFeedbackRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/feedback/token/{user_id}":{"get":{"tags":["Feedback"],"summary":"Get Feedback Token","description":"Internal helper — generate a feedback token for a user (called by mailer).","operationId":"get_feedback_token_v1_feedback_token__user_id__get","parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"integer","title":"User Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/lensora/billing-diag":{"post":{"tags":["Lensora"],"summary":"Billing Diag","operationId":"billing_diag_v1_lensora_billing_diag_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/v1/reports/daily":{"get":{"tags":["Reports"],"summary":"Daily Report","description":"Generate daily analytics report.","operationId":"daily_report_v1_reports_daily_get","parameters":[{"name":"token","in":"query","required":true,"schema":{"type":"string","title":"Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/reports/daily/formatted":{"get":{"tags":["Reports"],"summary":"Daily Report Formatted","description":"Generate a formatted text report for Telegram/email.","operationId":"daily_report_formatted_v1_reports_daily_formatted_get","parameters":[{"name":"token","in":"query","required":true,"schema":{"type":"string","title":"Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/entitlement":{"get":{"tags":["entitlement","entitlement"],"summary":"Get Entitlement","description":"Union of all subscription sources — pro=True if ANY is active.","operationId":"get_entitlement_v1_entitlement_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EntitlementResponse"}}}}},"security":[{"HTTPBearer":[]}]}},"/v1/entitlement/google/verify":{"post":{"tags":["entitlement","entitlement"],"summary":"Verify Google","description":"Verify a Google Play purchase token and grant entitlement.\n\nReal verification (2026-05-10): calls Android Publisher API\npurchases.subscriptionsv2.get to confirm the token is genuine + active.\nExpiry is read from Google's response, NOT computed locally. On any\nverification failure we return non-2xx — we do NOT silently grant.","operationId":"verify_google_v1_entitlement_google_verify_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GoogleVerifyRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/v1/entitlement/apple/verify":{"post":{"tags":["entitlement","entitlement"],"summary":"Verify Apple","operationId":"verify_apple_v1_entitlement_apple_verify_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppleVerifyRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/v1/image/color-grade":{"post":{"tags":["Image"],"summary":"Color Grade Image","description":"Apply color grading to uploaded image.","operationId":"color_grade_image_v1_image_color_grade_post","requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_color_grade_image_v1_image_color_grade_post"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ColorGradeResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/v1/image/edit":{"post":{"tags":["image-edit"],"summary":"Edit image with AI instruction","description":"Edit an image using FireRed-Image-Edit 1.1.\n\nSubmit an image with a text instruction and receive an edited result.\nResults are available via GET /v1/jobs/{id}.\n\n**Examples:**\n- \"make the background a sunset beach scene\"\n- \"change the hair color to blonde\"\n- \"add dramatic studio lighting\"\n- \"make the person wear a red dress\"\n- \"restore the old photo to high quality\"\n\n**Cost:** 35 credits ($0.035) per image","operationId":"edit_image_v1_image_edit_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ImageEditRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ImageEditResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/v1/image/edit/{generation_id}":{"get":{"tags":["image-edit"],"summary":"Get Image Edit Status","description":"Poll status of an image-edit job. Mirrors GET /v1/image/{id}.","operationId":"get_image_edit_status_v1_image_edit__generation_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"generation_id","in":"path","required":true,"schema":{"type":"string","title":"Generation Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/payments/create-subscription":{"post":{"tags":["Payments"],"summary":"Create Subscription","description":"Create a PayPal subscription for the authenticated user.\n\n1. Validates the requested plan exists\n2. Looks up the PayPal plan ID from our database\n3. Creates a subscription via PayPal API\n4. Returns the approval URL for the user to complete payment on PayPal\n\nThe user's plan is NOT activated here — that happens via webhook\nwhen PayPal confirms the subscription is active.","operationId":"create_subscription_v1_payments_create_subscription_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateSubscriptionRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateSubscriptionResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/v1/payments/webhook":{"post":{"tags":["Payments"],"summary":"Paypal Webhook","description":"PayPal webhook handler — receives subscription lifecycle events.\n\nThis endpoint is called by PayPal's servers (not by the user).\nIt must be publicly accessible and registered in PayPal's developer dashboard.\n\nEvents we handle:\n- BILLING.SUBSCRIPTION.ACTIVATED: User approved subscription → activate plan + add credits\n- PAYMENT.SALE.COMPLETED: Recurring payment succeeded → refresh credits for new period\n- BILLING.SUBSCRIPTION.CANCELLED: User or merchant cancelled → downgrade at period end\n- BILLING.SUBSCRIPTION.SUSPENDED: Payment failed → suspend immediately\n- BILLING.SUBSCRIPTION.EXPIRED: Subscription reached end → downgrade to free\n\nSecurity:\n- Webhook signature is verified via PayPal's verification endpoint\n- Event IDs are stored to prevent duplicate processing (idempotency)\n- Payment amounts are verified against our plan prices","operationId":"paypal_webhook_v1_payments_webhook_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/v1/payments/generate-invoice":{"post":{"tags":["Payments"],"summary":"Generate Invoice Now","description":"Called from the billing address modal (client-side) right after the user fills their address.\nPicks the most recent payment without a zoho_invoice_id and generates the Zoho invoice.","operationId":"generate_invoice_now_v1_payments_generate_invoice_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/v1/payments/refund":{"post":{"tags":["Payments"],"summary":"Process Refund","description":"Unified refund endpoint:\n- Users can refund their own latest payment (user_id omitted)\n- Admins (api_key == admin key) can refund any user / payment\n\nActions:\n1. Fetch payment record\n2. Refund via PayPal or Razorpay API\n3. Void Zoho invoice\n4. Deduct credits from user\n5. Downgrade plan to free if subscription refund","operationId":"process_refund_v1_payments_refund_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RefundRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/v1/payments/subscription-status":{"get":{"tags":["Payments"],"summary":"Get Subscription Status","description":"Get the current user's subscription status.\n\nAlso checks if a cancelled subscription has expired and downgrades if needed.\nThis is a \"lazy check\" that supplements the webhook-based approach.","operationId":"get_subscription_status_v1_payments_subscription_status_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SubscriptionStatusResponse"}}}}},"security":[{"HTTPBearer":[]}]}},"/v1/payments/cancel-subscription":{"post":{"tags":["Payments"],"summary":"Cancel Subscription","description":"Cancel the current user's PayPal subscription.\n\n→ Calls PayPal API to cancel the subscription\n→ User keeps access until plan_expires_at\n→ Webhook will confirm the cancellation","operationId":"cancel_subscription_v1_payments_cancel_subscription_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CancelSubscriptionResponse"}}}}},"security":[{"HTTPBearer":[]}]}},"/v1/image/remove-background":{"post":{"tags":["editing"],"summary":"Remove Background","description":"Remove background from an image. Returns transparent PNG.\n\n- Upload image as multipart/form-data OR provide image_url\n- Cost: 15 credits ($0.015)\n- Model: BiRefNet (state-of-the-art, MIT license)\n- Typical processing: 1-3 seconds\n- Max file size: 20MB","operationId":"remove_background_v1_image_remove_background_post","requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_remove_background_v1_image_remove_background_post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/v1/image/replace-background":{"post":{"tags":["editing"],"summary":"Replace Background","description":"Remove background and replace with AI-generated scene or solid color.\n\nSmart detection:\n- Solid colors: \"white background\", \"#FF5733\", \"rgb(255,87,51)\" -> instant, no GPU needed\n- Gradients: \"gradient from blue to purple\" -> instant gradient fill\n- Transparent: \"transparent\" -> PNG with alpha channel\n- Complex scenes: \"product on marble table with studio lighting\" -> SDXL generation\n\n- Upload product image + describe desired background\n- Cost: 5 credits ($0.005) — same whether solid color or AI-generated\n- Pipeline: BiRefNet (bg removal) -> smart fill or SDXL inpainting\n- Typical processing: 2-20 seconds (instant for solid colors, longer for AI scenes)","operationId":"replace_background_v1_image_replace_background_post","requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_replace_background_v1_image_replace_background_post"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/v1/image/vfx-compose/prepare":{"post":{"tags":["editing"],"summary":"Vfx Compose Prepare","description":"Phase 1 of hybrid VFX compose. Heavy async work: matte foreground,\nresolve background (uploaded or generated), detect light direction,\nsuggest a starting bbox. Client polls GET /v1/image/{id}; when the row's\nstatus is 'completed', `params` contains everything the finalize step\nneeds ({matte_url, bg_url, suggested_bbox, light_angle_deg, ...}).","operationId":"vfx_compose_prepare_v1_image_vfx_compose_prepare_post","requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_vfx_compose_prepare_v1_image_vfx_compose_prepare_post"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/v1/image/vfx-compose/state/{prepare_id}":{"get":{"tags":["editing"],"summary":"Vfx Compose State","description":"Read the prepare row's params jsonb so the client can paint the canvas.\nReturns matte_url, bg_url, sizes, suggested_bbox, and detected light info.","operationId":"vfx_compose_state_v1_image_vfx_compose_state__prepare_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"prepare_id","in":"path","required":true,"schema":{"type":"string","title":"Prepare Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/image/vfx-compose/finalize":{"post":{"tags":["editing"],"summary":"Vfx Compose Finalize","description":"Phase 2: pure pixel-ops over the prepare result. No GPU, no credits.\nReads the prepare row, runs LAB tone-match + alpha feather + procedural\ncast shadow + alpha-composite, writes the final PNG, returns its URL.","operationId":"vfx_compose_finalize_v1_image_vfx_compose_finalize_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/VfxFinalizeRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/v1/image/restore-face":{"post":{"tags":["editing"],"summary":"Restore Face","description":"Restore and enhance faces in an image.\n\n- Upload image with faces to enhance\n- Cost: 3 credits ($0.003)\n- Model: CodeFormer\n- Typical processing: 2-5 seconds","operationId":"restore_face_v1_image_restore_face_post","requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_restore_face_v1_image_restore_face_post"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/v1/image/restore-face-v2":{"post":{"tags":["editing"],"summary":"Restore Face V2","description":"Restore and enhance faces in an image (v2 pipeline).\n\nPipeline: detect (RetinaFace) -> classify -> optional DDColor for B&W/sepia\n-> per-face PMRF (or passthrough if already sharp) -> ArcFace identity gate\nwith retry/accept-original failsafe -> paste back composite.\n\n- Restores damaged / blurry / B&W / sepia old photos\n- Colorizes B&W and sepia inputs automatically\n- Identity-preserving: ArcFace cosine-distance gate\n- Cost: 2 credits ($0.002)\n- Typical processing: 1-5 seconds (after warm)","operationId":"restore_face_v2_v1_image_restore_face_v2_post","requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_restore_face_v2_v1_image_restore_face_v2_post"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/v1/image/remove-object":{"post":{"tags":["editing"],"summary":"Remove Object","description":"Remove an object from an image using AI inpainting.\n\n- Upload image + describe what to remove (or provide mask)\n- Cost: 5 credits ($0.005)\n- Model: LaMa / SDXL inpainting\n- Typical processing: 5-15 seconds","operationId":"remove_object_v1_image_remove_object_post","requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_remove_object_v1_image_remove_object_post"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/v1/image/remove-text":{"post":{"tags":["editing"],"summary":"Remove Text","description":"Automatically detect and remove text/watermarks from an image.\n\n- Upload image as multipart/form-data\n- Cost: 37 credits\n- Pipeline: EasyOCR (text detection) -> LaMa (inpainting)\n- Typical processing: 5-15 seconds\n- Removes: watermarks, date stamps, captions, phone numbers, etc.","operationId":"remove_text_v1_image_remove_text_post","requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_remove_text_v1_image_remove_text_post"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/v1/audio/generate":{"post":{"tags":["audio"],"summary":"Generate Audio","operationId":"generate_audio_v1_audio_generate_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AudioGenerateRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/v1/audio/{generation_id}":{"get":{"tags":["audio"],"summary":"Get Audio Status","operationId":"get_audio_status_v1_audio__generation_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"generation_id","in":"path","required":true,"schema":{"type":"string","title":"Generation Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/song/generate":{"post":{"tags":["song"],"summary":"Generate Song","description":"Generate an original song from lyrics and style description using ACE-Step AI.\n\nSupports multiple languages. Returns audio URL when complete (~10-30 seconds).\n50 credits per song.","operationId":"generate_song_v1_song_generate_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SongGenerateRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/v1/song/download/{generation_id}":{"get":{"tags":["song"],"summary":"Download Song","description":"Download generated song audio file.","operationId":"download_song_v1_song_download__generation_id__get","parameters":[{"name":"generation_id","in":"path","required":true,"schema":{"type":"string","title":"Generation Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/song/{generation_id}":{"get":{"tags":["song"],"summary":"Get Song Status","description":"Check song generation status.","operationId":"get_song_status_v1_song__generation_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"generation_id","in":"path","required":true,"schema":{"type":"string","title":"Generation Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/audio/stems":{"post":{"tags":["audio"],"summary":"Stems Separate","description":"Separate an audio track into stems (vocals/drums/bass/other) using\nDemucs htdemucs. Returns a ZIP of WAV files.\n\n50 credits per call (~$0.05). 1/2 of LALAL.ai $0.10/song starter pricing.","operationId":"stems_separate_v1_audio_stems_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StemsRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/v1/audio/stems/download/{generation_id}":{"get":{"tags":["audio"],"summary":"Download Stems","description":"Download a stems ZIP.","operationId":"download_stems_v1_audio_stems_download__generation_id__get","parameters":[{"name":"generation_id","in":"path","required":true,"schema":{"type":"string","title":"Generation Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/image/inpaint":{"post":{"tags":["Image Transformation"],"summary":"Inpaint","description":"AI inpainting — fill masked regions with AI-generated content.\n\n- Much higher quality than simple object removal (LaMa)\n- Cost: 5 credits ($0.005)\n- Model: SDXL Inpainting","operationId":"inpaint_v1_image_inpaint_post","requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_inpaint_v1_image_inpaint_post"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/v1/image/controlnet":{"post":{"tags":["Image Transformation"],"summary":"Controlnet Generate","description":"Generate images following the structure of a reference image.\n\n- Auto-detects edges from your image\n- Great for: style transfer, architectural rendering, product variations\n- Cost: 5 credits ($0.005)\n- Model: ControlNet + SDXL","operationId":"controlnet_generate_v1_image_controlnet_post","requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_controlnet_generate_v1_image_controlnet_post"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/v1/razorpay/create-order":{"post":{"tags":["Razorpay Payments"],"summary":"Create Order","description":"Create a Razorpay order for plan purchase or credit top-up.","operationId":"create_order_v1_razorpay_create_order_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateOrderRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/v1/razorpay/verify-payment":{"post":{"tags":["Razorpay Payments"],"summary":"Verify Payment","description":"Verify Razorpay payment signature and activate plan/add credits.","operationId":"verify_payment_v1_razorpay_verify_payment_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/VerifyPaymentRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/v1/razorpay/webhook":{"post":{"tags":["Razorpay Payments"],"summary":"Razorpay Webhook","description":"Handle Razorpay webhook events as backup verification.","operationId":"razorpay_webhook_v1_razorpay_webhook_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/v1/razorpay/config":{"get":{"tags":["Razorpay Payments"],"summary":"Razorpay Config","description":"Return public Razorpay config for frontend (INR + USD).","operationId":"razorpay_config_v1_razorpay_config_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/v1/razorpay/create-order-usd":{"post":{"tags":["Razorpay Payments"],"summary":"Create Order Usd","description":"Create a Razorpay order in USD for international credit card payments.","operationId":"create_order_usd_v1_razorpay_create_order_usd_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateOrderUSDRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/v1/payu/pricing":{"get":{"tags":["PayU Payments"],"summary":"Get Payu Pricing","operationId":"get_payu_pricing_v1_payu_pricing_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/v1/payu/create-payment":{"post":{"tags":["PayU Payments"],"summary":"Create Payu Payment","operationId":"create_payu_payment_v1_payu_create_payment_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/v1/payu/success":{"post":{"tags":["PayU Payments"],"summary":"Payu Success","operationId":"payu_success_v1_payu_success_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/v1/payu/failure":{"post":{"tags":["PayU Payments"],"summary":"Payu Failure","operationId":"payu_failure_v1_payu_failure_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/v1/tunes/config":{"get":{"tags":["TunesAPI"],"summary":"Get Config","description":"Public pricing and configuration.","operationId":"get_config_v1_tunes_config_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/v1/tunes/train":{"post":{"tags":["TunesAPI"],"summary":"Submit Training","description":"Submit a LoRA training job. Upload images after this call.","operationId":"submit_training_v1_tunes_train_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TrainRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TrainResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/v1/tunes/{job_id}/upload":{"post":{"tags":["TunesAPI"],"summary":"Upload Training Images","description":"Upload training images for a job.","operationId":"upload_training_images_v1_tunes__job_id__upload_post","parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","title":"Job Id"}},{"name":"token","in":"query","required":true,"schema":{"type":"string","title":"Token"}}],"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_upload_training_images_v1_tunes__job_id__upload_post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/tunes/infer":{"post":{"tags":["TunesAPI"],"summary":"Submit Inference","description":"Generate images using a trained LoRA model.","operationId":"submit_inference_v1_tunes_infer_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/InferRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InferResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/v1/tunes/models":{"get":{"tags":["TunesAPI"],"summary":"List Models","description":"List all trained LoRA models for the current user.","operationId":"list_models_v1_tunes_models_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/TuneModel"},"type":"array","title":"Response List Models V1 Tunes Models Get"}}}}},"security":[{"HTTPBearer":[]}]}},"/v1/tunes/{job_id}":{"get":{"tags":["TunesAPI"],"summary":"Get Job Status","description":"Check status of a training or inference job.","operationId":"get_job_status_v1_tunes__job_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","title":"Job Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/JobStatusResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/tunes/{tune_id}":{"delete":{"tags":["TunesAPI"],"summary":"Delete Model","description":"Delete a trained LoRA model.","operationId":"delete_model_v1_tunes__tune_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"tune_id","in":"path","required":true,"schema":{"type":"string","title":"Tune Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/internal/upload":{"post":{"tags":["internal"],"summary":"Upload File","description":"Receive file from GPU worker, save to local storage.\n\nIT Rules 2021 Rule 3(3)(a)(ii): every AI-generated output carries embedded\nprovenance metadata (always). The visible \"AI · PixelAPI\" badge is applied\nonly when the job is full-regeneration AND the user is on a free plan;\npaid users + edit-class tools get an invisible LSB-stego marker instead.\nPolicy per Om msg 854 (2026-05-27). Classification + helper live in\ngateway/core/synthetic_label.py (EDIT_TYPES / REGEN_TYPES / PAID_PLANS).","operationId":"upload_file_internal_upload_post","parameters":[{"name":"x-internal-secret","in":"header","required":false,"schema":{"type":"string","default":"","title":"X-Internal-Secret"}}],"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_upload_file_internal_upload_post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/internal/job-status/{job_id}":{"get":{"tags":["internal"],"summary":"Internal Job Status","description":"Let workers verify job is still valid before processing (zombie protection).","operationId":"internal_job_status_internal_job_status__job_id__get","parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","title":"Job Id"}},{"name":"x-internal-secret","in":"header","required":false,"schema":{"type":"string","default":"","title":"X-Internal-Secret"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/internal/3d-result":{"post":{"tags":["internal"],"summary":"Report 3D Result","description":"Receive 3D job result from worker and update generations table.","operationId":"report_3d_result_internal_3d_result_post","parameters":[{"name":"x-internal-secret","in":"header","required":false,"schema":{"type":"string","default":"","title":"X-Internal-Secret"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/internal/apply-pricing":{"get":{"tags":["internal"],"summary":"Apply Pricing","description":"Om-authorized one-click apply of the weekly pricing-monitor suggestions.\nThe monitor email links here with the shared token; clicking executes the\npending price changes + reloads + restarts the gateway to propagate.","operationId":"apply_pricing_internal_apply_pricing_get","parameters":[{"name":"token","in":"query","required":false,"schema":{"type":"string","default":"","title":"Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/admin/vitals":{"get":{"tags":["Admin Vitals"],"summary":"Get Vitals","description":"Get hardware vitals from all GPU machines.","operationId":"get_vitals_v1_admin_vitals_get","parameters":[{"name":"token","in":"query","required":true,"schema":{"type":"string","title":"Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/api/mushika-status":{"get":{"summary":"Mushika Status","operationId":"mushika_status_admin_api_mushika_status_get","parameters":[{"name":"token","in":"query","required":false,"schema":{"type":"string","title":"Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/tools/proxy/{path}":{"get":{"tags":["tools-proxy"],"summary":"Tools Proxy Disabled","operationId":"tools_proxy_disabled_v1_tools_proxy__path__get","parameters":[{"name":"path","in":"path","required":true,"schema":{"type":"string","title":"Path"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["tools-proxy"],"summary":"Tools Proxy Disabled","operationId":"tools_proxy_disabled_v1_tools_proxy__path__get","parameters":[{"name":"path","in":"path","required":true,"schema":{"type":"string","title":"Path"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/virtual-tryon":{"post":{"tags":["Virtual Try-On"],"summary":"Virtual Tryon","operationId":"virtual_tryon_v1_virtual_tryon_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/VTONRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/v1/virtual-tryon/jobs/{job_id}":{"get":{"tags":["Virtual Try-On"],"summary":"Get Vton Job","operationId":"get_vton_job_v1_virtual_tryon_jobs__job_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","title":"Job Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/saree-tryon":{"post":{"tags":["Saree Try-On"],"summary":"Drape a saree onto a person (AI virtual try-on)","description":"Drape the saree in `garment` onto the person in `person`.\n\nPowered by FireRed / Qwen-Image-Edit multi-image. Best on clear front-facing\nfull-body photos. Returns a job id; poll GET /v1/image/{id} for the result.\nCost: 30 credits ($0.03 — exactly half the cheapest managed try-on rival).","operationId":"saree_tryon_v1_saree_tryon_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SareeRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/v1/video-tryon":{"post":{"tags":["Video Try-On"],"summary":"Video Try-On — wear a garment, then see yourself move in it","description":"Two-stage: dress the person in the garment, then animate the look into a\nshort video. Returns a job id; poll GET /v1/video-tryon/jobs/{id}. 200 credits.","operationId":"video_tryon_v1_video_tryon_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/VideoTryonRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/v1/support/chat":{"post":{"tags":["Support"],"summary":"AI support chat (visitor + customer aware)","operationId":"support_chat_v1_support_chat_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SupportRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/app/version":{"get":{"tags":["app"],"summary":"App Version","operationId":"app_version_v1_app_version_get","parameters":[{"name":"app","in":"query","required":false,"schema":{"type":"string","default":"lensora","title":"App"}},{"name":"platform","in":"query","required":false,"schema":{"type":"string","default":"android","title":"Platform"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/showroom":{"post":{"tags":["Showroom"],"summary":"Showroom — folded garment photo → showroom-ready try-on","description":"Upload ONE garment photo (even folded / on a shelf) and get a\ncomplete result: the garment is auto-reconstructed into a clean flat-lay, the\nbackground is removed, and it is shown worn — on an AI model by default, or on\nyour own uploaded photo or short video.\n\n**tryon_mode:** `ai-model` (default) | `own-photo` | `own-video`\n\n**Cost (charged once, refunded per failed step):**\n- ai-model / own-photo: 40 credits (+30 if the garment needs unfolding)\n- own-video: 202 credits (+30 if the garment needs unfolding)","operationId":"create_showroom_v1_showroom_post","requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_create_showroom_v1_showroom_post"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/v1/showroom/jobs/{job_id}":{"get":{"tags":["Showroom"],"summary":"Get Showroom Job","operationId":"get_showroom_job_v1_showroom_jobs__job_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","title":"Job Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/image/add-shadow":{"post":{"tags":["Image"],"summary":"Add Shadow","description":"Add realistic AI-generated shadow to product images.","operationId":"add_shadow_v1_image_add_shadow_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AIShadowRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AIShadowResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/v1/image/outpaint-from-upload":{"post":{"tags":["Image"],"summary":"Outpaint From Upload","description":"Mobile-friendly outpaint: take a multipart image upload, store it, and\ndelegate to the URL-based /outpaint endpoint. Lensora app uses this so users\ndon't have to host their photo at a public URL first.","operationId":"outpaint_from_upload_v1_image_outpaint_from_upload_post","requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_outpaint_from_upload_v1_image_outpaint_from_upload_post"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OutpaintResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/v1/image/outpaint":{"post":{"tags":["Image"],"summary":"Outpaint Image","description":"Extend image beyond its borders (outpainting).","operationId":"outpaint_image_v1_image_outpaint_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/OutpaintRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OutpaintResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/v1/image/batch":{"post":{"tags":["Image"],"summary":"Batch Process","description":"Process multiple images in a single API call.","operationId":"batch_process_v1_image_batch_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BatchRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BatchResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/v1/image/batch/{batch_id}":{"get":{"tags":["Image"],"summary":"Get Batch Status","description":"Get status of all jobs in a batch.","operationId":"get_batch_status_v1_image_batch__batch_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"batch_id","in":"path","required":true,"schema":{"type":"string","title":"Batch Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/image/product-photo-catalogue-clean":{"post":{"tags":["Image"],"summary":"Marketplace Product Photo Cleaner","description":"Clean seller catalogue photos into marketplace-ready product images.\n\nUse this endpoint for Product Photo across PixelAPI and Lensora. It preserves the product crop, rebuilds catalogue text/layout, and returns a queued generation ID.\n\n**Cost:** 39 credits ($0.039) per image.\n\n**Form fields:** image, art_no, size_text, footer, output_format.","operationId":"create_product_photo_catalogue_clean_v1_image_product_photo_catalogue_clean_post","requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_create_product_photo_catalogue_clean_v1_image_product_photo_catalogue_clean_post"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProductPhotoCatalogueResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/v1/image/caption":{"post":{"tags":["Image","image"],"summary":"Auto-generate captions, alt text, and SEO tags from product images","description":"Auto-generate product descriptions, SEO tags, and alt text using Vision-Language AI.\n\n**Modes:**\n- : caption + tags + alt text\n- : product description only\n- : SEO/search tags only\n- : accessibility alt text only\n\n**Cost:** 5 credits ($0.005) — Unique to PixelAPI, no mainstream competitor","operationId":"caption_image_v1_image_caption_post","requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_caption_image_v1_image_caption_post"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CaptionResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/v1/image/ad-creative":{"post":{"tags":["Ad Creative"],"summary":"AdForge AI — Generate Ad Creative","description":"Turn a product photo into a finished, ready-to-run ad creative — the product composited\ninto a premium AI-generated scene with a real grounding shadow, plus crisp, editable headline / CTA / badge\ntypography (real fonts, never AI-garbled text).\n\n**Pipeline:** background matte -> AI scene generated around your product (grounded) -> editorial color grade -> real HTML typography.\n**Ad formats:** meta_1080x1080, meta_1080x1920, google_1200x628, flipkart_1080x1080, meesho_1080x1080.\nUpload a product image (optional) + your headline/CTA/brand. Returns `queued`; poll GET /v1/image/{id}.","operationId":"generate_ad_creative_v1_image_ad_creative_post","requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_generate_ad_creative_v1_image_ad_creative_post"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdCreativeResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/v1/image/interior-design":{"post":{"tags":["Interior Design"],"summary":"HomeVision AI — Interior Design Visualization","description":"Generate photorealistic interior design visualizations from room photos.\n\n**Pipeline:** Room photo → SDXL style transfer → Photorealistic redesign\n\n**Room Types:** living_room, bedroom, kitchen, bathroom, office, dining_room\n\n**Styles:** modern_indian, vastu_compliant, minimalist, scandinavian, industrial, bohemian, traditional_indian, kerala_style, rajasthani_luxury, contemporary\n\n**Cost:** 6.7 credits (~$0.007) — 2x cheaper than InteriorAI / Spacely ($0.013)","operationId":"interior_design_v1_image_interior_design_post","requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_interior_design_v1_image_interior_design_post"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/v1/video/auto-reel":{"post":{"tags":["Reel Director"],"summary":"Reel Director — Turn any source video into a 60s narrative reel","description":"Reel Director picks the 4 most cinematic windows from your source\nvideo using a vision-language model (Qwen2.5-VL-7B), then renders a 60-second reel\nwith sentence-bounded cuts, voice EQ, sidechain-ducked BGM, and optional PixelAPI\nlogo bumper.\n\n**Story arc**: HOOK → WHAT IT DOES → HOW TO USE → CALL TO ACTION.\n\n**Cuts are sentence-bounded** (powered by whisper-large-v3) — no mid-word edits.\n\n**Inputs**: either a `source_url` (YouTube / direct mp4 URL), one multipart\n`source` upload, or ordered multipart `sources` uploads (max 10 clips,\n100 MB each, 500 MB combined).\n\n**Aspect**: `16:9` (default landscape), `9:16` (vertical for shorts/reels), `1:1`\n(square for IG feed).\n\n**BGM**: `calm` (default — sidechain-ducked under voice), `epic`, or `none`.\n\n**Cost**: 30 credits ≈ $0.03 — 2x cheaper than OpusClip (~$0.10/reel) and Vizard\n(~$0.05/2-min source).","operationId":"auto_reel_v1_video_auto_reel_post","requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_auto_reel_v1_video_auto_reel_post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/v1/video/auto-reel/{generation_id}":{"get":{"tags":["Reel Director"],"summary":"Reel Director — poll status","operationId":"auto_reel_status_v1_video_auto_reel__generation_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"generation_id","in":"path","required":true,"schema":{"type":"string","title":"Generation Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/video/auto-reel/{generation_id}/dl":{"get":{"tags":["Reel Director"],"summary":"Auto Reel Download Signed","description":"Signed, owner-scoped, time-limited download — works from a bare browser link\n(the Bearer-only /download 401'd web clicks). HMAC proves the link was issued for this\nowner+reel and is unexpired; no API key in the URL.","operationId":"auto_reel_download_signed_v1_video_auto_reel__generation_id__dl_get","parameters":[{"name":"generation_id","in":"path","required":true,"schema":{"type":"string","title":"Generation Id"}},{"name":"exp","in":"query","required":true,"schema":{"type":"integer","title":"Exp"}},{"name":"sig","in":"query","required":true,"schema":{"type":"string","title":"Sig"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/video/auto-reel/{generation_id}/download":{"get":{"tags":["Reel Director"],"summary":"Auto Reel Download","description":"Proxy the worker mp4 back through the gateway.","operationId":"auto_reel_download_v1_video_auto_reel__generation_id__download_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"generation_id","in":"path","required":true,"schema":{"type":"string","title":"Generation Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/vfx/edit-shot-exr/models":{"get":{"tags":["VFX"],"summary":"List V2V Models","description":"V2V model menu for the EXR tool (frontend was 404ing this -> showed raw shortcodes).","operationId":"list_v2v_models_v1_vfx_edit_shot_exr_models_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/v1/vfx/edit-shot-exr/init":{"post":{"tags":["VFX"],"summary":"Init Job","operationId":"init_job_v1_vfx_edit_shot_exr_init_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/InitRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InitResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/v1/vfx/edit-shot-exr/upload-frame":{"post":{"tags":["VFX"],"summary":"Upload Frame","description":"Stream-write one EXR frame into the job's input dir.","operationId":"upload_frame_v1_vfx_edit_shot_exr_upload_frame_post","parameters":[{"name":"x-job-id","in":"header","required":true,"schema":{"type":"string","title":"X-Job-Id"}},{"name":"x-frame-number","in":"header","required":true,"schema":{"type":"integer","title":"X-Frame-Number"}},{"name":"x-direct-upload","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Direct-Upload"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/vfx/edit-shot-exr/start":{"post":{"tags":["VFX"],"summary":"Start Job","operationId":"start_job_v1_vfx_edit_shot_exr_start_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StartRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/v1/vfx/edit-shot-exr/status":{"get":{"tags":["VFX"],"summary":"Status","operationId":"status_v1_vfx_edit_shot_exr_status_get","parameters":[{"name":"job_id","in":"query","required":true,"schema":{"type":"string","title":"Job Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/vfx/edit-shot-exr/approve-and-finalize":{"post":{"tags":["VFX"],"summary":"Approve And Finalize","operationId":"approve_and_finalize_v1_vfx_edit_shot_exr_approve_and_finalize_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApproveRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/v1/vfx/edit-shot-exr/download-matte":{"get":{"tags":["VFX"],"summary":"Download Matte","operationId":"download_matte_v1_vfx_edit_shot_exr_download_matte_get","parameters":[{"name":"job_id","in":"query","required":true,"schema":{"type":"string","title":"Job Id"}},{"name":"type","in":"query","required":false,"schema":{"type":"string","default":"rgba","title":"Type"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/vfx/edit-shot-exr/public-download/{token}":{"get":{"tags":["VFX"],"summary":"Public Download","operationId":"public_download_v1_vfx_edit_shot_exr_public_download__token__get","parameters":[{"name":"token","in":"path","required":true,"schema":{"type":"string","title":"Token"}},{"name":"type","in":"query","required":false,"schema":{"type":"string","default":"composited","title":"Type"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/vfx/edit-shot-exr/download":{"get":{"tags":["VFX"],"summary":"Download","operationId":"download_v1_vfx_edit_shot_exr_download_get","parameters":[{"name":"job_id","in":"query","required":true,"schema":{"type":"string","title":"Job Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/vfx/edit-shot-exr/preview":{"get":{"tags":["VFX"],"summary":"Preview","operationId":"preview_v1_vfx_edit_shot_exr_preview_get","parameters":[{"name":"job_id","in":"query","required":true,"schema":{"type":"string","title":"Job Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/vfx/edit-shot-exr/encode-mov":{"post":{"tags":["VFX"],"summary":"Encode Mov","operationId":"encode_mov_v1_vfx_edit_shot_exr_encode_mov_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MovRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/vfx/edit-shot-exr/mov-status":{"get":{"tags":["VFX"],"summary":"Mov Status","operationId":"mov_status_v1_vfx_edit_shot_exr_mov_status_get","parameters":[{"name":"job_id","in":"query","required":true,"schema":{"type":"string","title":"Job Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/vfx/edit-shot-exr/download-mov":{"get":{"tags":["VFX"],"summary":"Download Mov","operationId":"download_mov_v1_vfx_edit_shot_exr_download_mov_get","parameters":[{"name":"job_id","in":"query","required":true,"schema":{"type":"string","title":"Job Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/vfx/edit-shot-exr/my-jobs":{"get":{"tags":["VFX"],"summary":"My Jobs","description":"Let a user retrieve their own recent EXR shots (so a stuck/last process can be\nresumed or re-downloaded from the UI instead of being lost).","operationId":"my_jobs_v1_vfx_edit_shot_exr_my_jobs_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/v1/vfx/element/types":{"get":{"tags":["VFX"],"summary":"Types","operationId":"types_v1_vfx_element_types_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/v1/vfx/element/generate":{"post":{"tags":["VFX"],"summary":"Generate","operationId":"generate_v1_vfx_element_generate_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/v1/vfx/element/status":{"get":{"tags":["VFX"],"summary":"Status","operationId":"status_v1_vfx_element_status_get","parameters":[{"name":"job_id","in":"query","required":true,"schema":{"type":"string","title":"Job Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/vfx/element/preview":{"get":{"tags":["VFX"],"summary":"Preview","operationId":"preview_v1_vfx_element_preview_get","parameters":[{"name":"job_id","in":"query","required":true,"schema":{"type":"string","title":"Job Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/vfx/element/download":{"get":{"tags":["VFX"],"summary":"Download","operationId":"download_v1_vfx_element_download_get","parameters":[{"name":"job_id","in":"query","required":true,"schema":{"type":"string","title":"Job Id"}},{"name":"fmt","in":"query","required":false,"schema":{"type":"string","default":"exr","title":"Fmt"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/vfx/comp":{"post":{"tags":["VFX"],"summary":"Vfx Comp","operationId":"vfx_comp_v1_vfx_comp_post","requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_vfx_comp_v1_vfx_comp_post"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/v1/vfx/comp/status":{"get":{"tags":["VFX"],"summary":"Vfx Comp Status","operationId":"vfx_comp_status_v1_vfx_comp_status_get","parameters":[{"name":"job_id","in":"query","required":true,"schema":{"type":"string","title":"Job Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/vfx/comp/download":{"get":{"tags":["VFX"],"summary":"Vfx Comp Download","operationId":"vfx_comp_download_v1_vfx_comp_download_get","parameters":[{"name":"job_id","in":"query","required":true,"schema":{"type":"string","title":"Job Id"}},{"name":"fmt","in":"query","required":false,"schema":{"type":"string","default":"preview","title":"Fmt"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/3d/generate":{"post":{"tags":["3D Generation"],"summary":"Generate 3D","description":"Generate a 3D model from a single image. Costs 10 credits ($0.01).","operationId":"generate_3d_v1_3d_generate_post","requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_generate_3d_v1_3d_generate_post"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/v1/3d/status/{job_id}":{"get":{"tags":["3D Generation"],"summary":"Job Status","description":"Check 3D generation status by job ID.","operationId":"job_status_v1_3d_status__job_id__get","parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","title":"Job Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/3d/result/{job_id}":{"get":{"tags":["3D Generation"],"summary":"Get Result","description":"Get completed 3D generation result.","operationId":"get_result_v1_3d_result__job_id__get","parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","title":"Job Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/3d/pricing":{"get":{"tags":["3D Generation"],"summary":"Get Pricing","operationId":"get_pricing_v1_3d_pricing_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/v1/3d/text-generate":{"post":{"tags":["3D Generation"],"summary":"Text To 3D","description":"Generate a 3D model from a text prompt. Costs 15 credits ($0.015).\n\nPipeline: FLUX.1-schnell (10 steps) → TripoSR → GLB\nRuns on LLM3 (RTX 6000 Ada). Takes ~60-90s.","operationId":"text_to_3d_v1_3d_text_generate_post","requestBody":{"content":{"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/Body_text_to_3d_v1_3d_text_generate_post"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/v1/3d/text-status/{job_id}":{"get":{"tags":["3D Generation"],"summary":"Text3D Status","description":"Check text-to-3D job status.","operationId":"text3d_status_v1_3d_text_status__job_id__get","parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","title":"Job Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/3d/text-pricing":{"get":{"tags":["3D Generation"],"summary":"Text3D Pricing","operationId":"text3d_pricing_v1_3d_text_pricing_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/v1/3d/floorplan-generate":{"post":{"tags":["3D Generation"],"summary":"Generate Floorplan 3D","description":"Generate a 3D room layout from a 2D floorplan image. Costs 500 credits ($0.50).","operationId":"generate_floorplan_3d_v1_3d_floorplan_generate_post","requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_generate_floorplan_3d_v1_3d_floorplan_generate_post"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/v1/3d/scene-generate":{"post":{"tags":["3D Generation"],"summary":"Scene To 3D","description":"Generate a 3D model of an outdoor or complex scene. Costs 15 credits ($0.015).","operationId":"scene_to_3d_v1_3d_scene_generate_post","requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_scene_to_3d_v1_3d_scene_generate_post"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/v1/3d/scene-status/{job_id}":{"get":{"tags":["3D Generation"],"summary":"Scene Job Status","description":"Check scene-to-3D generation status by job ID.","operationId":"scene_job_status_v1_3d_scene_status__job_id__get","parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","title":"Job Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/3d/scene-pricing":{"get":{"tags":["3D Generation"],"summary":"Get Scene Pricing","operationId":"get_scene_pricing_v1_3d_scene_pricing_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/v1/studio/init":{"post":{"tags":["Lensora Studio"],"summary":"Studio Init","description":"Upload photo + return AI-detected object proposals.\n\nCost: 5 credits ($0.005). Returns up to N foreground object proposals\nwith bbox + label + category. The user picks one to feed /v1/studio/transform.","operationId":"studio_init_v1_studio_init_post","requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_studio_init_v1_studio_init_post"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/v1/studio/transform":{"post":{"tags":["Lensora Studio"],"summary":"Studio Transform","description":"Run the full Lensora pipeline. 75 credits. Returns job_id.\n\nPipeline: source + bbox → crop → remove-bg → optional replace-bg →\n3D-generate → turntable/cinematic/dolly render → final MP4.\n\nClient polls /v1/studio/result/{job_id} for progress + final output.","operationId":"studio_transform_v1_studio_transform_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TransformRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/v1/studio/result/{job_id}":{"get":{"tags":["Lensora Studio"],"summary":"Studio Result","operationId":"studio_result_v1_studio_result__job_id__get","parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","title":"Job Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/studio/pricing":{"get":{"tags":["Lensora Studio"],"summary":"Studio Pricing","operationId":"studio_pricing_v1_studio_pricing_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/v1/moderation/classify":{"post":{"tags":["Moderation"],"summary":"Classify Content","description":"Classify image(s) for NSFW/adult content.\n\nUses Falconsai ViT classifier — GPU-accelerated, <50ms per image on LLM3.\n\n**Pricing:** 0.5 credits per image ($0.0005, 2x cheaper than AWS Rekognition $0.001)\n\n**Request:**\n- Upload up to 10 image files, OR\n- Provide up to 10 comma-separated image URLs\n\n**Response:**\n- `label`: \"nsfw\" or \"safe\"\n- `nsfw_score`: probability (0.0–1.0)\n- `safe_score`: probability (0.0–1.0)\n- `confidence`: how confident the model is (max of nsfw_score, safe_score)\n\n**Threshold:** label=\"nsfw\" when nsfw_score > 0.5","operationId":"classify_content_v1_moderation_classify_post","requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_classify_content_v1_moderation_classify_post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ModerationResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/v1/moderation/classify/{moderation_id}":{"get":{"tags":["Moderation"],"summary":"Get Moderation Result","description":"Poll moderation result by ID.","operationId":"get_moderation_result_v1_moderation_classify__moderation_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"moderation_id","in":"path","required":true,"schema":{"type":"string","title":"Moderation Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Moderation Result V1 Moderation Classify  Moderation Id  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/portrait/studio":{"post":{"tags":["Portrait"],"summary":"Create Portrait","description":"Queue a portrait generation job. Returns generation_id to poll.\n\npulid_strength >= 1.8 engages identity-lock mode (post-process face-swap with\ninswapper_128) — guarantees the output face matches the input face.","operationId":"create_portrait_v1_portrait_studio_post","requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_create_portrait_v1_portrait_studio_post"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/v1/portrait/studio/{generation_id}":{"get":{"tags":["Portrait"],"summary":"Get Portrait Status","description":"Poll portrait generation status. Output URL is set when status='completed'.","operationId":"get_portrait_status_v1_portrait_studio__generation_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"generation_id","in":"path","required":true,"schema":{"type":"string","title":"Generation Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/portrait/styles":{"get":{"tags":["Portrait"],"summary":"List Portrait Styles","description":"List available portrait styles.","operationId":"list_portrait_styles_v1_portrait_styles_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/v1/photo-restore/generate":{"post":{"tags":["photo-restore"],"summary":"Generate Photo Restore","operationId":"generate_photo_restore_v1_photo_restore_generate_post","requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_generate_photo_restore_v1_photo_restore_generate_post"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PhotoRestoreAsyncResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/v1/photo-restore/{generation_id}":{"get":{"tags":["photo-restore"],"summary":"Get Photo Restore Status","operationId":"get_photo_restore_status_v1_photo_restore__generation_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"generation_id","in":"path","required":true,"schema":{"type":"string","title":"Generation Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/real-estate/stage":{"post":{"tags":["Real Estate"],"summary":"Virtual Staging for Room Photo","description":"Virtual Staging using SDXL + ControlNet-Canny with local Vastu/Indian designs.\nCosts 6.5 credits.","operationId":"stage_v1_real_estate_stage_post","requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_stage_v1_real_estate_stage_post"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/v1/real-estate/cleanup":{"post":{"tags":["Real Estate"],"summary":"Real Estate Photo Cleanup (Declutter, Sky Replace, Day-to-Dusk, Perspective Correct)","description":"Runs property photo cleaning. Costs 5 credits.","operationId":"cleanup_v1_real_estate_cleanup_post","requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_cleanup_v1_real_estate_cleanup_post"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/v1/real-estate/floorplan-render":{"post":{"tags":["Real Estate"],"summary":"Extrude 2D Floorplan layout to 3D GLB model","description":"Extrude 2D Floorplan layouts into interactive 3D spaces with styled furniture.\nCosts 500 credits.","operationId":"floorplan_render_v1_real_estate_floorplan_render_post","requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_floorplan_render_v1_real_estate_floorplan_render_post"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/v1/real-estate/whatsapp-deliver":{"post":{"tags":["Real Estate"],"summary":"Send completed generation output to Telegram as a simulated WhatsApp business delivery","description":"Simulates sending the completed visual/3D layout link to the buyer's phone via WhatsApp.\nDelivers a message webhook payload to `@lensorabot_bot` for developer validation.","operationId":"whatsapp_deliver_v1_real_estate_whatsapp_deliver_post","requestBody":{"content":{"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/Body_whatsapp_deliver_v1_real_estate_whatsapp_deliver_post"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/v1/multimodal/audio-to-image":{"post":{"tags":["Multimodal"],"summary":"Audio To Image","operationId":"audio_to_image_v1_multimodal_audio_to_image_post","requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_audio_to_image_v1_multimodal_audio_to_image_post"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/v1/multimodal/image-to-video":{"post":{"tags":["Multimodal"],"summary":"Image To Video","operationId":"image_to_video_v1_multimodal_image_to_video_post","requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_image_to_video_v1_multimodal_image_to_video_post"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/v1/multimodal/refine-prompt":{"post":{"tags":["Multimodal"],"summary":"Refine Prompt","operationId":"refine_prompt_v1_multimodal_refine_prompt_post","requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_refine_prompt_v1_multimodal_refine_prompt_post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/v1/multimodal/describe-image":{"post":{"tags":["Multimodal"],"summary":"Describe Image","operationId":"describe_image_v1_multimodal_describe_image_post","requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_describe_image_v1_multimodal_describe_image_post"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/v1/multimodal/describe-audio":{"post":{"tags":["Multimodal"],"summary":"Describe Audio","operationId":"describe_audio_v1_multimodal_describe_audio_post","requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_describe_audio_v1_multimodal_describe_audio_post"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/v1/multimodal/{generation_id}":{"get":{"tags":["Multimodal"],"summary":"Get Multimodal Status","operationId":"get_multimodal_status_v1_multimodal__generation_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"generation_id","in":"path","required":true,"schema":{"type":"string","title":"Generation Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MultimodalStatus"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/tts/generate":{"post":{"tags":["tts"],"summary":"Generate Tts","operationId":"generate_tts_v1_tts_generate_post","requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_generate_tts_v1_tts_generate_post"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/v1/tts/languages":{"get":{"tags":["tts"],"summary":"List Languages","operationId":"list_languages_v1_tts_languages_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/v1/tts/status/{generation_id}":{"get":{"tags":["tts"],"summary":"Get Tts Status","operationId":"get_tts_status_v1_tts_status__generation_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"generation_id","in":"path","required":true,"schema":{"type":"string","title":"Generation Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/pixelforge/styles":{"get":{"tags":["PixelForge — Game Assets"],"summary":"Get Styles","operationId":"get_styles_v1_pixelforge_styles_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/v1/pixelforge/generate":{"post":{"tags":["PixelForge — Game Assets"],"summary":"Generate Sprite","operationId":"generate_sprite_v1_pixelforge_generate_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PixelForgeGenerateRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/v1/pixelforge/sketch":{"post":{"tags":["PixelForge — Game Assets"],"summary":"Sketch To Pixel","description":"Sketch-controlled pixel art. Customer supplies a line drawing (URL),\nControlNet-Scribble + pixel-art-xl LoRA generate a polished pixel-art\nrendering that follows the sketch's composition. This is the high-quality\npath for single-character / specific-pose sprites — the LoRA's spritesheet\nbias is bypassed because the sketch dictates the layout.","operationId":"sketch_to_pixel_v1_pixelforge_sketch_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PixelForgeSketchRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/v1/pixelforge/{generation_id}":{"get":{"tags":["PixelForge — Game Assets"],"summary":"Get Status","operationId":"get_status_v1_pixelforge__generation_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"generation_id","in":"path","required":true,"schema":{"type":"string","title":"Generation Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/portal":{"get":{"tags":["Admin"],"summary":"Dashboard Page","operationId":"dashboard_page_admin_portal_get","parameters":[{"name":"token","in":"query","required":true,"schema":{"type":"string","title":"Token"}}],"responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/dashboard":{"get":{"tags":["Admin"],"summary":"Dashboard Page","operationId":"dashboard_page_admin_dashboard_get","parameters":[{"name":"token","in":"query","required":true,"schema":{"type":"string","title":"Token"}}],"responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/infra":{"get":{"tags":["Admin"],"summary":"Infra Dashboard","operationId":"infra_dashboard_admin_infra_get","parameters":[{"name":"token","in":"query","required":true,"schema":{"type":"string","title":"Token"}}],"responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/api/stats":{"get":{"tags":["Admin"],"summary":"Get Stats","operationId":"get_stats_admin_api_stats_get","parameters":[{"name":"token","in":"query","required":true,"schema":{"type":"string","title":"Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/api/feedback":{"get":{"tags":["Admin"],"summary":"Admin Feedback","operationId":"admin_feedback_admin_api_feedback_get","parameters":[{"name":"token","in":"query","required":true,"schema":{"type":"string","title":"Token"}},{"name":"min_rating","in":"query","required":false,"schema":{"type":"integer","maximum":5,"minimum":0,"default":0,"title":"Min Rating"}},{"name":"max_rating","in":"query","required":false,"schema":{"type":"integer","maximum":5,"minimum":1,"default":5,"title":"Max Rating"}},{"name":"model","in":"query","required":false,"schema":{"type":"string","title":"Model"}},{"name":"category","in":"query","required":false,"schema":{"type":"string","title":"Category"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":100,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/api/recent":{"get":{"tags":["Admin"],"summary":"Recent Generations","operationId":"recent_generations_admin_api_recent_get","parameters":[{"name":"token","in":"query","required":true,"schema":{"type":"string","title":"Token"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":100,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Offset"}},{"name":"model","in":"query","required":false,"schema":{"type":"string","title":"Model"}},{"name":"status","in":"query","required":false,"schema":{"type":"string","title":"Status"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/api/job-input":{"get":{"tags":["Admin"],"summary":"Job Input","description":"Full input images + params for ONE job (lazy-loaded by the admin QC view so the\nlist endpoint stays light).","operationId":"job_input_admin_api_job_input_get","parameters":[{"name":"token","in":"query","required":true,"schema":{"type":"string","title":"Token"}},{"name":"id","in":"query","required":true,"schema":{"type":"string","title":"Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/api/system":{"get":{"tags":["Admin"],"summary":"System Health","operationId":"system_health_admin_api_system_get","parameters":[{"name":"token","in":"query","required":true,"schema":{"type":"string","title":"Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/api/paid-inactive":{"get":{"tags":["Admin"],"summary":"Admin Paid Inactive","description":"Paying users who have run ZERO jobs — they paid but never used the product\n(onboarding leak + churn/refund risk; Om flagged juhliepro). Surfaced for QC.","operationId":"admin_paid_inactive_admin_api_paid_inactive_get","parameters":[{"name":"token","in":"query","required":true,"schema":{"type":"string","title":"Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/api/user-jobs":{"get":{"tags":["Admin"],"summary":"Admin User Jobs","description":"Every job a user has rendered/processed, for background QC. The generations table\npersists indefinitely (only the OUTPUT FILES expire at ~24h), so detail is available\nwell beyond the 1-week bar. Newest-first with status / error / credits / timing.","operationId":"admin_user_jobs_admin_api_user_jobs_get","parameters":[{"name":"token","in":"query","required":true,"schema":{"type":"string","title":"Token"}},{"name":"user_id","in":"query","required":true,"schema":{"type":"integer","title":"User Id"}},{"name":"days","in":"query","required":false,"schema":{"type":"integer","default":14,"title":"Days"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/api/support-chats":{"get":{"tags":["Admin"],"summary":"Admin Support Chats","description":"List support-chat sessions (newest first) for QC review.","operationId":"admin_support_chats_admin_api_support_chats_get","parameters":[{"name":"token","in":"query","required":true,"schema":{"type":"string","title":"Token"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":100,"title":"Limit"}},{"name":"q","in":"query","required":false,"schema":{"type":"string","default":"","title":"Q"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/api/support-chat":{"get":{"tags":["Admin"],"summary":"Admin Support Chat","description":"Full transcript of one support-chat session.","operationId":"admin_support_chat_admin_api_support_chat_get","parameters":[{"name":"token","in":"query","required":true,"schema":{"type":"string","title":"Token"}},{"name":"session_id","in":"query","required":true,"schema":{"type":"string","title":"Session Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/api/users":{"get":{"tags":["Admin"],"summary":"Admin Users","operationId":"admin_users_admin_api_users_get","parameters":[{"name":"token","in":"query","required":true,"schema":{"type":"string","title":"Token"}},{"name":"sort_by","in":"query","required":false,"schema":{"type":"string","default":"created_at","title":"Sort By"}},{"name":"order","in":"query","required":false,"schema":{"type":"string","default":"desc","title":"Order"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":100,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/api/user-detail":{"get":{"tags":["Admin"],"summary":"Admin User Detail","operationId":"admin_user_detail_admin_api_user_detail_get","parameters":[{"name":"token","in":"query","required":true,"schema":{"type":"string","title":"Token"}},{"name":"user_id","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"User Id"}},{"name":"email","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"}},{"name":"days","in":"query","required":false,"schema":{"type":"integer","maximum":30,"minimum":1,"default":7,"title":"Days"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":500,"minimum":1,"default":100,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/api/errors":{"get":{"tags":["Admin"],"summary":"Admin Errors","operationId":"admin_errors_admin_api_errors_get","parameters":[{"name":"token","in":"query","required":true,"schema":{"type":"string","title":"Token"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":50,"title":"Limit"}},{"name":"hours","in":"query","required":false,"schema":{"type":"integer","default":24,"title":"Hours"}},{"name":"minutes","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Minutes"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/api/metrics":{"get":{"tags":["Admin"],"summary":"Admin Metrics","operationId":"admin_metrics_admin_api_metrics_get","parameters":[{"name":"token","in":"query","required":true,"schema":{"type":"string","title":"Token"}},{"name":"period","in":"query","required":false,"schema":{"type":"string","default":"24h","title":"Period"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/api/alerts":{"get":{"tags":["Admin"],"summary":"Admin Alerts","operationId":"admin_alerts_admin_api_alerts_get","parameters":[{"name":"token","in":"query","required":true,"schema":{"type":"string","title":"Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/api/block":{"post":{"tags":["Admin"],"summary":"Block User","description":"Block an email from signing up and disable existing account.","operationId":"block_user_admin_api_block_post","parameters":[{"name":"token","in":"query","required":true,"schema":{"type":"string","title":"Token"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BlockRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/api/unblock":{"post":{"tags":["Admin"],"summary":"Unblock User","description":"Unblock an email and re-enable account.","operationId":"unblock_user_admin_api_unblock_post","parameters":[{"name":"token","in":"query","required":true,"schema":{"type":"string","title":"Token"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BlockRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/api/revoke":{"post":{"tags":["Admin"],"summary":"Revoke Api Key","description":"Revoke a user's API key and generate a new disabled one.","operationId":"revoke_api_key_admin_api_revoke_post","parameters":[{"name":"token","in":"query","required":true,"schema":{"type":"string","title":"Token"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RevokeRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/api/set-credits":{"post":{"tags":["Admin"],"summary":"Set Credits","description":"Set a user's credit balance (admin override).","operationId":"set_credits_admin_api_set_credits_post","parameters":[{"name":"token","in":"query","required":true,"schema":{"type":"string","title":"Token"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreditsRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/api/blocked":{"get":{"tags":["Admin"],"summary":"List Blocked","description":"List all blocked emails.","operationId":"list_blocked_admin_api_blocked_get","parameters":[{"name":"token","in":"query","required":true,"schema":{"type":"string","title":"Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/api/user/{user_id}":{"get":{"tags":["Admin"],"summary":"Get User Detail","description":"Get detailed info for a specific user.","operationId":"get_user_detail_admin_api_user__user_id__get","parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"integer","title":"User Id"}},{"name":"token","in":"query","required":true,"schema":{"type":"string","title":"Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/api/churn-feedback":{"get":{"tags":["Admin"],"summary":"Admin Churn Feedback","operationId":"admin_churn_feedback_admin_api_churn_feedback_get","parameters":[{"name":"token","in":"query","required":true,"schema":{"type":"string","title":"Token"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":100,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/api/payments":{"get":{"tags":["Admin"],"summary":"Admin Get Payments","operationId":"admin_get_payments_admin_api_payments_get","parameters":[{"name":"token","in":"query","required":true,"schema":{"type":"string","title":"Token"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":100,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/api/supervisor":{"get":{"tags":["Admin"],"summary":"Supervisor Dashboard","operationId":"supervisor_dashboard_admin_api_supervisor_get","parameters":[{"name":"token","in":"query","required":true,"schema":{"type":"string","title":"Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/api/bridge_dispatch_register":{"post":{"tags":["Admin"],"summary":"Bridge Dispatch Register","operationId":"bridge_dispatch_register_admin_api_bridge_dispatch_register_post","parameters":[{"name":"token","in":"query","required":true,"schema":{"type":"string","title":"Token"}},{"name":"note","in":"query","required":false,"schema":{"type":"string","default":"","title":"Note"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/geomind/competitor/displacement":{"get":{"tags":["geomind"],"summary":"Get Competitor Displacement","operationId":"get_competitor_displacement_geomind_competitor_displacement_get","parameters":[{"name":"keyword","in":"query","required":true,"schema":{"type":"string","title":"Keyword"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/geomind/sentiment":{"get":{"tags":["geomind"],"summary":"Get Sentiment","operationId":"get_sentiment_geomind_sentiment_get","parameters":[{"name":"keyword","in":"query","required":true,"schema":{"type":"string","title":"Keyword"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/geomind/scan/history":{"get":{"tags":["geomind"],"summary":"Get Scan History","operationId":"get_scan_history_geomind_scan_history_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/geomind/scan/save":{"post":{"tags":["geomind"],"summary":"Save Scan","operationId":"save_scan_geomind_scan_save_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ScanSaveRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/geomind/agent/protocol":{"get":{"tags":["geomind"],"summary":"Get Agent Protocol","operationId":"get_agent_protocol_geomind_agent_protocol_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/geomind/agent/command":{"post":{"tags":["geomind"],"summary":"Post Agent Command","operationId":"post_agent_command_geomind_agent_command_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentCommandRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/geomind/citation/velocity":{"get":{"tags":["geomind"],"summary":"Get Citation Velocity","operationId":"get_citation_velocity_geomind_citation_velocity_get","parameters":[{"name":"keyword","in":"query","required":true,"schema":{"type":"string","title":"Keyword"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/geomind/alerts":{"get":{"tags":["geomind"],"summary":"Get Alerts","operationId":"get_alerts_geomind_alerts_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/v1/frontend-error":{"post":{"tags":["frontend"],"summary":"Log Frontend Error","operationId":"log_frontend_error_v1_frontend_error_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/oauth/ph-callback":{"get":{"summary":"Ph Callback","operationId":"ph_callback_oauth_ph_callback_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/":{"get":{"summary":"Root","operationId":"root__get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/health":{"get":{"summary":"Health","operationId":"health_health_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/app/{path}":{"get":{"summary":"Serve App","operationId":"serve_app_app__path__get","parameters":[{"name":"path","in":"path","required":true,"schema":{"type":"string","title":"Path"}}],"responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/app":{"get":{"summary":"Serve App","operationId":"serve_app_app_get","parameters":[{"name":"path","in":"query","required":false,"schema":{"type":"string","default":"","title":"Path"}}],"responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/tools/{tool_name}":{"get":{"summary":"Serve Tool","operationId":"serve_tool_tools__tool_name__get","parameters":[{"name":"tool_name","in":"path","required":true,"schema":{"type":"string","title":"Tool Name"}}],"responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/tutorialbot/{path}":{"get":{"summary":"Tutorial Bot Proxy","operationId":"tutorial_bot_proxy_admin_tutorialbot__path__get","parameters":[{"name":"path","in":"path","required":true,"schema":{"type":"string","title":"Path"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"summary":"Tutorial Bot Proxy","operationId":"tutorial_bot_proxy_admin_tutorialbot__path__get","parameters":[{"name":"path","in":"path","required":true,"schema":{"type":"string","title":"Path"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/dl/doomsday/{filename}":{"get":{"summary":"Download Doomsday","description":"Download doomsday backup archive. No auth required (filename is the secret).","operationId":"download_doomsday_dl_doomsday__filename__get","parameters":[{"name":"filename","in":"path","required":true,"schema":{"type":"string","title":"Filename"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/dl/{filename}":{"get":{"summary":"Download Generic","operationId":"download_generic_dl__filename__get","parameters":[{"name":"filename","in":"path","required":true,"schema":{"type":"string","title":"Filename"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"head":{"summary":"Download Generic","operationId":"download_generic_dl__filename__head","parameters":[{"name":"filename","in":"path","required":true,"schema":{"type":"string","title":"Filename"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/wa-bridge/inbound":{"post":{"tags":["whatsapp"],"summary":"Inbound","operationId":"inbound_v1_wa_bridge_inbound_post","parameters":[{"name":"X-Bridge-Secret","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Bridge-Secret"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/InboundMsg"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/wa-bridge/outbound-poll":{"get":{"tags":["whatsapp"],"summary":"Outbound Poll","description":"Bridge polls every 5s for queued replies. Returns + claims up to 20.","operationId":"outbound_poll_v1_wa_bridge_outbound_poll_get","parameters":[{"name":"X-Bridge-Secret","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Bridge-Secret"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OutboundPollResp"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/wa-bridge/sent/{outbound_id}":{"post":{"tags":["whatsapp"],"summary":"Ack Sent","operationId":"ack_sent_v1_wa_bridge_sent__outbound_id__post","parameters":[{"name":"outbound_id","in":"path","required":true,"schema":{"type":"integer","title":"Outbound Id"}},{"name":"X-Bridge-Secret","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Bridge-Secret"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/wa-inbox/api/threads":{"get":{"tags":["whatsapp"],"summary":"List Threads","operationId":"list_threads_v1_wa_inbox_api_threads_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/v1/wa-inbox/api/thread/{phone}":{"get":{"tags":["whatsapp"],"summary":"Thread Detail","operationId":"thread_detail_v1_wa_inbox_api_thread__phone__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"phone","in":"path","required":true,"schema":{"type":"string","title":"Phone"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/wa-inbox/api/thread/{phone}/read":{"post":{"tags":["whatsapp"],"summary":"Mark Read","operationId":"mark_read_v1_wa_inbox_api_thread__phone__read_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"phone","in":"path","required":true,"schema":{"type":"string","title":"Phone"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/wa-inbox/api/recent":{"get":{"tags":["whatsapp"],"summary":"Recent","operationId":"recent_v1_wa_inbox_api_recent_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/v1/wa-inbox/api/override":{"post":{"tags":["whatsapp"],"summary":"Set Override","operationId":"set_override_v1_wa_inbox_api_override_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/OverrideReq"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/v1/wa-inbox/":{"get":{"tags":["whatsapp"],"summary":"Inbox Page","operationId":"inbox_page_v1_wa_inbox__get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/v1/vfx/edit-shot":{"post":{"tags":["VFX Studio"],"summary":"Edit Shot","description":"Upload a video + describe the VFX you want. Returns a generation_id.\nPoll GET /v1/vfx/{generation_id} for status/output_url.","operationId":"edit_shot_v1_vfx_edit_shot_post","requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_edit_shot_v1_vfx_edit_shot_post"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/VfxGenerateResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/v1/vfx/{generation_id}/approve":{"post":{"tags":["VFX Studio"],"summary":"Approve Generation","operationId":"approve_generation_v1_vfx__generation_id__approve_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"generation_id","in":"path","required":true,"schema":{"type":"string","title":"Generation Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/vfx/{generation_id}/reject":{"post":{"tags":["VFX Studio"],"summary":"Reject Generation","operationId":"reject_generation_v1_vfx__generation_id__reject_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"generation_id","in":"path","required":true,"schema":{"type":"string","title":"Generation Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/vfx/{generation_id}":{"get":{"tags":["VFX Studio"],"summary":"Vfx Status","operationId":"vfx_status_v1_vfx__generation_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"generation_id","in":"path","required":true,"schema":{"type":"string","title":"Generation Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/VfxStatus"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"AIShadowRequest":{"properties":{"image_url":{"type":"string","title":"Image Url","description":"URL of the image to add shadow to"},"shadow_type":{"type":"string","pattern":"^(soft|hard|natural|floating)$","title":"Shadow Type","default":"soft"},"shadow_opacity":{"type":"number","maximum":1.0,"minimum":0.1,"title":"Shadow Opacity","default":0.5},"shadow_blur":{"type":"integer","maximum":100.0,"minimum":0.0,"title":"Shadow Blur","default":25},"shadow_offset_x":{"type":"integer","maximum":100.0,"minimum":-100.0,"title":"Shadow Offset X","default":0},"shadow_offset_y":{"type":"integer","maximum":100.0,"minimum":-100.0,"title":"Shadow Offset Y","default":20},"background_color":{"items":{"type":"integer"},"type":"array","maxItems":3,"minItems":3,"title":"Background Color","default":[255,255,255]}},"type":"object","required":["image_url"],"title":"AIShadowRequest"},"AIShadowResponse":{"properties":{"generation_id":{"type":"string","title":"Generation Id"},"status":{"type":"string","title":"Status"},"credits_used":{"type":"number","title":"Credits Used"}},"type":"object","required":["generation_id","status","credits_used"],"title":"AIShadowResponse"},"AdCreativeResponse":{"properties":{"generation_id":{"type":"string","title":"Generation Id"},"status":{"type":"string","title":"Status"},"credits_used":{"type":"number","title":"Credits Used"},"estimated_seconds":{"type":"number","title":"Estimated Seconds","default":30.0},"ad_format":{"type":"string","title":"Ad Format"}},"type":"object","required":["generation_id","status","credits_used","ad_format"],"title":"AdCreativeResponse"},"AgentCommandRequest":{"properties":{"action":{"type":"string","title":"Action","default":""},"params":{"additionalProperties":true,"type":"object","title":"Params","default":{}}},"type":"object","title":"AgentCommandRequest"},"AppleVerifyRequest":{"properties":{"receipt":{"type":"string","title":"Receipt"},"product_id":{"type":"string","title":"Product Id"}},"type":"object","required":["receipt","product_id"],"title":"AppleVerifyRequest"},"ApproveRequest":{"properties":{"job_id":{"type":"string","title":"Job Id"},"deliverables":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Deliverables"}},"type":"object","required":["job_id"],"title":"ApproveRequest"},"AudioGenerateRequest":{"properties":{"prompt":{"type":"string","maxLength":500,"minLength":3,"title":"Prompt","description":"Text description of the music to generate"},"duration":{"type":"integer","maximum":30.0,"minimum":5.0,"title":"Duration","description":"Duration in seconds (5-30)","default":15},"model":{"type":"string","title":"Model","description":"Model to use","default":"musicgen-small"}},"type":"object","required":["prompt"],"title":"AudioGenerateRequest"},"AuthResponse":{"properties":{"api_key":{"type":"string","title":"Api Key"},"token":{"type":"string","title":"Token"},"email":{"type":"string","title":"Email"},"credits":{"type":"number","title":"Credits"}},"type":"object","required":["api_key","token","email","credits"],"title":"AuthResponse"},"BackgroundChoice":{"properties":{"type":{"type":"string","title":"Type"},"url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Url"},"prompt":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Prompt"}},"type":"object","required":["type"],"title":"BackgroundChoice"},"BalanceResponse":{"properties":{"credits_remaining":{"type":"number","title":"Credits Remaining"},"plan":{"type":"string","title":"Plan"},"email":{"type":"string","title":"Email"},"in_trial":{"type":"boolean","title":"In Trial","default":false},"trial_credits_left":{"type":"number","title":"Trial Credits Left","default":0.0},"trial_credits_used":{"type":"number","title":"Trial Credits Used","default":0.0},"trial_credits_ceiling":{"type":"number","title":"Trial Credits Ceiling","default":0.0},"trial_seconds_left":{"type":"integer","title":"Trial Seconds Left","default":0},"trial_expires_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Trial Expires At"}},"type":"object","required":["credits_remaining","plan","email"],"title":"BalanceResponse"},"BatchJobItem":{"properties":{"operation":{"type":"string","pattern":"^(remove-background|add-shadow|upscale|restore-face)$","title":"Operation"},"image_url":{"type":"string","title":"Image Url"},"params":{"additionalProperties":true,"type":"object","title":"Params"}},"type":"object","required":["operation","image_url"],"title":"BatchJobItem"},"BatchJobStatus":{"properties":{"index":{"type":"integer","title":"Index"},"generation_id":{"type":"string","title":"Generation Id"},"status":{"type":"string","title":"Status"}},"type":"object","required":["index","generation_id","status"],"title":"BatchJobStatus"},"BatchRequest":{"properties":{"jobs":{"items":{"$ref":"#/components/schemas/BatchJobItem"},"type":"array","maxItems":100,"minItems":1,"title":"Jobs"},"webhook_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Webhook Url"}},"type":"object","required":["jobs"],"title":"BatchRequest"},"BatchResponse":{"properties":{"batch_id":{"type":"string","title":"Batch Id"},"total_jobs":{"type":"integer","title":"Total Jobs"},"total_credits":{"type":"number","title":"Total Credits"},"jobs":{"items":{"$ref":"#/components/schemas/BatchJobStatus"},"type":"array","title":"Jobs"}},"type":"object","required":["batch_id","total_jobs","total_credits","jobs"],"title":"BatchResponse"},"BillingAddressUpdate":{"properties":{"billing_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Billing Name"},"billing_address":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Billing Address"},"billing_city":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Billing City"},"billing_state":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Billing State"},"billing_pincode":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Billing Pincode"},"billing_country":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Billing Country"},"billing_gstin":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Billing Gstin"}},"type":"object","title":"BillingAddressUpdate"},"BlockRequest":{"properties":{"email":{"type":"string","title":"Email"},"reason":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Reason","default":""}},"type":"object","required":["email"],"title":"BlockRequest"},"Body_audio_denoise_v1_audio_denoise_post":{"properties":{"audio":{"type":"string","format":"binary","title":"Audio"},"audio_url":{"type":"string","title":"Audio Url"}},"type":"object","title":"Body_audio_denoise_v1_audio_denoise_post"},"Body_audio_to_image_v1_multimodal_audio_to_image_post":{"properties":{"audio":{"type":"string","format":"binary","title":"Audio","description":"Audio input clip"},"prompt":{"type":"string","title":"Prompt","description":"Optional text description of the image to generate","default":""},"width":{"type":"integer","maximum":1920.0,"minimum":256.0,"title":"Width","default":1024},"height":{"type":"integer","maximum":1920.0,"minimum":256.0,"title":"Height","default":1024}},"type":"object","required":["audio"],"title":"Body_audio_to_image_v1_multimodal_audio_to_image_post"},"Body_auto_reel_v1_video_auto_reel_post":{"properties":{"source_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Source Url","description":"Source video URL (YouTube / mp4). Use EITHER source_url OR upload source file."},"source":{"anyOf":[{"type":"string","format":"binary"},{"type":"null"}],"title":"Source","description":"Source video file (max 100 MB). Use EITHER source_url OR upload."},"sources":{"anyOf":[{"items":{"type":"string","format":"binary"},"type":"array"},{"type":"null"}],"title":"Sources","description":"Ordered source video files (max 10, 100 MB each, 500 MB total)."},"aspect":{"type":"string","title":"Aspect","description":"Output aspect ratio: 16:9, 9:16, or 1:1","default":"16:9"},"bgm":{"type":"string","title":"Bgm","description":"Preset background music style: calm, epic, none (used when music_mode=preset)","default":"calm"},"music_mode":{"type":"string","title":"Music Mode","description":"Background music source: 'preset' (built-in style via bgm), 'prompt' (AI-generate instrumental from music_prompt), or 'upload' (use uploaded music file)","default":"preset"},"music_prompt":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Music Prompt","description":"When music_mode=prompt: describe the background track (e.g. 'calm uplifting lo-fi piano'). Instrumental, auto-ducked under voice."},"music":{"anyOf":[{"type":"string","format":"binary"},{"type":"null"}],"title":"Music","description":"When music_mode=upload: a music file (mp3/wav/m4a, max 20 MB) to use as the background track."},"language":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Language","description":"Source language hint (e.g. 'en', 'hi') — leave blank to auto-detect"},"include_logo":{"type":"boolean","title":"Include Logo","description":"Append PixelAPI logo bumper at the end","default":true}},"type":"object","title":"Body_auto_reel_v1_video_auto_reel_post"},"Body_caption_image_v1_image_caption_post":{"properties":{"image":{"type":"string","format":"binary","title":"Image","description":"Image to analyze (JPG/PNG/WEBP)"},"mode":{"type":"string","title":"Mode","description":"full | caption | tags | alt_text","default":"full"},"style":{"type":"string","title":"Style","description":"product | creative | seo | technical","default":"product"},"max_tags":{"type":"integer","maximum":50.0,"minimum":1.0,"title":"Max Tags","description":"Maximum number of tags to generate","default":10}},"type":"object","required":["image"],"title":"Body_caption_image_v1_image_caption_post"},"Body_classify_content_v1_moderation_classify_post":{"properties":{"images":{"items":{"type":"string","format":"binary"},"type":"array","title":"Images","description":"Image files (max 10 per request)","default":[]},"image_urls":{"type":"string","title":"Image Urls","description":"Comma-separated public image URLs (max 10 total)","default":""},"strict":{"type":"boolean","title":"Strict","description":"If True, return detailed per-class scores","default":false}},"type":"object","title":"Body_classify_content_v1_moderation_classify_post"},"Body_cleanup_v1_real_estate_cleanup_post":{"properties":{"image":{"type":"string","format":"binary","title":"Image","description":"Source image (JPG/PNG/WEBP, max 20MB)"},"cleanup_type":{"type":"string","title":"Cleanup Type","description":"Operation: declutter, sky_replace, day_to_dusk, perspective_correct"},"mask":{"anyOf":[{"type":"string","format":"binary"},{"type":"null"}],"title":"Mask","description":"Optional mask image for decluttering (JPG/PNG, max 20MB)"}},"type":"object","required":["image","cleanup_type"],"title":"Body_cleanup_v1_real_estate_cleanup_post"},"Body_color_grade_image_v1_image_color_grade_post":{"properties":{"image":{"type":"string","format":"binary","title":"Image"},"preset":{"type":"string","title":"Preset"}},"type":"object","required":["image","preset"],"title":"Body_color_grade_image_v1_image_color_grade_post"},"Body_controlnet_generate_v1_image_controlnet_post":{"properties":{"image":{"type":"string","format":"binary","title":"Image","description":"Reference image (edges auto-detected)"},"prompt":{"type":"string","title":"Prompt","description":"What to generate following the image structure"},"negative_prompt":{"type":"string","title":"Negative Prompt","default":""},"width":{"type":"integer","maximum":1536.0,"minimum":512.0,"title":"Width","default":1024},"height":{"type":"integer","maximum":1536.0,"minimum":512.0,"title":"Height","default":1024},"conditioning_scale":{"type":"number","maximum":1.5,"minimum":0.1,"title":"Conditioning Scale","default":0.5},"steps":{"type":"integer","maximum":50.0,"minimum":10.0,"title":"Steps","default":30},"guidance_scale":{"type":"number","maximum":20.0,"minimum":1.0,"title":"Guidance Scale","default":7.5},"seed":{"type":"integer","title":"Seed"}},"type":"object","required":["image","prompt"],"title":"Body_controlnet_generate_v1_image_controlnet_post"},"Body_create_portrait_v1_portrait_studio_post":{"properties":{"image":{"type":"string","format":"binary","title":"Image","description":"Source face photo (JPEG/PNG, <10MB)"},"style":{"type":"string","title":"Style","default":"professional-linkedin"},"prompt":{"type":"string","title":"Prompt","default":""},"pulid_strength":{"type":"number","maximum":2.0,"minimum":0.5,"title":"Pulid Strength","default":1.8},"gender":{"type":"string","title":"Gender","description":"male | female | auto (auto lets the style prompt decide, but may gender-swap on conflicting prompts)","default":"auto"}},"type":"object","required":["image"],"title":"Body_create_portrait_v1_portrait_studio_post"},"Body_create_product_photo_catalogue_clean_v1_image_product_photo_catalogue_clean_post":{"properties":{"image":{"type":"string","format":"binary","title":"Image","description":"Product catalogue image (JPG/PNG/WEBP, max 20MB)"},"art_no":{"type":"string","title":"Art No","description":"Catalogue/article number text","default":"Art no. 1595"},"size_text":{"type":"string","title":"Size Text","description":"Size/range text","default":"M to 4XL"},"footer":{"type":"string","title":"Footer","description":"Footer caption","default":"Premium polo catalogue image"},"output_format":{"type":"string","title":"Output Format","description":"Output format: jpeg | png | webp","default":"jpeg"}},"type":"object","required":["image"],"title":"Body_create_product_photo_catalogue_clean_v1_image_product_photo_catalogue_clean_post"},"Body_create_showroom_v1_showroom_post":{"properties":{"garment":{"type":"string","format":"binary","title":"Garment","description":"Garment photo (JPG/PNG/WEBP, max 10MB) — folded is fine"},"category":{"type":"string","title":"Category","description":"upperbody | lowerbody | dress","default":"upperbody"},"tryon_mode":{"type":"string","title":"Tryon Mode","description":"ai-model | own-photo | own-video","default":"ai-model"},"model_preset":{"type":"string","title":"Model Preset","description":"AI model base for ai-model mode: ('male-1', 'female-1')","default":"male-1"},"force_unfold":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Force Unfold","description":"Override auto-detect: true=always unfold, false=never"},"person_photo":{"anyOf":[{"type":"string","format":"binary"},{"type":"null"}],"title":"Person Photo","description":"Your photo (required for tryon_mode=own-photo)"},"person_video":{"anyOf":[{"type":"string","format":"binary"},{"type":"null"}],"title":"Person Video","description":"Your short video (required for tryon_mode=own-video)"}},"type":"object","required":["garment"],"title":"Body_create_showroom_v1_showroom_post"},"Body_describe_audio_v1_multimodal_describe_audio_post":{"properties":{"audio":{"type":"string","format":"binary","title":"Audio","description":"Required audio to describe"}},"type":"object","required":["audio"],"title":"Body_describe_audio_v1_multimodal_describe_audio_post"},"Body_describe_image_v1_multimodal_describe_image_post":{"properties":{"image":{"type":"string","format":"binary","title":"Image","description":"Required image to describe"}},"type":"object","required":["image"],"title":"Body_describe_image_v1_multimodal_describe_image_post"},"Body_detect_faces_v1_image_detect_faces_post":{"properties":{"image":{"type":"string","format":"binary","title":"Image"}},"type":"object","required":["image"],"title":"Body_detect_faces_v1_image_detect_faces_post"},"Body_edit_shot_v1_vfx_edit_shot_post":{"properties":{"video":{"type":"string","format":"binary","title":"Video"},"prompt":{"type":"string","maxLength":5000,"minLength":1,"title":"Prompt"},"resolution":{"type":"string","title":"Resolution","default":"1080p"},"duration":{"type":"integer","title":"Duration","default":5},"frame_at_seconds":{"type":"number","title":"Frame At Seconds","default":0.5},"kind":{"type":"string","title":"Kind","default":"v1.5"},"seed":{"type":"integer","title":"Seed","description":"Fixed seed for reproducible output. 0 (default) = auto-random. Reuse the returned seed to get the same VFX on a re-run.","default":0}},"type":"object","required":["video","prompt"],"title":"Body_edit_shot_v1_vfx_edit_shot_post"},"Body_floorplan_render_v1_real_estate_floorplan_render_post":{"properties":{"image":{"type":"string","format":"binary","title":"Image","description":"Floorplan image (JPG/PNG/WEBP, max 20MB)"},"interiors":{"type":"boolean","title":"Interiors","description":"Procedurally place Vastu-compliant furniture inside layout","default":true}},"type":"object","required":["image"],"title":"Body_floorplan_render_v1_real_estate_floorplan_render_post"},"Body_generate_3d_v1_3d_generate_post":{"properties":{"image":{"type":"string","format":"binary","title":"Image"},"format":{"type":"string","title":"Format","default":"glb"},"texture_size":{"type":"integer","title":"Texture Size","default":512}},"type":"object","required":["image"],"title":"Body_generate_3d_v1_3d_generate_post"},"Body_generate_ad_creative_v1_image_ad_creative_post":{"properties":{"product_image":{"type":"string","format":"binary","title":"Product Image","description":"Product image (JPG/PNG/WEBP, max 20MB). Optional — if omitted, a background-only ad is generated."},"product_image_url":{"type":"string","title":"Product Image Url","description":"URL to product image (alternative to file upload)","default":""},"headline":{"type":"string","title":"Headline","description":"Main headline text"},"subheadline":{"type":"string","title":"Subheadline","description":"Secondary text below the headline","default":""},"cta":{"type":"string","title":"Cta","description":"Call-to-action button text","default":"Shop Now"},"brand":{"type":"string","title":"Brand","description":"Brand name shown at the top","default":""},"tagline":{"type":"string","title":"Tagline","description":"Small tagline bottom-right (e.g. 'Free shipping')","default":""},"ad_format":{"type":"string","title":"Ad Format","description":"meta_1080x1080 | meta_1080x1920 | google_1200x628 | flipkart_1080x1080 | meesho_1080x1080","default":"meta_1080x1080"},"style":{"type":"string","title":"Style","description":"Scene style: luxury | abstract_tech | minimal | vibrant | festive","default":"luxury"},"layout":{"type":"string","title":"Layout","description":"Text layout preset","default":"bottom_text"},"headline_color":{"type":"string","title":"Headline Color","description":"Headline RGB","default":"255,255,255"},"cta_color":{"type":"string","title":"Cta Color","description":"CTA/badge accent RGB","default":"255,90,60"},"badge":{"type":"string","title":"Badge","description":"Optional corner badge text (e.g. '20% OFF')","default":""},"badge_color":{"type":"string","title":"Badge Color","description":"Badge RGB","default":"255,90,60"},"background_prompt":{"type":"string","title":"Background Prompt","description":"Custom scene prompt (overrides style)","default":""}},"type":"object","required":["headline"],"title":"Body_generate_ad_creative_v1_image_ad_creative_post"},"Body_generate_floorplan_3d_v1_3d_floorplan_generate_post":{"properties":{"image":{"type":"string","format":"binary","title":"Image"},"interiors":{"type":"boolean","title":"Interiors","default":true}},"type":"object","required":["image"],"title":"Body_generate_floorplan_3d_v1_3d_floorplan_generate_post"},"Body_generate_photo_restore_v1_photo_restore_generate_post":{"properties":{"file":{"type":"string","format":"binary","title":"File"},"mode":{"type":"string","title":"Mode","default":"full"},"restore_faces":{"type":"boolean","title":"Restore Faces","default":true}},"type":"object","required":["file"],"title":"Body_generate_photo_restore_v1_photo_restore_generate_post"},"Body_generate_tts_v1_tts_generate_post":{"properties":{"text":{"type":"string","title":"Text","description":"Text to synthesize"},"language":{"type":"string","title":"Language","description":"Language code","default":"auto"},"voice_description":{"type":"string","title":"Voice Description","description":"Voice design prompt e.g. 'young woman, warm voice'"},"voice_ref":{"type":"string","format":"binary","title":"Voice Ref","description":"Reference audio for voice cloning (WAV/MP3, 16kHz+)"},"cfg_value":{"type":"number","maximum":5.0,"minimum":0.5,"title":"Cfg Value","default":2.0},"inference_timesteps":{"type":"integer","maximum":20.0,"minimum":4.0,"title":"Inference Timesteps","default":10},"model":{"type":"string","title":"Model","default":"voxcpm-2"}},"type":"object","required":["text"],"title":"Body_generate_tts_v1_tts_generate_post"},"Body_image_to_video_v1_multimodal_image_to_video_post":{"properties":{"image":{"type":"string","format":"binary","title":"Image","description":"Reference input image to animate"},"prompt":{"type":"string","maxLength":2000,"minLength":1,"title":"Prompt","description":"Description of the video movement/style"},"duration":{"type":"number","maximum":10.0,"minimum":1.0,"title":"Duration","default":3.0},"fps":{"type":"integer","maximum":30.0,"minimum":1.0,"title":"Fps","default":8}},"type":"object","required":["image","prompt"],"title":"Body_image_to_video_v1_multimodal_image_to_video_post"},"Body_inpaint_v1_image_inpaint_post":{"properties":{"image":{"type":"string","format":"binary","title":"Image"},"mask":{"type":"string","format":"binary","title":"Mask","description":"Mask image (white = area to regenerate)"},"prompt":{"type":"string","title":"Prompt","description":"What to fill the masked area with","default":""},"negative_prompt":{"type":"string","title":"Negative Prompt","default":""},"strength":{"type":"number","maximum":1.0,"minimum":0.5,"title":"Strength","default":0.99},"steps":{"type":"integer","maximum":50.0,"minimum":10.0,"title":"Steps","default":25},"guidance_scale":{"type":"number","maximum":20.0,"minimum":1.0,"title":"Guidance Scale","default":7.5},"seed":{"type":"integer","title":"Seed"},"enhance":{"type":"boolean","title":"Enhance","default":false}},"type":"object","required":["image","mask"],"title":"Body_inpaint_v1_image_inpaint_post"},"Body_interior_design_v1_image_interior_design_post":{"properties":{"room_image":{"type":"string","format":"binary","title":"Room Image","description":"Room photo (JPG/PNG/WEBP, max 20MB)"},"room_type":{"type":"string","title":"Room Type","description":"Room type: living_room, bedroom, kitchen, bathroom, office, dining_room","default":"living_room"},"design_style":{"type":"string","title":"Design Style","description":"Design style: modern_indian, vastu_compliant, minimalist, scandinavian, industrial, bohemian, traditional_indian, kerala_style, rajasthani_luxury, contemporary","default":"modern_indian"},"color_scheme":{"type":"string","title":"Color Scheme","description":"Optional color preference (e.g., 'warm neutrals', 'blue accents')","default":""},"user_prompt":{"type":"string","title":"User Prompt","description":"Optional free-form description of what the user wants changed / added / kept (e.g., 'add a tall plant in the corner, keep the existing rug, warmer wall colors'). Moderated by gemma4 before reaching the model. Max 600 chars.","default":""},"source_width":{"type":"integer","title":"Source Width","description":"Original client-side image width; used to preserve displayed aspect/geometry.","default":0},"source_height":{"type":"integer","title":"Source Height","description":"Original client-side image height; used to preserve displayed aspect/geometry.","default":0},"preserve_geometry":{"type":"string","title":"Preserve Geometry","description":"Keep room dimensions, camera view, walls, windows and openings stable.","default":"true"}},"type":"object","required":["room_image"],"title":"Body_interior_design_v1_image_interior_design_post"},"Body_outpaint_from_upload_v1_image_outpaint_from_upload_post":{"properties":{"image":{"type":"string","format":"binary","title":"Image"},"direction":{"type":"string","title":"Direction","default":"all"},"extend_pixels":{"type":"integer","title":"Extend Pixels","default":256},"prompt":{"type":"string","title":"Prompt","default":""}},"type":"object","required":["image"],"title":"Body_outpaint_from_upload_v1_image_outpaint_from_upload_post"},"Body_refine_prompt_v1_multimodal_refine_prompt_post":{"properties":{"prompt":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Prompt","description":"Prompt to refine"},"image":{"anyOf":[{"type":"string","format":"binary"},{"type":"null"}],"title":"Image","description":"Optional image input"},"audio":{"anyOf":[{"type":"string","format":"binary"},{"type":"null"}],"title":"Audio","description":"Optional audio input"}},"type":"object","title":"Body_refine_prompt_v1_multimodal_refine_prompt_post"},"Body_remove_background_v1_image_remove_background_post":{"properties":{"image":{"type":"string","format":"binary","title":"Image"},"image_url":{"type":"string","title":"Image Url","description":"Public URL of image (alternative to file upload)"},"face_bbox":{"type":"string","title":"Face Bbox","description":"Optional 'x1,y1,x2,y2' — if provided, isolate just the person whose face matches this bbox and remove other people + background. Web-frontend only; standard API clients pass full image for whole-foreground extraction.","default":""}},"type":"object","title":"Body_remove_background_v1_image_remove_background_post"},"Body_remove_object_v1_image_remove_object_post":{"properties":{"image":{"type":"string","format":"binary","title":"Image"},"prompt":{"type":"string","title":"Prompt","description":"Describe the object to remove (or upload a mask)","default":""},"mask":{"type":"string","format":"binary","title":"Mask","description":"Optional mask image (white = area to remove)"}},"type":"object","required":["image"],"title":"Body_remove_object_v1_image_remove_object_post"},"Body_remove_text_v1_image_remove_text_post":{"properties":{"image":{"type":"string","format":"binary","title":"Image"},"languages":{"type":"string","title":"Languages","description":"Comma-separated OCR language codes. Chinese accepts zh/zh-cn -> ch_sim and zh-tw/zh-hk -> ch_tra.","default":"en"}},"type":"object","required":["image"],"title":"Body_remove_text_v1_image_remove_text_post"},"Body_replace_background_v1_image_replace_background_post":{"properties":{"image":{"type":"string","format":"binary","title":"Image"},"prompt":{"type":"string","title":"Prompt","description":"Text description of desired background (e.g. 'white', 'gradient blue to purple', 'studio lighting on marble table')"},"background_color":{"type":"string","title":"Background Color","description":"Optional explicit color: hex (#FF0000), rgb(255,0,0), or name (white, navy). Overrides prompt for solid colors."},"mask":{"type":"string","format":"binary","title":"Mask","description":"Optional foreground mask (white=keep, black=replace). If omitted, uses the image's alpha channel when present, otherwise falls back to auto-segmentation via BiRefNet."}},"type":"object","required":["image","prompt"],"title":"Body_replace_background_v1_image_replace_background_post"},"Body_restore_face_v1_image_restore_face_post":{"properties":{"image":{"type":"string","format":"binary","title":"Image"}},"type":"object","required":["image"],"title":"Body_restore_face_v1_image_restore_face_post"},"Body_restore_face_v2_v1_image_restore_face_v2_post":{"properties":{"image":{"type":"string","format":"binary","title":"Image"}},"type":"object","required":["image"],"title":"Body_restore_face_v2_v1_image_restore_face_v2_post"},"Body_scene_to_3d_v1_3d_scene_generate_post":{"properties":{"image":{"type":"string","format":"binary","title":"Image"},"format":{"type":"string","title":"Format","default":"glb"}},"type":"object","required":["image"],"title":"Body_scene_to_3d_v1_3d_scene_generate_post"},"Body_stage_v1_real_estate_stage_post":{"properties":{"room_image":{"type":"string","format":"binary","title":"Room Image","description":"Room photo (JPG/PNG/WEBP, max 20MB)"},"room_type":{"type":"string","title":"Room Type","description":"Room type: living_room, bedroom, kitchen, bathroom, office, dining_room","default":"living_room"},"design_style":{"type":"string","title":"Design Style","description":"Design style: modern_indian, vastu_compliant, minimalist, scandinavian, industrial, bohemian, traditional_indian, kerala_style, rajasthani_luxury, contemporary","default":"modern_indian"},"color_scheme":{"type":"string","title":"Color Scheme","description":"Optional color preference (e.g., 'warm neutrals')","default":""}},"type":"object","required":["room_image"],"title":"Body_stage_v1_real_estate_stage_post"},"Body_studio_init_v1_studio_init_post":{"properties":{"image":{"type":"string","format":"binary","title":"Image"},"max_objects":{"type":"integer","title":"Max Objects","default":6}},"type":"object","required":["image"],"title":"Body_studio_init_v1_studio_init_post"},"Body_text_to_3d_v1_3d_text_generate_post":{"properties":{"prompt":{"type":"string","title":"Prompt"},"resolution":{"type":"integer","title":"Resolution","default":128}},"type":"object","required":["prompt"],"title":"Body_text_to_3d_v1_3d_text_generate_post"},"Body_upload_file_internal_upload_post":{"properties":{"file":{"type":"string","format":"binary","title":"File"},"path":{"type":"string","title":"Path"},"job_id":{"type":"string","title":"Job Id","default":""}},"type":"object","required":["file","path"],"title":"Body_upload_file_internal_upload_post"},"Body_upload_training_images_v1_tunes__job_id__upload_post":{"properties":{"images":{"items":{"type":"string","format":"binary"},"type":"array","title":"Images"}},"type":"object","required":["images"],"title":"Body_upload_training_images_v1_tunes__job_id__upload_post"},"Body_upscale_image_v1_image_upscale_post":{"properties":{"image":{"type":"string","format":"binary","title":"Image"},"image_url":{"type":"string","title":"Image Url"},"scale":{"type":"integer","maximum":4.0,"minimum":2.0,"title":"Scale","default":4},"target_width":{"anyOf":[{"type":"integer","maximum":8192.0,"minimum":64.0},{"type":"null"}],"title":"Target Width","description":"Optional exact output width (px). If set with target_height, output is resized to exactly that."},"target_height":{"anyOf":[{"type":"integer","maximum":8192.0,"minimum":64.0},{"type":"null"}],"title":"Target Height","description":"Optional exact output height (px)."},"fit_mode":{"type":"string","title":"Fit Mode","description":"When custom dims have a different aspect ratio than input: 'stretch' (exact target, may squeeze), 'pad_white' (preserve aspect, pad white), 'pad_transparent' (preserve aspect, pad transparent PNG).","default":"stretch"}},"type":"object","title":"Body_upscale_image_v1_image_upscale_post"},"Body_vastu_parse_dwg_v1_vastu_parse_dwg_post":{"properties":{"file":{"type":"string","format":"binary","title":"File"},"plot_w_ft":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Plot W Ft"},"plot_d_ft":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Plot D Ft"},"facing":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Facing"}},"type":"object","required":["file"],"title":"Body_vastu_parse_dwg_v1_vastu_parse_dwg_post"},"Body_vastu_parse_dxf_v1_vastu_parse_dxf_post":{"properties":{"file":{"type":"string","format":"binary","title":"File"},"plot_w_ft":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Plot W Ft"},"plot_d_ft":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Plot D Ft"},"facing":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Facing"}},"type":"object","required":["file"],"title":"Body_vastu_parse_dxf_v1_vastu_parse_dxf_post"},"Body_vastu_parse_ifc_v1_vastu_parse_ifc_post":{"properties":{"file":{"type":"string","format":"binary","title":"File"},"plot_w_ft":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Plot W Ft"},"plot_d_ft":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Plot D Ft"},"facing":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Facing"}},"type":"object","required":["file"],"title":"Body_vastu_parse_ifc_v1_vastu_parse_ifc_post"},"Body_vastu_parse_image_v1_vastu_parse_image_post":{"properties":{"file":{"type":"string","format":"binary","title":"File"},"plot_w_ft":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Plot W Ft"},"plot_d_ft":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Plot D Ft"},"facing":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Facing"}},"type":"object","required":["file"],"title":"Body_vastu_parse_image_v1_vastu_parse_image_post"},"Body_vastu_parse_pdf_v1_vastu_parse_pdf_post":{"properties":{"file":{"type":"string","format":"binary","title":"File"},"plot_w_ft":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Plot W Ft"},"plot_d_ft":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Plot D Ft"},"facing":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Facing"}},"type":"object","required":["file"],"title":"Body_vastu_parse_pdf_v1_vastu_parse_pdf_post"},"Body_vfx_comp_v1_vfx_comp_post":{"properties":{"plate":{"type":"string","format":"binary","title":"Plate"},"effect":{"type":"string","title":"Effect","default":"fire"},"track":{"type":"string","title":"Track","default":"none"},"fps":{"type":"number","title":"Fps","default":24.0},"cover":{"type":"number","title":"Cover","default":2.2},"ignite":{"type":"integer","title":"Ignite","default":14},"subject_matte":{"anyOf":[{"type":"string","format":"binary"},{"type":"null"}],"title":"Subject Matte"}},"type":"object","required":["plate"],"title":"Body_vfx_comp_v1_vfx_comp_post"},"Body_vfx_compose_prepare_v1_image_vfx_compose_prepare_post":{"properties":{"foreground":{"type":"string","format":"binary","title":"Foreground","description":"Subject image (portrait, product, etc.)"},"background":{"type":"string","format":"binary","title":"Background","description":"Optional. If omitted, a background is generated from `prompt` (or `bg_prompt` if provided)."},"prompt":{"type":"string","title":"Prompt","description":"Required. Describes what the user is trying to compose. Doubles as the BG-generation prompt when no background is uploaded."},"bg_prompt":{"type":"string","title":"Bg Prompt","description":"Optional. Overrides the BG-generation prompt when no background image is uploaded.","default":""}},"type":"object","required":["foreground","prompt"],"title":"Body_vfx_compose_prepare_v1_image_vfx_compose_prepare_post"},"Body_video_denoise_v1_video_denoise_post":{"properties":{"video":{"type":"string","format":"binary","title":"Video"},"video_url":{"type":"string","title":"Video Url"}},"type":"object","title":"Body_video_denoise_v1_video_denoise_post"},"Body_video_merge_v1_video_merge_post":{"properties":{"video1":{"type":"string","format":"binary","title":"Video1"},"video2":{"type":"string","format":"binary","title":"Video2"},"layout":{"type":"string","title":"Layout","default":"sidebyside"},"mute_audio":{"type":"string","title":"Mute Audio","default":"false"}},"type":"object","required":["video1","video2"],"title":"Body_video_merge_v1_video_merge_post"},"Body_video_upscale_v1_video_upscale_post":{"properties":{"video":{"type":"string","format":"binary","title":"Video"},"video_url":{"type":"string","title":"Video Url"}},"type":"object","title":"Body_video_upscale_v1_video_upscale_post"},"Body_void_removal_v1_video_void_removal_post":{"properties":{"video":{"type":"string","format":"binary","title":"Video"},"prompt":{"type":"string","title":"Prompt"},"engine":{"type":"string","title":"Engine","description":"Removal engine: 'propainter' (quality-preserving, keeps original resolution) or 'netflix-void' (physics-aware, handles interactions but downscales to 672x384)","default":"diffueraser"}},"type":"object","required":["video","prompt"],"title":"Body_void_removal_v1_video_void_removal_post"},"Body_whatsapp_deliver_v1_real_estate_whatsapp_deliver_post":{"properties":{"generation_id":{"type":"string","title":"Generation Id","description":"The completed generation ID"},"phone_number":{"type":"string","title":"Phone Number","description":"Customer phone number (e.g. +91XXXXXXXXXX)"}},"type":"object","required":["generation_id","phone_number"],"title":"Body_whatsapp_deliver_v1_real_estate_whatsapp_deliver_post"},"CancelSubscriptionResponse":{"properties":{"message":{"type":"string","title":"Message"},"plan_expires_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Plan Expires At"}},"type":"object","required":["message","plan_expires_at"],"title":"CancelSubscriptionResponse"},"CaptionResponse":{"properties":{"generation_id":{"type":"string","title":"Generation Id"},"status":{"type":"string","title":"Status"},"credits_used":{"type":"number","title":"Credits Used"}},"type":"object","required":["generation_id","status","credits_used"],"title":"CaptionResponse"},"ChurnFeedbackRequest":{"properties":{"token":{"type":"string","title":"Token"},"reason":{"type":"string","title":"Reason","description":"Why did you cancel/leave?"},"score":{"type":"integer","maximum":10.0,"minimum":1.0,"title":"Score","description":"NPS score 1-10"},"comment":{"anyOf":[{"type":"string","maxLength":2000},{"type":"null"}],"title":"Comment"},"would_return":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Would Return"}},"type":"object","required":["token","reason","score"],"title":"ChurnFeedbackRequest"},"ColorGradeResponse":{"properties":{"generation_id":{"type":"string","title":"Generation Id"},"status":{"type":"string","title":"Status"},"output_url":{"type":"string","title":"Output Url"},"preset":{"type":"string","title":"Preset"},"credits_used":{"type":"number","title":"Credits Used"}},"type":"object","required":["generation_id","status","output_url","preset","credits_used"],"title":"ColorGradeResponse"},"CreateOrderRequest":{"properties":{"product":{"type":"string","title":"Product","description":"Plan key (starter/pro/scale) or pack key (pack_200/pack_500/pack_1000/pack_5000)"}},"type":"object","required":["product"],"title":"CreateOrderRequest"},"CreateOrderUSDRequest":{"properties":{"product":{"type":"string","title":"Product","description":"Plan key (starter/pro/scale) or pack key (pack_1000/pack_5000/pack_10000/pack_50000)"}},"type":"object","required":["product"],"title":"CreateOrderUSDRequest"},"CreateSubscriptionRequest":{"properties":{"plan":{"type":"string","title":"Plan"}},"type":"object","required":["plan"],"title":"CreateSubscriptionRequest"},"CreateSubscriptionResponse":{"properties":{"subscription_id":{"type":"string","title":"Subscription Id"},"approval_url":{"type":"string","title":"Approval Url"}},"type":"object","required":["subscription_id","approval_url"],"title":"CreateSubscriptionResponse"},"CreditsRequest":{"properties":{"user_id":{"type":"integer","title":"User Id"},"credits":{"type":"number","title":"Credits"},"reason":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Reason","default":""}},"type":"object","required":["user_id","credits"],"title":"CreditsRequest"},"EntitlementResponse":{"properties":{"pro":{"type":"boolean","title":"Pro"},"sources":{"items":{"type":"string"},"type":"array","title":"Sources"},"expiries":{"additionalProperties":{"type":"string"},"type":"object","title":"Expiries"},"plan_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Plan Name"},"notes":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Notes"}},"type":"object","required":["pro","sources","expiries"],"title":"EntitlementResponse"},"FeedbackRequest":{"properties":{"generation_id":{"type":"string","title":"Generation Id"},"rating":{"type":"integer","maximum":5.0,"minimum":1.0,"title":"Rating","description":"1-5 star rating"},"category":{"anyOf":[{"type":"string","pattern":"^(quality|speed|prompt_accuracy|artifact|nsfw_false_positive|other)$"},{"type":"null"}],"title":"Category","description":"Feedback category"},"comment":{"anyOf":[{"type":"string","maxLength":1000},{"type":"null"}],"title":"Comment"}},"type":"object","required":["generation_id","rating"],"title":"FeedbackRequest"},"FeedbackResponse":{"properties":{"id":{"type":"integer","title":"Id"},"generation_id":{"type":"string","title":"Generation Id"},"rating":{"type":"integer","title":"Rating"},"category":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Category"},"comment":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Comment"},"message":{"type":"string","title":"Message","default":"Feedback submitted. Thank you!"}},"type":"object","required":["id","generation_id","rating","category","comment"],"title":"FeedbackResponse"},"GenRequest":{"properties":{"prompt":{"type":"string","maxLength":1000,"title":"Prompt","description":"What the element should look like (optional with a type)","default":""},"type":{"type":"string","title":"Type","description":"Element preset; see /v1/vfx/element/types","default":"fire"},"resolution":{"type":"string","title":"Resolution","default":"1080p"},"duration":{"type":"integer","maximum":10.0,"minimum":4.0,"title":"Duration","description":"Snapped to a supported value (4/5/8/10)","default":5},"seed":{"type":"integer","minimum":0.0,"title":"Seed","default":3},"ref_video_url":{"type":"string","maxLength":2000,"title":"Ref Video Url","description":"Optional public URL of YOUR footage. If set: V2V 'isolate' mode — keep the described subject/effect, black out everything else, key to a shot-matched element.","default":""},"subject_image":{"type":"string","maxLength":12000000,"title":"Subject Image","description":"Optional PERSON image (http(s) URL or data URI). If set: render the effect ON the subject via i2v — tracked to the body, full-resolution, correct colour — instead of a detached centred element (use this for 'burning man' / fire-on-a-person shots).","default":""}},"type":"object","title":"GenRequest"},"GenerationStatus":{"properties":{"generation_id":{"type":"string","title":"Generation Id"},"status":{"type":"string","title":"Status"},"model":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Model"},"output_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Output Url"},"processing_ms":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Processing Ms"},"error_message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error Message"},"friendly_message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Friendly Message"},"retry_hint":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Retry Hint"},"guidance":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Guidance"},"created_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Created At"},"completed_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Completed At"}},"type":"object","required":["generation_id","status"],"title":"GenerationStatus"},"GoogleMobileAuthRequest":{"properties":{"id_token":{"type":"string","minLength":20,"title":"Id Token"}},"type":"object","required":["id_token"],"title":"GoogleMobileAuthRequest"},"GoogleMobileAuthResponse":{"properties":{"api_key":{"type":"string","title":"Api Key"},"token":{"type":"string","title":"Token"},"email":{"type":"string","title":"Email"},"credits":{"type":"number","title":"Credits"},"plan":{"type":"string","title":"Plan"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"is_new":{"type":"boolean","title":"Is New"}},"type":"object","required":["api_key","token","email","credits","plan","is_new"],"title":"GoogleMobileAuthResponse"},"GoogleVerifyRequest":{"properties":{"purchase_token":{"type":"string","title":"Purchase Token"},"product_id":{"type":"string","title":"Product Id"}},"type":"object","required":["purchase_token","product_id"],"title":"GoogleVerifyRequest"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"ImageEditRequest":{"properties":{"image":{"type":"string","title":"Image","description":"Input image as URL (http/https) or base64 data URI (data:image/...;base64,...)"},"reference_image":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Reference Image","description":"Optional SECOND image (URL or base64 data URI) used as a visual reference the edit should apply — e.g. the garment/saree to drape onto the person in `image`. When set, refer to it in the prompt as 'the second image'. Output keeps the primary image's size/aspect."},"prompt":{"type":"string","maxLength":2000,"minLength":1,"title":"Prompt","description":"Edit instruction, e.g. 'make the background a sunset beach scene'"},"model":{"type":"string","title":"Model","description":"Model to use for editing. Currently supports: firered-edit","default":"firered-edit"},"negative_prompt":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Negative Prompt","description":"Optional negative prompt","default":" "},"steps":{"anyOf":[{"type":"integer","maximum":80.0,"minimum":10.0},{"type":"null"}],"title":"Steps","description":"Number of inference steps (default: 40)","default":40},"cfg_scale":{"anyOf":[{"type":"number","maximum":10.0,"minimum":1.0},{"type":"null"}],"title":"Cfg Scale","description":"True CFG scale (default: 4.0)","default":4.0},"seed":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Seed","description":"Random seed for reproducibility"},"webhook_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Webhook Url","description":"Optional webhook URL for completion notification"},"operation":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Operation","description":"Edit operation type: product-photo (AI product photography pipeline)"}},"type":"object","required":["image","prompt"],"title":"ImageEditRequest","description":"Request body for POST /v1/image/edit"},"ImageEditResponse":{"properties":{"id":{"type":"string","title":"Id"},"status":{"type":"string","title":"Status"},"credits_used":{"type":"integer","title":"Credits Used"},"message":{"type":"string","title":"Message"},"eta_seconds":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Eta Seconds"},"suggestion":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Suggestion"}},"type":"object","required":["id","status","credits_used","message"],"title":"ImageEditResponse"},"InboundMsg":{"properties":{"wa_msg_id":{"type":"string","title":"Wa Msg Id"},"sender_phone":{"type":"string","title":"Sender Phone"},"sender_name":{"type":"string","title":"Sender Name","default":""},"body":{"type":"string","title":"Body","default":""},"timestamp_unix":{"type":"integer","title":"Timestamp Unix","default":0}},"type":"object","required":["wa_msg_id","sender_phone"],"title":"InboundMsg"},"InferRequest":{"properties":{"tune_id":{"type":"string","title":"Tune Id","description":"ID of trained LoRA model"},"prompt":{"type":"string","title":"Prompt","description":"Prompt (include trigger word)"},"negative_prompt":{"type":"string","title":"Negative Prompt","description":"Negative prompt","default":""},"width":{"type":"integer","maximum":2048.0,"minimum":256.0,"title":"Width","default":1024},"height":{"type":"integer","maximum":2048.0,"minimum":256.0,"title":"Height","default":1024},"num_images":{"type":"integer","maximum":4.0,"minimum":1.0,"title":"Num Images","default":1},"guidance_scale":{"type":"number","maximum":20.0,"minimum":1.0,"title":"Guidance Scale","default":7.5},"steps":{"type":"integer","maximum":100.0,"minimum":10.0,"title":"Steps","default":30},"seed":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Seed","description":"Random seed for reproducibility"},"webhook_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Webhook Url","description":"URL to POST when inference completes"}},"type":"object","required":["tune_id","prompt"],"title":"InferRequest"},"InferResponse":{"properties":{"job_id":{"type":"string","title":"Job Id"},"status":{"type":"string","title":"Status"},"credits_cost":{"type":"integer","title":"Credits Cost"},"credits_remaining":{"type":"number","title":"Credits Remaining"}},"type":"object","required":["job_id","status","credits_cost","credits_remaining"],"title":"InferResponse"},"InitRequest":{"properties":{"shot_name":{"type":"string","title":"Shot Name"},"frame_count":{"type":"integer","title":"Frame Count"},"frame_start":{"type":"integer","title":"Frame Start","default":1},"sprintf_pattern":{"type":"string","title":"Sprintf Pattern","default":""},"prompt":{"type":"string","title":"Prompt","default":""},"content_hash":{"type":"string","title":"Content Hash","default":""}},"type":"object","required":["shot_name","frame_count"],"title":"InitRequest"},"InitResponse":{"properties":{"job_id":{"type":"string","title":"Job Id"},"upload_url":{"type":"string","title":"Upload Url"},"upload_hosts":{"items":{},"type":"array","title":"Upload Hosts","default":[]},"sprintf_pattern":{"type":"string","title":"Sprintf Pattern"},"expected_frames":{"type":"integer","title":"Expected Frames"},"credits_reserved":{"type":"number","title":"Credits Reserved"},"message":{"type":"string","title":"Message"},"reused":{"type":"boolean","title":"Reused","default":false},"uploaded_frames":{"type":"integer","title":"Uploaded Frames","default":0}},"type":"object","required":["job_id","upload_url","sprintf_pattern","expected_frames","credits_reserved","message"],"title":"InitResponse"},"JobStatusResponse":{"properties":{"job_id":{"type":"string","title":"Job Id"},"status":{"type":"string","title":"Status"},"progress":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Progress"},"result_urls":{"anyOf":[{"items":{},"type":"array"},{"type":"null"}],"title":"Result Urls"},"error":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error"},"created_at":{"type":"string","title":"Created At"},"completed_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Completed At"}},"type":"object","required":["job_id","status","created_at"],"title":"JobStatusResponse"},"LoginRequest":{"properties":{"email":{"type":"string","format":"email","title":"Email"},"password":{"type":"string","title":"Password"}},"type":"object","required":["email","password"],"title":"LoginRequest"},"ModerationResponse":{"properties":{"moderation_id":{"type":"string","title":"Moderation Id"},"credits_used":{"type":"number","title":"Credits Used"},"results":{"items":{"$ref":"#/components/schemas/ModerationResult"},"type":"array","title":"Results"},"total_images":{"type":"integer","title":"Total Images"},"output_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Output Url"}},"type":"object","required":["moderation_id","credits_used","results","total_images"],"title":"ModerationResponse"},"ModerationResult":{"properties":{"label":{"type":"string","title":"Label"},"nsfw_score":{"type":"number","title":"Nsfw Score"},"safe_score":{"type":"number","title":"Safe Score"},"confidence":{"type":"number","title":"Confidence"}},"type":"object","required":["label","nsfw_score","safe_score","confidence"],"title":"ModerationResult"},"MovRequest":{"properties":{"job_id":{"type":"string","title":"Job Id"}},"type":"object","required":["job_id"],"title":"MovRequest"},"MultimodalStatus":{"properties":{"generation_id":{"type":"string","title":"Generation Id"},"status":{"type":"string","title":"Status"},"model":{"type":"string","title":"Model"},"prompt":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Prompt"},"credits_used":{"type":"number","title":"Credits Used"},"output_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Output Url"},"result":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Result"},"error_message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error Message"},"created_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Created At"},"completed_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Completed At"}},"type":"object","required":["generation_id","status","model","credits_used"],"title":"MultimodalStatus"},"OutboundMsg":{"properties":{"outbound_id":{"type":"integer","title":"Outbound Id"},"recipient_phone":{"type":"string","title":"Recipient Phone"},"body":{"type":"string","title":"Body"}},"type":"object","required":["outbound_id","recipient_phone","body"],"title":"OutboundMsg"},"OutboundPollResp":{"properties":{"messages":{"items":{"$ref":"#/components/schemas/OutboundMsg"},"type":"array","title":"Messages"}},"type":"object","required":["messages"],"title":"OutboundPollResp"},"OutpaintRequest":{"properties":{"image_url":{"type":"string","title":"Image Url","description":"URL of the image to extend"},"direction":{"type":"string","pattern":"^(all|left|right|top|bottom)$","title":"Direction","default":"all"},"extend_pixels":{"type":"integer","maximum":512.0,"minimum":64.0,"title":"Extend Pixels","default":256},"prompt":{"type":"string","maxLength":500,"title":"Prompt","default":""}},"type":"object","required":["image_url"],"title":"OutpaintRequest"},"OutpaintResponse":{"properties":{"generation_id":{"type":"string","title":"Generation Id"},"status":{"type":"string","title":"Status"},"credits_used":{"type":"number","title":"Credits Used"}},"type":"object","required":["generation_id","status","credits_used"],"title":"OutpaintResponse"},"OverrideReq":{"properties":{"phone":{"type":"string","title":"Phone"},"mode":{"type":"string","title":"Mode"},"reason":{"type":"string","title":"Reason","default":""}},"type":"object","required":["phone","mode"],"title":"OverrideReq"},"PhotoRestoreAsyncResponse":{"properties":{"generation_id":{"type":"string","title":"Generation Id"},"status":{"type":"string","title":"Status"},"credits_used":{"type":"number","title":"Credits Used"},"poll_url":{"type":"string","title":"Poll Url"},"estimated_seconds":{"type":"integer","title":"Estimated Seconds"}},"type":"object","required":["generation_id","status","credits_used","poll_url","estimated_seconds"],"title":"PhotoRestoreAsyncResponse"},"PixelForgeGenerateRequest":{"properties":{"prompt":{"type":"string","maxLength":500,"minLength":3,"title":"Prompt"},"style":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Style","description":"Preset: warrior, monster, item, tile, ui, background"},"mode":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Mode","description":"'spritesheet' (default) — uses nerijs/pixel-art-xl LoRA at 512x512. Best for tilesets, multi-character sheets, varied game assets. 7-8/10. OR 'single' — uses our custom LPC-trained LoRA at 768x768. Best for ISOLATED CHARACTER prompts (knight, monster, hero). 7-8/10 on characters, but only 4-5/10 on items (chest, potion, bottle) because the LPC training set was character-heavy. For 10/10 isolated single-asset output regardless of subject, use POST /v1/pixelforge/sketch with a stick-figure / line-drawing control image — that path uses ControlNet-Scribble + LoRA and consistently delivers production-grade single-character pixel art.","default":"spritesheet"},"seed":{"anyOf":[{"type":"integer","minimum":0.0},{"type":"null"}],"title":"Seed"},"webhook_url":{"anyOf":[{"type":"string","maxLength":500},{"type":"null"}],"title":"Webhook Url"}},"type":"object","required":["prompt"],"title":"PixelForgeGenerateRequest"},"PixelForgeSketchRequest":{"properties":{"image_url":{"type":"string","title":"Image Url","description":"URL of the sketch / line drawing to use as a control image"},"prompt":{"type":"string","maxLength":500,"minLength":3,"title":"Prompt"},"style":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Style","description":"Preset: warrior, monster, item, tile, ui, background"},"controlnet_strength":{"anyOf":[{"type":"number","maximum":1.5,"minimum":0.0},{"type":"null"}],"title":"Controlnet Strength","description":"How tightly the output follows the sketch. 0.5 = loose, 0.7 = balanced, 1.0+ = strict.","default":0.7},"seed":{"anyOf":[{"type":"integer","minimum":0.0},{"type":"null"}],"title":"Seed"},"webhook_url":{"anyOf":[{"type":"string","maxLength":500},{"type":"null"}],"title":"Webhook Url"}},"type":"object","required":["image_url","prompt"],"title":"PixelForgeSketchRequest"},"PolishStatus":{"properties":{"generation_id":{"type":"string","title":"Generation Id"},"status":{"type":"string","title":"Status"},"output_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Output Url"},"processing_ms":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Processing Ms"},"error_message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error Message"},"credits_used":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Credits Used"}},"type":"object","required":["generation_id","status"],"title":"PolishStatus"},"ProductPhotoCatalogueResponse":{"properties":{"generation_id":{"type":"string","title":"Generation Id"},"status":{"type":"string","title":"Status"},"credits_used":{"type":"number","title":"Credits Used"},"pipeline":{"items":{},"type":"array","title":"Pipeline","default":["remove-background","catalogue-clean-layout"]},"estimated_seconds":{"type":"integer","title":"Estimated Seconds","default":20}},"type":"object","required":["generation_id","status","credits_used"],"title":"ProductPhotoCatalogueResponse"},"RefundRequest":{"properties":{"user_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"User Id"},"payment_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Payment Id"},"reason":{"type":"string","title":"Reason","default":"Customer request"}},"type":"object","title":"RefundRequest"},"RevokeRequest":{"properties":{"user_id":{"type":"integer","title":"User Id"},"reason":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Reason","default":""}},"type":"object","required":["user_id"],"title":"RevokeRequest"},"SareeRequest":{"properties":{"person":{"type":"string","title":"Person","description":"Person photo as URL (http/https) or base64 data URI. For best results use a clear, well-lit, FRONT-FACING, FULL-BODY photo (head to below the knee)."},"garment":{"type":"string","title":"Garment","description":"Saree (or lehenga) image as URL or base64 data URI. Flat-lay or on-model both work."},"type":{"type":"string","title":"Type","description":"Drape type: 'saree' (default) or 'lehenga'.","default":"saree"},"notes":{"type":"string","title":"Notes","description":"Optional styling notes appended to the drape, e.g. 'pallu over the right shoulder', 'neat tucked pleats', 'contrast gold blouse', 'half-saree style'. Leave blank for the standard drape.","default":""},"webhook_url":{"type":"string","title":"Webhook Url","description":"Optional webhook URL for completion notification."}},"type":"object","required":["person","garment"],"title":"SareeRequest"},"ScanSaveRequest":{"properties":{"url":{"type":"string","title":"Url","default":""},"keyword":{"type":"string","title":"Keyword","default":""},"score":{"type":"number","title":"Score","default":0},"grade":{"type":"string","title":"Grade","default":""}},"type":"object","title":"ScanSaveRequest"},"SignupRequest":{"properties":{"email":{"type":"string","format":"email","title":"Email"},"password":{"type":"string","maxLength":128,"minLength":8,"title":"Password"}},"type":"object","required":["email","password"],"title":"SignupRequest"},"SongGenerateRequest":{"properties":{"prompt":{"type":"string","maxLength":500,"minLength":3,"title":"Prompt","description":"Song style description (e.g., 'happy upbeat children song about colors')"},"lyrics":{"type":"string","maxLength":2000,"title":"Lyrics","description":"Song lyrics. Optional when instrumental=True.","default":""},"duration":{"type":"integer","maximum":120.0,"minimum":10.0,"title":"Duration","description":"Duration in seconds (10-120)","default":30},"language":{"type":"string","title":"Language","description":"Vocal language: en, hi, zh, ja, ko","default":"en"},"seed":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Seed","description":"Random seed for reproducibility"},"instrumental":{"type":"boolean","title":"Instrumental","description":"If true, generate instrumental track (no vocals). Up to 120s.","default":false},"bpm":{"anyOf":[{"type":"integer","maximum":240.0,"minimum":0.0},{"type":"null"}],"title":"Bpm","description":"Tempo in BPM (40-240). Optional."},"extend_from":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Extend From","description":"Prior generation_id to extend. Pass with direction=after|before."},"direction":{"type":"string","pattern":"^(after|before)$","title":"Direction","description":"Extend direction. Only used when extend_from is set.","default":"after"},"variation_of":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Variation Of","description":"Prior generation_id to make a variation of."},"reference_audio_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Reference Audio Url","description":"HTTPS URL to a reference audio (mp3/wav). Style transfer."},"audio_cover_strength":{"anyOf":[{"type":"number","maximum":1.0,"minimum":0.0},{"type":"null"}],"title":"Audio Cover Strength","description":"0..1 strength of reference audio influence."}},"type":"object","required":["prompt"],"title":"SongGenerateRequest"},"StartRequest":{"properties":{"job_id":{"type":"string","title":"Job Id"},"prompt":{"type":"string","title":"Prompt","default":""},"v2v_model":{"type":"string","title":"V2V Model","default":"passthrough"},"deliverables":{"items":{"type":"string"},"type":"array","title":"Deliverables","description":"List of ['composited', 'rgba_matte', 'alpha_only']","default":["composited"]},"reprocess":{"type":"boolean","title":"Reprocess","default":false}},"type":"object","required":["job_id"],"title":"StartRequest"},"StatusResponse":{"properties":{"job_id":{"type":"string","title":"Job Id"},"stage":{"type":"string","title":"Stage"},"progress":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Progress"},"shot_info":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Shot Info"},"preview_mp4_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Preview Mp4 Url"},"download_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Download Url"},"matte_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Matte Url"},"alpha_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Alpha Url"},"share_token":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Share Token"},"error":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error"},"created_at":{"type":"integer","title":"Created At"},"updated_at":{"type":"integer","title":"Updated At"}},"type":"object","required":["job_id","stage","created_at","updated_at"],"title":"StatusResponse"},"StemsRequest":{"properties":{"audio_url":{"type":"string","title":"Audio Url","description":"HTTPS URL of audio to separate (mp3/wav/m4a/flac/ogg)."},"two_stems":{"type":"boolean","title":"Two Stems","description":"If true, split only vocals vs accompaniment (2 stems). Else 4 stems.","default":false}},"type":"object","required":["audio_url"],"title":"StemsRequest"},"SubscriptionStatusResponse":{"properties":{"plan":{"type":"string","title":"Plan"},"subscription_status":{"type":"string","title":"Subscription Status"},"paypal_subscription_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Paypal Subscription Id"},"plan_expires_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Plan Expires At"},"credits_remaining":{"type":"number","title":"Credits Remaining"}},"type":"object","required":["plan","subscription_status","paypal_subscription_id","plan_expires_at","credits_remaining"],"title":"SubscriptionStatusResponse"},"SupportRequest":{"properties":{"session_id":{"type":"string","maxLength":64,"title":"Session Id"},"message":{"type":"string","maxLength":2000,"title":"Message"},"page_url":{"anyOf":[{"type":"string","maxLength":400},{"type":"null"}],"title":"Page Url"},"page_context":{"anyOf":[{"type":"string","maxLength":4000},{"type":"null"}],"title":"Page Context"},"screenshot":{"anyOf":[{"type":"string","maxLength":900000},{"type":"null"}],"title":"Screenshot"},"surface":{"anyOf":[{"type":"string","maxLength":16},{"type":"null"}],"title":"Surface"}},"type":"object","required":["session_id","message"],"title":"SupportRequest"},"TelemetryEvent":{"properties":{"event_type":{"type":"string","maxLength":32,"minLength":2,"title":"Event Type"},"tool_id":{"anyOf":[{"type":"string","maxLength":64},{"type":"null"}],"title":"Tool Id"},"error_class":{"anyOf":[{"type":"string","maxLength":128},{"type":"null"}],"title":"Error Class"},"error_message":{"anyOf":[{"type":"string","maxLength":2048},{"type":"null"}],"title":"Error Message"},"first_frame":{"anyOf":[{"type":"string","maxLength":512},{"type":"null"}],"title":"First Frame"},"app_version":{"anyOf":[{"type":"string","maxLength":32},{"type":"null"}],"title":"App Version"},"app_vc":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"App Vc"},"android_sdk":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Android Sdk"},"device_model":{"anyOf":[{"type":"string","maxLength":64},{"type":"null"}],"title":"Device Model"},"device_id_hash":{"anyOf":[{"type":"string","maxLength":64},{"type":"null"}],"title":"Device Id Hash"},"payload":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Payload"}},"type":"object","required":["event_type"],"title":"TelemetryEvent","description":"Single telemetry event from the app. All fields optional except event_type."},"TrainRequest":{"properties":{"model":{"type":"string","title":"Model","description":"Base model: 'sdxl' or 'flux'"},"trigger_word":{"type":"string","title":"Trigger Word","description":"Unique trigger word for the LoRA (e.g., 'TOK', 'my-style')"},"webhook_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Webhook Url","description":"URL to POST when training completes"},"steps":{"type":"integer","maximum":5000.0,"minimum":100.0,"title":"Steps","description":"Training steps (100-5000)","default":1000},"learning_rate":{"type":"number","title":"Learning Rate","description":"Learning rate","default":0.0001},"rank":{"type":"integer","maximum":128.0,"minimum":4.0,"title":"Rank","description":"LoRA rank (4-128)","default":16}},"type":"object","required":["model","trigger_word"],"title":"TrainRequest"},"TrainResponse":{"properties":{"job_id":{"type":"string","title":"Job Id"},"status":{"type":"string","title":"Status"},"model":{"type":"string","title":"Model"},"estimated_time_seconds":{"type":"integer","title":"Estimated Time Seconds"},"credits_cost":{"type":"integer","title":"Credits Cost"},"credits_remaining":{"type":"number","title":"Credits Remaining"},"upload_url":{"type":"string","title":"Upload Url"}},"type":"object","required":["job_id","status","model","estimated_time_seconds","credits_cost","credits_remaining","upload_url"],"title":"TrainResponse"},"TransformRequest":{"properties":{"session_id":{"type":"string","title":"Session Id"},"object_index":{"type":"integer","title":"Object Index","default":0},"background":{"$ref":"#/components/schemas/BackgroundChoice"},"camera_preset":{"type":"string","title":"Camera Preset","default":"turntable"}},"type":"object","required":["session_id","background"],"title":"TransformRequest"},"TuneModel":{"properties":{"tune_id":{"type":"string","title":"Tune Id"},"trigger_word":{"type":"string","title":"Trigger Word"},"base_model":{"type":"string","title":"Base Model"},"status":{"type":"string","title":"Status"},"created_at":{"type":"string","title":"Created At"},"file_size_mb":{"type":"number","title":"File Size Mb"}},"type":"object","required":["tune_id","trigger_word","base_model","status","created_at","file_size_mb"],"title":"TuneModel"},"UpscaleStatus":{"properties":{"generation_id":{"type":"string","title":"Generation Id"},"status":{"type":"string","title":"Status"},"output_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Output Url"},"processing_ms":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Processing Ms"},"error_message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error Message"}},"type":"object","required":["generation_id","status"],"title":"UpscaleStatus"},"VTONRequest":{"properties":{"garment_image":{"type":"string","title":"Garment Image","description":"Base64-encoded garment image (JPEG/PNG/WebP)"},"person_image":{"type":"string","title":"Person Image","description":"Base64-encoded person/model image (JPEG/PNG/WebP)"},"category":{"type":"string","title":"Category","description":"upperbody | lowerbody | dress | saree | lehenga | kurti | sherwani","default":"upperbody"},"n_samples":{"type":"integer","maximum":4.0,"minimum":1.0,"title":"N Samples","default":1},"n_steps":{"type":"integer","maximum":50.0,"minimum":1.0,"title":"N Steps","default":40},"image_scale":{"type":"number","maximum":10.0,"minimum":0.1,"title":"Image Scale","default":2.0},"webhook_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Webhook Url"}},"type":"object","required":["garment_image","person_image"],"title":"VTONRequest"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"},"input":{"title":"Input"},"ctx":{"type":"object","title":"Context"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"},"VastuRequest":{"properties":{"facing":{"type":"string","title":"Facing","examples":["north","north-east","east"]},"plot":{"$ref":"#/components/schemas/_Plot"},"rooms":{"items":{"$ref":"#/components/schemas/_Room"},"type":"array","title":"Rooms"},"main_entrance":{"anyOf":[{"$ref":"#/components/schemas/_Point"},{"type":"null"}]},"features":{"anyOf":[{"additionalProperties":{"$ref":"#/components/schemas/_Point"},"type":"object"},{"type":"null"}],"title":"Features"}},"type":"object","required":["facing","plot"],"title":"VastuRequest"},"VerifyPaymentRequest":{"properties":{"razorpay_order_id":{"type":"string","title":"Razorpay Order Id"},"razorpay_payment_id":{"type":"string","title":"Razorpay Payment Id"},"razorpay_signature":{"type":"string","title":"Razorpay Signature"},"product":{"type":"string","title":"Product"}},"type":"object","required":["razorpay_order_id","razorpay_payment_id","razorpay_signature","product"],"title":"VerifyPaymentRequest"},"VfxFinalizeRequest":{"properties":{"prepare_id":{"type":"string","title":"Prepare Id"},"bbox":{"additionalProperties":true,"type":"object","title":"Bbox"},"shadow_opacity":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Shadow Opacity"},"light_angle_deg":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Light Angle Deg"},"subject_angle_deg":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Subject Angle Deg","default":0.0},"tone_match_strength":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Tone Match Strength","default":0.5},"harmonize":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Harmonize","default":false}},"type":"object","required":["prepare_id","bbox"],"title":"VfxFinalizeRequest"},"VfxGenerateResponse":{"properties":{"generation_id":{"type":"string","title":"Generation Id"},"model":{"type":"string","title":"Model"},"kind":{"type":"string","title":"Kind"},"duration":{"type":"integer","title":"Duration"},"seed":{"type":"integer","title":"Seed","default":0}},"type":"object","required":["generation_id","model","kind","duration"],"title":"VfxGenerateResponse"},"VfxStatus":{"properties":{"generation_id":{"type":"string","title":"Generation Id"},"status":{"type":"string","title":"Status"},"output_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Output Url"},"direct_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Direct Url"},"error":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error"},"prompt":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Prompt"},"native_resolution":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Native Resolution"}},"type":"object","required":["generation_id","status"],"title":"VfxStatus"},"VideoStatus":{"properties":{"generation_id":{"type":"string","title":"Generation Id"},"status":{"type":"string","title":"Status"},"output_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Output Url"},"processing_ms":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Processing Ms"},"error_message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error Message"},"estimated_seconds":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Estimated Seconds"},"elapsed_seconds":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Elapsed Seconds"},"message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Message"}},"type":"object","required":["generation_id","status"],"title":"VideoStatus"},"VideoTryonRequest":{"properties":{"person_image":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Person Image","description":"A full-body, front-facing photo of the PERSON (http(s) URL or base64 data URI). Required unless you pass a pre-dressed `look_image`."},"garment_image":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Garment Image","description":"The GARMENT/cloth to put on the person (http(s) URL or base64 data URI). A saree/lehenga flat photo, or a t-shirt/shirt/jeans/dress product image."},"garment_type":{"type":"string","title":"Garment Type","description":"What kind of garment: one of ['blouse', 'dress', 'frock', 'fullbody', 'fullbodydress', 'gown', 'hoodie', 'jacket', 'jeans', 'jumpsuit', 'kurta', 'kurti', 'leggings', 'lehenga', 'lehenga-choli', 'lehenga_choli', 'lehengacholi', 'lowerbody', 'pants', 'saree', 'sari', 'shirt', 'shorts', 'skirt', 'sweater', 'sweatshirt', 't-shirt', 'top', 'trousers', 'tshirt', 'upperbody', 'western']. 'saree'/'lehenga' use the drape engine; everything else uses the western virtual try-on.","default":"tshirt"},"template":{"type":"string","title":"Template","description":"Motion template the user selects: one of ('female_turn', 'female_walk', 'female_pose', 'female_sit', 'male_turn', 'male_walk', 'male_pose', 'male_sit'). 'turn'/'walk' are most reliable; match the gender to the person.","default":"female_turn"},"look_image":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Look Image","description":"ADVANCED / backward-compat: a person ALREADY wearing the outfit (full-body). If given, Stage A (try-on) is skipped and this look is animated directly."},"prompt":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Prompt","description":"Optional scene/style hint, e.g. 'runway, studio lighting'."},"environment":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Environment","description":"Optional VIRTUAL ENVIRONMENT: describe a scene to place yourself in (e.g. 'a sunlit Paris boulevard', 'a luxury boutique', 'a beach at sunset'). Your photo and garment are preserved; only the background scene is generated. Costs +200 credits on top of the base try-on."},"webhook_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Webhook Url"}},"type":"object","title":"VideoTryonRequest"},"WebhookConfigRequest":{"properties":{"webhook_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Webhook Url"},"regenerate_secret":{"type":"boolean","title":"Regenerate Secret","default":false}},"type":"object","title":"WebhookConfigRequest"},"_Plot":{"properties":{"width_ft":{"type":"number","maximum":2000.0,"exclusiveMinimum":0.0,"title":"Width Ft"},"depth_ft":{"type":"number","maximum":2000.0,"exclusiveMinimum":0.0,"title":"Depth Ft"}},"type":"object","required":["width_ft","depth_ft"],"title":"_Plot"},"_Point":{"properties":{"x":{"type":"number","title":"X"},"y":{"type":"number","title":"Y"}},"type":"object","required":["x","y"],"title":"_Point"},"_Room":{"properties":{"name":{"type":"string","title":"Name"},"x":{"type":"number","title":"X"},"y":{"type":"number","title":"Y"},"w":{"type":"number","exclusiveMinimum":0.0,"title":"W"},"h":{"type":"number","exclusiveMinimum":0.0,"title":"H"}},"type":"object","required":["name","x","y","w","h"],"title":"_Room"}},"securitySchemes":{"HTTPBearer":{"type":"http","scheme":"bearer"}}}}