{"openapi":"3.1.0","info":{"title":"GenFire Public API","version":"1.0.0","description":"Production REST API for media generation, workflows, batches, and webhooks. Use stable GenFire model aliases instead of raw provider ids and poll runs for async completion."},"servers":[{"url":"https://api.genfire.ai/v1"}],"tags":[{"name":"auth","description":"OAuth client-credentials access tokens for machine-to-machine integrations."},{"name":"account","description":"Account identity and credit balance for the authenticated public API account."},{"name":"models","description":"Public model alias discovery. Use these aliases in generation requests."},{"name":"runs","description":"Async run lifecycle. Poll these endpoints to monitor long-running work."},{"name":"batches","description":"Batch orchestration across workflows and selected generation operations."},{"name":"workflows","description":"Outcome-level workflow discovery and execution."},{"name":"webhooks","description":"Webhook endpoint registration, delivery history, and replay."},{"name":"generation","description":"Primitive media generation endpoints for images, videos, lip-sync, speech, music, sound effects, and product extraction."},{"name":"uploads","description":"Direct-to-storage signed upload URLs. Use these to attach local files (reference images, source videos) to subsequent generation requests."},{"name":"cli_auth","description":"CLI auth handshake. Used by the GenFire CLI to obtain an API key via a browser-based PKCE flow. Not intended for direct integration."},{"name":"influencers","description":"Trained influencer characters owned by the authenticated account. Reference them in image generation prompts via mentions to inject identity-preserving conditioning."}],"components":{"securitySchemes":{"bearerAuth":{"type":"http","scheme":"bearer","description":"Use a GenFire public API key or an OAuth access token in the `Authorization: Bearer ...` header."}},"schemas":{"Error":{"type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"code":{"type":"string"},"request_id":{"type":"string"}},"example":{"type":"https://api.genfire.ai/errors/invalid_prompt","title":"Invalid Prompt","status":400,"detail":"prompt is required.","code":"invalid_prompt","request_id":"req_123"}},"OAuthToken":{"type":"object","properties":{"access_token":{"type":"string"},"token_type":{"type":"string","enum":["Bearer"]},"expires_in":{"type":"integer"},"scope":{"type":"string"}},"example":{"access_token":"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.example","token_type":"Bearer","expires_in":3600,"scope":"models:read runs:read images:write"}},"Account":{"type":"object","properties":{"id":{"type":"string"},"object":{"type":"string","enum":["account"]},"display_name":{"type":"string"},"email":{"type":"string"},"plan":{"type":"string"},"status":{"type":"string","enum":["active"]},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"}},"example":{"id":"acct_user_123","object":"account","display_name":"GenFire Developer","email":"owner@example.com","plan":"pro","status":"active","created_at":"2026-03-25T12:00:00.000Z","updated_at":"2026-03-25T12:00:00.000Z"}},"CreditBalance":{"type":"object","properties":{"account_id":{"type":"string"},"balance":{"type":"number"},"currency":{"type":"string","enum":["credits"]}},"example":{"account_id":"acct_user_123","balance":250,"currency":"credits"}},"CliAuthSessionStart":{"type":"object","required":["session_id","verification_url","expires_at","requested_scopes","label"],"properties":{"session_id":{"type":"string","description":"Opaque session identifier. Pass to the verification URL and to the exchange endpoint."},"verification_url":{"type":"string","format":"uri","description":"URL the user should open in a browser to approve the CLI session."},"expires_at":{"type":"string","format":"date-time","description":"Session expiry. After this point the user must restart the CLI login."},"requested_scopes":{"type":"array","items":{"type":"string"},"description":"Normalized scopes the CLI is asking for."},"label":{"type":"string","description":"Human-friendly device label, shown to the user on the consent page."}}},"CliAuthSessionStatus":{"type":"object","required":["session_id","status","label","requested_scopes","expires_at"],"properties":{"session_id":{"type":"string"},"status":{"type":"string","enum":["pending","approved","consumed","denied","expired"]},"label":{"type":"string"},"requested_scopes":{"type":"array","items":{"type":"string"}},"expires_at":{"type":"string","format":"date-time"}}},"CliAuthSessionExchange":{"type":"object","required":["api_key","scopes","label","session_expires_at"],"properties":{"api_key":{"type":"string","description":"Raw API key. Returned exactly once. Store securely."},"scopes":{"type":"array","items":{"type":"string"},"description":"Scopes granted to the issued key."},"label":{"type":"string","description":"Display label for the issued key (matches what the user saw on the consent page)."},"session_expires_at":{"type":"string","format":"date-time","description":"When the original CLI session would have expired. The issued API key itself does not expire."}}},"Influencer":{"type":"object","required":["id","object","handle","display_name","status","source_type","preview_url","created_at","updated_at"],"properties":{"id":{"type":"string","description":"Stable influencer identifier. Pass to mentions[].influencer_id."},"object":{"type":"string","enum":["influencer"]},"handle":{"type":"string","description":"User-chosen handle without leading @, e.g. \"sarah\"."},"display_name":{"type":"string"},"status":{"type":"string","enum":["draft","ready","archived"],"description":"Only `ready` influencers can be referenced in mentions."},"source_type":{"type":"string","enum":["uploaded","generated"],"description":"Whether the influencer was trained from uploaded photos or generated faces."},"preview_url":{"type":"string","nullable":true,"format":"uri","description":"A representative image URL for picker UIs."},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"}},"example":{"id":"model_abc123def456","object":"influencer","handle":"sarah","display_name":"Sarah Chen","status":"ready","source_type":"uploaded","preview_url":"https://firebasestorage.googleapis.com/...","created_at":"2026-04-12T10:30:00.000Z","updated_at":"2026-04-12T10:35:00.000Z"}},"InfluencerList":{"type":"object","required":["object","data"],"properties":{"object":{"type":"string","enum":["list"]},"data":{"type":"array","items":{"$ref":"#/components/schemas/Influencer"}}}},"InfluencerMention":{"type":"object","required":["handle","influencer_id"],"properties":{"handle":{"type":"string","description":"Handle the user typed (without the leading @). Used to rewrite the prompt."},"influencer_id":{"type":"string","description":"Stable influencer id from GET /v1/influencers."}}},"Upload":{"type":"object","required":["asset_id","upload_url","asset_url","content_type","expires_at"],"properties":{"asset_id":{"type":"string","description":"Stable identifier for the uploaded asset."},"upload_url":{"type":"string","format":"uri","description":"Pre-signed PUT URL. Upload bytes here within 15 minutes."},"asset_url":{"type":"string","format":"uri","description":"Signed READ URL valid for 7 days. Pass this as `image_url`, `video_url`, etc. to generation endpoints."},"content_type":{"type":"string","description":"Echo of the content_type the upload was signed for."},"expires_at":{"type":"string","format":"date-time","description":"When `asset_url` expires. After this point you must request a fresh upload to re-reference the asset."}},"example":{"asset_id":"asset_8f3c4a2b1d6e7f9a0b1c2d3e","upload_url":"https://storage.googleapis.com/genfire-uploads/...?X-Goog-Signature=...","asset_url":"https://storage.googleapis.com/genfire-uploads/...?X-Goog-Signature=...","content_type":"image/png","expires_at":"2026-05-12T02:21:25.985Z"}},"Model":{"type":"object","properties":{"id":{"type":"string","enum":["image.genfire_v1","image.nano_banana_2","image.nano_banana_pro","image.nano_banana","image.gpt_image_2","image.seedream_v45","image.seedream_v5_lite","image.qwen_image_2","image.qwen_image_2_pro","image.recraft_v4","image.recraft_v4_pro","image.grok_imagine","video.veo_3_1","video.veo_3_1_fast","video.veo_3_1_lite","video.veo_3_1_extend","video.veo_3","video.veo_3_fast","video.kling_o3","video.kling_o3_pro","video.kling_o3_4k","video.kling_v3","video.kling_v3_pro","video.kling_v3_motion_control","video.kling_v3_pro_motion_control","video.kling_v3_4k","video.kling_v26","video.kling_v26_pro","video.kling_v26_motion_control","video.kling_v25_turbo","video.kling_v21_master","video.sora_2","video.hailuo_23","video.hailuo_23_pro","video.hailuo_02","video.hailuo_02_fast","video.hailuo_23_fast","video.hailuo_23_fast_pro","video.luma_dream_machine","video.wan_v22","video.wan_25_preview","video.wan_animate_replace","video.wan_animate_move","video.seedance_2_0","video.seedance_2_0_fast","video.grok_video","video.grok_video_edit","video.grok_video_extend","video.happy_horse","speech.elevenlabs_turbo_v2_5","speech.elevenlabs_flash_v2_5","speech.elevenlabs_v3","speech.elevenlabs_multilingual_v2","music.elevenlabs_music_v1","music.lyria3_pro","sfx.elevenlabs_v1","transcription.whisper_v1","image_edit.bria_background_remove","video_upscale.fal_video_upscaler","lipsync.lipsync_2_pro","lipsync.sync_lipsync_v2_pro","lipsync.sync_lipsync_v3"]},"object":{"type":"string","enum":["model"]},"capability":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"status":{"type":"string","enum":["available","preview"]},"is_default":{"type":"boolean"},"limits":{"type":"object","additionalProperties":true},"capabilities":{"type":"object","description":"Per-model input capabilities. Determines which combinations of fields the generation endpoint accepts.","properties":{"text_to_output":{"type":"boolean"},"image_to_output":{"type":"boolean"},"reference_images":{"type":"boolean"},"source_video":{"type":"boolean"},"motion_control":{"type":"boolean"},"first_last_frame":{"type":"boolean"}}}},"example":{"id":"image.genfire_v1","object":"model","capability":"image_generation","name":"GenFire v1","description":"GenFire's signature image model — tuned for ad/product creative.","status":"available","is_default":false,"limits":{"aspect_ratios":["1:1","16:9","9:16","4:3","3:4"],"max_count":4},"capabilities":{"text_to_output":true,"image_to_output":true,"reference_images":false,"source_video":false,"motion_control":false,"first_last_frame":false}}},"ModelList":{"type":"object","properties":{"object":{"type":"string","enum":["list"]},"data":{"type":"array","items":{"$ref":"#/components/schemas/Model"}}},"example":{"object":"list","data":[{"id":"image.genfire_v1","object":"model","capability":"image_generation","name":"GenFire v1","description":"GenFire's signature image model — tuned for ad/product creative.","status":"available","is_default":false,"limits":{"aspect_ratios":["1:1","16:9","9:16","4:3","3:4"],"max_count":4},"capabilities":{"text_to_output":true,"image_to_output":true,"reference_images":false,"source_video":false,"motion_control":false,"first_last_frame":false}},{"id":"image.nano_banana_2","object":"model","capability":"image_generation","name":"Nano Banana 2","description":"Google's general-purpose image model. Fast, broad subject coverage. Default.","status":"available","is_default":true,"limits":{"aspect_ratios":["1:1","16:9","9:16","4:3","3:4","21:9","9:21"],"max_count":4},"capabilities":{"text_to_output":true,"image_to_output":true,"reference_images":false,"source_video":false,"motion_control":false,"first_last_frame":false}},{"id":"image.nano_banana_pro","object":"model","capability":"image_generation","name":"Nano Banana Pro","description":"Premium photoreal image generation, higher fidelity than Nano Banana 2.","status":"available","is_default":false,"limits":{"aspect_ratios":["1:1","16:9","9:16","4:3","3:4"],"max_count":4},"capabilities":{"text_to_output":true,"image_to_output":true,"reference_images":false,"source_video":false,"motion_control":false,"first_last_frame":false}},{"id":"image.nano_banana","object":"model","capability":"image_generation","name":"Nano Banana","description":"Standard speed and quality. Cheaper than Pro for high-volume use.","status":"available","is_default":false,"limits":{"aspect_ratios":["1:1","16:9","9:16","4:3","3:4"],"max_count":4},"capabilities":{"text_to_output":true,"image_to_output":true,"reference_images":false,"source_video":false,"motion_control":false,"first_last_frame":false}},{"id":"image.gpt_image_2","object":"model","capability":"image_generation","name":"GPT Image 2","description":"OpenAI GPT Image 2 — premium photorealistic generation.","status":"available","is_default":false,"limits":{"aspect_ratios":["1:1","16:9","9:16","4:3","3:4"],"max_count":4},"capabilities":{"text_to_output":true,"image_to_output":true,"reference_images":false,"source_video":false,"motion_control":false,"first_last_frame":false}},{"id":"image.seedream_v45","object":"model","capability":"image_generation","name":"Seedream 4.5","description":"ByteDance Seedream 4.5 — strong product and ad visuals, photoreal.","status":"available","is_default":false,"limits":{"aspect_ratios":["1:1","16:9","9:16"],"max_count":4},"capabilities":{"text_to_output":true,"image_to_output":true,"reference_images":false,"source_video":false,"motion_control":false,"first_last_frame":false}},{"id":"image.seedream_v5_lite","object":"model","capability":"image_generation","name":"Seedream 5.0 Lite","description":"ByteDance Seedream 5.0 Lite — multilingual text rendering, web-search-aware.","status":"preview","is_default":false,"limits":{"aspect_ratios":["1:1","16:9","9:16"],"max_count":4},"capabilities":{"text_to_output":true,"image_to_output":true,"reference_images":false,"source_video":false,"motion_control":false,"first_last_frame":false}},{"id":"image.qwen_image_2","object":"model","capability":"image_generation","name":"Qwen Image 2","description":"Alibaba Qwen Image 2 — strong typography, posters, 2K generation.","status":"available","is_default":false,"limits":{"aspect_ratios":["1:1","16:9","9:16","4:3","3:4"],"max_count":4},"capabilities":{"text_to_output":true,"image_to_output":true,"reference_images":false,"source_video":false,"motion_control":false,"first_last_frame":false}},{"id":"image.qwen_image_2_pro","object":"model","capability":"image_generation","name":"Qwen Image 2 Pro","description":"Premium Qwen Image 2 with enhanced detail.","status":"available","is_default":false,"limits":{"aspect_ratios":["1:1","16:9","9:16","4:3","3:4"],"max_count":4},"capabilities":{"text_to_output":true,"image_to_output":true,"reference_images":false,"source_video":false,"motion_control":false,"first_last_frame":false}},{"id":"image.recraft_v4","object":"model","capability":"image_generation","name":"Recraft V4","description":"Design-grade image generation with reliable text rendering.","status":"available","is_default":false,"limits":{"aspect_ratios":["1:1","16:9","9:16","4:3","3:4"],"max_count":4},"capabilities":{"text_to_output":true,"image_to_output":false,"reference_images":false,"source_video":false,"motion_control":false,"first_last_frame":false}},{"id":"image.recraft_v4_pro","object":"model","capability":"image_generation","name":"Recraft V4 Pro","description":"Premium Recraft V4 — top quality for marketing/branding visuals.","status":"available","is_default":false,"limits":{"aspect_ratios":["1:1","16:9","9:16","4:3","3:4"],"max_count":4},"capabilities":{"text_to_output":true,"image_to_output":false,"reference_images":false,"source_video":false,"motion_control":false,"first_last_frame":false}},{"id":"image.grok_imagine","object":"model","capability":"image_generation","name":"Grok Imagine","description":"xAI Grok Imagine — stylized, strong prompt following.","status":"available","is_default":false,"limits":{"aspect_ratios":["1:1","16:9","9:16"],"max_count":4},"capabilities":{"text_to_output":true,"image_to_output":true,"reference_images":false,"source_video":false,"motion_control":false,"first_last_frame":false}},{"id":"video.veo_3_1","object":"model","capability":"video_generation","name":"Veo 3.1","description":"Google Veo 3.1 — premium text/image-to-video with native audio. Supports first-last-frame interpolation. Default.","status":"available","is_default":true,"limits":{"aspect_ratios":["16:9","9:16","1:1"],"duration_seconds":[4,5,8],"supports_audio":true},"capabilities":{"text_to_output":true,"image_to_output":true,"reference_images":true,"source_video":false,"motion_control":false,"first_last_frame":true}},{"id":"video.veo_3_1_fast","object":"model","capability":"video_generation","name":"Veo 3.1 Fast","description":"Cheaper, faster Veo 3.1 variant. Supports first-last-frame interpolation.","status":"available","is_default":false,"limits":{"aspect_ratios":["16:9","9:16","1:1"],"duration_seconds":[4,5,8],"supports_audio":true},"capabilities":{"text_to_output":true,"image_to_output":true,"reference_images":false,"source_video":false,"motion_control":false,"first_last_frame":true}},{"id":"video.veo_3_1_lite","object":"model","capability":"video_generation","name":"Veo 3.1 Lite","description":"Lower-cost Lite variant of Veo 3.1. Supports first-last-frame interpolation.","status":"available","is_default":false,"limits":{"aspect_ratios":["16:9","9:16","1:1"],"duration_seconds":[4,5,8],"supports_audio":true},"capabilities":{"text_to_output":true,"image_to_output":true,"reference_images":false,"source_video":false,"motion_control":false,"first_last_frame":true}},{"id":"video.veo_3_1_extend","object":"model","capability":"video_generation","name":"Veo 3.1 Extend","description":"Extend an existing Veo-created video by up to 7 seconds. Requires source_video_url.","status":"available","is_default":false,"limits":{"aspect_ratios":["16:9","9:16"],"duration_seconds":[7],"supports_audio":true},"capabilities":{"text_to_output":false,"image_to_output":false,"reference_images":false,"source_video":true,"motion_control":false,"first_last_frame":false}},{"id":"video.veo_3","object":"model","capability":"video_generation","name":"Veo 3","description":"Veo 3 — high-quality cinematic generation with audio (predecessor to Veo 3.1).","status":"available","is_default":false,"limits":{"aspect_ratios":["16:9","9:16"],"duration_seconds":[8],"supports_audio":true},"capabilities":{"text_to_output":true,"image_to_output":true,"reference_images":false,"source_video":false,"motion_control":false,"first_last_frame":false}},{"id":"video.veo_3_fast","object":"model","capability":"video_generation","name":"Veo 3 Fast","description":"Cheaper Veo 3 variant — same quality tier, faster turnaround.","status":"available","is_default":false,"limits":{"aspect_ratios":["16:9","9:16"],"duration_seconds":[8],"supports_audio":true},"capabilities":{"text_to_output":true,"image_to_output":true,"reference_images":false,"source_video":false,"motion_control":false,"first_last_frame":false}},{"id":"video.kling_o3","object":"model","capability":"video_generation","name":"Kling O3 Standard","description":"Kling O3 standard — smooth motion, strong subject consistency.","status":"available","is_default":false,"limits":{"aspect_ratios":["16:9","9:16","1:1"],"duration_seconds":[5,10]},"capabilities":{"text_to_output":true,"image_to_output":true,"reference_images":true,"source_video":false,"motion_control":false,"first_last_frame":false}},{"id":"video.kling_o3_pro","object":"model","capability":"video_generation","name":"Kling O3 Pro","description":"Pro tier of Kling O3 — better quality at higher cost. Supports video-to-video reference (use source_video_url + reference_image_urls).","status":"available","is_default":false,"limits":{"aspect_ratios":["16:9","9:16","1:1"],"duration_seconds":[5,10]},"capabilities":{"text_to_output":true,"image_to_output":true,"reference_images":true,"source_video":false,"motion_control":false,"first_last_frame":false}},{"id":"video.kling_o3_4k","object":"model","capability":"video_generation","name":"Kling O3 4K","description":"Kling O3 at 4K resolution. Higher cost, top-tier quality.","status":"available","is_default":false,"limits":{"aspect_ratios":["16:9","9:16","1:1"],"duration_seconds":[5,10],"resolution":"4k"},"capabilities":{"text_to_output":true,"image_to_output":true,"reference_images":true,"source_video":false,"motion_control":false,"first_last_frame":false}},{"id":"video.kling_v3","object":"model","capability":"video_generation","name":"Kling V3 Standard","description":"Kling V3 standard.","status":"available","is_default":false,"limits":{"aspect_ratios":["16:9","9:16","1:1"],"duration_seconds":[5,10]},"capabilities":{"text_to_output":true,"image_to_output":true,"reference_images":false,"source_video":false,"motion_control":false,"first_last_frame":false}},{"id":"video.kling_v3_pro","object":"model","capability":"video_generation","name":"Kling V3 Pro","description":"Kling V3 pro — top quality.","status":"available","is_default":false,"limits":{"aspect_ratios":["16:9","9:16","1:1"],"duration_seconds":[5,10]},"capabilities":{"text_to_output":true,"image_to_output":true,"reference_images":false,"source_video":false,"motion_control":false,"first_last_frame":false}},{"id":"video.kling_v3_motion_control","object":"model","capability":"video_generation","name":"Kling V3 Motion Control","description":"Transfer motion from a reference video onto a character image. Requires both image_url (character) and source_video_url (motion reference).","status":"available","is_default":false,"limits":{"aspect_ratios":["16:9","9:16","1:1"],"duration_seconds":[5]},"capabilities":{"text_to_output":false,"image_to_output":false,"reference_images":false,"source_video":false,"motion_control":true,"first_last_frame":false}},{"id":"video.kling_v3_pro_motion_control","object":"model","capability":"video_generation","name":"Kling V3 Pro Motion Control","description":"Pro-tier Kling V3 motion-control — higher quality character animation. Requires both image_url and source_video_url.","status":"available","is_default":false,"limits":{"aspect_ratios":["16:9","9:16","1:1"],"duration_seconds":[5]},"capabilities":{"text_to_output":false,"image_to_output":false,"reference_images":false,"source_video":false,"motion_control":true,"first_last_frame":false}},{"id":"video.kling_v3_4k","object":"model","capability":"video_generation","name":"Kling V3 4K","description":"Kling V3 at 4K resolution.","status":"available","is_default":false,"limits":{"aspect_ratios":["16:9","9:16","1:1"],"duration_seconds":[5,10],"resolution":"4k"},"capabilities":{"text_to_output":true,"image_to_output":true,"reference_images":false,"source_video":false,"motion_control":false,"first_last_frame":false}},{"id":"video.kling_v26","object":"model","capability":"video_generation","name":"Kling 2.6","description":"Kling 2.6 standard — text/image to video.","status":"available","is_default":false,"limits":{"aspect_ratios":["16:9","9:16","1:1"],"duration_seconds":[5,10]},"capabilities":{"text_to_output":true,"image_to_output":true,"reference_images":false,"source_video":false,"motion_control":false,"first_last_frame":false}},{"id":"video.kling_v26_pro","object":"model","capability":"video_generation","name":"Kling 2.6 Pro","description":"Kling 2.6 pro tier — higher quality.","status":"available","is_default":false,"limits":{"aspect_ratios":["16:9","9:16","1:1"],"duration_seconds":[5,10]},"capabilities":{"text_to_output":true,"image_to_output":true,"reference_images":false,"source_video":false,"motion_control":true,"first_last_frame":false}},{"id":"video.kling_v26_motion_control","object":"model","capability":"video_generation","name":"Kling 2.6 Motion Control","description":"Motion-control variant of Kling 2.6 (legacy). Requires image_url + source_video_url.","status":"available","is_default":false,"limits":{"aspect_ratios":["16:9","9:16","1:1"],"duration_seconds":[5]},"capabilities":{"text_to_output":false,"image_to_output":false,"reference_images":false,"source_video":false,"motion_control":true,"first_last_frame":false}},{"id":"video.kling_v25_turbo","object":"model","capability":"video_generation","name":"Kling 2.5 Turbo Pro","description":"Faster Kling variant (legacy but reliable).","status":"available","is_default":false,"limits":{"aspect_ratios":["16:9","9:16","1:1"],"duration_seconds":[5,10]},"capabilities":{"text_to_output":true,"image_to_output":true,"reference_images":false,"source_video":false,"motion_control":false,"first_last_frame":false}},{"id":"video.kling_v21_master","object":"model","capability":"video_generation","name":"Kling 2.1 Master","description":"Kling 2.1 Master (legacy) — enhanced quality.","status":"available","is_default":false,"limits":{"aspect_ratios":["16:9","9:16","1:1"],"duration_seconds":[5,10]},"capabilities":{"text_to_output":true,"image_to_output":true,"reference_images":false,"source_video":false,"motion_control":false,"first_last_frame":false}},{"id":"video.sora_2","object":"model","capability":"video_generation","name":"Sora 2","description":"OpenAI Sora 2 — text and image to video, 4–20s.","status":"available","is_default":false,"limits":{"aspect_ratios":["16:9","9:16","1:1"],"duration_seconds":[4,8,12,16,20]},"capabilities":{"text_to_output":true,"image_to_output":true,"reference_images":false,"source_video":false,"motion_control":false,"first_last_frame":false}},{"id":"video.hailuo_23","object":"model","capability":"video_generation","name":"Hailuo 2.3","description":"MiniMax Hailuo 2.3 — dynamic video generation.","status":"available","is_default":false,"limits":{"aspect_ratios":["16:9","9:16","1:1"],"duration_seconds":[6,10]},"capabilities":{"text_to_output":true,"image_to_output":true,"reference_images":false,"source_video":false,"motion_control":false,"first_last_frame":false}},{"id":"video.hailuo_23_pro","object":"model","capability":"video_generation","name":"Hailuo 2.3 Pro","description":"MiniMax Hailuo 2.3 Pro tier.","status":"available","is_default":false,"limits":{"aspect_ratios":["16:9","9:16","1:1"],"duration_seconds":[6,10]},"capabilities":{"text_to_output":true,"image_to_output":true,"reference_images":false,"source_video":false,"motion_control":false,"first_last_frame":false}},{"id":"video.hailuo_02","object":"model","capability":"video_generation","name":"Hailuo 02","description":"MiniMax Hailuo 02 (legacy) — image-to-video standard tier.","status":"available","is_default":false,"limits":{"aspect_ratios":["16:9","9:16","1:1"],"duration_seconds":[6,10]},"capabilities":{"text_to_output":true,"image_to_output":true,"reference_images":false,"source_video":false,"motion_control":false,"first_last_frame":false}},{"id":"video.hailuo_02_fast","object":"model","capability":"video_generation","name":"Hailuo 02 Fast","description":"Faster Hailuo 02 image-to-video variant.","status":"available","is_default":false,"limits":{"aspect_ratios":["16:9","9:16","1:1"],"duration_seconds":[6,10]},"capabilities":{"text_to_output":false,"image_to_output":true,"reference_images":false,"source_video":false,"motion_control":false,"first_last_frame":false}},{"id":"video.hailuo_23_fast","object":"model","capability":"video_generation","name":"Hailuo 2.3 Fast","description":"Faster Hailuo 2.3 image-to-video standard tier.","status":"available","is_default":false,"limits":{"aspect_ratios":["16:9","9:16","1:1"],"duration_seconds":[6,10]},"capabilities":{"text_to_output":false,"image_to_output":true,"reference_images":false,"source_video":false,"motion_control":false,"first_last_frame":false}},{"id":"video.hailuo_23_fast_pro","object":"model","capability":"video_generation","name":"Hailuo 2.3 Fast Pro","description":"Faster Hailuo 2.3 pro-tier image-to-video.","status":"available","is_default":false,"limits":{"aspect_ratios":["16:9","9:16","1:1"],"duration_seconds":[6,10]},"capabilities":{"text_to_output":false,"image_to_output":true,"reference_images":false,"source_video":false,"motion_control":false,"first_last_frame":false}},{"id":"video.luma_dream_machine","object":"model","capability":"video_generation","name":"Luma Dream Machine","description":"Luma Dream Machine — fluid motion, distinctive style.","status":"available","is_default":false,"limits":{"aspect_ratios":["16:9","9:16","1:1"],"duration_seconds":[5,9]},"capabilities":{"text_to_output":true,"image_to_output":true,"reference_images":false,"source_video":false,"motion_control":false,"first_last_frame":false}},{"id":"video.wan_v22","object":"model","capability":"video_generation","name":"WAN 2.2","description":"WAN 2.2 — strong character animation.","status":"preview","is_default":false,"limits":{"aspect_ratios":["16:9","9:16","1:1"],"duration_seconds":[5,8]},"capabilities":{"text_to_output":true,"image_to_output":true,"reference_images":false,"source_video":false,"motion_control":false,"first_last_frame":false}},{"id":"video.wan_25_preview","object":"model","capability":"video_generation","name":"WAN 2.5 Preview","description":"WAN 2.5 preview — newer than 2.2, may change without notice.","status":"preview","is_default":false,"limits":{"aspect_ratios":["16:9","9:16","1:1"],"duration_seconds":[5,8]},"capabilities":{"text_to_output":true,"image_to_output":true,"reference_images":false,"source_video":false,"motion_control":false,"first_last_frame":false}},{"id":"video.wan_animate_replace","object":"model","capability":"video_generation","name":"WAN Animate (Replace)","description":"WAN animate-replace — swap subject in source video using a reference image. Requires image_url + source_video_url.","status":"preview","is_default":false,"limits":{"aspect_ratios":["16:9","9:16","1:1"],"duration_seconds":[5]},"capabilities":{"text_to_output":false,"image_to_output":false,"reference_images":false,"source_video":false,"motion_control":true,"first_last_frame":false}},{"id":"video.wan_animate_move","object":"model","capability":"video_generation","name":"WAN Animate (Move)","description":"WAN animate-move — animate static images with natural motion from a reference video. Requires image_url + source_video_url.","status":"preview","is_default":false,"limits":{"aspect_ratios":["16:9","9:16","1:1"],"duration_seconds":[5]},"capabilities":{"text_to_output":false,"image_to_output":false,"reference_images":false,"source_video":false,"motion_control":true,"first_last_frame":false}},{"id":"video.seedance_2_0","object":"model","capability":"video_generation","name":"Seedance 2.0","description":"ByteDance Seedance 2.0 — text/image/reference to video. Routes via BytePlus when configured.","status":"available","is_default":false,"limits":{"aspect_ratios":["16:9","9:16","1:1"],"duration_seconds":[4,5,8,10,12,15],"resolutions":["480p","720p","1080p"]},"capabilities":{"text_to_output":true,"image_to_output":true,"reference_images":true,"source_video":false,"motion_control":false,"first_last_frame":false}},{"id":"video.seedance_2_0_fast","object":"model","capability":"video_generation","name":"Seedance 2.0 Fast","description":"Faster, cheaper Seedance 2.0 variant.","status":"available","is_default":false,"limits":{"aspect_ratios":["16:9","9:16","1:1"],"duration_seconds":[4,5,8,10,12,15],"resolutions":["480p","720p","1080p"]},"capabilities":{"text_to_output":true,"image_to_output":true,"reference_images":true,"source_video":false,"motion_control":false,"first_last_frame":false}},{"id":"video.grok_video","object":"model","capability":"video_generation","name":"Grok Imagine Video","description":"xAI Grok Imagine — high-fidelity text/image to video.","status":"available","is_default":false,"limits":{"aspect_ratios":["16:9","9:16","1:1"],"duration_seconds":[4,5,8,10,15]},"capabilities":{"text_to_output":true,"image_to_output":true,"reference_images":true,"source_video":false,"motion_control":false,"first_last_frame":false}},{"id":"video.grok_video_edit","object":"model","capability":"video_generation","name":"Grok Imagine Edit","description":"Edit existing videos with text prompts. Requires source_video_url.","status":"available","is_default":false,"limits":{"aspect_ratios":["16:9","9:16","1:1"],"duration_seconds":[4,5,8,10]},"capabilities":{"text_to_output":false,"image_to_output":false,"reference_images":false,"source_video":true,"motion_control":false,"first_last_frame":false}},{"id":"video.grok_video_extend","object":"model","capability":"video_generation","name":"Grok Imagine Extend","description":"Extend an existing video by 2–10s. Requires source_video_url.","status":"available","is_default":false,"limits":{"aspect_ratios":["16:9","9:16","1:1"],"duration_seconds":[2,5,10]},"capabilities":{"text_to_output":false,"image_to_output":false,"reference_images":false,"source_video":true,"motion_control":false,"first_last_frame":false}},{"id":"video.happy_horse","object":"model","capability":"video_generation","name":"Happy Horse","description":"Alibaba Happy Horse — text/image/reference-to-video and video-edit.","status":"preview","is_default":false,"limits":{"aspect_ratios":["16:9","9:16","1:1"],"duration_seconds":[3,5,8,10,15]},"capabilities":{"text_to_output":true,"image_to_output":true,"reference_images":true,"source_video":true,"motion_control":false,"first_last_frame":false}},{"id":"speech.elevenlabs_turbo_v2_5","object":"model","capability":"speech_generation","name":"ElevenLabs Turbo v2.5","description":"Low-latency TTS, balance of quality and speed. Default.","status":"available","is_default":true,"limits":{"max_characters":40000}},{"id":"speech.elevenlabs_flash_v2_5","object":"model","capability":"speech_generation","name":"ElevenLabs Flash v2.5","description":"Fastest ElevenLabs TTS, lowest cost.","status":"available","is_default":false,"limits":{"max_characters":40000}},{"id":"speech.elevenlabs_v3","object":"model","capability":"speech_generation","name":"ElevenLabs v3","description":"Highest-quality expressive voice generation.","status":"available","is_default":false,"limits":{"max_characters":40000}},{"id":"speech.elevenlabs_multilingual_v2","object":"model","capability":"speech_generation","name":"ElevenLabs Multilingual v2","description":"29 languages, high fidelity.","status":"available","is_default":false,"limits":{"max_characters":40000}},{"id":"music.elevenlabs_music_v1","object":"model","capability":"music_generation","name":"ElevenLabs Music v1","description":"Prompt-based music generation up to 5 minutes.","status":"available","is_default":true,"limits":{"max_duration_seconds":300}},{"id":"music.lyria3_pro","object":"model","capability":"music_generation","name":"Lyria 3 Pro","description":"Google Lyria 3 Pro — full structured songs up to 3 minutes with vocals, lyrics, and multi-language support. Accepts an optional image_url for inspiration and a negative_prompt. Flat per-generation fee (duration is not configurable).","status":"available","is_default":false,"limits":{"max_duration_seconds":180,"prompt_max_length":5000},"capabilities":{"text_to_output":true,"image_to_output":true,"reference_images":false,"source_video":false,"motion_control":false,"first_last_frame":false}},{"id":"sfx.elevenlabs_v1","object":"model","capability":"sound_effect_generation","name":"ElevenLabs SFX","description":"Sound effect generation up to 30s.","status":"available","is_default":true,"limits":{"max_duration_seconds":30}},{"id":"transcription.whisper_v1","object":"model","capability":"transcription","name":"OpenAI Whisper v1","description":"Speech-to-text with word and segment timestamps. Accepts a direct audio/video URL or a YouTube URL. Async — returns a queued run; poll genfire_get_run for the transcript.","status":"available","is_default":true,"limits":{"max_file_mb":500,"max_duration_seconds":7200}},{"id":"image_edit.bria_background_remove","object":"model","capability":"image_editing","name":"BRIA Background Remove","description":"Remove the background from an image. Returns a transparent PNG.","status":"available","is_default":true,"limits":{"input":"image_url"}},{"id":"video_upscale.fal_video_upscaler","object":"model","capability":"video_upscaling","name":"FAL Video Upscaler","description":"Upscale a video by 2x or 4x. Async — returns a queued run; poll genfire_get_run for completion.","status":"available","is_default":true,"limits":{"scale_factors":[2,4]}},{"id":"lipsync.lipsync_2_pro","object":"model","capability":"lipsync_generation","name":"Lipsync 2 Pro","description":"High-quality lip-sync at 480p or 720p. Default.","status":"available","is_default":true,"limits":{"resolutions":["480p","720p"]}},{"id":"lipsync.sync_lipsync_v2_pro","object":"model","capability":"lipsync_generation","name":"Sync Lipsync v2 Pro","description":"Alternative lip-sync engine.","status":"available","is_default":false,"limits":{"resolutions":["480p","720p"]}},{"id":"lipsync.sync_lipsync_v3","object":"model","capability":"lipsync_generation","name":"Sync Lipsync v3","description":"Premium lip-sync engine — higher fidelity than v2 Pro.","status":"available","is_default":false,"limits":{"resolutions":["480p","720p"]}}]}},"ModelPricingEntry":{"type":"object","properties":{"model":{"type":"string"},"capability":{"type":"string"},"unit":{"type":"string","description":"per_image, per_second, or per_character."},"credits":{"type":"number"},"operation_key":{"type":"string","description":"Internal pricing key (informational)."},"notes":{"type":"string","nullable":true}},"required":["model","capability","unit","credits","operation_key"],"example":{"model":"image.nano_banana_2","capability":"image_generation","unit":"per_image","credits":3,"operation_key":"nano_banana_2"}},"ModelPricingList":{"type":"object","properties":{"object":{"type":"string","enum":["list"]},"data":{"type":"array","items":{"$ref":"#/components/schemas/ModelPricingEntry"}}},"example":{"object":"list","data":[{"model":"image.nano_banana_2","capability":"image_generation","unit":"per_image","credits":3,"operation_key":"nano_banana_2"},{"model":"video.veo_3_1","capability":"video_generation","unit":"per_second","credits":16,"operation_key":"veo31_fast","notes":"Audio adds a multiplier when generate_audio=true."},{"model":"speech.elevenlabs_turbo_v2_5","capability":"speech_generation","unit":"per_character","credits":0.025,"operation_key":"elevenLabsTts"}]}},"UsageBreakdownEntry":{"type":"object","properties":{"group":{"type":"string","description":"Bucket label (model id, capability, or YYYY-MM-DD day)."},"credits_spent":{"type":"number"},"runs_count":{"type":"integer"},"successful_runs":{"type":"integer"},"failed_runs":{"type":"integer"},"avg_credits_per_run":{"type":"number"}},"required":["group","credits_spent","runs_count","successful_runs","failed_runs","avg_credits_per_run"]},"UsageSummary":{"type":"object","properties":{"object":{"type":"string","enum":["usage_summary"]},"period":{"type":"object","properties":{"start":{"type":"string","format":"date-time"},"end":{"type":"string","format":"date-time"}},"required":["start","end"]},"group_by":{"type":"string","enum":["model","capability","day","none"]},"totals":{"type":"object","properties":{"credits_spent":{"type":"number"},"runs_count":{"type":"integer"},"successful_runs":{"type":"integer"},"failed_runs":{"type":"integer"}},"required":["credits_spent","runs_count","successful_runs","failed_runs"]},"breakdown":{"type":"array","items":{"$ref":"#/components/schemas/UsageBreakdownEntry"}}},"required":["object","period","group_by","totals","breakdown"],"example":{"object":"usage_summary","period":{"start":"2026-04-01T00:00:00.000Z","end":"2026-04-30T23:59:59.999Z"},"group_by":"model","totals":{"credits_spent":4823,"runs_count":187,"successful_runs":178,"failed_runs":9},"breakdown":[{"group":"video.veo_3_1","credits_spent":2400,"runs_count":30,"successful_runs":30,"failed_runs":0,"avg_credits_per_run":80},{"group":"image.nano_banana_2","credits_spent":423,"runs_count":141,"successful_runs":138,"failed_runs":3,"avg_credits_per_run":3}]}},"Run":{"type":"object","properties":{"id":{"type":"string"},"object":{"type":"string","enum":["run"]},"status":{"type":"string","enum":["queued","processing","completed","failed"]},"capability":{"type":"string"},"endpoint":{"type":"string"},"model":{"type":"string","nullable":true},"request_id":{"type":"string"},"input_summary":{"type":"object","nullable":true,"additionalProperties":true},"output":{"type":"object","nullable":true,"additionalProperties":true},"usage":{"type":"object","nullable":true,"additionalProperties":true},"error":{"type":"object","nullable":true,"properties":{"code":{"type":"string"},"message":{"type":"string"}}},"resource_id":{"type":"string","nullable":true},"provider_request_id":{"type":"string","nullable":true},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"},"completed_at":{"type":"string","format":"date-time","nullable":true}},"example":{"id":"run_img_123","object":"run","status":"completed","capability":"image_generation","endpoint":"images.generations.create","model":"image.nano_banana_2","request_id":"run_img_123","input_summary":{"prompt":"Studio product photo of a matte black water bottle","model":"image.nano_banana_2","aspect_ratio":"1:1","count":1},"output":{"images":[{"url":"https://cdn.genfire.ai/output/image-001.png"}],"output_url":"https://cdn.genfire.ai/output/image-001.png"},"usage":{"credits":8},"error":null,"resource_id":null,"provider_request_id":null,"created_at":"2026-03-25T12:00:00.000Z","updated_at":"2026-03-25T12:00:02.000Z","completed_at":"2026-03-25T12:00:02.000Z"}},"RunList":{"type":"object","properties":{"object":{"type":"string","enum":["list"]},"data":{"type":"array","items":{"$ref":"#/components/schemas/Run"}}},"example":{"object":"list","data":[{"id":"run_img_123","object":"run","status":"completed","capability":"image_generation","endpoint":"images.generations.create","model":"image.nano_banana_2","request_id":"run_img_123","input_summary":{"prompt":"Studio product photo of a matte black water bottle","model":"image.nano_banana_2","aspect_ratio":"1:1","count":1},"output":{"images":[{"url":"https://cdn.genfire.ai/output/image-001.png"}],"output_url":"https://cdn.genfire.ai/output/image-001.png"},"usage":{"credits":8},"error":null,"resource_id":null,"provider_request_id":null,"created_at":"2026-03-25T12:00:00.000Z","updated_at":"2026-03-25T12:00:02.000Z","completed_at":"2026-03-25T12:00:02.000Z"},{"id":"run_vid_123","object":"run","status":"queued","capability":"video_generation","endpoint":"videos.generations.create","model":"video.veo_3_1","request_id":"run_vid_123","input_summary":{"prompt":"Cinematic close-up of a luxury watch with soft lighting","model":"video.veo_3_1","aspect_ratio":"16:9","duration":8,"has_image":false,"generate_audio":true},"output":null,"usage":null,"error":null,"resource_id":"video_123","provider_request_id":"provider_req_123","created_at":"2026-03-25T12:00:00.000Z","updated_at":"2026-03-25T12:00:00.000Z","completed_at":null}]}},"RunOutput":{"type":"object","properties":{"id":{"type":"string"},"object":{"type":"string","enum":["run_output"]},"status":{"type":"string"},"capability":{"type":"string"},"output":{"type":"object","nullable":true,"additionalProperties":true},"error":{"type":"object","nullable":true,"additionalProperties":true},"completed_at":{"type":"string","format":"date-time","nullable":true}},"example":{"id":"run_img_123","object":"run_output","status":"completed","capability":"image_generation","output":{"images":[{"url":"https://cdn.genfire.ai/output/image-001.png"}],"output_url":"https://cdn.genfire.ai/output/image-001.png"},"error":null,"completed_at":"2026-03-25T12:00:02.000Z"}},"Batch":{"type":"object","properties":{"id":{"type":"string"},"object":{"type":"string","enum":["batch"]},"mode":{"type":"string","enum":["workflow","operation"]},"target":{"type":"string"},"status":{"type":"string","enum":["queued","processing","completed","failed","partial"]},"total_items":{"type":"integer"},"completed_items":{"type":"integer"},"failed_items":{"type":"integer"},"concurrency":{"type":"integer"},"input_summary":{"type":"object","nullable":true,"additionalProperties":true},"output":{"type":"object","nullable":true,"additionalProperties":true},"error":{"type":"object","nullable":true,"additionalProperties":true},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"},"completed_at":{"type":"string","format":"date-time","nullable":true}},"example":{"id":"batch_123","object":"batch","mode":"workflow","target":"hook_pack","status":"queued","total_items":2,"completed_items":0,"failed_items":0,"concurrency":2,"input_summary":{"mode":"workflow","target":"hook_pack","item_count":2},"output":null,"error":null,"created_at":"2026-03-25T12:00:00.000Z","updated_at":"2026-03-25T12:00:00.000Z","completed_at":null}},"BatchList":{"type":"object","properties":{"object":{"type":"string","enum":["list"]},"data":{"type":"array","items":{"$ref":"#/components/schemas/Batch"}}},"example":{"object":"list","data":[{"id":"batch_123","object":"batch","mode":"workflow","target":"hook_pack","status":"queued","total_items":2,"completed_items":0,"failed_items":0,"concurrency":2,"input_summary":{"mode":"workflow","target":"hook_pack","item_count":2},"output":null,"error":null,"created_at":"2026-03-25T12:00:00.000Z","updated_at":"2026-03-25T12:00:00.000Z","completed_at":null}]}},"BatchItem":{"type":"object","properties":{"id":{"type":"string"},"object":{"type":"string","enum":["batch_item"]},"batch_id":{"type":"string"},"index":{"type":"integer"},"target":{"type":"string"},"status":{"type":"string","enum":["queued","processing","completed","failed"]},"run_id":{"type":"string","nullable":true},"input_summary":{"type":"object","nullable":true,"additionalProperties":true},"output":{"type":"object","nullable":true,"additionalProperties":true},"error":{"type":"object","nullable":true,"additionalProperties":true},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"},"completed_at":{"type":"string","format":"date-time","nullable":true}},"example":{"id":"batch_item_123","object":"batch_item","batch_id":"batch_123","index":0,"target":"hook_pack","status":"queued","run_id":null,"input_summary":{"prompt":"Portable blender for busy professionals"},"output":null,"error":null,"created_at":"2026-03-25T12:00:00.000Z","updated_at":"2026-03-25T12:00:00.000Z","completed_at":null}},"BatchItemList":{"type":"object","properties":{"object":{"type":"string","enum":["list"]},"data":{"type":"array","items":{"$ref":"#/components/schemas/BatchItem"}}},"example":{"object":"list","data":[{"id":"batch_item_123","object":"batch_item","batch_id":"batch_123","index":0,"target":"hook_pack","status":"queued","run_id":null,"input_summary":{"prompt":"Portable blender for busy professionals"},"output":null,"error":null,"created_at":"2026-03-25T12:00:00.000Z","updated_at":"2026-03-25T12:00:00.000Z","completed_at":null}]}},"BatchCreateResponse":{"allOf":[{"$ref":"#/components/schemas/Batch"},{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/BatchItem"}}}}],"example":{"id":"batch_123","object":"batch","mode":"workflow","target":"hook_pack","status":"queued","total_items":2,"completed_items":0,"failed_items":0,"concurrency":2,"input_summary":{"mode":"workflow","target":"hook_pack","item_count":2},"output":null,"error":null,"created_at":"2026-03-25T12:00:00.000Z","updated_at":"2026-03-25T12:00:00.000Z","completed_at":null,"items":[{"id":"batch_item_123","object":"batch_item","batch_id":"batch_123","index":0,"target":"hook_pack","status":"queued","run_id":null,"input_summary":{"prompt":"Portable blender for busy professionals"},"output":null,"error":null,"created_at":"2026-03-25T12:00:00.000Z","updated_at":"2026-03-25T12:00:00.000Z","completed_at":null},{"id":"batch_item_124","object":"batch_item","batch_id":"batch_123","index":1,"target":"hook_pack","status":"queued","run_id":null,"input_summary":{"prompt":"Portable blender for college students"},"output":null,"error":null,"created_at":"2026-03-25T12:00:00.000Z","updated_at":"2026-03-25T12:00:00.000Z","completed_at":null}]}},"Workflow":{"type":"object","properties":{"id":{"type":"string","enum":["storyboard","hook_pack","ugc_ad","creative_pack","product_ad_variants"]},"object":{"type":"string","enum":["workflow"]},"name":{"type":"string"},"description":{"type":"string"},"status":{"type":"string","enum":["available"]},"input_schema":{"type":"object","additionalProperties":true},"output_schema":{"type":"object","additionalProperties":true}},"example":{"id":"storyboard","object":"workflow","name":"Storyboard Planning","description":"Create a creative project and generate the brief, brand kit, script, shot list, and storyboard planning outputs.","status":"available","input_schema":{"type":"object","required":["prompt"],"properties":{"prompt":{"type":"string"},"title":{"type":"string"},"aspect_ratio":{"type":"string","enum":["16:9","9:16","1:1"]}}},"output_schema":{"type":"object","properties":{"project_id":{"type":"string"},"status":{"type":"string"},"current_stage":{"type":"string"},"next_action":{"type":"string"}}}}},"WorkflowList":{"type":"object","properties":{"object":{"type":"string","enum":["list"]},"data":{"type":"array","items":{"$ref":"#/components/schemas/Workflow"}}},"example":{"object":"list","data":[{"id":"storyboard","object":"workflow","name":"Storyboard Planning","description":"Create a creative project and generate the brief, brand kit, script, shot list, and storyboard planning outputs.","status":"available","input_schema":{"type":"object","required":["prompt"],"properties":{"prompt":{"type":"string"},"title":{"type":"string"},"aspect_ratio":{"type":"string","enum":["16:9","9:16","1:1"]}}},"output_schema":{"type":"object","properties":{"project_id":{"type":"string"},"status":{"type":"string"},"current_stage":{"type":"string"},"next_action":{"type":"string"}}}},{"id":"hook_pack","object":"workflow","name":"Hook Pack","description":"Generate three monetizable UGC-style hooks plus a supporting body and CTA.","status":"available","input_schema":{"type":"object","required":["prompt"],"properties":{"prompt":{"type":"string"},"audience":{"type":"string"},"tone":{"type":"string","enum":["casual","professional","humorous","educational","persuasive","emotional"]},"length":{"type":"string","enum":["short","medium","long"]},"target_duration":{"type":"number"},"keywords":{"type":"array","items":{"type":"string"}},"additional_requirements":{"type":"string"}}},"output_schema":{"type":"object","properties":{"hooks":{"type":"array","items":{"type":"string"}},"body":{"type":"string"},"call_to_action":{"type":"string"},"full_script":{"type":"string"}}}},{"id":"ugc_ad","object":"workflow","name":"UGC Ad Script","description":"Generate an outcome-oriented UGC ad script with hooks, body, CTA, and a full spoken script.","status":"available","input_schema":{"type":"object","required":["prompt"],"properties":{"prompt":{"type":"string"},"audience":{"type":"string"},"tone":{"type":"string","enum":["casual","professional","humorous","educational","persuasive","emotional"]},"length":{"type":"string","enum":["short","medium","long"]},"target_duration":{"type":"number"},"keywords":{"type":"array","items":{"type":"string"}},"additional_requirements":{"type":"string"}}},"output_schema":{"type":"object","properties":{"hooks":{"type":"array","items":{"type":"string"}},"body":{"type":"string"},"call_to_action":{"type":"string"},"full_script":{"type":"string"}}}},{"id":"creative_pack","object":"workflow","name":"Creative Pack","description":"Build a product-aware creative pack with analysis, angles, hooks, and a monetizable script.","status":"available","input_schema":{"type":"object","properties":{"prompt":{"type":"string"},"product_url":{"type":"string","format":"uri"},"product_name":{"type":"string"},"product_description":{"type":"string"},"category":{"type":"string"},"audience":{"type":"string"},"tone":{"type":"string","enum":["casual","professional","humorous","educational","persuasive","emotional"]},"length":{"type":"string","enum":["short","medium","long"]},"image_urls":{"type":"array","items":{"type":"string","format":"uri"}},"additional_requirements":{"type":"string"}}},"output_schema":{"type":"object","properties":{"product":{"type":"object"},"analysis":{"type":"object"},"hooks":{"type":"array","items":{"type":"string"}},"body":{"type":"string"},"call_to_action":{"type":"string"},"full_script":{"type":"string"}}}},{"id":"product_ad_variants","object":"workflow","name":"Product Ad Variants","description":"Generate multiple UGC-style ad script variants for the same product or offer.","status":"available","input_schema":{"type":"object","properties":{"prompt":{"type":"string"},"product_name":{"type":"string"},"product_description":{"type":"string"},"audience":{"type":"string"},"tone":{"type":"string","enum":["casual","professional","humorous","educational","persuasive","emotional"]},"length":{"type":"string","enum":["short","medium","long"]},"variant_count":{"type":"number","minimum":1,"maximum":5},"additional_requirements":{"type":"string"}}},"output_schema":{"type":"object","properties":{"variant_count":{"type":"number"},"variants":{"type":"array","items":{"type":"object"}}}}}]}},"WebhookEndpoint":{"type":"object","properties":{"id":{"type":"string"},"object":{"type":"string","enum":["webhook_endpoint"]},"url":{"type":"string"},"description":{"type":"string","nullable":true},"status":{"type":"string","enum":["active","disabled"]},"events":{"type":"array","items":{"type":"string","enum":["run.completed","run.failed","batch.completed","batch.failed"]}},"signing_secret_preview":{"type":"string"},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"},"last_delivery_at":{"type":"string","format":"date-time","nullable":true}},"example":{"id":"wh_123","object":"webhook_endpoint","url":"https://example.com/webhooks/genfire","description":"Agency production endpoint","status":"active","events":["run.completed","run.failed"],"signing_secret_preview":"gfwsec_1234...abcd","created_at":"2026-03-25T12:00:00.000Z","updated_at":"2026-03-25T12:00:00.000Z","last_delivery_at":null}},"WebhookEndpointCreateResponse":{"allOf":[{"$ref":"#/components/schemas/WebhookEndpoint"},{"type":"object","properties":{"signing_secret":{"type":"string"}}}],"example":{"id":"wh_123","object":"webhook_endpoint","url":"https://example.com/webhooks/genfire","description":"Agency production endpoint","status":"active","events":["run.completed","run.failed"],"signing_secret_preview":"gfwsec_1234...abcd","created_at":"2026-03-25T12:00:00.000Z","updated_at":"2026-03-25T12:00:00.000Z","last_delivery_at":null,"signing_secret":"gfwsec_live_example_secret"}},"WebhookEndpointList":{"type":"object","properties":{"object":{"type":"string","enum":["list"]},"data":{"type":"array","items":{"$ref":"#/components/schemas/WebhookEndpoint"}}},"example":{"object":"list","data":[{"id":"wh_123","object":"webhook_endpoint","url":"https://example.com/webhooks/genfire","description":"Agency production endpoint","status":"active","events":["run.completed","run.failed"],"signing_secret_preview":"gfwsec_1234...abcd","created_at":"2026-03-25T12:00:00.000Z","updated_at":"2026-03-25T12:00:00.000Z","last_delivery_at":null}]}},"WebhookDelivery":{"type":"object","properties":{"id":{"type":"string"},"object":{"type":"string","enum":["webhook_delivery"]},"endpoint_id":{"type":"string"},"event_type":{"type":"string","enum":["run.completed","run.failed","batch.completed","batch.failed"]},"run_id":{"type":"string","nullable":true},"batch_id":{"type":"string","nullable":true},"status":{"type":"string","enum":["pending","success","failed"]},"attempt_count":{"type":"integer"},"max_attempts":{"type":"integer"},"response_status":{"type":"integer","nullable":true},"response_body":{"type":"string","nullable":true},"last_error":{"type":"string","nullable":true},"request_headers":{"type":"object","additionalProperties":{"type":"string"}},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"},"last_attempt_at":{"type":"string","format":"date-time","nullable":true},"next_attempt_at":{"type":"string","format":"date-time","nullable":true},"delivered_at":{"type":"string","format":"date-time","nullable":true}},"example":{"id":"delivery_123","object":"webhook_delivery","endpoint_id":"wh_123","event_type":"run.completed","run_id":"run_img_123","batch_id":null,"status":"success","attempt_count":1,"max_attempts":6,"response_status":200,"response_body":"ok","last_error":null,"request_headers":{"X-GenFire-Signature":"sha256=..."},"created_at":"2026-03-25T12:00:05.000Z","updated_at":"2026-03-25T12:00:05.000Z","last_attempt_at":"2026-03-25T12:00:05.000Z","next_attempt_at":null,"delivered_at":"2026-03-25T12:00:05.000Z"}},"WebhookDeliveryList":{"type":"object","properties":{"object":{"type":"string","enum":["list"]},"data":{"type":"array","items":{"$ref":"#/components/schemas/WebhookDelivery"}}},"example":{"object":"list","data":[{"id":"delivery_123","object":"webhook_delivery","endpoint_id":"wh_123","event_type":"run.completed","run_id":"run_img_123","batch_id":null,"status":"success","attempt_count":1,"max_attempts":6,"response_status":200,"response_body":"ok","last_error":null,"request_headers":{"X-GenFire-Signature":"sha256=..."},"created_at":"2026-03-25T12:00:05.000Z","updated_at":"2026-03-25T12:00:05.000Z","last_attempt_at":"2026-03-25T12:00:05.000Z","next_attempt_at":null,"delivered_at":"2026-03-25T12:00:05.000Z"}]}}}},"paths":{"/oauth/token":{"post":{"tags":["auth"],"summary":"Issue an OAuth access token","description":"Use OAuth client credentials for machine-to-machine access. API keys are supported on the same `/v1` endpoints and are usually the simplest option.\n\nNotes:\n- You can also send `client_id:client_secret` with HTTP Basic auth instead of putting them in JSON.\n- The returned access token is used in the same `Authorization: Bearer ...` header as an API key.","operationId":"post_oauth_token","responses":{"200":{"description":"OAuth access token issued","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OAuthToken"},"example":{"access_token":"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.example","token_type":"Bearer","expires_in":3600,"scope":"models:read runs:read images:write"}}}},"default":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"type":"https://api.genfire.ai/errors/invalid_prompt","title":"Invalid Prompt","status":400,"detail":"prompt is required.","code":"invalid_prompt","request_id":"req_123"}}}}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["grant_type","client_id","client_secret"],"properties":{"grant_type":{"type":"string","enum":["client_credentials"],"description":"Must be `client_credentials`."},"client_id":{"type":"string","description":"The OAuth client id created in the developer portal."},"client_secret":{"type":"string","description":"The OAuth client secret shown only when the client is created."},"scope":{"type":"string","description":"Optional space-separated scopes. Omit to receive the client’s default scopes."}},"additionalProperties":false},"example":{"grant_type":"client_credentials","client_id":"gfo_oauth_123","client_secret":"gfs_live_secret","scope":"models:read runs:read images:write"}}}}}},"/cli/auth/sessions":{"post":{"tags":["cli_auth"],"summary":"Start a CLI auth session","description":"Begins the browser-based PKCE handshake used by the GenFire CLI. The CLI generates a 43-128 character base64url `code_verifier`, derives `code_challenge = BASE64URL(SHA256(verifier))`, calls this endpoint, and opens `verification_url` in the user’s browser.\n\nNotes:\n- Sessions expire after 10 minutes if not approved.\n- Poll `GET /cli/auth/sessions/{sessionId}` to discover when the user has approved (or denied) the session.","operationId":"post_cli_auth_sessions","responses":{"201":{"description":"Start a CLI auth session response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CliAuthSessionStart"},"example":{"session_id":"clisess_8f3c4a2b1d6e7f9a0b1c2d3e","verification_url":"https://genfire.ai/cli-auth?session=clisess_8f3c4a2b1d6e7f9a0b1c2d3e","expires_at":"2026-05-04T17:21:25.985Z","requested_scopes":["account:read","images:write","uploads:write"],"label":"genfire-cli (laptop)"}}}},"default":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"type":"https://api.genfire.ai/errors/invalid_prompt","title":"Invalid Prompt","status":400,"detail":"prompt is required.","code":"invalid_prompt","request_id":"req_123"}}}}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["client_id","code_challenge","code_challenge_method"],"properties":{"client_id":{"type":"string","description":"Public CLI client id. Currently only `genfire-cli`."},"code_challenge":{"type":"string","description":"BASE64URL(SHA256(code_verifier)). 43-128 characters."},"code_challenge_method":{"type":"string","description":"Must be `S256`."},"scopes":{"type":"array","items":{"type":"string"},"description":"Optional list of scopes the CLI is requesting. Omit for the default key scopes."},"label":{"type":"string","description":"Optional human label shown to the user on the consent page (e.g. `genfire-cli (laptop)`)."}},"additionalProperties":false},"example":{"client_id":"genfire-cli","code_challenge":"E9Melhoa2OwvFrEMTJguCHaoeK1t8URWbuGJSstw-cM","code_challenge_method":"S256","scopes":["account:read","credits:read","models:read","runs:read","images:write","videos:write","uploads:write"],"label":"genfire-cli (laptop)"}}}}}},"/cli/auth/sessions/{sessionId}":{"get":{"tags":["cli_auth"],"summary":"Poll the status of a CLI auth session","description":"Returns the current status of a CLI auth session. The CLI polls this endpoint while the user completes the browser flow.\n\nNotes:\n- Status transitions: `pending` → `approved` (or `denied`) → `consumed` (after exchange).\n- A `consumed` or `expired` status means the CLI must restart the login flow.","operationId":"get_cli_auth_sessions_sessionId","responses":{"200":{"description":"Poll the status of a CLI auth session response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CliAuthSessionStatus"},"example":{"session_id":"clisess_8f3c4a2b1d6e7f9a0b1c2d3e","status":"approved","label":"genfire-cli (laptop)","requested_scopes":["account:read","images:write","uploads:write"],"expires_at":"2026-05-04T17:21:25.985Z"}}}},"default":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"type":"https://api.genfire.ai/errors/invalid_prompt","title":"Invalid Prompt","status":400,"detail":"prompt is required.","code":"invalid_prompt","request_id":"req_123"}}}}},"parameters":[{"in":"path","name":"sessionId","required":true,"description":"Session id returned from `POST /cli/auth/sessions`.","schema":{"type":"string"}}]}},"/cli/auth/sessions/{sessionId}/exchange":{"post":{"tags":["cli_auth"],"summary":"Exchange an approved CLI auth session for an API key","description":"Once `GET /cli/auth/sessions/{sessionId}` reports `approved`, the CLI submits its original `code_verifier` here. The server verifies `SHA256(code_verifier) === code_challenge`, then returns the freshly minted API key exactly once.\n\nNotes:\n- The `api_key` is returned exactly once. Store it securely (the CLI uses the OS keychain).\n- Sessions are single-use. Once exchanged, the same session cannot be exchanged again.\n- A 428 response means the user has not yet approved the session — keep polling.\n- A 410 response means the session expired or was already exchanged. Restart the CLI login.","operationId":"post_cli_auth_sessions_sessionId_exchange","responses":{"200":{"description":"Exchange an approved CLI auth session for an API key response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CliAuthSessionExchange"},"example":{"api_key":"gfa_live_abc123.xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx","scopes":["account:read","images:write","uploads:write"],"label":"genfire-cli (laptop)","session_expires_at":"2026-05-04T17:21:25.985Z"}}}},"default":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"type":"https://api.genfire.ai/errors/invalid_prompt","title":"Invalid Prompt","status":400,"detail":"prompt is required.","code":"invalid_prompt","request_id":"req_123"}}}}},"parameters":[{"in":"path","name":"sessionId","required":true,"description":"Session id returned from `POST /cli/auth/sessions`.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["code_verifier"],"properties":{"code_verifier":{"type":"string","description":"The original PKCE code_verifier the CLI generated when starting the session."}},"additionalProperties":false},"example":{"code_verifier":"M25iVXpKU3puUjFaYWg3T1NDTDQtcW1ROUY5YXlwalNoc0hhakxifmZHag"}}}}}},"/account":{"get":{"tags":["account"],"summary":"Get the authenticated account","description":"Returns the public API account linked to the calling API key or OAuth client.\n\nRequired scope: `account:read`.","operationId":"get_account","responses":{"200":{"description":"Get the authenticated account response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Account"},"example":{"id":"acct_user_123","object":"account","display_name":"GenFire Developer","email":"owner@example.com","plan":"pro","status":"active","created_at":"2026-03-25T12:00:00.000Z","updated_at":"2026-03-25T12:00:00.000Z"}}}},"default":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"type":"https://api.genfire.ai/errors/invalid_prompt","title":"Invalid Prompt","status":400,"detail":"prompt is required.","code":"invalid_prompt","request_id":"req_123"}}}}},"security":[{"bearerAuth":[]}]}},"/account/credits":{"get":{"tags":["account"],"summary":"Get the current credit balance","description":"Shows the credit balance for the authenticated account.\n\nRequired scope: `credits:read`.","operationId":"get_account_credits","responses":{"200":{"description":"Get the current credit balance response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreditBalance"},"example":{"account_id":"acct_user_123","balance":250,"currency":"credits"}}}},"default":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"type":"https://api.genfire.ai/errors/invalid_prompt","title":"Invalid Prompt","status":400,"detail":"prompt is required.","code":"invalid_prompt","request_id":"req_123"}}}}},"security":[{"bearerAuth":[]}]}},"/models":{"get":{"tags":["models"],"summary":"List public model aliases","description":"Use model aliases from this endpoint instead of internal provider ids. The aliases are stable and safe to pass back into generation endpoints.\n\nRequired scope: `models:read`.","operationId":"get_models","responses":{"200":{"description":"List public model aliases response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ModelList"},"example":{"object":"list","data":[{"id":"image.genfire_v1","object":"model","capability":"image_generation","name":"GenFire v1","description":"GenFire's signature image model — tuned for ad/product creative.","status":"available","is_default":false,"limits":{"aspect_ratios":["1:1","16:9","9:16","4:3","3:4"],"max_count":4},"capabilities":{"text_to_output":true,"image_to_output":true,"reference_images":false,"source_video":false,"motion_control":false,"first_last_frame":false}},{"id":"image.nano_banana_2","object":"model","capability":"image_generation","name":"Nano Banana 2","description":"Google's general-purpose image model. Fast, broad subject coverage. Default.","status":"available","is_default":true,"limits":{"aspect_ratios":["1:1","16:9","9:16","4:3","3:4","21:9","9:21"],"max_count":4},"capabilities":{"text_to_output":true,"image_to_output":true,"reference_images":false,"source_video":false,"motion_control":false,"first_last_frame":false}},{"id":"image.nano_banana_pro","object":"model","capability":"image_generation","name":"Nano Banana Pro","description":"Premium photoreal image generation, higher fidelity than Nano Banana 2.","status":"available","is_default":false,"limits":{"aspect_ratios":["1:1","16:9","9:16","4:3","3:4"],"max_count":4},"capabilities":{"text_to_output":true,"image_to_output":true,"reference_images":false,"source_video":false,"motion_control":false,"first_last_frame":false}},{"id":"image.nano_banana","object":"model","capability":"image_generation","name":"Nano Banana","description":"Standard speed and quality. Cheaper than Pro for high-volume use.","status":"available","is_default":false,"limits":{"aspect_ratios":["1:1","16:9","9:16","4:3","3:4"],"max_count":4},"capabilities":{"text_to_output":true,"image_to_output":true,"reference_images":false,"source_video":false,"motion_control":false,"first_last_frame":false}},{"id":"image.gpt_image_2","object":"model","capability":"image_generation","name":"GPT Image 2","description":"OpenAI GPT Image 2 — premium photorealistic generation.","status":"available","is_default":false,"limits":{"aspect_ratios":["1:1","16:9","9:16","4:3","3:4"],"max_count":4},"capabilities":{"text_to_output":true,"image_to_output":true,"reference_images":false,"source_video":false,"motion_control":false,"first_last_frame":false}},{"id":"image.seedream_v45","object":"model","capability":"image_generation","name":"Seedream 4.5","description":"ByteDance Seedream 4.5 — strong product and ad visuals, photoreal.","status":"available","is_default":false,"limits":{"aspect_ratios":["1:1","16:9","9:16"],"max_count":4},"capabilities":{"text_to_output":true,"image_to_output":true,"reference_images":false,"source_video":false,"motion_control":false,"first_last_frame":false}},{"id":"image.seedream_v5_lite","object":"model","capability":"image_generation","name":"Seedream 5.0 Lite","description":"ByteDance Seedream 5.0 Lite — multilingual text rendering, web-search-aware.","status":"preview","is_default":false,"limits":{"aspect_ratios":["1:1","16:9","9:16"],"max_count":4},"capabilities":{"text_to_output":true,"image_to_output":true,"reference_images":false,"source_video":false,"motion_control":false,"first_last_frame":false}},{"id":"image.qwen_image_2","object":"model","capability":"image_generation","name":"Qwen Image 2","description":"Alibaba Qwen Image 2 — strong typography, posters, 2K generation.","status":"available","is_default":false,"limits":{"aspect_ratios":["1:1","16:9","9:16","4:3","3:4"],"max_count":4},"capabilities":{"text_to_output":true,"image_to_output":true,"reference_images":false,"source_video":false,"motion_control":false,"first_last_frame":false}},{"id":"image.qwen_image_2_pro","object":"model","capability":"image_generation","name":"Qwen Image 2 Pro","description":"Premium Qwen Image 2 with enhanced detail.","status":"available","is_default":false,"limits":{"aspect_ratios":["1:1","16:9","9:16","4:3","3:4"],"max_count":4},"capabilities":{"text_to_output":true,"image_to_output":true,"reference_images":false,"source_video":false,"motion_control":false,"first_last_frame":false}},{"id":"image.recraft_v4","object":"model","capability":"image_generation","name":"Recraft V4","description":"Design-grade image generation with reliable text rendering.","status":"available","is_default":false,"limits":{"aspect_ratios":["1:1","16:9","9:16","4:3","3:4"],"max_count":4},"capabilities":{"text_to_output":true,"image_to_output":false,"reference_images":false,"source_video":false,"motion_control":false,"first_last_frame":false}},{"id":"image.recraft_v4_pro","object":"model","capability":"image_generation","name":"Recraft V4 Pro","description":"Premium Recraft V4 — top quality for marketing/branding visuals.","status":"available","is_default":false,"limits":{"aspect_ratios":["1:1","16:9","9:16","4:3","3:4"],"max_count":4},"capabilities":{"text_to_output":true,"image_to_output":false,"reference_images":false,"source_video":false,"motion_control":false,"first_last_frame":false}},{"id":"image.grok_imagine","object":"model","capability":"image_generation","name":"Grok Imagine","description":"xAI Grok Imagine — stylized, strong prompt following.","status":"available","is_default":false,"limits":{"aspect_ratios":["1:1","16:9","9:16"],"max_count":4},"capabilities":{"text_to_output":true,"image_to_output":true,"reference_images":false,"source_video":false,"motion_control":false,"first_last_frame":false}},{"id":"video.veo_3_1","object":"model","capability":"video_generation","name":"Veo 3.1","description":"Google Veo 3.1 — premium text/image-to-video with native audio. Supports first-last-frame interpolation. Default.","status":"available","is_default":true,"limits":{"aspect_ratios":["16:9","9:16","1:1"],"duration_seconds":[4,5,8],"supports_audio":true},"capabilities":{"text_to_output":true,"image_to_output":true,"reference_images":true,"source_video":false,"motion_control":false,"first_last_frame":true}},{"id":"video.veo_3_1_fast","object":"model","capability":"video_generation","name":"Veo 3.1 Fast","description":"Cheaper, faster Veo 3.1 variant. Supports first-last-frame interpolation.","status":"available","is_default":false,"limits":{"aspect_ratios":["16:9","9:16","1:1"],"duration_seconds":[4,5,8],"supports_audio":true},"capabilities":{"text_to_output":true,"image_to_output":true,"reference_images":false,"source_video":false,"motion_control":false,"first_last_frame":true}},{"id":"video.veo_3_1_lite","object":"model","capability":"video_generation","name":"Veo 3.1 Lite","description":"Lower-cost Lite variant of Veo 3.1. Supports first-last-frame interpolation.","status":"available","is_default":false,"limits":{"aspect_ratios":["16:9","9:16","1:1"],"duration_seconds":[4,5,8],"supports_audio":true},"capabilities":{"text_to_output":true,"image_to_output":true,"reference_images":false,"source_video":false,"motion_control":false,"first_last_frame":true}},{"id":"video.veo_3_1_extend","object":"model","capability":"video_generation","name":"Veo 3.1 Extend","description":"Extend an existing Veo-created video by up to 7 seconds. Requires source_video_url.","status":"available","is_default":false,"limits":{"aspect_ratios":["16:9","9:16"],"duration_seconds":[7],"supports_audio":true},"capabilities":{"text_to_output":false,"image_to_output":false,"reference_images":false,"source_video":true,"motion_control":false,"first_last_frame":false}},{"id":"video.veo_3","object":"model","capability":"video_generation","name":"Veo 3","description":"Veo 3 — high-quality cinematic generation with audio (predecessor to Veo 3.1).","status":"available","is_default":false,"limits":{"aspect_ratios":["16:9","9:16"],"duration_seconds":[8],"supports_audio":true},"capabilities":{"text_to_output":true,"image_to_output":true,"reference_images":false,"source_video":false,"motion_control":false,"first_last_frame":false}},{"id":"video.veo_3_fast","object":"model","capability":"video_generation","name":"Veo 3 Fast","description":"Cheaper Veo 3 variant — same quality tier, faster turnaround.","status":"available","is_default":false,"limits":{"aspect_ratios":["16:9","9:16"],"duration_seconds":[8],"supports_audio":true},"capabilities":{"text_to_output":true,"image_to_output":true,"reference_images":false,"source_video":false,"motion_control":false,"first_last_frame":false}},{"id":"video.kling_o3","object":"model","capability":"video_generation","name":"Kling O3 Standard","description":"Kling O3 standard — smooth motion, strong subject consistency.","status":"available","is_default":false,"limits":{"aspect_ratios":["16:9","9:16","1:1"],"duration_seconds":[5,10]},"capabilities":{"text_to_output":true,"image_to_output":true,"reference_images":true,"source_video":false,"motion_control":false,"first_last_frame":false}},{"id":"video.kling_o3_pro","object":"model","capability":"video_generation","name":"Kling O3 Pro","description":"Pro tier of Kling O3 — better quality at higher cost. Supports video-to-video reference (use source_video_url + reference_image_urls).","status":"available","is_default":false,"limits":{"aspect_ratios":["16:9","9:16","1:1"],"duration_seconds":[5,10]},"capabilities":{"text_to_output":true,"image_to_output":true,"reference_images":true,"source_video":false,"motion_control":false,"first_last_frame":false}},{"id":"video.kling_o3_4k","object":"model","capability":"video_generation","name":"Kling O3 4K","description":"Kling O3 at 4K resolution. Higher cost, top-tier quality.","status":"available","is_default":false,"limits":{"aspect_ratios":["16:9","9:16","1:1"],"duration_seconds":[5,10],"resolution":"4k"},"capabilities":{"text_to_output":true,"image_to_output":true,"reference_images":true,"source_video":false,"motion_control":false,"first_last_frame":false}},{"id":"video.kling_v3","object":"model","capability":"video_generation","name":"Kling V3 Standard","description":"Kling V3 standard.","status":"available","is_default":false,"limits":{"aspect_ratios":["16:9","9:16","1:1"],"duration_seconds":[5,10]},"capabilities":{"text_to_output":true,"image_to_output":true,"reference_images":false,"source_video":false,"motion_control":false,"first_last_frame":false}},{"id":"video.kling_v3_pro","object":"model","capability":"video_generation","name":"Kling V3 Pro","description":"Kling V3 pro — top quality.","status":"available","is_default":false,"limits":{"aspect_ratios":["16:9","9:16","1:1"],"duration_seconds":[5,10]},"capabilities":{"text_to_output":true,"image_to_output":true,"reference_images":false,"source_video":false,"motion_control":false,"first_last_frame":false}},{"id":"video.kling_v3_motion_control","object":"model","capability":"video_generation","name":"Kling V3 Motion Control","description":"Transfer motion from a reference video onto a character image. Requires both image_url (character) and source_video_url (motion reference).","status":"available","is_default":false,"limits":{"aspect_ratios":["16:9","9:16","1:1"],"duration_seconds":[5]},"capabilities":{"text_to_output":false,"image_to_output":false,"reference_images":false,"source_video":false,"motion_control":true,"first_last_frame":false}},{"id":"video.kling_v3_pro_motion_control","object":"model","capability":"video_generation","name":"Kling V3 Pro Motion Control","description":"Pro-tier Kling V3 motion-control — higher quality character animation. Requires both image_url and source_video_url.","status":"available","is_default":false,"limits":{"aspect_ratios":["16:9","9:16","1:1"],"duration_seconds":[5]},"capabilities":{"text_to_output":false,"image_to_output":false,"reference_images":false,"source_video":false,"motion_control":true,"first_last_frame":false}},{"id":"video.kling_v3_4k","object":"model","capability":"video_generation","name":"Kling V3 4K","description":"Kling V3 at 4K resolution.","status":"available","is_default":false,"limits":{"aspect_ratios":["16:9","9:16","1:1"],"duration_seconds":[5,10],"resolution":"4k"},"capabilities":{"text_to_output":true,"image_to_output":true,"reference_images":false,"source_video":false,"motion_control":false,"first_last_frame":false}},{"id":"video.kling_v26","object":"model","capability":"video_generation","name":"Kling 2.6","description":"Kling 2.6 standard — text/image to video.","status":"available","is_default":false,"limits":{"aspect_ratios":["16:9","9:16","1:1"],"duration_seconds":[5,10]},"capabilities":{"text_to_output":true,"image_to_output":true,"reference_images":false,"source_video":false,"motion_control":false,"first_last_frame":false}},{"id":"video.kling_v26_pro","object":"model","capability":"video_generation","name":"Kling 2.6 Pro","description":"Kling 2.6 pro tier — higher quality.","status":"available","is_default":false,"limits":{"aspect_ratios":["16:9","9:16","1:1"],"duration_seconds":[5,10]},"capabilities":{"text_to_output":true,"image_to_output":true,"reference_images":false,"source_video":false,"motion_control":true,"first_last_frame":false}},{"id":"video.kling_v26_motion_control","object":"model","capability":"video_generation","name":"Kling 2.6 Motion Control","description":"Motion-control variant of Kling 2.6 (legacy). Requires image_url + source_video_url.","status":"available","is_default":false,"limits":{"aspect_ratios":["16:9","9:16","1:1"],"duration_seconds":[5]},"capabilities":{"text_to_output":false,"image_to_output":false,"reference_images":false,"source_video":false,"motion_control":true,"first_last_frame":false}},{"id":"video.kling_v25_turbo","object":"model","capability":"video_generation","name":"Kling 2.5 Turbo Pro","description":"Faster Kling variant (legacy but reliable).","status":"available","is_default":false,"limits":{"aspect_ratios":["16:9","9:16","1:1"],"duration_seconds":[5,10]},"capabilities":{"text_to_output":true,"image_to_output":true,"reference_images":false,"source_video":false,"motion_control":false,"first_last_frame":false}},{"id":"video.kling_v21_master","object":"model","capability":"video_generation","name":"Kling 2.1 Master","description":"Kling 2.1 Master (legacy) — enhanced quality.","status":"available","is_default":false,"limits":{"aspect_ratios":["16:9","9:16","1:1"],"duration_seconds":[5,10]},"capabilities":{"text_to_output":true,"image_to_output":true,"reference_images":false,"source_video":false,"motion_control":false,"first_last_frame":false}},{"id":"video.sora_2","object":"model","capability":"video_generation","name":"Sora 2","description":"OpenAI Sora 2 — text and image to video, 4–20s.","status":"available","is_default":false,"limits":{"aspect_ratios":["16:9","9:16","1:1"],"duration_seconds":[4,8,12,16,20]},"capabilities":{"text_to_output":true,"image_to_output":true,"reference_images":false,"source_video":false,"motion_control":false,"first_last_frame":false}},{"id":"video.hailuo_23","object":"model","capability":"video_generation","name":"Hailuo 2.3","description":"MiniMax Hailuo 2.3 — dynamic video generation.","status":"available","is_default":false,"limits":{"aspect_ratios":["16:9","9:16","1:1"],"duration_seconds":[6,10]},"capabilities":{"text_to_output":true,"image_to_output":true,"reference_images":false,"source_video":false,"motion_control":false,"first_last_frame":false}},{"id":"video.hailuo_23_pro","object":"model","capability":"video_generation","name":"Hailuo 2.3 Pro","description":"MiniMax Hailuo 2.3 Pro tier.","status":"available","is_default":false,"limits":{"aspect_ratios":["16:9","9:16","1:1"],"duration_seconds":[6,10]},"capabilities":{"text_to_output":true,"image_to_output":true,"reference_images":false,"source_video":false,"motion_control":false,"first_last_frame":false}},{"id":"video.hailuo_02","object":"model","capability":"video_generation","name":"Hailuo 02","description":"MiniMax Hailuo 02 (legacy) — image-to-video standard tier.","status":"available","is_default":false,"limits":{"aspect_ratios":["16:9","9:16","1:1"],"duration_seconds":[6,10]},"capabilities":{"text_to_output":true,"image_to_output":true,"reference_images":false,"source_video":false,"motion_control":false,"first_last_frame":false}},{"id":"video.hailuo_02_fast","object":"model","capability":"video_generation","name":"Hailuo 02 Fast","description":"Faster Hailuo 02 image-to-video variant.","status":"available","is_default":false,"limits":{"aspect_ratios":["16:9","9:16","1:1"],"duration_seconds":[6,10]},"capabilities":{"text_to_output":false,"image_to_output":true,"reference_images":false,"source_video":false,"motion_control":false,"first_last_frame":false}},{"id":"video.hailuo_23_fast","object":"model","capability":"video_generation","name":"Hailuo 2.3 Fast","description":"Faster Hailuo 2.3 image-to-video standard tier.","status":"available","is_default":false,"limits":{"aspect_ratios":["16:9","9:16","1:1"],"duration_seconds":[6,10]},"capabilities":{"text_to_output":false,"image_to_output":true,"reference_images":false,"source_video":false,"motion_control":false,"first_last_frame":false}},{"id":"video.hailuo_23_fast_pro","object":"model","capability":"video_generation","name":"Hailuo 2.3 Fast Pro","description":"Faster Hailuo 2.3 pro-tier image-to-video.","status":"available","is_default":false,"limits":{"aspect_ratios":["16:9","9:16","1:1"],"duration_seconds":[6,10]},"capabilities":{"text_to_output":false,"image_to_output":true,"reference_images":false,"source_video":false,"motion_control":false,"first_last_frame":false}},{"id":"video.luma_dream_machine","object":"model","capability":"video_generation","name":"Luma Dream Machine","description":"Luma Dream Machine — fluid motion, distinctive style.","status":"available","is_default":false,"limits":{"aspect_ratios":["16:9","9:16","1:1"],"duration_seconds":[5,9]},"capabilities":{"text_to_output":true,"image_to_output":true,"reference_images":false,"source_video":false,"motion_control":false,"first_last_frame":false}},{"id":"video.wan_v22","object":"model","capability":"video_generation","name":"WAN 2.2","description":"WAN 2.2 — strong character animation.","status":"preview","is_default":false,"limits":{"aspect_ratios":["16:9","9:16","1:1"],"duration_seconds":[5,8]},"capabilities":{"text_to_output":true,"image_to_output":true,"reference_images":false,"source_video":false,"motion_control":false,"first_last_frame":false}},{"id":"video.wan_25_preview","object":"model","capability":"video_generation","name":"WAN 2.5 Preview","description":"WAN 2.5 preview — newer than 2.2, may change without notice.","status":"preview","is_default":false,"limits":{"aspect_ratios":["16:9","9:16","1:1"],"duration_seconds":[5,8]},"capabilities":{"text_to_output":true,"image_to_output":true,"reference_images":false,"source_video":false,"motion_control":false,"first_last_frame":false}},{"id":"video.wan_animate_replace","object":"model","capability":"video_generation","name":"WAN Animate (Replace)","description":"WAN animate-replace — swap subject in source video using a reference image. Requires image_url + source_video_url.","status":"preview","is_default":false,"limits":{"aspect_ratios":["16:9","9:16","1:1"],"duration_seconds":[5]},"capabilities":{"text_to_output":false,"image_to_output":false,"reference_images":false,"source_video":false,"motion_control":true,"first_last_frame":false}},{"id":"video.wan_animate_move","object":"model","capability":"video_generation","name":"WAN Animate (Move)","description":"WAN animate-move — animate static images with natural motion from a reference video. Requires image_url + source_video_url.","status":"preview","is_default":false,"limits":{"aspect_ratios":["16:9","9:16","1:1"],"duration_seconds":[5]},"capabilities":{"text_to_output":false,"image_to_output":false,"reference_images":false,"source_video":false,"motion_control":true,"first_last_frame":false}},{"id":"video.seedance_2_0","object":"model","capability":"video_generation","name":"Seedance 2.0","description":"ByteDance Seedance 2.0 — text/image/reference to video. Routes via BytePlus when configured.","status":"available","is_default":false,"limits":{"aspect_ratios":["16:9","9:16","1:1"],"duration_seconds":[4,5,8,10,12,15],"resolutions":["480p","720p","1080p"]},"capabilities":{"text_to_output":true,"image_to_output":true,"reference_images":true,"source_video":false,"motion_control":false,"first_last_frame":false}},{"id":"video.seedance_2_0_fast","object":"model","capability":"video_generation","name":"Seedance 2.0 Fast","description":"Faster, cheaper Seedance 2.0 variant.","status":"available","is_default":false,"limits":{"aspect_ratios":["16:9","9:16","1:1"],"duration_seconds":[4,5,8,10,12,15],"resolutions":["480p","720p","1080p"]},"capabilities":{"text_to_output":true,"image_to_output":true,"reference_images":true,"source_video":false,"motion_control":false,"first_last_frame":false}},{"id":"video.grok_video","object":"model","capability":"video_generation","name":"Grok Imagine Video","description":"xAI Grok Imagine — high-fidelity text/image to video.","status":"available","is_default":false,"limits":{"aspect_ratios":["16:9","9:16","1:1"],"duration_seconds":[4,5,8,10,15]},"capabilities":{"text_to_output":true,"image_to_output":true,"reference_images":true,"source_video":false,"motion_control":false,"first_last_frame":false}},{"id":"video.grok_video_edit","object":"model","capability":"video_generation","name":"Grok Imagine Edit","description":"Edit existing videos with text prompts. Requires source_video_url.","status":"available","is_default":false,"limits":{"aspect_ratios":["16:9","9:16","1:1"],"duration_seconds":[4,5,8,10]},"capabilities":{"text_to_output":false,"image_to_output":false,"reference_images":false,"source_video":true,"motion_control":false,"first_last_frame":false}},{"id":"video.grok_video_extend","object":"model","capability":"video_generation","name":"Grok Imagine Extend","description":"Extend an existing video by 2–10s. Requires source_video_url.","status":"available","is_default":false,"limits":{"aspect_ratios":["16:9","9:16","1:1"],"duration_seconds":[2,5,10]},"capabilities":{"text_to_output":false,"image_to_output":false,"reference_images":false,"source_video":true,"motion_control":false,"first_last_frame":false}},{"id":"video.happy_horse","object":"model","capability":"video_generation","name":"Happy Horse","description":"Alibaba Happy Horse — text/image/reference-to-video and video-edit.","status":"preview","is_default":false,"limits":{"aspect_ratios":["16:9","9:16","1:1"],"duration_seconds":[3,5,8,10,15]},"capabilities":{"text_to_output":true,"image_to_output":true,"reference_images":true,"source_video":true,"motion_control":false,"first_last_frame":false}},{"id":"speech.elevenlabs_turbo_v2_5","object":"model","capability":"speech_generation","name":"ElevenLabs Turbo v2.5","description":"Low-latency TTS, balance of quality and speed. Default.","status":"available","is_default":true,"limits":{"max_characters":40000}},{"id":"speech.elevenlabs_flash_v2_5","object":"model","capability":"speech_generation","name":"ElevenLabs Flash v2.5","description":"Fastest ElevenLabs TTS, lowest cost.","status":"available","is_default":false,"limits":{"max_characters":40000}},{"id":"speech.elevenlabs_v3","object":"model","capability":"speech_generation","name":"ElevenLabs v3","description":"Highest-quality expressive voice generation.","status":"available","is_default":false,"limits":{"max_characters":40000}},{"id":"speech.elevenlabs_multilingual_v2","object":"model","capability":"speech_generation","name":"ElevenLabs Multilingual v2","description":"29 languages, high fidelity.","status":"available","is_default":false,"limits":{"max_characters":40000}},{"id":"music.elevenlabs_music_v1","object":"model","capability":"music_generation","name":"ElevenLabs Music v1","description":"Prompt-based music generation up to 5 minutes.","status":"available","is_default":true,"limits":{"max_duration_seconds":300}},{"id":"music.lyria3_pro","object":"model","capability":"music_generation","name":"Lyria 3 Pro","description":"Google Lyria 3 Pro — full structured songs up to 3 minutes with vocals, lyrics, and multi-language support. Accepts an optional image_url for inspiration and a negative_prompt. Flat per-generation fee (duration is not configurable).","status":"available","is_default":false,"limits":{"max_duration_seconds":180,"prompt_max_length":5000},"capabilities":{"text_to_output":true,"image_to_output":true,"reference_images":false,"source_video":false,"motion_control":false,"first_last_frame":false}},{"id":"sfx.elevenlabs_v1","object":"model","capability":"sound_effect_generation","name":"ElevenLabs SFX","description":"Sound effect generation up to 30s.","status":"available","is_default":true,"limits":{"max_duration_seconds":30}},{"id":"transcription.whisper_v1","object":"model","capability":"transcription","name":"OpenAI Whisper v1","description":"Speech-to-text with word and segment timestamps. Accepts a direct audio/video URL or a YouTube URL. Async — returns a queued run; poll genfire_get_run for the transcript.","status":"available","is_default":true,"limits":{"max_file_mb":500,"max_duration_seconds":7200}},{"id":"image_edit.bria_background_remove","object":"model","capability":"image_editing","name":"BRIA Background Remove","description":"Remove the background from an image. Returns a transparent PNG.","status":"available","is_default":true,"limits":{"input":"image_url"}},{"id":"video_upscale.fal_video_upscaler","object":"model","capability":"video_upscaling","name":"FAL Video Upscaler","description":"Upscale a video by 2x or 4x. Async — returns a queued run; poll genfire_get_run for completion.","status":"available","is_default":true,"limits":{"scale_factors":[2,4]}},{"id":"lipsync.lipsync_2_pro","object":"model","capability":"lipsync_generation","name":"Lipsync 2 Pro","description":"High-quality lip-sync at 480p or 720p. Default.","status":"available","is_default":true,"limits":{"resolutions":["480p","720p"]}},{"id":"lipsync.sync_lipsync_v2_pro","object":"model","capability":"lipsync_generation","name":"Sync Lipsync v2 Pro","description":"Alternative lip-sync engine.","status":"available","is_default":false,"limits":{"resolutions":["480p","720p"]}},{"id":"lipsync.sync_lipsync_v3","object":"model","capability":"lipsync_generation","name":"Sync Lipsync v3","description":"Premium lip-sync engine — higher fidelity than v2 Pro.","status":"available","is_default":false,"limits":{"resolutions":["480p","720p"]}}]}}}},"default":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"type":"https://api.genfire.ai/errors/invalid_prompt","title":"Invalid Prompt","status":400,"detail":"prompt is required.","code":"invalid_prompt","request_id":"req_123"}}}}},"security":[{"bearerAuth":[]}]}},"/models/pricing":{"get":{"tags":["models"],"summary":"Get per-model pricing","description":"Returns the credits charged per unit for every model in the registry. Use this to estimate cost before generating — e.g. an 8-second Veo 3.1 video at 16 credits/second = 128 credits before any audio multiplier.\n\nRequired scope: `models:read`.\n\nNotes:\n- Unit values: `per_image` (image models, max 4 per request), `per_second` (video / music / SFX / lipsync), `per_character` (speech).\n- Some video models add a multiplier when `generate_audio=true`. Check the `notes` field on each entry.","operationId":"get_models_pricing","responses":{"200":{"description":"Get per-model pricing response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ModelPricingList"},"example":{"object":"list","data":[{"model":"image.nano_banana_2","capability":"image_generation","unit":"per_image","credits":3,"operation_key":"nano_banana_2"},{"model":"video.veo_3_1","capability":"video_generation","unit":"per_second","credits":16,"operation_key":"veo31_fast","notes":"Audio adds a multiplier when generate_audio=true."},{"model":"speech.elevenlabs_turbo_v2_5","capability":"speech_generation","unit":"per_character","credits":0.025,"operation_key":"elevenLabsTts"}]}}}},"default":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"type":"https://api.genfire.ai/errors/invalid_prompt","title":"Invalid Prompt","status":400,"detail":"prompt is required.","code":"invalid_prompt","request_id":"req_123"}}}}},"security":[{"bearerAuth":[]}]}},"/audio/voices":{"get":{"tags":["models"],"summary":"List voices for speech generation","description":"Returns the voice ids accepted by `voice_id` on `/audio/speech`. By default this lists the voices you have cloned (their ids look like `fal_cloned_<id>`); a cloned voice id is otherwise only shown once at clone time in the dashboard, so this is the way to discover it programmatically. Pass `?include=stock` to also return built-in ElevenLabs stock voices.\n\nRequired scope: `models:read`.\n\nNotes:\n- Cloned voices are scoped to the authenticated account — you only ever see your own.\n- Stock voices are large and account-global, so they are excluded unless `include=stock` is passed.","operationId":"get_audio_voices","responses":{"200":{"description":"List voices for speech generation response","content":{"application/json":{"example":{"object":"list","data":[{"id":"fal_cloned_abc123","object":"voice","name":"My Cloned Voice","type":"cloned","provider":"fal_qwen3","preview_url":"https://cdn.genfire.ai/voice-clones/preview-abc123.wav","created_at":"2026-05-01T12:00:00.000Z"}]}}}},"default":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"type":"https://api.genfire.ai/errors/invalid_prompt","title":"Invalid Prompt","status":400,"detail":"prompt is required.","code":"invalid_prompt","request_id":"req_123"}}}}},"security":[{"bearerAuth":[]}],"parameters":[{"in":"query","name":"include","required":false,"description":"Comma-separated extra sources to include. Currently only `stock` is supported, which appends built-in ElevenLabs voices.","schema":{"type":"string"}}]}},"/usage":{"get":{"tags":["usage"],"summary":"Get aggregated API usage","description":"Aggregate API usage for the authenticated account over a date range. Returns totals (credits spent, run counts) plus a breakdown grouped by model, capability, or day. Default range is the last 30 days; max range is 365 days.\n\nRequired scope: `runs:read`.\n\nNotes:\n- Buckets are sorted by `credits_spent` descending, except `group_by=day` which is sorted chronologically.\n- Counts only include runs that hit `/v1` endpoints. Dashboard generations and workflow runs initiated outside the public API are not included.","operationId":"get_usage","responses":{"200":{"description":"Get aggregated API usage response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UsageSummary"},"example":{"object":"usage_summary","period":{"start":"2026-04-01T00:00:00.000Z","end":"2026-04-30T23:59:59.999Z"},"group_by":"model","totals":{"credits_spent":4823,"runs_count":187,"successful_runs":178,"failed_runs":9},"breakdown":[{"group":"video.veo_3_1","credits_spent":2400,"runs_count":30,"successful_runs":30,"failed_runs":0,"avg_credits_per_run":80},{"group":"image.nano_banana_2","credits_spent":423,"runs_count":141,"successful_runs":138,"failed_runs":3,"avg_credits_per_run":3}]}}}},"default":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"type":"https://api.genfire.ai/errors/invalid_prompt","title":"Invalid Prompt","status":400,"detail":"prompt is required.","code":"invalid_prompt","request_id":"req_123"}}}}},"security":[{"bearerAuth":[]}],"parameters":[{"in":"query","name":"start_date","required":false,"description":"Inclusive lower bound (ISO date or full timestamp). Defaults to 30 days ago.","schema":{"type":"string"}},{"in":"query","name":"end_date","required":false,"description":"Exclusive upper bound. Defaults to now.","schema":{"type":"string"}},{"in":"query","name":"group_by","required":false,"description":"Bucketing for the breakdown: `model`, `capability`, `day`, or `none`.","schema":{"type":"string"}},{"in":"query","name":"capability","required":false,"description":"Optional filter, e.g. `video_generation`.","schema":{"type":"string"}}]}},"/uploads":{"post":{"tags":["uploads"],"summary":"Create a signed upload URL","description":"Allocates a pre-signed PUT URL so a client can upload a local file directly to GenFire storage without proxying bytes through the API. Use the returned `asset_url` as `image_url`, `video_url`, or `audio_url` in subsequent generation requests.\n\nRequired scope: `uploads:write`.\n\nNotes:\n- PUT the file bytes to `upload_url` within 15 minutes. The signed URL is pinned to the `content_type` you submitted — sending a different `Content-Type` header will be rejected by the storage layer.\n- `asset_url` is a 7-day signed READ URL. Re-upload the asset before this point if you need long-lived references.\n- Maximum upload size is 5 GB.","operationId":"post_uploads","responses":{"201":{"description":"Create a signed upload URL response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Upload"},"example":{"asset_id":"asset_8f3c4a2b1d6e7f9a0b1c2d3e","upload_url":"https://storage.googleapis.com/genfire-uploads/...?X-Goog-Signature=...","asset_url":"https://storage.googleapis.com/genfire-uploads/...?X-Goog-Signature=...","content_type":"image/png","expires_at":"2026-05-12T02:21:25.985Z"}}}},"default":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"type":"https://api.genfire.ai/errors/invalid_prompt","title":"Invalid Prompt","status":400,"detail":"prompt is required.","code":"invalid_prompt","request_id":"req_123"}}}}},"security":[{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["filename"],"properties":{"filename":{"type":"string","description":"Original filename. The extension is preserved in the stored object path."},"content_type":{"type":"string","description":"MIME type for the upload. Pinned into the signed URL — the PUT must send the same `Content-Type`.","default":"application/octet-stream"},"size_bytes":{"type":"number","description":"Optional declared file size. Rejected if greater than the 5 GB ceiling."}},"additionalProperties":false},"example":{"filename":"reference.png","content_type":"image/png","size_bytes":124000}}}}}},"/influencers":{"get":{"tags":["influencers"],"summary":"List your trained influencers","description":"Returns the influencer characters owned by the authenticated account that are in `ready` status. Use the returned `id` and `handle` in the `mentions` array of an image generation request to inject the character.\n\nRequired scope: `influencers:read`.\n\nNotes:\n- Drafts and archived influencers are NOT returned. Train and finalize them in the dashboard before they can be referenced.","operationId":"get_influencers","responses":{"200":{"description":"List your trained influencers response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InfluencerList"},"example":{"object":"list","data":[{"id":"model_abc123def456","object":"influencer","handle":"sarah","display_name":"Sarah Chen","status":"ready","source_type":"uploaded","preview_url":"https://firebasestorage.googleapis.com/...","created_at":"2026-04-12T10:30:00.000Z","updated_at":"2026-04-12T10:35:00.000Z"}]}}}},"default":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"type":"https://api.genfire.ai/errors/invalid_prompt","title":"Invalid Prompt","status":400,"detail":"prompt is required.","code":"invalid_prompt","request_id":"req_123"}}}}},"security":[{"bearerAuth":[]}]}},"/influencers/{influencerId}":{"get":{"tags":["influencers"],"summary":"Get a single influencer by id","description":"Returns full details for one influencer the authenticated account owns.\n\nRequired scope: `influencers:read`.\n\nNotes:\n- 404 if the influencer does not exist or is not owned by the authenticated account.","operationId":"get_influencers_influencerId","responses":{"200":{"description":"Get a single influencer by id response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Influencer"},"example":{"id":"model_abc123def456","object":"influencer","handle":"sarah","display_name":"Sarah Chen","status":"ready","source_type":"uploaded","preview_url":"https://firebasestorage.googleapis.com/...","created_at":"2026-04-12T10:30:00.000Z","updated_at":"2026-04-12T10:35:00.000Z"}}}},"default":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"type":"https://api.genfire.ai/errors/invalid_prompt","title":"Invalid Prompt","status":400,"detail":"prompt is required.","code":"invalid_prompt","request_id":"req_123"}}}}},"security":[{"bearerAuth":[]}],"parameters":[{"in":"path","name":"influencerId","required":true,"description":"Influencer id from `GET /v1/influencers`.","schema":{"type":"string"}}]}},"/runs":{"get":{"tags":["runs"],"summary":"List recent runs","description":"Lists recent runs for the authenticated account. Use this to inspect async activity across generation endpoints and workflows.\n\nRequired scope: `runs:read`.","operationId":"get_runs","responses":{"200":{"description":"List recent runs response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RunList"},"example":{"object":"list","data":[{"id":"run_img_123","object":"run","status":"completed","capability":"image_generation","endpoint":"images.generations.create","model":"image.nano_banana_2","request_id":"run_img_123","input_summary":{"prompt":"Studio product photo of a matte black water bottle","model":"image.nano_banana_2","aspect_ratio":"1:1","count":1},"output":{"images":[{"url":"https://cdn.genfire.ai/output/image-001.png"}],"output_url":"https://cdn.genfire.ai/output/image-001.png"},"usage":{"credits":8},"error":null,"resource_id":null,"provider_request_id":null,"created_at":"2026-03-25T12:00:00.000Z","updated_at":"2026-03-25T12:00:02.000Z","completed_at":"2026-03-25T12:00:02.000Z"},{"id":"run_vid_123","object":"run","status":"queued","capability":"video_generation","endpoint":"videos.generations.create","model":"video.veo_3_1","request_id":"run_vid_123","input_summary":{"prompt":"Cinematic close-up of a luxury watch with soft lighting","model":"video.veo_3_1","aspect_ratio":"16:9","duration":8,"has_image":false,"generate_audio":true},"output":null,"usage":null,"error":null,"resource_id":"video_123","provider_request_id":"provider_req_123","created_at":"2026-03-25T12:00:00.000Z","updated_at":"2026-03-25T12:00:00.000Z","completed_at":null}]}}}},"default":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"type":"https://api.genfire.ai/errors/invalid_prompt","title":"Invalid Prompt","status":400,"detail":"prompt is required.","code":"invalid_prompt","request_id":"req_123"}}}}},"security":[{"bearerAuth":[]}],"parameters":[{"in":"query","name":"status","required":false,"description":"Optional run status filter such as `queued`, `processing`, `completed`, or `failed`.","schema":{"type":"string"}},{"in":"query","name":"capability","required":false,"description":"Optional capability filter such as `image_generation` or `workflow.hook_pack`.","schema":{"type":"string"}},{"in":"query","name":"limit","required":false,"description":"Maximum number of runs to return.","schema":{"type":"integer","minimum":1,"maximum":100}}]}},"/runs/{runId}":{"get":{"tags":["runs"],"summary":"Get a run by id","description":"Use the run id returned by a generation endpoint or workflow execution to inspect status, output, usage, and provider metadata.\n\nRequired scope: `runs:read`.","operationId":"get_runs_runId","responses":{"200":{"description":"Get a run by id response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Run"},"example":{"id":"run_img_123","object":"run","status":"completed","capability":"image_generation","endpoint":"images.generations.create","model":"image.nano_banana_2","request_id":"run_img_123","input_summary":{"prompt":"Studio product photo of a matte black water bottle","model":"image.nano_banana_2","aspect_ratio":"1:1","count":1},"output":{"images":[{"url":"https://cdn.genfire.ai/output/image-001.png"}],"output_url":"https://cdn.genfire.ai/output/image-001.png"},"usage":{"credits":8},"error":null,"resource_id":null,"provider_request_id":null,"created_at":"2026-03-25T12:00:00.000Z","updated_at":"2026-03-25T12:00:02.000Z","completed_at":"2026-03-25T12:00:02.000Z"}}}},"default":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"type":"https://api.genfire.ai/errors/invalid_prompt","title":"Invalid Prompt","status":400,"detail":"prompt is required.","code":"invalid_prompt","request_id":"req_123"}}}}},"security":[{"bearerAuth":[]}],"parameters":[{"in":"path","name":"runId","required":true,"description":"The run id returned by the API.","schema":{"type":"string"}}]}},"/runs/{runId}/output":{"get":{"tags":["runs"],"summary":"Get the output envelope for a run","description":"Returns just the terminal output envelope for a run, which is useful when you only need the final payload.\n\nRequired scope: `runs:read`.","operationId":"get_runs_runId_output","responses":{"200":{"description":"Get the output envelope for a run response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RunOutput"},"example":{"id":"run_img_123","object":"run_output","status":"completed","capability":"image_generation","output":{"images":[{"url":"https://cdn.genfire.ai/output/image-001.png"}],"output_url":"https://cdn.genfire.ai/output/image-001.png"},"error":null,"completed_at":"2026-03-25T12:00:02.000Z"}}}},"default":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"type":"https://api.genfire.ai/errors/invalid_prompt","title":"Invalid Prompt","status":400,"detail":"prompt is required.","code":"invalid_prompt","request_id":"req_123"}}}}},"security":[{"bearerAuth":[]}],"parameters":[{"in":"path","name":"runId","required":true,"description":"The run id returned by the API.","schema":{"type":"string"}}]}},"/images/generations":{"post":{"tags":["generation"],"summary":"Generate images","description":"Create one or more images using a public image model alias. This endpoint usually completes synchronously and returns a completed run.\n\nRequired scope: `images:write`.\n\nThis endpoint requires an `Idempotency-Key` header.\n\nNotes:\n- When `mentions` is supplied: the model must have an internal edit variant (most do — see `/models`). The server resolves the influencer, replaces `@<handle>` in the prompt with `the character`, appends an identity directive, and adds up to four reference images as conditioning.\n- Influencers must be in status `ready`. Drafts and archived ones cannot be referenced.","operationId":"post_images_generations","responses":{"201":{"description":"Generate images response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Run"},"example":{"id":"run_img_123","object":"run","status":"completed","capability":"image_generation","endpoint":"images.generations.create","model":"image.nano_banana_2","request_id":"run_img_123","input_summary":{"prompt":"Studio product photo of a matte black water bottle","model":"image.nano_banana_2","aspect_ratio":"1:1","count":1},"output":{"images":[{"url":"https://cdn.genfire.ai/output/image-001.png"}],"output_url":"https://cdn.genfire.ai/output/image-001.png"},"usage":{"credits":8},"error":null,"resource_id":null,"provider_request_id":null,"created_at":"2026-03-25T12:00:00.000Z","updated_at":"2026-03-25T12:00:02.000Z","completed_at":"2026-03-25T12:00:02.000Z"}}}},"default":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"type":"https://api.genfire.ai/errors/invalid_prompt","title":"Invalid Prompt","status":400,"detail":"prompt is required.","code":"invalid_prompt","request_id":"req_123"}}}}},"security":[{"bearerAuth":[]}],"parameters":[{"in":"header","name":"Idempotency-Key","required":true,"description":"A unique key for safely retrying the same mutating request without creating duplicates.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["prompt"],"properties":{"prompt":{"type":"string","description":"The image prompt. May include @<handle> mentions when paired with a `mentions` array."},"model":{"type":"string","description":"Optional image model alias from `/models`. Models with an internal edit variant accept `mentions`, `image_url`, and `image_urls` for influencer-conditioned or multi-image edits.","default":"image.nano_banana_2"},"aspect_ratio":{"type":"string","description":"Image aspect ratio."},"count":{"type":"integer","minimum":1,"maximum":4,"description":"Number of images to generate, from 1 to 4."},"image_url":{"type":"string","description":"Optional single source image URL. When provided with an edit-capable model, the request is routed through the model's edit variant. Use `image_urls` for multi-image edits."},"image_urls":{"type":"array","items":{"type":"string"},"description":"Optional list of up to 14 source image URLs for a multi-image edit. Supported by GPT Image 2, Seedream, Qwen Image 2 and Nano Banana; Grok uses at most the first 3. Routes through the model's edit variant."},"mentions":{"type":"array","items":{"type":"string"},"description":"Optional `[{ handle, influencer_id }]` to inject a trained influencer character into the image. The model is auto-switched to its edit variant and the influencer's reference photos are added as conditioning. Currently a single mention per request is supported."},"quality":{"type":"string","description":"Quality tier: low, medium, high, auto. Only applies to image.gpt_image_2. Affects cost: low=1×, medium=6×, high=22×.","default":"high"},"resolution":{"type":"string","description":"Output resolution: 1K, 2K, 4K. Nano Banana family edit only (image.nano_banana, image.nano_banana_2, image.nano_banana_pro) — request must supply image_url or mentions to route through the model edit variant. Affects cost: 1K=1×, 2K=1.5×, 4K=3×."}},"additionalProperties":false},"example":{"prompt":"Studio product photo of a matte black water bottle on dark stone","model":"image.nano_banana_2","aspect_ratio":"1:1","count":1}}}}}},"/videos/generations":{"post":{"tags":["generation"],"summary":"Generate videos","description":"Create a video run. Routing is automatic from the inputs you supply: prompt only → text-to-video, +image_url → image-to-video, +reference_image_urls → reference-to-video, +source_video_url → video-edit/extend, +image_url +source_video_url → motion-control, +first_frame_url +last_frame_url → first-last-frame interpolation. Each video model declares which combinations it supports under `capabilities` on `GET /models`.\n\nRequired scope: `videos:write`.\n\nThis endpoint requires an `Idempotency-Key` header.\n\nNotes:\n- Poll `GET /runs/{runId}` until the run moves to `completed` or `failed`.\n- Per-model duration / aspect-ratio / resolution limits are returned by `/models`; passing an unsupported value returns a 400 listing the allowed values.\n- If you provide an input combination the model does not declare in `capabilities`, you get `unsupported_input_combination`.","operationId":"post_videos_generations","responses":{"201":{"description":"Generate videos response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Run"},"example":{"id":"run_vid_123","object":"run","status":"queued","capability":"video_generation","endpoint":"videos.generations.create","model":"video.veo_3_1","request_id":"run_vid_123","input_summary":{"prompt":"Cinematic close-up of a luxury watch with soft lighting","model":"video.veo_3_1","aspect_ratio":"16:9","duration":8,"has_image":false,"generate_audio":true},"output":null,"usage":null,"error":null,"resource_id":"video_123","provider_request_id":"provider_req_123","created_at":"2026-03-25T12:00:00.000Z","updated_at":"2026-03-25T12:00:00.000Z","completed_at":null}}}},"default":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"type":"https://api.genfire.ai/errors/invalid_prompt","title":"Invalid Prompt","status":400,"detail":"prompt is required.","code":"invalid_prompt","request_id":"req_123"}}}}},"security":[{"bearerAuth":[]}],"parameters":[{"in":"header","name":"Idempotency-Key","required":true,"description":"A unique key for safely retrying the same mutating request without creating duplicates.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["prompt"],"properties":{"prompt":{"type":"string","description":"The video prompt."},"model":{"type":"string","description":"Optional video model alias from `/models`.","default":"video.veo_3_1"},"aspect_ratio":{"type":"string","description":"Video aspect ratio."},"duration":{"type":"integer","description":"Target duration in seconds."},"resolution":{"type":"string","description":"Output resolution (e.g. 480p, 720p, 1080p). Supported values and pricing are per-model — see `resolutions` under `/models`. Higher resolutions cost more credits."},"image_url":{"type":"string","description":"Source image for image-to-video, or character image for motion-control."},"source_video_url":{"type":"string","description":"Source video for video-edit, video-extend, or motion-control modes."},"reference_image_urls":{"type":"array","items":{"type":"string"},"description":"Up to 9 reference image URLs for reference-to-video mode."},"first_frame_url":{"type":"string","description":"First-frame image for first-last-frame interpolation. Must be paired with last_frame_url."},"last_frame_url":{"type":"string","description":"Last-frame image for first-last-frame interpolation. Must be paired with first_frame_url."},"generate_audio":{"type":"boolean","description":"Whether to include generated audio when supported.","default":"true"}},"additionalProperties":false},"example":{"prompt":"Cinematic close-up of a luxury watch with soft lighting","model":"video.veo_3_1","aspect_ratio":"16:9","duration":8,"generate_audio":true}}}}}},"/images/background-remove":{"post":{"tags":["generation"],"summary":"Remove image background","description":"Remove the background from an image using BRIA. Returns a transparent PNG. Synchronous — typically completes in a couple seconds.\n\nRequired scope: `images:write`.\n\nThis endpoint requires an `Idempotency-Key` header.","operationId":"post_images_background_remove","responses":{"201":{"description":"Remove image background response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Run"},"example":{"id":"run_bg_123","object":"run","status":"completed","capability":"image_editing","endpoint":"images.background_remove.create","model":"image_edit.bria_background_remove","request_id":"run_bg_123","input_summary":{"model":"image_edit.bria_background_remove","image_url":"https://example.com/photo.jpg"},"output":{"images":[{"url":"https://cdn.genfire.ai/output/bg-removed.png"}],"output_url":"https://cdn.genfire.ai/output/bg-removed.png"},"usage":{"credits":1},"error":null,"resource_id":null,"provider_request_id":null,"created_at":"2026-04-30T12:00:00.000Z","updated_at":"2026-04-30T12:00:01.500Z","completed_at":"2026-04-30T12:00:01.500Z"}}}},"default":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"type":"https://api.genfire.ai/errors/invalid_prompt","title":"Invalid Prompt","status":400,"detail":"prompt is required.","code":"invalid_prompt","request_id":"req_123"}}}}},"security":[{"bearerAuth":[]}],"parameters":[{"in":"header","name":"Idempotency-Key","required":true,"description":"A unique key for safely retrying the same mutating request without creating duplicates.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["image_url"],"properties":{"image_url":{"type":"string","description":"Absolute URL of the source image."}},"additionalProperties":false},"example":{"image_url":"https://example.com/photo.jpg"}}}}}},"/videos/upscale":{"post":{"tags":["generation"],"summary":"Upscale a video","description":"Upscale a video by 2x or 4x using FAL's video upscaler. Async — returns a queued run; poll `/runs/{runId}` for completion (typically 1-5 min).\n\nRequired scope: `videos:write`.\n\nThis endpoint requires an `Idempotency-Key` header.\n\nNotes:\n- Costs more credits than generation per-second, scaled by the scale factor.\n- Poll `GET /runs/{runId}` until status is `completed` or `failed`.","operationId":"post_videos_upscale","responses":{"201":{"description":"Upscale a video response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Run"},"example":{"id":"run_upscale_123","object":"run","status":"queued","capability":"video_upscaling","endpoint":"videos.upscale.create","model":"video_upscale.fal_video_upscaler","request_id":"run_upscale_123","input_summary":{"model":"video_upscale.fal_video_upscaler","scale_factor":2},"output":null,"usage":null,"error":null,"resource_id":null,"provider_request_id":"fal_req_abc","created_at":"2026-04-30T12:00:00.000Z","updated_at":"2026-04-30T12:00:00.500Z","completed_at":null}}}},"default":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"type":"https://api.genfire.ai/errors/invalid_prompt","title":"Invalid Prompt","status":400,"detail":"prompt is required.","code":"invalid_prompt","request_id":"req_123"}}}}},"security":[{"bearerAuth":[]}],"parameters":[{"in":"header","name":"Idempotency-Key","required":true,"description":"A unique key for safely retrying the same mutating request without creating duplicates.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["source_video_url"],"properties":{"source_video_url":{"type":"string","description":"Absolute URL of the source video."},"scale_factor":{"type":"integer","description":"Either 2 or 4.","default":"2"}},"additionalProperties":false},"example":{"source_video_url":"https://cdn.genfire.ai/video.mp4","scale_factor":2}}}}}},"/lipsync/generations":{"post":{"tags":["generation"],"summary":"Generate a lip-synced video","description":"Lip-sync an existing video to either a hosted audio file or a base64-encoded audio payload.\n\nRequired scope: `lipsync:write`.\n\nThis endpoint requires an `Idempotency-Key` header.\n\nNotes:\n- Provide either `audio_url` or `audio_base64`.\n- This endpoint is async and usually returns a queued run first.","operationId":"post_lipsync_generations","responses":{"201":{"description":"Generate a lip-synced video response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Run"},"example":{"id":"run_vid_123","object":"run","status":"queued","capability":"lipsync_generation","endpoint":"lipsync.generations.create","model":"lipsync.lipsync_2_pro","request_id":"run_vid_123","input_summary":{"prompt":"Cinematic close-up of a luxury watch with soft lighting","model":"video.veo_3_1","aspect_ratio":"16:9","duration":8,"has_image":false,"generate_audio":true},"output":null,"usage":null,"error":null,"resource_id":"video_123","provider_request_id":"provider_req_123","created_at":"2026-03-25T12:00:00.000Z","updated_at":"2026-03-25T12:00:00.000Z","completed_at":null}}}},"default":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"type":"https://api.genfire.ai/errors/invalid_prompt","title":"Invalid Prompt","status":400,"detail":"prompt is required.","code":"invalid_prompt","request_id":"req_123"}}}}},"security":[{"bearerAuth":[]}],"parameters":[{"in":"header","name":"Idempotency-Key","required":true,"description":"A unique key for safely retrying the same mutating request without creating duplicates.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["video_url"],"properties":{"video_url":{"type":"string","description":"Absolute URL to the source video."},"audio_url":{"type":"string","description":"Absolute URL to the source audio."},"audio_base64":{"type":"string","description":"Base64-encoded audio content. Provide this instead of `audio_url` when uploading audio inline."},"audio_file_name":{"type":"string","description":"Optional file name to associate with inline audio."},"title":{"type":"string","description":"Optional title used for the internal video record.","default":"AI Lip-sync Video"},"description":{"type":"string","description":"Optional description for the internal video record."},"sync_mode":{"type":"string","enum":["cut_off","loop","bounce","silence","remap"],"description":"How the video should align to the audio."},"model":{"type":"string","description":"Optional lipsync model alias from `/models`.","default":"lipsync.lipsync_2_pro"},"duration":{"type":"number","description":"Optional duration hint between 1 and 300 seconds."}},"additionalProperties":false},"example":{"video_url":"https://example.com/source-video.mp4","audio_url":"https://example.com/source-audio.mp3","sync_mode":"cut_off","model":"lipsync.lipsync_2_pro"}}}}}},"/audio/speech":{"post":{"tags":["generation"],"summary":"Generate speech audio","description":"Text-to-speech generation using a public speech model alias.\n\nRequired scope: `audio:write`.\n\nThis endpoint requires an `Idempotency-Key` header.","operationId":"post_audio_speech","responses":{"201":{"description":"Generate speech audio response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Run"},"example":{"id":"run_speech_123","object":"run","status":"completed","capability":"speech_generation","endpoint":"audio.speech.create","model":"speech.elevenlabs_turbo_v2_5","request_id":"run_img_123","input_summary":{"prompt":"Studio product photo of a matte black water bottle","model":"image.nano_banana_2","aspect_ratio":"1:1","count":1},"output":{"audio_id":"audio_123","audio_url":"https://cdn.genfire.ai/output/audio-123.mp3","duration":6.4},"usage":{"credits":8},"error":null,"resource_id":null,"provider_request_id":null,"created_at":"2026-03-25T12:00:00.000Z","updated_at":"2026-03-25T12:00:02.000Z","completed_at":"2026-03-25T12:00:02.000Z"}}}},"default":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"type":"https://api.genfire.ai/errors/invalid_prompt","title":"Invalid Prompt","status":400,"detail":"prompt is required.","code":"invalid_prompt","request_id":"req_123"}}}}},"security":[{"bearerAuth":[]}],"parameters":[{"in":"header","name":"Idempotency-Key","required":true,"description":"A unique key for safely retrying the same mutating request without creating duplicates.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["text","voice_id"],"properties":{"text":{"type":"string","description":"The text to speak."},"voice_id":{"type":"string","description":"The voice id to use: either a stock ElevenLabs voice id or one of your cloned voice ids (`fal_cloned_<id>`). List options via `/audio/voices`."},"model":{"type":"string","description":"Optional speech model alias from `/models`.","default":"speech.elevenlabs_turbo_v2_5"},"voice_name":{"type":"string","description":"Optional human-readable voice name passed through to the audio generator."},"output_format":{"type":"string","description":"Optional output format when supported by the backing provider."}},"additionalProperties":false},"example":{"text":"Introducing the new GenFire creative workflow.","voice_id":"voice_abc123","model":"speech.elevenlabs_turbo_v2_5"}}}}}},"/audio/music":{"post":{"tags":["generation"],"summary":"Generate music","description":"Create music from a prompt. You can request a simple audio result or a more detailed music result with timestamps.\n\nRequired scope: `audio:write`.\n\nThis endpoint requires an `Idempotency-Key` header.","operationId":"post_audio_music","responses":{"201":{"description":"Generate music response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Run"},"example":{"id":"run_music_123","object":"run","status":"completed","capability":"music_generation","endpoint":"audio.music.create","model":"music.elevenlabs_music_v1","request_id":"run_img_123","input_summary":{"prompt":"Studio product photo of a matte black water bottle","model":"image.nano_banana_2","aspect_ratio":"1:1","count":1},"output":{"audio_id":"audio_music_123","audio_url":"https://cdn.genfire.ai/output/music-123.mp3","duration":30},"usage":{"credits":8},"error":null,"resource_id":null,"provider_request_id":null,"created_at":"2026-03-25T12:00:00.000Z","updated_at":"2026-03-25T12:00:02.000Z","completed_at":"2026-03-25T12:00:02.000Z"}}}},"default":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"type":"https://api.genfire.ai/errors/invalid_prompt","title":"Invalid Prompt","status":400,"detail":"prompt is required.","code":"invalid_prompt","request_id":"req_123"}}}}},"security":[{"bearerAuth":[]}],"parameters":[{"in":"header","name":"Idempotency-Key","required":true,"description":"A unique key for safely retrying the same mutating request without creating duplicates.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["prompt"],"properties":{"prompt":{"type":"string","description":"Description of the music you want generated."},"model":{"type":"string","description":"Optional music model alias from `/models`.","default":"music.elevenlabs_music_v1"},"duration_seconds":{"type":"number","description":"Desired music length in seconds. ElevenLabs models only — ignored by Lyria 3 Pro, which produces a flat-length song.","default":"30"},"include_details":{"type":"boolean","description":"Return detailed music metadata when supported (ElevenLabs only).","default":"false"},"with_timestamps":{"type":"boolean","description":"Include timestamps when `include_details` is true (ElevenLabs only).","default":"false"},"force_instrumental":{"type":"boolean","description":"Bias generation toward instrumental output when supported (ElevenLabs only)."},"image_url":{"type":"string","description":"Optional image URL used as inspiration for the generated music. Lyria 3 Pro only — the model matches the mood and theme of the image."},"negative_prompt":{"type":"string","description":"Description of what to exclude from the generated audio. Lyria 3 Pro only."},"output_format":{"type":"string","description":"Optional output format when supported by the backing provider."}},"additionalProperties":false},"example":{"prompt":"Confident electronic music bed for a product launch video","model":"music.elevenlabs_music_v1","duration_seconds":30,"include_details":false}}}}}},"/audio/sfx":{"post":{"tags":["generation"],"summary":"Generate sound effects","description":"Generate short sound effects or foley-style audio from a text prompt.\n\nRequired scope: `audio:write`.\n\nThis endpoint requires an `Idempotency-Key` header.","operationId":"post_audio_sfx","responses":{"201":{"description":"Generate sound effects response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Run"},"example":{"id":"run_sfx_123","object":"run","status":"completed","capability":"sound_effect_generation","endpoint":"audio.sfx.create","model":"sfx.elevenlabs_v1","request_id":"run_img_123","input_summary":{"prompt":"Studio product photo of a matte black water bottle","model":"image.nano_banana_2","aspect_ratio":"1:1","count":1},"output":{"audio_id":"audio_sfx_123","audio_url":"https://cdn.genfire.ai/output/sfx-123.mp3","duration":4.1},"usage":{"credits":8},"error":null,"resource_id":null,"provider_request_id":null,"created_at":"2026-03-25T12:00:00.000Z","updated_at":"2026-03-25T12:00:02.000Z","completed_at":"2026-03-25T12:00:02.000Z"}}}},"default":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"type":"https://api.genfire.ai/errors/invalid_prompt","title":"Invalid Prompt","status":400,"detail":"prompt is required.","code":"invalid_prompt","request_id":"req_123"}}}}},"security":[{"bearerAuth":[]}],"parameters":[{"in":"header","name":"Idempotency-Key","required":true,"description":"A unique key for safely retrying the same mutating request without creating duplicates.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["prompt"],"properties":{"prompt":{"type":"string","description":"The sound effect prompt."},"model":{"type":"string","description":"Optional sound effect model alias from `/models`.","default":"sfx.elevenlabs_v1"},"duration_seconds":{"type":"number","description":"Optional desired duration in seconds."},"output_format":{"type":"string","description":"Optional output format when supported by the backing provider."},"prompt_influence":{"type":"number","description":"Optional prompt influence value when supported."},"loop":{"type":"boolean","description":"Whether to generate a loop-friendly result when supported."}},"additionalProperties":false},"example":{"prompt":"Heavy metal door slam in a large warehouse","model":"sfx.elevenlabs_v1","duration_seconds":4}}}}}},"/audio/transcriptions":{"post":{"tags":["generation"],"summary":"Transcribe audio or video (speech-to-text)","description":"Transcribe speech to text with word- and segment-level timestamps using OpenAI Whisper. Provide exactly one of `audio_url`, `video_url`, or `youtube_url`. Video sources have their audio extracted automatically. Billed per second of media duration.\n\nRequired scope: `audio:write`.\n\nThis endpoint requires an `Idempotency-Key` header.\n\nNotes:\n- Max media size 500MB; max duration 2 hours.\n- Async — usually returns a queued run first; poll the run until `status` is `completed`, then read `output.text` / `output.words` / `output.segments`.\n- YouTube transcription is supported but downloads third-party content — ensure your use complies with the source platform’s terms.","operationId":"post_audio_transcriptions","responses":{"201":{"description":"Transcribe audio or video (speech-to-text) response","content":{"application/json":{"example":{"id":"run_transcription_123","object":"run","status":"completed","capability":"transcription","endpoint":"audio.transcriptions.create","model":"transcription.whisper_v1","request_id":"run_img_123","input_summary":{"prompt":"Studio product photo of a matte black water bottle","model":"image.nano_banana_2","aspect_ratio":"1:1","count":1},"output":{"transcript_id":"audio_txn_123","text":"Welcome to the GenFire creative workflow.","language":"en","duration":3.2,"words":[{"word":"Welcome","start":0,"end":0.4,"probability":1}],"segments":[{"id":0,"start":0,"end":3.2,"text":"Welcome to the GenFire creative workflow."}],"audio_url":"https://storage.googleapis.com/genfire/extracted-audio/123.mp3"},"usage":{"credits":8},"error":null,"resource_id":null,"provider_request_id":null,"created_at":"2026-03-25T12:00:00.000Z","updated_at":"2026-03-25T12:00:02.000Z","completed_at":"2026-03-25T12:00:02.000Z"}}}},"default":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"type":"https://api.genfire.ai/errors/invalid_prompt","title":"Invalid Prompt","status":400,"detail":"prompt is required.","code":"invalid_prompt","request_id":"req_123"}}}}},"security":[{"bearerAuth":[]}],"parameters":[{"in":"header","name":"Idempotency-Key","required":true,"description":"A unique key for safely retrying the same mutating request without creating duplicates.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"audio_url":{"type":"string","description":"URL of a direct audio file (mp3, wav, m4a, aac, ogg, flac, opus, webm, wma). One of audio_url / video_url / youtube_url is required."},"video_url":{"type":"string","description":"URL of a direct video file; audio is extracted before transcription."},"youtube_url":{"type":"string","description":"A YouTube URL to download and transcribe (max 2 hours)."},"model":{"type":"string","description":"Optional transcription model alias from `/models`.","default":"transcription.whisper_v1"}},"additionalProperties":false},"example":{"audio_url":"https://cdn.genfire.ai/uploads/interview.mp3","model":"transcription.whisper_v1"}}}}}},"/products/extract":{"post":{"tags":["generation"],"summary":"Extract product data from a URL","description":"Scrape product details from a public product page and return the result inside a run envelope.\n\nRequired scope: `products:write`.\n\nThis endpoint requires an `Idempotency-Key` header.\n\nNotes:\n- Unsafe or private-network targets are rejected before scraping begins.","operationId":"post_products_extract","responses":{"201":{"description":"Extract product data from a URL response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Run"},"example":{"id":"run_product_123","object":"run","status":"completed","capability":"product_extraction","endpoint":"products.extract.create","model":null,"request_id":"run_img_123","input_summary":{"prompt":"Studio product photo of a matte black water bottle","model":"image.nano_banana_2","aspect_ratio":"1:1","count":1},"output":{"product":{"success":true,"title":"Matte Black Water Bottle","description":"Insulated stainless steel water bottle","category":"hydration","price":"$39","images":["https://example.com/product.jpg"]},"cached":false},"usage":{"credits":8},"error":null,"resource_id":null,"provider_request_id":null,"created_at":"2026-03-25T12:00:00.000Z","updated_at":"2026-03-25T12:00:02.000Z","completed_at":"2026-03-25T12:00:02.000Z"}}}},"default":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"type":"https://api.genfire.ai/errors/invalid_prompt","title":"Invalid Prompt","status":400,"detail":"prompt is required.","code":"invalid_prompt","request_id":"req_123"}}}}},"security":[{"bearerAuth":[]}],"parameters":[{"in":"header","name":"Idempotency-Key","required":true,"description":"A unique key for safely retrying the same mutating request without creating duplicates.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["url"],"properties":{"url":{"type":"string","description":"A public product page URL. Private, local, and unsafe targets are blocked."}},"additionalProperties":false},"example":{"url":"https://example.com/products/matte-black-water-bottle"}}}}}},"/workflows":{"get":{"tags":["workflows"],"summary":"List executable workflows","description":"Returns the workflow catalog. Use this when you want a higher-level outcome rather than raw media generation.\n\nRequired scope: `workflows:read`.","operationId":"get_workflows","responses":{"200":{"description":"List executable workflows response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WorkflowList"},"example":{"object":"list","data":[{"id":"storyboard","object":"workflow","name":"Storyboard Planning","description":"Create a creative project and generate the brief, brand kit, script, shot list, and storyboard planning outputs.","status":"available","input_schema":{"type":"object","required":["prompt"],"properties":{"prompt":{"type":"string"},"title":{"type":"string"},"aspect_ratio":{"type":"string","enum":["16:9","9:16","1:1"]}}},"output_schema":{"type":"object","properties":{"project_id":{"type":"string"},"status":{"type":"string"},"current_stage":{"type":"string"},"next_action":{"type":"string"}}}},{"id":"hook_pack","object":"workflow","name":"Hook Pack","description":"Generate three monetizable UGC-style hooks plus a supporting body and CTA.","status":"available","input_schema":{"type":"object","required":["prompt"],"properties":{"prompt":{"type":"string"},"audience":{"type":"string"},"tone":{"type":"string","enum":["casual","professional","humorous","educational","persuasive","emotional"]},"length":{"type":"string","enum":["short","medium","long"]},"target_duration":{"type":"number"},"keywords":{"type":"array","items":{"type":"string"}},"additional_requirements":{"type":"string"}}},"output_schema":{"type":"object","properties":{"hooks":{"type":"array","items":{"type":"string"}},"body":{"type":"string"},"call_to_action":{"type":"string"},"full_script":{"type":"string"}}}},{"id":"ugc_ad","object":"workflow","name":"UGC Ad Script","description":"Generate an outcome-oriented UGC ad script with hooks, body, CTA, and a full spoken script.","status":"available","input_schema":{"type":"object","required":["prompt"],"properties":{"prompt":{"type":"string"},"audience":{"type":"string"},"tone":{"type":"string","enum":["casual","professional","humorous","educational","persuasive","emotional"]},"length":{"type":"string","enum":["short","medium","long"]},"target_duration":{"type":"number"},"keywords":{"type":"array","items":{"type":"string"}},"additional_requirements":{"type":"string"}}},"output_schema":{"type":"object","properties":{"hooks":{"type":"array","items":{"type":"string"}},"body":{"type":"string"},"call_to_action":{"type":"string"},"full_script":{"type":"string"}}}},{"id":"creative_pack","object":"workflow","name":"Creative Pack","description":"Build a product-aware creative pack with analysis, angles, hooks, and a monetizable script.","status":"available","input_schema":{"type":"object","properties":{"prompt":{"type":"string"},"product_url":{"type":"string","format":"uri"},"product_name":{"type":"string"},"product_description":{"type":"string"},"category":{"type":"string"},"audience":{"type":"string"},"tone":{"type":"string","enum":["casual","professional","humorous","educational","persuasive","emotional"]},"length":{"type":"string","enum":["short","medium","long"]},"image_urls":{"type":"array","items":{"type":"string","format":"uri"}},"additional_requirements":{"type":"string"}}},"output_schema":{"type":"object","properties":{"product":{"type":"object"},"analysis":{"type":"object"},"hooks":{"type":"array","items":{"type":"string"}},"body":{"type":"string"},"call_to_action":{"type":"string"},"full_script":{"type":"string"}}}},{"id":"product_ad_variants","object":"workflow","name":"Product Ad Variants","description":"Generate multiple UGC-style ad script variants for the same product or offer.","status":"available","input_schema":{"type":"object","properties":{"prompt":{"type":"string"},"product_name":{"type":"string"},"product_description":{"type":"string"},"audience":{"type":"string"},"tone":{"type":"string","enum":["casual","professional","humorous","educational","persuasive","emotional"]},"length":{"type":"string","enum":["short","medium","long"]},"variant_count":{"type":"number","minimum":1,"maximum":5},"additional_requirements":{"type":"string"}}},"output_schema":{"type":"object","properties":{"variant_count":{"type":"number"},"variants":{"type":"array","items":{"type":"object"}}}}}]}}}},"default":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"type":"https://api.genfire.ai/errors/invalid_prompt","title":"Invalid Prompt","status":400,"detail":"prompt is required.","code":"invalid_prompt","request_id":"req_123"}}}}},"security":[{"bearerAuth":[]}]}},"/workflows/{workflowKey}":{"get":{"tags":["workflows"],"summary":"Get one workflow definition","description":"Returns the input and output schema for a specific workflow.\n\nRequired scope: `workflows:read`.","operationId":"get_workflows_workflowKey","responses":{"200":{"description":"Get one workflow definition response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Workflow"},"example":{"id":"hook_pack","object":"workflow","name":"Hook Pack","description":"Generate three monetizable UGC-style hooks plus a supporting body and CTA.","status":"available","input_schema":{"type":"object","required":["prompt"],"properties":{"prompt":{"type":"string"},"audience":{"type":"string"},"tone":{"type":"string","enum":["casual","professional","humorous","educational","persuasive","emotional"]},"length":{"type":"string","enum":["short","medium","long"]},"target_duration":{"type":"number"},"keywords":{"type":"array","items":{"type":"string"}},"additional_requirements":{"type":"string"}}},"output_schema":{"type":"object","properties":{"hooks":{"type":"array","items":{"type":"string"}},"body":{"type":"string"},"call_to_action":{"type":"string"},"full_script":{"type":"string"}}}}}}},"default":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"type":"https://api.genfire.ai/errors/invalid_prompt","title":"Invalid Prompt","status":400,"detail":"prompt is required.","code":"invalid_prompt","request_id":"req_123"}}}}},"security":[{"bearerAuth":[]}],"parameters":[{"in":"path","name":"workflowKey","required":true,"description":"A workflow id such as `hook_pack` or `creative_pack`.","schema":{"type":"string"}}]}},"/workflows/{workflowKey}/runs":{"post":{"tags":["workflows"],"summary":"Execute a workflow","description":"Creates a run for the requested workflow. The request body depends on the workflow you choose.\n\nRequired scope: `workflows:write`.\n\nThis endpoint requires an `Idempotency-Key` header.\n\nNotes:\n- The workflow catalog below includes example payloads for every supported workflow.","operationId":"post_workflows_workflowKey_runs","responses":{"201":{"description":"Execute a workflow response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Run"},"example":{"id":"run_workflow_123","object":"run","status":"completed","capability":"workflow.hook_pack","endpoint":"workflows.hook_pack.run","model":null,"request_id":"run_img_123","input_summary":{"workflow":"hook_pack","prompt":"Portable blender for busy professionals","audience":"Remote workers who skip breakfast","tone":"persuasive","length":"short","target_duration":20,"keywords":["protein shake","commute","healthy"],"additional_requirements":"Lead with convenience and save time."},"output":{"workflow":"hook_pack","topic":"Portable blender for busy professionals","hooks":["If breakfast keeps losing to your calendar, this fixes it.","I stopped skipping protein the day I threw this in my bag.","This is how I make a full shake before my first meeting."],"body":"Portable, fast, and easy to clean for daily use.","call_to_action":"Try it before your next busy week.","full_script":"If breakfast keeps losing to your calendar...","word_count":96,"estimated_duration":22},"usage":{"credits":8},"error":null,"resource_id":null,"provider_request_id":null,"created_at":"2026-03-25T12:00:00.000Z","updated_at":"2026-03-25T12:00:02.000Z","completed_at":"2026-03-25T12:00:02.000Z"},"examples":{"storyboard":{"summary":"storyboard","value":{"id":"run_storyboard_123","object":"run","status":"completed","capability":"workflow.storyboard","endpoint":"workflows.storyboard.run","model":null,"request_id":"run_img_123","input_summary":{"workflow":"storyboard","prompt":"30-second paid social ad for a premium running shoe","title":"Spring Launch Ad","aspect_ratio":"9:16"},"output":{"workflow":"storyboard","project_id":"proj_123","project_status":"needs_approval","current_stage":"storyboard","next_action":"approve_storyboard"},"usage":{"credits":8},"error":null,"resource_id":null,"provider_request_id":null,"created_at":"2026-03-25T12:00:00.000Z","updated_at":"2026-03-25T12:00:02.000Z","completed_at":"2026-03-25T12:00:02.000Z"}},"hook_pack":{"summary":"hook_pack","value":{"id":"run_hook_pack_123","object":"run","status":"completed","capability":"workflow.hook_pack","endpoint":"workflows.hook_pack.run","model":null,"request_id":"run_img_123","input_summary":{"workflow":"hook_pack","prompt":"Portable blender for busy professionals","audience":"Remote workers who skip breakfast","tone":"persuasive","length":"short","target_duration":20,"keywords":["protein shake","commute","healthy"],"additional_requirements":"Lead with convenience and save time."},"output":{"workflow":"hook_pack","topic":"Portable blender for busy professionals","hooks":["If breakfast keeps losing to your calendar, this fixes it.","I stopped skipping protein the day I threw this in my bag.","This is how I make a full shake before my first meeting."],"body":"Portable, fast, and easy to clean for daily use.","call_to_action":"Try it before your next busy week.","full_script":"If breakfast keeps losing to your calendar...","word_count":96,"estimated_duration":22},"usage":{"credits":8},"error":null,"resource_id":null,"provider_request_id":null,"created_at":"2026-03-25T12:00:00.000Z","updated_at":"2026-03-25T12:00:02.000Z","completed_at":"2026-03-25T12:00:02.000Z"}},"ugc_ad":{"summary":"ugc_ad","value":{"id":"run_ugc_ad_123","object":"run","status":"completed","capability":"workflow.ugc_ad","endpoint":"workflows.ugc_ad.run","model":null,"request_id":"run_img_123","input_summary":{"workflow":"ugc_ad","prompt":"Blue light glasses for creators","audience":"Designers and editors working late","tone":"casual","length":"medium"},"output":{"workflow":"ugc_ad","topic":"Blue light glasses for creators","hooks":["I did not realize how cooked my eyes were by 6pm."],"body":"Comfort-focused UGC body copy.","call_to_action":"Use them on your next edit sprint.","full_script":"I did not realize how cooked my eyes were..."},"usage":{"credits":8},"error":null,"resource_id":null,"provider_request_id":null,"created_at":"2026-03-25T12:00:00.000Z","updated_at":"2026-03-25T12:00:02.000Z","completed_at":"2026-03-25T12:00:02.000Z"}},"creative_pack":{"summary":"creative_pack","value":{"id":"run_creative_pack_123","object":"run","status":"completed","capability":"workflow.creative_pack","endpoint":"workflows.creative_pack.run","model":null,"request_id":"run_img_123","input_summary":{"workflow":"creative_pack","product_url":"https://example.com/products/matte-black-water-bottle"},"output":{"workflow":"creative_pack","product":{"name":"Matte Black Water Bottle","description":"Insulated stainless steel water bottle","category":"hydration","price":"$39","images":["https://example.com/image-1.jpg"]},"analysis":{"marketingAngles":["Premium feel","Keeps drinks cold","Daily carry convenience"]},"hooks":["This bottle still had ice after my entire workout and commute."],"body":"Creative body copy built from product analysis.","call_to_action":"Upgrade your daily carry.","full_script":"This bottle still had ice..."},"usage":{"credits":8},"error":null,"resource_id":null,"provider_request_id":null,"created_at":"2026-03-25T12:00:00.000Z","updated_at":"2026-03-25T12:00:02.000Z","completed_at":"2026-03-25T12:00:02.000Z"}},"product_ad_variants":{"summary":"product_ad_variants","value":{"id":"run_product_ad_variants_123","object":"run","status":"completed","capability":"workflow.product_ad_variants","endpoint":"workflows.product_ad_variants.run","model":null,"request_id":"run_img_123","input_summary":{"workflow":"product_ad_variants","product_name":"Portable espresso maker","product_description":"Travel-friendly espresso maker for commuters","audience":"Commuters and travelers","tone":"persuasive","length":"short","variant_count":3},"output":{"workflow":"product_ad_variants","prompt":"Portable espresso maker: Travel-friendly espresso maker for commuters","variant_count":3,"variants":[{"index":0,"strategy":"Question-led hook with direct pain point.","hooks":["Why are you still settling for station coffee?"],"body":"Variant body","call_to_action":"Carry café-level espresso anywhere.","full_script":"Why are you still settling for station coffee?"}]},"usage":{"credits":8},"error":null,"resource_id":null,"provider_request_id":null,"created_at":"2026-03-25T12:00:00.000Z","updated_at":"2026-03-25T12:00:02.000Z","completed_at":"2026-03-25T12:00:02.000Z"}}}}}},"default":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"type":"https://api.genfire.ai/errors/invalid_prompt","title":"Invalid Prompt","status":400,"detail":"prompt is required.","code":"invalid_prompt","request_id":"req_123"}}}}},"security":[{"bearerAuth":[]}],"parameters":[{"in":"header","name":"Idempotency-Key","required":true,"description":"A unique key for safely retrying the same mutating request without creating duplicates.","schema":{"type":"string"}},{"in":"path","name":"workflowKey","required":true,"description":"A workflow id such as `storyboard`, `hook_pack`, or `creative_pack`.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"description":"The request body depends on the selected workflow key. Use `GET /workflows/{workflowKey}` to inspect the exact schema for that workflow."},"examples":{"storyboard":{"summary":"storyboard","value":{"prompt":"30-second paid social ad for a premium running shoe","title":"Spring Launch Ad","aspect_ratio":"9:16"}},"hook_pack":{"summary":"hook_pack","value":{"prompt":"Portable blender for busy professionals","audience":"Remote workers who skip breakfast","tone":"persuasive","length":"short","target_duration":20,"keywords":["protein shake","commute","healthy"],"additional_requirements":"Lead with convenience and save time."}},"ugc_ad":{"summary":"ugc_ad","value":{"prompt":"Blue light glasses for creators","audience":"Designers and editors working late","tone":"casual","length":"medium"}},"creative_pack":{"summary":"creative_pack","value":{"product_url":"https://example.com/products/matte-black-water-bottle"}},"product_ad_variants":{"summary":"product_ad_variants","value":{"product_name":"Portable espresso maker","product_description":"Travel-friendly espresso maker for commuters","audience":"Commuters and travelers","tone":"persuasive","length":"short","variant_count":3}}}}}}}},"/batches":{"get":{"tags":["batches"],"summary":"List recent batches","description":"Lists batch jobs created by the authenticated account.\n\nRequired scope: `batches:read`.","operationId":"get_batches","responses":{"200":{"description":"List recent batches response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BatchList"},"example":{"object":"list","data":[{"id":"batch_123","object":"batch","mode":"workflow","target":"hook_pack","status":"queued","total_items":2,"completed_items":0,"failed_items":0,"concurrency":2,"input_summary":{"mode":"workflow","target":"hook_pack","item_count":2},"output":null,"error":null,"created_at":"2026-03-25T12:00:00.000Z","updated_at":"2026-03-25T12:00:00.000Z","completed_at":null}]}}}},"default":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"type":"https://api.genfire.ai/errors/invalid_prompt","title":"Invalid Prompt","status":400,"detail":"prompt is required.","code":"invalid_prompt","request_id":"req_123"}}}}},"security":[{"bearerAuth":[]}],"parameters":[{"in":"query","name":"status","required":false,"description":"Optional status filter such as `queued`, `processing`, `completed`, `failed`, or `partial`.","schema":{"type":"string"}},{"in":"query","name":"mode","required":false,"description":"Optional batch mode filter: `workflow` or `operation`.","schema":{"type":"string","enum":["workflow","operation"]}},{"in":"query","name":"target","required":false,"description":"Optional target filter such as `hook_pack` or `images.generations.create`.","schema":{"type":"string"}},{"in":"query","name":"limit","required":false,"description":"Maximum number of batches to return.","schema":{"type":"integer","minimum":1,"maximum":100}}]},"post":{"tags":["batches"],"summary":"Create a batch","description":"Create a batch over workflows or selected generation operations. Each item becomes its own run when processed.\n\nRequired scope: `batches:write`.\n\nThis endpoint requires an `Idempotency-Key` header.\n\nNotes:\n- Current operation batches support `images.generations.create` and `videos.generations.create`.\n- Workflow batches support any workflow listed by `GET /workflows`.\n- Items in `operation`-mode batches accept the same body fields as the operation `target` — e.g. `quality` and `resolution` are honored when batching `images.generations.create`.","operationId":"post_batches","responses":{"201":{"description":"Create a batch response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BatchCreateResponse"},"example":{"id":"batch_123","object":"batch","mode":"workflow","target":"hook_pack","status":"queued","total_items":2,"completed_items":0,"failed_items":0,"concurrency":2,"input_summary":{"mode":"workflow","target":"hook_pack","item_count":2},"output":null,"error":null,"created_at":"2026-03-25T12:00:00.000Z","updated_at":"2026-03-25T12:00:00.000Z","completed_at":null,"items":[{"id":"batch_item_123","object":"batch_item","batch_id":"batch_123","index":0,"target":"hook_pack","status":"queued","run_id":null,"input_summary":{"prompt":"Portable blender for busy professionals"},"output":null,"error":null,"created_at":"2026-03-25T12:00:00.000Z","updated_at":"2026-03-25T12:00:00.000Z","completed_at":null},{"id":"batch_item_124","object":"batch_item","batch_id":"batch_123","index":1,"target":"hook_pack","status":"queued","run_id":null,"input_summary":{"prompt":"Portable blender for college students"},"output":null,"error":null,"created_at":"2026-03-25T12:00:00.000Z","updated_at":"2026-03-25T12:00:00.000Z","completed_at":null}]}}}},"default":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"type":"https://api.genfire.ai/errors/invalid_prompt","title":"Invalid Prompt","status":400,"detail":"prompt is required.","code":"invalid_prompt","request_id":"req_123"}}}}},"security":[{"bearerAuth":[]}],"parameters":[{"in":"header","name":"Idempotency-Key","required":true,"description":"A unique key for safely retrying the same mutating request without creating duplicates.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["mode","target","items"],"properties":{"mode":{"type":"string","enum":["workflow","operation"],"description":"Use `workflow` for workflow batches or `operation` for supported primitive operations."},"target":{"type":"string","description":"Workflow key or supported operation target such as `images.generations.create`."},"concurrency":{"type":"integer","minimum":1,"maximum":5,"description":"How many items to process concurrently."},"items":{"type":"array","minItems":1,"maxItems":50,"description":"Array of batch items. Each item must have an `input` object.","items":{"type":"object","required":["input"],"properties":{"input":{"type":"object","additionalProperties":true}}}}},"additionalProperties":false},"example":{"mode":"workflow","target":"hook_pack","concurrency":2,"items":[{"input":{"prompt":"Portable blender for busy professionals"}},{"input":{"prompt":"Portable blender for college students"}}]}}}}}},"/batches/{batchId}":{"get":{"tags":["batches"],"summary":"Get a batch by id","description":"Returns batch-level status, counts, and summary output.\n\nRequired scope: `batches:read`.","operationId":"get_batches_batchId","responses":{"200":{"description":"Get a batch by id response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Batch"},"example":{"id":"batch_123","object":"batch","mode":"workflow","target":"hook_pack","status":"queued","total_items":2,"completed_items":0,"failed_items":0,"concurrency":2,"input_summary":{"mode":"workflow","target":"hook_pack","item_count":2},"output":null,"error":null,"created_at":"2026-03-25T12:00:00.000Z","updated_at":"2026-03-25T12:00:00.000Z","completed_at":null}}}},"default":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"type":"https://api.genfire.ai/errors/invalid_prompt","title":"Invalid Prompt","status":400,"detail":"prompt is required.","code":"invalid_prompt","request_id":"req_123"}}}}},"security":[{"bearerAuth":[]}],"parameters":[{"in":"path","name":"batchId","required":true,"description":"The batch id returned by `POST /batches`.","schema":{"type":"string"}}]}},"/batches/{batchId}/items":{"get":{"tags":["batches"],"summary":"List items in a batch","description":"Returns one row per batch item so you can inspect per-item progress and run ids.\n\nRequired scope: `batches:read`.","operationId":"get_batches_batchId_items","responses":{"200":{"description":"List items in a batch response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BatchItemList"},"example":{"object":"list","data":[{"id":"batch_item_123","object":"batch_item","batch_id":"batch_123","index":0,"target":"hook_pack","status":"queued","run_id":null,"input_summary":{"prompt":"Portable blender for busy professionals"},"output":null,"error":null,"created_at":"2026-03-25T12:00:00.000Z","updated_at":"2026-03-25T12:00:00.000Z","completed_at":null}]}}}},"default":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"type":"https://api.genfire.ai/errors/invalid_prompt","title":"Invalid Prompt","status":400,"detail":"prompt is required.","code":"invalid_prompt","request_id":"req_123"}}}}},"security":[{"bearerAuth":[]}],"parameters":[{"in":"path","name":"batchId","required":true,"description":"The batch id returned by `POST /batches`.","schema":{"type":"string"}}]}},"/webhooks":{"get":{"tags":["webhooks"],"summary":"List webhook endpoints","description":"Returns webhook destinations registered for the authenticated account.\n\nRequired scope: `webhooks:read`.","operationId":"get_webhooks","responses":{"200":{"description":"List webhook endpoints response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebhookEndpointList"},"example":{"object":"list","data":[{"id":"wh_123","object":"webhook_endpoint","url":"https://example.com/webhooks/genfire","description":"Agency production endpoint","status":"active","events":["run.completed","run.failed"],"signing_secret_preview":"gfwsec_1234...abcd","created_at":"2026-03-25T12:00:00.000Z","updated_at":"2026-03-25T12:00:00.000Z","last_delivery_at":null}]}}}},"default":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"type":"https://api.genfire.ai/errors/invalid_prompt","title":"Invalid Prompt","status":400,"detail":"prompt is required.","code":"invalid_prompt","request_id":"req_123"}}}}},"security":[{"bearerAuth":[]}]},"post":{"tags":["webhooks"],"summary":"Create a webhook endpoint","description":"Registers a webhook destination and returns the signing secret once.\n\nRequired scope: `webhooks:write`.\n\nNotes:\n- Store the signing secret immediately. It is only returned when the endpoint is created.","operationId":"post_webhooks","responses":{"201":{"description":"Create a webhook endpoint response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebhookEndpointCreateResponse"},"example":{"id":"wh_123","object":"webhook_endpoint","url":"https://example.com/webhooks/genfire","description":"Agency production endpoint","status":"active","events":["run.completed","run.failed"],"signing_secret_preview":"gfwsec_1234...abcd","created_at":"2026-03-25T12:00:00.000Z","updated_at":"2026-03-25T12:00:00.000Z","last_delivery_at":null,"signing_secret":"gfwsec_live_example_secret"}}}},"default":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"type":"https://api.genfire.ai/errors/invalid_prompt","title":"Invalid Prompt","status":400,"detail":"prompt is required.","code":"invalid_prompt","request_id":"req_123"}}}}},"security":[{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["url"],"properties":{"url":{"type":"string","description":"Public HTTPS endpoint that will receive webhook POST requests."},"description":{"type":"string","description":"Optional human-readable label for the endpoint."},"events":{"type":"array","items":{"type":"string","enum":["run.completed","run.failed","batch.completed","batch.failed"]},"description":"Optional list of event types to subscribe to.","default":"[\"run.completed\",\"run.failed\"]"}},"additionalProperties":false},"example":{"url":"https://example.com/webhooks/genfire","description":"Agency production endpoint","events":["run.completed","run.failed"]}}}}}},"/webhooks/deliveries":{"get":{"tags":["webhooks"],"summary":"List webhook deliveries","description":"Returns delivery attempts for the authenticated account.\n\nRequired scope: `webhooks:read`.","operationId":"get_webhooks_deliveries","responses":{"200":{"description":"List webhook deliveries response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebhookDeliveryList"},"example":{"object":"list","data":[{"id":"delivery_123","object":"webhook_delivery","endpoint_id":"wh_123","event_type":"run.completed","run_id":"run_img_123","batch_id":null,"status":"success","attempt_count":1,"max_attempts":6,"response_status":200,"response_body":"ok","last_error":null,"request_headers":{"X-GenFire-Signature":"sha256=..."},"created_at":"2026-03-25T12:00:05.000Z","updated_at":"2026-03-25T12:00:05.000Z","last_attempt_at":"2026-03-25T12:00:05.000Z","next_attempt_at":null,"delivered_at":"2026-03-25T12:00:05.000Z"}]}}}},"default":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"type":"https://api.genfire.ai/errors/invalid_prompt","title":"Invalid Prompt","status":400,"detail":"prompt is required.","code":"invalid_prompt","request_id":"req_123"}}}}},"security":[{"bearerAuth":[]}],"parameters":[{"in":"query","name":"endpoint_id","required":false,"description":"Optional webhook endpoint id to filter deliveries.","schema":{"type":"string"}},{"in":"query","name":"limit","required":false,"description":"Maximum number of deliveries to return.","schema":{"type":"integer","minimum":1,"maximum":100}}]}},"/webhooks/deliveries/{deliveryId}/replay":{"post":{"tags":["webhooks"],"summary":"Replay a webhook delivery","description":"Queues a new delivery attempt for an existing webhook delivery record.\n\nRequired scope: `webhooks:write`.","operationId":"post_webhooks_deliveries_deliveryId_replay","responses":{"201":{"description":"Replay a webhook delivery response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebhookDelivery"},"example":{"id":"delivery_456","object":"webhook_delivery","endpoint_id":"wh_123","event_type":"run.completed","run_id":"run_img_123","batch_id":null,"status":"pending","attempt_count":0,"max_attempts":6,"response_status":null,"response_body":null,"last_error":null,"request_headers":{"X-GenFire-Signature":"sha256=..."},"created_at":"2026-03-25T12:00:05.000Z","updated_at":"2026-03-25T12:00:05.000Z","last_attempt_at":null,"next_attempt_at":null,"delivered_at":null}}}},"default":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"type":"https://api.genfire.ai/errors/invalid_prompt","title":"Invalid Prompt","status":400,"detail":"prompt is required.","code":"invalid_prompt","request_id":"req_123"}}}}},"security":[{"bearerAuth":[]}],"parameters":[{"in":"path","name":"deliveryId","required":true,"description":"The webhook delivery id.","schema":{"type":"string"}}]}},"/webhooks/{endpointId}":{"patch":{"tags":["webhooks"],"summary":"Update a webhook endpoint","description":"Update a webhook URL, description, status, or subscribed events.\n\nRequired scope: `webhooks:write`.","operationId":"patch_webhooks_endpointId","responses":{"200":{"description":"Update a webhook endpoint response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebhookEndpoint"},"example":{"id":"wh_123","object":"webhook_endpoint","url":"https://example.com/webhooks/genfire","description":"Agency production endpoint","status":"disabled","events":["run.completed","run.failed"],"signing_secret_preview":"gfwsec_1234...abcd","created_at":"2026-03-25T12:00:00.000Z","updated_at":"2026-03-25T12:05:00.000Z","last_delivery_at":null}}}},"default":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"type":"https://api.genfire.ai/errors/invalid_prompt","title":"Invalid Prompt","status":400,"detail":"prompt is required.","code":"invalid_prompt","request_id":"req_123"}}}}},"security":[{"bearerAuth":[]}],"parameters":[{"in":"path","name":"endpointId","required":true,"description":"The webhook endpoint id.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"url":{"type":"string","description":"New destination URL."},"description":{"type":"string","nullable":true,"description":"New description or `null` to clear it."},"status":{"type":"string","enum":["active","disabled"],"description":"Use `active` or `disabled`."},"events":{"type":"array","items":{"type":"string","enum":["run.completed","run.failed","batch.completed","batch.failed"]},"description":"Replacement list of subscribed event types."}},"additionalProperties":false},"example":{"status":"disabled"}}}}},"delete":{"tags":["webhooks"],"summary":"Delete a webhook endpoint","description":"Deletes the webhook endpoint. The endpoint id is no longer usable after deletion.\n\nRequired scope: `webhooks:write`.","operationId":"delete_webhooks_endpointId","responses":{"204":{"description":"No content"},"default":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"type":"https://api.genfire.ai/errors/invalid_prompt","title":"Invalid Prompt","status":400,"detail":"prompt is required.","code":"invalid_prompt","request_id":"req_123"}}}}},"security":[{"bearerAuth":[]}],"parameters":[{"in":"path","name":"endpointId","required":true,"description":"The webhook endpoint id.","schema":{"type":"string"}}]}}}}