{"openapi":"3.1.0","info":{"title":"flow-api","description":"Google Flow (Imagen + Veo) — reverse-engineered API + dashboard.","version":"0.2.0"},"paths":{"/api/auth/login":{"post":{"summary":"Login","operationId":"login_api_auth_login_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LoginRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/auth/logout":{"post":{"summary":"Logout","operationId":"logout_api_auth_logout_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/auth/whoami":{"get":{"summary":"Whoami","operationId":"whoami_api_auth_whoami_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/harvest/bearer":{"post":{"summary":"Harvest Bearer","operationId":"harvest_bearer_api_harvest_bearer_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/HarvestBearer"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/harvest/recaptcha":{"post":{"summary":"Harvest Recaptcha","operationId":"harvest_recaptcha_api_harvest_recaptcha_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/HarvestRecaptcha"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/harvest/cookies":{"post":{"summary":"Harvest Cookies","operationId":"harvest_cookies_api_harvest_cookies_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/HarvestCookies"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/harvest/proxy":{"post":{"summary":"Harvest Proxy","operationId":"harvest_proxy_api_harvest_proxy_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/HarvestProxy"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/harvest/ping":{"get":{"summary":"Harvest Ping","operationId":"harvest_ping_api_harvest_ping_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/generate/image":{"post":{"summary":"Generate Image","operationId":"generate_image_api_generate_image_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenerateImageRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenerateResult"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/generate/video":{"post":{"summary":"Generate Video","operationId":"generate_video_api_generate_video_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenerateVideoRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenerateResult"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/generate/video/extend":{"post":{"summary":"Extend Video","operationId":"extend_video_api_generate_video_extend_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExtendVideoRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenerateResult"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/generate/image/upscale":{"post":{"summary":"Upscale Image","operationId":"upscale_image_api_generate_image_upscale_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpscaleImageRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenerateResult"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/generate/video/status":{"post":{"summary":"Video Status","operationId":"video_status_api_generate_video_status_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/VideoStatusRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/generate/log":{"get":{"summary":"Generation Log","operationId":"generation_log_api_generate_log_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":50,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/accounts":{"get":{"summary":"List Accounts","operationId":"list_accounts_api_accounts_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/AccountStatus"},"type":"array","title":"Response List Accounts Api Accounts Get"}}}}}}},"/api/accounts/{email}":{"delete":{"summary":"Remove Account","operationId":"remove_account_api_accounts__email__delete","parameters":[{"name":"email","in":"path","required":true,"schema":{"type":"string","title":"Email"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/accounts/{email}/cookies":{"get":{"summary":"Show Cookies","description":"Diagnostic: show cookie names (NOT values) for an account.","operationId":"show_cookies_api_accounts__email__cookies_get","parameters":[{"name":"email","in":"path","required":true,"schema":{"type":"string","title":"Email"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/accounts/{email}/cookies-export":{"get":{"summary":"Export Cookies","description":"Export cookies in Playwright/Patchright shape — feed this to flow-minter.\n\nPrefers full detail captures (with original domain/path/secure flags) over\nthe legacy flat name->value store. Caller is authed; treat output as secret.","operationId":"export_cookies_api_accounts__email__cookies_export_get","parameters":[{"name":"email","in":"path","required":true,"schema":{"type":"string","title":"Email"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/proxies":{"get":{"summary":"List Proxies","operationId":"list_proxies_api_proxies_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/ProxyOut"},"type":"array","title":"Response List Proxies Api Proxies Get"}}}}}},"post":{"summary":"Add Proxy","operationId":"add_proxy_api_proxies_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProxyIn"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProxyOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/proxies/{pid}":{"delete":{"summary":"Delete Proxy","operationId":"delete_proxy_api_proxies__pid__delete","parameters":[{"name":"pid","in":"path","required":true,"schema":{"type":"string","title":"Pid"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/proxies/assign":{"post":{"summary":"Assign Proxy","description":"Assign a proxy to an account. `proxy` can be a URL or 'id:<pid>'.","operationId":"assign_proxy_api_proxies_assign_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AssignProxyRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/extension/manifest":{"get":{"summary":"Manifest Info","description":"Return version + install steps + autoconfig snippet for the dashboard.","operationId":"manifest_info_api_extension_manifest_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/extension/download":{"get":{"summary":"Download Zip","description":"Stream the flow-harvester directory as a ZIP.","operationId":"download_zip_api_extension_download_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/tunnel/connections":{"get":{"summary":"List Connections","operationId":"list_connections_api_tunnel_connections_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/minter/status":{"get":{"summary":"Minter Status","description":"Combined status: shared queue depths from Redis + remote /health from flow-minter.","operationId":"minter_status_api_minter_status_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/minter/refresh-cookies":{"post":{"summary":"Minter Refresh Cookies","description":"Tell flow-minter to pull fresh cookies from flow-api (which the extension keeps current).","operationId":"minter_refresh_cookies_api_minter_refresh_cookies_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/health":{"get":{"summary":"Health","operationId":"health_api_health_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/":{"get":{"summary":"Root Index","operationId":"root_index__get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/{path}":{"get":{"summary":"Spa Catchall","operationId":"spa_catchall__path__get","parameters":[{"name":"path","in":"path","required":true,"schema":{"type":"string","title":"Path"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"AccountStatus":{"properties":{"email":{"type":"string","title":"Email"},"has_bearer":{"type":"boolean","title":"Has Bearer"},"bearer_age_seconds":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Bearer Age Seconds"},"recaptcha_queue_size":{"type":"integer","title":"Recaptcha Queue Size","default":0},"last_recaptcha_age_seconds":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Last Recaptcha Age Seconds"},"project_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Project Id"},"proxy":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Proxy"},"user_agent":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"User Agent"},"credits":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Credits"}},"type":"object","required":["email","has_bearer"],"title":"AccountStatus"},"AssignProxyRequest":{"properties":{"email":{"type":"string","title":"Email"},"proxy":{"type":"string","title":"Proxy","default":""}},"type":"object","required":["email"],"title":"AssignProxyRequest"},"ExtendVideoRequest":{"properties":{"prompt":{"type":"string","title":"Prompt"},"base_media_id":{"type":"string","title":"Base Media Id"},"scene_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Scene Id"},"aspect_ratio":{"type":"string","enum":["VIDEO_ASPECT_RATIO_LANDSCAPE","VIDEO_ASPECT_RATIO_PORTRAIT","VIDEO_ASPECT_RATIO_SQUARE"],"title":"Aspect Ratio","default":"VIDEO_ASPECT_RATIO_PORTRAIT"},"model":{"type":"string","title":"Model","default":"veo_3_1_extension_lite"},"seed":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Seed"},"account_email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Account Email"}},"type":"object","required":["prompt","base_media_id"],"title":"ExtendVideoRequest"},"GenerateImageRequest":{"properties":{"prompt":{"type":"string","title":"Prompt"},"aspect_ratio":{"type":"string","enum":["IMAGE_ASPECT_RATIO_LANDSCAPE","IMAGE_ASPECT_RATIO_PORTRAIT","IMAGE_ASPECT_RATIO_SQUARE"],"title":"Aspect Ratio","default":"IMAGE_ASPECT_RATIO_SQUARE"},"model":{"type":"string","title":"Model","default":"NARWHAL"},"seed":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Seed"},"account_email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Account Email"}},"type":"object","required":["prompt"],"title":"GenerateImageRequest"},"GenerateResult":{"properties":{"ok":{"type":"boolean","title":"Ok"},"media_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Media Url"},"media_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Media Id"},"workflow_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Workflow Id"},"account_used":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Account Used"},"credits_remaining":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Credits Remaining"},"error":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error"},"raw":{"anyOf":[{"type":"object"},{"type":"null"}],"title":"Raw"}},"type":"object","required":["ok"],"title":"GenerateResult"},"GenerateVideoRequest":{"properties":{"prompt":{"type":"string","title":"Prompt"},"aspect_ratio":{"type":"string","enum":["VIDEO_ASPECT_RATIO_LANDSCAPE","VIDEO_ASPECT_RATIO_PORTRAIT","VIDEO_ASPECT_RATIO_SQUARE"],"title":"Aspect Ratio","default":"VIDEO_ASPECT_RATIO_PORTRAIT"},"model":{"type":"string","title":"Model","default":"veo_3_1_fast"},"seed":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Seed"},"account_email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Account Email"}},"type":"object","required":["prompt"],"title":"GenerateVideoRequest"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"HarvestBearer":{"properties":{"account_email":{"type":"string","title":"Account Email"},"bearer_token":{"type":"string","title":"Bearer Token"},"project_id":{"type":"string","title":"Project Id"},"session_id":{"type":"string","title":"Session Id"},"user_agent":{"type":"string","title":"User Agent"},"sec_ch_ua":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Sec Ch Ua"},"accept_language":{"type":"string","title":"Accept Language","default":"en-US,en;q=0.9"},"captured_at_ms":{"type":"integer","title":"Captured At Ms"}},"type":"object","required":["account_email","bearer_token","project_id","session_id","user_agent","captured_at_ms"],"title":"HarvestBearer"},"HarvestCookies":{"properties":{"account_email":{"type":"string","title":"Account Email"},"cookies":{"additionalProperties":{"type":"string"},"type":"object","title":"Cookies"},"cookies_detailed":{"anyOf":[{"items":{"type":"object"},"type":"array"},{"type":"null"}],"title":"Cookies Detailed"},"captured_at_ms":{"type":"integer","title":"Captured At Ms"}},"type":"object","required":["account_email","cookies","captured_at_ms"],"title":"HarvestCookies"},"HarvestProxy":{"properties":{"account_email":{"type":"string","title":"Account Email"},"proxy":{"type":"string","title":"Proxy"},"captured_at_ms":{"type":"integer","title":"Captured At Ms"}},"type":"object","required":["account_email","proxy","captured_at_ms"],"title":"HarvestProxy"},"HarvestRecaptcha":{"properties":{"account_email":{"type":"string","title":"Account Email"},"token":{"type":"string","title":"Token"},"captured_at_ms":{"type":"integer","title":"Captured At Ms"},"expected_action":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Expected Action"}},"type":"object","required":["account_email","token","captured_at_ms"],"title":"HarvestRecaptcha"},"LoginRequest":{"properties":{"api_key":{"type":"string","title":"Api Key"}},"type":"object","required":["api_key"],"title":"LoginRequest"},"ProxyIn":{"properties":{"name":{"type":"string","title":"Name"},"url":{"type":"string","title":"Url"},"country":{"type":"string","title":"Country","default":""},"notes":{"type":"string","title":"Notes","default":""}},"type":"object","required":["name","url"],"title":"ProxyIn"},"ProxyOut":{"properties":{"id":{"type":"string","title":"Id"},"name":{"type":"string","title":"Name"},"url":{"type":"string","title":"Url"},"country":{"type":"string","title":"Country","default":""},"notes":{"type":"string","title":"Notes","default":""},"created_at":{"type":"integer","title":"Created At"}},"type":"object","required":["id","name","url","created_at"],"title":"ProxyOut"},"UpscaleImageRequest":{"properties":{"media_id":{"type":"string","title":"Media Id"},"target_resolution":{"type":"string","enum":["UPSAMPLE_IMAGE_RESOLUTION_2K","UPSAMPLE_IMAGE_RESOLUTION_4K"],"title":"Target Resolution","default":"UPSAMPLE_IMAGE_RESOLUTION_2K"},"account_email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Account Email"}},"type":"object","required":["media_id"],"title":"UpscaleImageRequest"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"},"VideoStatusRequest":{"properties":{"workflow_ids":{"items":{"type":"string"},"type":"array","title":"Workflow Ids"},"account_email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Account Email"}},"type":"object","required":["workflow_ids"],"title":"VideoStatusRequest"}}}}