{"openapi":"3.1.0","info":{"title":"Ant0 local API","version":"0.2.0","description":"Local API of the Ant0 daemon. Bearer token from `~/.ant0/ant0d.token`; `GET /v1/health`, `/openapi.json` and `/docs` are open. Profile `:id` parameters accept the UUID or the exact profile name."},"components":{"securitySchemes":{"bearer":{"type":"http","scheme":"bearer"}},"schemas":{"ApiError":{"additionalProperties":false,"type":"object","required":["error","message"],"properties":{"error":{"description":"Namespaced, client-stable code: validation_failed, unauthorized, not_found, profile.not_found, profile.name_taken, profile.ambiguous_name, profile.already_running, profile.not_running, profile.running, profile.trashed, profile.not_trashed, proxy.not_found, proxy.in_use, proxy.change_ip_failed, browser.not_found, browser.not_installed, browser.in_use, browser.install_failed, browser.store_unavailable, browser.download_interrupted, browser.checksum_mismatch, job.not_found, identity.generation_failed, launch.failed, launch.timeout, cookies.invalid, cookies.cdp_failed, cookies.too_large, extension.not_found, extension.invalid, extension.in_use, extension.exists, storage.full, storage.readonly, storage.io, internal; Phase 3 (licence): auth.invalid_credentials, auth.totp_required, auth.totp_invalid, auth.email_unverified, auth.rate_limited, device.limit, device.unknown, device.fingerprint_unavailable, licence.required, licence.expired, licence.offline, licence.profile_limit, licence.feature, licence.invalid, workspace.suspended, workspace.lapsed, profile.locked, ticket.invalid.","type":"string"},"message":{"type":"string"},"details":{"description":"Ajv issues for validation_failed; `{ code, path }` for storage.*; `{ code }` (the daemon-side install code) for browser.* install failures."}}},"Session":{"title":"Ant0 session v1","description":"A running browser session: the response of POST /v1/profiles/:id/start and the element of GET /v1/sessions.","type":"object","additionalProperties":false,"required":["profile_id","pid","ws_endpoint","debug_port","cdp_http","browser_version","user_agent","headless","started_at"],"properties":{"profile_id":{"type":"string","format":"uuid"},"pid":{"type":"integer","minimum":1},"ws_endpoint":{"description":"Full CDP browser endpoint, e.g. ws://127.0.0.1:9333/devtools/browser/<id>.","type":"string","format":"uri","pattern":"^wss?://"},"debug_port":{"type":"integer","minimum":1,"maximum":65535},"cdp_http":{"description":"HTTP base of the DevTools endpoint, e.g. http://127.0.0.1:9333.","type":"string","format":"uri","pattern":"^https?://"},"browser_version":{"type":"string","minLength":1,"maxLength":64},"user_agent":{"type":["null","string"],"minLength":1,"maxLength":1024},"headless":{"type":"boolean"},"started_at":{"type":"string","format":"date-time"}}},"Proxy":{"title":"Ant0 proxy v1","description":"Stored proxy document (schema \"ant0-proxy/v1\"). Passwords are never stored inline; password_ref points at the secrets table.","type":"object","additionalProperties":false,"required":["schema","id","name","type","host","port","username","password_ref","change_ip_url","session_pattern","provider","udp","tags","notes","created_at","updated_at","last_check"],"properties":{"schema":{"enum":["ant0-proxy/v1"]},"id":{"type":"string","format":"uuid"},"name":{"type":"string","minLength":1,"maxLength":120},"type":{"enum":["http","https","socks5"]},"host":{"description":"Hostname, IPv4, or bare IPv6 address (no brackets).","type":"string","minLength":1,"maxLength":253,"pattern":"^[^\\s/\\\\@?#\\[\\]]+$"},"port":{"type":"integer","minimum":1,"maximum":65535},"username":{"type":["null","string"],"minLength":1,"maxLength":512},"password_ref":{"description":"\"secret:<uuid>\"; never plaintext.","type":["null","string"],"pattern":"^secret:[0-9a-f-]{36}$"},"change_ip_url":{"description":"Provider \"change IP\" link, fetched with GET on demand.","type":["null","string"],"format":"uri"},"session_pattern":{"description":"e.g. \"user-{session}\" substituted into the username per launch.","type":["null","string"],"minLength":1,"maxLength":512},"provider":{"description":"Free-form provider label (\"brightdata\", \"iproyal\", ...).","type":["null","string"],"minLength":1,"maxLength":80},"udp":{"description":"socks5 only: pass --socks5-udp so WebRTC/QUIC traverse the proxy. Ignored for http/https (not enforced by this schema). Default false.","type":"boolean"},"tags":{"type":"array","uniqueItems":true,"items":{"type":"string","minLength":1,"maxLength":40}},"notes":{"type":"string","maxLength":4000},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"},"last_check":{"$ref":"#/components/schemas/ProxyCheck"}}},"ProxyCheck":{"type":["null","object"],"additionalProperties":false,"required":["at","ok","ip","country","timezone","latency_ms","error"],"properties":{"at":{"type":"string","format":"date-time"},"ok":{"type":"boolean"},"ip":{"type":["null","string"],"minLength":1,"maxLength":64},"country":{"description":"ISO 3166-1 alpha-2 when known.","type":["null","string"],"minLength":1,"maxLength":64},"timezone":{"type":["null","string"],"minLength":1,"maxLength":64},"latency_ms":{"type":["null","integer"],"minimum":0},"error":{"type":["null","string"],"minLength":1,"maxLength":2000}}},"Cookie":{"title":"Ant0 cookie v1","description":"Normalized Playwright cookie shape. Cookie-Editor/EditThisCookie JSON, Puppeteer/Playwright arrays and Netscape cookies.txt are converted to this.","type":"object","additionalProperties":false,"required":["name","value","domain","path","expires","httpOnly","secure","sameSite"],"properties":{"name":{"type":"string","maxLength":4096},"value":{"type":"string","maxLength":65536},"domain":{"description":"Leading dot = also sent to subdomains; no dot = host-only.","type":"string","minLength":1,"maxLength":253},"path":{"type":"string","minLength":1,"maxLength":4096,"pattern":"^/"},"expires":{"description":"Unix time in seconds; -1 for a session cookie.","type":"number","minimum":-1},"httpOnly":{"type":"boolean"},"secure":{"type":"boolean"},"sameSite":{"enum":["Strict","Lax","None"]}}},"Ant0Event":{"title":"Ant0 event v1","description":"One event on the WebSocket /v1/events stream (JSON lines). Discriminated on \"type\".","type":"object","discriminator":{"propertyName":"type"},"oneOf":[{"$ref":"#/components/schemas/Ant0EventProfileState"},{"$ref":"#/components/schemas/Ant0EventProfileLifecycle"},{"$ref":"#/components/schemas/Ant0EventBrowserInstall"},{"$ref":"#/components/schemas/Ant0EventAssetInstall"},{"$ref":"#/components/schemas/Ant0EventProxyCheck"},{"$ref":"#/components/schemas/Ant0EventLicenceChanged"},{"$ref":"#/components/schemas/Ant0EventSyncChanged"},{"$ref":"#/components/schemas/Ant0EventSyncProgress"},{"$ref":"#/components/schemas/Ant0EventSyncConflict"},{"$ref":"#/components/schemas/Ant0EventTeamChanged"},{"$ref":"#/components/schemas/Ant0EventDaemonLog"}]},"Ant0EventAt":{"type":"string","format":"date-time"},"Ant0EventProfileState":{"type":"object","additionalProperties":false,"required":["type","profile_id","state","at"],"properties":{"type":{"enum":["profile.state"]},"profile_id":{"type":"string","minLength":1},"state":{"enum":["starting","running","stopping","stopped","crashed"]},"pid":{"type":"integer","minimum":1},"cdp_url":{"type":"string","format":"uri"},"exit_code":{"type":["integer","null"]},"at":{"$ref":"#/components/schemas/Ant0EventAt"}}},"Ant0EventProfileLifecycle":{"description":"Trash lifecycle: moved to the trash, restored from it, or purged (row and directory gone).","type":"object","additionalProperties":false,"required":["type","profile_id","at"],"properties":{"type":{"enum":["profile.trashed","profile.restored","profile.purged"]},"profile_id":{"type":"string","minLength":1},"at":{"$ref":"#/components/schemas/Ant0EventAt"}}},"Ant0EventBrowserInstall":{"type":"object","additionalProperties":false,"required":["type","version","phase","at"],"properties":{"type":{"enum":["browser.install"]},"version":{"type":"string","minLength":1},"phase":{"enum":["resolve","download","verify","extract","done","error"]},"bytes":{"type":"integer","minimum":0},"total":{"type":"integer","minimum":0},"message":{"type":"string"},"code":{"type":"string","description":"With phase `error`: the daemon-side failure code (`download_interrupted`, `checksum_mismatch`, `store_unreachable`, `disk_full`, `release_signature`, `release_error`, `install_failed`, …)."},"at":{"$ref":"#/components/schemas/Ant0EventAt"}}},"Ant0EventAssetInstall":{"type":"object","additionalProperties":false,"required":["type","asset","phase","at"],"properties":{"type":{"enum":["asset.install"]},"asset":{"enum":["population-model","fontpack"]},"phase":{"enum":["download","verify","done","error"]},"message":{"type":"string"},"at":{"$ref":"#/components/schemas/Ant0EventAt"}}},"Ant0EventProxyCheck":{"type":"object","additionalProperties":false,"required":["type","proxy_id","ok","at"],"properties":{"type":{"enum":["proxy.check"]},"proxy_id":{"type":"string","minLength":1},"ok":{"type":"boolean"},"at":{"$ref":"#/components/schemas/Ant0EventAt"}}},"Ant0EventLicenceChanged":{"description":"The licence state changed: sign-in/out, a refresh, a plan change, entering offline grace, lock or suspension. Read GET /v1/licence for the full picture.","type":"object","additionalProperties":false,"required":["type","state","plan","at"],"properties":{"type":{"enum":["licence.changed"]},"state":{"enum":["signed_out","active","grace","locked","suspended"]},"plan":{"type":["string","null"]},"at":{"$ref":"#/components/schemas/Ant0EventAt"}}},"Ant0EventSyncChanged":{"type":"object","additionalProperties":false,"required":["type","local_profile_id","profile_id","state","dirty","change_seq","synced_change_seq","error_code","at"],"properties":{"type":{"enum":["sync.changed"]},"local_profile_id":{"type":"string","format":"uuid"},"profile_id":{"type":["string","null"],"format":"uuid"},"state":{"enum":["current","uploading","downloading","offline","conflict","pending_key","locked","error"]},"dirty":{"type":"boolean"},"change_seq":{"type":"integer","minimum":0},"synced_change_seq":{"type":"integer","minimum":0},"error_code":{"type":["string","null"]},"at":{"$ref":"#/components/schemas/Ant0EventAt"}}},"Ant0EventSyncProgress":{"type":"object","additionalProperties":false,"required":["type","local_profile_id","direction","bytes","total","at"],"properties":{"type":{"enum":["sync.progress"]},"local_profile_id":{"type":"string","format":"uuid"},"direction":{"enum":["upload","download"]},"bytes":{"type":"integer","minimum":0},"total":{"type":"integer","minimum":0},"at":{"$ref":"#/components/schemas/Ant0EventAt"}}},"Ant0EventSyncConflict":{"type":"object","additionalProperties":false,"required":["type","local_profile_id","source_profile_id","source_revision_id","reason","at"],"properties":{"type":{"enum":["sync.conflict"]},"local_profile_id":{"type":"string","format":"uuid"},"source_profile_id":{"type":"string","format":"uuid"},"source_revision_id":{"type":"string","format":"uuid"},"reason":{"enum":["offline_launch","lease_lost","cas_lost","migration_running"]},"at":{"$ref":"#/components/schemas/Ant0EventAt"}}},"Ant0EventTeamChanged":{"type":"object","additionalProperties":false,"required":["type","workspace_id","resource","resource_id","at"],"properties":{"type":{"enum":["team.changed"]},"workspace_id":{"type":"string","format":"uuid"},"resource":{"enum":["folder","member","invite","ownership"]},"resource_id":{"type":"string","minLength":1},"at":{"$ref":"#/components/schemas/Ant0EventAt"}}},"Ant0EventDaemonLog":{"type":"object","additionalProperties":false,"required":["type","level","message","at"],"properties":{"type":{"enum":["daemon.log"]},"level":{"enum":["info","warn","error"]},"message":{"type":"string"},"at":{"$ref":"#/components/schemas/Ant0EventAt"}}},"LicenceState":{"title":"Ant0 licence state v1","description":"What the daemon knows about its licence: the response of GET /v1/licence and of every licence mutation. Never carries tokens.","type":"object","additionalProperties":false,"required":["state","mode","plan","limits","used","used_local","features","billing","expires_at","grace_until","device_id","sign_pub","workspace","online","last_refresh_at","last_error","keep","message"],"properties":{"state":{"description":"signed_out: no cloud session; active: token valid (now <= exp); grace: offline grace (exp < now <= grace); locked: past grace, no token, or the server refused (lapsed); suspended: the server answered workspace.suspended.","enum":["signed_out","active","grace","locked","suspended"]},"mode":{"description":"enforce: the §7 table applies; off: development mode (ANT0_LICENCE_MODE=off), nothing is enforced and launches carry no ticket unless a licence is present anyway.","enum":["enforce","off"]},"plan":{"description":"Plan id from the token (free, p10, p50, p200, p1000); null without a token.","type":["null","string"]},"limits":{"type":["null","object"],"additionalProperties":false,"required":["profiles","seats"],"properties":{"profiles":{"type":"integer","minimum":0},"seats":{"type":"integer","minimum":0}}},"used":{"description":"Profiles counted against the plan: the larger of `used_local` and the workspace-wide active claim count the cloud last reported (claims made on other devices included). Shown to the user; the local gates use `used_local`.","type":"integer","minimum":0},"used_local":{"description":"Profiles holding a claim on this device: live plus trashed rows (the trash keeps its claim so restores are free; purge releases it). Drives the keep list and the over-the-limit lock.","type":"integer","minimum":0},"features":{"description":"Feature flags from the token (`feat`), e.g. api, sync, teams, mcp, priority_support.","type":"array","items":{"type":"string"}},"billing":{"description":"Subscription status from the token (`st`); informational, enforcement follows `limits`.","enum":["active","past_due","lapsed",null]},"expires_at":{"type":["null","string"],"format":"date-time"},"grace_until":{"type":["null","string"],"format":"date-time"},"device_id":{"description":"base32(SHA-256(hw)[0..16]), 26 characters; null when the hardware fingerprint could not be computed.","type":["null","string"],"pattern":"^[A-Z2-7]{26}$"},"sign_pub":{"description":"This daemon's device signing public key (Ed25519, 32 raw bytes, standard base64) — the `sign_pub` it registers and the `dpk` a licence should name. The desktop shell compares it with its own and hands its keys over when they differ. Public material; null before the keys are loaded.","type":["null","string"],"pattern":"^[A-Za-z0-9+/]{43}=$"},"workspace":{"type":["null","object"],"additionalProperties":false,"required":["id","name"],"properties":{"id":{"type":"string","minLength":1},"name":{"type":["null","string"]}}},"online":{"description":"True when the last POST /v1/licence to the cloud succeeded.","type":"boolean"},"last_refresh_at":{"type":["null","string"],"format":"date-time"},"last_error":{"description":"Why the last refresh failed (a cloud error code or `network`); null after a success.","type":["null","string"]},"keep":{"description":"Profiles allowed to start while `used` exceeds `limits.profiles` (§7 \"lapsed to Free\"). `explicit` is true once the user chose (POST /v1/licence/keep); otherwise the daemon's default pick is shown. Empty when the limit is not exceeded.","type":"object","additionalProperties":false,"required":["profile_ids","explicit"],"properties":{"profile_ids":{"type":"array","items":{"type":"string","format":"uuid"}},"explicit":{"type":"boolean"}}},"message":{"description":"One human sentence for the current state (\"Reconnect within 47 h\", \"Plan allows 5 profiles\"), or null when nothing needs attention.","type":["null","string"]}}},"ProxyCreate":{"additionalProperties":false,"description":"Proxy in object form. `password` is plaintext on input only; responses carry `password_ref`.","type":"object","required":["type","host","port"],"properties":{"name":{"minLength":1,"maxLength":120,"type":"string"},"type":{"anyOf":[{"type":"string","enum":["http"]},{"type":"string","enum":["https"]},{"type":"string","enum":["socks5"]}]},"host":{"minLength":1,"maxLength":253,"type":"string"},"port":{"minimum":1,"maximum":65535,"type":"integer"},"username":{"maxLength":512,"type":"string"},"password":{"maxLength":4096,"type":"string"},"change_ip_url":{"maxLength":2048,"type":"string"},"session_pattern":{"maxLength":512,"type":"string"},"provider":{"maxLength":80,"type":"string"},"udp":{"type":"boolean"},"tags":{"type":"array","items":{"minLength":1,"maxLength":40,"type":"string"}},"notes":{"maxLength":4000,"type":"string"}}},"ProfileManifest":{"title":"Ant0 profile manifest v1","description":"Canonical stored profile document (schema \"ant0-profile/v1\"). Runtime state (running, pid, cdp url) is not part of the manifest.","type":"object","additionalProperties":false,"required":["schema","id","name","group","tags","notes","status","pinned","created_at","updated_at","browser","identity","network","overrides","launch"],"properties":{"schema":{"enum":["ant0-profile/v1"]},"id":{"$ref":"#/components/schemas/ProfileUuid"},"name":{"type":"string","minLength":1,"maxLength":120},"group":{"type":["null","string"],"minLength":1,"maxLength":120},"tags":{"$ref":"#/components/schemas/ProfileTags"},"notes":{"type":"string","maxLength":4000},"status":{"type":["null","string"],"minLength":1,"maxLength":120},"pinned":{"description":"Pinned rows sort first in clients. Default false.","type":"boolean"},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"},"browser":{"$ref":"#/components/schemas/ProfileBrowser"},"identity":{"$ref":"#/components/schemas/ProfileIdentity"},"network":{"$ref":"#/components/schemas/ProfileNetwork"},"overrides":{"$ref":"#/components/schemas/ProfileOverrides"},"launch":{"$ref":"#/components/schemas/ProfileLaunch"}}},"ProfileUuid":{"type":"string","format":"uuid"},"ProfileTags":{"type":"array","uniqueItems":true,"items":{"type":"string","minLength":1,"maxLength":40}},"ProfileBrowser":{"type":"object","additionalProperties":false,"required":["channel","version"],"properties":{"channel":{"enum":["stable"]},"version":{"description":"Pinned release, e.g. \"149.0.7827.114-ant0.1\"; null = newest installed.","type":["null","string"],"minLength":1,"maxLength":64}}},"ProfileIdentity":{"type":"object","additionalProperties":false,"required":["mode","key","source","profile_ref"],"properties":{"mode":{"enum":["synthetic","captured","native"]},"key":{"description":"synthetic: deterministic identity key; defaults to the profile id.","type":["null","string"],"minLength":1,"maxLength":256},"source":{"type":["null","object"],"additionalProperties":false,"required":["kind","version"],"properties":{"kind":{"enum":["population-model","templates","cloud"]},"version":{"type":"string","minLength":1,"maxLength":64}}},"profile_ref":{"description":"captured: file under identities/, relative (no absolute paths, no parent traversal).","type":["null","string"],"minLength":1,"maxLength":512,"pattern":"^(?![/\\\\])(?![A-Za-z]:)(?!(.*[/\\\\])?\\.\\.([/\\\\]|$)).+$"}}},"ProfileNetwork":{"type":"object","additionalProperties":false,"required":["proxy_id","geo","webrtc"],"properties":{"proxy_id":{"description":"null = direct connection (allowed, UI warns).","type":["null","string"],"format":"uuid"},"geo":{"$ref":"#/components/schemas/ProfileGeo"},"webrtc":{"enum":["proxy-only","disabled","host"]}}},"ProfileGeo":{"type":"object","additionalProperties":false,"required":["source","timezone","languages","latitude","longitude"],"properties":{"source":{"description":"proxy: derive timezone/languages/location from the exit IP at launch.","enum":["proxy","manual","none"]},"timezone":{"description":"IANA zone name, e.g. \"Europe/Berlin\".","type":["null","string"],"minLength":1,"maxLength":64,"pattern":"^[A-Za-z][A-Za-z0-9_+-]*(?:/[A-Za-z0-9_+-]+)*$"},"languages":{"description":"BCP-47 tags, first is primary.","type":"array","uniqueItems":true,"items":{"type":"string","pattern":"^[A-Za-z]{2,8}(?:-[A-Za-z0-9]{1,8})*$"}},"latitude":{"type":["null","number"],"minimum":-90,"maximum":90},"longitude":{"type":["null","number"],"minimum":-180,"maximum":180}}},"ProfileOverrides":{"description":"Allowlisted subset of the Node SDK IdentityOverrides.","type":"object","additionalProperties":false,"properties":{"platform":{"enum":["windows","linux","macos","android"]},"platformVersion":{"type":"string","minLength":1,"maxLength":64},"brand":{"type":"string","minLength":1,"maxLength":64},"brandVersion":{"type":"string","minLength":1,"maxLength":64},"gpuVendor":{"type":"string","minLength":1,"maxLength":256},"gpuRenderer":{"type":"string","minLength":1,"maxLength":512},"hardwareConcurrency":{"type":"integer","minimum":1,"maximum":1024},"deviceMemory":{"description":"navigator.deviceMemory in GB.","type":"number","exclusiveMinimum":0,"maximum":1024},"screenWidth":{"type":"integer","minimum":1,"maximum":32768},"screenHeight":{"type":"integer","minimum":1,"maximum":32768},"availWidth":{"type":"integer","minimum":1,"maximum":32768},"availHeight":{"type":"integer","minimum":1,"maximum":32768},"colorDepth":{"type":"integer","minimum":1,"maximum":64},"devicePixelRatio":{"type":"number","exclusiveMinimum":0,"maximum":16},"maxTouchPoints":{"type":"integer","minimum":0,"maximum":256},"location":{"description":"Geolocation as \"lat,lon\".","type":"string","pattern":"^-?(?:90(?:\\.0+)?|[1-8]?[0-9](?:\\.[0-9]+)?), ?-?(?:180(?:\\.0+)?|1[0-7][0-9](?:\\.[0-9]+)?|[1-9]?[0-9](?:\\.[0-9]+)?)$"},"timezone":{"type":"string","minLength":1,"maxLength":64,"pattern":"^[A-Za-z][A-Za-z0-9_+-]*(?:/[A-Za-z0-9_+-]+)*$"},"acceptLanguage":{"description":"Accept-Language list, e.g. \"en-US,en\".","type":"string","minLength":1,"maxLength":256},"webrtcIp":{"type":"string","minLength":1,"maxLength":64},"webrtcMdns":{"enum":["on","off"]},"disableGpuFingerprint":{"type":"boolean"},"fingerprintNoise":{"type":"boolean"},"gpuStringSpoof":{"type":"boolean"},"canvasNoise":{"type":"boolean"},"storageQuota":{"description":"navigator.storage.estimate().quota in megabytes.","type":"integer","minimum":0},"canvasBridge":{"type":"object","additionalProperties":false,"required":["url"],"properties":{"url":{"type":"string","pattern":"^wss?://"},"auth":{"type":"string","minLength":1},"mode":{"enum":["off","all","allow","deny"]},"allow":{"type":"array","items":{"type":"string","minLength":1}},"deny":{"type":"array","items":{"type":"string","minLength":1}},"fallback":{"enum":["block","local"]}}},"tlsProfile":{"description":"\"match-persona\" | \"auto\" | \"native\" | \"off\" | \"chrome-<major>\" | Chromium major as an integer.","anyOf":[{"type":"string","minLength":1,"maxLength":32},{"type":"integer","minimum":1}]}}},"ProfileLaunch":{"type":"object","additionalProperties":false,"required":["start_urls","extensions","window","fonts_resolve","headless","extra_args"],"properties":{"start_urls":{"type":"array","items":{"type":"string","format":"uri"}},"extensions":{"description":"Absolute paths to unpacked extensions (POSIX \"/...\" or Windows \"X:\\...\").","type":"array","items":{"type":"string","pattern":"^(?:/|[A-Za-z]:[\\\\/])"}},"window":{"type":["null","object"],"additionalProperties":false,"required":["width","height"],"properties":{"width":{"type":"integer","minimum":200,"maximum":16384},"height":{"type":"integer","minimum":200,"maximum":16384}}},"fonts_resolve":{"type":"boolean"},"headless":{"type":"boolean"},"extra_args":{"description":"Power users; identity switches are rejected by the SDK.","type":"array","items":{"type":"string","pattern":"^--"}}}},"ProfileDetail":{"title":"Ant0 profile detail","description":"profile-manifest-v1 plus `runtime` (the live session, or null when stopped), `deleted_at` (RFC 3339 while in the trash, else null) and `platform` (the OS persona the browser presents, as in ProfileSummary).","type":"object","additionalProperties":false,"required":["schema","id","name","group","tags","notes","status","pinned","created_at","updated_at","browser","identity","network","overrides","launch","runtime","deleted_at","platform"],"properties":{"schema":{"enum":["ant0-profile/v1"]},"id":{"$ref":"#/components/schemas/ProfileUuid"},"name":{"type":"string","minLength":1,"maxLength":120},"group":{"type":["null","string"],"minLength":1,"maxLength":120},"tags":{"$ref":"#/components/schemas/ProfileTags"},"notes":{"type":"string","maxLength":4000},"status":{"type":["null","string"],"minLength":1,"maxLength":120},"pinned":{"description":"Pinned rows sort first in clients. Default false.","type":"boolean"},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"},"browser":{"$ref":"#/components/schemas/ProfileBrowser"},"identity":{"$ref":"#/components/schemas/ProfileIdentity"},"network":{"$ref":"#/components/schemas/ProfileNetwork"},"overrides":{"$ref":"#/components/schemas/ProfileOverrides"},"launch":{"$ref":"#/components/schemas/ProfileLaunch"},"runtime":{"anyOf":[{"$ref":"#/components/schemas/Session"},{"type":"null"}]},"deleted_at":{"anyOf":[{"format":"date-time","type":"string"},{"type":"null"}]},"platform":{"type":["null","string"],"enum":["windows","linux","macos","android",null],"description":"OS persona the browser presents: `overrides.platform` (passed to the engine as `--fingerprint-platform`), else the OS of the persisted synthetic/captured persona (`compatibility.os_family`, known once the identity has been previewed or launched); null when neither is known or the identity is native."}}},"ProfileInput":{"title":"Ant0 profile input","description":"Partial profile-manifest-v1 for PATCH: objects merge, arrays and scalars replace. `network.proxy` may carry an inline proxy instead of `proxy_id`; `overrides.<key>: null` removes that override.","type":"object","additionalProperties":false,"properties":{"name":{"type":"string","minLength":1,"maxLength":120},"group":{"type":["string","null"],"minLength":1,"maxLength":120},"tags":{"$ref":"#/components/schemas/ProfileInputTags"},"notes":{"type":"string","maxLength":4000},"status":{"type":["string","null"],"minLength":1,"maxLength":120},"pinned":{"description":"Pinned rows sort first in clients. Default false.","type":"boolean"},"browser":{"$ref":"#/components/schemas/ProfileInputBrowser"},"identity":{"$ref":"#/components/schemas/ProfileInputIdentity"},"network":{"$ref":"#/components/schemas/ProfileInputNetwork"},"overrides":{"$ref":"#/components/schemas/ProfileInputOverrides"},"launch":{"$ref":"#/components/schemas/ProfileInputLaunch"}}},"ProfileInputUuid":{"type":"string","format":"uuid"},"ProfileInputTags":{"type":"array","uniqueItems":true,"items":{"type":"string","minLength":1,"maxLength":40}},"ProfileInputBrowser":{"type":"object","additionalProperties":false,"properties":{"channel":{"enum":["stable"]},"version":{"description":"Pinned release, e.g. \"149.0.7827.114-ant0.1\"; null = newest installed.","type":["string","null"],"minLength":1,"maxLength":64}}},"ProfileInputIdentity":{"type":"object","additionalProperties":false,"properties":{"mode":{"enum":["synthetic","captured","native"]},"key":{"description":"synthetic: deterministic identity key; defaults to the profile id.","type":["string","null"],"minLength":1,"maxLength":256},"source":{"type":["object","null"],"additionalProperties":false,"properties":{"kind":{"enum":["population-model","templates","cloud"]},"version":{"type":"string","minLength":1,"maxLength":64}}},"profile_ref":{"description":"captured: file under identities/, relative (no absolute paths, no parent traversal).","type":["string","null"],"minLength":1,"maxLength":512,"pattern":"^(?![/\\\\])(?![A-Za-z]:)(?!(.*[/\\\\])?\\.\\.([/\\\\]|$)).+$"}}},"ProfileInputNetwork":{"type":"object","additionalProperties":false,"properties":{"proxy_id":{"description":"null = direct connection (allowed, UI warns).","type":["string","null"],"format":"uuid"},"geo":{"$ref":"#/components/schemas/ProfileInputGeo"},"webrtc":{"enum":["proxy-only","disabled","host"]},"proxy":{"anyOf":[{"$ref":"#/components/schemas/ProxyCreate"},{"additionalProperties":false,"description":"`scheme://user:pass@host:port`","type":"object","required":["url"],"properties":{"url":{"minLength":1,"maxLength":2048,"type":"string"}}},{"additionalProperties":false,"description":"Provider export line: `host:port:user:pass`, `scheme://host:port:user:pass`, ...","type":"object","required":["line"],"properties":{"line":{"minLength":1,"maxLength":2048,"type":"string"}}}]}}},"ProfileInputGeo":{"type":"object","additionalProperties":false,"properties":{"source":{"description":"proxy: derive timezone/languages/location from the exit IP at launch.","enum":["proxy","manual","none"]},"timezone":{"description":"IANA zone name, e.g. \"Europe/Berlin\".","type":["string","null"],"minLength":1,"maxLength":64,"pattern":"^[A-Za-z][A-Za-z0-9_+-]*(?:/[A-Za-z0-9_+-]+)*$"},"languages":{"description":"BCP-47 tags, first is primary.","type":"array","uniqueItems":true,"items":{"type":"string","pattern":"^[A-Za-z]{2,8}(?:-[A-Za-z0-9]{1,8})*$"}},"latitude":{"type":["number","null"],"minimum":-90,"maximum":90},"longitude":{"type":["number","null"],"minimum":-180,"maximum":180}}},"ProfileInputOverrides":{"description":"Allowlisted subset of the Node SDK IdentityOverrides. On input every key also accepts null: the override is removed from the manifest (PATCH) or left unset (create).","type":"object","additionalProperties":false,"properties":{"platform":{"enum":["windows","linux","macos","android",null]},"platformVersion":{"type":["string","null"],"minLength":1,"maxLength":64},"brand":{"type":["string","null"],"minLength":1,"maxLength":64},"brandVersion":{"type":["string","null"],"minLength":1,"maxLength":64},"gpuVendor":{"type":["string","null"],"minLength":1,"maxLength":256},"gpuRenderer":{"type":["string","null"],"minLength":1,"maxLength":512},"hardwareConcurrency":{"type":["integer","null"],"minimum":1,"maximum":1024},"deviceMemory":{"description":"navigator.deviceMemory in GB.","type":["number","null"],"exclusiveMinimum":0,"maximum":1024},"screenWidth":{"type":["integer","null"],"minimum":1,"maximum":32768},"screenHeight":{"type":["integer","null"],"minimum":1,"maximum":32768},"availWidth":{"type":["integer","null"],"minimum":1,"maximum":32768},"availHeight":{"type":["integer","null"],"minimum":1,"maximum":32768},"colorDepth":{"type":["integer","null"],"minimum":1,"maximum":64},"devicePixelRatio":{"type":["number","null"],"exclusiveMinimum":0,"maximum":16},"maxTouchPoints":{"type":["integer","null"],"minimum":0,"maximum":256},"location":{"description":"Geolocation as \"lat,lon\".","type":["string","null"],"pattern":"^-?(?:90(?:\\.0+)?|[1-8]?[0-9](?:\\.[0-9]+)?), ?-?(?:180(?:\\.0+)?|1[0-7][0-9](?:\\.[0-9]+)?|[1-9]?[0-9](?:\\.[0-9]+)?)$"},"timezone":{"type":["string","null"],"minLength":1,"maxLength":64,"pattern":"^[A-Za-z][A-Za-z0-9_+-]*(?:/[A-Za-z0-9_+-]+)*$"},"acceptLanguage":{"description":"Accept-Language list, e.g. \"en-US,en\".","type":["string","null"],"minLength":1,"maxLength":256},"webrtcIp":{"type":["string","null"],"minLength":1,"maxLength":64},"webrtcMdns":{"enum":["on","off",null]},"disableGpuFingerprint":{"type":["boolean","null"]},"fingerprintNoise":{"type":["boolean","null"]},"gpuStringSpoof":{"type":["boolean","null"]},"canvasNoise":{"type":["boolean","null"]},"storageQuota":{"description":"navigator.storage.estimate().quota in megabytes.","type":["integer","null"],"minimum":0},"canvasBridge":{"type":["object","null"],"additionalProperties":false,"properties":{"url":{"type":"string","pattern":"^wss?://"},"auth":{"type":"string","minLength":1},"mode":{"enum":["off","all","allow","deny"]},"allow":{"type":"array","items":{"type":"string","minLength":1}},"deny":{"type":"array","items":{"type":"string","minLength":1}},"fallback":{"enum":["block","local"]}}},"tlsProfile":{"description":"\"match-persona\" | \"auto\" | \"native\" | \"off\" | \"chrome-<major>\" | Chromium major as an integer.","anyOf":[{"type":"string","minLength":1,"maxLength":32},{"type":"integer","minimum":1},{"type":"null"}]}}},"ProfileInputLaunch":{"type":"object","additionalProperties":false,"properties":{"start_urls":{"type":"array","items":{"type":"string","format":"uri"}},"extensions":{"description":"Absolute paths to unpacked extensions (POSIX \"/...\" or Windows \"X:\\...\").","type":"array","items":{"type":"string","pattern":"^(?:/|[A-Za-z]:[\\\\/])"}},"window":{"type":["object","null"],"additionalProperties":false,"properties":{"width":{"type":"integer","minimum":200,"maximum":16384},"height":{"type":"integer","minimum":200,"maximum":16384}}},"fonts_resolve":{"type":"boolean"},"headless":{"type":"boolean"},"extra_args":{"description":"Power users; identity switches are rejected by the SDK.","type":"array","items":{"type":"string","pattern":"^--"}}}},"ProfileCreate":{"title":"Ant0 profile create","description":"Profile create request: `name` is required, everything else defaults.","type":"object","additionalProperties":false,"properties":{"name":{"type":"string","minLength":1,"maxLength":120},"group":{"type":["string","null"],"minLength":1,"maxLength":120},"tags":{"$ref":"#/components/schemas/ProfileInputTags"},"notes":{"type":"string","maxLength":4000},"status":{"type":["string","null"],"minLength":1,"maxLength":120},"pinned":{"description":"Pinned rows sort first in clients. Default false.","type":"boolean"},"browser":{"$ref":"#/components/schemas/ProfileInputBrowser"},"identity":{"$ref":"#/components/schemas/ProfileInputIdentity"},"network":{"$ref":"#/components/schemas/ProfileInputNetwork"},"overrides":{"$ref":"#/components/schemas/ProfileInputOverrides"},"launch":{"$ref":"#/components/schemas/ProfileInputLaunch"}},"required":["name"]},"InstalledBrowser":{"additionalProperties":false,"type":"object","required":["version","chromium","target","path","executable","installed_at","size_bytes","default"],"properties":{"version":{"description":"Release version, e.g. 149.0.7827.114-ant0.1.","type":"string"},"chromium":{"type":"string"},"target":{"description":"windows-x64 or linux-x64.","type":"string"},"path":{"description":"Install directory.","type":"string"},"executable":{"type":"string"},"installed_at":{"format":"date-time","type":"string"},"size_bytes":{"minimum":0,"type":"integer"},"default":{"description":"True for exactly one installed release: the one unpinned profiles launch (PUT /v1/browsers/default; newest installed when unset).","type":"boolean"}}},"InstallJob":{"additionalProperties":false,"type":"object","required":["job_id","status","channel","version","phase","bytes","total","browser","error","created_at","finished_at"],"properties":{"job_id":{"format":"uuid","type":"string"},"status":{"anyOf":[{"type":"string","enum":["running"]},{"type":"string","enum":["done"]},{"type":"string","enum":["error"]}]},"channel":{"type":"string"},"version":{"description":"Known once the channel resolved (immediately when pinned).","anyOf":[{"type":"string"},{"type":"null"}]},"phase":{"description":"Latest progress phase; null before the download starts.","anyOf":[{"type":"string","enum":["download"]},{"type":"string","enum":["verify"]},{"type":"string","enum":["extract"]},{"type":"null"}]},"bytes":{"description":"Progress in the phase's unit (bytes for download/verify, entries for extract).","anyOf":[{"minimum":0,"type":"integer"},{"type":"null"}]},"total":{"description":"Total in the same unit; 0 when unknown (no Content-Length).","anyOf":[{"minimum":0,"type":"integer"},{"type":"null"}]},"browser":{"anyOf":[{"$ref":"#/components/schemas/InstalledBrowser"},{"type":"null"}]},"error":{"anyOf":[{"$ref":"#/components/schemas/ApiError"},{"type":"null"}]},"created_at":{"format":"date-time","type":"string"},"finished_at":{"anyOf":[{"format":"date-time","type":"string"},{"type":"null"}]}}},"ProfileSummary":{"additionalProperties":false,"type":"object","required":["id","name","group","tags","notes","status","pinned","platform","proxy_id","browser_version","identity_mode","created_at","updated_at","last_launched_at","deleted_at"],"properties":{"id":{"format":"uuid","type":"string"},"name":{"type":"string"},"group":{"anyOf":[{"type":"string"},{"type":"null"}]},"tags":{"type":"array","items":{"type":"string"}},"notes":{"description":"Free text, may be empty.","type":"string"},"status":{"anyOf":[{"type":"string"},{"type":"null"}]},"pinned":{"type":"boolean"},"platform":{"type":["null","string"],"enum":["windows","linux","macos","android",null],"description":"OS persona the browser presents: `overrides.platform` (passed to the engine as `--fingerprint-platform`), else the OS of the persisted synthetic/captured persona (`compatibility.os_family`, known once the identity has been previewed or launched); null when neither is known or the identity is native."},"proxy_id":{"anyOf":[{"format":"uuid","type":"string"},{"type":"null"}]},"browser_version":{"anyOf":[{"type":"string"},{"type":"null"}]},"identity_mode":{"anyOf":[{"type":"string","enum":["synthetic"]},{"type":"string","enum":["captured"]},{"type":"string","enum":["native"]}]},"created_at":{"format":"date-time","type":"string"},"updated_at":{"format":"date-time","type":"string"},"last_launched_at":{"anyOf":[{"format":"date-time","type":"string"},{"type":"null"}]},"deleted_at":{"description":"Set while the profile is in the trash (`GET /v1/profiles?trashed=true`).","anyOf":[{"format":"date-time","type":"string"},{"type":"null"}]}}},"TrashedProfileSummary":{"additionalProperties":false,"type":"object","required":["id","name","group","tags","notes","status","pinned","platform","proxy_id","browser_version","identity_mode","created_at","updated_at","last_launched_at","deleted_at","purge_at"],"properties":{"id":{"format":"uuid","type":"string"},"name":{"type":"string"},"group":{"anyOf":[{"type":"string"},{"type":"null"}]},"tags":{"type":"array","items":{"type":"string"}},"notes":{"description":"Free text, may be empty.","type":"string"},"status":{"anyOf":[{"type":"string"},{"type":"null"}]},"pinned":{"type":"boolean"},"platform":{"type":["null","string"],"enum":["windows","linux","macos","android",null],"description":"OS persona the browser presents: `overrides.platform` (passed to the engine as `--fingerprint-platform`), else the OS of the persisted synthetic/captured persona (`compatibility.os_family`, known once the identity has been previewed or launched); null when neither is known or the identity is native."},"proxy_id":{"anyOf":[{"format":"uuid","type":"string"},{"type":"null"}]},"browser_version":{"anyOf":[{"type":"string"},{"type":"null"}]},"identity_mode":{"anyOf":[{"type":"string","enum":["synthetic"]},{"type":"string","enum":["captured"]},{"type":"string","enum":["native"]}]},"created_at":{"format":"date-time","type":"string"},"updated_at":{"format":"date-time","type":"string"},"last_launched_at":{"anyOf":[{"format":"date-time","type":"string"},{"type":"null"}]},"deleted_at":{"format":"date-time","type":"string"},"purge_at":{"format":"date-time","description":"When the sweeper will purge it: `deleted_at` + `trash_retention_days`.","type":"string"}}},"Extension":{"additionalProperties":false,"type":"object","required":["id","name","version","description","manifest_version","icon_path","icon_data_url","path","size_bytes","added_at","used_by"],"properties":{"id":{"description":"Library id: the Web Store id when the manifest has a `key`, else `<slug>-<8 hex>`.","type":"string"},"name":{"type":"string"},"version":{"type":"string"},"description":{"description":"May be empty.","type":"string"},"manifest_version":{"anyOf":[{"type":"number","enum":[2]},{"type":"number","enum":[3]}]},"icon_path":{"description":"Absolute path of the largest manifest icon, or null.","anyOf":[{"type":"string"},{"type":"null"}]},"icon_data_url":{"description":"The icon as a base64 `data:` URL when it is at most 64 KB; else null.","anyOf":[{"type":"string"},{"type":"null"}]},"path":{"description":"Absolute library folder; this is what `launch.extensions` holds.","type":"string"},"size_bytes":{"minimum":0,"type":"integer"},"added_at":{"format":"date-time","type":"string"},"used_by":{"description":"Profiles (live and trashed) whose `launch.extensions` include `path`.","type":"array","items":{"format":"uuid","type":"string"}}}},"Lifecycle":{"additionalProperties":false,"type":"object","required":["profile_id","state","started_at","browser_version","headless"],"properties":{"profile_id":{"format":"uuid","type":"string"},"state":{"anyOf":[{"type":"string","enum":["starting"]},{"type":"string","enum":["running"]},{"type":"string","enum":["stopping"]},{"type":"string","enum":["stopped"]},{"type":"string","enum":["crashed"]}]},"started_at":{"anyOf":[{"format":"date-time","type":"string"},{"type":"null"}]},"browser_version":{"anyOf":[{"type":"string"},{"type":"null"}]},"headless":{"anyOf":[{"type":"boolean"},{"type":"null"}]}}},"ProxyInventory":{"additionalProperties":false,"type":"object","required":["id","type","last_check"],"properties":{"id":{"format":"uuid","type":"string"},"type":{"anyOf":[{"type":"string","enum":["http"]},{"type":"string","enum":["https"]},{"type":"string","enum":["socks5"]}]},"last_check":{"anyOf":[{"additionalProperties":false,"type":"object","required":["ok","country","latency_ms","at"],"properties":{"ok":{"type":"boolean"},"country":{"anyOf":[{"type":"string"},{"type":"null"}]},"latency_ms":{"anyOf":[{"type":"number"},{"type":"null"}]},"at":{"format":"date-time","type":"string"}}},{"type":"null"}]}}},"ProfileInventory":{"additionalProperties":false,"type":"object","required":["profile","lifecycle","proxy","permissions"],"properties":{"profile":{"$ref":"#/components/schemas/ProfileSummary"},"lifecycle":{"$ref":"#/components/schemas/Lifecycle"},"proxy":{"anyOf":[{"$ref":"#/components/schemas/ProxyInventory"},{"type":"null"}]},"permissions":{"additionalProperties":false,"type":"object","required":["edit","cdp"],"properties":{"edit":{"type":"boolean"},"cdp":{"type":"boolean"}}}}},"ApiKeyContext":{"additionalProperties":false,"type":"object","required":["user_id","workspace_id","device_id","device_sign_pub"],"properties":{"user_id":{"pattern":"^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$","type":"string"},"workspace_id":{"pattern":"^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$","type":"string"},"device_id":{"pattern":"^[A-Z2-7]{26}$","type":"string"},"device_sign_pub":{"pattern":"^[A-Za-z0-9+/]{42}[AEIMQUYcgkosw048]=$","type":"string"}}},"KeyMetadata":{"additionalProperties":false,"type":"object","required":["id","workspace_id","delegated_user_id","device_id","name","scopes","role_ceiling","created_at","expires_at","last_used_at","revoked_at","status"],"properties":{"id":{"pattern":"^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$","type":"string"},"workspace_id":{"pattern":"^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$","type":"string"},"delegated_user_id":{"pattern":"^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$","type":"string"},"device_id":{"pattern":"^[A-Z2-7]{26}$","type":"string"},"name":{"minLength":1,"maxLength":100,"pattern":"^[^\\u0000-\\u001f\\u007f-\\u009f]+$","type":"string"},"scopes":{"minItems":1,"maxItems":6,"uniqueItems":true,"type":"array","items":{"anyOf":[{"anyOf":[{"type":"string","enum":["status:read"]},{"type":"string","enum":["profiles:read"]},{"type":"string","enum":["proxies:read"]}]},{"anyOf":[{"type":"string","enum":["profiles:read"]},{"type":"string","enum":["profiles:run"]},{"type":"string","enum":["profiles:stop"]},{"type":"string","enum":["profiles:cdp"]}]}]}},"role_ceiling":{"anyOf":[{"type":"string","enum":["owner"]},{"type":"string","enum":["manager"]},{"type":"string","enum":["operator"]},{"type":"string","enum":["starter"]}]},"created_at":{"format":"date-time","type":"string"},"expires_at":{"format":"date-time","type":"string"},"last_used_at":{"anyOf":[{"format":"date-time","type":"string"},{"type":"null"}]},"revoked_at":{"anyOf":[{"format":"date-time","type":"string"},{"type":"null"}]},"status":{"anyOf":[{"type":"string","enum":["active"]},{"type":"string","enum":["expired"]},{"type":"string","enum":["revoked"]}]}}},"KeyCtx":{"additionalProperties":false,"type":"object","required":["kind","key_id","user_id","workspace_id","device_id","role_ceiling","current_role","scopes","expires_at"],"properties":{"kind":{"type":"string","enum":["api_key"]},"key_id":{"pattern":"^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$","type":"string"},"user_id":{"pattern":"^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$","type":"string"},"workspace_id":{"pattern":"^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$","type":"string"},"device_id":{"pattern":"^[A-Z2-7]{26}$","type":"string"},"role_ceiling":{"anyOf":[{"type":"string","enum":["owner"]},{"type":"string","enum":["manager"]},{"type":"string","enum":["operator"]},{"type":"string","enum":["starter"]}]},"current_role":{"anyOf":[{"type":"string","enum":["owner"]},{"type":"string","enum":["manager"]},{"type":"string","enum":["operator"]},{"type":"string","enum":["starter"]}]},"scopes":{"minItems":1,"maxItems":6,"uniqueItems":true,"type":"array","items":{"anyOf":[{"anyOf":[{"type":"string","enum":["status:read"]},{"type":"string","enum":["profiles:read"]},{"type":"string","enum":["proxies:read"]}]},{"anyOf":[{"type":"string","enum":["profiles:read"]},{"type":"string","enum":["profiles:run"]},{"type":"string","enum":["profiles:stop"]},{"type":"string","enum":["profiles:cdp"]}]}]}},"expires_at":{"format":"date-time","type":"string"}}},"KeyReadStatus":{"additionalProperties":false,"type":"object","required":["state","mode","plan","limits","used","features","billing","expires_at","grace_until","online","last_refresh_at","used_local"],"properties":{"state":{"type":"string","enum":["active"]},"mode":{"type":"string","enum":["enforce"]},"plan":{"minLength":1,"type":"string"},"limits":{"additionalProperties":false,"type":"object","required":["profiles","seats"],"properties":{"profiles":{"minimum":0,"maximum":9007199254740991,"type":"integer"},"seats":{"minimum":1,"maximum":9007199254740991,"type":"integer"}}},"used":{"minimum":0,"maximum":9007199254740991,"type":"integer"},"features":{"type":"array","items":{"type":"string"}},"billing":{"anyOf":[{"type":"string","enum":["active"]},{"type":"string","enum":["past_due"]},{"type":"string","enum":["lapsed"]}]},"expires_at":{"type":"null"},"grace_until":{"type":"null"},"online":{"type":"boolean","enum":[true]},"last_refresh_at":{"format":"date-time","type":"string"},"used_local":{"minimum":0,"type":"integer"}}},"LocalSyncMapping":{"additionalProperties":false,"type":"object","required":["local_profile_id","workspace_id","profile_id","folder_id","head_revision_id","head_revision_no","key_version","state","dirty","change_seq","synced_change_seq","last_error_code"],"properties":{"local_profile_id":{"format":"uuid","type":"string"},"workspace_id":{"format":"uuid","type":"string"},"profile_id":{"format":"uuid","type":"string"},"folder_id":{"anyOf":[{"format":"uuid","type":"string"},{"type":"null"}]},"head_revision_id":{"anyOf":[{"format":"uuid","type":"string"},{"type":"null"}]},"head_revision_no":{"minimum":0,"maximum":9007199254740991,"type":"integer"},"key_version":{"anyOf":[{"minimum":1,"maximum":9007199254740991,"type":"integer"},{"type":"null"}]},"state":{"anyOf":[{"type":"string","enum":["current"]},{"type":"string","enum":["uploading"]},{"type":"string","enum":["downloading"]},{"type":"string","enum":["offline"]},{"type":"string","enum":["conflict"]},{"type":"string","enum":["pending_key"]},{"type":"string","enum":["locked"]},{"type":"string","enum":["error"]}]},"dirty":{"type":"boolean"},"change_seq":{"minimum":0,"maximum":9007199254740991,"type":"integer"},"synced_change_seq":{"minimum":0,"maximum":9007199254740991,"type":"integer"},"last_error_code":{"anyOf":[{"type":"string"},{"type":"null"}]}}},"LocalSyncKeyState":{"additionalProperties":false,"type":"object","required":["workspace_id","state","active_key_version","missing_versions","unconfirmed_versions"],"properties":{"workspace_id":{"format":"uuid","type":"string"},"state":{"anyOf":[{"type":"string","enum":["ready"]},{"type":"string","enum":["pending_key"]},{"type":"string","enum":["pending_confirmation"]},{"type":"string","enum":["disabled"]}]},"active_key_version":{"anyOf":[{"minimum":1,"maximum":9007199254740991,"type":"integer"},{"type":"null"}]},"missing_versions":{"type":"array","items":{"minimum":1,"maximum":9007199254740991,"type":"integer"}},"unconfirmed_versions":{"type":"array","items":{"minimum":1,"maximum":9007199254740991,"type":"integer"}}}}}},"paths":{"/openapi.json":{"get":{"summary":"This OpenAPI 3.1 document","tags":["health"],"description":"Open (no bearer token). `@ant0/api-client` is generated from it.","security":[],"responses":{"200":{"description":"OpenAPI document","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"description":"OpenAPI document"}}}}}}},"/v1/health":{"get":{"summary":"Daemon liveness","tags":["health"],"description":"Open (no bearer token). Clients use it to find a running daemon.","security":[],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"additionalProperties":false,"type":"object","required":["ok","version","pid","uptime_s","home"],"properties":{"ok":{"type":"boolean","enum":[true]},"version":{"type":"string"},"pid":{"type":"integer"},"uptime_s":{"type":"number"},"home":{"type":"string"}}}}}}}}},"/v1/daemon/shutdown":{"post":{"summary":"Stop every running profile gracefully and exit the daemon","tags":["health"],"description":"Answers 202 at once, then runs the same shutdown the SIGTERM handler uses: every running browser is closed (CDP `Browser.close`, then the OS-specific fallback), the API and database are closed, `ant0d.pid` is removed and the process exits with code 0 (within 10 s at most: a guard then exits anyway and reports the step that hung on stderr). The desktop app calls this on exit and before a restart.","responses":{"202":{"description":"Default Response","content":{"application/json":{"schema":{"additionalProperties":false,"type":"object","required":["stopping"],"properties":{"stopping":{"minimum":0,"description":"Number of running profiles being stopped gracefully before the daemon exits.","type":"integer"}}}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/v1/browsers":{"get":{"summary":"Installed releases, newest first","tags":["browsers"],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"additionalProperties":false,"type":"object","required":["items"],"properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/InstalledBrowser"}}}}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/v1/browsers/default":{"put":{"summary":"Set the default release","tags":["browsers"],"description":"The release profiles without a pinned `browser.version` launch. Must be installed (404 `browser.not_found`). Answers the updated list.","requestBody":{"required":true,"content":{"application/json":{"schema":{"additionalProperties":false,"type":"object","required":["version"],"properties":{"version":{"pattern":"^[A-Za-z0-9][A-Za-z0-9._-]{0,127}$","description":"An installed release version.","type":"string"}}}}}},"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"additionalProperties":false,"type":"object","required":["items"],"properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/InstalledBrowser"}}}}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/v1/browsers/available":{"get":{"summary":"Look up an available browser release","tags":["browsers"],"description":"Contacts the release store (the only outbound host besides proxies). An explicit version reads its immutable manifest without following the channel pointer.","parameters":[{"schema":{"pattern":"^[a-z0-9][a-z0-9-]{0,63}$","default":"stable","type":"string"},"in":"query","name":"channel","required":false},{"schema":{"pattern":"^\\d+(?:\\.\\d+)*(?:-ant0\\.\\d+)?$","type":"string"},"in":"query","name":"version","required":false,"description":"Exact immutable release version; omitted = resolve the channel."}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"additionalProperties":false,"type":"object","required":["channel","version","chromium","installed","size_bytes"],"properties":{"channel":{"type":"string"},"version":{"type":"string"},"chromium":{"type":"string"},"installed":{"type":"boolean"},"size_bytes":{"description":"Download size of this platform's archive; null only when a channel's manifest is unavailable. Exact-version lookup fails instead.","anyOf":[{"minimum":0,"type":"integer"},{"type":"null"}]}}}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"502":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/v1/browsers/install":{"post":{"summary":"Start a background install","tags":["browsers"],"description":"Answers 202 immediately. Progress streams as `browser.install` events; poll `GET /v1/browsers/jobs/{id}` for the outcome. Installing an already installed version completes at once.","requestBody":{"required":true,"content":{"application/json":{"schema":{"additionalProperties":false,"type":"object","properties":{"channel":{"pattern":"^[a-z0-9][a-z0-9-]{0,63}$","default":"stable","type":"string"},"version":{"pattern":"^[A-Za-z0-9][A-Za-z0-9._-]{0,127}$","description":"Pin a release; omitted = the channel's current version.","type":"string"}}}}}},"responses":{"202":{"description":"Default Response","content":{"application/json":{"schema":{"additionalProperties":false,"type":"object","required":["job_id"],"properties":{"job_id":{"format":"uuid","type":"string"}}}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/v1/browsers/jobs/{id}":{"get":{"summary":"Status of an install job","tags":["browsers"],"parameters":[{"schema":{"format":"uuid","type":"string"},"in":"path","name":"id","required":true}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InstallJob"}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/v1/browsers/{version}":{"delete":{"summary":"Remove an installed release","tags":["browsers"],"description":"409 `browser.in_use` while a running profile uses it; 409 `browser.is_default` when it is the default and nothing else is installed (otherwise the newest remaining release becomes the default).","parameters":[{"schema":{"pattern":"^[A-Za-z0-9][A-Za-z0-9._-]{0,127}$","type":"string"},"in":"path","name":"version","required":true}],"responses":{"204":{"description":"Default Response"},"400":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"409":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/v1/profiles/{id}/run":{"post":{"summary":"Run saved configuration without disclosing browser endpoints","tags":["profiles"],"description":"Interactive run or independent profiles:run key authority. Keys are online-only and never use interactive/offline evidence.","requestBody":{"required":true,"content":{"application/json":{"schema":{"additionalProperties":false,"type":"object","properties":{"timeout_s":{"minimum":1,"maximum":600,"type":"number"},"conflict_profile_id":{"format":"uuid","type":"string"}}}}}},"parameters":[{"schema":{"minLength":1,"maxLength":120,"type":"string"},"in":"path","name":"id","required":true,"description":"Profile id (UUID) or exact profile name."},{"schema":{"default":"api","anyOf":[{"type":"string","enum":["api"]},{"type":"string","enum":["mcp"]}]},"in":"header","name":"x-ant0-consumer","required":false}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"additionalProperties":false,"title":"RunResult","type":"object","required":["requested_profile_id","profile_id","redirected","lifecycle"],"properties":{"requested_profile_id":{"format":"uuid","type":"string"},"profile_id":{"format":"uuid","type":"string"},"redirected":{"type":"boolean"},"lifecycle":{"$ref":"#/components/schemas/Lifecycle"}}}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"409":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"423":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"500":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"503":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}},"get":{"summary":"Read endpoint-free profile lifecycle","tags":["profiles"],"description":"API keys require signed profiles:read operational preflight, including for stopped profiles.","parameters":[{"schema":{"minLength":1,"maxLength":120,"type":"string"},"in":"path","name":"id","required":true,"description":"Profile id (UUID) or exact profile name."},{"schema":{"default":"api","anyOf":[{"type":"string","enum":["api"]},{"type":"string","enum":["mcp"]}]},"in":"header","name":"x-ant0-consumer","required":false}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Lifecycle"}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"409":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"423":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"500":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"503":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/v1/profiles":{"get":{"summary":"List profiles","tags":["profiles"],"description":"Pinned first, then by name. `total` counts every match regardless of paging. Live profiles only; `?trashed=true` lists the trash instead (see also `GET /v1/trash`).","parameters":[{"schema":{"type":"string"},"in":"query","name":"q","required":false,"description":"Case-insensitive substring of the name."},{"schema":{"type":"string"},"in":"query","name":"group","required":false},{"schema":{"type":"string"},"in":"query","name":"tag","required":false},{"schema":{"minimum":1,"maximum":1000,"default":100,"type":"integer"},"in":"query","name":"limit","required":false},{"schema":{"minimum":0,"default":0,"type":"integer"},"in":"query","name":"offset","required":false},{"schema":{"default":false,"type":"boolean"},"in":"query","name":"trashed","required":false,"description":"true: only profiles in the trash; false (default): only live profiles."}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"additionalProperties":false,"type":"object","required":["items","total"],"properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/ProfileSummary"}},"total":{"minimum":0,"type":"integer"}}}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}},"post":{"summary":"Create a profile","tags":["profiles"],"description":"Only `name` is required. `network.proxy` may carry an inline proxy (object, `{ url }` or `{ line }`) that becomes a shared proxy referenced by `proxy_id`. With a licence a synthetic profile is claimed at the cloud first, which issues its persona: 403 `licence.profile_limit` / `licence.required` / `workspace.*`, 409 `profile.claimed`, 503 `licence.offline` when the cloud is unreachable.","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProfileCreate"}}}},"responses":{"201":{"description":"Canonical stored profile document (schema \"ant0-profile/v1\"). Runtime state (running, pid, cdp url) is not part of the manifest.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProfileManifest"}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"409":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"503":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/v1/profiles/bulk":{"post":{"summary":"Create many profiles","tags":["profiles"],"description":"`{ csv }` (header row + one profile per row; row numbers count the header as 1) or `{ items }` (row numbers start at 1). Rows are independent; failures are reported per row and the rest are created.","requestBody":{"required":true,"content":{"application/json":{"schema":{"anyOf":[{"additionalProperties":false,"type":"object","required":["csv"],"properties":{"csv":{"description":"Header row + one profile per row (see CLI docs).","type":"string"}}},{"additionalProperties":false,"type":"object","required":["items"],"properties":{"items":{"minItems":1,"type":"array","items":{"$ref":"#/components/schemas/ProfileCreate"}}}}]}}}},"responses":{"201":{"description":"Default Response","content":{"application/json":{"schema":{"additionalProperties":false,"type":"object","required":["created","errors"],"properties":{"created":{"type":"array","items":{"format":"uuid","type":"string"}},"errors":{"type":"array","items":{"additionalProperties":false,"type":"object","required":["row","message"],"properties":{"row":{"type":"integer"},"message":{"type":"string"}}}}}}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/v1/profiles/bulk-update":{"post":{"summary":"Update many profiles","tags":["profiles"],"description":"Ids (UUID or exact name, at most 50) are processed one after another; a failing id is reported with its error code and the rest proceed. 400 when there are more than 50. `patch.group` replaces (null clears the label), `tags_add` then `tags_remove` edit the tags, `pinned` replaces. Trashed profiles are updated too. UUID/name aliases are deduplicated, then each unique profile is authorized and edited sequentially. Authorization and edit errors retain the input reference in `errors`; other items proceed. Earlier edits remain committed when a later item fails. Successful bindings are rechecked before delivering the overall result. Sync-mapped profiles require fresh cloud owner/manager/operator membership and exact remote-profile/folder visibility before any edit. Starter or missing permission returns 403 `team.forbidden`; offline, malformed or incomplete evidence fails closed (503), and cloud rate limits return 429. Authorization has a ten-second/100-page aggregate budget, with no cached-role or offline-grace fallback. Session/workspace or mapping changes return 409 `licence.session_changed` / `sync.conflict`. Existing mutation locks apply: 409 `sync.locked` / `sync.transfer_conflict`, 423 `sync.locked` for a locked vault. Unmapped profiles need no cloud calls, but missing authorization infrastructure returns 503 `sync.store_unavailable` even for local edits. `group` is a local label, not a cloud folder move or grant. A late binding change suppresses success without rolling back committed edits; do not automatically retry an ambiguous mutation.","requestBody":{"required":true,"content":{"application/json":{"schema":{"additionalProperties":false,"type":"object","required":["ids","patch"],"properties":{"ids":{"minItems":1,"maxItems":50,"description":"Profile ids (UUID or exact name), at most 50.","type":"array","items":{"minLength":1,"maxLength":120,"type":"string"}},"patch":{"additionalProperties":false,"description":"`group` replaces (null clears); `tags_add` then `tags_remove` edit the tag list; `pinned` replaces.","type":"object","properties":{"group":{"anyOf":[{"minLength":1,"maxLength":120,"type":"string"},{"type":"null"}]},"tags_add":{"type":"array","items":{"minLength":1,"maxLength":40,"type":"string"}},"tags_remove":{"type":"array","items":{"minLength":1,"maxLength":40,"type":"string"}},"pinned":{"type":"boolean"}}}}}}}},"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"additionalProperties":false,"type":"object","required":["updated","errors"],"properties":{"updated":{"minimum":0,"description":"Ids the operation succeeded for.","type":"integer"},"errors":{"type":"array","items":{"additionalProperties":false,"type":"object","required":["id","error","message"],"properties":{"id":{"description":"The id as sent.","type":"string"},"error":{"description":"API error code, e.g. profile.not_found.","type":"string"},"message":{"type":"string"}}}}}}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"409":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"423":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"503":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/v1/profiles/bulk-start":{"post":{"summary":"Start many profiles","tags":["profiles"],"description":"Ids (UUID or exact name, at most 50) are processed one after another; a failing id is reported with its error code and the rest proceed. 400 when there are more than 50. Uses the endpoint-free run primitive, deduplicating UUID/name aliases. First conflict redirects count as successful launches.","requestBody":{"required":true,"content":{"application/json":{"schema":{"additionalProperties":false,"type":"object","required":["ids"],"properties":{"ids":{"minItems":1,"maxItems":50,"description":"Profile ids (UUID or exact name), at most 50.","type":"array","items":{"minLength":1,"maxLength":120,"type":"string"}}}}}}},"parameters":[{"schema":{"default":"api","anyOf":[{"type":"string","enum":["api"]},{"type":"string","enum":["mcp"]}]},"in":"header","name":"x-ant0-consumer","required":false}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"additionalProperties":false,"type":"object","required":["updated","errors"],"properties":{"updated":{"type":"integer"},"errors":{"type":"array","items":{"additionalProperties":false,"type":"object","required":["id","code","message"],"properties":{"id":{"type":"string"},"code":{"type":"string"},"message":{"type":"string"}}}}}}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/v1/profiles/bulk-stop":{"post":{"summary":"Stop many profiles","tags":["profiles"],"description":"Ids (UUID or exact name, at most 50) are processed one after another; a failing id is reported with its error code and the rest proceed. 400 when there are more than 50. Graceful stop; `updated` counts the browsers stopped.","requestBody":{"required":true,"content":{"application/json":{"schema":{"additionalProperties":false,"type":"object","required":["ids"],"properties":{"ids":{"minItems":1,"maxItems":50,"description":"Profile ids (UUID or exact name), at most 50.","type":"array","items":{"minLength":1,"maxLength":120,"type":"string"}}}}}}},"parameters":[{"schema":{"default":"api","anyOf":[{"type":"string","enum":["api"]},{"type":"string","enum":["mcp"]}]},"in":"header","name":"x-ant0-consumer","required":false}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"additionalProperties":false,"type":"object","required":["updated","errors"],"properties":{"updated":{"minimum":0,"description":"Ids the operation succeeded for.","type":"integer"},"errors":{"type":"array","items":{"additionalProperties":false,"type":"object","required":["id","error","message"],"properties":{"id":{"description":"The id as sent.","type":"string"},"error":{"description":"API error code, e.g. profile.not_found.","type":"string"},"message":{"type":"string"}}}}}}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/v1/profiles/{id}":{"get":{"summary":"Profile manifest plus runtime","tags":["profiles"],"description":"`id` is the profile UUID or its exact name. `runtime` is the live session or null; `deleted_at` is set while in the trash; `platform` as in the list summaries. Non-null sessions require fresh cloud owner/manager/operator membership and exact mapped remote-profile/folder visibility. Starter or missing permission returns 403 `team.forbidden`; offline, malformed or incomplete evidence fails closed (503), and rate limits return 429. Authorization has a ten-second/100-page per-profile budget, without cached-role or offline-grace fallback. Session/workspace or mapping changes return 409 `licence.session_changed` / `sync.conflict`; browser replacement or changed launch/endpoint fields return 409 `sync.conflict`. Missing authorization infrastructure returns 503 `sync.store_unavailable` even for empty/stopped reads, before profile resolution. Stopped profiles and unmapped sessions need no cloud calls. These reads connect to no CDP socket and perform no browser or profile mutation.","parameters":[{"schema":{"minLength":1,"maxLength":120,"type":"string"},"in":"path","name":"id","required":true,"description":"Profile id (UUID) or exact profile name."}],"responses":{"200":{"description":"profile-manifest-v1 plus `runtime` (the live session, or null when stopped), `deleted_at` (RFC 3339 while in the trash, else null) and `platform` (the OS persona the browser presents, as in ProfileSummary).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProfileDetail"}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"409":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"503":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}},"patch":{"summary":"Update a profile","tags":["profiles"],"description":"`id` is the profile UUID or its exact name. Objects merge, arrays and scalars replace. The patch merges against the current manifest after authorization. Sync-mapped profiles require fresh cloud owner/manager/operator membership and exact remote-profile/folder visibility before any edit. Starter or missing permission returns 403 `team.forbidden`; offline, malformed or incomplete evidence fails closed (503), and cloud rate limits return 429. Authorization has a ten-second/100-page aggregate budget, with no cached-role or offline-grace fallback. Session/workspace or mapping changes return 409 `licence.session_changed` / `sync.conflict`. Existing mutation locks apply: 409 `sync.locked` / `sync.transfer_conflict`, 423 `sync.locked` for a locked vault. Unmapped profiles need no cloud calls, but missing authorization infrastructure returns 503 `sync.store_unavailable` even for local edits. `group` is a local label, not a cloud folder move or grant. A late binding change suppresses success without rolling back committed edits; do not automatically retry an ambiguous mutation.","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProfileInput"}}}},"parameters":[{"schema":{"minLength":1,"maxLength":120,"type":"string"},"in":"path","name":"id","required":true,"description":"Profile id (UUID) or exact profile name."}],"responses":{"200":{"description":"Canonical stored profile document (schema \"ant0-profile/v1\"). Runtime state (running, pid, cdp url) is not part of the manifest.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProfileManifest"}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"409":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"423":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"503":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}},"delete":{"summary":"Move a profile to the trash (or delete it for good)","tags":["profiles"],"description":"`id` is the profile UUID or its exact name. Moves the profile to the trash, where it stays restorable for `trash_retention_days` (7) before the sweeper purges it. `?permanent=true` deletes the row, launch history and user data immediately (and releases the cloud claim, PHASE3 §9; the trash keeps it). 409 `profile.running` while it runs.","parameters":[{"schema":{"default":false,"type":"boolean"},"in":"query","name":"permanent","required":false,"description":"Skip the trash: delete the row, launch history and user data for good. Default: move to the trash (7-day retention)."},{"schema":{"default":false,"deprecated":true,"type":"boolean"},"in":"query","name":"purge","required":false,"description":"Deprecated alias of `permanent` (contract v1.2 and earlier)."},{"schema":{"minLength":1,"maxLength":120,"type":"string"},"in":"path","name":"id","required":true,"description":"Profile id (UUID) or exact profile name."}],"responses":{"204":{"description":"Default Response"},"400":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"409":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"423":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"503":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/v1/profiles/{id}/restore":{"post":{"summary":"Restore a profile from the trash","tags":["profiles"],"description":"`id` is the profile UUID or its exact name. 404 `profile.not_trashed` when the profile is not in the trash.","parameters":[{"schema":{"minLength":1,"maxLength":120,"type":"string"},"in":"path","name":"id","required":true,"description":"Profile id (UUID) or exact profile name."}],"responses":{"200":{"description":"Canonical stored profile document (schema \"ant0-profile/v1\"). Runtime state (running, pid, cdp url) is not part of the manifest.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProfileManifest"}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"409":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/v1/profiles/{id}/duplicate":{"post":{"summary":"Duplicate a profile","tags":["profiles"],"description":"`id` is the profile UUID or its exact name. Copies the manifest under a new id (new synthetic persona, claimed like a create); user data is not copied.","requestBody":{"required":true,"content":{"application/json":{"schema":{"additionalProperties":false,"type":"object","properties":{"name":{"minLength":1,"maxLength":120,"type":"string"}}}}}},"parameters":[{"schema":{"minLength":1,"maxLength":120,"type":"string"},"in":"path","name":"id","required":true,"description":"Profile id (UUID) or exact profile name."}],"responses":{"201":{"description":"Canonical stored profile document (schema \"ant0-profile/v1\"). Runtime state (running, pid, cdp url) is not part of the manifest.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProfileManifest"}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"409":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"503":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/v1/profiles/{id}/identity":{"get":{"summary":"Persona the profile presents","tags":["profiles"],"description":"`id` is the profile UUID or its exact name. Generates and persists a synthetic persona when missing.","parameters":[{"schema":{"minLength":1,"maxLength":120,"type":"string"},"in":"path","name":"id","required":true,"description":"Profile id (UUID) or exact profile name."}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"additionalProperties":false,"type":"object","required":["mode","persona","source","persisted","warnings"],"properties":{"mode":{"anyOf":[{"type":"string","enum":["synthetic"]},{"type":"string","enum":["captured"]},{"type":"string","enum":["native"]}]},"persona":{"type":["null","object"],"additionalProperties":true,"description":"persona-profile-v2 (SDK); null for native mode."},"source":{"anyOf":[{"additionalProperties":false,"type":"object","required":["kind","version"],"properties":{"kind":{"type":"string"},"version":{"type":"string"}}},{"type":"null"}]},"persisted":{"type":"boolean"},"warnings":{"type":"array","items":{"additionalProperties":false,"type":"object","required":["code","message"],"properties":{"code":{"type":"string"},"message":{"type":"string"}}}}}}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"409":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"500":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/v1/profiles/{id}/start":{"post":{"summary":"Start the browser","tags":["profiles"],"description":"`id` is the profile UUID or its exact name. Resolves when the DevTools endpoint is up. 409 `profile.already_running`. Independent API keys require profiles:run and profiles:cdp with fresh signed authority; interactive requests require CDP disclosure authorization before launch and again before returning the full Session: mapped profiles need fresh owner/manager/operator membership and exact remote-profile/folder visibility. Starter or missing permission returns 403 `team.forbidden`; offline, malformed or incomplete evidence fails closed (503), and rate limits return 429. Each permission pass has its own ten-second/100-page budget including token retries, without cached-role or offline-grace fallback; the entire launch is not limited to ten seconds. Unmapped profiles need no cloud calls but retain binding fences. Missing authorization infrastructure returns 503 `sync.store_unavailable` before resolution, even for unmapped or unknown profiles. Session/workspace changes return 409 `licence.session_changed`; mapping changes, redirected launches or browser/session changes return generic 409 `sync.conflict`. Existing launcher licence/lease/checkpoint and error handling applies, including 423 `profile.locked`. Late denial or a lost response may leave a browser running; there is no automatic stop or rollback. Do not automatically retry an ambiguous start: inspect lifecycle state and guarded runtime GETs when permitted first.","requestBody":{"required":true,"content":{"application/json":{"schema":{"additionalProperties":false,"type":"object","properties":{"headless":{"type":"boolean"},"start_urls":{"type":"array","items":{"format":"uri","type":"string"}},"extra_args":{"type":"array","items":{"pattern":"^--","type":"string"}},"timeout_s":{"minimum":1,"maximum":600,"type":"number"}}}}}},"parameters":[{"schema":{"minLength":1,"maxLength":120,"type":"string"},"in":"path","name":"id","required":true,"description":"Profile id (UUID) or exact profile name."},{"schema":{"default":"api","anyOf":[{"type":"string","enum":["api"]},{"type":"string","enum":["mcp"]}]},"in":"header","name":"x-ant0-consumer","required":false}],"responses":{"200":{"description":"A running browser session: the response of POST /v1/profiles/:id/start and the element of GET /v1/sessions.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Session"}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"409":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"423":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"500":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"503":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/v1/profiles/{id}/stop":{"post":{"summary":"Stop the browser","tags":["profiles"],"description":"`id` is the profile UUID or its exact name. Graceful (Browser.close, SIGTERM, SIGKILL) unless `force`. 409 `profile.not_running`. API keys require profiles:stop and fence the exact browser generation; interactive local cleanup remains available after permission loss.","requestBody":{"required":true,"content":{"application/json":{"schema":{"additionalProperties":false,"type":"object","properties":{"force":{"description":"SIGKILL immediately.","type":"boolean"}}}}}},"parameters":[{"schema":{"minLength":1,"maxLength":120,"type":"string"},"in":"path","name":"id","required":true,"description":"Profile id (UUID) or exact profile name."},{"schema":{"default":"api","anyOf":[{"type":"string","enum":["api"]},{"type":"string","enum":["mcp"]}]},"in":"header","name":"x-ant0-consumer","required":false}],"responses":{"204":{"description":"Default Response"},"400":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"409":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"423":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"503":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/v1/profiles/{id}/status":{"get":{"summary":"Run state","tags":["profiles"],"description":"`id` is the profile UUID or its exact name. `session` is null unless running. Non-null sessions require fresh cloud owner/manager/operator membership and exact mapped remote-profile/folder visibility. Starter or missing permission returns 403 `team.forbidden`; offline, malformed or incomplete evidence fails closed (503), and rate limits return 429. Authorization has a ten-second/100-page per-profile budget, without cached-role or offline-grace fallback. Session/workspace or mapping changes return 409 `licence.session_changed` / `sync.conflict`; browser replacement or changed launch/endpoint fields return 409 `sync.conflict`. Missing authorization infrastructure returns 503 `sync.store_unavailable` even for empty/stopped reads, before profile resolution. Stopped profiles and unmapped sessions need no cloud calls. These reads connect to no CDP socket and perform no browser or profile mutation.","parameters":[{"schema":{"minLength":1,"maxLength":120,"type":"string"},"in":"path","name":"id","required":true,"description":"Profile id (UUID) or exact profile name."},{"schema":{"default":"api","anyOf":[{"type":"string","enum":["api"]},{"type":"string","enum":["mcp"]}]},"in":"header","name":"x-ant0-consumer","required":false}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"additionalProperties":false,"type":"object","required":["state","session"],"properties":{"state":{"anyOf":[{"type":"string","enum":["starting"]},{"type":"string","enum":["running"]},{"type":"string","enum":["stopping"]},{"type":"string","enum":["stopped"]},{"type":"string","enum":["crashed"]}]},"session":{"anyOf":[{"$ref":"#/components/schemas/Session"},{"type":"null"}]}}}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"409":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"503":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/v1/inventory/profiles":{"get":{"operationId":"listProfileInventory","summary":"List endpoint-free profile inventory","tags":["inventory"],"description":"Endpoint-free current metadata. Requires sync infrastructure even for empty/local reads. Known team bindings require fresh membership and complete visibility (one ten-second/100-page lookup per request, including token retry). Confirmed invisible rows are filtered before paging/counting; unavailable evidence fails the whole request. Binding/session/browser changes return 409. Permission flags describe role authority, not licence or launch admission.","parameters":[{"schema":{"type":"string"},"in":"query","name":"q","required":false,"description":"Case-insensitive substring of the name."},{"schema":{"type":"string"},"in":"query","name":"group","required":false},{"schema":{"type":"string"},"in":"query","name":"tag","required":false},{"schema":{"minimum":1,"maximum":1000,"default":100,"type":"integer"},"in":"query","name":"limit","required":false},{"schema":{"minimum":0,"default":0,"type":"integer"},"in":"query","name":"offset","required":false},{"schema":{"default":false,"type":"boolean"},"in":"query","name":"trashed","required":false,"description":"true: only profiles in the trash; false (default): only live profiles."},{"schema":{"type":"boolean"},"in":"query","name":"running","required":false},{"schema":{"default":"api","anyOf":[{"type":"string","enum":["api"]},{"type":"string","enum":["mcp"]}]},"in":"header","name":"x-ant0-consumer","required":false}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"additionalProperties":false,"type":"object","required":["items","total"],"properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/ProfileInventory"}},"total":{"minimum":0,"type":"integer"}}}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"409":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"503":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/v1/inventory/profiles/{id}":{"get":{"operationId":"getProfileInventory","summary":"Read endpoint-free profile inventory","tags":["inventory"],"description":"Endpoint-free current metadata. Requires sync infrastructure even for empty/local reads. Known team bindings require fresh membership and complete visibility (one ten-second/100-page lookup per request, including token retry). Confirmed invisible rows are filtered before paging/counting; unavailable evidence fails the whole request. Binding/session/browser changes return 409. Permission flags describe role authority, not licence or launch admission. UUID or exact name is resolved once. Invisible profiles return 403 team.forbidden.","parameters":[{"schema":{"minLength":1,"maxLength":120,"type":"string"},"in":"path","name":"id","required":true,"description":"Profile id (UUID) or exact profile name."},{"schema":{"default":"api","anyOf":[{"type":"string","enum":["api"]},{"type":"string","enum":["mcp"]}]},"in":"header","name":"x-ant0-consumer","required":false}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProfileInventory"}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"409":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"503":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/v1/inventory/proxies":{"get":{"operationId":"listProxyInventory","summary":"List endpoint-free proxy inventory","tags":["inventory"],"description":"Endpoint-free current metadata. Requires sync infrastructure even for empty/local reads. Known team bindings require fresh membership and complete visibility (one ten-second/100-page lookup per request, including token retry). Confirmed invisible rows are filtered before paging/counting; unavailable evidence fails the whole request. Binding/session/browser changes return 409. Permission flags describe role authority, not licence or launch admission. Includes visible-profile references and genuinely unused local proxies; checks live and trash references.","parameters":[{"schema":{"minimum":1,"maximum":1000,"default":100,"type":"integer"},"in":"query","name":"limit","required":false},{"schema":{"minimum":0,"default":0,"type":"integer"},"in":"query","name":"offset","required":false},{"schema":{"default":"api","anyOf":[{"type":"string","enum":["api"]},{"type":"string","enum":["mcp"]}]},"in":"header","name":"x-ant0-consumer","required":false}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"additionalProperties":false,"type":"object","required":["items","total"],"properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/ProxyInventory"}},"total":{"minimum":0,"type":"integer"}}}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"409":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"503":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/v1/automation/api-keys/context":{"get":{"operationId":"getApiKeyContext","tags":["automation"],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiKeyContext"}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"409":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"503":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/v1/automation/api-keys/provision":{"post":{"operationId":"provisionApiKey","tags":["automation"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"additionalProperties":false,"type":"object","required":["expected","create"],"properties":{"expected":{"$ref":"#/components/schemas/ApiKeyContext"},"create":{"additionalProperties":false,"type":"object","required":["id","credential","name","scopes","lifetime_seconds"],"properties":{"id":{"pattern":"^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$","type":"string"},"credential":{"pattern":"^ant0_sk_v1_([0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12})_([A-Za-z0-9_-]{42}[AEIMQUYcgkosw048])$","writeOnly":true,"type":"string"},"name":{"minLength":1,"maxLength":100,"pattern":"^[^\\u0000-\\u001f\\u007f-\\u009f]+$","type":"string"},"scopes":{"minItems":1,"maxItems":6,"uniqueItems":true,"type":"array","items":{"anyOf":[{"anyOf":[{"type":"string","enum":["status:read"]},{"type":"string","enum":["profiles:read"]},{"type":"string","enum":["proxies:read"]}]},{"anyOf":[{"type":"string","enum":["profiles:read"]},{"type":"string","enum":["profiles:run"]},{"type":"string","enum":["profiles:stop"]},{"type":"string","enum":["profiles:cdp"]}]}]}},"lifetime_seconds":{"minimum":60,"maximum":31536000,"default":2592000,"type":"integer"}}}}}}}},"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"additionalProperties":false,"type":"object","required":["key"],"properties":{"key":{"$ref":"#/components/schemas/KeyMetadata"}}}}}},"201":{"description":"Default Response","content":{"application/json":{"schema":{"additionalProperties":false,"type":"object","required":["key"],"properties":{"key":{"$ref":"#/components/schemas/KeyMetadata"}}}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"409":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"503":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/v1/automation/api-keys":{"get":{"operationId":"listApiKeys","tags":["automation"],"parameters":[{"schema":{"minimum":1,"maximum":100,"default":50,"type":"integer"},"in":"query","name":"limit","required":false},{"schema":{"minLength":1,"type":"string"},"in":"query","name":"cursor","required":false}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"additionalProperties":false,"type":"object","required":["items","next_cursor"],"properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/KeyMetadata"}},"next_cursor":{"anyOf":[{"type":"string"},{"type":"null"}]}}}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"409":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"503":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/v1/automation/api-keys/{id}":{"get":{"operationId":"getApiKey","tags":["automation"],"parameters":[{"schema":{"format":"uuid","type":"string"},"in":"path","name":"id","required":true}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"additionalProperties":false,"type":"object","required":["key"],"properties":{"key":{"$ref":"#/components/schemas/KeyMetadata"}}}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"409":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"503":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}},"patch":{"operationId":"renameApiKey","tags":["automation"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"additionalProperties":false,"type":"object","required":["name"],"properties":{"name":{"minLength":1,"maxLength":100,"pattern":"^[^\\u0000-\\u001f\\u007f-\\u009f]+$","type":"string"}}}}}},"parameters":[{"schema":{"format":"uuid","type":"string"},"in":"path","name":"id","required":true}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"additionalProperties":false,"type":"object","required":["key"],"properties":{"key":{"$ref":"#/components/schemas/KeyMetadata"}}}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"409":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"503":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}},"delete":{"operationId":"revokeApiKey","tags":["automation"],"parameters":[{"schema":{"format":"uuid","type":"string"},"in":"path","name":"id","required":true}],"responses":{"204":{"description":"Default Response"},"400":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"409":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"503":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/v1/automation/status":{"get":{"operationId":"getAutomationStatus","tags":["automation"],"parameters":[{"schema":{"default":"api","anyOf":[{"type":"string","enum":["api"]},{"type":"string","enum":["mcp"]}]},"in":"header","name":"x-ant0-consumer","required":false}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"additionalProperties":false,"type":"object","required":["principal","daemon","licence"],"properties":{"principal":{"$ref":"#/components/schemas/KeyCtx"},"daemon":{"additionalProperties":false,"type":"object","required":["ok","version","uptime_s"],"properties":{"ok":{"type":"boolean","enum":[true]},"version":{"type":"string"},"uptime_s":{"minimum":0,"type":"integer"}}},"licence":{"$ref":"#/components/schemas/KeyReadStatus"}}}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"409":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"503":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/v1/profiles/{id}/cookies":{"post":{"summary":"Import cookies","tags":["cookies"],"description":"`id` is the profile UUID or its exact name. Running profile: set over CDP immediately (`applied: \"now\"`). Stopped profile: queued on disk and applied on the next start (`applied: \"next_start\"`). Accepts Cookie-Editor/EditThisCookie JSON, Puppeteer/Playwright arrays and Netscape cookies.txt; `format: auto` sniffs. Sync-mapped profiles require the same fresh cloud membership (owner, manager or operator) and folder-scoped visibility as cookie export, before CDP access, pending-cookie changes or dirty-state bookkeeping. Starter or missing membership/visibility returns 403 `team.forbidden`. Offline, unavailable or malformed authorization evidence fails closed (503); cloud rate limits return 429. There is no cached-role or offline-grace fallback. Session/workspace, mapping or browser-session changes and conflicting sync operations reject the mutation (409); a locked sync vault returns 423 `sync.locked`. A change detected after browser dispatch cannot undo the command; do not automatically retry an ambiguous mutation. Unmapped local profiles retain their existing cookie behavior. Pending imports are authorized when queued, not reauthorized when applied at launch.","requestBody":{"required":true,"content":{"application/json":{"schema":{"additionalProperties":false,"type":"object","required":["format","data"],"properties":{"format":{"default":"auto","anyOf":[{"type":"string","enum":["auto"]},{"type":"string","enum":["json"]},{"type":"string","enum":["netscape"]}]},"data":{"minLength":1,"description":"Cookie-Editor/EditThisCookie/Puppeteer JSON or Netscape cookies.txt text.","type":"string"}}}}}},"parameters":[{"schema":{"minLength":1,"maxLength":120,"type":"string"},"in":"path","name":"id","required":true,"description":"Profile id (UUID) or exact profile name."}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"additionalProperties":false,"type":"object","required":["imported","applied"],"properties":{"imported":{"minimum":0,"type":"integer"},"applied":{"description":"`now`: set over CDP in the running browser; `next_start`: queued on disk.","anyOf":[{"type":"string","enum":["now"]},{"type":"string","enum":["next_start"]}]}}}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"409":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"423":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"502":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"503":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}},"get":{"summary":"Export cookies","tags":["cookies"],"description":"`id` is the profile UUID or its exact name. Reads the running browser over CDP; 409 `profile.not_running` otherwise (v1 does not launch a hidden browser for exports). `json` is the Cookie-Editor shape, `netscape` is cookies.txt. Sync-mapped profiles require fresh cloud membership (owner, manager or operator) and folder-scoped visibility before CDP access; starter or missing membership/visibility returns 403 `team.forbidden`. Offline, unavailable or malformed authorization evidence fails closed (503). Session/workspace or mapping changes during export reject the result (409). Unmapped local profiles retain their existing export behavior.","parameters":[{"schema":{"default":"json","anyOf":[{"type":"string","enum":["json"]},{"type":"string","enum":["netscape"]}]},"in":"query","name":"format","required":false},{"schema":{"minLength":1,"maxLength":120,"type":"string"},"in":"path","name":"id","required":true,"description":"Profile id (UUID) or exact profile name."}],"responses":{"200":{"description":"Serialized cookies in the requested format.","content":{"application/json":{"schema":{"type":"array","items":{"type":"object"}}},"text/plain":{"schema":{"type":"string"}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"409":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"502":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"503":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}},"delete":{"summary":"Clear cookies","tags":["cookies"],"description":"`id` is the profile UUID or its exact name. Running profile: clears every cookie in the browser. Stopped profile: discards a queued import; 409 `profile.not_running` when nothing was queued. Sync-mapped profiles require the same fresh cloud membership (owner, manager or operator) and folder-scoped visibility as cookie export, before CDP access, pending-cookie changes or dirty-state bookkeeping. Starter or missing membership/visibility returns 403 `team.forbidden`. Offline, unavailable or malformed authorization evidence fails closed (503); cloud rate limits return 429. There is no cached-role or offline-grace fallback. Session/workspace, mapping or browser-session changes and conflicting sync operations reject the mutation (409); a locked sync vault returns 423 `sync.locked`. A change detected after browser dispatch cannot undo the command; do not automatically retry an ambiguous mutation. Unmapped local profiles retain their existing cookie behavior. Pending imports are authorized when queued, not reauthorized when applied at launch.","parameters":[{"schema":{"minLength":1,"maxLength":120,"type":"string"},"in":"path","name":"id","required":true,"description":"Profile id (UUID) or exact profile name."}],"responses":{"204":{"description":"Default Response"},"400":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"409":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"423":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"502":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"503":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/v1/sessions":{"get":{"summary":"Running sessions","tags":["sessions"],"description":"Profiles whose DevTools endpoint is up, with their CDP endpoints. Every captured session is authorized sequentially; a denial or changed selection fails the whole request without partial results. Non-null sessions require fresh cloud owner/manager/operator membership and exact mapped remote-profile/folder visibility. Starter or missing permission returns 403 `team.forbidden`; offline, malformed or incomplete evidence fails closed (503), and rate limits return 429. Authorization has a ten-second/100-page per-profile budget, without cached-role or offline-grace fallback. Session/workspace or mapping changes return 409 `licence.session_changed` / `sync.conflict`; browser replacement or changed launch/endpoint fields return 409 `sync.conflict`. Missing authorization infrastructure returns 503 `sync.store_unavailable` even for empty/stopped reads, before profile resolution. Stopped profiles and unmapped sessions need no cloud calls. These reads connect to no CDP socket and perform no browser or profile mutation.","responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"additionalProperties":false,"type":"object","required":["items"],"properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/Session"}}}}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"409":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"503":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/v1/workspaces":{"get":{"summary":"List account workspaces and the daemon session's current workspace","tags":["workspaces"],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"additionalProperties":false,"type":"object","required":["account","current_workspace_id","workspaces"],"properties":{"account":{"additionalProperties":false,"type":"object","required":["id","email"],"properties":{"id":{"format":"uuid","type":"string"},"email":{"type":"string"}}},"current_workspace_id":{"anyOf":[{"format":"uuid","type":"string"},{"type":"null"}]},"workspaces":{"type":"array","items":{"additionalProperties":false,"type":"object","required":["id","name","role","status","plan","seats","seats_extra","period_end","grace_until","created_at","usability"],"properties":{"id":{"format":"uuid","type":"string"},"name":{"type":"string"},"role":{"anyOf":[{"type":"string","enum":["owner"]},{"type":"string","enum":["manager"]},{"type":"string","enum":["operator"]},{"type":"string","enum":["starter"]}]},"status":{"anyOf":[{"type":"string","enum":["active"]},{"type":"string","enum":["past_due"]},{"type":"string","enum":["lapsed"]},{"type":"string","enum":["suspended"]}]},"plan":{"additionalProperties":false,"type":"object","required":["id","name","profiles","seats","features"],"properties":{"id":{"type":"string"},"name":{"type":"string"},"profiles":{"type":"integer"},"seats":{"type":"integer"},"features":{"type":"array","items":{"type":"string"}}}},"seats":{"type":"integer"},"seats_extra":{"type":"integer"},"period_end":{"anyOf":[{"format":"date-time","type":"string"},{"type":"null"}]},"grace_until":{"anyOf":[{"format":"date-time","type":"string"},{"type":"null"}]},"created_at":{"format":"date-time","type":"string"},"usability":{"description":"Selection state visible from the public account projection; lapsed owners require the authoritative cloud switch check.","anyOf":[{"type":"string","enum":["usable"]},{"type":"string","enum":["unusable"]},{"type":"string","enum":["requires_cloud_check"]}]}}}}}}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"502":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"503":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/v1/workspaces/current":{"post":{"summary":"Switch the daemon's persisted cloud session workspace","tags":["workspaces"],"description":"Serializes with session adoption and token refresh, preserves the refresh token, and refreshes workspace-scoped licence state.","requestBody":{"required":true,"content":{"application/json":{"schema":{"additionalProperties":false,"type":"object","required":["workspace_id"],"properties":{"workspace_id":{"format":"uuid","type":"string"}}}}}},"responses":{"200":{"description":"What the daemon knows about its licence: the response of GET /v1/licence and of every licence mutation. Never carries tokens.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LicenceState"}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"409":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"502":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"503":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/v1/sync/status":{"get":{"tags":["sync"],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"additionalProperties":false,"type":"object","required":["workspace_id","mode","key","mapped_local_profile_ids","profiles"],"properties":{"workspace_id":{"format":"uuid","type":"string"},"mode":{"anyOf":[{"type":"string","enum":["read_write"]},{"type":"string","enum":["retained_read_only"]},{"type":"string","enum":["disabled"]}]},"key":{"$ref":"#/components/schemas/LocalSyncKeyState"},"mapped_local_profile_ids":{"type":"array","items":{"format":"uuid","type":"string"}},"profiles":{"type":"array","items":{"$ref":"#/components/schemas/LocalSyncMapping"}}}}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"409":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"423":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"503":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/v1/sync/profiles/remote":{"get":{"tags":["sync"],"parameters":[{"schema":{"minLength":1,"maxLength":256,"pattern":"^[A-Za-z0-9_-]+$","type":"string"},"in":"query","name":"cursor","required":false}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"additionalProperties":false,"type":"object","required":["items","next_cursor"],"properties":{"items":{"type":"array","items":{"additionalProperties":false,"type":"object","required":["profile_id","name","folder_id","metadata_version","current_revision","lease"],"properties":{"profile_id":{"format":"uuid","type":"string"},"name":{"minLength":1,"maxLength":120,"type":"string"},"folder_id":{"anyOf":[{"format":"uuid","type":"string"},{"type":"null"}]},"metadata_version":{"minimum":1,"maximum":9007199254740991,"type":"integer"},"current_revision":{"anyOf":[{"additionalProperties":false,"type":"object","required":["id","profile_id","revision_no","base_revision_id","key_version","bundle_id","ciphertext_size","ciphertext_sha256","header_sha256","configuration_commitment","created_at"],"properties":{"id":{"format":"uuid","type":"string"},"profile_id":{"format":"uuid","type":"string"},"revision_no":{"minimum":1,"maximum":9007199254740991,"type":"integer"},"base_revision_id":{"anyOf":[{"format":"uuid","type":"string"},{"type":"null"}]},"key_version":{"minimum":1,"maximum":9007199254740991,"type":"integer"},"bundle_id":{"format":"uuid","type":"string"},"ciphertext_size":{"minimum":1,"maximum":200000000,"type":"integer"},"ciphertext_sha256":{"pattern":"^[0-9a-f]{64}$","type":"string"},"header_sha256":{"pattern":"^[0-9a-f]{64}$","type":"string"},"configuration_commitment":{"pattern":"^[A-Za-z0-9_-]{43}$","type":"string"},"created_at":{"format":"date-time","type":"string"}}},{"type":"null"}]},"lease":{"anyOf":[{"additionalProperties":false,"type":"object","required":["lease_id","holder_user_id","holder_email","holder_device_id","device_label","fencing_token","expires_at"],"properties":{"lease_id":{"format":"uuid","type":"string"},"holder_user_id":{"format":"uuid","type":"string"},"holder_email":{"format":"email","type":"string"},"holder_device_id":{"pattern":"^[A-Z2-7]{26}$","type":"string"},"device_label":{"minLength":1,"maxLength":80,"type":"string"},"fencing_token":{"minimum":1,"maximum":9007199254740991,"type":"integer"},"expires_at":{"format":"date-time","type":"string"}}},{"type":"null"}]}}}},"next_cursor":{"anyOf":[{"type":"string"},{"type":"null"}]}}}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"409":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"423":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"503":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/v1/sync/profiles/remote/{profile}/materialize":{"post":{"tags":["sync"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"additionalProperties":false,"type":"object","required":["expected_revision_id"],"properties":{"expected_revision_id":{"format":"uuid","type":"string"},"local_name":{"minLength":1,"maxLength":120,"pattern":".*\\S.*","type":"string"}}}}}},"parameters":[{"schema":{"format":"uuid","type":"string"},"in":"path","name":"profile","required":true}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"additionalProperties":false,"type":"object","required":["mapping"],"properties":{"mapping":{"$ref":"#/components/schemas/LocalSyncMapping"}}}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"409":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"423":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"503":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/v1/sync/profiles/{local}/enroll":{"post":{"tags":["sync"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"additionalProperties":false,"type":"object","required":["folder_id","sync_indexeddb"],"properties":{"folder_id":{"anyOf":[{"format":"uuid","type":"string"},{"type":"null"}]},"sync_indexeddb":{"type":"boolean"}}}}}},"parameters":[{"schema":{"format":"uuid","type":"string"},"in":"path","name":"local","required":true}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"additionalProperties":false,"type":"object","required":["mapping"],"properties":{"mapping":{"$ref":"#/components/schemas/LocalSyncMapping"}}}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"409":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"423":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"503":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/v1/profiles/{id}/promote":{"post":{"tags":["sync"],"description":"Publish an inherited child independently. Exact retries resume its durable promotion; receipts are historical, not run authorization.","requestBody":{"required":true,"content":{"application/json":{"schema":{"additionalProperties":false,"type":"object","required":["folder_id"],"properties":{"folder_id":{"anyOf":[{"format":"uuid","type":"string"},{"type":"null"}]},"name":{"minLength":1,"maxLength":120,"type":"string"}}}}}},"parameters":[{"schema":{"format":"uuid","type":"string"},"in":"path","name":"id","required":true}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"additionalProperties":false,"type":"object","required":["receipt"],"properties":{"receipt":{"additionalProperties":false,"type":"object","required":["schema","promotion_id","workspace_id","child_profile_id","actor_user_id","device_id","request_sha256","source","authority","child_revision_id","child_metadata_version","committed_at"],"properties":{"schema":{"type":"string","enum":["ant0-copy-promotion/v1"]},"promotion_id":{"format":"uuid","type":"string"},"workspace_id":{"format":"uuid","type":"string"},"child_profile_id":{"format":"uuid","type":"string"},"actor_user_id":{"format":"uuid","type":"string"},"device_id":{"pattern":"^[A-Z2-7]{26}$","type":"string"},"request_sha256":{"pattern":"^[0-9a-f]{64}$","type":"string"},"source":{"additionalProperties":false,"type":"object","required":["kind","workspace_id","profile_id","folder_id"],"properties":{"kind":{"anyOf":[{"type":"string","enum":["sync"]},{"type":"string","enum":["claim"]}]},"workspace_id":{"format":"uuid","type":"string"},"profile_id":{"format":"uuid","type":"string"},"folder_id":{"anyOf":[{"format":"uuid","type":"string"},{"type":"null"}]}}},"authority":{"additionalProperties":false,"type":"object","required":["kind","workspace_id","profile_id","folder_id"],"properties":{"kind":{"type":"string","enum":["sync"]},"workspace_id":{"format":"uuid","type":"string"},"profile_id":{"format":"uuid","type":"string"},"folder_id":{"anyOf":[{"format":"uuid","type":"string"},{"type":"null"}]}}},"child_revision_id":{"format":"uuid","type":"string"},"child_metadata_version":{"minimum":1,"maximum":9007199254740991,"type":"integer"},"committed_at":{"format":"date-time","type":"string"}}}}}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"409":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"423":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"503":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/v1/sync/profiles/{local}/pull":{"post":{"tags":["sync"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"additionalProperties":false,"type":"object","required":["force"],"properties":{"force":{"type":"boolean","enum":[false]}}}}}},"parameters":[{"schema":{"format":"uuid","type":"string"},"in":"path","name":"local","required":true}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"additionalProperties":false,"type":"object","required":["mapping"],"properties":{"mapping":{"$ref":"#/components/schemas/LocalSyncMapping"}}}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"409":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"423":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"503":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/v1/sync/profiles/{local}/push":{"post":{"tags":["sync"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"additionalProperties":false,"type":"object","properties":{}}}}},"parameters":[{"schema":{"format":"uuid","type":"string"},"in":"path","name":"local","required":true}],"responses":{"202":{"description":"Default Response","content":{"application/json":{"schema":{"additionalProperties":false,"type":"object","required":["queue_id","captured_change_seq","mapping"],"properties":{"queue_id":{"format":"uuid","type":"string"},"captured_change_seq":{"minimum":0,"maximum":9007199254740991,"type":"integer"},"mapping":{"$ref":"#/components/schemas/LocalSyncMapping"}}}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"409":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"423":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"503":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/v1/sync/profiles/{local}/disable":{"post":{"tags":["sync"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"additionalProperties":false,"type":"object","required":["mode","expected_metadata_version"],"properties":{"mode":{"anyOf":[{"type":"string","enum":["local_only"]},{"type":"string","enum":["permanent_remote"]}]},"expected_metadata_version":{"anyOf":[{"minimum":1,"maximum":9007199254740991,"type":"integer"},{"type":"null"}]}}}}}},"parameters":[{"schema":{"format":"uuid","type":"string"},"in":"path","name":"local","required":true}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"additionalProperties":false,"type":"object","required":["mapping"],"properties":{"mapping":{"anyOf":[{"$ref":"#/components/schemas/LocalSyncMapping"},{"type":"null"}]}}}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"409":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"423":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"503":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/v1/sync/conflicts":{"get":{"tags":["sync"],"parameters":[{"schema":{"minLength":1,"maxLength":256,"pattern":"^[A-Za-z0-9_-]+$","type":"string"},"in":"query","name":"cursor","required":false}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"additionalProperties":false,"type":"object","required":["items","next_cursor"],"properties":{"items":{"type":"array","items":{"additionalProperties":false,"type":"object","required":["local_profile_id","source_profile_id","source_revision_id","reason","pending_claim"],"properties":{"local_profile_id":{"format":"uuid","type":"string"},"source_profile_id":{"format":"uuid","type":"string"},"source_revision_id":{"format":"uuid","type":"string"},"reason":{"anyOf":[{"type":"string","enum":["offline_launch"]},{"type":"string","enum":["lease_lost"]},{"type":"string","enum":["cas_lost"]},{"type":"string","enum":["migration_running"]}]},"pending_claim":{"type":"boolean"}}}},"next_cursor":{"anyOf":[{"type":"string"},{"type":"null"}]}}}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"409":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"423":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"503":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/v1/sync/conflicts/{local}/resolve":{"post":{"tags":["sync"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"additionalProperties":false,"type":"object","required":["action"],"properties":{"action":{"anyOf":[{"type":"string","enum":["rebase"]},{"type":"string","enum":["keep_both"]},{"type":"string","enum":["discard"]}]},"destination_name":{"minLength":1,"maxLength":120,"type":"string"}}}}}},"parameters":[{"schema":{"format":"uuid","type":"string"},"in":"path","name":"local","required":true}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"additionalProperties":false,"type":"object","required":["state","mapping"],"properties":{"state":{"anyOf":[{"type":"string","enum":["resolved"]},{"type":"string","enum":["conflict"]}]},"mapping":{"anyOf":[{"$ref":"#/components/schemas/LocalSyncMapping"},{"type":"null"}]}}}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"409":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"423":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"503":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/v1/sync/keys/setup":{"post":{"summary":"Set up workspace sync keys (native secret route)","tags":["sync"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"additionalProperties":false,"type":"object","required":["recovery_code"],"properties":{"recovery_code":{"minLength":52,"maxLength":64,"type":"string"}}}}}},"x-ant0-secret-route":true,"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"additionalProperties":false,"type":"object","required":["key"],"properties":{"key":{"$ref":"#/components/schemas/LocalSyncKeyState"}}}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"409":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"423":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"503":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/v1/sync/keys/lock":{"post":{"summary":"Lock local sync keys (native secret route)","tags":["sync"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"additionalProperties":false,"type":"object","properties":{}}}}},"x-ant0-secret-route":true,"responses":{"204":{"description":"Default Response"},"400":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"409":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"423":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"503":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/v1/sync/keys/recipients":{"get":{"tags":["sync"],"parameters":[{"schema":{"minLength":1,"maxLength":256,"pattern":"^[A-Za-z0-9_-]+$","type":"string"},"in":"query","name":"cursor","required":false}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"additionalProperties":false,"type":"object","required":["items","next_cursor"],"properties":{"items":{"type":"array","items":{"additionalProperties":false,"type":"object","required":["device_id","kx_pub","recipient_kx_fingerprint","key_state"],"properties":{"device_id":{"pattern":"^[A-Z2-7]{26}$","type":"string"},"kx_pub":{"pattern":"^[A-Za-z0-9_-]{43}$","type":"string"},"recipient_kx_fingerprint":{"pattern":"^[0-9a-f]{64}$","type":"string"},"key_state":{"anyOf":[{"type":"string","enum":["ready"]},{"type":"string","enum":["pending_key"]},{"type":"string","enum":["pending_confirmation"]}]}}}},"next_cursor":{"anyOf":[{"type":"string"},{"type":"null"}]}}}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"409":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"423":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"503":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/v1/sync/keys/enroll":{"post":{"tags":["sync"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"additionalProperties":false,"type":"object","required":["device_id"],"properties":{"device_id":{"pattern":"^[A-Z2-7]{26}$","type":"string"}}}}}},"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"additionalProperties":false,"type":"object","required":["key_state"],"properties":{"key_state":{"type":"string","enum":["pending_confirmation"]}}}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"409":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"423":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"503":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/v1/sync/keys/confirm":{"post":{"tags":["sync"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"additionalProperties":false,"type":"object","properties":{}}}}},"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"additionalProperties":false,"type":"object","required":["key"],"properties":{"key":{"$ref":"#/components/schemas/LocalSyncKeyState"}}}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"409":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"423":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"503":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/v1/sync/keys/recover":{"post":{"summary":"Recover workspace sync keys (native secret route)","tags":["sync"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"additionalProperties":false,"type":"object","required":["recovery_code","replacement_recovery_code"],"properties":{"recovery_code":{"minLength":52,"maxLength":64,"type":"string"},"replacement_recovery_code":{"minLength":52,"maxLength":64,"type":"string"}}}}}},"x-ant0-secret-route":true,"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"additionalProperties":false,"type":"object","required":["key"],"properties":{"key":{"$ref":"#/components/schemas/LocalSyncKeyState"}}}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"409":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"423":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"503":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/v1/sync/transfers":{"post":{"tags":["sync"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"additionalProperties":false,"type":"object","required":["local_profile_id","destination_workspace_id","destination_folder_id","destination_name"],"properties":{"local_profile_id":{"format":"uuid","type":"string"},"destination_workspace_id":{"format":"uuid","type":"string"},"destination_folder_id":{"anyOf":[{"format":"uuid","type":"string"},{"type":"null"}]},"destination_name":{"minLength":1,"maxLength":120,"pattern":".*\\S.*","type":"string"}}}}}},"responses":{"202":{"description":"Default Response","content":{"application/json":{"schema":{"additionalProperties":false,"type":"object","required":["transfer_id","state","expires_at"],"properties":{"transfer_id":{"format":"uuid","type":"string"},"state":{"anyOf":[{"type":"string","enum":["pending_upload"]},{"type":"string","enum":["ready"]},{"type":"string","enum":["accepting"]},{"type":"string","enum":["aborting"]},{"type":"string","enum":["accepted"]},{"type":"string","enum":["aborted"]},{"type":"string","enum":["expired"]},{"type":"string","enum":["error"]}]},"expires_at":{"format":"date-time","type":"string"}}}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"409":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"423":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"503":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}},"get":{"tags":["sync"],"parameters":[{"schema":{"minLength":1,"maxLength":256,"pattern":"^[A-Za-z0-9_-]+$","type":"string"},"in":"query","name":"cursor","required":false}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"additionalProperties":false,"type":"object","required":["items","next_cursor"],"properties":{"items":{"type":"array","items":{"additionalProperties":false,"type":"object","required":["transfer_id","direction","state","source_workspace_id","destination_workspace_id","source_profile_id","source_revision_id","destination_folder_id","destination_name","can_finalize","can_accept","can_abort","expires_at","created_at","updated_at","accepted_at"],"properties":{"transfer_id":{"format":"uuid","type":"string"},"direction":{"anyOf":[{"type":"string","enum":["source"]},{"type":"string","enum":["destination"]},{"type":"string","enum":["both"]}]},"state":{"anyOf":[{"type":"string","enum":["pending_upload"]},{"type":"string","enum":["ready"]},{"type":"string","enum":["accepted"]},{"type":"string","enum":["aborted"]},{"type":"string","enum":["expired"]}]},"source_workspace_id":{"format":"uuid","type":"string"},"destination_workspace_id":{"format":"uuid","type":"string"},"source_profile_id":{"format":"uuid","type":"string"},"source_revision_id":{"format":"uuid","type":"string"},"destination_folder_id":{"anyOf":[{"format":"uuid","type":"string"},{"type":"null"}]},"destination_name":{"minLength":1,"maxLength":120,"type":"string"},"can_finalize":{"type":"boolean"},"can_accept":{"type":"boolean"},"can_abort":{"type":"boolean"},"expires_at":{"format":"date-time","type":"string"},"created_at":{"format":"date-time","type":"string"},"updated_at":{"format":"date-time","type":"string"},"accepted_at":{"anyOf":[{"format":"date-time","type":"string"},{"type":"null"}]}}}},"next_cursor":{"anyOf":[{"type":"string"},{"type":"null"}]}}}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"409":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"423":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"503":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/v1/sync/transfers/{transfer}":{"get":{"tags":["sync"],"parameters":[{"schema":{"format":"uuid","type":"string"},"in":"path","name":"transfer","required":true}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"additionalProperties":false,"type":"object","required":["transfer_id","state","error_code","expires_at"],"properties":{"transfer_id":{"format":"uuid","type":"string"},"state":{"anyOf":[{"type":"string","enum":["pending_upload"]},{"type":"string","enum":["ready"]},{"type":"string","enum":["accepting"]},{"type":"string","enum":["aborting"]},{"type":"string","enum":["accepted"]},{"type":"string","enum":["aborted"]},{"type":"string","enum":["expired"]},{"type":"string","enum":["error"]}]},"error_code":{"anyOf":[{"type":"string"},{"type":"null"}]},"expires_at":{"format":"date-time","type":"string"}}}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"409":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"423":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"503":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/v1/sync/transfers/{transfer}/accept":{"post":{"tags":["sync"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"additionalProperties":false,"type":"object","properties":{}}}}},"parameters":[{"schema":{"format":"uuid","type":"string"},"in":"path","name":"transfer","required":true}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"additionalProperties":false,"type":"object","required":["source_deleted","mapping"],"properties":{"source_deleted":{"type":"boolean","enum":[true]},"mapping":{"$ref":"#/components/schemas/LocalSyncMapping"}}}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"409":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"423":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"503":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/v1/sync/transfers/{transfer}/abort":{"post":{"tags":["sync"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"additionalProperties":false,"type":"object","properties":{}}}}},"parameters":[{"schema":{"format":"uuid","type":"string"},"in":"path","name":"transfer","required":true}],"responses":{"204":{"description":"Default Response"},"400":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"409":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"423":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"503":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/v1/team/folders":{"get":{"tags":["team"],"parameters":[{"schema":{"minLength":1,"maxLength":256,"pattern":"^[A-Za-z0-9_-]+$","type":"string"},"in":"query","name":"cursor","required":false}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"additionalProperties":false,"type":"object","required":["items","next_cursor"],"properties":{"items":{"type":"array","items":{"additionalProperties":false,"type":"object","required":["id","name","metadata_version","created_at","updated_at"],"properties":{"id":{"format":"uuid","type":"string"},"name":{"minLength":1,"maxLength":120,"pattern":".*\\S.*","type":"string"},"metadata_version":{"minimum":1,"maximum":9007199254740991,"type":"integer"},"created_at":{"format":"date-time","type":"string"},"updated_at":{"format":"date-time","type":"string"}}}},"next_cursor":{"anyOf":[{"type":"string"},{"type":"null"}]}}}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"409":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"410":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"423":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"503":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}},"post":{"tags":["team"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"additionalProperties":false,"type":"object","required":["name"],"properties":{"name":{"minLength":1,"maxLength":120,"pattern":".*\\S.*","type":"string"}}}}}},"parameters":[{"schema":{"format":"uuid","type":"string"},"in":"header","name":"idempotency-key","required":true}],"responses":{"201":{"description":"Default Response","content":{"application/json":{"schema":{"additionalProperties":false,"type":"object","required":["folder"],"properties":{"folder":{"additionalProperties":false,"type":"object","required":["id","name","metadata_version","created_at","updated_at"],"properties":{"id":{"format":"uuid","type":"string"},"name":{"minLength":1,"maxLength":120,"pattern":".*\\S.*","type":"string"},"metadata_version":{"minimum":1,"maximum":9007199254740991,"type":"integer"},"created_at":{"format":"date-time","type":"string"},"updated_at":{"format":"date-time","type":"string"}}}}}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"409":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"410":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"423":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"503":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/v1/team/folders/{id}":{"patch":{"tags":["team"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"additionalProperties":false,"type":"object","required":["expected_metadata_version","name"],"properties":{"expected_metadata_version":{"minimum":1,"maximum":9007199254740991,"type":"integer"},"name":{"minLength":1,"maxLength":120,"pattern":".*\\S.*","type":"string"}}}}}},"parameters":[{"schema":{"format":"uuid","type":"string"},"in":"path","name":"id","required":true},{"schema":{"format":"uuid","type":"string"},"in":"header","name":"idempotency-key","required":true}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"additionalProperties":false,"type":"object","required":["folder"],"properties":{"folder":{"additionalProperties":false,"type":"object","required":["id","name","metadata_version","created_at","updated_at"],"properties":{"id":{"format":"uuid","type":"string"},"name":{"minLength":1,"maxLength":120,"pattern":".*\\S.*","type":"string"},"metadata_version":{"minimum":1,"maximum":9007199254740991,"type":"integer"},"created_at":{"format":"date-time","type":"string"},"updated_at":{"format":"date-time","type":"string"}}}}}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"409":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"410":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"423":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"503":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}},"delete":{"tags":["team"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"additionalProperties":false,"type":"object","required":["expected_metadata_version","move_profiles_to"],"properties":{"expected_metadata_version":{"minimum":1,"maximum":9007199254740991,"type":"integer"},"move_profiles_to":{"anyOf":[{"format":"uuid","type":"string"},{"type":"null"}]}}}}}},"parameters":[{"schema":{"format":"uuid","type":"string"},"in":"path","name":"id","required":true},{"schema":{"format":"uuid","type":"string"},"in":"header","name":"idempotency-key","required":true}],"responses":{"204":{"description":"Default Response"},"400":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"409":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"410":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"423":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"503":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/v1/team/members":{"get":{"tags":["team"],"parameters":[{"schema":{"minLength":1,"maxLength":256,"pattern":"^[A-Za-z0-9_-]+$","type":"string"},"in":"query","name":"cursor","required":false}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"additionalProperties":false,"type":"object","required":["items","next_cursor"],"properties":{"items":{"type":"array","items":{"additionalProperties":false,"type":"object","required":["user_id","email","role","state","folder_ids","key_state","accepted_at"],"properties":{"user_id":{"format":"uuid","type":"string"},"email":{"format":"email","type":"string"},"role":{"anyOf":[{"type":"string","enum":["owner"]},{"anyOf":[{"type":"string","enum":["manager"]},{"type":"string","enum":["operator"]},{"type":"string","enum":["starter"]}]}]},"state":{"anyOf":[{"type":"string","enum":["active"]},{"type":"string","enum":["retention_disabled"]}]},"folder_ids":{"maxItems":1000,"uniqueItems":true,"type":"array","items":{"format":"uuid","type":"string"}},"key_state":{"anyOf":[{"type":"string","enum":["ready"]},{"type":"string","enum":["pending_key"]},{"type":"string","enum":["pending_confirmation"]},{"type":"string","enum":["disabled"]}]},"accepted_at":{"format":"date-time","type":"string"}}}},"next_cursor":{"anyOf":[{"type":"string"},{"type":"null"}]}}}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"409":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"410":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"423":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"503":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/v1/team/members/{id}":{"patch":{"tags":["team"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"additionalProperties":false,"type":"object","required":["role","folder_ids"],"properties":{"role":{"anyOf":[{"type":"string","enum":["manager"]},{"type":"string","enum":["operator"]},{"type":"string","enum":["starter"]}]},"folder_ids":{"maxItems":1000,"uniqueItems":true,"type":"array","items":{"format":"uuid","type":"string"}}}}}}},"parameters":[{"schema":{"format":"uuid","type":"string"},"in":"path","name":"id","required":true},{"schema":{"format":"uuid","type":"string"},"in":"header","name":"idempotency-key","required":true}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"additionalProperties":false,"type":"object","required":["member"],"properties":{"member":{"additionalProperties":false,"type":"object","required":["user_id","email","role","state","folder_ids","key_state","accepted_at"],"properties":{"user_id":{"format":"uuid","type":"string"},"email":{"format":"email","type":"string"},"role":{"anyOf":[{"type":"string","enum":["owner"]},{"anyOf":[{"type":"string","enum":["manager"]},{"type":"string","enum":["operator"]},{"type":"string","enum":["starter"]}]}]},"state":{"anyOf":[{"type":"string","enum":["active"]},{"type":"string","enum":["retention_disabled"]}]},"folder_ids":{"maxItems":1000,"uniqueItems":true,"type":"array","items":{"format":"uuid","type":"string"}},"key_state":{"anyOf":[{"type":"string","enum":["ready"]},{"type":"string","enum":["pending_key"]},{"type":"string","enum":["pending_confirmation"]},{"type":"string","enum":["disabled"]}]},"accepted_at":{"format":"date-time","type":"string"}}}}}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"409":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"410":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"423":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"503":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}},"delete":{"tags":["team"],"parameters":[{"schema":{"format":"uuid","type":"string"},"in":"path","name":"id","required":true},{"schema":{"format":"uuid","type":"string"},"in":"header","name":"idempotency-key","required":true}],"responses":{"204":{"description":"Default Response"},"400":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"409":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"410":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"423":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"503":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/v1/team/invites":{"get":{"tags":["team"],"parameters":[{"schema":{"minLength":1,"maxLength":256,"pattern":"^[A-Za-z0-9_-]+$","type":"string"},"in":"query","name":"cursor","required":false}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"additionalProperties":false,"type":"object","required":["items","next_cursor"],"properties":{"items":{"type":"array","items":{"additionalProperties":false,"type":"object","required":["id","email","role","folder_ids","state","expires_at","created_at"],"properties":{"id":{"format":"uuid","type":"string"},"email":{"format":"email","type":"string"},"role":{"anyOf":[{"type":"string","enum":["manager"]},{"type":"string","enum":["operator"]},{"type":"string","enum":["starter"]}]},"folder_ids":{"maxItems":1000,"uniqueItems":true,"type":"array","items":{"format":"uuid","type":"string"}},"state":{"anyOf":[{"type":"string","enum":["pending"]},{"type":"string","enum":["accepted"]},{"type":"string","enum":["revoked"]},{"type":"string","enum":["expired"]}]},"expires_at":{"format":"date-time","type":"string"},"created_at":{"format":"date-time","type":"string"}}}},"next_cursor":{"anyOf":[{"type":"string"},{"type":"null"}]}}}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"409":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"410":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"423":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"503":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}},"post":{"tags":["team"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"additionalProperties":false,"type":"object","required":["email","role","folder_ids"],"properties":{"email":{"format":"email","type":"string"},"role":{"anyOf":[{"type":"string","enum":["manager"]},{"type":"string","enum":["operator"]},{"type":"string","enum":["starter"]}]},"folder_ids":{"maxItems":1000,"uniqueItems":true,"type":"array","items":{"format":"uuid","type":"string"}}}}}}},"parameters":[{"schema":{"format":"uuid","type":"string"},"in":"header","name":"idempotency-key","required":true}],"responses":{"201":{"description":"Default Response","content":{"application/json":{"schema":{"additionalProperties":false,"type":"object","required":["invite"],"properties":{"invite":{"additionalProperties":false,"type":"object","required":["id","email","role","folder_ids","state","expires_at","created_at"],"properties":{"id":{"format":"uuid","type":"string"},"email":{"format":"email","type":"string"},"role":{"anyOf":[{"type":"string","enum":["manager"]},{"type":"string","enum":["operator"]},{"type":"string","enum":["starter"]}]},"folder_ids":{"maxItems":1000,"uniqueItems":true,"type":"array","items":{"format":"uuid","type":"string"}},"state":{"anyOf":[{"type":"string","enum":["pending"]},{"type":"string","enum":["accepted"]},{"type":"string","enum":["revoked"]},{"type":"string","enum":["expired"]}]},"expires_at":{"format":"date-time","type":"string"},"created_at":{"format":"date-time","type":"string"}}}}}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"409":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"410":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"423":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"503":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/v1/team/invites/{id}/revoke":{"post":{"tags":["team"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"additionalProperties":false,"type":"object","properties":{}}}}},"parameters":[{"schema":{"format":"uuid","type":"string"},"in":"path","name":"id","required":true},{"schema":{"format":"uuid","type":"string"},"in":"header","name":"idempotency-key","required":true}],"responses":{"204":{"description":"Default Response"},"400":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"409":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"410":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"423":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"503":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/v1/team/invites/accept":{"post":{"tags":["team"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"additionalProperties":false,"type":"object","required":["token"],"properties":{"token":{"minLength":43,"maxLength":43,"pattern":"^[A-Za-z0-9_-]{43}$","type":"string"}}}}}},"parameters":[{"schema":{"format":"uuid","type":"string"},"in":"header","name":"idempotency-key","required":true}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"additionalProperties":false,"type":"object","required":["workspace_id","member","key_state"],"properties":{"workspace_id":{"format":"uuid","type":"string"},"member":{"additionalProperties":false,"type":"object","required":["user_id","email","role","state","folder_ids","key_state","accepted_at"],"properties":{"user_id":{"format":"uuid","type":"string"},"email":{"format":"email","type":"string"},"role":{"anyOf":[{"type":"string","enum":["owner"]},{"anyOf":[{"type":"string","enum":["manager"]},{"type":"string","enum":["operator"]},{"type":"string","enum":["starter"]}]}]},"state":{"anyOf":[{"type":"string","enum":["active"]},{"type":"string","enum":["retention_disabled"]}]},"folder_ids":{"maxItems":1000,"uniqueItems":true,"type":"array","items":{"format":"uuid","type":"string"}},"key_state":{"anyOf":[{"type":"string","enum":["ready"]},{"type":"string","enum":["pending_key"]},{"type":"string","enum":["pending_confirmation"]},{"type":"string","enum":["disabled"]}]},"accepted_at":{"format":"date-time","type":"string"}}},"key_state":{"type":"string","enum":["pending_key"]}}}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"409":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"410":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"423":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"503":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/v1/team/ownership-transfers":{"post":{"tags":["team"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"additionalProperties":false,"type":"object","required":["target_user_id"],"properties":{"target_user_id":{"format":"uuid","type":"string"}}}}}},"parameters":[{"schema":{"format":"uuid","type":"string"},"in":"header","name":"idempotency-key","required":true}],"responses":{"201":{"description":"Default Response","content":{"application/json":{"schema":{"additionalProperties":false,"type":"object","required":["transfer_id","expires_at"],"properties":{"transfer_id":{"format":"uuid","type":"string"},"expires_at":{"format":"date-time","type":"string"}}}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"409":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"410":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"423":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"503":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/v1/team/ownership-transfers/outgoing":{"get":{"tags":["team"],"parameters":[{"schema":{"minLength":1,"maxLength":256,"pattern":"^[A-Za-z0-9_-]+$","type":"string"},"in":"query","name":"cursor","required":false}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"additionalProperties":false,"type":"object","required":["items","next_cursor"],"properties":{"items":{"type":"array","items":{"additionalProperties":false,"type":"object","required":["transfer_id","workspace_id","workspace_name","from_user_id","to_user_id","state","expires_at","created_at","accepted_at","cancelled_at"],"properties":{"transfer_id":{"format":"uuid","type":"string"},"workspace_id":{"format":"uuid","type":"string"},"workspace_name":{"minLength":1,"maxLength":120,"pattern":".*\\S.*","type":"string"},"from_user_id":{"format":"uuid","type":"string"},"to_user_id":{"format":"uuid","type":"string"},"state":{"anyOf":[{"type":"string","enum":["pending"]},{"type":"string","enum":["accepted"]},{"type":"string","enum":["cancelled"]},{"type":"string","enum":["expired"]}]},"expires_at":{"format":"date-time","type":"string"},"created_at":{"format":"date-time","type":"string"},"accepted_at":{"anyOf":[{"format":"date-time","type":"string"},{"type":"null"}]},"cancelled_at":{"anyOf":[{"format":"date-time","type":"string"},{"type":"null"}]}}}},"next_cursor":{"anyOf":[{"type":"string"},{"type":"null"}]}}}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"409":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"410":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"423":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"503":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/v1/team/ownership-transfers/incoming":{"get":{"tags":["team"],"parameters":[{"schema":{"minLength":1,"maxLength":256,"pattern":"^[A-Za-z0-9_-]+$","type":"string"},"in":"query","name":"cursor","required":false}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"additionalProperties":false,"type":"object","required":["items","next_cursor"],"properties":{"items":{"type":"array","items":{"additionalProperties":false,"type":"object","required":["transfer_id","workspace_id","workspace_name","from_user_id","to_user_id","state","expires_at","created_at","accepted_at","cancelled_at"],"properties":{"transfer_id":{"format":"uuid","type":"string"},"workspace_id":{"format":"uuid","type":"string"},"workspace_name":{"minLength":1,"maxLength":120,"pattern":".*\\S.*","type":"string"},"from_user_id":{"format":"uuid","type":"string"},"to_user_id":{"format":"uuid","type":"string"},"state":{"anyOf":[{"type":"string","enum":["pending"]},{"type":"string","enum":["accepted"]},{"type":"string","enum":["cancelled"]},{"type":"string","enum":["expired"]}]},"expires_at":{"format":"date-time","type":"string"},"created_at":{"format":"date-time","type":"string"},"accepted_at":{"anyOf":[{"format":"date-time","type":"string"},{"type":"null"}]},"cancelled_at":{"anyOf":[{"format":"date-time","type":"string"},{"type":"null"}]}}}},"next_cursor":{"anyOf":[{"type":"string"},{"type":"null"}]}}}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"409":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"410":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"423":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"503":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/v1/team/ownership-transfers/accept":{"post":{"summary":"Accept ownership transfer (native secret route)","tags":["team"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"additionalProperties":false,"type":"object","required":["token","expected_workspace_id"],"properties":{"token":{"minLength":43,"maxLength":43,"pattern":"^[A-Za-z0-9_-]{43}$","type":"string"},"expected_workspace_id":{"format":"uuid","type":"string"}}}}}},"parameters":[{"schema":{"format":"uuid","type":"string"},"in":"header","name":"idempotency-key","required":true}],"x-ant0-secret-route":true,"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"additionalProperties":false,"type":"object","required":["workspace_id","owner_user_id","recovery_code"],"properties":{"workspace_id":{"format":"uuid","type":"string"},"owner_user_id":{"format":"uuid","type":"string"},"recovery_code":{"minLength":64,"maxLength":64,"pattern":"^[A-Z2-7]{4}(?:-[A-Z2-7]{4}){12}$","type":"string"}}}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"409":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"410":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"423":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"503":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}},"get":{"summary":"Retrieve confirmed ownership recovery (native secret route)","tags":["team"],"parameters":[{"schema":{"format":"uuid","type":"string"},"in":"header","name":"idempotency-key","required":true}],"x-ant0-secret-route":true,"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"additionalProperties":false,"type":"object","required":["workspace_id","owner_user_id","recovery_code"],"properties":{"workspace_id":{"format":"uuid","type":"string"},"owner_user_id":{"format":"uuid","type":"string"},"recovery_code":{"minLength":64,"maxLength":64,"pattern":"^[A-Z2-7]{4}(?:-[A-Z2-7]{4}){12}$","type":"string"}}}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"409":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"410":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"423":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"503":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}},"delete":{"summary":"Acknowledge saved ownership recovery (native secret route)","tags":["team"],"parameters":[{"schema":{"format":"uuid","type":"string"},"in":"header","name":"idempotency-key","required":true}],"x-ant0-secret-route":true,"responses":{"204":{"description":"Default Response"},"400":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"409":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"410":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"423":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"503":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/v1/team/ownership-transfers/{id}/cancel":{"post":{"tags":["team"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"additionalProperties":false,"type":"object","properties":{}}}}},"parameters":[{"schema":{"format":"uuid","type":"string"},"in":"path","name":"id","required":true},{"schema":{"format":"uuid","type":"string"},"in":"header","name":"idempotency-key","required":true}],"responses":{"204":{"description":"Default Response"},"400":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"409":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"410":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"423":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"503":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/v1/trash":{"get":{"summary":"List trashed profiles","tags":["trash"],"description":"Same ordering, filters and paging as `GET /v1/profiles`; every item carries `deleted_at` and `purge_at` (= `deleted_at` + `trash_retention_days`).","parameters":[{"schema":{"type":"string"},"in":"query","name":"q","required":false,"description":"Case-insensitive substring of the name."},{"schema":{"type":"string"},"in":"query","name":"group","required":false},{"schema":{"type":"string"},"in":"query","name":"tag","required":false},{"schema":{"minimum":1,"maximum":1000,"default":100,"type":"integer"},"in":"query","name":"limit","required":false},{"schema":{"minimum":0,"default":0,"type":"integer"},"in":"query","name":"offset","required":false}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"additionalProperties":false,"type":"object","required":["items","total","trash_retention_days"],"properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/TrashedProfileSummary"}},"total":{"minimum":0,"type":"integer"},"trash_retention_days":{"minimum":1,"description":"Days a trashed profile survives before the hourly sweeper purges it.","type":"integer"}}}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}},"delete":{"summary":"Empty the trash","tags":["trash"],"description":"Purges every trashed profile (row, launch history, user data). Answers how many went.","responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"additionalProperties":false,"type":"object","required":["purged"],"properties":{"purged":{"minimum":0,"type":"integer"}}}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"409":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"423":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"503":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/v1/proxies":{"get":{"summary":"List proxies","tags":["proxies"],"description":"Full proxy documents can contain provider credentials in change_ip_url; passwords remain opaque password_ref values. Every current referencing profile (including trash) is authorized sequentially. Sync-mapped references require fresh owner/manager/operator membership and exact remote-profile/folder visibility, with a ten-second/100-page budget per profile and no cached-role or offline fallback. Denial returns 403 `team.forbidden`; rate limits return 429; unavailable, malformed or incomplete evidence fails closed (503). Authorization infrastructure is required even for empty inventories and unused proxies (503 `sync.store_unavailable`); unused/unmapped references need no cloud calls. Exact reference sets and all captured binding fences are checked before delivery; changes return 409 `sync.conflict` / `licence.session_changed`. Current documents are read synchronously after preflight and fences. Reads do not decrypt passwords, probe/rotate proxies, acquire configuration-mutation locks, dirty profiles, clean transfers or emit mutation events. Authorization covers current manifest references, not historical running-session dependencies; these request-time checks are not an atomic cloud lease or instantaneous revocation. The IDs matching q/tag are snapshotted and every selected proxy is authorized sequentially. The final filtered ID set must match exactly, and all earlier reference/binding fences are rechecked: changed selection returns 409 `sync.conflict`; deletion during preflight may return 404 `proxy.not_found`. No partial success or newly matching unauthorized objects are returned. Current fields and sort order may change if selection and bindings still match.","parameters":[{"schema":{"type":"string"},"in":"query","name":"q","required":false},{"schema":{"type":"string"},"in":"query","name":"tag","required":false}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"additionalProperties":false,"type":"object","required":["items"],"properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/Proxy"}}}}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"409":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"503":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}},"post":{"summary":"Create one proxy, or many from provider lines","tags":["proxies"],"description":"Body is the object form, `{ url }`, `{ line }`, or `{ lines }` (bulk). Single forms answer the created proxy; `{ lines }` answers `{ created, errors }` with 1-based line numbers for rows that failed.","requestBody":{"required":true,"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/ProxyCreate"},{"additionalProperties":false,"description":"`scheme://user:pass@host:port`","type":"object","required":["url"],"properties":{"url":{"minLength":1,"maxLength":2048,"type":"string"}}},{"additionalProperties":false,"description":"Provider export line: `host:port:user:pass`, `scheme://host:port:user:pass`, ...","type":"object","required":["line"],"properties":{"line":{"minLength":1,"maxLength":2048,"type":"string"}}},{"additionalProperties":false,"description":"Bulk: one provider line per row; blank and `#` lines are skipped.","type":"object","required":["lines"],"properties":{"lines":{"minLength":1,"type":"string"}}}]}}}},"responses":{"201":{"description":"Default Response","content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/Proxy"},{"additionalProperties":false,"type":"object","required":["created","errors"],"properties":{"created":{"type":"array","items":{"$ref":"#/components/schemas/Proxy"}},"errors":{"type":"array","items":{"additionalProperties":false,"type":"object","required":["line","message"],"properties":{"line":{"type":"integer"},"message":{"type":"string"}}}}}}]}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/v1/proxies/{id}":{"get":{"summary":"Get a proxy","tags":["proxies"],"description":"Full proxy documents can contain provider credentials in change_ip_url; passwords remain opaque password_ref values. Every current referencing profile (including trash) is authorized sequentially. Sync-mapped references require fresh owner/manager/operator membership and exact remote-profile/folder visibility, with a ten-second/100-page budget per profile and no cached-role or offline fallback. Denial returns 403 `team.forbidden`; rate limits return 429; unavailable, malformed or incomplete evidence fails closed (503). Authorization infrastructure is required even for empty inventories and unused proxies (503 `sync.store_unavailable`); unused/unmapped references need no cloud calls. Exact reference sets and all captured binding fences are checked before delivery; changes return 409 `sync.conflict` / `licence.session_changed`. Current documents are read synchronously after preflight and fences. Reads do not decrypt passwords, probe/rotate proxies, acquire configuration-mutation locks, dirty profiles, clean transfers or emit mutation events. Authorization covers current manifest references, not historical running-session dependencies; these request-time checks are not an atomic cloud lease or instantaneous revocation. With authorization infrastructure present, missing proxies return 404 `proxy.not_found`; otherwise the infrastructure error takes precedence.","parameters":[{"schema":{"format":"uuid","type":"string"},"in":"path","name":"id","required":true}],"responses":{"200":{"description":"Stored proxy document (schema \"ant0-proxy/v1\"). Passwords are never stored inline; password_ref points at the secrets table.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Proxy"}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"409":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"503":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}},"patch":{"summary":"Update a proxy","tags":["proxies"],"description":"`password: string` replaces the stored secret, `null` or `\"\"` removes it, absent keeps it. Server fields (`id`, `password_ref`, `last_check`, timestamps) are not patchable. Every referencing profile (including trash) is authorized sequentially before editing. Sync-mapped references require fresh owner/manager/operator membership and exact remote-profile/folder visibility, with a ten-second/100-page budget per profile and no cached-role or offline-grace fallback. Denial returns 403 `team.forbidden`; cloud rate limits return 429; offline, malformed or incomplete evidence fails closed (503). Authorization infrastructure is required even for unused proxies (503 `sync.store_unavailable`); unused proxies and unmapped references need no cloud calls. Usage or binding changes return 409 `sync.conflict` / `licence.session_changed`. Existing locks apply to every dependent profile: 409 `sync.locked` / `sync.transfer_conflict`, or 423 `sync.locked` for a locked vault. Credentials and dependent profile bookkeeping commit atomically; effects run after commit. A final binding or usage conflict suppresses success without rolling back the committed edit; do not automatically retry an ambiguous edit. Running sessions are not reconfigured.","requestBody":{"required":true,"content":{"application/json":{"schema":{"additionalProperties":false,"type":"object","properties":{"name":{"minLength":1,"maxLength":120,"type":"string"},"type":{"anyOf":[{"type":"string","enum":["http"]},{"type":"string","enum":["https"]},{"type":"string","enum":["socks5"]}]},"host":{"minLength":1,"maxLength":253,"type":"string"},"port":{"minimum":1,"maximum":65535,"type":"integer"},"username":{"maxLength":512,"type":"string"},"password":{"anyOf":[{"maxLength":4096,"type":"string"},{"type":"null"}]},"change_ip_url":{"maxLength":2048,"type":"string"},"session_pattern":{"maxLength":512,"type":"string"},"provider":{"maxLength":80,"type":"string"},"udp":{"type":"boolean"},"tags":{"type":"array","items":{"minLength":1,"maxLength":40,"type":"string"}},"notes":{"maxLength":4000,"type":"string"}}}}}},"parameters":[{"schema":{"format":"uuid","type":"string"},"in":"path","name":"id","required":true}],"responses":{"200":{"description":"Stored proxy document (schema \"ant0-proxy/v1\"). Passwords are never stored inline; password_ref points at the secrets table.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Proxy"}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"409":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"423":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"503":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}},"delete":{"summary":"Delete a proxy","tags":["proxies"],"description":"409 `proxy.in_use` (details.profiles lists the ids) while profiles reference it.","parameters":[{"schema":{"format":"uuid","type":"string"},"in":"path","name":"id","required":true}],"responses":{"204":{"description":"Default Response"},"400":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"409":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/v1/proxies/{id}/check":{"post":{"summary":"Probe the proxy","tags":["proxies"],"description":"TCP reachability followed by exit-IP/geo lookup; SOCKS5 uses a temporary credentialed loopback relay, closed afterwards. Bad proxies return `ok: false` with a safe diagnostic stored as `last_check`; authorization failures remain HTTP errors. Every current referencing profile (including trash) is authorized sequentially. Sync-mapped references require fresh owner/manager/operator membership and exact remote-profile/folder visibility, with a ten-second/100-page budget per profile and no cached-role or offline fallback. Denial returns 403 `team.forbidden`; rate limits return 429; unavailable, malformed or incomplete evidence fails closed (503). Infrastructure is required even for unused proxies (503 `sync.store_unavailable`); unused/unmapped references need no cloud calls. Exact usage and all binding fences are checked before probing, between asynchronous stages and before recording/delivery. Changed bindings or connection configuration return 409 `sync.conflict` / `licence.session_changed`; deletion returns 404. Unrelated current fields are preserved; unchanged concurrent checks record in completion order, with start timestamps. Checks perform no configuration edits, dirty bookkeeping or transfer cleanup and acquire no configuration-mutation locks. Authorization covers current manifest references, not historical running-session dependencies. A pre-record conflict preserves prior diagnostics; a final conflict can suppress delivery after recording. Dispatched traffic cannot be recalled; do not automatically retry ambiguity or assume instantaneous cloud revocation.","parameters":[{"schema":{"format":"uuid","type":"string"},"in":"path","name":"id","required":true}],"responses":{"200":{"description":"Stored proxy document (schema \"ant0-proxy/v1\"). Passwords are never stored inline; password_ref points at the secrets table.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProxyCheck"}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"409":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"503":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/v1/proxies/{id}/change-ip":{"post":{"summary":"Request a new exit IP","tags":["proxies"],"description":"GETs the provider's `change_ip_url` and reports the HTTP status. 400 when the proxy has no `change_ip_url`; 502 `proxy.change_ip_failed` when the request fails. Every current referencing profile (including trash) is authorized sequentially. Sync-mapped references require fresh owner/manager/operator membership and exact remote-profile/folder visibility, with a ten-second/100-page budget per profile and no cached-role or offline-grace fallback. Denial returns 403 `team.forbidden`; cloud rate limits return 429; offline, malformed or incomplete evidence fails closed (503). Authorization infrastructure is required even for unused proxies (503 `sync.store_unavailable`); unused proxies and unmapped references need no cloud calls. Exact usage and all binding fences are checked immediately before dispatch and after awaiting the result; changes return 409 `sync.conflict` / `licence.session_changed`. The current URL is read after preflight. The provider request retains its ten-second timeout and redirect behavior. Rotation performs no local configuration mutation, dirty bookkeeping or transfer cleanup and acquires no configuration-mutation locks. Authorization covers current manifest references, not historical proxy dependencies of already-running sessions; browsers are not restarted or reconfigured. After dispatch, a timeout, transport error or final conflict can suppress success even though the IP was rotated. That external effect cannot be undone; do not automatically retry an ambiguous result. These checks are not an atomic cloud/provider lease or instantaneous revocation.","parameters":[{"schema":{"format":"uuid","type":"string"},"in":"path","name":"id","required":true}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"additionalProperties":false,"type":"object","required":["status"],"properties":{"status":{"description":"HTTP status the provider answered.","type":"integer"}}}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"409":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"502":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"503":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/v1/extensions":{"get":{"summary":"List the extension library","tags":["extensions"],"description":"Every unpacked extension under `<home>/extensions/<id>/` with its manifest data, icon (inline data URL when ≤ 64 KB) and the profiles using it.","responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"additionalProperties":false,"type":"object","required":["items"],"properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/Extension"}}}}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}},"post":{"summary":"Add an extension to the library","tags":["extensions"],"description":"`path` is an absolute local path to an unpacked extension folder (with manifest.json), a `.zip`, or a `.crx`. The extension is copied/extracted into the library. Answers 201 with `existing: false`, or 200 with `existing: true` when the same id is already present. 400 `extension.invalid` for a bad path, archive or manifest.","requestBody":{"required":true,"content":{"application/json":{"schema":{"additionalProperties":false,"type":"object","required":["path"],"properties":{"path":{"minLength":1,"maxLength":4096,"description":"Absolute local path: an unpacked extension folder (with manifest.json), a `.zip`, or a `.crx` (v2/v3).","type":"string"}}}}}},"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"additionalProperties":false,"type":"object","required":["id","name","version","description","manifest_version","icon_path","icon_data_url","path","size_bytes","added_at","used_by","existing"],"properties":{"id":{"description":"Library id: the Web Store id when the manifest has a `key`, else `<slug>-<8 hex>`.","type":"string"},"name":{"type":"string"},"version":{"type":"string"},"description":{"description":"May be empty.","type":"string"},"manifest_version":{"anyOf":[{"type":"number","enum":[2]},{"type":"number","enum":[3]}]},"icon_path":{"description":"Absolute path of the largest manifest icon, or null.","anyOf":[{"type":"string"},{"type":"null"}]},"icon_data_url":{"description":"The icon as a base64 `data:` URL when it is at most 64 KB; else null.","anyOf":[{"type":"string"},{"type":"null"}]},"path":{"description":"Absolute library folder; this is what `launch.extensions` holds.","type":"string"},"size_bytes":{"minimum":0,"type":"integer"},"added_at":{"format":"date-time","type":"string"},"used_by":{"description":"Profiles (live and trashed) whose `launch.extensions` include `path`.","type":"array","items":{"format":"uuid","type":"string"}},"existing":{"description":"True when the library already had this id (nothing was copied).","type":"boolean"}}}}}},"201":{"description":"Default Response","content":{"application/json":{"schema":{"additionalProperties":false,"type":"object","required":["id","name","version","description","manifest_version","icon_path","icon_data_url","path","size_bytes","added_at","used_by","existing"],"properties":{"id":{"description":"Library id: the Web Store id when the manifest has a `key`, else `<slug>-<8 hex>`.","type":"string"},"name":{"type":"string"},"version":{"type":"string"},"description":{"description":"May be empty.","type":"string"},"manifest_version":{"anyOf":[{"type":"number","enum":[2]},{"type":"number","enum":[3]}]},"icon_path":{"description":"Absolute path of the largest manifest icon, or null.","anyOf":[{"type":"string"},{"type":"null"}]},"icon_data_url":{"description":"The icon as a base64 `data:` URL when it is at most 64 KB; else null.","anyOf":[{"type":"string"},{"type":"null"}]},"path":{"description":"Absolute library folder; this is what `launch.extensions` holds.","type":"string"},"size_bytes":{"minimum":0,"type":"integer"},"added_at":{"format":"date-time","type":"string"},"used_by":{"description":"Profiles (live and trashed) whose `launch.extensions` include `path`.","type":"array","items":{"format":"uuid","type":"string"}},"existing":{"description":"True when the library already had this id (nothing was copied).","type":"boolean"}}}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/v1/extensions/{id}":{"get":{"summary":"Get an extension","tags":["extensions"],"parameters":[{"schema":{"pattern":"^[a-z0-9][a-z0-9-]{0,79}$","type":"string"},"in":"path","name":"id","required":true}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Extension"}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}},"delete":{"summary":"Remove an extension from the library","tags":["extensions"],"description":"409 `extension.in_use` (`details.profile_ids`) while profiles reference it; `?force=true` authorizes every referencing profile (including trash) sequentially before removing paths, then reports edits in `updated_profiles`. Sync-mapped profiles require fresh owner/manager/operator membership and exact remote-profile/folder visibility, with a ten-second/100-page budget per profile and no cached-role or offline-grace fallback. Permission denial returns 403 `team.forbidden`; cloud rate limits return 429; offline, malformed or incomplete evidence fails closed (503). Unmapped profiles need no cloud calls. Forced deletion requires authorization infrastructure even without references (503 `sync.store_unavailable`). Usage or binding changes return 409 `sync.conflict` / `licence.session_changed`. Existing mutation locks apply: 409 `sync.locked` / `sync.transfer_conflict`, or 423 `sync.locked` for a locked vault. A pre-deletion failure retains library files but may leave earlier profile edits committed. Filesystem deletion is not transactional. A final binding conflict suppresses success without rolling back edits/deletion; do not automatically retry an ambiguous removal.","parameters":[{"schema":{"default":false,"type":"boolean"},"in":"query","name":"force","required":false,"description":"Also remove the path from every profile's `launch.extensions` instead of answering 409 `extension.in_use`."},{"schema":{"pattern":"^[a-z0-9][a-z0-9-]{0,79}$","type":"string"},"in":"path","name":"id","required":true}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"additionalProperties":false,"type":"object","required":["id","updated_profiles"],"properties":{"id":{"type":"string"},"updated_profiles":{"description":"Profiles whose `launch.extensions` were rewritten (only with `force`).","type":"array","items":{"format":"uuid","type":"string"}}}}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"409":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"423":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"503":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/v1/extensions/{id}/icon":{"get":{"summary":"The extension's largest icon","tags":["extensions"],"description":"Binary image with its content type (png/jpeg/gif/webp/svg/ico). 404 `extension.not_found` when the extension has no icon file.","parameters":[{"schema":{"pattern":"^[a-z0-9][a-z0-9-]{0,79}$","type":"string"},"in":"path","name":"id","required":true}],"responses":{"200":{"description":"Icon bytes","content":{"image/png":{"schema":{"type":"string","format":"binary","description":"Icon bytes"}},"image/jpeg":{"schema":{"type":"string","format":"binary","description":"Icon bytes"}},"image/gif":{"schema":{"type":"string","format":"binary","description":"Icon bytes"}},"image/webp":{"schema":{"type":"string","format":"binary","description":"Icon bytes"}},"image/svg+xml":{"schema":{"type":"string","format":"binary","description":"Icon bytes"}}}},"400":{"description":"Default Response","content":{"image/png":{"schema":{"$ref":"#/components/schemas/ApiError"}},"image/jpeg":{"schema":{"$ref":"#/components/schemas/ApiError"}},"image/gif":{"schema":{"$ref":"#/components/schemas/ApiError"}},"image/webp":{"schema":{"$ref":"#/components/schemas/ApiError"}},"image/svg+xml":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"401":{"description":"Default Response","content":{"image/png":{"schema":{"$ref":"#/components/schemas/ApiError"}},"image/jpeg":{"schema":{"$ref":"#/components/schemas/ApiError"}},"image/gif":{"schema":{"$ref":"#/components/schemas/ApiError"}},"image/webp":{"schema":{"$ref":"#/components/schemas/ApiError"}},"image/svg+xml":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"404":{"description":"Default Response","content":{"image/png":{"schema":{"$ref":"#/components/schemas/ApiError"}},"image/jpeg":{"schema":{"$ref":"#/components/schemas/ApiError"}},"image/gif":{"schema":{"$ref":"#/components/schemas/ApiError"}},"image/webp":{"schema":{"$ref":"#/components/schemas/ApiError"}},"image/svg+xml":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/v1/licence":{"get":{"summary":"Licence state","tags":["licence"],"description":"`state`: `signed_out`, `active`, `grace` (offline past `expires_at`, before `grace_until`: existing profiles start, nothing is created), `locked` (past grace, no token, or the workspace lapsed), `suspended`. `used` counts live and trashed profiles. `keep` lists the profiles that stay startable while `used` exceeds `limits.profiles`. `mode: off` means nothing is enforced (development).","responses":{"200":{"description":"What the daemon knows about its licence: the response of GET /v1/licence and of every licence mutation. Never carries tokens.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LicenceState"}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/v1/licence/refresh":{"post":{"summary":"Ask the cloud for a fresh licence now","tags":["licence"],"description":"Runs the hourly `POST /licence` immediately and answers the resulting state (200 even when the cloud is unreachable: `online: false`, `last_error`, and the stored token keeps applying until `grace_until`).","responses":{"200":{"description":"What the daemon knows about its licence: the response of GET /v1/licence and of every licence mutation. Never carries tokens.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LicenceState"}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/v1/licence/sign-in":{"post":{"summary":"Sign in to the Ant0 cloud (CLI users)","tags":["licence"],"description":"Forwards the credentials to `api.ant0.link`, registers this device and fetches the first licence. Cloud errors keep their code and status: 401 `auth.invalid_credentials`, 401 `auth.totp_required` (retry with `totp`), 401 `auth.totp_invalid`, 403 `device.limit`, 409 `device.free_used`, 429 `auth.rate_limited`; 503 `licence.offline` when the cloud does not answer. The desktop app signs in itself and uses `POST /v1/licence/session`.","requestBody":{"required":true,"content":{"application/json":{"schema":{"additionalProperties":false,"description":"Credentials are forwarded to the cloud once and never stored; the daemon keeps the resulting refresh token.","type":"object","required":["email","password"],"properties":{"email":{"minLength":3,"maxLength":320,"format":"email","type":"string"},"password":{"minLength":1,"maxLength":1024,"type":"string"},"totp":{"pattern":"^[0-9]{6}$|^[A-Za-z0-9-]{8,16}$","description":"6-digit TOTP code or a recovery code, when 2FA is enabled.","type":"string"}}}}},"description":"Credentials are forwarded to the cloud once and never stored; the daemon keeps the resulting refresh token."},"responses":{"200":{"description":"What the daemon knows about its licence: the response of GET /v1/licence and of every licence mutation. Never carries tokens.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LicenceState"}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"409":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"500":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"503":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/v1/licence/sign-out":{"post":{"summary":"Sign out","tags":["licence"],"description":"Revokes the cloud session (best effort) and forgets the session and licence token; the state becomes `signed_out`. The keep list is kept locally.","responses":{"204":{"description":"Default Response"},"401":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/v1/licence/logout":{"post":{"summary":"Lock sync keys and sign out","tags":["licence"],"responses":{"204":{"description":"Default Response"},"401":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/v1/licence/session":{"post":{"summary":"Adopt a cloud session (desktop shell)","tags":["licence"],"description":"The desktop app performs the sign-in itself and hands the daemon the refresh token bound to this device; the daemon exchanges it for an access token and fetches the licence. 401 when the cloud rejects the token. With `device_keys` the daemon first adopts the shell's keypairs as its own, so both processes hold the one device key the licence names; keys the daemon generated itself are replaced (logged once). `sync_vault_key` is adopted in memory before cloud work and is never logged or persisted.","requestBody":{"required":true,"content":{"application/json":{"schema":{"additionalProperties":false,"type":"object","required":["refresh"],"properties":{"refresh":{"minLength":16,"maxLength":4096,"description":"A refresh token the desktop shell obtained for this device.","type":"string"},"device_keys":{"additionalProperties":false,"description":"The shell's device keypairs. The daemon adopts them as its own — `<home>/device/keys.json`, 0600 — replacing keys it generated itself, so the licence names one key and no re-registration ping-pong follows. Loopback only, bearer-authenticated; never logged, never echoed. Omitted by CLI-only clients.","type":"object","required":["sign_priv","kx_priv"],"properties":{"sign_priv":{"pattern":"^[A-Za-z0-9+/]{43}=$","description":"Ed25519 private seed (32 raw bytes, standard base64).","type":"string"},"kx_priv":{"pattern":"^[A-Za-z0-9+/]{43}=$","description":"X25519 private scalar (32 raw bytes, standard base64).","type":"string"}}},"sync_vault_key":{"pattern":"^[A-Za-z0-9+/]{43}=$","description":"Shell-owned sync vault key (32 raw bytes, standard padded base64). Adopted in memory only.","type":"string"}}}}}},"responses":{"200":{"description":"What the daemon knows about its licence: the response of GET /v1/licence and of every licence mutation. Never carries tokens.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LicenceState"}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"423":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"500":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"503":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/v1/licence/keep":{"post":{"summary":"Choose the profiles that stay startable over the plan limit","tags":["licence"],"description":"\"lapsed to Free\": while `used` exceeds `limits.profiles`, only these profiles may start; the others answer 423 `profile.locked` (visible, exportable). Stored locally and mirrored to the cloud when online. At most `limits.profiles` ids (403 `licence.profile_limit`); 404 `profile.not_found` for an unknown id.","requestBody":{"required":true,"content":{"application/json":{"schema":{"additionalProperties":false,"type":"object","required":["profile_ids"],"properties":{"profile_ids":{"maxItems":1000,"description":"Profiles that stay startable while the plan allows fewer profiles than exist.","type":"array","items":{"format":"uuid","type":"string"}}}}}}},"responses":{"200":{"description":"What the daemon knows about its licence: the response of GET /v1/licence and of every licence mutation. Never carries tokens.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LicenceState"}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/v1/licence/integrity":{"post":{"summary":"Record the shell's integrity hashes for the next heartbeat","tags":["licence"],"description":"the desktop shell reports `shell_sha256` (its executable) and `bundle_sha256` (its webview bundle) after start; the daemon keeps them in memory and sends them, with its own `sidecar_sha256`, in every hourly `POST /devices/heartbeat`. Nothing is verified locally.","requestBody":{"required":true,"content":{"application/json":{"schema":{"additionalProperties":false,"minProperties":1,"description":"Hashes the desktop shell attests for itself (`shell_sha256`: the shell executable; `bundle_sha256`: the webview bundle). Kept in memory and sent with the next heartbeat; the daemon adds `sidecar_sha256` itself when it runs as a sidecar.","type":"object","properties":{"shell_sha256":{"pattern":"^[0-9a-fA-F]{64}$","description":"SHA-256, hex.","type":"string"},"bundle_sha256":{"pattern":"^[0-9a-fA-F]{64}$","description":"SHA-256, hex.","type":"string"}}}}},"description":"Hashes the desktop shell attests for itself (`shell_sha256`: the shell executable; `bundle_sha256`: the webview bundle). Kept in memory and sent with the next heartbeat; the daemon adds `sidecar_sha256` itself when it runs as a sidecar."},"responses":{"204":{"description":"Default Response"},"400":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/v1/licence/ticket":{"get":{"summary":"Engine launch ticket","tags":["licence"],"description":"`launch = lic . b64url(claim) . b64url(csig)` for `--ant0-launch=`, valid 15 min, bound to `engine` (the release version the engine reports). For SDKs launching the engine directly; the daemon's own launches attach one automatically. 403 `licence.required` without a usable licence, 403 `workspace.suspended` when suspended.","parameters":[{"schema":{"pattern":"^[A-Za-z0-9][A-Za-z0-9._-]{0,127}$","type":"string"},"in":"query","name":"engine","required":true,"description":"Release version the ticket is for, e.g. 149.0.7827.114-ant0.1 (must equal the running engine's version)."}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"additionalProperties":false,"type":"object","required":["launch","engine","expires_at"],"properties":{"launch":{"description":"`lic . b64url(claim) . b64url(csig)`: pass as `--ant0-launch=<launch>`. Contains the licence token; treat as a secret of this device.","type":"string"},"engine":{"type":"string"},"expires_at":{"format":"date-time","type":"string"}}}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/v1/events":{"get":{"summary":"Event stream (WebSocket) or recent events (HTTP)","tags":["events"],"description":"Upgrade to WebSocket to receive the buffered recent events followed by live `Ant0Event` JSON frames (`profile.state`, `browser.install`, `asset.install`, `proxy.check`, `daemon.log`). A plain GET returns the buffered events. `?token=` may replace the Authorization header on this route. HTTP history, WebSocket replay and live `profile.state` events contain only `type`, `profile_id`, `state`, `at` and optional `pid`/`exit_code` (including null); `cdp_url` and all other fields are omitted for all roles and profiles, without cloud authorization. For runtime endpoints, use the guarded GET /v1/sessions, GET /v1/profiles/:id or GET /v1/profiles/:id/status and handle denial, unavailability and stop/restart races.","parameters":[{"schema":{"format":"date-time","type":"string"},"in":"query","name":"since","required":false,"description":"Only replay buffered events at or after this time."},{"schema":{"minimum":0,"maximum":200,"default":50,"type":"integer"},"in":"query","name":"limit","required":false},{"schema":{"type":"string"},"in":"query","name":"token","required":false,"description":"Bearer token for WebSocket clients that cannot set headers."}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"additionalProperties":false,"type":"object","required":["items"],"properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/Ant0Event"}}}}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}}},"servers":[{"url":"http://127.0.0.1:{port}","variables":{"port":{"default":"27100"}}}],"security":[{"bearer":[]}],"tags":[{"name":"health"},{"name":"browsers"},{"name":"profiles"},{"name":"inventory"},{"name":"automation"},{"name":"cookies"},{"name":"sessions"},{"name":"trash"},{"name":"proxies"},{"name":"extensions"},{"name":"licence"},{"name":"workspaces"},{"name":"events"},{"name":"sync"},{"name":"team"}]}