{"openapi":"3.1.0","info":{"title":"Browseit API","version":"1.1.0","description":"Rent on-demand cloud browsers driven by AI. Run one-shot tasks, autonomous agents, live sessions, and scheduled jobs. Send `engine: \"v2\"` on POST /v1/tasks and POST /v1/sessions for the v2 browser engine (multi-step tasks, a live browser over one WebSocket, optional raw CDP for Playwright). Health check: GET / (no auth). Credit and usage: GET /v1/me."},"servers":[{"url":"https://api.browseit.live"}],"security":[{"bearerAuth":[]}],"tags":[{"name":"Tasks","description":"One-shot browser actions / extraction."},{"name":"Agent","description":"Autonomous multi-step automation in a session."},{"name":"Sessions","description":"Live cloud browsers."},{"name":"Jobs","description":"Saved, schedulable automations."},{"name":"Contexts","description":"Login-once reusable profiles."},{"name":"Logins","description":"Saved credential vault (write-only)."},{"name":"Proxies","description":"Bring-your-own egress proxies."},{"name":"Files","description":"Exported artifacts."},{"name":"Webhooks","description":"Event subscriptions."},{"name":"Account","description":"Plan, usage, keys, models."},{"name":"Scripts","description":"Unchanged Playwright scripts run inside Browseit (account grant)."}],"paths":{"/":{"get":{"tags":["Account"],"summary":"Health check (no auth): {service, status:\"up\"}. Use this, not /healthz: Cloud Run reserves paths ending in \"z\".","security":[],"responses":{"200":{"description":"Up"}}}},"/v1/tasks":{"post":{"tags":["Tasks"],"summary":"Run a task. v2 (`engine:\"v2\"`): up to 25 steps in one fresh browser, synchronous, up to 15 min. Classic: exactly one of act / instructions+schema / observe, ~95s budget.","responses":{"200":{"description":"Task result","content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/V2TaskResult"},{"$ref":"#/components/schemas/TaskResult"}]}}}},"400":{"description":"Missing/invalid input (code bad_url for a non-http(s) url)","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"}}}}}},"401":{"description":"Missing/invalid API key","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"}}}}}},"402":{"description":"Out of credit (code no_credit)","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"}}}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"}}}}}},"429":{"description":"Rate limited or quota reached","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"}}}}}}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/V2TaskInput"},{"$ref":"#/components/schemas/TaskInput"}]}}}}}},"/v1/tasks/{id}":{"get":{"tags":["Tasks"],"summary":"Fetch a past task/agent run by id.","responses":{"200":{"description":"OK"},"401":{"description":"Missing/invalid API key","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"}}}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"}}}}}},"429":{"description":"Rate limited or quota reached","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"}}}}}}},"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}]}},"/v1/agent":{"post":{"tags":["Agent"],"summary":"Run an autonomous agent in a live session. Synchronous, ~95s budget.","responses":{"200":{"description":"OK"},"401":{"description":"Missing/invalid API key","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"}}}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"}}}}}},"429":{"description":"Rate limited or quota reached","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"}}}}}}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["sessionId","instruction"],"properties":{"sessionId":{"type":"string"},"instruction":{"type":"string"},"url":{"type":"string"},"credentialId":{"type":"string"},"maxSteps":{"type":"integer"}}}}}}}},"/v1/sessions":{"get":{"tags":["Sessions"],"summary":"List your sessions (live + ended).","responses":{"200":{"description":"OK"},"401":{"description":"Missing/invalid API key","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"}}}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"}}}}}},"429":{"description":"Rate limited or quota reached","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"}}}}}}}},"post":{"tags":["Sessions"],"summary":"Open a live browser. v2 (`engine:\"v2\"`): returns a single-use `connectUrl` (wss, valid 60 s) for the live view; with `cdp:true` (needs the raw-browser grant on your account) swap `/s?t=` for `/cdp?t=` and connect Playwright with chromium.connectOverCDP. Classic: returns liveUrl. Idempotency-Key supported (classic).","responses":{"201":{"description":"Session opened","content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/V2SessionCreated"},{"type":"object","properties":{"session":{"$ref":"#/components/schemas/Session"}}}]}}}},"401":{"description":"Missing/invalid API key","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"}}}}}},"402":{"description":"Out of credit (code no_credit)","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"}}}}}},"403":{"description":"Raw CDP not enabled for this account (code forbidden)","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"}}}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"}}}}}},"429":{"description":"Rate limited or quota reached","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"}}}}}}},"requestBody":{"required":false,"content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/V2SessionInput"},{"$ref":"#/components/schemas/SessionInput"}]}}}}}},"/v1/scripts":{"post":{"tags":["Scripts"],"summary":"Run an unchanged Playwright script inside Browseit, next to a fresh browser (account grant needed). The script calls chromium.launch() as usual and gets this browser; it writes /results (result.json, screenshots, files). Sandboxed: no network except its browser, no child processes, files only in its own folder, 1 GB memory, up to 780 s. Synchronous.","responses":{"200":{"description":"Script result","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ScriptResult"}}}},"401":{"description":"Missing/invalid API key","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"}}}}}},"402":{"description":"Out of credit (code no_credit)","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"}}}}}},"403":{"description":"Scripts not enabled for this account (code forbidden)","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"}}}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"}}}}}},"429":{"description":"Rate limited or quota reached","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"}}}}}}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ScriptInput"}}}}}},"/v1/scripts/{id}":{"get":{"tags":["Scripts"],"summary":"A past script run (outcome, timing, usage, file list; never the env or the source).","responses":{"200":{"description":"OK"},"401":{"description":"Missing/invalid API key","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"}}}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"}}}}}},"429":{"description":"Rate limited or quota reached","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"}}}}}}},"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}]}},"/v1/sessions/{id}/connect":{"post":{"tags":["Sessions"],"summary":"v2: a fresh single-use connectUrl for the same session (reconnect). The browser resumes from its last save point (cookies + open tabs, saved every 60 s); one connection lasts at most ~55 min (close code 4005: reconnect).","responses":{"200":{"description":"New connect URL","content":{"application/json":{"schema":{"$ref":"#/components/schemas/V2SessionCreated"}}}},"401":{"description":"Missing/invalid API key","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"}}}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"}}}}}},"409":{"description":"Session has ended (code ended)","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"}}}}}},"429":{"description":"Rate limited or quota reached","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"}}}}}}},"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}]}},"/v1/sessions/{id}":{"get":{"tags":["Sessions"],"summary":"Fetch a session.","responses":{"200":{"description":"OK"},"401":{"description":"Missing/invalid API key","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"}}}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"}}}}}},"429":{"description":"Rate limited or quota reached","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"}}}}}}},"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}]},"delete":{"tags":["Sessions"],"summary":"Release a session.","responses":{"200":{"description":"Deleted","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean"}}}}}}},"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}]}},"/v1/sessions/{id}/navigate":{"post":{"tags":["Sessions"],"summary":"Navigate the browser to a URL.","responses":{"200":{"description":"OK"},"401":{"description":"Missing/invalid API key","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"}}}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"}}}}}},"429":{"description":"Rate limited or quota reached","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"}}}}}}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["url"],"properties":{"url":{"type":"string"}}}}}},"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}]}},"/v1/sessions/{id}/heartbeat":{"post":{"tags":["Sessions"],"summary":"Keep the session alive (ping ~60s).","responses":{"200":{"description":"OK"},"401":{"description":"Missing/invalid API key","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"}}}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"}}}}}},"429":{"description":"Rate limited or quota reached","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"}}}}}}},"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}]}},"/v1/sessions/{id}/stats":{"get":{"tags":["Sessions"],"summary":"Live bandwidth + performance + proxy status.","responses":{"200":{"description":"OK"},"401":{"description":"Missing/invalid API key","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"}}}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"}}}}}},"429":{"description":"Rate limited or quota reached","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"}}}}}}},"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}]}},"/v1/sessions/{id}/ip":{"get":{"tags":["Sessions"],"summary":"The egress IP (verify your proxy).","responses":{"200":{"description":"OK"},"401":{"description":"Missing/invalid API key","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"}}}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"}}}}}},"429":{"description":"Rate limited or quota reached","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"}}}}}}},"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}]}},"/v1/sessions/{id}/agent-progress":{"get":{"tags":["Sessions"],"summary":"Live agent steps for an in-flight run.","responses":{"200":{"description":"OK"},"401":{"description":"Missing/invalid API key","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"}}}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"}}}}}},"429":{"description":"Rate limited or quota reached","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"}}}}}}},"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}]}},"/v1/sessions/{id}/content":{"get":{"tags":["Sessions"],"summary":"Current page HTML + text + title + url.","responses":{"200":{"description":"OK"},"401":{"description":"Missing/invalid API key","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"}}}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"}}}}}},"429":{"description":"Rate limited or quota reached","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"}}}}}}},"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}]}},"/v1/sessions/{id}/screenshot":{"get":{"tags":["Sessions"],"summary":"PNG of the current page (?full=1 for full height).","responses":{"200":{"description":"OK"},"401":{"description":"Missing/invalid API key","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"}}}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"}}}}}},"429":{"description":"Rate limited or quota reached","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"}}}}}}},"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}]}},"/v1/sessions/{id}/pdf":{"get":{"tags":["Sessions"],"summary":"PDF of the current page.","responses":{"200":{"description":"OK"},"401":{"description":"Missing/invalid API key","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"}}}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"}}}}}},"429":{"description":"Rate limited or quota reached","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"}}}}}}},"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}]}},"/v1/sessions/{id}/save-login":{"post":{"tags":["Sessions"],"summary":"Save the current session cookies as a new cookie login.","responses":{"200":{"description":"OK"},"401":{"description":"Missing/invalid API key","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"}}}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"}}}}}},"429":{"description":"Rate limited or quota reached","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"}}}}}}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["domain"],"properties":{"domain":{"type":"string"},"name":{"type":"string"}}}}}},"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}]}},"/v1/jobs":{"get":{"tags":["Jobs"],"summary":"List your jobs.","responses":{"200":{"description":"OK"},"401":{"description":"Missing/invalid API key","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"}}}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"}}}}}},"429":{"description":"Rate limited or quota reached","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"}}}}}}}},"post":{"tags":["Jobs"],"summary":"Create a job.","responses":{"201":{"description":"Created","content":{"application/json":{"schema":{"type":"object","properties":{"job":{"$ref":"#/components/schemas/Job"}}}}}},"401":{"description":"Missing/invalid API key","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"}}}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"}}}}}},"429":{"description":"Rate limited or quota reached","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"}}}}}}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JobInput"}}}}}},"/v1/jobs/{id}":{"get":{"tags":["Jobs"],"summary":"Fetch a job (includes nextRunAt).","responses":{"200":{"description":"OK"},"401":{"description":"Missing/invalid API key","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"}}}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"}}}}}},"429":{"description":"Rate limited or quota reached","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"}}}}}}},"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}]},"patch":{"tags":["Jobs"],"summary":"Update a job (name / steps / schedule / enabled / attachments / continueOnError).","responses":{"200":{"description":"OK"},"401":{"description":"Missing/invalid API key","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"}}}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"}}}}}},"429":{"description":"Rate limited or quota reached","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"}}}}}}},"requestBody":{"required":false,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JobInput"}}}},"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}]},"delete":{"tags":["Jobs"],"summary":"Delete a job.","responses":{"200":{"description":"Deleted","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean"}}}}}}},"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}]}},"/v1/jobs/{id}/run":{"post":{"tags":["Jobs"],"summary":"Run now (returns a runId, 202). Idempotency-Key supported.","responses":{"202":{"description":"Run started","content":{"application/json":{"schema":{"type":"object","properties":{"runId":{"type":"string"},"status":{"type":"string"}}}}}},"401":{"description":"Missing/invalid API key","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"}}}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"}}}}}},"429":{"description":"Rate limited or quota reached","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"}}}}}}},"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}]}},"/v1/jobs/{id}/runs":{"get":{"tags":["Jobs"],"summary":"Run history.","responses":{"200":{"description":"OK"},"401":{"description":"Missing/invalid API key","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"}}}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"}}}}}},"429":{"description":"Rate limited or quota reached","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"}}}}}}},"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}]}},"/v1/jobs/{id}/runs/{runId}":{"get":{"tags":["Jobs"],"summary":"Fetch one run.","responses":{"200":{"description":"OK"},"401":{"description":"Missing/invalid API key","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"}}}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"}}}}}},"429":{"description":"Rate limited or quota reached","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"}}}}}}},"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"runId","in":"path","required":true,"schema":{"type":"string"}}]}},"/v1/jobs/{id}/runs/{runId}/cancel":{"post":{"tags":["Jobs"],"summary":"Cancel a running run.","responses":{"200":{"description":"OK"},"401":{"description":"Missing/invalid API key","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"}}}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"}}}}}},"429":{"description":"Rate limited or quota reached","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"}}}}}}},"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"runId","in":"path","required":true,"schema":{"type":"string"}}]}},"/v1/contexts":{"get":{"tags":["Contexts"],"summary":"List contexts.","responses":{"200":{"description":"OK"},"401":{"description":"Missing/invalid API key","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"}}}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"}}}}}},"429":{"description":"Rate limited or quota reached","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"}}}}}}}},"post":{"tags":["Contexts"],"summary":"Create a context.","responses":{"200":{"description":"OK"},"401":{"description":"Missing/invalid API key","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"}}}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"}}}}}},"429":{"description":"Rate limited or quota reached","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"}}}}}}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["name"],"properties":{"name":{"type":"string"}}}}}}}},"/v1/contexts/{id}":{"get":{"tags":["Contexts"],"summary":"Fetch a context.","responses":{"200":{"description":"OK"},"401":{"description":"Missing/invalid API key","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"}}}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"}}}}}},"429":{"description":"Rate limited or quota reached","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"}}}}}}},"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}]},"patch":{"tags":["Contexts"],"summary":"Rename a context.","responses":{"200":{"description":"OK"},"401":{"description":"Missing/invalid API key","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"}}}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"}}}}}},"429":{"description":"Rate limited or quota reached","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"}}}}}}},"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}]},"delete":{"tags":["Contexts"],"summary":"Delete a context.","responses":{"200":{"description":"Deleted","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean"}}}}}}},"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}]}},"/v1/credentials":{"get":{"tags":["Logins"],"summary":"List saved logins (never returns secrets).","responses":{"200":{"description":"OK"},"401":{"description":"Missing/invalid API key","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"}}}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"}}}}}},"429":{"description":"Rate limited or quota reached","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"}}}}}}}},"post":{"tags":["Logins"],"summary":"Save a login (password or cookie).","responses":{"200":{"description":"OK"},"401":{"description":"Missing/invalid API key","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"}}}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"}}}}}},"429":{"description":"Rate limited or quota reached","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"}}}}}}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["type","domain"],"properties":{"type":{"enum":["password","cookie"]},"domain":{"type":"string"},"name":{"type":"string"},"username":{"type":"string"},"password":{"type":"string"},"cookies":{"type":"array","items":{"type":"object"}}}}}}}}},"/v1/credentials/{id}":{"patch":{"tags":["Logins"],"summary":"Replace a login secret (replace-only).","responses":{"200":{"description":"OK"},"401":{"description":"Missing/invalid API key","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"}}}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"}}}}}},"429":{"description":"Rate limited or quota reached","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"}}}}}}},"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}]},"delete":{"tags":["Logins"],"summary":"Delete a login.","responses":{"200":{"description":"Deleted","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean"}}}}}}},"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}]}},"/v1/credentials/{id}/clear-session":{"post":{"tags":["Logins"],"summary":"Forget the auto-refreshed session cookies.","responses":{"200":{"description":"OK"},"401":{"description":"Missing/invalid API key","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"}}}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"}}}}}},"429":{"description":"Rate limited or quota reached","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"}}}}}}},"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}]}},"/v1/proxies":{"get":{"tags":["Proxies"],"summary":"List proxies (never returns the password).","responses":{"200":{"description":"OK"},"401":{"description":"Missing/invalid API key","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"}}}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"}}}}}},"429":{"description":"Rate limited or quota reached","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"}}}}}}}},"post":{"tags":["Proxies"],"summary":"Add a proxy.","responses":{"200":{"description":"OK"},"401":{"description":"Missing/invalid API key","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"}}}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"}}}}}},"429":{"description":"Rate limited or quota reached","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"}}}}}}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["host","port"],"properties":{"host":{"type":"string"},"port":{"type":"integer"},"username":{"type":"string"},"password":{"type":"string"},"label":{"type":"string"}}}}}}}},"/v1/proxies/{id}":{"patch":{"tags":["Proxies"],"summary":"Update a proxy.","responses":{"200":{"description":"OK"},"401":{"description":"Missing/invalid API key","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"}}}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"}}}}}},"429":{"description":"Rate limited or quota reached","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"}}}}}}},"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}]},"delete":{"tags":["Proxies"],"summary":"Delete a proxy.","responses":{"200":{"description":"Deleted","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean"}}}}}}},"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}]}},"/v1/files":{"get":{"tags":["Files"],"summary":"List exported files.","responses":{"200":{"description":"OK"},"401":{"description":"Missing/invalid API key","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"}}}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"}}}}}},"429":{"description":"Rate limited or quota reached","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"}}}}}}}}},"/v1/files/{id}":{"get":{"tags":["Files"],"summary":"File metadata.","responses":{"200":{"description":"OK"},"401":{"description":"Missing/invalid API key","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"}}}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"}}}}}},"429":{"description":"Rate limited or quota reached","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"}}}}}}},"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}]},"delete":{"tags":["Files"],"summary":"Delete a file.","responses":{"200":{"description":"Deleted","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean"}}}}}}},"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}]}},"/v1/files/{id}/download":{"get":{"tags":["Files"],"summary":"A signed download URL.","responses":{"200":{"description":"OK"},"401":{"description":"Missing/invalid API key","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"}}}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"}}}}}},"429":{"description":"Rate limited or quota reached","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"}}}}}}},"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}]}},"/v1/webhooks":{"get":{"tags":["Webhooks"],"summary":"List webhooks.","responses":{"200":{"description":"OK"},"401":{"description":"Missing/invalid API key","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"}}}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"}}}}}},"429":{"description":"Rate limited or quota reached","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"}}}}}}}},"post":{"tags":["Webhooks"],"summary":"Subscribe a URL (secret returned once).","responses":{"200":{"description":"OK"},"401":{"description":"Missing/invalid API key","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"}}}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"}}}}}},"429":{"description":"Rate limited or quota reached","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"}}}}}}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["url"],"properties":{"url":{"type":"string"},"events":{"type":"array","items":{"enum":["run.finished","run.failed","session.ended"]}}}}}}}}},"/v1/webhooks/{id}":{"delete":{"tags":["Webhooks"],"summary":"Delete a webhook.","responses":{"200":{"description":"Deleted","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean"}}}}}}},"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}]}},"/v1/me":{"get":{"tags":["Account"],"summary":"Plan, usage (lifetime + `thisMonth`) and credit.","responses":{"200":{"description":"Account","content":{"application/json":{"schema":{"type":"object","properties":{"tenant":{"type":"object"},"usage":{"type":"object"},"credit":{"$ref":"#/components/schemas/Credit"}}}}}},"401":{"description":"Missing/invalid API key","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"}}}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"}}}}}},"429":{"description":"Rate limited or quota reached","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"}}}}}}}}},"/v1/activity":{"get":{"tags":["Account"],"summary":"Recent tasks + sessions.","responses":{"200":{"description":"OK"},"401":{"description":"Missing/invalid API key","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"}}}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"}}}}}},"429":{"description":"Rate limited or quota reached","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"}}}}}}}}},"/v1/models":{"get":{"tags":["Account"],"summary":"Allowed models + default.","responses":{"200":{"description":"OK"},"401":{"description":"Missing/invalid API key","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"}}}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"}}}}}},"429":{"description":"Rate limited or quota reached","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"}}}}}}}}},"/v1/keys":{"get":{"tags":["Account"],"summary":"List your API keys.","responses":{"200":{"description":"OK"},"401":{"description":"Missing/invalid API key","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"}}}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"}}}}}},"429":{"description":"Rate limited or quota reached","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"}}}}}}}},"post":{"tags":["Account"],"summary":"Issue a named key (returned once).","responses":{"200":{"description":"OK"},"401":{"description":"Missing/invalid API key","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"}}}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"}}}}}},"429":{"description":"Rate limited or quota reached","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"}}}}}}},"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"}}}}}}}},"/v1/keys/{id}":{"delete":{"tags":["Account"],"summary":"Revoke a key.","responses":{"200":{"description":"Deleted","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean"}}}}}}},"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}]}},"/v1/keys/rotate":{"post":{"tags":["Account"],"summary":"Rotate your key (old one stops working).","responses":{"200":{"description":"OK"},"401":{"description":"Missing/invalid API key","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"}}}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"}}}}}},"429":{"description":"Rate limited or quota reached","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"}}}}}}}}}},"components":{"securitySchemes":{"bearerAuth":{"type":"http","scheme":"bearer","description":"Your API key: `Authorization: Bearer byd_…`"}},"schemas":{"Error":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"}}},"TaskResult":{"type":"object","properties":{"ok":{"type":"boolean"},"data":{},"usage":{"type":"object"},"taskId":{"type":"string"}}},"TaskInput":{"type":"object","properties":{"url":{"type":"string"},"act":{"type":"string"},"instructions":{"type":"string"},"schema":{"type":"object"},"observe":{"type":"string"},"sessionId":{"type":"string"},"model":{"type":"string"}}},"SessionInput":{"type":"object","properties":{"url":{"type":"string"},"contextId":{"type":"string"},"contextPersist":{"type":"boolean"},"credentialId":{"type":"string"},"proxyId":{"type":"string"},"cookies":{"type":"array","items":{"type":"object"}}}},"Credit":{"type":"object","description":"Your allowance. monthly = this calendar month (UTC), refills on resetsAt; lifetime = one allowance.","properties":{"period":{"enum":["monthly","lifetime"]},"quotaUsd":{"type":"number"},"spentUsd":{"type":"number"},"remainingUsd":{"type":"number"},"resetsAt":{"type":["integer","null"]}}},"V2Step":{"type":"object","required":["type"],"description":"One step. type: navigate {url} | back | forward | reload | wait {ms<=30000} | act {instruction} | observe {instruction} | extract {instruction, schema?} (required fields must be filled or the step fails) | agent {instruction, maxSteps?} | screenshot {format?: jpeg|png, fullPage?} -> base64 | content -> {text, html} | pdf -> base64 | save {kind?: png|pdf|dom, fullPage?} -> into Files | ip -> {ip} | evaluate {expression} -> JSON value (<=200 KB, page JavaScript) | viewport {width, height} | tabs | tab_new {url?} | tab_switch {tabId} | tab_close {tabId} | save_login {domain, name?, rememberEverything?}.","properties":{"type":{"enum":["navigate","back","forward","reload","wait","act","observe","extract","agent","screenshot","content","pdf","save","ip","evaluate","viewport","tabs","tab_new","tab_switch","tab_close","save_login"]},"url":{"type":"string"},"instruction":{"type":"string"},"schema":{"type":"object"},"ms":{"type":"integer"},"maxSteps":{"type":"integer"},"format":{"enum":["jpeg","png"]},"fullPage":{"type":"boolean"},"kind":{"enum":["png","pdf","dom"]},"expression":{"type":"string"},"width":{"type":"integer"},"height":{"type":"integer"},"tabId":{"type":"integer"},"domain":{"type":"string"},"name":{"type":"string"},"rememberEverything":{"type":"boolean"},"model":{"type":"string"}}},"V2TaskInput":{"type":"object","required":["engine","steps"],"properties":{"engine":{"const":"v2"},"steps":{"type":"array","maxItems":25,"items":{"$ref":"#/components/schemas/V2Step"}},"browser":{"enum":["light","full"],"description":"light = fast headless shell (default for plain tasks); full = full Chromium (default with a saved login)"},"credentialId":{"type":"string","description":"open signed in with a saved login"},"proxyId":{"type":"string"},"model":{"type":"string","description":"AI model for act/extract/observe/agent (see /v1/models). Models ending in :free are free: rate-limited, prompts may be logged by the provider; avoid for private/signed-in data. A free model step that is rate-limited, fails or returns no usable JSON is retried once on the fallback model; each AI step result says which model answered (model, fallbackFrom)."},"continueOnError":{"type":"boolean","description":"run every step even after one fails"}}},"V2TaskResult":{"type":"object","properties":{"ok":{"type":"boolean","description":"true when every step succeeded"},"sessionId":{"type":"string"},"results":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string"},"ok":{"type":"boolean"},"data":{},"error":{"type":"string"},"ms":{"type":"integer"}}}},"finalUrl":{"type":"string"},"endReason":{"type":"string"},"usage":{"type":"object","properties":{"browserMs":{"type":"integer"},"proxyBytes":{"type":"integer"},"llmPromptTokens":{"type":"integer"},"llmCompletionTokens":{"type":"integer"}}},"timing":{"type":"object","properties":{"readyMs":{"type":"integer"},"totalMs":{"type":"integer"}}}}},"ScriptInput":{"type":"object","properties":{"script":{"type":"string","description":"the script source (becomes script.js)"},"files":{"type":"object","additionalProperties":{"type":"string"},"description":"extra text files by relative path (lib/x.js, data.json); 2 MB in total"},"entry":{"type":"string","description":"which file to run (default script.js)"},"env":{"type":"object","additionalProperties":{"type":"string"},"description":"process.env for the script (TARGET_URL etc.); never stored or logged"},"timeoutSec":{"type":"integer","maximum":780},"browser":{"enum":["light","full"]},"credentialId":{"type":"string"},"proxyId":{"type":"string"}}},"ScriptResult":{"type":"object","properties":{"ok":{"type":"boolean","description":"exit code 0 and not timed out"},"runId":{"type":"string"},"sessionId":{"type":"string"},"exit":{"type":"object","properties":{"code":{"type":["integer","null"]},"signal":{"type":["string","null"]},"timedOut":{"type":"boolean"}}},"result":{"description":"the parsed /results/result.json, if written"},"files":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"size":{"type":"integer"},"base64":{"type":"string"}}}},"log":{"type":"string","description":"stdout + stderr, up to 1 MB"},"usage":{"type":"object"},"timing":{"type":"object"}}},"V2SessionInput":{"type":"object","required":["engine"],"properties":{"engine":{"const":"v2"},"url":{"type":"string","description":"start page"},"browser":{"enum":["light","full"]},"credentialId":{"type":"string"},"proxyId":{"type":"string"},"cdp":{"type":"boolean","description":"raw CDP for Playwright (account grant required); one shared context, browser.newContext() is refused"}}},"V2SessionCreated":{"type":"object","properties":{"session":{"type":"object","properties":{"id":{"type":"string"},"status":{"type":"string"},"generation":{"type":"integer"},"usage":{"type":"object"}}},"connectUrl":{"type":"string","description":"wss://…/s?t=<single-use token>; /cdp?t= for raw CDP"},"expiresInSec":{"type":"integer"}}},"Session":{"type":"object","properties":{"id":{"type":"string"},"liveUrl":{"type":"string"},"status":{"type":"string"},"startedAt":{"type":"integer"}}},"JobInput":{"type":"object","description":"Classic job: English steps. v2 job (engine:\"v2\"): v2 steps, or a Playwright script (script | files+entry, env stored encrypted, needs the scripts grant); runs inside Browseit on the schedule. delivery: { webhooks?: bool (default true), email?: \"failure\"|\"always\"|\"never\" (default failure), discordWebhookUrl?: string (stored encrypted), report?: bool (an HTML run report behind a stable link) }.","properties":{"name":{"type":"string"},"engine":{"const":"v2"},"script":{"type":"string"},"files":{"type":"object","additionalProperties":{"type":"string"}},"entry":{"type":"string"},"env":{"type":"object","additionalProperties":{"type":"string"}},"timeoutSec":{"type":"integer","maximum":780},"browser":{"enum":["light","full"]},"delivery":{"type":"object","properties":{"webhooks":{"type":"boolean"},"email":{"enum":["failure","always","never"]},"discordWebhookUrl":{"type":"string"},"report":{"type":"boolean"}}},"steps":{"type":"array","items":{"type":"object","properties":{"instruction":{"type":"string"},"url":{"type":"string"}}}},"contextId":{"type":"string"},"credentialId":{"type":"string"},"proxyId":{"type":"string"},"schedule":{"type":"object","properties":{"cron":{"type":"string"},"tz":{"type":"string"}}},"enabled":{"type":"boolean"},"continueOnError":{"type":"boolean"}}},"Job":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"steps":{"type":"array","items":{"type":"object"}},"schedule":{"type":"object"},"enabled":{"type":"boolean"},"nextRunAt":{"type":"integer"}}}}}}