{"openapi":"3.1.0","info":{"title":"WebArm24","version":"0.1.0"},"paths":{"/api/auth/register":{"post":{"tags":["auth"],"summary":"Register","operationId":"register_api_auth_register_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RegisterBody"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TokenResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/auth/login":{"post":{"tags":["auth"],"summary":"Login","operationId":"login_api_auth_login_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LoginBody"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TokenResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/auth/forgot-password":{"post":{"tags":["auth"],"summary":"Forgot Password","description":"Always returns the same shape (no email enumeration).","operationId":"forgot_password_api_auth_forgot_password_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ForgotPasswordBody"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Forgot Password Api Auth Forgot Password Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/auth/reset-password":{"post":{"tags":["auth"],"summary":"Reset Password","operationId":"reset_password_api_auth_reset_password_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResetPasswordBody"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TokenResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/auth/me":{"get":{"tags":["auth"],"summary":"Me","operationId":"me_api_auth_me_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserPublic"}}}}},"security":[{"HTTPBearer":[]}]},"patch":{"tags":["auth"],"summary":"Patch Me","operationId":"patch_me_api_auth_me_patch","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PatchMeBody"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserPublic"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/auth/verify-email":{"get":{"tags":["auth"],"summary":"Verify Email","operationId":"verify_email_api_auth_verify_email_get","parameters":[{"name":"token","in":"query","required":true,"schema":{"type":"string","title":"Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/auth/resend-verification":{"post":{"tags":["auth"],"summary":"Resend Verification","operationId":"resend_verification_api_auth_resend_verification_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":{"type":"boolean"},"type":"object","title":"Response Resend Verification Api Auth Resend Verification Post"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/auth/google/start":{"get":{"tags":["auth"],"summary":"Google Oauth Start","operationId":"google_oauth_start_api_auth_google_start_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/auth/google/callback":{"get":{"tags":["auth"],"summary":"Google Oauth Callback","operationId":"google_oauth_callback_api_auth_google_callback_get","parameters":[{"name":"code","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Code"}},{"name":"state","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"State"}},{"name":"error","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/auth/config":{"get":{"tags":["auth"],"summary":"Auth Config","description":"What the front-end pages can show (no secrets).","operationId":"auth_config_api_auth_config_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Auth Config Api Auth Config Get"}}}}}}},"/api/auth/me/browser-sessions":{"get":{"tags":["auth","browser-sessions"],"summary":"List Browser Sessions","operationId":"list_browser_sessions_api_auth_me_browser_sessions_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Response List Browser Sessions Api Auth Me Browser Sessions Get"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/auth/me/browser-sessions/{label}":{"get":{"tags":["auth","browser-sessions"],"summary":"Get Browser Session","operationId":"get_browser_session_api_auth_me_browser_sessions__label__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"label","in":"path","required":true,"schema":{"type":"string","minLength":1,"maxLength":128,"title":"Label"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GetBrowserStorageResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["auth","browser-sessions"],"summary":"Put Browser Session","operationId":"put_browser_session_api_auth_me_browser_sessions__label__put","security":[{"HTTPBearer":[]}],"parameters":[{"name":"label","in":"path","required":true,"schema":{"type":"string","minLength":1,"maxLength":128,"title":"Label"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PutBrowserStorageBody"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Put Browser Session Api Auth Me Browser Sessions  Label  Put"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["auth","browser-sessions"],"summary":"Delete Browser Session","operationId":"delete_browser_session_api_auth_me_browser_sessions__label__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"label","in":"path","required":true,"schema":{"type":"string","minLength":1,"maxLength":128,"title":"Label"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Delete Browser Session Api Auth Me Browser Sessions  Label  Delete"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/data-storage":{"get":{"tags":["data-storage"],"summary":"List Stores","operationId":"list_stores_api_data_storage_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Response List Stores Api Data Storage Get"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/data-storage/files":{"get":{"tags":["data-storage"],"summary":"List Files","operationId":"list_files_api_data_storage_files_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"prefix","in":"query","required":false,"schema":{"type":"string","default":"","title":"Prefix"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","additionalProperties":true},"title":"Response List Files Api Data Storage Files Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/data-storage/files/{name}":{"put":{"tags":["data-storage"],"summary":"Upload File","description":"Raw-body upload (Content-Type ignored); streamed to disk with per-file/total caps.","operationId":"upload_file_api_data_storage_files__name__put","security":[{"HTTPBearer":[]}],"parameters":[{"name":"name","in":"path","required":true,"schema":{"type":"string","title":"Name"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Upload File Api Data Storage Files  Name  Put"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["data-storage"],"summary":"Download File","operationId":"download_file_api_data_storage_files__name__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"name","in":"path","required":true,"schema":{"type":"string","title":"Name"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["data-storage"],"summary":"Delete File","operationId":"delete_file_api_data_storage_files__name__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"name","in":"path","required":true,"schema":{"type":"string","title":"Name"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/data-storage/{name}":{"get":{"tags":["data-storage"],"summary":"Get Store","operationId":"get_store_api_data_storage__name__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"name","in":"path","required":true,"schema":{"type":"string","title":"Name"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["data-storage"],"summary":"Put Store","operationId":"put_store_api_data_storage__name__put","security":[{"HTTPBearer":[]}],"parameters":[{"name":"name","in":"path","required":true,"schema":{"type":"string","title":"Name"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PutStoreBody"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Put Store Api Data Storage  Name  Put"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["data-storage"],"summary":"Remove Store","operationId":"remove_store_api_data_storage__name__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"name","in":"path","required":true,"schema":{"type":"string","title":"Name"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/agent/jobs":{"post":{"tags":["agent"],"summary":"Create Agent Job","operationId":"create_agent_job_api_agent_jobs_post","security":[{"HTTPBearer":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentJobCreate"}}}},"responses":{"202":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentJobQueued"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["agent"],"summary":"List Agent Jobs","operationId":"list_agent_jobs_api_agent_jobs_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":50,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentJobListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/agent/jobs/{job_id}":{"get":{"tags":["agent"],"summary":"Get Agent Job","operationId":"get_agent_job_api_agent_jobs__job_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","title":"Job Id"}},{"name":"structured_data_only","in":"query","required":false,"schema":{"type":"boolean","description":"If true, the response body is only the parsed structured JSON (or null), same idea as schedule webhooks with webhook_structured_data_only — no job envelope. While the job is queued or running: HTTP 202 with body null. When completed: HTTP 200 with the parsed object/array from the assistant reply. When failed: HTTP 200 with null.","default":false,"title":"Structured Data Only"},"description":"If true, the response body is only the parsed structured JSON (or null), same idea as schedule webhooks with webhook_structured_data_only — no job envelope. While the job is queued or running: HTTP 202 with body null. When completed: HTTP 200 with the parsed object/array from the assistant reply. When failed: HTTP 200 with null."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/schedules":{"get":{"tags":["schedules"],"summary":"List Schedules","operationId":"list_schedules_api_schedules_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"x-schedule-api-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Schedule-Api-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response List Schedules Api Schedules Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["schedules"],"summary":"Create Schedule","operationId":"create_schedule_api_schedules_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"x-schedule-api-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Schedule-Api-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ScheduleCreate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Create Schedule Api Schedules Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/schedules/import":{"post":{"tags":["schedules"],"summary":"Import Schedule","operationId":"import_schedule_api_schedules_import_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"x-schedule-api-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Schedule-Api-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Import Schedule Api Schedules Import Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/schedules/{schedule_id}/export":{"get":{"tags":["schedules"],"summary":"Export Schedule","operationId":"export_schedule_api_schedules__schedule_id__export_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"schedule_id","in":"path","required":true,"schema":{"type":"string","title":"Schedule Id"}},{"name":"x-schedule-api-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Schedule-Api-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/schedules/{schedule_id}":{"get":{"tags":["schedules"],"summary":"Get One","operationId":"get_one_api_schedules__schedule_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"schedule_id","in":"path","required":true,"schema":{"type":"string","title":"Schedule Id"}},{"name":"x-schedule-api-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Schedule-Api-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get One Api Schedules  Schedule Id  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"patch":{"tags":["schedules"],"summary":"Patch Schedule","operationId":"patch_schedule_api_schedules__schedule_id__patch","security":[{"HTTPBearer":[]}],"parameters":[{"name":"schedule_id","in":"path","required":true,"schema":{"type":"string","title":"Schedule Id"}},{"name":"x-schedule-api-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Schedule-Api-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ScheduleUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Patch Schedule Api Schedules  Schedule Id  Patch"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["schedules"],"summary":"Remove Schedule","operationId":"remove_schedule_api_schedules__schedule_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"schedule_id","in":"path","required":true,"schema":{"type":"string","title":"Schedule Id"}},{"name":"x-schedule-api-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Schedule-Api-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":{"type":"boolean"},"title":"Response Remove Schedule Api Schedules  Schedule Id  Delete"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/schedules/{schedule_id}/run":{"post":{"tags":["schedules"],"summary":"Run Now","operationId":"run_now_api_schedules__schedule_id__run_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"schedule_id","in":"path","required":true,"schema":{"type":"string","title":"Schedule Id"}},{"name":"x-schedule-api-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Schedule-Api-Key"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ScheduleRunBody","default":{}}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Run Now Api Schedules  Schedule Id  Run Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/schedules/webhook/test":{"post":{"tags":["schedules"],"summary":"Webhook Test","operationId":"webhook_test_api_schedules_webhook_test_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"x-schedule-api-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Schedule-Api-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebhookTestBody"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Webhook Test Api Schedules Webhook Test Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/webhooks/automation/{schedule_id}/{token}":{"get":{"tags":["webhooks"],"summary":"Inbound Trigger Run","description":"Run this automation without the schedule API key. The secret is the token in the URL.\nSame effect as cron when it fires; outbound result is still POSTed to the schedule's webhook_url.\n\nPOST JSON body (optional): { \"variables\": { \"left\": \"...\", \"right\": \"...\" } } — merged with\nstored schedule task_variables (override wins). GET has no body.","operationId":"inbound_trigger_run_api_webhooks_automation__schedule_id___token__get","parameters":[{"name":"schedule_id","in":"path","required":true,"schema":{"type":"string","title":"Schedule Id"}},{"name":"token","in":"path","required":true,"schema":{"type":"string","title":"Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Inbound Trigger Run Api Webhooks Automation  Schedule Id   Token  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["webhooks"],"summary":"Inbound Trigger Run","description":"Run this automation without the schedule API key. The secret is the token in the URL.\nSame effect as cron when it fires; outbound result is still POSTed to the schedule's webhook_url.\n\nPOST JSON body (optional): { \"variables\": { \"left\": \"...\", \"right\": \"...\" } } — merged with\nstored schedule task_variables (override wins). GET has no body.","operationId":"inbound_trigger_run_api_webhooks_automation__schedule_id___token__post","parameters":[{"name":"schedule_id","in":"path","required":true,"schema":{"type":"string","title":"Schedule Id"}},{"name":"token","in":"path","required":true,"schema":{"type":"string","title":"Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Inbound Trigger Run Api Webhooks Automation  Schedule Id   Token  Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"head":{"tags":["webhooks"],"summary":"Inbound Trigger Probe","description":"Validate URL/token without running the automation.","operationId":"inbound_trigger_probe_api_webhooks_automation__schedule_id___token__head","parameters":[{"name":"schedule_id","in":"path","required":true,"schema":{"type":"string","title":"Schedule Id"}},{"name":"token","in":"path","required":true,"schema":{"type":"string","title":"Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/pipelines":{"get":{"tags":["pipelines"],"summary":"List Pipelines","operationId":"list_pipelines_api_pipelines_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"x-schedule-api-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Schedule-Api-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["pipelines"],"summary":"Create Pipeline","operationId":"create_pipeline_api_pipelines_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"x-schedule-api-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Schedule-Api-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PipelineCreate"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/pipelines/active-runs":{"get":{"tags":["pipelines"],"summary":"List Active Runs","description":"In-flight runs (manual, cron, run_at, inbound trigger) for the caller's pipelines.","operationId":"list_active_runs_api_pipelines_active_runs_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"x-schedule-api-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Schedule-Api-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/pipelines/run-summary":{"get":{"tags":["pipelines"],"summary":"List Run Summary","description":"Last 5 runs (status + timestamps) per pipeline, keyed by pipeline id — sidebar run bars.","operationId":"list_run_summary_api_pipelines_run_summary_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"x-schedule-api-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Schedule-Api-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/pipelines/deleted":{"get":{"tags":["pipelines"],"summary":"List Deleted Pipelines","description":"Deleted pipelines that can be restored from their change history.","operationId":"list_deleted_pipelines_api_pipelines_deleted_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"x-schedule-api-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Schedule-Api-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/pipelines/deleted/{pipeline_id}/restore":{"post":{"tags":["pipelines"],"summary":"Restore Deleted Pipeline","description":"Re-create a deleted pipeline (same id, disabled, new trigger token) from its last snapshot.","operationId":"restore_deleted_pipeline_api_pipelines_deleted__pipeline_id__restore_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"pipeline_id","in":"path","required":true,"schema":{"type":"string","title":"Pipeline Id"}},{"name":"x-schedule-api-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Schedule-Api-Key"}}],"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/pipelines/{pipeline_id}":{"get":{"tags":["pipelines"],"summary":"Get Pipeline","operationId":"get_pipeline_api_pipelines__pipeline_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"pipeline_id","in":"path","required":true,"schema":{"type":"string","title":"Pipeline Id"}},{"name":"x-schedule-api-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Schedule-Api-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"patch":{"tags":["pipelines"],"summary":"Update Pipeline","operationId":"update_pipeline_api_pipelines__pipeline_id__patch","security":[{"HTTPBearer":[]}],"parameters":[{"name":"pipeline_id","in":"path","required":true,"schema":{"type":"string","title":"Pipeline Id"}},{"name":"x-schedule-api-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Schedule-Api-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PipelineUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["pipelines"],"summary":"Delete Pipeline","operationId":"delete_pipeline_api_pipelines__pipeline_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"pipeline_id","in":"path","required":true,"schema":{"type":"string","title":"Pipeline Id"}},{"name":"x-schedule-api-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Schedule-Api-Key"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/pipelines/{pipeline_id}/history":{"get":{"tags":["pipelines"],"summary":"List Pipeline History","description":"Revisions newest first: {id, seq, action, source, source_detail, changed_fields, created_at, updated_at}.","operationId":"list_pipeline_history_api_pipelines__pipeline_id__history_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"pipeline_id","in":"path","required":true,"schema":{"type":"string","title":"Pipeline Id"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":50,"title":"Limit"}},{"name":"before_seq","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Before Seq"}},{"name":"x-schedule-api-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Schedule-Api-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/pipelines/{pipeline_id}/history/{revision_id}":{"get":{"tags":["pipelines"],"summary":"Get Pipeline Revision","description":"One revision with its snapshot and the diff against the previous revision.","operationId":"get_pipeline_revision_api_pipelines__pipeline_id__history__revision_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"pipeline_id","in":"path","required":true,"schema":{"type":"string","title":"Pipeline Id"}},{"name":"revision_id","in":"path","required":true,"schema":{"type":"string","title":"Revision Id"}},{"name":"x-schedule-api-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Schedule-Api-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/pipelines/{pipeline_id}/history/{revision_id}/restore":{"post":{"tags":["pipelines"],"summary":"Restore Pipeline Revision","description":"Restore the pipeline to the state saved in a revision (records a new `restore` revision).","operationId":"restore_pipeline_revision_api_pipelines__pipeline_id__history__revision_id__restore_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"pipeline_id","in":"path","required":true,"schema":{"type":"string","title":"Pipeline Id"}},{"name":"revision_id","in":"path","required":true,"schema":{"type":"string","title":"Revision Id"}},{"name":"x-schedule-api-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Schedule-Api-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/pipelines/{pipeline_id}/run":{"post":{"tags":["pipelines"],"summary":"Run Pipeline","operationId":"run_pipeline_api_pipelines__pipeline_id__run_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"pipeline_id","in":"path","required":true,"schema":{"type":"string","title":"Pipeline Id"}},{"name":"x-schedule-api-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Schedule-Api-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PipelineRunBody"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/pipelines/test-step":{"post":{"tags":["pipelines"],"summary":"Test Pipeline Step","description":"Execute a single step in isolation (used by the pipeline editor's \"Test step\" button).\n\nThe step does NOT have to belong to a saved pipeline — the editor sends the\nin-progress step body so users can validate work before saving.","operationId":"test_pipeline_step_api_pipelines_test_step_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"x-schedule-api-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Schedule-Api-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TestStepBody"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/pipelines/mcp/tools":{"post":{"tags":["pipelines"],"summary":"List Mcp Server Tools","description":"List the tools a remote MCP server exposes (editor tool picker for mcp steps).","operationId":"list_mcp_server_tools_api_pipelines_mcp_tools_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"x-schedule-api-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Schedule-Api-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/McpToolsBody"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/pipelines/{pipeline_id}/runs":{"get":{"tags":["pipelines"],"summary":"List Runs","operationId":"list_runs_api_pipelines__pipeline_id__runs_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"pipeline_id","in":"path","required":true,"schema":{"type":"string","title":"Pipeline Id"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":10,"title":"Limit"}},{"name":"x-schedule-api-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Schedule-Api-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/pipelines/{pipeline_id}/runs/{run_id}":{"get":{"tags":["pipelines"],"summary":"Get Pipeline Run","operationId":"get_pipeline_run_api_pipelines__pipeline_id__runs__run_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"pipeline_id","in":"path","required":true,"schema":{"type":"string","title":"Pipeline Id"}},{"name":"run_id","in":"path","required":true,"schema":{"type":"string","title":"Run Id"}},{"name":"x-schedule-api-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Schedule-Api-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/pipelines/{pipeline_id}/runs/{run_id}/cancel":{"post":{"tags":["pipelines"],"summary":"Cancel Pipeline Run","description":"Best-effort cooperative cancel: the run stops after the current step\n(or before the next top-level / branch step). Not shared across app workers.","operationId":"cancel_pipeline_run_api_pipelines__pipeline_id__runs__run_id__cancel_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"pipeline_id","in":"path","required":true,"schema":{"type":"string","title":"Pipeline Id"}},{"name":"run_id","in":"path","required":true,"schema":{"type":"string","title":"Run Id"}},{"name":"x-schedule-api-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Schedule-Api-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/pipelines/{pipeline_id}/runs/{run_id}/debug-chat":{"post":{"tags":["pipelines"],"summary":"Pipeline Run Debug Chat","description":"Stream AI suggestions for debugging a pipeline run (SSE: data: {json}\\n\\n).\nRequires sign-in or X-Schedule-API-Key (same as test-step).","operationId":"pipeline_run_debug_chat_api_pipelines__pipeline_id__runs__run_id__debug_chat_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"pipeline_id","in":"path","required":true,"schema":{"type":"string","title":"Pipeline Id"}},{"name":"run_id","in":"path","required":true,"schema":{"type":"string","title":"Run Id"}},{"name":"x-schedule-api-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Schedule-Api-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PipelineRunDebugChatBody"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/pipeline-groups":{"get":{"tags":["pipeline-groups"],"summary":"List Groups","operationId":"list_groups_api_pipeline_groups_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response List Groups Api Pipeline Groups Get"}}}}},"security":[{"HTTPBearer":[]}]},"put":{"tags":["pipeline-groups"],"summary":"Replace Groups","description":"Replace the whole document (used by the UI).","operationId":"replace_groups_api_pipeline_groups_put","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GroupsDocBody"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Replace Groups Api Pipeline Groups Put"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]},"post":{"tags":["pipeline-groups"],"summary":"Create Group","operationId":"create_group_api_pipeline_groups_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateGroupBody"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Create Group Api Pipeline Groups Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/pipeline-groups/{group_id}":{"patch":{"tags":["pipeline-groups"],"summary":"Patch Group","operationId":"patch_group_api_pipeline_groups__group_id__patch","security":[{"HTTPBearer":[]}],"parameters":[{"name":"group_id","in":"path","required":true,"schema":{"type":"string","title":"Group Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PatchGroupBody"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Patch Group Api Pipeline Groups  Group Id  Patch"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["pipeline-groups"],"summary":"Delete Group","description":"Delete a group; its pipelines stay, just ungrouped.","operationId":"delete_group_api_pipeline_groups__group_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"group_id","in":"path","required":true,"schema":{"type":"string","title":"Group Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Delete Group Api Pipeline Groups  Group Id  Delete"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/pipeline-groups/assignments/{pipeline_id}":{"put":{"tags":["pipeline-groups"],"summary":"Assign Pipeline","description":"Move a pipeline into a group, or ungroup it with ``group_id: null``.","operationId":"assign_pipeline_api_pipeline_groups_assignments__pipeline_id__put","security":[{"HTTPBearer":[]}],"parameters":[{"name":"pipeline_id","in":"path","required":true,"schema":{"type":"string","title":"Pipeline Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AssignBody"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Assign Pipeline Api Pipeline Groups Assignments  Pipeline Id  Put"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/webhooks/pipeline/{pipeline_id}/{token}":{"get":{"tags":["pipeline-webhooks"],"summary":"Inbound Pipeline Trigger","operationId":"inbound_pipeline_trigger_api_webhooks_pipeline__pipeline_id___token__get","parameters":[{"name":"pipeline_id","in":"path","required":true,"schema":{"type":"string","title":"Pipeline Id"}},{"name":"token","in":"path","required":true,"schema":{"type":"string","title":"Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"head":{"tags":["pipeline-webhooks"],"summary":"Inbound Pipeline Trigger","operationId":"inbound_pipeline_trigger_api_webhooks_pipeline__pipeline_id___token__get","parameters":[{"name":"pipeline_id","in":"path","required":true,"schema":{"type":"string","title":"Pipeline Id"}},{"name":"token","in":"path","required":true,"schema":{"type":"string","title":"Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["pipeline-webhooks"],"summary":"Inbound Pipeline Trigger","operationId":"inbound_pipeline_trigger_api_webhooks_pipeline__pipeline_id___token__get","parameters":[{"name":"pipeline_id","in":"path","required":true,"schema":{"type":"string","title":"Pipeline Id"}},{"name":"token","in":"path","required":true,"schema":{"type":"string","title":"Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/pipelines/builder/chat":{"post":{"tags":["pipeline-builder"],"summary":"Builder Chat","description":"Stream pipeline builder agent responses as Server-Sent Events.","operationId":"builder_chat_api_pipelines_builder_chat_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/_BuilderChatRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/pipelines/builder/generate-python":{"post":{"tags":["pipeline-builder"],"summary":"Generate Python Script","description":"Stream a generated Python step script as SSE token events.","operationId":"generate_python_script_api_pipelines_builder_generate_python_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/_GeneratePythonRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/pipelines/builder/generate-js":{"post":{"tags":["pipeline-builder"],"summary":"Generate Js Script","description":"Stream a generated JavaScript step snippet as SSE token events.","operationId":"generate_js_script_api_pipelines_builder_generate_js_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/_GenerateJsRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/pipelines/builder/format-python":{"post":{"tags":["pipeline-builder"],"summary":"Format Python Source","description":"Format a pipeline Python script with Black; preserve {{template}} tokens.","operationId":"format_python_source_api_pipelines_builder_format_python_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/_FormatPythonRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/stats":{"get":{"tags":["admin"],"summary":"Get Stats","operationId":"get_stats_api_admin_stats_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Get Stats Api Admin Stats Get"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/admin/users":{"get":{"tags":["admin"],"summary":"List Users","operationId":"list_users_api_admin_users_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"query","in":"query","required":false,"schema":{"type":"string","default":"","title":"Query"}},{"name":"page","in":"query","required":false,"schema":{"type":"integer","default":1,"title":"Page"}},{"name":"page_size","in":"query","required":false,"schema":{"type":"integer","default":25,"title":"Page Size"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response List Users Api Admin Users Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/users/{user_id}":{"patch":{"tags":["admin"],"summary":"Set User Admin","operationId":"set_user_admin_api_admin_users__user_id__patch","security":[{"HTTPBearer":[]}],"parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"string","title":"User Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/_AdminSetBody"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Set User Admin Api Admin Users  User Id  Patch"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["admin"],"summary":"Delete User","operationId":"delete_user_api_admin_users__user_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"string","title":"User Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/broadcast/generate":{"post":{"tags":["admin"],"summary":"Generate Broadcast","operationId":"generate_broadcast_api_admin_broadcast_generate_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/_BroadcastGenerateBody"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":{"type":"string"},"type":"object","title":"Response Generate Broadcast Api Admin Broadcast Generate Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/admin/broadcast/send":{"post":{"tags":["admin"],"summary":"Send Broadcast","operationId":"send_broadcast_api_admin_broadcast_send_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/_BroadcastSendBody"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Send Broadcast Api Admin Broadcast Send Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/admin/broadcast/history":{"get":{"tags":["admin"],"summary":"Broadcast History","operationId":"broadcast_history_api_admin_broadcast_history_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"page","in":"query","required":false,"schema":{"type":"integer","default":1,"title":"Page"}},{"name":"page_size","in":"query","required":false,"schema":{"type":"integer","default":20,"title":"Page Size"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Broadcast History Api Admin Broadcast History Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/payments/packs":{"get":{"tags":["payments"],"summary":"List Packs","operationId":"list_packs_api_payments_packs_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response List Packs Api Payments Packs Get"}}}}}}},"/api/payments/checkout":{"post":{"tags":["payments"],"summary":"Create Checkout","operationId":"create_checkout_api_payments_checkout_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CheckoutBody"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":{"type":"string"},"type":"object","title":"Response Create Checkout Api Payments Checkout Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/payments/webhook":{"post":{"tags":["payments"],"summary":"Stripe Webhook","operationId":"stripe_webhook_api_payments_webhook_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":{"type":"boolean"},"type":"object","title":"Response Stripe Webhook Api Payments Webhook Post"}}}}}}},"/api/payments/history":{"get":{"tags":["payments"],"summary":"History","operationId":"history_api_payments_history_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response History Api Payments History Get"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/mcp/keys":{"get":{"tags":["mcp"],"summary":"List Keys","operationId":"list_keys_api_mcp_keys_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]},"post":{"tags":["mcp"],"summary":"Create Key","operationId":"create_key_api_mcp_keys_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KeyCreateBody"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/mcp/keys/{key_id}":{"delete":{"tags":["mcp"],"summary":"Revoke Key","operationId":"revoke_key_api_mcp_keys__key_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"key_id","in":"path","required":true,"schema":{"type":"string","title":"Key Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/":{"get":{"summary":"Root","description":"Serve the pipelines page at the root URL.","operationId":"root__get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/health":{"get":{"summary":"Health","operationId":"health_health_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/llms.txt":{"get":{"summary":"Llms Txt","description":"Machine-readable product description for LLM crawlers (analogous to robots.txt).","operationId":"llms_txt_llms_txt_get","responses":{"200":{"description":"Successful Response","content":{"text/plain":{"schema":{"type":"string"}}}}}}},"/.well-known/mcp-registry-auth":{"get":{"summary":"Mcp Registry Auth","operationId":"mcp_registry_auth__well_known_mcp_registry_auth_get","responses":{"200":{"description":"Successful Response","content":{"text/plain":{"schema":{"type":"string"}}}}}}},"/robots.txt":{"get":{"summary":"Robots Txt","operationId":"robots_txt_robots_txt_get","responses":{"200":{"description":"Successful Response","content":{"text/plain":{"schema":{"type":"string"}}}}}}},"/sitemap.xml":{"get":{"summary":"Sitemap","operationId":"sitemap_sitemap_xml_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/demo":{"get":{"summary":"Serve Demo","operationId":"serve_demo_demo_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/agent-jobs":{"get":{"summary":"Serve Agent Jobs Page","operationId":"serve_agent_jobs_page_agent_jobs_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/pipelines":{"get":{"summary":"Serve Pipelines Page","operationId":"serve_pipelines_page_pipelines_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/admin":{"get":{"summary":"Serve Admin Page","operationId":"serve_admin_page_admin_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/terms-of-service":{"get":{"summary":"Serve Terms Of Service","operationId":"serve_terms_of_service_terms_of_service_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/privacy-policy":{"get":{"summary":"Serve Privacy Policy","operationId":"serve_privacy_policy_privacy_policy_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/faq":{"get":{"summary":"Serve Faq","operationId":"serve_faq_faq_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/widget.js":{"get":{"summary":"Serve Widget Js","operationId":"serve_widget_js_widget_js_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/widget.css":{"get":{"summary":"Serve Widget Css","operationId":"serve_widget_css_widget_css_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/videos":{"get":{"summary":"List Videos","description":"List all recorded session videos (requires PLAYWRIGHT_VIDEO=true).","operationId":"list_videos_videos_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/knowledge":{"get":{"summary":"List Knowledge","description":"List all cached knowledge bases.","operationId":"list_knowledge_knowledge_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/knowledge/{domain}":{"get":{"summary":"Get Knowledge","description":"Return the full knowledge object for a domain.","operationId":"get_knowledge_knowledge__domain__get","parameters":[{"name":"domain","in":"path","required":true,"schema":{"type":"string","title":"Domain"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/crawl":{"post":{"summary":"Trigger Crawl","description":"Trigger a crawl of *url* and cache the results.\nPass force=true to re-crawl even if fresh cache exists.","operationId":"trigger_crawl_crawl_post","parameters":[{"name":"url","in":"query","required":true,"schema":{"type":"string","title":"Url"}},{"name":"force","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Force"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/videos/{session_id}/{filename}":{"get":{"summary":"Download Video","description":"Download a recorded session video.","operationId":"download_video_videos__session_id___filename__get","parameters":[{"name":"session_id","in":"path","required":true,"schema":{"type":"string","title":"Session Id"}},{"name":"filename","in":"path","required":true,"schema":{"type":"string","title":"Filename"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"AgentJobCreate":{"properties":{"text":{"type":"string","minLength":1,"title":"Text"},"business_name":{"type":"string","maxLength":500,"title":"Business Name","default":"the business"},"target_url":{"type":"string","maxLength":8000,"minLength":1,"title":"Target Url"},"info_url":{"anyOf":[{"type":"string","maxLength":8000},{"type":"null"}],"title":"Info Url"},"lang":{"type":"string","maxLength":20,"title":"Lang","default":"en"},"output_json_schema":{"type":"string","maxLength":50000,"title":"Output Json Schema","default":""},"variables":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Variables"},"construction_mode":{"type":"boolean","title":"Construction Mode","default":false}},"type":"object","required":["text","target_url"],"title":"AgentJobCreate","description":"Same core fields as the WebSocket `chat` message (construction mode not supported over HTTP)."},"AgentJobListItem":{"properties":{"job_id":{"type":"string","title":"Job Id"},"status":{"type":"string","enum":["queued","running","completed","failed"],"title":"Status"},"created_at":{"type":"string","title":"Created At"},"updated_at":{"type":"string","title":"Updated At"},"query":{"type":"string","title":"Query"},"target_url":{"type":"string","title":"Target Url"},"error":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error"}},"type":"object","required":["job_id","status","created_at","updated_at","query","target_url"],"title":"AgentJobListItem"},"AgentJobListResponse":{"properties":{"jobs":{"items":{"$ref":"#/components/schemas/AgentJobListItem"},"type":"array","title":"Jobs"}},"type":"object","required":["jobs"],"title":"AgentJobListResponse"},"AgentJobQueued":{"properties":{"job_id":{"type":"string","title":"Job Id"},"status":{"type":"string","const":"queued","title":"Status","default":"queued"},"session_id":{"type":"string","title":"Session Id"}},"type":"object","required":["job_id","session_id"],"title":"AgentJobQueued"},"AssignBody":{"properties":{"group_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Group Id"}},"type":"object","title":"AssignBody"},"CheckoutBody":{"properties":{"credits":{"type":"integer","exclusiveMinimum":0.0,"title":"Credits"}},"type":"object","required":["credits"],"title":"CheckoutBody"},"CreateGroupBody":{"properties":{"name":{"type":"string","title":"Name"},"pipeline_ids":{"items":{"type":"string"},"type":"array","title":"Pipeline Ids"}},"type":"object","required":["name"],"title":"CreateGroupBody"},"ForgotPasswordBody":{"properties":{"email":{"type":"string","format":"email","title":"Email"}},"type":"object","required":["email"],"title":"ForgotPasswordBody"},"GetBrowserStorageResponse":{"properties":{"label":{"type":"string","title":"Label"},"storage_state":{"additionalProperties":true,"type":"object","title":"Storage State"}},"type":"object","required":["label","storage_state"],"title":"GetBrowserStorageResponse"},"GroupIn":{"properties":{"id":{"type":"string","title":"Id"},"name":{"type":"string","title":"Name"},"collapsed":{"type":"boolean","title":"Collapsed","default":false}},"type":"object","required":["id","name"],"title":"GroupIn"},"GroupsDocBody":{"properties":{"groups":{"items":{"$ref":"#/components/schemas/GroupIn"},"type":"array","title":"Groups"},"assignments":{"additionalProperties":{"type":"string"},"type":"object","title":"Assignments"}},"type":"object","title":"GroupsDocBody"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"IfElseCondition":{"properties":{"kind":{"type":"string","title":"Kind","description":"output_contains | output_matches_regex | json_path_equals | agent_decides"},"value":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Value","description":"Substring or regex pattern (for contains / matches_regex)"},"json_path":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Json Path","description":"Dot path into previous JSON, e.g. \"status\" or \"data.code\""},"equals":{"anyOf":[{},{"type":"null"}],"title":"Equals","description":"Value to compare for json_path_equals"},"agent_prompt":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Agent Prompt","description":"Instructions for AI gate: model returns {\"then\": true|false}"}},"type":"object","required":["kind"],"title":"IfElseCondition","description":"Condition for an **if_else** step (tested against {{prev_output}})."},"KeyCreateBody":{"properties":{"label":{"type":"string","maxLength":100,"title":"Label","default":""}},"type":"object","title":"KeyCreateBody"},"LoginBody":{"properties":{"email":{"type":"string","format":"email","title":"Email"},"password":{"type":"string","maxLength":200,"minLength":1,"title":"Password"}},"type":"object","required":["email","password"],"title":"LoginBody"},"McpToolsBody":{"properties":{"mcp_url":{"type":"string","title":"Mcp Url"},"mcp_transport":{"type":"string","title":"Mcp Transport","default":"streamable_http"},"mcp_headers":{"anyOf":[{"additionalProperties":{"type":"string"},"type":"object"},{"type":"null"}],"title":"Mcp Headers"},"timeout":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Timeout"},"pipeline_variables":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Pipeline Variables"}},"type":"object","required":["mcp_url"],"title":"McpToolsBody","description":"Connection settings of an mcp step, for listing the server's tools in the editor."},"ParallelLane":{"properties":{"name":{"type":"string","title":"Name","description":"Human-readable lane name used as the merged output key"},"steps":{"items":{"$ref":"#/components/schemas/StepCreate"},"type":"array","title":"Steps","description":"Sequential steps to run in this lane"}},"type":"object","required":["name"],"title":"ParallelLane","description":"One named lane in a **parallel** step."},"PatchGroupBody":{"properties":{"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"collapsed":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Collapsed"}},"type":"object","title":"PatchGroupBody"},"PatchMeBody":{"properties":{"display_name":{"anyOf":[{"type":"string","maxLength":200},{"type":"null"}],"title":"Display Name"},"data_json":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Data Json"}},"type":"object","title":"PatchMeBody"},"PipelineCreate":{"properties":{"name":{"type":"string","maxLength":200,"minLength":1,"title":"Name"},"enabled":{"type":"boolean","title":"Enabled","default":true},"cron_expr":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Cron Expr","description":"Optional 5-field cron (UTC). Leave empty for webhook-only / manual runs."},"run_at":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Run At","description":"Optional Unix timestamp (seconds, UTC) for a single run at that time; cleared after it runs."},"steps":{"items":{"$ref":"#/components/schemas/StepCreate"},"type":"array","minItems":1,"title":"Steps","description":"Ordered list of pipeline steps"},"task_variables":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Task Variables","description":"Pipeline-level variables available to all steps via {{name}} placeholders."},"webhook_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Webhook Url","description":"URL to POST after pipeline completes"},"webhook_secret":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Webhook Secret"},"webhook_structured_data_only":{"type":"boolean","title":"Webhook Structured Data Only","default":false},"inbound_trigger_only":{"type":"boolean","title":"Inbound Trigger Only","description":"If true, Run now (POST /api/pipelines/{id}/run) is disabled; start runs via inbound URL or cron/run_at only.","default":false}},"type":"object","required":["name","steps"],"title":"PipelineCreate"},"PipelineRunBody":{"properties":{"variables":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Variables"},"initial_step_outputs":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Initial Step Outputs","description":"Optional prefix of step outputs as if steps 1..N already ran: index 0 = step 1 output, etc. Use when the first steps are disabled so {{prev_output}} / {{step_1_output}} / JSON paths still resolve. Typically filled by the editor from the last run (browser session)."},"skip_steps":{"anyOf":[{"items":{},"type":"array"},{"type":"null"}],"title":"Skip Steps","description":"Steps to skip for this run only (pipeline's saved config is untouched). Each entry is either a 1-based top-level step index or a step name (case-insensitive). Name matches apply at any nesting depth (if_else branches, parallel lanes, loop bodies); index matches only the top-level step list. Skipped steps behave like a disabled step: they pass their input straight through to the next step."}},"type":"object","title":"PipelineRunBody"},"PipelineRunDebugChatBody":{"properties":{"messages":{"items":{"$ref":"#/components/schemas/_DebugChatMessage"},"type":"array","title":"Messages","default":[]}},"type":"object","title":"PipelineRunDebugChatBody"},"PipelineUpdate":{"properties":{"name":{"anyOf":[{"type":"string","maxLength":200},{"type":"null"}],"title":"Name"},"enabled":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Enabled"},"cron_expr":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Cron Expr"},"steps":{"anyOf":[{"items":{"$ref":"#/components/schemas/StepCreate"},"type":"array"},{"type":"null"}],"title":"Steps"},"task_variables":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Task Variables"},"webhook_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Webhook Url"},"webhook_secret":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Webhook Secret"},"clear_webhook_secret":{"type":"boolean","title":"Clear Webhook Secret","default":false},"webhook_structured_data_only":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Webhook Structured Data Only"},"regenerate_trigger_token":{"type":"boolean","title":"Regenerate Trigger Token","default":false},"run_at":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Run At","description":"Unix timestamp UTC for one scheduled run; send null to clear."},"inbound_trigger_only":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Inbound Trigger Only","description":"If true, editor Run now is blocked; use inbound trigger URL or schedule."}},"type":"object","title":"PipelineUpdate"},"PutBrowserStorageBody":{"properties":{"storage_state":{"additionalProperties":true,"type":"object","title":"Storage State","description":"Playwright storage state object (e.g. from context.storageState())."}},"type":"object","required":["storage_state"],"title":"PutBrowserStorageBody","description":"Playwright ``storageState`` object (cookies, origins) as JSON — stored encrypted."},"PutStoreBody":{"properties":{"value":{"type":"string","title":"Value","description":"JSON text or plain text"},"mode":{"type":"string","title":"Mode","description":"auto | text","default":"auto"}},"type":"object","required":["value"],"title":"PutStoreBody"},"RegisterBody":{"properties":{"email":{"type":"string","format":"email","title":"Email"},"password":{"type":"string","maxLength":200,"minLength":8,"title":"Password"},"display_name":{"anyOf":[{"type":"string","maxLength":200},{"type":"null"}],"title":"Display Name"}},"type":"object","required":["email","password"],"title":"RegisterBody"},"ResetPasswordBody":{"properties":{"token":{"type":"string","minLength":10,"title":"Token"},"new_password":{"type":"string","maxLength":200,"minLength":8,"title":"New Password"}},"type":"object","required":["token","new_password"],"title":"ResetPasswordBody"},"ScheduleCreate":{"properties":{"name":{"type":"string","maxLength":200,"minLength":1,"title":"Name"},"enabled":{"type":"boolean","title":"Enabled","default":true},"cron_expr":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Cron Expr","description":"Optional 5-field cron (UTC). Omit or leave empty for webhook-only / manual runs."},"mode":{"type":"string","enum":["agent","replay"],"title":"Mode","default":"agent"},"task_text":{"type":"string","title":"Task Text","default":""},"steps_json":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Steps Json"},"business_name":{"type":"string","title":"Business Name","default":"WebArm24"},"target_url":{"type":"string","title":"Target Url","default":"__agent__"},"lang":{"type":"string","title":"Lang","default":"en"},"info_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Info Url"},"webhook_url":{"type":"string","minLength":1,"title":"Webhook Url"},"webhook_secret":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Webhook Secret"},"output_json_schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Output Json Schema","description":"Optional JSON Schema or example JSON — injected into the agent system prompt."},"task_variables":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Task Variables","description":"Up to 5 values (coerced to strings) for {{name}} placeholders in task_text and steps_json."},"webhook_structured_data_only":{"type":"boolean","title":"Webhook Structured Data Only","description":"If true, outbound webhook POST body is only the parsed structured_data JSON (or null), not the full envelope.","default":false},"run_at":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Run At","description":"Optional Unix timestamp (seconds, UTC) for a single run at that time; cleared automatically after it runs."}},"type":"object","required":["name","webhook_url"],"title":"ScheduleCreate"},"ScheduleRunBody":{"properties":{"variables":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Variables","description":"Merged with stored schedule task_variables; same {{name}} rules as the main agent."}},"type":"object","title":"ScheduleRunBody","description":"Optional variable overrides for this run (merged with schedule defaults; override wins)."},"ScheduleUpdate":{"properties":{"name":{"anyOf":[{"type":"string","maxLength":200},{"type":"null"}],"title":"Name"},"enabled":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Enabled"},"cron_expr":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Cron Expr"},"mode":{"anyOf":[{"type":"string","enum":["agent","replay"]},{"type":"null"}],"title":"Mode"},"task_text":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Task Text"},"steps_json":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Steps Json"},"business_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Business Name"},"target_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Target Url"},"lang":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Lang"},"info_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Info Url"},"webhook_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Webhook Url"},"webhook_secret":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Webhook Secret"},"clear_webhook_secret":{"type":"boolean","title":"Clear Webhook Secret","default":false},"regenerate_trigger_token":{"type":"boolean","title":"Regenerate Trigger Token","default":false},"output_json_schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Output Json Schema"},"task_variables":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Task Variables"},"webhook_structured_data_only":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Webhook Structured Data Only"},"run_at":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Run At","description":"Unix timestamp UTC for one scheduled run; send null to clear."}},"type":"object","title":"ScheduleUpdate"},"StepCreate":{"properties":{"name":{"type":"string","title":"Name","description":"Human-readable label for the step","default":""},"type":{"type":"string","title":"Type","description":"agent | http_request | mcp | email | js | python | data_storage | if_else | parallel | loop","default":"agent"},"enabled":{"type":"boolean","title":"Enabled","description":"If false, the runner skips this step and passes the previous output through.","default":true},"task_text":{"type":"string","title":"Task Text","description":"Agent task prompt (supports {{prev_output}}, {{step_N_output}}, {{step_N_output.json.path}}, {{var}})","default":""},"target_url":{"type":"string","title":"Target Url","description":"Target URL for the agent, or '__agent__' for free-form","default":"__agent__"},"lang":{"type":"string","title":"Lang","default":"en"},"output_json_schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Output Json Schema"},"structured_output_only":{"type":"boolean","title":"Structured Output Only","description":"Extract and pass only the JSON portion of the agent output to the next step","default":false},"method":{"type":"string","title":"Method","default":"POST"},"url":{"type":"string","title":"Url","description":"URL to request","default":""},"headers":{"anyOf":[{"additionalProperties":{"type":"string"},"type":"object"},{"type":"null"}],"title":"Headers"},"body":{"type":"string","title":"Body","default":""},"timeout":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Timeout"},"mcp_url":{"type":"string","title":"Mcp Url","description":"MCP server endpoint URL (supports {{var}})","default":""},"mcp_transport":{"type":"string","title":"Mcp Transport","description":"streamable_http | sse","default":"streamable_http"},"mcp_headers":{"anyOf":[{"additionalProperties":{"type":"string"},"type":"object"},{"type":"null"}],"title":"Mcp Headers","description":"Headers for the MCP server, e.g. {\"Authorization\": \"Bearer {{TOKEN}}\"}"},"mcp_mode":{"type":"string","title":"Mcp Mode","description":"call_tool (one tool, no LLM) | agent (LLM uses the server's tools)","default":"call_tool"},"mcp_tool":{"type":"string","title":"Mcp Tool","description":"call_tool: tool name","default":""},"mcp_arguments":{"anyOf":[{"type":"string"},{"additionalProperties":true,"type":"object"}],"title":"Mcp Arguments","description":"call_tool: JSON object of tool arguments","default":""},"mcp_instruction":{"type":"string","title":"Mcp Instruction","description":"agent: task for the LLM","default":""},"mcp_allowed_tools":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Mcp Allowed Tools","description":"agent: optional tool allow-list"},"mcp_max_iterations":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Mcp Max Iterations","description":"agent: max model turns (default 10)"},"email_to":{"type":"string","title":"Email To","description":"Recipient address(es), comma-separated","default":""},"email_subject":{"type":"string","title":"Email Subject","description":"Email subject line","default":""},"email_body":{"type":"string","title":"Email Body","description":"Email body (plain text or HTML)","default":""},"email_is_html":{"type":"boolean","title":"Email Is Html","description":"Send body as HTML","default":false},"email_attachment_paths":{"type":"string","title":"Email Attachment Paths","description":"Optional attachment paths, newline-separated or a JSON array. Paths are resolved under PIPELINE_ATTACHMENT_ROOT.","default":""},"js_script":{"type":"string","title":"Js Script","description":"JavaScript source run as the body of function(input){ ... }; input is the previous step output string. Must return a value.","default":""},"py_script":{"type":"string","title":"Py Script","description":"Python source run in a restricted subprocess; `input` is pre-bound to the previous step output string. Use print() to produce output.","default":""},"storage_kind":{"type":"string","title":"Storage Kind","description":"data (JSON/text values) | files (binary files)","default":"data"},"storage_op":{"type":"string","title":"Storage Op","description":"data: read|write|merge|append|delete. files: save|load|list|delete.","default":""},"storage_name":{"type":"string","title":"Storage Name","description":"Store name (data) or stored file name / 'folder/' prefix (files)","default":""},"storage_value":{"type":"string","title":"Storage Value","description":"Value for write/merge/append (supports {{prev_output}} etc.)","default":""},"storage_value_mode":{"type":"string","title":"Storage Value Mode","description":"auto (JSON if it parses) | text (verbatim)","default":"auto"},"storage_default":{"type":"string","title":"Storage Default","description":"read: output when the store does not exist yet","default":""},"storage_max_items":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Storage Max Items","description":"append: keep only the newest N items"},"storage_files":{"type":"string","title":"Storage Files","description":"files: newline/JSON-array of sandbox paths to save (e.g. /outputs/a.mp3) or stored names to load","default":""},"storage_load_to":{"type":"string","title":"Storage Load To","description":"files load: work (/work/stored/) | outputs (/outputs/, emailable)","default":"work"},"storage_missing_ok":{"type":"boolean","title":"Storage Missing Ok","description":"files load: don't fail when a name is missing","default":false},"if":{"anyOf":[{"$ref":"#/components/schemas/IfElseCondition"},{"type":"null"}]},"then_steps":{"anyOf":[{"items":{"$ref":"#/components/schemas/StepCreate"},"type":"array"},{"type":"null"}],"title":"Then Steps"},"else_steps":{"anyOf":[{"items":{"$ref":"#/components/schemas/StepCreate"},"type":"array"},{"type":"null"}],"title":"Else Steps"},"lanes":{"anyOf":[{"items":{"$ref":"#/components/schemas/ParallelLane"},"type":"array"},{"type":"null"}],"title":"Lanes"},"loop":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Loop"},"steps":{"anyOf":[{"items":{"$ref":"#/components/schemas/StepCreate"},"type":"array"},{"type":"null"}],"title":"Steps"},"_ui":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Ui"}},"type":"object","title":"StepCreate","description":"A single pipeline step."},"TestStepBody":{"properties":{"step":{"$ref":"#/components/schemas/StepCreate"},"previous_outputs":{"items":{"type":"string"},"type":"array","title":"Previous Outputs","description":"Mock outputs of earlier steps; index 0 = step 1, etc. {{prev_output}} = last entry."},"pipeline_variables":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Pipeline Variables","description":"Pipeline-level variables to use for {{var_name}} substitution."}},"type":"object","required":["step"],"title":"TestStepBody","description":"Run a single pipeline step in isolation (without saving)."},"TokenResponse":{"properties":{"access_token":{"type":"string","title":"Access Token"},"token_type":{"type":"string","title":"Token Type","default":"bearer"}},"type":"object","required":["access_token"],"title":"TokenResponse"},"UserPublic":{"properties":{"id":{"type":"string","title":"Id"},"email":{"type":"string","title":"Email"},"display_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Display Name"},"google_linked":{"type":"boolean","title":"Google Linked","default":false},"email_verified":{"type":"boolean","title":"Email Verified","default":false},"data_json":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Data Json"},"credits":{"type":"integer","title":"Credits","default":0}},"type":"object","required":["id","email"],"title":"UserPublic"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"},"input":{"title":"Input"},"ctx":{"type":"object","title":"Context"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"},"WebhookTestBody":{"properties":{"webhook_url":{"type":"string","title":"Webhook Url"},"webhook_secret":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Webhook Secret"}},"type":"object","required":["webhook_url"],"title":"WebhookTestBody"},"_AdminSetBody":{"properties":{"is_admin":{"type":"boolean","title":"Is Admin"}},"type":"object","required":["is_admin"],"title":"_AdminSetBody"},"_BroadcastGenerateBody":{"properties":{"topic":{"type":"string","maxLength":2000,"minLength":1,"title":"Topic"},"tone":{"anyOf":[{"type":"string","maxLength":100},{"type":"null"}],"title":"Tone"}},"type":"object","required":["topic"],"title":"_BroadcastGenerateBody"},"_BroadcastSendBody":{"properties":{"subject":{"type":"string","maxLength":300,"minLength":1,"title":"Subject"},"html_body":{"type":"string","minLength":1,"title":"Html Body"},"recipient_filter":{"type":"string","pattern":"^(all|verified)$","title":"Recipient Filter","default":"all"},"dry_run":{"type":"boolean","title":"Dry Run","default":false}},"type":"object","required":["subject","html_body"],"title":"_BroadcastSendBody"},"_BuilderChatRequest":{"properties":{"messages":{"items":{"$ref":"#/components/schemas/_Message"},"type":"array","title":"Messages","default":[]},"pipeline":{"additionalProperties":true,"type":"object","title":"Pipeline","default":{}},"builder_context":{"anyOf":[{"$ref":"#/components/schemas/_BuilderContext"},{"type":"null"}]}},"type":"object","title":"_BuilderChatRequest"},"_BuilderContext":{"properties":{"mode":{"type":"string","title":"Mode","default":"full"},"original_step_count":{"type":"integer","title":"Original Step Count","default":0},"step_index":{"type":"integer","title":"Step Index","default":-1}},"type":"object","title":"_BuilderContext","description":"Optional UI mode so the builder agent can follow insert-only vs rebuild rules."},"_DebugChatMessage":{"properties":{"role":{"type":"string","title":"Role","default":"user"},"content":{"type":"string","title":"Content","default":""}},"type":"object","title":"_DebugChatMessage"},"_FormatPythonRequest":{"properties":{"source":{"type":"string","title":"Source","default":""}},"type":"object","title":"_FormatPythonRequest"},"_GenerateJsRequest":{"properties":{"description":{"type":"string","title":"Description","default":""},"prev_output_sample":{"type":"string","title":"Prev Output Sample","default":""},"variables":{"items":{"type":"string"},"type":"array","title":"Variables","default":[]},"current_script":{"type":"string","title":"Current Script","default":""}},"type":"object","title":"_GenerateJsRequest"},"_GeneratePythonRequest":{"properties":{"description":{"type":"string","title":"Description","default":""},"prev_output_sample":{"type":"string","title":"Prev Output Sample","default":""},"variables":{"items":{"type":"string"},"type":"array","title":"Variables","default":[]},"current_script":{"type":"string","title":"Current Script","default":""}},"type":"object","title":"_GeneratePythonRequest"},"_Message":{"properties":{"role":{"type":"string","title":"Role","default":"user"},"content":{"type":"string","title":"Content","default":""}},"type":"object","title":"_Message"}},"securitySchemes":{"HTTPBearer":{"type":"http","scheme":"bearer"}}}}