{"openapi":"3.1.0","info":{"title":"Vercatus API","version":"1.0.0","description":"The HTTP API the Vercatus workspace itself uses. Authenticate with an API key from Settings, API: `Authorization: Bearer ca_…`. `x-vercatus-role` is the lowest member role that may call an operation; `x-vercatus-key-scopes` the key scopes that reach it (null: keys do not). Every response carries `x-request-id`; API-key responses carry `x-ratelimit-limit` and `x-ratelimit-remaining`."},"servers":[{"url":"https://app.vercatus.com/api","description":"Vercatus"}],"security":[{"apiKey":[]}],"tags":[{"name":"Runs","description":"Start runs, follow them, and fetch the deliverables."},{"name":"Results of a run","description":"Everything a run produced. The workspace's run pages read these."},{"name":"Findings","description":"The inbox across sites, one finding, the lifecycle, ticket export, verified fixes and the forecasts' calibration record."},{"name":"Answer engines","description":"Answers by engine: cited and named shares per engine, per question and over time."},{"name":"Exports","description":"Bulk data for BI tools and scripts. A key with the export scope alone may read these."},{"name":"Tracked prompts","description":"The prompt library: the questions your workspace tracks as prompts, each asked of its engines on a schedule, with their answers and what changed. A tracked prompt joins the topic it fits. Each answer one engine gives a tracked prompt is one prompt check, and the plan includes a number of tracked prompts and of prompt checks a month (Settings, Usage)."},{"name":"Vercatus Intelligence","description":"What Vercatus learns across sites: the engine playbooks (what plays like each did, from verdicts and natural experiments, above the privacy floor), the engines' confirmed changes with the topics they touched, a site's AI Demand Index with its coverage of demand, the co-citation network, and notices."},{"name":"Page comparisons and rewrites","description":"Why a cited page beats yours on one question, and fact-checked rewrites of a passage, which page plays use."},{"name":"Results","description":"Did it work: Answer Share since the site started against the leader, a verdict on every shipped play (Won, Lost ground, No effect, Inconclusive or Too early, from a difference in differences against untouched topics, graded A to D), the wins, the plays waiting for a read, the first-party outcomes, and the experiment that holds topics out as controls."},{"name":"Plays","description":"What exactly to change: plays, each one specific change on the site or elsewhere on the web with its evidence from the lenses, an expected gain with its basis, an effort, a how-to and draft (never sent by Vercatus), and an acceptance check a machine runs; their checks, activity and hand-offs; and \"This is wrong\" on a play, a topic or an AI demand figure."},{"name":"Why","description":"Why AI picks a site's competitors, per topic and per competitor: the pages engines read and whom they name, the engines' own searches in Google and Bing, what engines name without searching, the reasons from those numbers, and what each engine says about the site (Engine Briefs, perception, not cause)."},{"name":"Answer Share","description":"Where a site stands in the AI answers of its topics: Answer Share with its range, the leaderboard, each engine and topic, the topics and their questions, the brands counted and the answers behind every figure."},{"name":"Security","description":"Verified domains, single sign-on (OIDC and SAML) with enforcement, and the data processing agreement."},{"name":"Sites","description":"Domains, ownership verification and schedules."},{"name":"Portfolio and board","description":"Cross-site views and the numbers a board reads."},{"name":"Agencies","description":"An agency workspace's client workspaces: the portfolio across them, making one, consolidated billing, and a client workspace's choice of branding."},{"name":"Scheduled reports","description":"Reports emailed on a schedule: the board, results, the quarterly review, the monthly brief, the visibility export and the weekly digest, with each send's history."},{"name":"Workspace","description":"Settings, members, invitations, API keys and integrations."},{"name":"Billing","description":"The plan, Stripe's checkout and portal, plan changes, and the webhook Stripe calls."},{"name":"Knowledge base","description":"The evidence-graded hypotheses findings cite, what Learn observed of each (supported, not observed or contradicted, with n), their review state and the research agent's proposals."},{"name":"Authentication","description":"Sessions for the workspace. API clients use a key instead and skip these."},{"name":"Assistant","description":"Vercatus Intelligence, the assistant: conversations as tickets, answers streamed as server-sent events, closing, rating and asking for a person."},{"name":"Integrations","description":"What MCP clients and code generators read: the caller's context and this description."},{"name":"Notes and saved views","description":"Dated notes the trend charts draw beside the engines' own changes, and saved views: a page with its scope and filters, one person's or the workspace's."},{"name":"The Journey","description":"Where a site started, where it is now and what the fixes did in between: the index with its range, the claim the data supports, the fix ledger, the proof chain, the checkpoints and the first-party AI reports."},{"name":"Service","description":"Unauthenticated: health and branding."}],"paths":{"/health":{"get":{"operationId":"getHealth","tags":["Service"],"summary":"Liveness, and whether a model provider and which profile are configured.","description":"Liveness, and whether a model provider and which profile are configured.","responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean","enum":[true]}},"required":["ok"]}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"security":[],"x-vercatus-role":null,"x-vercatus-key-scopes":null}},"/branding":{"get":{"operationId":"getBranding","tags":["Service"],"summary":"White-label shell: the dashboard reads this before rendering anything branded.","description":"White-label shell: the dashboard reads this before rendering anything branded.","responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"productName":{"type":"string"},"logoUrl":{"anyOf":[{"type":"string"},{"type":"null"}]},"accentColor":{"anyOf":[{"type":"string"},{"type":"null"}]},"supportEmail":{"anyOf":[{"type":"string"},{"type":"null"}]},"hidePoweredBy":{"type":"boolean"},"defaultName":{"type":"string"},"org":{"anyOf":[{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"plan":{"type":"string"}},"required":["id","name","plan"]},{"type":"null"}]}},"required":["productName","logoUrl","accentColor","supportEmail","hidePoweredBy","defaultName","org"]}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"security":[],"x-vercatus-role":null,"x-vercatus-key-scopes":null}},"/hooks/cms/{siteId}/{token}":{"post":{"operationId":"postHooksCmsBySiteIdByToken","tags":["Service"],"summary":"Inbound change events from a site's CMS or deploys (Shopify, Contentful, Sanity, the WordPress snippet, or the generic shape); authenticated by the per-site tok","description":"Inbound change events from a site's CMS or deploys (Shopify, Contentful, Sanity, the WordPress snippet, or the generic shape); authenticated by the per-site token in the URL and the provider's signature.","parameters":[{"name":"siteId","in":"path","required":true,"schema":{"type":"string"}},{"name":"token","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":false,"content":{"text/plain":{"schema":{"type":"string"}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","additionalProperties":{}}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"security":[],"x-vercatus-role":null,"x-vercatus-key-scopes":null}},"/hooks/traffic/{siteId}/{token}":{"post":{"operationId":"postHooksTrafficBySiteIdByToken","tags":["Service"],"summary":"Crawler traffic ingest (OUTCOMES-PLAN.md A.5): the Cloudflare Worker on the customer's zone, or a Logpush job, posts bot request lines here; the token in the pa","description":"Crawler traffic ingest (OUTCOMES-PLAN.md A.5): the Cloudflare Worker on the customer's zone, or a Logpush job, posts bot request lines here; the token in the path is the site's. Answers 202 at once; the lines are aggregated in memory and written once a minute. No session; public like the CMS hook.","parameters":[{"name":"siteId","in":"path","required":true,"schema":{"type":"string"}},{"name":"token","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":false,"content":{"application/octet-stream":{"schema":{"type":"string"}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","additionalProperties":{}}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"security":[],"x-vercatus-role":null,"x-vercatus-key-scopes":null}},"/org":{"get":{"operationId":"getOrg","tags":["Workspace"],"summary":"The caller's workspace: its name, plan and limits, branding, settings with secrets masked, the caller's role, and which Google and crawler-traffic connections t","description":"The caller's workspace: its name, plan and limits, branding, settings with secrets masked, the caller's role, and which Google and crawler-traffic connections the plan allows. A client sees only the name, plan and branding.","responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"anyOf":[{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"planId":{"type":"string"},"branding":{"type":"object","properties":{"productName":{"type":"string"},"logoUrl":{"type":"string"},"accentColor":{"type":"string"},"supportEmail":{"type":"string"},"customDomain":{"type":"string"},"hidePoweredBy":{"type":"boolean"}}},"settings":{"type":"object"},"plan":{"anyOf":[{"$ref":"#/components/schemas/Shaper8h97e"},{"type":"null"}]},"role":{"type":"string","enum":["client"]},"emailEnabled":{"type":"boolean","enum":[false]},"google":{"type":"object","properties":{"configured":{"type":"boolean","enum":[false]},"analytics":{"type":"boolean","enum":[false]}},"required":["configured","analytics"]},"traffic":{"type":"object","properties":{"allowed":{"type":"boolean","enum":[false]}},"required":["allowed"]}},"required":["id","name","planId","branding","settings","plan","role","emailEnabled","google","traffic"]},{"type":"object","properties":{"settings":{"type":"object","properties":{"intendedPlan":{"type":"string","enum":["watch","lite","solo","portfolio"]},"intendedInterval":{"type":"string","enum":["month","year"]},"firstRun":{"anyOf":[{"type":"object","properties":{"auto":{"type":"boolean"},"since":{"type":"string"},"reminded":{"type":"array","items":{"type":"number"}},"operator":{"type":"array","items":{"type":"string"}}},"required":["auto","since"]},{"type":"null"}]},"onboarding":{"anyOf":[{"type":"object","properties":{"v":{"type":"number","enum":[2]},"step":{"type":"string","enum":["workspace","site","done","usage","domains","enterprise","welcome"]},"startedAt":{"type":"string"},"completedAt":{"anyOf":[{"type":"string"},{"type":"null"}]},"answers":{"type":"object","properties":{"usage":{"type":"string","enum":["agency","personal","team"]},"goals":{"type":"array","items":{"type":"string"}},"domains":{"type":"number"},"seats":{"type":"number"}}},"hint":{"anyOf":[{"type":"object","properties":{"plan":{"type":"string","enum":["watch","lite","solo","portfolio"]},"interval":{"type":"string","enum":["month","year"]}}},{"type":"null"}]},"enterprise":{"anyOf":[{"type":"object","properties":{"at":{"type":"string"},"company":{"type":"string"},"role":{"anyOf":[{"type":"string"},{"type":"null"}]},"phone":{"anyOf":[{"type":"string"},{"type":"null"}]},"timeline":{"anyOf":[{"type":"string"},{"type":"null"}]},"message":{"anyOf":[{"type":"string"},{"type":"null"}]},"domains":{"type":"number"}},"required":["at","company","domains"]},{"type":"null"}]},"exploration":{"anyOf":[{"type":"object","properties":{"host":{"type":"string"},"status":{"type":"string","enum":["running","failed","done"]},"at":{"type":"string"},"finishedAt":{"anyOf":[{"type":"string"},{"type":"null"}]},"error":{"anyOf":[{"type":"string"},{"type":"null"}]},"result":{}},"required":["host","status","at"]},{"type":"null"}]},"audit":{"anyOf":[{"type":"object","properties":{"host":{"type":"string"},"domain":{"type":"string"},"status":{"type":"string","enum":["queued","running","failed","done","refused"]},"at":{"type":"string"},"startedAt":{"anyOf":[{"type":"string"},{"type":"null"}]},"finishedAt":{"anyOf":[{"type":"string"},{"type":"null"}]},"error":{"anyOf":[{"type":"string"},{"type":"null"}]},"costUsd":{"type":"number"},"result":{}},"required":["host","domain","status","at"]},{"type":"null"}]}},"required":["v","step","startedAt"]},{"type":"null"}]},"productEmails":{"anyOf":[{"type":"object","properties":{"consent":{"type":"boolean"},"at":{"type":"string"},"email":{"type":"string"},"sent":{"type":"array","items":{"type":"string"}}},"required":["consent","at","email"]},{"type":"null"}]},"emailOptOuts":{"type":"object","properties":{"brief":{"type":"array","items":{"type":"string"}},"checkpoints":{"type":"array","items":{"type":"string"}},"reports":{"type":"array","items":{"type":"string"}},"alerts":{"type":"array","items":{"type":"string"}},"reminders":{"type":"array","items":{"type":"string"}}}},"agencyBranding":{"type":"string","enum":["own","inherit"]},"unmetered":{"anyOf":[{"type":"object","properties":{"until":{"type":"string"},"by":{"anyOf":[{"type":"string"},{"type":"null"}]},"at":{"type":"string"},"note":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["until","by","at"]},{"type":"null"}]},"visit":{"type":"object","properties":{"seenAt":{"anyOf":[{"type":"string"},{"type":"null"}]},"previousSeenAt":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["seenAt","previousSeenAt"]},"pinnedSites":{"type":"array","items":{"type":"string"}},"llmProvider":{"type":"string","enum":["bedrock","vertex","platform","anthropic-byok"]},"llmProfile":{"type":"string","enum":["test","full"]},"monthlyTokenBudget":{"type":"number"},"perRunTokenBudget":{"type":"number"},"crawlRateLimitRps":{"type":"number"},"allowedHosts":{"type":"array","items":{"type":"string"}},"alerts":{"type":"object","properties":{"slackWebhookUrl":{"type":"string"},"teamsWebhookUrl":{"type":"string"},"emailTo":{"type":"array","items":{"type":"string"}},"onNewSevere":{"type":"boolean"},"onAccessChange":{"type":"boolean"},"onRunFailed":{"type":"boolean"},"onResolved":{"type":"boolean"},"onEveryRun":{"type":"boolean"},"onPromptChange":{"type":"boolean"},"onDrift":{"type":"boolean"},"onCompetitor":{"type":"boolean"},"onCrawlSlowing":{"type":"boolean"},"onDisclosureMissing":{"type":"boolean"},"onAgentTaskFailed":{"type":"boolean"},"onStaleAnswer":{"type":"boolean"},"onVerdict":{"type":"boolean"},"onShareMove":{"type":"boolean"}}},"security":{"type":"object","properties":{"enforceSsoDomains":{"type":"array","items":{"type":"string"}},"sessionHours":{"type":"number"},"idleMinutes":{"type":"number"},"requireMfa":{"type":"boolean"},"ipAllowlist":{"type":"array","items":{"type":"string"}},"auditRetentionDays":{"anyOf":[{"type":"number"},{"type":"null"}]}}},"platform":{"type":"object","properties":{"dpa":{"type":"object","properties":{"approvedVersion":{"anyOf":[{"type":"string"},{"type":"null"}]},"approvedBy":{"anyOf":[{"type":"string"},{"type":"null"}]},"approvedAt":{"type":"string"}},"required":["approvedVersion","approvedBy","approvedAt"]}}},"webhooks":{"type":"array","items":{"$ref":"#/components/schemas/Shape1q1l2dw"}},"reports":{"type":"object","properties":{"emailTo":{"type":"array","items":{"type":"string"}},"onFullRun":{"type":"boolean"},"attachPdf":{"type":"boolean"},"boardBrief":{"type":"boolean"},"monthlyBrief":{"type":"boolean"},"monthlyBriefTo":{"type":"array","items":{"type":"string"}},"lastMonthlyBriefAt":{"anyOf":[{"type":"string"},{"type":"null"}]},"monthlyBriefClaimedAt":{"anyOf":[{"type":"string"},{"type":"null"}]},"journeyCheckpoints":{"type":"boolean"}}},"citations":{"type":"object","properties":{"enabled":{"type":"boolean"},"intents":{"type":"number"},"samples":{"type":"number"},"engines":{"type":"array","items":{"type":"string"}},"shareCache":{"type":"boolean"}}},"ticketing":{"type":"object","properties":{"linear":{"type":"object","properties":{"apiKey":{"type":"string"},"team":{"type":"string"},"projectId":{"type":"string"}},"required":["apiKey","team"]},"jira":{"type":"object","properties":{"baseUrl":{"type":"string"},"email":{"type":"string"},"apiToken":{"type":"string"},"projectKey":{"type":"string"},"issueType":{"type":"string"}},"required":["baseUrl","email","apiToken","projectKey"]},"asana":{"type":"object","properties":{"token":{"type":"string"},"projectId":{"type":"string"}},"required":["token","projectId"]},"github":{"type":"object","properties":{"token":{"type":"string"},"repo":{"type":"string"},"labels":{"type":"array","items":{"type":"string"}}},"required":["token","repo"]}}}}},"plan":{"anyOf":[{"type":"object","properties":{"limits":{"$ref":"#/components/schemas/Shapetinkmx"},"id":{"type":"string"},"name":{"type":"string"},"monthlyPriceUsd":{"type":"number"},"pricing":{"$ref":"#/components/schemas/Shapew8uuzz"}},"required":["limits","id","name","monthlyPriceUsd","pricing"]},{"type":"null"}]},"role":{"type":"string","enum":["analyst","owner","admin","viewer","client"]},"emailEnabled":{"type":"boolean"},"google":{"type":"object","properties":{"configured":{"type":"boolean"},"analytics":{"type":"boolean"}},"required":["configured","analytics"]},"traffic":{"type":"object","properties":{"allowed":{"type":"boolean"}},"required":["allowed"]},"closure":{"anyOf":[{"type":"object","properties":{"reason":{"type":"string","enum":["account","requested","cancelled"]}},"required":["reason"]},{"type":"null"}]},"cancelAt":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"pausedUntil":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"id":{"type":"string"},"name":{"type":"string"},"slug":{"type":"string"},"branding":{"type":"object","properties":{"productName":{"type":"string"},"logoUrl":{"type":"string"},"accentColor":{"type":"string"},"supportEmail":{"type":"string"},"customDomain":{"type":"string"},"hidePoweredBy":{"type":"boolean"}}},"planId":{"type":"string"},"region":{"type":"string"},"billingStatus":{"type":"string","enum":["none","trialing","active","past_due","unpaid","canceled","incomplete","paused"]},"currentPeriodStart":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"currentPeriodEnd":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"extraSeats":{"type":"number"},"closedAt":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"deleteAfter":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"createdAt":{"type":"string","format":"date-time"},"parentOrgId":{"anyOf":[{"type":"string"},{"type":"null"}]},"consolidatedBilling":{"type":"boolean"}},"required":["role","emailEnabled","google","traffic"]}]}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"viewer","x-vercatus-key-scopes":["read"]},"delete":{"operationId":"deleteOrg","tags":["Workspace"],"summary":"With the workspace's name typed back: close the workspace.","description":"`{ confirm }` with the workspace's name typed back: close the workspace. Owners. It is read-only at once, the subscription is cancelled without a refund of the period paid, and everything in it is deleted after 28 days; the owners are emailed now and when it is gone. It can be reopened until then.","responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"subscription":{"type":"object","properties":{"cancelled":{"type":"boolean"},"reason":{"type":"string"}},"required":["cancelled"]},"emailed":{"type":"boolean"},"closed":{"type":"boolean"},"closedAt":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"deleteAfter":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"reason":{"anyOf":[{"type":"string"},{"type":"null"}]},"closedBy":{"anyOf":[{"type":"string"},{"type":"null"}]},"canReopen":{"type":"boolean"},"canClose":{"type":"boolean"},"policy":{"type":"object","properties":{"readOnlyDaysAfterCancel":{"type":"number"},"deleteAfterDays":{"type":"number"},"exportDays":{"type":"number"}},"required":["readOnlyDaysAfterCancel","deleteAfterDays","exportDays"]}},"required":["subscription","emailed","closed","closedAt","deleteAfter","reason","closedBy","canReopen","canClose","policy"]}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"owner","x-vercatus-key-scopes":null},"patch":{"operationId":"patchOrg","tags":["Workspace"],"summary":"Change the workspace.","description":"`{ name?, branding?, settings? }`: change the workspace. Settings and branding merge key by key; a key not sent is left as it is. Integration tokens and channel addresses are kept unless replaced (\"set\" keeps). Refused: unknown keys, operator keys, values beyond the plan.","requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"name":{},"branding":{},"settings":{}}}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"admin","x-vercatus-key-scopes":null}},"/org/people":{"get":{"operationId":"getOrgPeople","tags":["Workspace"],"summary":"Who can be given a finding: every member's name and email, readable by anyone who can plan work.","description":"Who can be given a finding: every member's name and email, readable by anyone who can plan work.","responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"userId":{"type":"string"},"email":{"type":"string"},"name":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["userId","email","name"]}}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"analyst","x-vercatus-key-scopes":["read"]}},"/org/members":{"get":{"operationId":"getOrgMembers","tags":["Workspace"],"summary":"Members, pending invitations (with their id, for revoking) and the seats: owners, admins and analysts take one, and so does an open invitation for those roles; ","description":"Members, pending invitations (with their id, for revoking) and the seats: owners, admins and analysts take one, and so does an open invitation for those roles; viewers and clients are free. `siteIds` is the sites a limited member (or invitation) sees, null for every site.","responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"members":{"type":"array","items":{"type":"object","properties":{"siteIds":{"anyOf":[{"type":"array","items":{"type":"string"}},{"type":"null"}]},"takesSeat":{"type":"boolean"},"userId":{"type":"string"},"email":{"type":"string"},"name":{"anyOf":[{"type":"string"},{"type":"null"}]},"role":{"type":"string","enum":["analyst","owner","admin","viewer","client"]},"lastLoginAt":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]}},"required":["siteIds","takesSeat","userId","email","name","role","lastLoginAt"]}},"pending":{"type":"array","items":{"type":"object","properties":{"siteIds":{"anyOf":[{"type":"array","items":{"type":"string"}},{"type":"null"}]},"expired":{"type":"boolean"},"takesSeat":{"type":"boolean"},"id":{"type":"string"},"email":{"type":"string"},"role":{"type":"string"},"expiresAt":{"type":"string","format":"date-time"}},"required":["siteIds","expired","takesSeat","id","email","role","expiresAt"]}},"seats":{"$ref":"#/components/schemas/Shape1napw7e"}},"required":["members","pending","seats"]}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"admin","x-vercatus-key-scopes":null}},"/org/invites":{"post":{"operationId":"postOrgInvites","tags":["Workspace"],"summary":"Invite someone (role owner, admin, analyst, viewer or client; only an owner invites an owner).","description":"`{ email, role, siteIds? }`: invite someone (role owner, admin, analyst, viewer or client; only an owner invites an owner). `siteIds` limits an analyst, viewer or client to those sites (a client always needs some; null or absent: every site). An invitation for a role that takes a seat holds one and is refused with 402 when none is free; viewers and clients are always free. Inviting the same address again replaces the open invitation. The invitation is emailed when an email provider is configured. A workspace without a plan sends at most 3 invitations a day and 10 in all (402 past the total, 429 past the day, `code` invites_unpaid_total or invites_unpaid_day); a plan lifts it to 30 an hour and 100 a day.","requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"email":{"type":"string"},"role":{"type":"string"},"siteIds":{"anyOf":[{"type":"array","items":{"type":"string"}},{"type":"null"}]}},"required":["email","role"]}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean","enum":[true]},"id":{"type":"string"},"email":{"type":"string"},"emailed":{"type":"boolean"},"seats":{"$ref":"#/components/schemas/Shape1napw7e"},"note":{"type":"string"}},"required":["ok","id","email","emailed","seats","note"]}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"admin","x-vercatus-key-scopes":null}},"/org/members/{userId}":{"delete":{"operationId":"deleteOrgMembersByUserId","tags":["Workspace"],"summary":"Remove a member from the workspace: their sessions here end and their seat is free again.","description":"Remove a member from the workspace: their sessions here end and their seat is free again. Admins remove analysts and viewers; only an owner removes an admin or an owner; the last owner stays.","parameters":[{"name":"userId","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Shape1h8jp8y"}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"admin","x-vercatus-key-scopes":null},"patch":{"operationId":"patchOrgMembersByUserId","tags":["Workspace"],"summary":"Change a member's role (owner, admin, analyst, viewer or client).","description":"`{ role, siteIds? }`: change a member's role (owner, admin, analyst, viewer or client). Moving to client needs `siteIds` unless they already have a site list; moving to admin or owner gives every site. Moving a viewer to a role that takes a seat needs a free seat (402 otherwise); the last owner stays an owner. Sites alone: PUT /api/org/members/:userId/sites.","parameters":[{"name":"userId","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"role":{"type":"string"},"siteIds":{"anyOf":[{"type":"array","items":{"type":"string"}},{"type":"null"}]}},"required":["role"]}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"anyOf":[{"type":"object","properties":{"ok":{"type":"boolean","enum":[true]},"unchanged":{"type":"boolean","enum":[true]}},"required":["ok","unchanged"]},{"$ref":"#/components/schemas/Shape1h8jp8y"}]}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"owner","x-vercatus-key-scopes":null}},"/org/invites/{id}":{"delete":{"operationId":"deleteOrgInvitesById","tags":["Workspace"],"summary":"Revoke an open invitation; its seat is free again.","description":"Revoke an open invitation; its seat is free again.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Shape1h8jp8y"}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"admin","x-vercatus-key-scopes":null}},"/org/sites":{"get":{"operationId":"getOrgSites","tags":["Sites"],"summary":"Sites & domain verification","description":"sites & domain verification","responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/Shape12ovojy"}}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"viewer","x-vercatus-key-scopes":["read"]}},"/sites":{"post":{"operationId":"postSites","tags":["Sites"],"summary":"Add a domain to the workspace, or return the one it has.","description":"`{ url }`: add a domain to the workspace, or return the one it has. Returns the site with its verification token. `400` for an address that is not a public domain (an IP, localhost, a local-network name); `402` at the plan's site cap. When the caller verified the same host in another workspace where they are an owner or admin, the site is verified at once (method `workspace`) and `verifiedThrough` names that workspace; on the free report that starts its run (`freeRunId`). Query: `?tz=` (the browser's IANA time zone, for the default schedule).","parameters":[{"name":"tz","in":"query","required":false,"schema":{"type":"string"}}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"url":{}},"required":["url"]}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"instructions":{"type":"object","properties":{"dns":{"type":"string"},"meta":{"type":"string"}},"required":["dns","meta"]},"twin":{"type":"object","properties":{"requested":{"type":"string"},"host":{"type":"string"}},"required":["requested","host"]},"note":{"type":"string"},"verifiedThrough":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"}},"required":["id","name"]},"freeRunId":{"anyOf":[{"type":"string"},{"type":"null"}]},"id":{"type":"string"},"brand":{"anyOf":[{"type":"object","properties":{"names":{"type":"array","items":{"type":"string"}},"aliases":{"type":"array","items":{"type":"string"}},"exclude":{"type":"array","items":{"type":"string"}}}},{"type":"null"}]},"name":{"anyOf":[{"type":"string"},{"type":"null"}]},"createdAt":{"type":"string","format":"date-time"},"orgId":{"anyOf":[{"type":"string"},{"type":"null"}]},"host":{"type":"string"},"verifiedAt":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"verificationToken":{"anyOf":[{"type":"string"},{"type":"null"}]},"verificationMethod":{"anyOf":[{"type":"string","enum":["meta","dns","search_console","workspace"]},{"type":"null"}]},"verification":{"anyOf":[{"$ref":"#/components/schemas/Shape1na1muw"},{"type":"null"}]},"origin":{"type":"string"},"memory":{"$ref":"#/components/schemas/Shapenglwsz"},"schedule":{"anyOf":[{"$ref":"#/components/schemas/Shapenuhyh8"},{"type":"null"}]},"nextFullAt":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"nextLightAt":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"watch":{"$ref":"#/components/schemas/Shape1tg61kc"},"competitors":{"type":"array","items":{"type":"string"}},"markets":{"type":"object","properties":{"mode":{"type":"string","enum":["auto","manual"]},"targets":{"type":"array","items":{"type":"object","properties":{"country":{"anyOf":[{"type":"string"},{"type":"null"}]},"language":{"type":"string"}},"required":["country","language"]}},"detected":{"anyOf":[{"type":"object","properties":{"targets":{"type":"array","items":{"type":"object","properties":{"country":{"anyOf":[{"type":"string"},{"type":"null"}]},"language":{"type":"string"}},"required":["country","language"]}},"evidence":{"type":"array","items":{"type":"string"}},"at":{"type":"string"},"source":{"type":"string","enum":["run","home"]},"held":{"type":"array","items":{"type":"string"}},"run":{"type":"string"},"prior":{"anyOf":[{"type":"object","properties":{"targets":{"type":"array","items":{}},"evidence":{"type":"array","items":{"type":"string"}},"at":{"type":"string"},"source":{"type":"string","enum":["run","home"]},"held":{"type":"array","items":{"type":"string"}}},"required":["targets","evidence","at"]},{"type":"null"}]}},"required":["targets","evidence","at"]},{"type":"null"}]}},"required":["mode","targets"]},"competitorBrands":{"anyOf":[{"type":"object","additionalProperties":{"type":"object","properties":{"names":{"type":"array","items":{"type":"string"}},"aliases":{"type":"array","items":{"type":"string"}},"exclude":{"type":"array","items":{"type":"string"}}}}},{"type":"null"}]},"poll":{"$ref":"#/components/schemas/Shape6nx4xt"},"demo":{"type":"boolean"},"answersScoredAt":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"siteType":{"anyOf":[{"type":"string","enum":["local","shop","publisher","software","other"]},{"type":"null"}]},"siteTypeSource":{"anyOf":[{"type":"string","enum":["owner","classified"]},{"type":"null"}]},"siteTypeClassified":{"anyOf":[{"$ref":"#/components/schemas/Shape1ypmqf8"},{"type":"null"}]},"updatedAt":{"type":"string","format":"date-time"},"integrations":{"$ref":"#/components/schemas/Shape1flbz1k"}},"required":["instructions","id","brand","name","createdAt","orgId","host","verifiedAt","verificationToken","verificationMethod","verification","origin","memory","schedule","nextFullAt","nextLightAt","watch","competitors","markets","competitorBrands","poll","demo","answersScoredAt","siteType","siteTypeSource","siteTypeClassified","updatedAt","integrations"]}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"analyst","x-vercatus-key-scopes":["write"]},"get":{"operationId":"getSites","tags":["Sites"],"summary":"Sites in the workspace with run counts and the last run.","description":"Sites in the workspace with run counts and the last run.","responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"brand":{"anyOf":[{"type":"object","properties":{"names":{"type":"array","items":{"type":"string"}},"aliases":{"type":"array","items":{"type":"string"}},"exclude":{"type":"array","items":{"type":"string"}}}},{"type":"null"}]},"name":{"anyOf":[{"type":"string"},{"type":"null"}]},"createdAt":{"type":"string","format":"date-time"},"orgId":{"anyOf":[{"type":"string"},{"type":"null"}]},"host":{"type":"string"},"verifiedAt":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"verificationToken":{"anyOf":[{"type":"string"},{"type":"null"}]},"verificationMethod":{"anyOf":[{"type":"string","enum":["meta","dns","search_console","workspace"]},{"type":"null"}]},"verification":{"anyOf":[{"$ref":"#/components/schemas/Shape1na1muw"},{"type":"null"}]},"origin":{"type":"string"},"memory":{"$ref":"#/components/schemas/Shapenglwsz"},"schedule":{"anyOf":[{"$ref":"#/components/schemas/Shapenuhyh8"},{"type":"null"}]},"nextFullAt":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"nextLightAt":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"watch":{"$ref":"#/components/schemas/Shape1tg61kc"},"competitors":{"type":"array","items":{"type":"string"}},"markets":{"$ref":"#/components/schemas/Shape1p31u7k"},"competitorBrands":{"anyOf":[{"type":"object","additionalProperties":{"type":"object","properties":{"names":{"type":"array","items":{"type":"string"}},"aliases":{"type":"array","items":{"type":"string"}},"exclude":{"type":"array","items":{"type":"string"}}}}},{"type":"null"}]},"poll":{"$ref":"#/components/schemas/Shape6nx4xt"},"demo":{"type":"boolean"},"answersScoredAt":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"siteType":{"anyOf":[{"type":"string","enum":["local","shop","publisher","software","other"]},{"type":"null"}]},"siteTypeSource":{"anyOf":[{"type":"string","enum":["owner","classified"]},{"type":"null"}]},"siteTypeClassified":{"anyOf":[{"$ref":"#/components/schemas/Shape1ypmqf8"},{"type":"null"}]},"updatedAt":{"type":"string","format":"date-time"},"workflows":{"type":"number"},"last_run":{"anyOf":[{"type":"string"},{"type":"null"}]},"integrations":{"$ref":"#/components/schemas/Shape1flbz1k"}},"required":["id","brand","name","createdAt","orgId","host","verifiedAt","verificationToken","verificationMethod","verification","origin","memory","schedule","nextFullAt","nextLightAt","watch","competitors","markets","competitorBrands","poll","demo","answersScoredAt","siteType","siteTypeSource","siteTypeClassified","updatedAt","workflows","last_run","integrations"]}}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"viewer","x-vercatus-key-scopes":["read"]}},"/sites/{id}/verification":{"get":{"operationId":"getSitesByIdVerification","tags":["Sites"],"summary":"The verification instructions for a site, read only.","description":"The verification instructions for a site, read only. `method` is how it was verified (`dns`, `meta`, `search_console`, or null for a site verified before methods were recorded); `searchConsole` says whether a connection exists to verify with; `required` whether runs wait for verification on this instance. Every site gets its token when it is added; one that predates tokens answers `token: null, tokenMissing: true` and gets one from POST /api/sites/:id/verification (a GET never writes).","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Shape1to9w0q"}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"viewer","x-vercatus-key-scopes":["read"]},"post":{"operationId":"postSitesByIdVerification","tags":["Sites"],"summary":"Give a site that has no verification token one (idempotent: a site that has one keeps it) and answer as GET does.","description":"Give a site that has no verification token one (idempotent: a site that has one keeps it) and answer as GET does. Analysts and up.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Shape1to9w0q"}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"analyst","x-vercatus-key-scopes":["write"]}},"/sites/{id}/citations":{"get":{"operationId":"getSitesByIdCitations","tags":["Sites"],"summary":"Everything the answer engines said about this site, across runs: one entry per question per run with each engine's answer and every source it rested on, with th","description":"Everything the answer engines said about this site, across runs: one entry per question per run with each engine's answer and every source it rested on, with the source titles, plus tallies by cited domain, by topic and by language. `/sites/:id/share` is the headline figure over the same data. `?runs=` caps the history at 12 runs, 24 maximum.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"runs","in":"query","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"panel":{"type":"boolean"},"host":{"type":"string"},"competitors":{"type":"array","items":{"type":"string"}},"runs":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"at":{"type":"string","format":"date-time"},"kind":{"type":"string"}},"required":["id","at","kind"]}},"questions":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string"},"query":{"type":"string"},"category":{"anyOf":[{"type":"string"},{"type":"null"}]},"importance":{"anyOf":[{"type":"number"},{"type":"null"}]},"language":{"anyOf":[{"type":"string"},{"type":"null"}]},"runId":{"type":"string"},"at":{"type":"string","format":"date-time"},"answers":{"type":"array","items":{"type":"object","properties":{"engine":{"type":"string"},"cited":{"type":"boolean"},"mentioned":{"type":"boolean"},"retrieved":{"type":"boolean"},"noAnswer":{"type":"boolean"},"excerpt":{"anyOf":[{"type":"string"},{"type":"null"}]},"error":{"anyOf":[{"type":"string"},{"type":"null"}]},"sources":{}},"required":["engine","cited","mentioned","retrieved","noAnswer","excerpt","error","sources"]}}},"required":["key","query","category","importance","language","runId","at","answers"]}},"byDomain":{"type":"array","items":{"type":"object","properties":{"domain":{"type":"string"},"cited":{"type":"number"},"questions":{"type":"number"},"own":{"type":"boolean"}},"required":["domain","cited","questions","own"]}},"byTopic":{"type":"array","items":{"type":"object","properties":{"topic":{"type":"string"},"asked":{"type":"number"},"cited":{"type":"number"}},"required":["topic","asked","cited"]}},"byLanguage":{"type":"array","items":{"type":"object","properties":{"language":{"type":"string"},"asked":{"type":"number"},"cited":{"type":"number"}},"required":["language","asked","cited"]}}},"required":["panel"]}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"viewer","x-vercatus-key-scopes":["read"]}},"/sites/{id}/share":{"get":{"operationId":"getSitesByIdShare","tags":["Sites"],"summary":"Cited share for a site and each named competitor, run by run and engine by engine, with the questions a competitor is cited for and the site is not.","description":"Cited share for a site and each named competitor, run by run and engine by engine, with the questions a competitor is cited for and the site is not. `?from=&to=` (YYYY-MM-DD, `to` inclusive) reads every run in the range (at most 400 points); without them `?runs=` caps the history (12, 24 at most). `?engines=a,b` narrows every figure to those engines; `?series=panel` (the default once the site has a tracked panel) is the chain-linked index over its tracked questions with each cohort's share, `?series=matched` rests each run on the cells it shares with the run before, and `?series=all` returns each run's every answer.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"from","in":"query","required":false,"schema":{"type":"string"}},{"name":"to","in":"query","required":false,"schema":{"type":"string"}},{"name":"runs","in":"query","required":false,"schema":{"type":"string"}},{"name":"engines","in":"query","required":false,"schema":{"type":"string"}},{"name":"series","in":"query","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"panel":{"type":"boolean"},"max":{"type":"number"},"host":{"type":"string"},"competitors":{"type":"array","items":{"type":"string"}},"scope":{"type":"object","properties":{"from":{"anyOf":[{"type":"string"},{"type":"null"}]},"to":{"anyOf":[{"type":"string"},{"type":"null"}]},"engines":{"anyOf":[{"type":"array","items":{"type":"string"}},{"type":"null"}]},"series":{"type":"string","enum":["panel","all","matched"]}},"required":["from","to","engines","series"]},"runs":{"type":"array","items":{"type":"object","properties":{"runId":{"type":"string"},"at":{"type":"string"},"kind":{"type":"string"},"asked":{"type":"number"},"own":{"type":"number"},"samples":{"type":"number"},"citedSamples":{"type":"number"},"share":{"type":"number"},"band":{"type":"array","items":{"anyOf":[{"type":"number"}]}},"competitors":{"type":"object","additionalProperties":{"type":"number"}},"rates":{"type":"object","additionalProperties":{"type":"object","properties":{"k":{"type":"number"},"n":{"type":"number"},"share":{"type":"number"},"band":{}},"required":["k","n","share","band"]}},"matched":{"type":"boolean"},"matchedQuestions":{"type":"number"},"previousShare":{"anyOf":[{"type":"number"},{"type":"null"}]},"all":{"type":"object","properties":{"asked":{"type":"number"},"own":{"type":"number"},"samples":{"type":"number"},"citedSamples":{"type":"number"},"share":{"type":"number"},"band":{"type":"array","items":{"anyOf":[{"type":"number"}]}}},"required":["asked","own","samples","citedSamples","share","band"]},"byEngine":{"type":"object","additionalProperties":{"type":"object","properties":{"k":{"type":"number"},"n":{"type":"number"},"share":{"type":"number"},"band":{},"label":{"type":"string"},"asked":{"type":"number"},"own":{"type":"number"},"completeness":{},"partial":{"type":"boolean"}},"required":["k","n","share","band","label","asked","own","completeness","partial"]}},"completeness":{"type":"object","properties":{"asked":{"type":"number"},"answered":{"type":"number"},"errored":{"type":"number"},"noAnswer":{"type":"number"},"rate":{"type":"number"},"partial":{"type":"boolean"}},"required":["asked","answered","errored","noAnswer","rate","partial"]},"partial":{"type":"boolean"},"panel":{"type":"object","properties":{"index":{"type":"number"},"delta":{"anyOf":[{"type":"number"},{"type":"null"}]},"linked":{"type":"boolean"},"questions":{"type":"number"},"cohorts":{"type":"object","additionalProperties":{}},"level":{"type":"number"}},"required":["index","delta","linked","questions","cohorts","level"]}},"required":["runId","at","kind","asked","own","samples","citedSamples","share","band","competitors","rates","matched","matchedQuestions","previousShare","all","byEngine","completeness","partial"]}},"latest":{"anyOf":[{"type":"object","properties":{"runId":{"type":"string"},"at":{"type":"string"},"asked":{"type":"number"},"byEngine":{"type":"object","additionalProperties":{"type":"object","properties":{"label":{"type":"string"},"asked":{"type":"number"},"own":{"type":"number"},"samples":{"type":"number"},"citedSamples":{"type":"number"},"competitors":{"type":"object","additionalProperties":{"type":"number"}}},"required":["label","asked","own","samples","citedSamples","competitors"]}}},"required":["runId","at","asked","byEngine"]},{"type":"null"}]},"gaps":{"type":"array","items":{"type":"object","properties":{"query":{"type":"string"},"category":{"anyOf":[{"type":"string"},{"type":"null"}]},"importance":{"anyOf":[{"type":"number"},{"type":"null"}]},"simulated":{"anyOf":[{"type":"string"},{"type":"null"}]},"engines":{"type":"array","items":{"type":"object","properties":{"engine":{"type":"string"},"label":{"type":"string"},"cited":{},"excerpt":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["engine","label","cited","excerpt"]}}},"required":["query","category","importance","simulated","engines"]}},"wins":{"type":"number"},"contested":{"type":"number"},"suggestions":{"type":"array","items":{"type":"object","properties":{"domain":{"type":"string"},"n":{"type":"number"}},"required":["domain","n"]}},"drift":{"anyOf":[{"type":"object","properties":{"against":{"anyOf":[{"type":"object","properties":{"runId":{"type":"string"},"at":{"type":"string"}},"required":["runId","at"]},{"type":"null"}]},"dropped":{"type":"array","items":{"type":"object","properties":{"query":{"type":"string"},"engine":{"type":"string"},"label":{"type":"string"},"instead":{"type":"array","items":{"type":"string"}},"url":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["query","engine","label","instead","url"]}},"gained":{"type":"array","items":{"type":"object","properties":{"query":{"type":"string"},"engine":{"type":"string"},"label":{"type":"string"},"instead":{"type":"array","items":{"type":"string"}},"url":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["query","engine","label","instead","url"]}},"held":{"type":"number"},"out":{"type":"number"}},"required":["against","dropped","gained","held","out"]},{"type":"null"}]},"timeline":{"type":"array","items":{"type":"object","properties":{"query":{"type":"string"},"category":{"anyOf":[{"type":"string"},{"type":"null"}]},"importance":{"anyOf":[{"type":"number"},{"type":"null"}]},"cells":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"cited":{"type":"boolean"},"engines":{},"asked":{"type":"number"}},"required":["cited","engines","asked"]},{"type":"null"}]}}},"required":["query","category","importance","cells"]}}},"required":["panel","max"]}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"viewer","x-vercatus-key-scopes":["read"]}},"/goals":{"get":{"operationId":"getGoals","tags":["Service"],"summary":"The workspace's goals with their current value from the latest runs, the starting value, and whether each is reached, on track, behind or missed.","description":"The workspace's goals with their current value from the latest runs, the starting value, and whether each is reached, on track, behind or missed.","responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"goals":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"siteId":{"anyOf":[{"type":"string"},{"type":"null"}]},"host":{"anyOf":[{"type":"string"},{"type":"null"}]},"metric":{"type":"string","enum":["verified","answer","cited","critical","answerShare","aiReach","buying","aiSessions","aiKeyEvents"]},"label":{"type":"string"},"unit":{"type":"string","enum":["","%"]},"good":{"type":"string","enum":["up","down"]},"target":{"type":"number"},"current":{"anyOf":[{"type":"number"},{"type":"null"}]},"start":{"anyOf":[{"type":"number"},{"type":"null"}]},"dueAt":{"type":"string"},"owner":{"anyOf":[{"type":"string"},{"type":"null"}]},"note":{"anyOf":[{"type":"string"},{"type":"null"}]},"createdAt":{"type":"string"},"status":{"type":"string","enum":["reached","missed","dropped","on-track","behind","no-data"]},"closedAt":{"anyOf":[{"type":"string"},{"type":"null"}]},"outcome":{"anyOf":[{"type":"string"},{"type":"null"}]},"asOf":{"anyOf":[{"type":"string"},{"type":"null"}]},"progress":{"anyOf":[{"type":"number"},{"type":"null"}]},"confirming":{"anyOf":[{"type":"string","enum":["reached","missed"]},{"type":"null"}]},"previous":{"anyOf":[{"type":"number"},{"type":"null"}]},"range":{"anyOf":[{"type":"array","items":{"anyOf":[{"type":"number"}]}},{"type":"null"}]}},"required":["id","siteId","host","metric","label","unit","good","target","current","start","dueAt","owner","note","createdAt","status","closedAt","outcome","asOf"]}},"metrics":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"label":{"type":"string"},"unit":{"type":"string","enum":["","%"]},"good":{"type":"string","enum":["up","down"]}},"required":["id","label","unit","good"]}}},"required":["goals","metrics"]}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"viewer","x-vercatus-key-scopes":["read"]},"post":{"operationId":"postGoals","tags":["Service"],"summary":"Set a goal for a site, or for every site when siteId is null.","description":"`{ metric, target, dueAt, siteId?, owner?, note? }`: set a goal for a site, or for every site when `siteId` is null.","requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"metric":{},"target":{},"dueAt":{},"siteId":{},"owner":{},"note":{}},"required":["metric","target","dueAt"]}}}},"responses":{"201":{"description":"Created","content":{"application/json":{"schema":{"type":"object","properties":{"sentence":{"type":"string"},"id":{"type":"string"},"siteId":{"anyOf":[{"type":"string"},{"type":"null"}]},"host":{"anyOf":[{"type":"string"},{"type":"null"}]},"metric":{"type":"string","enum":["verified","answer","cited","critical","answerShare","aiReach","buying","aiSessions","aiKeyEvents"]},"label":{"type":"string"},"unit":{"type":"string","enum":["","%"]},"good":{"type":"string","enum":["up","down"]},"target":{"type":"number"},"current":{"anyOf":[{"type":"number"},{"type":"null"}]},"start":{"anyOf":[{"type":"number"},{"type":"null"}]},"dueAt":{"type":"string"},"owner":{"anyOf":[{"type":"string"},{"type":"null"}]},"note":{"anyOf":[{"type":"string"},{"type":"null"}]},"createdAt":{"type":"string"},"status":{"type":"string","enum":["reached","missed","dropped","on-track","behind","no-data"]},"closedAt":{"anyOf":[{"type":"string"},{"type":"null"}]},"outcome":{"anyOf":[{"type":"string"},{"type":"null"}]},"asOf":{"anyOf":[{"type":"string"},{"type":"null"}]},"progress":{"anyOf":[{"type":"number"},{"type":"null"}]},"confirming":{"anyOf":[{"type":"string","enum":["reached","missed"]},{"type":"null"}]},"previous":{"anyOf":[{"type":"number"},{"type":"null"}]},"range":{"anyOf":[{"type":"array","items":{"anyOf":[{"type":"number"}]}},{"type":"null"}]}},"required":["sentence","id","siteId","host","metric","label","unit","good","target","current","start","dueAt","owner","note","createdAt","status","closedAt","outcome","asOf"]}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"analyst","x-vercatus-key-scopes":["write"]}},"/goals/{id}":{"patch":{"operationId":"patchGoalsById","tags":["Service"],"summary":"Closes a goal; { owner?, note?, dueAt?, target?","description":"`{ outcome: \"dropped\" }` closes a goal; `{ owner?, note?, dueAt?, target? }` changes it.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"outcome":{"type":"string","enum":["dropped"]}},"required":["outcome"]}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean","enum":[true]}},"required":["ok"]}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"analyst","x-vercatus-key-scopes":["write"]}},"/org/monthly-brief":{"get":{"operationId":"getOrgMonthlyBrief","tags":["Workspace"],"summary":"The monthly brief's state: on or off, its recipients, when it last went out, and whether it is due now.","description":"The monthly brief's state: on or off, its recipients, when it last went out, and whether it is due now.","responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"enabled":{"type":"boolean"},"to":{"type":"array","items":{"type":"string"}},"lastSentAt":{"anyOf":[{"type":"string"},{"type":"null"}]},"due":{"type":"boolean"},"onBillingDate":{"type":"boolean"},"emailEnabled":{"type":"boolean"}},"required":["enabled","to","lastSentAt","due","onBillingDate","emailEnabled"]}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"viewer","x-vercatus-key-scopes":["read"]}},"/org/monthly-brief/preview":{"get":{"operationId":"getOrgMonthlyBriefPreview","tags":["Workspace"],"summary":"The monthly brief as it would be sent today, as HTML, for a look before it goes out.","description":"The monthly brief as it would be sent today, as HTML, for a look before it goes out.","responses":{"200":{"description":"Success","content":{"text/html":{"schema":{"type":"string"}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"viewer","x-vercatus-key-scopes":["read"]}},"/sites/{id}/questions":{"get":{"operationId":"getSitesByIdQuestions","tags":["Sites"],"summary":"The site's living question set: what the latest full run newly asked and whether the site answers it, what stopped being asked, which answers moved, the searche","description":"The site's living question set: what the latest full run newly asked and whether the site answers it, what stopped being asked, which answers moved, the searches the set does not carry yet, and what the same month asked a year ago.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"searchConnected":{"type":"boolean"},"latest":{"anyOf":[{"type":"object","properties":{"runId":{"type":"string"},"at":{"type":"string"},"asked":{"type":"number"},"judged":{"type":"number"},"answered":{"type":"number"},"partial":{"type":"number"},"unanswered":{"type":"number"}},"required":["runId","at","asked","judged","answered","partial","unanswered"]},{"type":"null"}]},"previous":{"anyOf":[{"type":"object","properties":{"runId":{"type":"string"},"at":{"type":"string"},"asked":{"type":"number"}},"required":["runId","at","asked"]},{"type":"null"}]},"newlyAsked":{"type":"array","items":{"type":"object","properties":{"query":{"type":"string"},"category":{"type":"string"},"source":{"type":"string"},"importance":{"type":"number"},"coverage":{"anyOf":[{"type":"string","enum":["answered","partial","unanswered"]},{"type":"null"}]},"intentId":{"type":"string"},"intentClass":{"anyOf":[{"type":"string"},{"type":"null"}]},"provenance":{"anyOf":[{"$ref":"#/components/schemas/Shape1xvkhx7"},{"type":"null"}]}},"required":["query","category","source","importance","coverage","intentId","intentClass","provenance"]}},"noLongerAsked":{"type":"array","items":{"type":"object","properties":{"query":{"type":"string"},"category":{"type":"string"},"coverage":{"anyOf":[{"type":"string","enum":["answered","partial","unanswered"]},{"type":"null"}]}},"required":["query","category","coverage"]}},"moved":{"type":"array","items":{"type":"object","properties":{"query":{"type":"string"},"category":{"type":"string"},"from":{"anyOf":[{"type":"string","enum":["answered","partial","unanswered"]},{"type":"null"}]},"to":{"anyOf":[{"type":"string","enum":["answered","partial","unanswered"]},{"type":"null"}]},"intentId":{"type":"string"}},"required":["query","category","from","to","intentId"]}},"fromSearch":{"type":"array","items":{"type":"object","properties":{"query":{"type":"string"},"impressions":{"type":"number"},"clicks":{"type":"number"},"position":{"type":"number"},"intentClass":{"anyOf":[{"type":"string"},{"type":"null"}]},"landingPath":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["query","impressions","clicks","position","intentClass","landingPath"]}},"fromSearchHidden":{"type":"number"},"lastYear":{"anyOf":[{"type":"object","properties":{"runId":{"type":"string"},"at":{"type":"string"},"unanswered":{"type":"array","items":{"type":"object","properties":{"query":{"type":"string"},"category":{"type":"string"},"now":{"anyOf":[{"type":"string","enum":["answered","partial","unanswered","not asked","not judged"]},{"type":"null"}]}},"required":["query","category","now"]}}},"required":["runId","at","unanswered"]},{"type":"null"}]}},"required":["searchConnected","latest","previous","newlyAsked","noLongerAsked","moved","fromSearch","fromSearchHidden","lastYear"]}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"viewer","x-vercatus-key-scopes":["read"]}},"/sites/{id}/templates":{"get":{"operationId":"getSitesByIdTemplates","tags":["Sites"],"summary":"Template health over time: for each template in the site's latest run, pages sampled, AI readability, JavaScript-only text and answered questions across the las","description":"Template health over time: for each template in the site's latest run, pages sampled, AI readability, JavaScript-only text and answered questions across the last runs (`?runs=`, 8), with templates first seen in the latest run marked new.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"runs","in":"query","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"runs":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"at":{"type":"string"},"kind":{"type":"string"}},"required":["id","at","kind"]}},"templates":{"type":"array","items":{"type":"object","properties":{"fingerprint":{"type":"string"},"label":{"anyOf":[{"type":"string"},{"type":"null"}]},"sample":{"anyOf":[{"type":"string"},{"type":"null"}]},"series":{"type":"array","items":{"anyOf":[{"$ref":"#/components/schemas/Shapeulni8"},{"type":"null"}]}},"latest":{"$ref":"#/components/schemas/Shapeulni8"},"previous":{"anyOf":[{"$ref":"#/components/schemas/Shapeulni8"},{"type":"null"}]},"isNew":{"type":"boolean"},"runsSeen":{"type":"number"}},"required":["fingerprint","label","sample","series","latest","previous","isNew","runsSeen"]}}},"required":["runs","templates"]}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"viewer","x-vercatus-key-scopes":["read"]}},"/sites/{id}/competitors":{"put":{"operationId":"putSitesByIdCompetitors","tags":["Sites"],"summary":"Name the competitors share of answer is measured against; domains, at most five, never the site itself.","description":"`{ competitors: string[] }`: name the competitors share of answer is measured against; domains, at most five, never the site itself.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"competitors":{"type":"array","items":{"type":"string"}}},"required":["competitors"]}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"competitors":{"type":"array","items":{"type":"string"}}},"required":["competitors"]}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"admin","x-vercatus-key-scopes":null},"get":{"operationId":"getSitesByIdCompetitors","tags":["Why"],"summary":"The site's competitors, ?days= (28 by default) and ?market= (one market's topics and their answers, such as hu-HU), by Answer Share: each with its change, the t","description":"The site's competitors, `?days=` (28 by default) and `?market=` (one market's topics and their answers, such as hu-HU), by Answer Share: each with its change, the topics where it leads the site (largest gap first), the read pages naming it and of them those not naming the site, in how many of the engines' checked searches it ranks, and its share without search.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"days","in":"query","required":false,"schema":{"type":"string"}},{"name":"market","in":"query","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"competitors":{"type":"array","items":{"$ref":"#/components/schemas/Shapeac5wv6"}},"you":{"anyOf":[{"$ref":"#/components/schemas/Shape7ky7qg"},{"type":"null"}]}},"required":["competitors","you"]}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"viewer","x-vercatus-key-scopes":["read"]}},"/watch":{"get":{"operationId":"getWatch","tags":["Service"],"summary":"What the daily access watch found across the workspace: the Watch tier's own surface (§9.4 #4).","description":"What the daily access watch found across the workspace: the Watch tier's own surface (§9.4 #4). `days` defaults to 7, at most 30. Query: `?days=` (days back from today).","parameters":[{"name":"days","in":"query","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"inPlan":{"type":"boolean"},"days":{"type":"number"},"watched":{"type":"array","items":{"type":"object","properties":{"siteId":{"type":"string"},"host":{"type":"string"},"lastCheckAt":{"anyOf":[{"type":"string"},{"type":"null"}]},"enabled":{"type":"boolean"}},"required":["siteId","host","lastCheckAt","enabled"]}},"changes":{"type":"array","items":{"type":"object","properties":{"siteId":{"type":"string"},"host":{"type":"string"},"checkId":{"type":"string"},"at":{"type":"string"},"sentences":{"type":"array","items":{"type":"object","properties":{"text":{"type":"string"},"severity":{"type":"string","enum":["info","mid","bad"]}},"required":["text","severity"]}}},"required":["siteId","host","checkId","at","sentences"]}},"worst":{"anyOf":[{"type":"string","enum":["info","mid","bad"]},{"type":"null"}]}},"required":["inPlan","days","watched","changes","worst"]}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"viewer","x-vercatus-key-scopes":["read"]}},"/sites/{id}/watch":{"get":{"operationId":"getSitesByIdWatch","tags":["Sites"],"summary":"The daily access watch for a site: whether it is on, the URLs it reads, the latest matrix, the last thirty checks and every change with its date.","description":"The daily access watch for a site: whether it is on, the URLs it reads, the latest matrix, the last thirty checks and every change with its date.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"inPlan":{"type":"boolean"},"enabled":{"type":"boolean"},"switchedOff":{"type":"boolean"},"pinned":{"anyOf":[{"type":"array","items":{"type":"string"}},{"type":"null"}]},"urls":{"type":"array","items":{"type":"string"}},"identities":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","enum":["raw","googlebot","gptbot","oai_searchbot","claudebot","perplexitybot","google_extended","applebot","meta_externalagent","bytespider","ccbot"]},"label":{"type":"string"}},"required":["id","label"]}},"lastCheckAt":{"anyOf":[{"type":"string"},{"type":"null"}]},"lastChangeAt":{"anyOf":[{"type":"string"},{"type":"null"}]},"summary":{"anyOf":[{"type":"object","additionalProperties":{"type":"object","properties":{"served":{"type":"number"},"of":{"type":"number"}},"required":["served","of"]}},{"type":"null"}]},"latest":{"anyOf":[{"type":"object","properties":{"id":{"type":"string"},"checkedAt":{"type":"string","format":"date-time"},"urls":{"type":"array","items":{"type":"string"}},"results":{"type":"object","additionalProperties":{"type":"object","additionalProperties":{"type":"object","properties":{"status":{"type":"number"},"blocked":{"type":"boolean"},"challenge":{"type":"boolean"},"error":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["status","blocked","challenge"]}}},"aiAccess":{"type":"object","additionalProperties":{"type":"boolean"}},"robots":{"type":"boolean"},"llms":{"type":"boolean"}},"required":["id","checkedAt","urls","results","aiAccess","robots","llms"]},{"type":"null"}]},"checks":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"checkedAt":{"type":"string","format":"date-time"},"trigger":{"type":"string","enum":["schedule","manual","run"]},"urls":{"type":"number"},"changes":{"type":"array","items":{"type":"object","properties":{"text":{"type":"string"},"severity":{"type":"string","enum":["info","mid","bad"]}},"required":["text","severity"]}}},"required":["id","checkedAt","trigger","urls","changes"]}}},"required":["inPlan","enabled","switchedOff","pinned","urls","identities","lastCheckAt","lastChangeAt","summary","latest","checks"]}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"viewer","x-vercatus-key-scopes":["read"]},"patch":{"operationId":"patchSitesByIdWatch","tags":["Sites"],"summary":"Switch the watch on or off for this site, or pin the URLs it reads (at most twelve; null returns to the automatic choice).","description":"`{ enabled?, urls? }`: switch the watch on or off for this site, or pin the URLs it reads (at most twelve; null returns to the automatic choice).","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"enabled":{"type":"boolean"},"urls":{"anyOf":[{"type":"array","items":{"type":"string"}},{"type":"null"}]}}}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"enabled":{"type":"boolean"},"pinned":{"anyOf":[{"type":"array","items":{"type":"string"}},{"type":"null"}]}},"required":["enabled","pinned"]}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"admin","x-vercatus-key-scopes":null}},"/sites/{id}/watch/check":{"post":{"operationId":"postSitesByIdWatchCheck","tags":["Sites"],"summary":"Run the access check now; answers with the check and what moved since the previous one.","description":"Run the access check now; answers with the check and what moved since the previous one. Needs a verified domain where verification is required (`403` `verify_first`): the check is about 130 requests to the site.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"checkedAt":{"type":"string","format":"date-time"},"urls":{"type":"number"},"changes":{"type":"array","items":{"type":"object","properties":{"text":{"type":"string"},"severity":{"type":"string","enum":["info","mid","bad"]}},"required":["text","severity"]}}},"required":["id","checkedAt","urls","changes"]}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"analyst","x-vercatus-key-scopes":["write"]}},"/sites/{id}/verify":{"post":{"operationId":"postSitesByIdVerify","tags":["Sites"],"summary":"Check ownership now.","description":"`{ method? }`: check ownership now. By default via the DNS record or meta tag, which also upgrades a site verified through Search Console; with `{ \"method\": \"search_console\" }`, via the site's Search Console connection: every property its account can see is checked, and an owner or full user of the Domain property (or of the exact URL-prefix property) verifies the site. Says what was found when it fails; `400` when Search Console is not connected. On the free report, a verified domain starts the run and `freeRunId` names it.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"method":{"type":"string"}}}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"anyOf":[{"type":"object","properties":{"ok":{"type":"boolean","enum":[true]},"method":{"anyOf":[{"type":"string","enum":["meta","dns","workspace"]},{"type":"null"}]},"via":{"anyOf":[{"type":"string","enum":["meta","dns","workspace"]},{"type":"null"}]},"detail":{"type":"string"},"freeRunId":{"type":"null"}},"required":["ok","method","via","detail","freeRunId"]},{"type":"object","properties":{"ok":{"type":"boolean","enum":[false]},"code":{"type":"string"},"error":{"type":"string"},"detail":{"type":"string"}},"required":["ok","code","error","detail"]},{"type":"object","properties":{"ok":{"type":"boolean","enum":[false]},"found":{"type":"array","items":{"type":"string"}},"code":{"type":"string"},"error":{"type":"string"},"detail":{"type":"string"}},"required":["ok","found","code","error","detail"]},{"type":"object","properties":{"ok":{"type":"boolean","enum":[true]},"method":{"type":"string"},"via":{"type":"string"},"property":{"type":"string"},"detail":{"type":"string"},"freeRunId":{"anyOf":[{"type":"string"},{"type":"null"}]},"firstRunId":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["ok","method","via","property","detail","freeRunId","firstRunId"]},{"type":"object","properties":{"via":{"type":"string","enum":["meta","dns"]},"freeRunId":{"anyOf":[{"type":"string"},{"type":"null"}]},"firstRunId":{"anyOf":[{"type":"string"},{"type":"null"}]},"code":{"type":"string"},"error":{"type":"string"},"ok":{"type":"boolean"},"method":{"type":"string","enum":["meta","dns"]},"detail":{"type":"string"},"found":{"type":"array","items":{"type":"string"}}},"required":["freeRunId","firstRunId","ok","detail"]}]}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"analyst","x-vercatus-key-scopes":["write"]}},"/free-report":{"get":{"operationId":"getFreeReport","tags":["Billing"],"summary":"The free report of a workspace that already had one: its run and where it stands.","description":"The free report of a workspace that already had one: its run and where it stands. No free report is started any more, so this is null on a paid plan and for every workspace without one.","responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"anyOf":[{"type":"null"},{"anyOf":[{"type":"object","properties":{"waiting":{"type":"null"},"reason":{"type":"null"},"plan":{"type":"string"},"intendedPlan":{"anyOf":[{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"}},"required":["id","name"]},{"type":"null"}]},"intendedInterval":{"type":"string","enum":["month","year"]},"site":{"anyOf":[{"type":"object","properties":{"id":{"type":"string"},"host":{"type":"string"},"verified":{"type":"boolean"}},"required":["id","host","verified"]},{"type":"null"}]},"run":{"anyOf":[{"type":"object","properties":{"id":{"type":"string"},"status":{"type":"string","enum":["paused","pending","queued","running","completed","failed"]}},"required":["id","status"]},{"type":"null"}]}},"required":["waiting","reason","plan","intendedPlan","intendedInterval","site","run"]},{"type":"object","properties":{"waiting":{"type":"string"},"reason":{"type":"null"},"plan":{"type":"string"},"intendedPlan":{"anyOf":[{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"}},"required":["id","name"]},{"type":"null"}]},"intendedInterval":{"type":"string","enum":["month","year"]},"site":{"anyOf":[{"type":"object","properties":{"id":{"type":"string"},"host":{"type":"string"},"verified":{"type":"boolean"}},"required":["id","host","verified"]},{"type":"null"}]},"run":{"anyOf":[{"type":"object","properties":{"id":{"type":"string"},"status":{"type":"string","enum":["paused","pending","queued","running","completed","failed"]}},"required":["id","status"]},{"type":"null"}]}},"required":["waiting","reason","plan","intendedPlan","intendedInterval","site","run"]},{"type":"object","properties":{"waiting":{"type":"string","enum":["email","run","blocked","plan","domain"]},"reason":{"type":"string"},"plan":{"type":"string"},"intendedPlan":{"anyOf":[{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"}},"required":["id","name"]},{"type":"null"}]},"intendedInterval":{"type":"string","enum":["month","year"]},"site":{"anyOf":[{"type":"object","properties":{"id":{"type":"string"},"host":{"type":"string"},"verified":{"type":"boolean"}},"required":["id","host","verified"]},{"type":"null"}]},"run":{"anyOf":[{"type":"object","properties":{"id":{"type":"string"},"status":{"type":"string","enum":["paused","pending","queued","running","completed","failed"]}},"required":["id","status"]},{"type":"null"}]}},"required":["waiting","reason","plan","intendedPlan","intendedInterval","site","run"]}]}]}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"viewer","x-vercatus-key-scopes":["read"]}},"/onboarding":{"get":{"operationId":"getOnboarding","tags":["Service"],"summary":"Where the workspace stands between sign-up and its first report (ONBOARDING-PLAN.md §1.4): the plan and whether it is paid, the plan picked on the pricing page,","description":"Where the workspace stands between sign-up and its first report (ONBOARDING-PLAN.md §1.4): the plan and whether it is paid, the plan picked on the pricing page, the site it is about, its proof, its first full run and the step to show. The setup page (/setup) and Home read it.","responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"anyOf":[{"type":"object","properties":{"plan":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"}},"required":["id","name"]},"paid":{"type":"boolean"},"status":{"type":"string"},"intendedPlan":{"anyOf":[{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"}},"required":["id","name"]},{"type":"null"}]},"intendedInterval":{"type":"string","enum":["month","year"]},"emailVerified":{"type":"boolean"},"site":{"anyOf":[{"type":"object","properties":{"id":{"type":"string"},"host":{"type":"string"},"verified":{"type":"boolean"},"method":{"anyOf":[{"type":"string"},{"type":"null"}]},"token":{"anyOf":[{"type":"string"},{"type":"null"}]},"searchConsole":{"type":"boolean"}},"required":["id","host","verified","method","token","searchConsole"]},{"type":"null"}]},"sites":{"type":"number"},"run":{"anyOf":[{"type":"object","properties":{"id":{"type":"string"},"status":{"type":"string"},"trigger":{"anyOf":[{"type":"string"},{"type":"null"}]},"finishedAt":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["id","status","trigger","finishedAt"]},{"type":"null"}]},"step":{"type":"string","enum":["paused","site","running","failed","done","checkout","verify","starting"]},"baselineOnly":{"type":"boolean"},"paidAt":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["plan","paid","status","intendedPlan","intendedInterval","emailVerified","site","sites","run","step","baselineOnly","paidAt"]},{"type":"null"}]}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"viewer","x-vercatus-key-scopes":["read"]}},"/usage":{"get":{"operationId":"getUsage","tags":["Portfolio and board"],"summary":"Plan, per-site allowance used this month, runs this month.","description":"Plan, per-site allowance used this month, runs this month.","responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"plan":{"anyOf":[{"$ref":"#/components/schemas/Shaper8h97e"},{"type":"null"}]},"allowance":{"type":"object","properties":{"siteCount":{"type":"object","properties":{"used":{"type":"number"},"limit":{"anyOf":[{"type":"number"},{"type":"null"}]}},"required":["used","limit"]},"pagesPerRun":{"anyOf":[{"type":"number"},{"type":"null"}]},"sites":{"type":"array","items":{"type":"object","properties":{"siteId":{"type":"string"},"host":{"type":"string"},"verified":{"type":"boolean"},"lastRun":{"anyOf":[{"type":"string"},{"type":"null"}]},"full":{"type":"object","properties":{"used":{"type":"number"},"limit":{"anyOf":[{"type":"number"},{"type":"null"}]}},"required":["used","limit"]},"light":{"type":"object","properties":{"used":{"type":"number"},"limit":{"anyOf":[{"type":"number"},{"type":"null"}]}},"required":["used","limit"]}},"required":["siteId","host","verified","lastRun","full","light"]}},"unmeteredUntil":{"anyOf":[{"type":"string"},{"type":"null"}]},"window":{"type":"object","properties":{"start":{"type":"string"},"end":{"type":"string"},"billingMonth":{"type":"boolean"}},"required":["start","end","billingMonth"]}},"required":["siteCount","pagesPerRun","sites","unmeteredUntil","window"]},"runs":{},"pagesFetched":{"type":"number"},"renders":{"type":"number"},"cost":{"anyOf":[{"type":"object","properties":{"basis":{"type":"string"},"tokens":{"type":"number"},"usd":{},"monthlyTokenBudget":{"anyOf":[{"type":"number"},{"type":"null"}]}},"required":["basis","tokens","usd","monthlyTokenBudget"]},{"type":"null"}]}},"required":["plan","allowance","runs","pagesFetched","renders","cost"]}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"viewer","x-vercatus-key-scopes":["read"]}},"/board":{"get":{"operationId":"getBoard","tags":["Portfolio and board"],"summary":"Reads the board as it stood at the end of that month; decision states ride along, keyed by site and decision text.","description":"`?month=YYYY-MM` reads the board as it stood at the end of that month; decision states ride along, keyed by site and decision text.","parameters":[{"name":"month","in":"query","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"generatedAt":{"type":"string","format":"date-time"},"month":{"anyOf":[{"type":"string"},{"type":"null"}]},"months":{"type":"array","items":{"type":"string"}},"totals":{"type":"object","properties":{"crawl":{"anyOf":[{"type":"object","properties":{"requests":{"type":"number"},"previous":{"type":"number"},"previousComplete":{"type":"boolean"},"refused":{"type":"number"},"crawlers":{"type":"number"},"sites":{"type":"number"}},"required":["requests","previous","previousComplete","refused","crawlers","sites"]},{"type":"null"}]},"traffic":{"anyOf":[{"type":"object","properties":{"sessions":{"type":"number"},"previous":{"type":"number"},"previousComplete":{"type":"boolean"},"keyEvents":{"type":"number"},"sites":{"type":"number"}},"required":["sessions","previous","previousComplete","keyEvents","sites"]},{"type":"null"}]},"sites":{"type":"number"},"aiReach":{"type":"object","properties":{"pct":{"type":"number"},"served":{"type":"number"},"probed":{"type":"number"}},"required":["pct","served","probed"]},"answer":{"type":"object","properties":{"pct":{"type":"number"},"answered":{"type":"number"},"asked":{"type":"number"}},"required":["pct","answered","asked"]},"buying":{"type":"object","properties":{"pct":{"type":"number"},"answered":{"type":"number"},"asked":{"type":"number"}},"required":["pct","answered","asked"]},"critical":{"type":"number"},"high":{"type":"number"},"sitesBlockingAI":{"type":"number"},"change":{"anyOf":[{"type":"object","properties":{"resolved":{"type":"number"},"new":{"type":"number"},"sitesCompared":{"type":"number"}},"required":["resolved","new","sitesCompared"]},{"type":"null"}]}},"required":["crawl","traffic","sites","aiReach","answer","buying","critical","high","sitesBlockingAI","change"]},"sites":{"type":"array","items":{"type":"object","properties":{"siteId":{"type":"string"},"host":{"type":"string"},"name":{"anyOf":[{"type":"string"},{"type":"null"}]},"runDate":{"type":"string","format":"date-time"},"numbers":{"type":"object","properties":{"workflowId":{"type":"string"},"createdAt":{"type":"string","format":"date-time"},"pagesSampled":{"type":"number"},"templates":{"type":"number"},"aiReach":{"type":"object","properties":{"served":{"type":"number"},"probed":{"type":"number"},"pct":{"type":"number"}},"required":["served","probed","pct"]},"answer":{"type":"object","properties":{"asked":{"type":"number"},"answered":{"type":"number"},"partial":{"type":"number"},"unanswered":{"type":"number"},"pct":{"type":"number"}},"required":["asked","answered","partial","unanswered","pct"]},"buying":{"type":"object","properties":{"asked":{"type":"number"},"answered":{"type":"number"},"pct":{"type":"number"}},"required":["asked","answered","pct"]},"evidence":{"type":"object","properties":{"backed":{"type":"number"},"total":{"type":"number"},"pct":{"type":"number"}},"required":["backed","total","pct"]},"findings":{"type":"object","properties":{"critical":{"type":"number"},"high":{"type":"number"},"medium":{"type":"number"},"low":{"type":"number"},"info":{"type":"number"},"total":{"type":"number"}},"required":["critical","high","medium","low","info","total"]},"change":{"anyOf":[{"type":"object","properties":{"previousWorkflowId":{"type":"string"},"resolved":{"type":"number"},"new":{"type":"number"},"stillOpen":{"type":"number"},"aiReachDelta":{"anyOf":[{"type":"number"},{"type":"null"}]},"answerDelta":{"anyOf":[{"type":"number"},{"type":"null"}]},"citedDelta":{"anyOf":[{"type":"number"},{"type":"null"}]},"citedMatched":{},"citedByEngine":{},"citedPartial":{"type":"boolean"}},"required":["previousWorkflowId","resolved","new","stillOpen","aiReachDelta","answerDelta","citedDelta"]},{"type":"null"}]},"cited":{"anyOf":[{"type":"object","properties":{"asked":{"type":"number"},"cited":{"type":"number"},"pct":{"type":"number"},"engines":{},"byEngine":{},"completeness":{},"partial":{"type":"boolean"}},"required":["asked","cited","pct","engines"]},{"type":"null"}]},"verified":{"type":"object","properties":{"confirmed":{"type":"number"},"refuted":{"type":"number"},"allConfirmed":{"type":"number"},"allRefuted":{"type":"number"},"pct":{"type":"number"}},"required":["confirmed","refuted","allConfirmed","allRefuted","pct"]}},"required":["workflowId","createdAt","pagesSampled","templates","aiReach","answer","buying","evidence","findings","change","cited","verified"]},"brief":{"anyOf":[{"type":"object","properties":{"headline":{"type":"string"},"position":{"type":"string"},"risks":{"type":"array","items":{}},"decisions":{"type":"array","items":{}},"progress":{"type":"string"},"caveat":{"type":"string"},"glossary":{"type":"array","items":{}},"plainFindings":{"type":"array","items":{}}},"required":["headline","position","risks","decisions","progress","caveat","glossary","plainFindings"]},{"type":"null"}]},"workflowId":{"type":"string"},"previous":{"anyOf":[{"type":"object","properties":{"runDate":{"type":"string","format":"date-time"},"workflowId":{"type":"string"},"decisions":{"type":"array","items":{}}},"required":["runDate","workflowId","decisions"]},{"type":"null"}]},"traffic":{"anyOf":[{"$ref":"#/components/schemas/Shape3wkeap"},{"type":"null"}]},"crawl":{"anyOf":[{"$ref":"#/components/schemas/Shape11q995e"},{"type":"null"}]}},"required":["siteId","host","name","runDate","numbers","brief","workflowId"]}},"decisions":{"type":"object","additionalProperties":{"type":"object","additionalProperties":{"type":"object","properties":{"state":{"type":"string"},"note":{"anyOf":[{"type":"string"},{"type":"null"}]},"by":{"anyOf":[{"type":"string"},{"type":"null"}]},"at":{"type":"string","format":"date-time"}},"required":["state","note","by","at"]}}}},"required":["generatedAt","month","totals","sites","decisions"]}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"viewer","x-vercatus-key-scopes":["read"]}},"/board/decisions":{"put":{"operationId":"putBoardDecisions","tags":["Service"],"summary":"What the organisation did with a decision the brief asked for; state: null clears it.","description":"`{ siteId, decision, state, note? }`: what the organisation did with a decision the brief asked for; `state: null` clears it.","requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"siteId":{},"decision":{},"state":{},"note":{}},"required":["siteId","decision","state"]}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean","enum":[true]},"key":{"type":"string"},"state":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["ok","key"]}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"admin","x-vercatus-key-scopes":null}},"/board/report":{"get":{"operationId":"getBoardReport","tags":["Portfolio and board"],"summary":"The board brief across sites as standalone HTML, a view of Results (PHASE-4.md §6: Answer Share since the start, each shipped play's verdict, the wins, the play","description":"The board brief across sites as standalone HTML, a view of Results (PHASE-4.md §6: Answer Share since the start, each shipped play's verdict, the wins, the plays waiting for a read, the outcomes); `?format=pdf` for a PDF; `?month=YYYY-MM` the 28 days to the end of that month; `?sites=a,b` some sites. Query: `?download=` (`1` sends it as a file).","parameters":[{"name":"format","in":"query","required":false,"schema":{"type":"string"}},{"name":"month","in":"query","required":false,"schema":{"type":"string"}},{"name":"sites","in":"query","required":false,"schema":{"type":"string"}},{"name":"download","in":"query","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/pdf":{"schema":{"type":"string","format":"binary"}},"text/html":{"schema":{"type":"string"}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"viewer","x-vercatus-key-scopes":["read","export"]}},"/value":{"get":{"operationId":"getValue","tags":["Service"],"summary":"What the subscription did (APP-DESIGN-PASS-3.md §3.6): per site, the first and the latest figures in the window, the fixes the runs confirmed, the pages that be","description":"What the subscription did (APP-DESIGN-PASS-3.md §3.6): per site, the first and the latest figures in the window, the fixes the runs confirmed, the pages that became readable and the questions newly answered. Honest when nothing moved: the figures say so and the page points at the open list. Query: `?days=` (days back from today).","parameters":[{"name":"days","in":"query","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"days":{"type":"number"},"from":{"type":"string"},"sites":{"type":"array","items":{}},"totals":{"type":"object","properties":{"sites":{"type":"number"},"runs":{"type":"number"},"fixesConfirmed":{"type":"number"},"fixesRefuted":{"type":"number"},"pagesUnblocked":{},"resolved":{},"newFindings":{},"runsFull":{},"runsLight":{},"traffic":{"anyOf":[{"type":"object","properties":{"sessions":{},"previous":{},"previousComplete":{"type":"boolean"},"keyEvents":{},"sites":{"type":"number"}},"required":["sessions","previous","previousComplete","keyEvents","sites"]},{"type":"null"}]},"crawl":{"anyOf":[{"type":"object","properties":{"requests":{},"previous":{},"previousComplete":{"type":"boolean"},"refused":{},"sites":{"type":"number"}},"required":["requests","previous","previousComplete","refused","sites"]},{"type":"null"}]}},"required":["sites","runs","fixesConfirmed","fixesRefuted","pagesUnblocked","resolved","newFindings","runsFull","runsLight","traffic","crawl"]},"biggest":{"type":"array","items":{"type":"object","properties":{"host":{},"title":{},"severity":{},"at":{},"effect":{},"traffic":{"anyOf":[{"type":"object","properties":{"sentence":{"type":"string"},"treated":{"type":"object","properties":{"before":{"type":"number"},"after":{"type":"number"}},"required":["before","after"]},"rest":{"anyOf":[{"type":"object","properties":{"before":{"type":"number"},"after":{"type":"number"}},"required":["before","after"]},{"type":"null"}]},"weeksBefore":{"type":"number"},"weeksAfter":{"type":"number"}},"required":["sentence","treated","rest","weeksBefore","weeksAfter"]},{"type":"null"}]}},"required":["host","title","severity","at","effect","traffic"]}},"plan":{"anyOf":[{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"}},"required":["id","name"]},{"type":"null"}]}},"required":["days","from","sites","totals","biggest","plan"]}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"viewer","x-vercatus-key-scopes":["read"]}},"/findings/{id}/handoff":{"get":{"operationId":"getFindingsByIdHandoff","tags":["Findings"],"summary":"One finding as a brief; ?agent=claude|codex|llm (default claude), ?download=1 for a .md file.","description":"One finding as a brief; `?agent=claude|codex|llm` (default claude), `?download=1` for a .md file.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"agent","in":"query","required":false,"schema":{"type":"string"}},{"name":"download","in":"query","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"text/markdown":{"schema":{"type":"string"}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"viewer","x-vercatus-key-scopes":["read"]}},"/findings/handoff":{"post":{"operationId":"postFindingsHandoff","tags":["Findings"],"summary":"Several findings as one task list, most severe first as given: { ids, agent?","description":"Several findings as one task list, most severe first as given: `{ ids, agent? }`; the answer is Markdown.","requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"ids":{},"agent":{"type":"string","enum":["llm","writer","claude","codex"]}}}}}},"responses":{"200":{"description":"Success","content":{"text/markdown":{"schema":{"type":"string"}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"viewer","x-vercatus-key-scopes":["read"]}},"/workflows/{id}/intents/{intentId}/handoff":{"get":{"operationId":"getWorkflowsByIdIntentsByIntentIdHandoff","tags":["Results of a run"],"summary":"A question the site does not answer as a writing brief; ?agent=writer|claude|codex|llm (default writer).","description":"A question the site does not answer as a writing brief; `?agent=writer|claude|codex|llm` (default writer). Query: `?download=` (`1` sends it as a file).","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"intentId","in":"path","required":true,"schema":{"type":"string"}},{"name":"agent","in":"query","required":false,"schema":{"type":"string"}},{"name":"download","in":"query","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"text/markdown":{"schema":{"type":"string"}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"viewer","x-vercatus-key-scopes":["read"]}},"/review":{"get":{"operationId":"getReview","tags":["Service"],"summary":"The quarterly review (RETENTION-PLAN.md §5): the window's Results with a before-and-after narrative per site, the fixes that held, the goals and the decisions.","description":"The quarterly review (RETENTION-PLAN.md §5): the window's Results with a before-and-after narrative per site, the fixes that held, the goals and the decisions. `?days=90` (28 to 366) up to now, or `?from=&to=` ISO dates; `?siteIds=a,b` for some sites (every site by default). Questions cited is compared first panel to last on the questions both asked. Deprecated (PHASE-4.md): Results (GET /api/sites/:id/results) replaces it on the screens; kept for MCP, exports and the Looker connector.","parameters":[{"name":"days","in":"query","required":false,"schema":{"type":"string"}},{"name":"from","in":"query","required":false,"schema":{"type":"string"}},{"name":"to","in":"query","required":false,"schema":{"type":"string"}},{"name":"siteIds","in":"query","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"brand":{"type":"object","properties":{"productName":{"anyOf":[{"type":"string"},{"type":"null"}]},"accentColor":{"anyOf":[{"type":"string"},{"type":"null"}]},"defaultName":{"type":"string"},"logoUrl":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["productName","accentColor","defaultName"]},"orgName":{"type":"string"},"from":{"type":"string"},"to":{"type":"string"},"generatedAt":{"type":"string"},"days":{"type":"number"},"sites":{"type":"array","items":{"type":"object","properties":{"siteId":{"type":"string"},"host":{"type":"string"},"name":{"anyOf":[{"type":"string"},{"type":"null"}]},"runs":{"type":"number"},"runsFull":{"type":"number"},"first":{"anyOf":[{"$ref":"#/components/schemas/Shapeava2n7"},{"type":"null"}]},"latest":{"anyOf":[{"$ref":"#/components/schemas/Shapeava2n7"},{"type":"null"}]},"delta":{"type":"object","properties":{"aiReach":{"anyOf":[{"type":"number"},{"type":"null"}]},"answer":{"anyOf":[{"type":"number"},{"type":"null"}]},"buying":{"anyOf":[{"type":"number"},{"type":"null"}]},"cited":{"anyOf":[{"type":"number"},{"type":"null"}]},"critical":{"anyOf":[{"type":"number"},{"type":"null"}]}},"required":["aiReach","answer","buying","cited","critical"]},"citedChange":{"anyOf":[{"type":"object","properties":{"firstRunId":{"type":"string"},"latestRunId":{"type":"string"},"questions":{"type":"number"},"before":{"type":"number"},"now":{"type":"number"},"partial":{"type":"boolean"},"byEngine":{"type":"object","additionalProperties":{}}},"required":["firstRunId","latestRunId","questions","before","now","partial","byEngine"]},{"type":"null"}]},"fixesConfirmed":{"type":"array","items":{"type":"object","properties":{"title":{"type":"string"},"severity":{"type":"string"},"at":{"type":"string"}},"required":["title","severity","at"]}},"fixesRefuted":{"type":"number"},"resolved":{"type":"number"},"newFindings":{"type":"number"},"pagesUnblocked":{"type":"number"},"pagesBlocked":{"type":"number"},"traffic":{"anyOf":[{"$ref":"#/components/schemas/Shape3wkeap"},{"type":"null"}]},"crawl":{"anyOf":[{"$ref":"#/components/schemas/Shape11q995e"},{"type":"null"}]},"narrative":{"type":"array","items":{"type":"string"}}},"required":["siteId","host","name","runs","runsFull","first","latest","delta","fixesConfirmed","fixesRefuted","resolved","newFindings","pagesUnblocked","pagesBlocked","traffic","crawl","narrative"]}},"totals":{"type":"object","properties":{"sites":{"type":"number"},"runsFull":{"type":"number"},"runsLight":{"type":"number"},"fixesConfirmed":{"type":"number"},"fixesRefuted":{"type":"number"},"resolved":{"type":"number"},"newFindings":{"type":"number"},"pagesUnblocked":{"type":"number"},"critical":{"type":"number"},"high":{"type":"number"},"traffic":{"anyOf":[{"type":"object","properties":{"sessions":{"type":"number"},"previous":{"type":"number"},"previousComplete":{"type":"boolean"},"keyEvents":{"type":"number"},"sites":{"type":"number"}},"required":["sessions","previous","previousComplete","keyEvents","sites"]},{"type":"null"}]},"crawl":{"anyOf":[{"type":"object","properties":{"requests":{"type":"number"},"previous":{"type":"number"},"previousComplete":{"type":"boolean"},"refused":{"type":"number"},"sites":{"type":"number"}},"required":["requests","previous","previousComplete","refused","sites"]},{"type":"null"}]}},"required":["sites","runsFull","runsLight","fixesConfirmed","fixesRefuted","resolved","newFindings","pagesUnblocked","critical","high","traffic","crawl"]},"goals":{"type":"object","properties":{"reached":{"type":"array","items":{"type":"string"}},"missed":{"type":"array","items":{"type":"string"}},"open":{"type":"array","items":{"type":"string"}}},"required":["reached","missed","open"]},"decisions":{"type":"array","items":{"type":"object","properties":{"host":{"type":"string"},"decision":{"type":"string"},"state":{"type":"string"},"by":{"anyOf":[{"type":"string"},{"type":"null"}]},"at":{"type":"string"}},"required":["host","decision","state","by","at"]}},"narrative":{"type":"array","items":{"type":"string"}}},"required":["brand","orgName","from","to","generatedAt","days","sites","totals","goals","decisions","narrative"]}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"deprecated":true,"x-vercatus-role":"viewer","x-vercatus-key-scopes":["read"]}},"/review/report":{"get":{"operationId":"getReviewReport","tags":["Service"],"summary":"The review as a standalone document for the board pack, same window and ?siteIds= query; ?format=pdf for a PDF.","description":"The review as a standalone document for the board pack, same window and `?siteIds=` query; `?format=pdf` for a PDF. Deprecated (PHASE-4.md): Results (GET /api/sites/:id/results) replaces it on the screens; kept for MCP, exports and the Looker connector. Query: `?days=` (days back from today), `?download=` (`1` sends it as a file), `?from=` (start of the period (an ISO date)), `?to=` (end of the period (an ISO date)).","parameters":[{"name":"siteIds","in":"query","required":false,"schema":{"type":"string"}},{"name":"format","in":"query","required":false,"schema":{"type":"string"}},{"name":"days","in":"query","required":false,"schema":{"type":"string"}},{"name":"download","in":"query","required":false,"schema":{"type":"string"}},{"name":"from","in":"query","required":false,"schema":{"type":"string"}},{"name":"to","in":"query","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/pdf":{"schema":{"type":"string","format":"binary"}},"text/html":{"schema":{"type":"string"}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"deprecated":true,"x-vercatus-role":"viewer","x-vercatus-key-scopes":["read","export"]}},"/review/links":{"get":{"operationId":"getReviewLinks","tags":["Service"],"summary":"The workspace's read-only review links: label, window, expiry, views; the secret is never shown again.","description":"The workspace's read-only review links: label, window, expiry, views; the secret is never shown again. A caller limited to some sites sees the links for its sites only.","responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/Shape1942tjx"}}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"viewer","x-vercatus-key-scopes":["read"]},"post":{"operationId":"postReviewLinks","tags":["Service"],"summary":"Create a read-only link for a review window: { from, to, siteIds?, label?, expiresInDays?","description":"Create a read-only link for a review window: `{ from, to, siteIds?, label?, expiresInDays? (1 to 365, default 90) }`. The URL is in the answer once; whoever holds it reads the review for that window and those sites (every site when none are named), without an account, until it expires or is revoked. Admins; a client for its own sites (the link then shows those, or the ones named among them).","requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"from":{"type":"string"},"to":{"type":"string"},"days":{"type":"number"},"label":{"type":"string"},"expiresInDays":{"type":"number"},"siteIds":{"anyOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]}}}}}},"responses":{"201":{"description":"Created","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"label":{"anyOf":[{"type":"string"},{"type":"null"}]},"from":{"type":"string"},"to":{"type":"string"},"siteIds":{"anyOf":[{"type":"array","items":{"type":"string"}},{"type":"null"}]},"createdBy":{"anyOf":[{"type":"string"},{"type":"null"}]},"createdAt":{"type":"string"},"expiresAt":{"type":"string"},"revokedAt":{"anyOf":[{"type":"string"},{"type":"null"}]},"views":{"type":"number"},"lastViewedAt":{"anyOf":[{"type":"string"},{"type":"null"}]},"url":{"type":"string"}},"required":["id","label","from","to","siteIds","createdBy","createdAt","expiresAt","revokedAt","views","lastViewedAt","url"]}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"viewer","x-vercatus-key-scopes":["write"]}},"/review/links/{id}":{"delete":{"operationId":"deleteReviewLinksById","tags":["Service"],"summary":"Revoke a read-only link; the URL stops working at once.","description":"Revoke a read-only link; the URL stops working at once. Admins; a client for a link that shows only its sites.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Shape1942tjx"}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"viewer","x-vercatus-key-scopes":["write"]}},"/overview":{"get":{"operationId":"getOverview","tags":["Portfolio and board"],"summary":"The overview: what happened since last week, what needs a person, how each site is trending, and the one knowledge-base entry the current worst findings rest on","description":"The overview: what happened since last week, what needs a person, how each site is trending, and the one knowledge-base entry the current worst findings rest on. Sentences first; numbers behind them.","responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"since":{"type":"object","properties":{"days":{"type":"number"},"runsCompleted":{"type":"number"},"runsFailed":{"type":"number"},"runsLive":{"type":"number"},"newSevere":{"type":"number"},"regressed":{"type":"number"},"resolved":{"type":"number"},"fixesConfirmed":{"type":"number"},"fixesRefuted":{"type":"number"},"sitesNewlyRefusing":{"type":"number"},"sitesNewlyServed":{"type":"number"}},"required":["days","runsCompleted","runsFailed","runsLive","newSevere","regressed","resolved","fixesConfirmed","fixesRefuted","sitesNewlyRefusing","sitesNewlyServed"]},"visit":{"type":"object","properties":{"from":{"anyOf":[{"type":"string"},{"type":"null"}]},"items":{"type":"array","items":{}}},"required":["from","items"]},"nextRunAt":{},"sites":{"type":"array","items":{}},"summary":{"type":"object","properties":{"sites":{"type":"number"},"improved":{"type":"number"},"worsened":{"type":"number"},"withRuns":{"type":"number"}},"required":["sites","improved","worsened","withRuns"]},"todo":{"type":"array","items":{"type":"object","properties":{"kind":{"type":"string"},"severity":{"type":"string","enum":["info","mid","bad"]},"label":{"type":"string"},"detail":{"type":"string"},"href":{"type":"string"},"action":{"type":"object","properties":{"label":{"type":"string"},"method":{"type":"string"},"path":{"type":"string"}},"required":["label","method","path"]}},"required":["kind","severity","label","href"]}},"tip":{},"gettingStarted":{"anyOf":[{"type":"array","items":{"anyOf":[{"type":"object","properties":{"key":{"type":"string"},"label":{"type":"string"},"done":{"type":"boolean"},"href":{"type":"string"}},"required":["key","label","done","href"]},{"type":"object","properties":{"key":{"type":"string"},"label":{"type":"string"},"done":{"type":"boolean"},"href":{"type":"string"},"optional":{"type":"boolean"}},"required":["key","label","done","href","optional"]},{"type":"object","properties":{"key":{"type":"string"},"label":{"type":"string"},"done":{"type":"boolean"},"href":{"type":"string"},"hint":{"type":"string"}},"required":["key","label","done","href","hint"]}]}},{"type":"null"}]},"plan":{"anyOf":[{"type":"object","properties":{"fullRunsPerMonth":{"type":"number"},"lightRunsPerMonth":{"type":"number"}},"required":["fullRunsPerMonth","lightRunsPerMonth"]},{"type":"null"}]}},"required":["since","visit","nextRunAt","sites","summary","todo","tip","gettingStarted","plan"]}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"viewer","x-vercatus-key-scopes":["read"]}},"/portfolio":{"get":{"operationId":"getPortfolio","tags":["Portfolio and board"],"summary":"Portfolio: one row per site with its latest completed run, critical and high counts, AI-blocked pages, coverage, new and resolved findings.","description":"Portfolio: one row per site with its latest completed run, critical and high counts, AI-blocked pages, coverage, new and resolved findings. Answers \"what is wrong and what changed across everything I own\" without opening a run.","responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"site_id":{"type":"string"},"host":{"type":"string"},"verified_at":{"anyOf":[{"type":"string"},{"type":"null"}]},"workflow_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"finished_at":{"anyOf":[{"type":"string"},{"type":"null"}]},"last_kind":{"anyOf":[{"type":"string","enum":["full","light"]},{"type":"null"}]},"full_workflow_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"last_status":{"anyOf":[{"type":"string"},{"type":"null"}]},"last_step":{"anyOf":[{"type":"string"},{"type":"null"}]},"critical":{"anyOf":[{"type":"number"},{"type":"null"}]},"high":{"anyOf":[{"type":"number"},{"type":"null"}]},"findings":{"anyOf":[{"type":"number"},{"type":"null"}]},"pages":{"anyOf":[{"type":"number"},{"type":"null"}]},"ai_blocked":{"anyOf":[{"type":"number"},{"type":"null"}]},"simulated":{"anyOf":[{"type":"number"},{"type":"null"}]},"answered":{"anyOf":[{"type":"number"},{"type":"null"}]},"new_findings":{"anyOf":[{"type":"number"},{"type":"null"}]},"resolved_findings":{"anyOf":[{"type":"number"},{"type":"null"}]}},"required":["site_id","host","verified_at","workflow_id","finished_at","last_kind","full_workflow_id","last_status","last_step","critical","high","findings","pages","ai_blocked","simulated","answered","new_findings","resolved_findings"]}}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"viewer","x-vercatus-key-scopes":["read"]}},"/findings":{"get":{"operationId":"getFindings","tags":["Findings"],"summary":"Findings inbox across the org's latest runs, filterable; most severe first.","description":"Findings inbox across the org's latest runs, filterable; most severe first. `?limit=` (500, the most) and `?cursor=` (the `x-next-cursor` header of the previous page) page through it; `?envelope=1` answers `{ items, nextCursor }`. Query: `?category=` (a finding category), `?run=` (one dated run's id instead of each site's latest), `?severity=` (critical, high, medium, low or info), `?siteId=` (one site), `?status=` (a status).","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"string"}},{"name":"cursor","in":"query","required":false,"schema":{"type":"string"}},{"name":"envelope","in":"query","required":false,"schema":{"type":"string"}},{"name":"category","in":"query","required":false,"schema":{"type":"string"}},{"name":"run","in":"query","required":false,"schema":{"type":"string"}},{"name":"severity","in":"query","required":false,"schema":{"type":"string"}},{"name":"siteId","in":"query","required":false,"schema":{"type":"string"}},{"name":"status","in":"query","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"anyOf":[{"type":"array","items":{"$ref":"#/components/schemas/Shape1o8sy01"}},{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/Shape1o8sy01"}},"nextCursor":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["items","nextCursor"]}]}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"viewer","x-vercatus-key-scopes":["read"]},"patch":{"operationId":"patchFindings","tags":["Findings"],"summary":"One decision for up to 200 findings, in one transaction.","description":"`{ ids, status?, note?, plan? }`: one decision for up to 200 findings, in one transaction. Answers `{ updated, failed, results: [{ id, ok, status?, error? }] }` in the order given: a finding that is not in the workspace (or not an id) is reported, not fatal; anything else rolls the whole batch back.","requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"ids":{},"status":{},"note":{},"plan":{}},"required":["ids"]}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"updated":{"type":"number"},"failed":{"type":"number"},"results":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"ok":{"type":"boolean"},"status":{"type":"string"},"error":{"type":"string"}},"required":["id","ok"]}}},"required":["updated","failed","results"]}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"analyst","x-vercatus-key-scopes":["write"]}},"/landscape":{"get":{"operationId":"getLandscape","tags":["Service"],"summary":"The knowledge-base movements that touch this workspace: entries under its sites' open findings that were retired, updated, superseded, or whose sources changed ","description":"The knowledge-base movements that touch this workspace: entries under its sites' open findings that were retired, updated, superseded, or whose sources changed after the run that wrote the finding.","responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"text":{"type":"string"},"severity":{"type":"string","enum":["info","mid","bad"]},"id":{"type":"string"},"kind":{"type":"string","enum":["source_changed","source_gone","updated","retired","superseded","gone"]},"at":{"type":"string"},"by":{"anyOf":[{"type":"string"},{"type":"null"}]},"note":{"anyOf":[{"type":"string"},{"type":"null"}]},"claim":{"anyOf":[{"type":"string"},{"type":"null"}]},"grade":{"anyOf":[{"type":"string"},{"type":"null"}]},"replacedBy":{"anyOf":[{"type":"string"},{"type":"null"}]},"sites":{"type":"array","items":{"type":"object","properties":{"siteId":{"type":"string"},"host":{"type":"string"},"findings":{"type":"array","items":{}}},"required":["siteId","host","findings"]}}},"required":["text","severity","id","kind","at","by","note","claim","grade","replacedBy","sites"]}}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"viewer","x-vercatus-key-scopes":["read"]}},"/sites/{id}/schedule":{"get":{"operationId":"getSitesByIdSchedule","tags":["Sites"],"summary":"The site's run rhythm.","description":"The site's run rhythm. PUT replaces it; null turns scheduling off. Query: `?tz=` (the browser's IANA time zone, for the default schedule).","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"tz","in":"query","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"schedule":{"anyOf":[{"$ref":"#/components/schemas/Shapenuhyh8"},{"type":"null"}]},"nextFullAt":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"nextLightAt":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"suggested":{"$ref":"#/components/schemas/Shapenuhyh8"}},"required":["schedule","nextFullAt","nextLightAt","suggested"]}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"viewer","x-vercatus-key-scopes":["read"]},"put":{"operationId":"putSitesByIdSchedule","tags":["Sites"],"summary":"Set the site's schedule; returns the next planned runs.","description":"`{ timezone, monthlyFull: { day, hour }, weeklyLight: { weekday, hour }, paused }`: set the site's schedule; returns the next planned runs.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"schedule":{}}}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"schedule":{"anyOf":[{"$ref":"#/components/schemas/Shapenuhyh8"},{"type":"null"}]},"nextFullAt":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"nextLightAt":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]}},"required":["schedule","nextFullAt","nextLightAt"]}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"analyst","x-vercatus-key-scopes":["write"]}},"/sites/{id}/history":{"get":{"operationId":"getSitesByIdHistory","tags":["Sites"],"summary":"Runs of one site with findings by severity per run and what appeared or resolved between consecutive runs.","description":"Runs of one site with findings by severity per run and what appeared or resolved between consecutive runs. Query: `?cursor=` (the `x-next-cursor` of the previous page), `?limit=` (rows per page).","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"cursor","in":"query","required":false,"schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"site":{"$ref":"#/components/schemas/Shape12ovojy"},"runs":{"type":"array","items":{}},"nextCursor":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["site","runs","nextCursor"]}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"viewer","x-vercatus-key-scopes":["read"]}},"/workflows":{"get":{"operationId":"getWorkflows","tags":["Runs"],"summary":"Runs in this workspace, newest first, with their site and headline numbers.","description":"Runs in this workspace, newest first, with their site and headline numbers. `?limit=` (100, at most 500) and `?cursor=` (the `x-next-cursor` header of the previous page); `?envelope=1` answers `{ items, nextCursor }`. Query: `?siteId=` (one site).","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"string"}},{"name":"cursor","in":"query","required":false,"schema":{"type":"string"}},{"name":"envelope","in":"query","required":false,"schema":{"type":"string"}},{"name":"siteId","in":"query","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"anyOf":[{"type":"array","items":{}},{"type":"object","properties":{"items":{"type":"array","items":{}},"nextCursor":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["items","nextCursor"]}]}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"viewer","x-vercatus-key-scopes":["read"]},"post":{"operationId":"postWorkflows","tags":["Runs"],"summary":"Start a full or change run.","description":"`{ url, kind?, maxPages?, render?, llm?, languages?, intentCount?, perspectives? }`: start a full or change run. `402` when the site or run allowance is used up; `403` when the domain is not verified. In worker mode the run is queued and `status` is `queued`.","requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"url":{},"kind":{},"maxPages":{},"render":{},"llm":{},"languages":{},"intentCount":{},"perspectives":{}},"required":["url"]}}}},"responses":{"201":{"description":"Created","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"type":"string","enum":["paused","pending","queued","running","completed","failed"]},"error":{"anyOf":[{"type":"string"},{"type":"null"}]},"id":{"type":"string"},"createdAt":{"type":"string","format":"date-time"},"orgId":{"anyOf":[{"type":"string"},{"type":"null"}]},"kind":{"type":"string","enum":["full","light"]},"siteId":{"type":"string"},"tokenBudget":{"anyOf":[{"type":"number"},{"type":"null"}]},"tokensUsed":{"type":"number"},"inputUrl":{"type":"string"},"queuedOpts":{"anyOf":[{"type":"object","properties":{"from":{"type":"string"},"only":{"type":"array","items":{"type":"string"}},"steps":{"type":"array","items":{"type":"string"}},"rerun":{"type":"array","items":{"type":"string"}},"lease":{"type":"string"},"attempts":{"type":"number"}}},{"type":"null"}]},"config":{"$ref":"#/components/schemas/Shapexd63x"},"currentStep":{"anyOf":[{"type":"string"},{"type":"null"}]},"heartbeatAt":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"summary":{"type":"object","additionalProperties":{}},"startedAt":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"finishedAt":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"queuedAt":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]}},"required":["status","error","id","createdAt","orgId","kind","siteId","tokenBudget","tokensUsed","inputUrl","queuedOpts","config","currentStep","heartbeatAt","summary","startedAt","finishedAt","queuedAt"]}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"analyst","x-vercatus-key-scopes":["write"]}},"/estimate":{"post":{"operationId":"postEstimate","tags":["Runs"],"summary":"Pre-flight for a run of this size: { url?, kind?, pages?, render?, llm?","description":"Pre-flight for a run of this size: `{ url?, kind?, pages?, render?, llm? }` gives the allowance it consumes and what is left, requests and crawl minutes; model cost only where it is the caller's to see.","requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"url":{"type":"string"},"kind":{"type":"string","enum":["full","light"]},"pages":{"type":"number"},"intents":{"type":"number"},"render":{"type":"boolean"},"llm":{"type":"boolean"},"perspectives":{"type":"number"}}}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"baseline":{"anyOf":[{"type":"object","properties":{"id":{"type":"string"},"pages":{"type":"number"},"createdAt":{"type":"string","format":"date-time"}},"required":["id","pages","createdAt"]},{"type":"null"}]},"costBasis":{"anyOf":[{"type":"string"},{"type":"null"}]},"allowance":{"type":"object","properties":{"kind":{"type":"string"},"used":{"type":"number"},"limit":{"anyOf":[{"type":"number"},{"type":"null"}]},"host":{"anyOf":[{"type":"string"},{"type":"null"}]},"enforced":{"type":"boolean"},"unmeteredUntil":{"anyOf":[{"type":"string"},{"type":"null"}]},"resets":{"type":"string","enum":["never","monthly"]},"plan":{"anyOf":[{"type":"string"},{"type":"null"}]},"resetsAt":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["kind","used","limit","host","enforced","unmeteredUntil","resets","plan","resetsAt"]},"planPageLimit":{"anyOf":[{"type":"number"},{"type":"null"}]},"llmUsd":{"type":"number"},"llmUsdBatch":{"type":"number"},"tokens":{"type":"number"},"pages":{"type":"number"},"fetches":{"type":"number"},"crawlMinutes":{"type":"number"},"notes":{"type":"array","items":{"type":"string"}}},"required":["baseline","costBasis","allowance","planPageLimit","pages","fetches","crawlMinutes","notes"]}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"viewer","x-vercatus-key-scopes":["read"]}},"/quote":{"get":{"operationId":"getQuote","tags":["Runs"],"summary":"What this org's plan costs at a given number of sites.","description":"What this org's plan costs at a given number of sites. Query: `?sites=` (a number of sites).","parameters":[{"name":"sites","in":"query","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"anyOf":[{"type":"object","properties":{"platform":{"type":"number"},"perSite":{"type":"number"},"total":{"type":"number"},"breakdown":{"type":"array","items":{"type":"string"}},"plan":{"type":"string"},"sites":{"type":"number"}},"required":["platform","perSite","total","breakdown","plan","sites"]},{"type":"object","properties":{"error":{"type":"string"}},"required":["error"]}]}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"viewer","x-vercatus-key-scopes":["read"]}},"/workflows/{id}/resume":{"post":{"operationId":"postWorkflowsByIdResume","tags":["Runs"],"summary":"Resume a paused or failed run, re-run from a named step, or run only the named steps.","description":"`{ from?, only?, allowMore? }`: resume a paused or failed run, re-run from a named step, or run only the named steps. Continuing a failed or paused run from where it stopped is free; executing again a completed step that re-crawls the site or re-asks the answer engines (discover, fetch, cite) is a new run's worth of work and passes the same allowance as one (`402` when it is spent) and, like one, needs a verified site (`403`). A run paused at the size its plan gives a run resumes only when an owner or admin allows it to continue: `allowMore: true`, with no figure to send or to read (the server decides how far, up to twice the size its plan gives a run); without it, `402`. The API sends and receives no token numbers.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"from":{"type":"string"},"only":{"type":"array","items":{"type":"string"}},"allowMore":{"type":"boolean"}}}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"started":{"type":"boolean"}},"required":["started"]}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"analyst","x-vercatus-key-scopes":["write"]}},"/workflows/{id}":{"get":{"operationId":"getWorkflowsById","tags":["Runs"],"summary":"One run: status, every step of the pipeline in order with progress and timings (steps not reached yet are pending; steps this kind of run does not execute are s","description":"One run: status, every step of the pipeline in order with progress and timings (steps not reached yet are `pending`; steps this kind of run does not execute are `skipped` with the reason), summary and headline numbers.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"site":{"$ref":"#/components/schemas/Shape12ovojy"},"running":{"type":"boolean"},"steps":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"id":{"type":"string"},"workflowId":{"type":"string"},"name":{"type":"string"},"status":{"type":"string","enum":["pending","running","completed","failed","skipped"]},"attempt":{"type":"number"},"progress":{"anyOf":[{"type":"object","properties":{"done":{"type":"number"},"total":{"type":"number"},"note":{"type":"string"}},"required":["done","total"]},{"type":"null"}]},"output":{"anyOf":[{"type":"object","additionalProperties":{}},{"type":"null"}]},"error":{"anyOf":[{"type":"string"},{"type":"null"}]},"startedAt":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"finishedAt":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]}},"required":["id","workflowId","name","status","attempt","progress","output","error","startedAt","finishedAt"]},{"type":"object","properties":{"name":{"type":"string"},"status":{"type":"string"},"progress":{},"output":{},"error":{"anyOf":[{"type":"string"},{"type":"null"}]},"startedAt":{"anyOf":[{"anyOf":[{"type":"string"},{"type":"string","format":"date-time"}]},{"type":"null"}]},"finishedAt":{"anyOf":[{"anyOf":[{"type":"string"},{"type":"string","format":"date-time"}]},{"type":"null"}]},"attempt":{"type":"number"}},"required":["name","status","progress","output","error","startedAt","finishedAt","attempt"]}]}},"kpi":{},"status":{"type":"string","enum":["paused","pending","queued","running","completed","failed"]},"error":{"anyOf":[{"type":"string"},{"type":"null"}]},"id":{"type":"string"},"createdAt":{"type":"string","format":"date-time"},"orgId":{"anyOf":[{"type":"string"},{"type":"null"}]},"kind":{"type":"string","enum":["full","light"]},"siteId":{"type":"string"},"tokenBudget":{"anyOf":[{"type":"number"},{"type":"null"}]},"tokensUsed":{"type":"number"},"inputUrl":{"type":"string"},"queuedOpts":{"anyOf":[{"type":"object","properties":{"from":{"type":"string"},"only":{"type":"array","items":{"type":"string"}},"steps":{"type":"array","items":{"type":"string"}},"rerun":{"type":"array","items":{"type":"string"}},"lease":{"type":"string"},"attempts":{"type":"number"}}},{"type":"null"}]},"config":{"$ref":"#/components/schemas/Shapexd63x"},"currentStep":{"anyOf":[{"type":"string"},{"type":"null"}]},"heartbeatAt":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"summary":{"type":"object","additionalProperties":{}},"startedAt":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"finishedAt":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"queuedAt":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]}},"required":["running","steps","kpi","status","error","id","createdAt","orgId","kind","siteId","tokenBudget","tokensUsed","inputUrl","queuedOpts","config","currentStep","heartbeatAt","summary","startedAt","finishedAt","queuedAt"]}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"viewer","x-vercatus-key-scopes":["read"]}},"/workflows/{id}/events":{"get":{"operationId":"getWorkflowsByIdEvents","tags":["Runs"],"summary":"Server-sent events while the run is live: state on every change (all the run's steps, and the events written since the last frame), done at the end.","description":"Server-sent events while the run is live: `state` on every change (all the run's steps, and the events written since the last frame), `done` at the end. Query: `?delta=` (`1` sends only the steps that changed after the first frame).","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"delta","in":"query","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"text/event-stream":{"schema":{"type":"string","description":"Server-sent events: `event:` and `data:` lines, one blank line after each."}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"viewer","x-vercatus-key-scopes":["read"]}},"/workflows/{id}/report":{"get":{"operationId":"getWorkflowsByIdReport","tags":["Runs"],"summary":"The site audit of a completed run: the standalone branded document, the shareable artefact; ?format=pdf for a PDF, ?download=1 for a file.","description":"The site audit of a completed run: the standalone branded document, the shareable artefact; `?format=pdf` for a PDF, `?download=1` for a file.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"format","in":"query","required":false,"schema":{"type":"string"}},{"name":"download","in":"query","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/pdf":{"schema":{"type":"string","format":"binary"}},"text/html":{"schema":{"type":"string"}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"viewer","x-vercatus-key-scopes":["read","export"]}},"/workflows/{id}/email":{"post":{"operationId":"postWorkflowsByIdEmail","tags":["Runs"],"summary":"Send the report email for this run now, to the workspace's configured recipients, and say what happened.","description":"Send the report email for this run now, to the workspace's configured recipients, and say what happened.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"to":{"type":"array","items":{"type":"string"}}}}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"sent":{"type":"boolean"},"to":{"type":"array","items":{"type":"string"}},"reason":{"type":"string"},"attachments":{"type":"array","items":{"type":"string"}}},"required":["sent","to"]}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"analyst","x-vercatus-key-scopes":["write"]}},"/integrations/google/start":{"get":{"operationId":"getIntegrationsGoogleStart","tags":["Service"],"summary":"Start connecting a Google product for a site (?product=gsc for Search Console, the default, or ga4 for Analytics): redirects to Google's consent screen with tha","description":"Start connecting a Google product for a site (`?product=gsc` for Search Console, the default, or `ga4` for Analytics): redirects to Google's consent screen with that product's read scope only. Query: `?return=` (where to go afterwards), `?siteId=` (one site).","parameters":[{"name":"product","in":"query","required":false,"schema":{"type":"string"}},{"name":"return","in":"query","required":false,"schema":{"type":"string"}},{"name":"siteId","in":"query","required":false,"schema":{"type":"string"}}],"responses":{"302":{"description":"Redirect: the `Location` header says where.","headers":{"Location":{"schema":{"type":"string"}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"analyst","x-vercatus-key-scopes":["read"]}},"/integrations/google/callback":{"get":{"operationId":"getIntegrationsGoogleCallback","tags":["Service"],"summary":"Google returns here.","description":"Google returns here. The refresh token is sealed and stored on the site with the property that matches its host; the first sync runs at once. Query: `?code=` (the code Google sends back), `?error=` (an error Google sends back), `?state=` (the signed state Google sends back).","parameters":[{"name":"code","in":"query","required":false,"schema":{"type":"string"}},{"name":"error","in":"query","required":false,"schema":{"type":"string"}},{"name":"state","in":"query","required":false,"schema":{"type":"string"}}],"responses":{"302":{"description":"Redirect: the `Location` header says where.","headers":{"Location":{"schema":{"type":"string"}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"viewer","x-vercatus-key-scopes":["read"]}},"/sites/{id}/search":{"get":{"operationId":"getSitesByIdSearch","tags":["Sites"],"summary":"Search Console for a site: connection state (never the token), totals, top queries (each with its class, flags and the page it landed on most) and pages from th","description":"Search Console for a site: connection state (never the token), totals, top queries (each with its class, flags and the page it landed on most) and pages from the last sync.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"anyOf":[{"type":"object","properties":{"totals":{},"queries":{"type":"array","items":{}},"pages":{"type":"array","items":{}},"daily":{"type":"object","properties":{"hasData":{"type":"boolean"},"to":{"anyOf":[{"type":"string"},{"type":"null"}]},"from":{"anyOf":[{"type":"string"},{"type":"null"}]},"days":{"type":"array","items":{"type":"object","properties":{"day":{"type":"string"},"clicks":{"type":"number"},"impressions":{"type":"number"},"position":{"type":"number"}},"required":["day","clicks","impressions","position"]}},"last":{"type":"object","properties":{"clicks":{"type":"number"},"impressions":{"type":"number"},"ctr":{"anyOf":[{"type":"number"},{"type":"null"}]},"position":{"anyOf":[{"type":"number"},{"type":"null"}]},"days":{"type":"number"}},"required":["clicks","impressions","ctr","position","days"]},"previous":{"type":"object","properties":{"clicks":{"type":"number"},"impressions":{"type":"number"},"ctr":{"anyOf":[{"type":"number"},{"type":"null"}]},"position":{"anyOf":[{"type":"number"},{"type":"null"}]},"days":{"type":"number"}},"required":["clicks","impressions","ctr","position","days"]},"previousComplete":{"type":"boolean"}},"required":["hasData","to","from","days","last","previous","previousComplete"]},"configured":{"type":"boolean"},"connection":{"anyOf":[{"$ref":"#/components/schemas/Shapeuabwj8"},{"type":"null"}]}},"required":["totals","queries","pages","daily","configured","connection"]},{"type":"object","properties":{"totals":{"type":"null"},"queries":{"type":"array","items":{}},"pages":{"type":"array","items":{}},"configured":{"type":"boolean"},"connection":{"anyOf":[{"$ref":"#/components/schemas/Shapeuabwj8"},{"type":"null"}]}},"required":["totals","queries","pages","configured","connection"]}]}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"viewer","x-vercatus-key-scopes":["read"]},"put":{"operationId":"putSitesByIdSearch","tags":["Sites"],"summary":"Choose or change the Search Console property for a connected site, from the ones the account can read that cover its host; syncs at once.","description":"`{ property }`: choose or change the Search Console property for a connected site, from the ones the account can read that cover its host; syncs at once.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"property":{}},"required":["property"]}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"queries":{"type":"number"},"pages":{"type":"number"},"pairs":{"type":"number"},"period":{"type":"object","properties":{"start":{"type":"string"},"end":{"type":"string"}},"required":["start","end"]},"verification":{"anyOf":[{"type":"string","enum":["verify","withdraw"]},{"type":"null"}]},"history":{"anyOf":[{"type":"object","properties":{"from":{"type":"string"},"to":{"type":"string"},"rows":{"type":"number"}},"required":["from","to","rows"]},{"type":"null"}]},"busy":{"type":"boolean"},"property":{"type":"string"}},"required":["queries","pages","pairs","period","verification","property"]}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"analyst","x-vercatus-key-scopes":["write"]},"delete":{"operationId":"deleteSitesByIdSearch","tags":["Sites"],"summary":"Disconnect Search Console: the token and everything read through it or derived from it are deleted at once, and a verification that rested on the connection is ","description":"Disconnect Search Console: the token and everything read through it or derived from it are deleted at once, and a verification that rested on the connection is withdrawn (DNS and meta-tag verification stay).","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean","enum":[true]},"verificationWithdrawn":{"type":"boolean"}},"required":["ok","verificationWithdrawn"]}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"admin","x-vercatus-key-scopes":null}},"/sites/{id}/traffic":{"get":{"operationId":"getSitesByIdTraffic","tags":["Sites"],"summary":"Crawler traffic for a site (OUTCOMES-PLAN.md A.6): the connection (token shown to admins as the hook URL and the Worker snippet), and the summary over 90 days.","description":"Crawler traffic for a site (OUTCOMES-PLAN.md A.6): the connection (token shown to admins as the hook URL and the Worker snippet), and the summary over 90 days.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"anyOf":[{"type":"object","properties":{"unknown":{"type":"array","items":{"type":"object","properties":{"agent":{"type":"string"},"hits":{"type":"number"},"lastSeen":{"type":"string"}},"required":["agent","hits","lastSeen"]}},"hasData":{"type":"boolean"},"totals":{"type":"object","properties":{"crawlers7":{"type":"number"},"aiCrawlers7":{"type":"number"},"hits":{"type":"number"},"last7":{"type":"number"},"prev7":{"type":"number"},"refused7":{"type":"number"},"verified7":{"type":"number"}},"required":["crawlers7","aiCrawlers7","hits","last7","prev7","refused7","verified7"]},"crawlers":{"type":"array","items":{"type":"object","properties":{"crawler":{"type":"string"},"label":{"type":"string"},"operator":{"type":"string"},"category":{"type":"string","enum":["search","research","ai-search","assistant-fetch","training","data-broker"]},"hits":{"type":"number"},"last7":{"type":"number"},"prev7":{"type":"number"},"served":{"type":"number"},"redirected":{"type":"number"},"refused":{"type":"number"},"rateLimited":{"type":"number"},"errors":{"type":"number"},"notFound":{"type":"number"},"verified":{"type":"number"},"unverified":{"type":"number"},"unknownVerification":{"type":"number"},"templates":{"type":"number"},"lastSeen":{"type":"string"},"samplePath":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["crawler","label","operator","category","hits","last7","prev7","served","redirected","refused","rateLimited","errors","notFound","verified","unverified","unknownVerification","templates","lastSeen","samplePath"]}},"series":{"type":"object","properties":{"days":{"type":"array","items":{"type":"string"}},"crawlers":{"type":"object","additionalProperties":{"type":"array","items":{"type":"number"}}},"refused":{"type":"array","items":{"type":"number"}}},"required":["days","crawlers","refused"]},"templates":{"type":"array","items":{"type":"object","properties":{"template":{"type":"string"},"hits":{"type":"number"},"refused":{"type":"number"},"byCrawler":{"type":"object","additionalProperties":{"type":"number"}}},"required":["template","hits","refused","byCrawler"]}},"days":{"type":"number"},"since":{"type":"string"},"allowed":{"type":"boolean"},"cap":{"anyOf":[{"type":"number"},{"type":"null"}]},"connection":{"anyOf":[{"$ref":"#/components/schemas/Shapemktu07"},{"type":"null"}]}},"required":["unknown","hasData","totals","crawlers","series","templates","days","since","allowed","cap","connection"]},{"type":"object","properties":{"hasData":{"type":"boolean","enum":[false]},"allowed":{"type":"boolean"},"cap":{"anyOf":[{"type":"number"},{"type":"null"}]},"connection":{"anyOf":[{"$ref":"#/components/schemas/Shapemktu07"},{"type":"null"}]}},"required":["hasData","allowed","cap","connection"]}]}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"viewer","x-vercatus-key-scopes":["read"]},"delete":{"operationId":"deleteSitesByIdTraffic","tags":["Sites"],"summary":"Disconnect: the token stops working and the stored aggregates go.","description":"Disconnect: the token stops working and the stored aggregates go.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean","enum":[true]}},"required":["ok"]}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"admin","x-vercatus-key-scopes":null}},"/sites/{id}/traffic/connect":{"post":{"operationId":"postSitesByIdTrafficConnect","tags":["Sites"],"summary":"Turn traffic on for a site: a token, the hook URL and the Worker to deploy.","description":"Turn traffic on for a site: a token, the hook URL and the Worker to deploy.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"hookUrl":{"type":"string"},"worker":{"type":"string"}},"required":["hookUrl","worker"]}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"analyst","x-vercatus-key-scopes":["write"]}},"/sites/{id}/traffic/worker":{"get":{"operationId":"getSitesByIdTrafficWorker","tags":["Sites"],"summary":"The Worker as a file to paste.","description":"The Worker as a file to paste. Query: `?download=` (`1` sends it as a file).","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"download","in":"query","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"text/javascript":{"schema":{"type":"string"}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"analyst","x-vercatus-key-scopes":["read"]}},"/sites/{id}/traffic/upload":{"post":{"operationId":"postSitesByIdTrafficUpload","tags":["Sites"],"summary":"A log file for a site not on Cloudflare (OUTCOMES-PLAN.md A.5): the raw body, up to 200 MB, plain or gzipped, in the combined or common access-log format, JSON ","description":"A log file for a site not on Cloudflare (OUTCOMES-PLAN.md A.5): the raw body, up to 200 MB, plain or gzipped, in the combined or common access-log format, JSON lines, or a Vercel or Netlify drain export; read as it arrives, never held whole. The answer says how many lines, how many crawler hits, how many browsers dropped and how many lines were unreadable.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"received":{"type":"number"},"hits":{"type":"number"},"dropped":{"type":"number"},"errors":{"type":"number"},"format":{"anyOf":[{"type":"string","enum":["json","worker","logpush","vercel","netlify","combined"]},{"type":"null"}]},"capped":{"type":"boolean"},"duplicates":{"type":"number"},"skipped":{"type":"number"},"untimed":{"type":"number"}},"required":["received","hits","dropped","errors","format"]}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"admin","x-vercatus-key-scopes":null}},"/sites/{id}/traffic/observed":{"get":{"operationId":"getSitesByIdTrafficObserved","tags":["Sites"],"summary":"The crawlers' own requests over the last seven days, per crawler, for the probe surfaces to show beside their cells; null until traffic is connected and somethi","description":"The crawlers' own requests over the last seven days, per crawler, for the probe surfaces to show beside their cells; null until traffic is connected and something arrived.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"anyOf":[{"type":"null"},{"anyOf":[{"type":"object","properties":{"lines":{"type":"object","additionalProperties":{"anyOf":[{"type":"string"},{"type":"null"}]}},"days":{"type":"number"},"since":{"type":"string"},"lastDay":{"type":"string"},"crawlers":{"type":"object","additionalProperties":{"type":"object","properties":{"crawler":{"type":"string"},"label":{"type":"string"},"category":{"anyOf":[{"type":"string"},{"type":"null"}]},"hits":{"type":"number"},"served":{"type":"number"},"refused":{"type":"number"},"rateLimited":{"type":"number"},"verified":{"type":"number"},"unverified":{"type":"number"},"lastSeen":{"type":"string"},"redirected":{"type":"number"},"notFound":{"type":"number"},"errors":{"type":"number"},"byTemplate":{"type":"object","additionalProperties":{"type":"object","properties":{"hits":{"type":"number"},"refused":{"type":"number"}},"required":["hits","refused"]}},"weekly":{"type":"array","items":{"type":"number"}}},"required":["crawler","label","category","hits","served","refused","rateLimited","verified","unverified","lastSeen","byTemplate","weekly"]}}},"required":["lines","days","since","lastDay","crawlers"]},{"type":"null"}]}]}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"viewer","x-vercatus-key-scopes":["read"]}},"/sites/{id}/traffic/test":{"post":{"operationId":"postSitesByIdTrafficTest","tags":["Sites"],"summary":"Test the connection: the app requests a page of the site as a bot and waits for the Worker to forward that request back.","description":"Test the connection: the app requests a page of the site as a bot and waits for the Worker to forward that request back.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean"},"step":{"type":"string","enum":["site","line"]},"status":{"anyOf":[{"type":"number"},{"type":"null"}]},"elapsedMs":{"type":"number"},"reason":{"type":"string"},"source":{"type":"string","enum":["cf-worker","logpush","upload","drain"]}},"required":["ok","step"]}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"analyst","x-vercatus-key-scopes":["write"]}},"/sites/{id}/traffic/instructions":{"get":{"operationId":"getSitesByIdTrafficInstructions","tags":["Sites"],"summary":"The setup as a document for IT or an agency: steps, the Worker file, the route, how to check; ?download=1 for a .md file.","description":"The setup as a document for IT or an agency: steps, the Worker file, the route, how to check; `?download=1` for a .md file.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"download","in":"query","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"text/markdown":{"schema":{"type":"string"}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"analyst","x-vercatus-key-scopes":["read"]}},"/sites/{id}/outcomes":{"get":{"operationId":"getSitesByIdOutcomes","tags":["Sites"],"summary":"Outcomes from Google Analytics for a site: connection state (never the token), the last 28 days against the 28 before by assistant and by landing page, the dail","description":"Outcomes from Google Analytics for a site: connection state (never the token), the last 28 days against the 28 before by assistant and by landing page, the daily series.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"anyOf":[{"type":"object","properties":{"days":{"type":"number"},"since":{"type":"string"},"hasData":{"type":"boolean"},"previousComplete":{"type":"boolean"},"ai":{"type":"object","properties":{"sessions":{"type":"number"},"previous":{"type":"number"},"engaged":{"type":"number"},"keyEvents":{"type":"number"},"users":{"anyOf":[{"type":"number"},{"type":"null"}]},"userDays":{"type":"number"},"newUsers":{"anyOf":[{"type":"number"},{"type":"null"}]}},"required":["sessions","previous","engaged","keyEvents","users","userDays","newUsers"]},"channels":{"type":"array","items":{"type":"object","properties":{"channel":{"type":"string"},"sessions":{"type":"number"},"previous":{"type":"number"},"engaged":{"type":"number"},"keyEvents":{"type":"number"},"newUsers":{"type":"number"},"userDays":{"type":"number"}},"required":["channel","sessions","previous","engaged","keyEvents","newUsers","userDays"]}},"keyEventBreakdown":{"type":"array","items":{"type":"object","properties":{"event":{"type":"string"},"count":{"type":"number"},"previous":{"type":"number"},"ai":{"type":"number"},"aiPrevious":{"type":"number"}},"required":["event","count","previous","ai","aiPrevious"]}},"organic":{"type":"object","properties":{"sessions":{"type":"number"},"previous":{"type":"number"}},"required":["sessions","previous"]},"direct":{"type":"object","properties":{"sessions":{"type":"number"},"previous":{"type":"number"}},"required":["sessions","previous"]},"all":{"type":"object","properties":{"sessions":{"type":"number"},"previous":{"type":"number"}},"required":["sessions","previous"]},"engines":{"type":"array","items":{"type":"object","properties":{"engine":{"type":"string"},"label":{"type":"string"},"sessions":{"type":"number"},"previous":{"type":"number"},"engaged":{"type":"number"},"keyEvents":{"type":"number"},"users":{"anyOf":[{"type":"number"},{"type":"null"}]},"userDays":{"type":"number"},"newUsers":{"anyOf":[{"type":"number"},{"type":"null"}]},"topLanding":{"type":"string"}},"required":["engine","label","sessions","previous","engaged","keyEvents","users","userDays","newUsers","topLanding"]}},"landing":{"type":"array","items":{"type":"object","properties":{"engines":{"type":"array","items":{"type":"string"}},"path":{"type":"string"},"sessions":{"type":"number"},"engaged":{"type":"number"},"keyEvents":{"type":"number"}},"required":["engines","path","sessions","engaged","keyEvents"]}},"series":{"type":"object","properties":{"days":{"type":"array","items":{"type":"string"}},"ai":{"type":"object","additionalProperties":{"type":"array","items":{"type":"number"}}},"organic":{"type":"array","items":{"type":"number"}},"direct":{"type":"array","items":{"type":"number"}}},"required":["days","ai","organic","direct"]},"configured":{"type":"boolean"},"allowed":{"type":"boolean"},"connection":{"anyOf":[{"$ref":"#/components/schemas/Shape13dqj2k"},{"type":"null"}]},"syncDue":{"type":"boolean"},"events":{"type":"array","items":{"type":"object","properties":{"day":{"type":"string"},"label":{"type":"string"},"kind":{"type":"string"}},"required":["day","label","kind"]}}},"required":["days","since","hasData","previousComplete","ai","channels","keyEventBreakdown","organic","direct","all","engines","landing","series","configured","allowed","connection","syncDue","events"]},{"type":"object","properties":{"hasData":{"type":"boolean","enum":[false]},"configured":{"type":"boolean"},"allowed":{"type":"boolean"},"connection":{"anyOf":[{"$ref":"#/components/schemas/Shape13dqj2k"},{"type":"null"}]},"syncDue":{"type":"boolean"},"events":{"type":"array","items":{"type":"object","properties":{"day":{"type":"string"},"label":{"type":"string"},"kind":{"type":"string"}},"required":["day","label","kind"]}}},"required":["hasData","configured","allowed","connection","syncDue","events"]}]}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"viewer","x-vercatus-key-scopes":["read"]},"put":{"operationId":"putSitesByIdOutcomes","tags":["Sites"],"summary":"Choose or change the Analytics property for a connected site, from the ones the account can read; syncs at once.","description":"`{ property }`: choose or change the Analytics property for a connected site, from the ones the account can read; syncs at once.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"property":{}},"required":["property"]}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"days":{"type":"number"},"rows":{"type":"number"},"backfilledTo":{"anyOf":[{"type":"string"},{"type":"null"}]},"done":{"type":"boolean"},"busy":{"type":"boolean"},"property":{"type":"string"}},"required":["days","rows","backfilledTo","done","property"]}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"analyst","x-vercatus-key-scopes":["write"]},"delete":{"operationId":"deleteSitesByIdOutcomes","tags":["Sites"],"summary":"Disconnect Google Analytics from a site: the token and the rows are removed.","description":"Disconnect Google Analytics from a site: the token and the rows are removed.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean","enum":[true]}},"required":["ok"]}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"admin","x-vercatus-key-scopes":null}},"/sites/{id}/outcomes/sync":{"post":{"operationId":"postSitesByIdOutcomesSync","tags":["Sites"],"summary":"Sync the site's Analytics now (the last three days and the next slices of the backfill).","description":"Sync the site's Analytics now (the last three days and the next slices of the backfill).","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"days":{"type":"number"},"rows":{"type":"number"},"backfilledTo":{"anyOf":[{"type":"string"},{"type":"null"}]},"done":{"type":"boolean"},"busy":{"type":"boolean"}},"required":["days","rows","backfilledTo","done"]}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"analyst","x-vercatus-key-scopes":["write"]}},"/sites/{id}/search/sync":{"post":{"operationId":"postSitesByIdSearchSync","tags":["Sites"],"summary":"Pull the last 28 days from Search Console now; verification says whether the account's access verified the site or withdrew its Search Console verification.","description":"Pull the last 28 days from Search Console now; `verification` says whether the account's access verified the site or withdrew its Search Console verification.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"queries":{"type":"number"},"pages":{"type":"number"},"pairs":{"type":"number"},"period":{"type":"object","properties":{"start":{"type":"string"},"end":{"type":"string"}},"required":["start","end"]},"verification":{"anyOf":[{"type":"string","enum":["verify","withdraw"]},{"type":"null"}]},"history":{"anyOf":[{"type":"object","properties":{"from":{"type":"string"},"to":{"type":"string"},"rows":{"type":"number"}},"required":["from","to","rows"]},{"type":"null"}]},"busy":{"type":"boolean"}},"required":["queries","pages","pairs","period","verification"]}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"analyst","x-vercatus-key-scopes":["write"]}},"/sites/{id}/changes":{"get":{"operationId":"getSitesByIdChanges","tags":["Sites"],"summary":"Change events for a site (newest first) and the hook settings, never the secrets.","description":"Change events for a site (newest first) and the hook settings, never the secrets. Query: `?limit=` (rows per page).","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"cms":{"anyOf":[{"anyOf":[{"$ref":"#/components/schemas/Shapekzrfof"},{"type":"object","properties":{"hookUrl":{"type":"null"},"shopify":{"type":"boolean"},"sanity":{"type":"boolean"},"contentful":{"type":"boolean"},"github":{"type":"boolean"},"vercel":{"type":"boolean"},"netlify":{"type":"boolean"},"createdAt":{"type":"string"},"lastDeploy":{"anyOf":[{"type":"object","properties":{"source":{"type":"string"},"ref":{"anyOf":[{"type":"string"},{"type":"null"}]},"url":{"anyOf":[{"type":"string"},{"type":"null"}]},"at":{"type":"string"}},"required":["source","ref","url","at"]},{"type":"null"}]},"urlTemplate":{"type":"string"},"markOpen":{"type":"boolean"},"autoRun":{"type":"boolean"},"pendingRunAt":{"anyOf":[{"type":"string"},{"type":"null"}]},"lastAutoRunAt":{"anyOf":[{"type":"string"},{"type":"null"}]},"lastEventAt":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["hookUrl"]}]},{"type":"null"}]},"events":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"orgId":{"anyOf":[{"type":"string"},{"type":"null"}]},"siteId":{"type":"string"},"at":{"type":"string","format":"date-time"},"source":{"type":"string"},"topic":{"anyOf":[{"type":"string"},{"type":"null"}]},"kind":{"type":"string","enum":["page","template","site"]},"urls":{"type":"array","items":{"type":"string"}},"note":{"anyOf":[{"type":"string"},{"type":"null"}]},"marked":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string"},"title":{"type":"string"}},"required":["key","title"]}},"requestId":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["id","orgId","siteId","at","source","topic","kind","urls","note","marked","requestId"]}}},"required":["cms","events"]}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"viewer","x-vercatus-key-scopes":["read"]}},"/sites/{id}/cms":{"put":{"operationId":"putSitesByIdCms","tags":["Sites"],"summary":"Enable or change the CMS hook: { enable?, rotate?, shopifySecret?, sanitySecret?, contentfulSecret?, urlTemplate?, markOpen?, autoRun?","description":"Enable or change the CMS hook: `{ enable?, rotate?, shopifySecret?, sanitySecret?, contentfulSecret?, urlTemplate?, markOpen?, autoRun? }`. An empty secret keeps the stored one; null removes it; `enable: false` removes the hook.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"enable":{"type":"boolean"},"rotate":{"type":"boolean"},"urlTemplate":{"anyOf":[{"type":"string"},{"type":"null"}]},"markOpen":{"type":"boolean"},"autoRun":{"type":"boolean"},"shopifySecret":{"anyOf":[{"type":"string"},{"type":"null"}]},"sanitySecret":{"anyOf":[{"type":"string"},{"type":"null"}]},"contentfulSecret":{"anyOf":[{"type":"string"},{"type":"null"}]},"githubSecret":{"anyOf":[{"type":"string"},{"type":"null"}]},"vercelSecret":{"anyOf":[{"type":"string"},{"type":"null"}]},"netlifySecret":{"anyOf":[{"type":"string"},{"type":"null"}]}},"additionalProperties":{}}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"anyOf":[{"type":"object","properties":{"cms":{"type":"null"}},"required":["cms"]},{"type":"object","properties":{"cms":{"anyOf":[{"$ref":"#/components/schemas/Shapekzrfof"},{"type":"null"}]}},"required":["cms"]}]}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"admin","x-vercatus-key-scopes":null}},"/workflows/{id}/citations":{"get":{"operationId":"getWorkflowsByIdCitations","tags":["Results of a run"],"summary":"The citation panel of a run: per question, what each live engine answered and whether the site was cited; the summary with calibration against the simulator.","description":"The citation panel of a run: per question, what each live engine answered and whether the site was cited; the summary with calibration against the simulator.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"summary":{},"rows":{"type":"array","items":{"type":"object","properties":{"query":{"type":"string"},"category":{"anyOf":[{"type":"string"},{"type":"null"}]},"importance":{"anyOf":[{"type":"number"},{"type":"null"}]},"simulated":{"anyOf":[{"type":"string"},{"type":"null"}]},"engines":{"type":"object","additionalProperties":{"type":"object","properties":{"cited":{"type":"boolean"},"mentioned":{"type":"boolean"},"retrieved":{"type":"boolean"},"noAnswer":{"type":"boolean"},"samples":{"type":"number"},"citedSamples":{"type":"number"},"mentionedSamples":{"anyOf":[{"type":"number"},{"type":"null"}]},"truncatedSamples":{"anyOf":[{"type":"number"},{"type":"null"}]},"ownUrls":{},"citedElsewhere":{},"error":{"anyOf":[{"type":"string"},{"type":"null"}]},"excerpt":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["cited","mentioned","retrieved","noAnswer","samples","citedSamples","mentionedSamples","truncatedSamples","ownUrls","citedElsewhere","error","excerpt"]}}},"required":["query","category","importance","simulated","engines"]}}},"required":["summary","rows"]}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"viewer","x-vercatus-key-scopes":["read"]}},"/workflows/{id}/board":{"get":{"operationId":"getWorkflowsByIdBoard","tags":["Runs"],"summary":"The run's board numbers and brief, when the synthesis wrote one.","description":"The run's board numbers and brief, when the synthesis wrote one.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"anyOf":[{"type":"object"},{"type":"null"}]}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"viewer","x-vercatus-key-scopes":["read"]}},"/workflows/{id}/findings":{"get":{"operationId":"getWorkflowsByIdFindings","tags":["Results of a run"],"summary":"The run's findings, most severe first, with review verdicts, statuses and ticket references.","description":"The run's findings, most severe first, with review verdicts, statuses and ticket references.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"orgId":{"anyOf":[{"type":"string"},{"type":"null"}]},"workflowId":{"type":"string"},"siteId":{"type":"string"},"key":{"type":"string"},"scope":{"type":"string","enum":["page","template","site"]},"scopeRef":{"anyOf":[{"type":"string"},{"type":"null"}]},"category":{"type":"string"},"severity":{"type":"string","enum":["low","medium","high","info","critical"]},"title":{"type":"string"},"summary":{"type":"string"},"evidence":{"type":"array","items":{"type":"object","properties":{"kind":{"type":"string","enum":["text","page","metric","simulation","chunk","diff"]},"ref":{"type":"string"},"label":{"type":"string"},"value":{}},"required":["kind","label"]}},"hypothesisIds":{"type":"array","items":{"type":"string"}},"recommendation":{"anyOf":[{"type":"string"},{"type":"null"}]},"plain":{"anyOf":[{"type":"string"},{"type":"null"}]},"plan":{"anyOf":[{"$ref":"#/components/schemas/Shape16vi3lh"},{"type":"null"}]},"confidence":{"type":"number"},"impact":{"type":"number"},"effort":{"type":"number"},"affectedPages":{"type":"number"},"source":{"type":"string"},"check":{"anyOf":[{"type":"string"},{"type":"null"}]},"critic":{"anyOf":[{"type":"object","properties":{"verdict":{"type":"string","enum":["keep","downgrade","reject"]},"reasoning":{"type":"string"},"adjusted":{"type":"object","properties":{"confidence":{"type":"number"},"impact":{"type":"number"},"severity":{"type":"string"}}}},"required":["verdict","reasoning"]},{"type":"null"}]},"status":{"type":"string","enum":["open","accepted","implemented","verifying","confirmed","refuted","wont_fix","resolved","rejected"]},"statusAt":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"statusBy":{"anyOf":[{"type":"string"},{"type":"null"}]},"statusNote":{"anyOf":[{"type":"string"},{"type":"null"}]},"externalRef":{"anyOf":[{"type":"object","properties":{"provider":{"type":"string","enum":["linear","jira","github","asana"]},"id":{"type":"string"},"key":{"type":"string"},"url":{"type":"string"},"createdAt":{"type":"string"}},"required":["provider","id","key","url","createdAt"]},{"type":"null"}]},"firstSeenWorkflowId":{"anyOf":[{"type":"string"},{"type":"null"}]},"createdAt":{"type":"string","format":"date-time"}},"required":["id","orgId","workflowId","siteId","key","scope","scopeRef","category","severity","title","summary","evidence","hypothesisIds","recommendation","plain","plan","confidence","impact","effort","affectedPages","source","check","critic","status","statusAt","statusBy","statusNote","externalRef","firstSeenWorkflowId","createdAt"]}}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"viewer","x-vercatus-key-scopes":["read"]}},"/findings/{id}":{"patch":{"operationId":"patchFindingsById","tags":["Findings"],"summary":"Changes the status; { plan: { ownerUserId?, ownerLabel, when } | null } sets or clears who is doing it and by when (and moves an open finding to accepted).","description":"`{ status, note? }` changes the status; `{ plan: { ownerUserId?, ownerLabel, when } | null }` sets or clears who is doing it and by when (and moves an open finding to accepted).","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"status":{},"note":{}},"required":["status"]}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"type":"string","enum":["open","accepted","implemented","verifying","confirmed","refuted","wont_fix","resolved","rejected"]},"check":{"anyOf":[{"type":"string"},{"type":"null"}]},"id":{"type":"string"},"createdAt":{"type":"string","format":"date-time"},"orgId":{"anyOf":[{"type":"string"},{"type":"null"}]},"workflowId":{"type":"string"},"siteId":{"type":"string"},"source":{"type":"string"},"key":{"type":"string"},"summary":{"type":"string"},"title":{"type":"string"},"category":{"type":"string"},"scope":{"type":"string","enum":["page","template","site"]},"scopeRef":{"anyOf":[{"type":"string"},{"type":"null"}]},"severity":{"type":"string","enum":["low","medium","high","info","critical"]},"evidence":{"type":"array","items":{"type":"object","properties":{"kind":{"type":"string","enum":["text","page","metric","simulation","chunk","diff"]},"ref":{"type":"string"},"label":{"type":"string"},"value":{}},"required":["kind","label"]}},"hypothesisIds":{"type":"array","items":{"type":"string"}},"recommendation":{"anyOf":[{"type":"string"},{"type":"null"}]},"plain":{"anyOf":[{"type":"string"},{"type":"null"}]},"plan":{"anyOf":[{"$ref":"#/components/schemas/Shape16vi3lh"},{"type":"null"}]},"confidence":{"type":"number"},"impact":{"type":"number"},"effort":{"type":"number"},"affectedPages":{"type":"number"},"critic":{"anyOf":[{"type":"object","properties":{"verdict":{"type":"string","enum":["keep","downgrade","reject"]},"reasoning":{"type":"string"},"adjusted":{"type":"object","properties":{"confidence":{"type":"number"},"impact":{"type":"number"},"severity":{"type":"string"}}}},"required":["verdict","reasoning"]},{"type":"null"}]},"statusAt":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"statusBy":{"anyOf":[{"type":"string"},{"type":"null"}]},"statusNote":{"anyOf":[{"type":"string"},{"type":"null"}]},"externalRef":{"anyOf":[{"type":"object","properties":{"provider":{"type":"string","enum":["linear","jira","github","asana"]},"id":{"type":"string"},"key":{"type":"string"},"url":{"type":"string"},"createdAt":{"type":"string"}},"required":["provider","id","key","url","createdAt"]},{"type":"null"}]},"firstSeenWorkflowId":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["status","check","id","createdAt","orgId","workflowId","siteId","source","key","summary","title","category","scope","scopeRef","severity","evidence","hypothesisIds","recommendation","plain","plan","confidence","impact","effort","affectedPages","critic","statusAt","statusBy","statusNote","externalRef","firstSeenWorkflowId"]}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"analyst","x-vercatus-key-scopes":["write"]},"get":{"operationId":"getFindingsById","tags":["Findings"],"summary":"One finding with its site: summary, recommendation, evidence, knowledge-base entries, status, plan and ticket reference.","description":"One finding with its site: summary, recommendation, evidence, knowledge-base entries, status, plan and ticket reference.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"host":{"anyOf":[{"type":"string"},{"type":"null"}]},"site":{"anyOf":[{"type":"object","properties":{"id":{"type":"string"},"host":{"type":"string"}},"required":["id","host"]},{"type":"null"}]},"status":{"type":"string","enum":["open","accepted","implemented","verifying","confirmed","refuted","wont_fix","resolved","rejected"]},"check":{"anyOf":[{"type":"string"},{"type":"null"}]},"id":{"type":"string"},"createdAt":{"type":"string","format":"date-time"},"orgId":{"anyOf":[{"type":"string"},{"type":"null"}]},"workflowId":{"type":"string"},"siteId":{"type":"string"},"source":{"type":"string"},"key":{"type":"string"},"summary":{"type":"string"},"title":{"type":"string"},"category":{"type":"string"},"scope":{"type":"string","enum":["page","template","site"]},"scopeRef":{"anyOf":[{"type":"string"},{"type":"null"}]},"severity":{"type":"string","enum":["low","medium","high","info","critical"]},"evidence":{"type":"array","items":{"type":"object","properties":{"kind":{"type":"string","enum":["text","page","metric","simulation","chunk","diff"]},"ref":{"type":"string"},"label":{"type":"string"},"value":{}},"required":["kind","label"]}},"hypothesisIds":{"type":"array","items":{"type":"string"}},"recommendation":{"anyOf":[{"type":"string"},{"type":"null"}]},"plain":{"anyOf":[{"type":"string"},{"type":"null"}]},"plan":{"anyOf":[{"$ref":"#/components/schemas/Shape16vi3lh"},{"type":"null"}]},"confidence":{"type":"number"},"impact":{"type":"number"},"effort":{"type":"number"},"affectedPages":{"type":"number"},"critic":{"anyOf":[{"type":"object","properties":{"verdict":{"type":"string","enum":["keep","downgrade","reject"]},"reasoning":{"type":"string"},"adjusted":{"type":"object","properties":{"confidence":{"type":"number"},"impact":{"type":"number"},"severity":{"type":"string"}}}},"required":["verdict","reasoning"]},{"type":"null"}]},"statusAt":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"statusBy":{"anyOf":[{"type":"string"},{"type":"null"}]},"statusNote":{"anyOf":[{"type":"string"},{"type":"null"}]},"externalRef":{"anyOf":[{"type":"object","properties":{"provider":{"type":"string","enum":["linear","jira","github","asana"]},"id":{"type":"string"},"key":{"type":"string"},"url":{"type":"string"},"createdAt":{"type":"string"}},"required":["provider","id","key","url","createdAt"]},{"type":"null"}]},"firstSeenWorkflowId":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["host","site","status","check","id","createdAt","orgId","workflowId","siteId","source","key","summary","title","category","scope","scopeRef","severity","evidence","hypothesisIds","recommendation","plain","plan","confidence","impact","effort","affectedPages","critic","statusAt","statusBy","statusNote","externalRef","firstSeenWorkflowId"]}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"viewer","x-vercatus-key-scopes":["read"]}},"/findings/{id}/ticket":{"post":{"operationId":"postFindingsByIdTicket","tags":["Findings"],"summary":"Export a finding as an issue; the reference is stored on the finding and carried from run to run.","description":"Export a finding as an issue; the reference is stored on the finding and carried from run to run. Idempotent.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"provider":{"type":"string"}},"required":["provider"]}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"provider":{"type":"string","enum":["linear","jira","github","asana"]},"id":{"type":"string"},"key":{"type":"string"},"url":{"type":"string"},"createdAt":{"type":"string"}},"required":["provider","id","key","url","createdAt"]}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"analyst","x-vercatus-key-scopes":["write"]}},"/findings/tickets":{"post":{"operationId":"postFindingsTickets","tags":["Findings"],"summary":"Export several findings at once; each result names its finding, so one failure does not hide the others.","description":"Export several findings at once; each result names its finding, so one failure does not hide the others.","requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"ids":{"type":"array","items":{"type":"string"}},"provider":{"type":"string"}},"required":["ids","provider"]}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"created":{"type":"number"},"failed":{"type":"number"},"results":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"ref":{},"error":{"type":"string"}},"required":["id"]}}},"required":["created","failed","results"]}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"analyst","x-vercatus-key-scopes":["write"]}},"/verifications":{"get":{"operationId":"getVerifications","tags":["Findings"],"summary":"Verified fixes: every claimed fix a later run checked, newest first; ?limit= (200, at most 500).","description":"Verified fixes: every claimed fix a later run checked, newest first; `?limit=` (200, at most 500). Deprecated (PHASE-4.md): a play's verdict (GET /api/sites/:id/plays/:playId/verdicts) replaces it on the screens; kept for MCP, exports and the Looker connector. Query: `?siteId=` (one site), `?workflowId=` (one run's id).","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"string"}},{"name":"siteId","in":"query","required":false,"schema":{"type":"string"}},{"name":"workflowId","in":"query","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"org_id":{"type":"string"},"site_id":{"type":"string"},"host":{"type":"string"},"key":{"type":"string"},"title":{"type":"string"},"severity":{"type":"string"},"category":{"type":"string"},"scope":{"type":"string"},"scope_ref":{"anyOf":[{"type":"string"},{"type":"null"}]},"outcome":{"type":"string"},"created_at":{"type":"string"},"verified_workflow_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"marked_at":{"anyOf":[{"type":"string"},{"type":"null"}]},"marked_by":{"anyOf":[{"type":"string"},{"type":"null"}]},"marked_note":{"anyOf":[{"type":"string"},{"type":"null"}]},"marked_workflow_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"effect":{},"effect_text":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["id","org_id","site_id","host","key","title","severity","category","scope","scope_ref","outcome","created_at","verified_workflow_id","marked_at","marked_by","marked_note","marked_workflow_id","effect","effect_text"],"additionalProperties":{}}}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"deprecated":true,"x-vercatus-role":"viewer","x-vercatus-key-scopes":["read"]}},"/workflows/{id}/templates":{"get":{"operationId":"getWorkflowsByIdTemplates","tags":["Results of a run"],"summary":"Templates with page counts, word counts, JS ratio, timings and structured-data coverage.","description":"Templates with page counts, word counts, JS ratio, timings and structured-data coverage.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"workflow_id":{"type":"string"},"fingerprint":{"type":"string"},"label":{"anyOf":[{"type":"string"},{"type":"null"}]},"page_count":{"type":"number"},"avg_words":{"anyOf":[{"type":"number"},{"type":"null"}]},"language":{"anyOf":[{"type":"string"},{"type":"null"}]},"js_ratio":{"anyOf":[{"type":"number"},{"type":"null"}]},"lcp":{"anyOf":[{"type":"number"},{"type":"null"}]},"ttfb":{"anyOf":[{"type":"number"},{"type":"null"}]},"ai_blocked":{"type":"number"},"raw_blocked":{"type":"number"},"no_ld":{"type":"number"},"findings":{"type":"number"}},"required":["id","workflow_id","fingerprint","label","page_count","avg_words","language","js_ratio","lcp","ttfb","ai_blocked","raw_blocked","no_ld","findings"],"additionalProperties":{}}}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"viewer","x-vercatus-key-scopes":["read"]}},"/workflows/{id}/perspectives":{"get":{"operationId":"getWorkflowsByIdPerspectives","tags":["Results of a run"],"summary":"Perspective matrix: template × perspective → {served, blocked, challenge, error} counts.","description":"Perspective matrix: template × perspective → {served, blocked, challenge, error} counts.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"template":{"type":"string"},"fingerprint":{"anyOf":[{"type":"string"},{"type":"null"}]},"perspective":{"type":"string"},"served":{"type":"number"},"blocked":{"type":"number"},"challenge":{"type":"number"},"other":{"type":"number"},"total":{"type":"number"},"avg_bytes":{"anyOf":[{"type":"number"},{"type":"null"}]}},"required":["template","fingerprint","perspective","served","blocked","challenge","other","total","avg_bytes"]}}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"viewer","x-vercatus-key-scopes":["read"]}},"/workflows/{id}/entities":{"get":{"operationId":"getWorkflowsByIdEntities","tags":["Results of a run"],"summary":"Entities resolved across pages with their defining page and Wikidata match.","description":"Entities resolved across pages with their defining page and Wikidata match.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"type":{"anyOf":[{"type":"string"},{"type":"null"}]},"qid":{"anyOf":[{"type":"string"},{"type":"null"}]},"mention_count":{"type":"number"},"home_url":{"anyOf":[{"type":"string"},{"type":"null"}]},"pages":{"type":"number"}},"required":["id","name","type","qid","mention_count","home_url","pages"],"additionalProperties":{}}}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"viewer","x-vercatus-key-scopes":["read"]}},"/workflows/{id}/claims":{"get":{"operationId":"getWorkflowsByIdClaims","tags":["Results of a run"],"summary":"Factual claims with their evidence type, most specific first: ?limit= (500, at most 2000) and ?offset=.","description":"Factual claims with their evidence type, most specific first: `?limit=` (500, at most 2000) and `?offset=`. `x-total-count` is how many the run has and `x-truncated: true` says the list ends before them (`x-next-offset` is where the next page starts).","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"schema":{"type":"string"}},{"name":"offset","in":"query","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"array","items":{}}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"viewer","x-vercatus-key-scopes":["read"]}},"/workflows/{id}/intents":{"get":{"operationId":"getWorkflowsByIdIntents","tags":["Results of a run"],"summary":"Intents with their coverage verdicts and the pages retrieved for each, with who each is for (intent_class, relevance) and where it came from (provenance); suppo","description":"Intents with their coverage verdicts and the pages retrieved for each, with who each is for (`intent_class`, `relevance`) and where it came from (`provenance`); support, content, machine and echo questions last.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"query":{"type":"string"},"language":{"anyOf":[{"type":"string"},{"type":"null"}]},"category":{"anyOf":[{"type":"string"},{"type":"null"}]},"funnel":{"anyOf":[{"type":"string"},{"type":"null"}]},"source":{"anyOf":[{"type":"string"},{"type":"null"}]},"importance":{"anyOf":[{"type":"number"},{"type":"null"}]},"intent_class":{"anyOf":[{"type":"string"},{"type":"null"}]},"relevance":{"anyOf":[{"type":"string"},{"type":"null"}]},"provenance":{},"expected_url":{"anyOf":[{"type":"string"},{"type":"null"}]},"simulation_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"verdict":{},"cited_page_ids":{"anyOf":[{"type":"array","items":{"type":"string"}},{"type":"null"}]},"retrieved_urls":{"anyOf":[{"type":"array","items":{"type":"string"}},{"type":"null"}]}},"required":["id","query","language","category","funnel","source","importance","intent_class","relevance","provenance","expected_url","simulation_id","verdict","cited_page_ids","retrieved_urls"]}}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"viewer","x-vercatus-key-scopes":["read"]}},"/workflows/{id}/simulations/{intentId}":{"get":{"operationId":"getWorkflowsByIdSimulationsByIntentId","tags":["Results of a run"],"summary":"One simulation: the answer, the verdict and the passages it was built from.","description":"One simulation: the answer, the verdict and the passages it was built from.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"intentId","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"intent":{"type":"object","properties":{"id":{"type":"string"},"workflowId":{"type":"string"},"source":{"type":"string"},"query":{"type":"string"},"intentClass":{"anyOf":[{"type":"string","enum":["brand","buyer","problem","support","content","machine","echo","unclear"]},{"type":"null"}]},"language":{"type":"string"},"embedding":{"anyOf":[{"type":"array","items":{"type":"number"}},{"type":"null"}]},"locale":{"anyOf":[{"type":"string"},{"type":"null"}]},"category":{"type":"string"},"funnel":{"anyOf":[{"type":"string"},{"type":"null"}]},"expectedPageId":{"anyOf":[{"type":"string"},{"type":"null"}]},"importance":{"type":"number"},"relevance":{"anyOf":[{"type":"number"},{"type":"null"}]},"provenance":{"anyOf":[{"$ref":"#/components/schemas/Shape1xvkhx7"},{"type":"null"}]}},"required":["id","workflowId","source","query","intentClass","language","embedding","locale","category","funnel","expectedPageId","importance","relevance","provenance"]},"chunks":{},"id":{"type":"string"},"workflowId":{"type":"string"},"intentId":{"type":"string"},"retrieved":{"type":"array","items":{"type":"object","properties":{"chunkId":{"type":"string"},"pageId":{"type":"string"},"score":{"type":"number"},"bm25":{"type":"number"},"dense":{"type":"number"}},"required":["chunkId","pageId","score","bm25","dense"]}},"answer":{"anyOf":[{"type":"string"},{"type":"null"}]},"citedChunkIds":{"type":"array","items":{"type":"string"}},"citedPageIds":{"type":"array","items":{"type":"string"}},"verdict":{"anyOf":[{"type":"object","properties":{"coverage":{"type":"string","enum":["answered","partial","unanswered"]},"grounded":{"type":"boolean"},"topScore":{"type":"number"},"competingPages":{"type":"number"},"citedSpecificity":{"type":"number"},"gaps":{"type":"array","items":{"type":"string"}},"judged":{"type":"boolean"}},"required":["coverage","grounded","topScore","competingPages","citedSpecificity","gaps"]},{"type":"null"}]}},"required":["chunks","id","workflowId","intentId","retrieved","answer","citedChunkIds","citedPageIds","verdict"]}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"viewer","x-vercatus-key-scopes":["read"]}},"/workflows/{id}/analyses":{"get":{"operationId":"getWorkflowsByIdAnalyses","tags":["Results of a run"],"summary":"Synthesis, site profile, review summary, performance profile and the change diff.","description":"Synthesis, site profile, review summary, performance profile and the change diff. Query: `?kind=` (the kind of analysis).","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"kind","in":"query","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"workflowId":{"type":"string"},"kind":{"type":"string"},"content":{},"createdAt":{"type":"string","format":"date-time"}},"required":["id","workflowId","kind","content","createdAt"]}}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"viewer","x-vercatus-key-scopes":["read"]}},"/workflows/{id}/events/all":{"get":{"operationId":"getWorkflowsByIdEventsAll","tags":["Results of a run"],"summary":"The run's event log, including delivery outcomes, oldest first, a page at a time: ?limit= (1000, at most 5000) and ?cursor= (the x-next-cursor header of the pre","description":"The run's event log, including delivery outcomes, oldest first, a page at a time: `?limit=` (1000, at most 5000) and `?cursor=` (the `x-next-cursor` header of the previous page, present while more follow; `x-total-count` is the whole log). The body is the list; `?envelope=1` answers `{ items, nextCursor, total }` instead.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"schema":{"type":"string"}},{"name":"cursor","in":"query","required":false,"schema":{"type":"string"}},{"name":"envelope","in":"query","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"anyOf":[{"type":"array","items":{"type":"object","properties":{"id":{},"workflowId":{},"step":{},"level":{},"message":{},"data":{},"createdAt":{"type":"string","format":"date-time"}},"required":["id","workflowId","step","level","message","data","createdAt"]}},{"type":"object","properties":{"items":{"type":"array","items":{"type":"object","properties":{"id":{},"workflowId":{},"step":{},"level":{},"message":{},"data":{},"createdAt":{"type":"string","format":"date-time"}},"required":["id","workflowId","step","level","message","data","createdAt"]}},"nextCursor":{"anyOf":[{"type":"string"},{"type":"null"}]},"total":{"type":"number"}},"required":["items","nextCursor","total"]}]}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"viewer","x-vercatus-key-scopes":["read"]}},"/kb":{"get":{"operationId":"getKb","tags":["Knowledge base"],"summary":"The knowledge base with its runtime state: each entry carries its last source check and any curator decision.","description":"The knowledge base with its runtime state: each entry carries its last source check and any curator decision. Curation (confirming entries, accepting proposals) is done by Vercatus; the base is shared by every workspace. Each entry also carries `observed` (PHASE-5.md §1): what Learn's verdicts and natural experiments say of the rule (`verdict` supported, not_observed or contradicted, with `n`, `nSites` and the effect; `withheld` below three sites), or null when no play measures it.","responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/Shape1kq1t7u"}}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"viewer","x-vercatus-key-scopes":["read"]}},"/knowledge/{id}":{"get":{"operationId":"getKnowledgeById","tags":["Knowledge base"],"summary":"One knowledge-base entry (by id, a merged id or its rule number, R-068): the entry, its curator state, and observed (PHASE-5.md §5): { verdict: \"supported\" | \"n","description":"One knowledge-base entry (by id, a merged id or its rule number, R-068): the entry, its curator state, and `observed` (PHASE-5.md §5): `{ verdict: \"supported\" | \"not_observed\" | \"contradicted\", n, nSites, effect }` from the priors of the plays and page changes it rests on, `withheld` below three sites, or null when no play measures it.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Shape1kq1t7u"}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"viewer","x-vercatus-key-scopes":["read"]}},"/ui-events":{"post":{"operationId":"postUiEvents","tags":["Service"],"summary":"At most 50: what the signed-in person did in the workspace (view, drawer, search_empty, back, figure), recorded only when the instance records usage, for a sess","description":"`{ events: [{ kind, route, target?, ms?, at? }] }`, at most 50: what the signed-in person did in the workspace (view, drawer, search_empty, back, figure), recorded only when the instance records usage, for a session (never an API key), and when the person has not turned it off in Account; otherwise accepted and dropped. Routes are kept as patterns and targets cut to 80 characters.","requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"events":{"type":"array","items":{"type":"object","properties":{"kind":{"type":"string"},"route":{"type":"string"},"target":{"anyOf":[{"type":"string"},{"type":"null"}]},"ms":{"anyOf":[{"type":"number"},{"type":"null"}]},"at":{"type":"string"}},"required":["kind","route"]}}}}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"viewer","x-vercatus-key-scopes":["write"]}},"/billing":{"get":{"operationId":"getBilling","tags":["Billing"],"summary":"The workspace's billing state: plan, subscription status, period, what the plans cost at this site count, the next invoice.","description":"The workspace's billing state: plan, subscription status, period, what the plans cost at this site count, the next invoice.","responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"interval":{"anyOf":[{"type":"string","enum":["month","year"]},{"type":"null"}]},"sites":{"type":"object","properties":{"used":{"type":"number"},"included":{"type":"number"},"max":{"type":"number"}},"required":["used","included","max"]},"seats":{"type":"object","properties":{"purchasable":{"type":"boolean"},"used":{"type":"number"},"members":{"type":"number"},"pendingInvites":{"type":"number"},"included":{"type":"number"},"extra":{"type":"number"},"total":{"type":"number"},"available":{"type":"number"},"seatPriceUsd":{"type":"number"}},"required":["purchasable","used","members","pendingInvites","included","extra","total","available","seatPriceUsd"]},"upcoming":{"anyOf":[{"type":"object","properties":{"amount":{"type":"number"},"currency":{"type":"string"},"amountUsd":{"anyOf":[{"type":"number"},{"type":"null"}]},"at":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["amount","currency","amountUsd","at"]},{"type":"null"}]},"plans":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"monthlyPriceUsd":{"type":"number"},"yearlyPriceUsd":{"type":"number"},"annual":{"type":"boolean"},"includedSites":{"type":"number"},"siteTiers":{"type":"array","items":{"type":"object","properties":{"upTo":{"anyOf":[{"type":"number"},{"type":"null"}]},"usd":{"type":"number"}},"required":["upTo","usd"]}},"limits":{"$ref":"#/components/schemas/Shapetinkmx"},"atThisSize":{"type":"object","properties":{"platform":{"type":"number"},"perSite":{"type":"number"},"total":{"type":"number"},"breakdown":{"type":"array","items":{"type":"string"}}},"required":["platform","perSite","total","breakdown"]},"atThisSizeYearly":{"type":"number"},"seatsIncluded":{"type":"number"},"seatPriceUsd":{"type":"number"}},"required":["id","name","monthlyPriceUsd","yearlyPriceUsd","annual","includedSites","siteTiers","limits","atThisSize","atThisSizeYearly","seatsIncluded","seatPriceUsd"]}},"enterprise":{"anyOf":[{"type":"object","properties":{"fromUsd":{"anyOf":[{"type":"number"},{"type":"null"}]},"seats":{"anyOf":[{"type":"number"},{"type":"null"}]},"sites":{"type":"number"}},"required":["fromUsd","seats","sites"]},{"type":"null"}]},"billedBy":{"anyOf":[{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"}},"required":["id","name"]},{"type":"null"}]},"consolidatedWorkspaces":{"type":"number"},"enabled":{"type":"boolean"},"managed":{"type":"boolean"},"plan":{"anyOf":[{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"monthlyPriceUsd":{"type":"number"},"limits":{"$ref":"#/components/schemas/Shapetinkmx"},"pricing":{"$ref":"#/components/schemas/Shapew8uuzz"}},"required":["id","name","monthlyPriceUsd","limits","pricing"]},{"type":"null"}]},"intendedPlan":{"anyOf":[{"type":"string","enum":["watch","lite","solo","portfolio"]},{"type":"null"}]},"intendedInterval":{"type":"string","enum":["month","year"]},"refund":{"anyOf":[{"type":"object","properties":{"eligible":{"type":"boolean"},"until":{"anyOf":[{"type":"string"},{"type":"null"}]},"reason":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["eligible","until","reason"]},{"type":"null"}]},"status":{"type":"string","enum":["none","trialing","active","past_due","unpaid","canceled","incomplete","paused"]},"periodEnd":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"cancelAt":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"pausedUntil":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"subscribed":{"type":"boolean"},"hasCustomer":{"type":"boolean"}},"required":["interval","sites","seats","upcoming","plans","enterprise","billedBy","consolidatedWorkspaces","enabled","managed","plan","intendedPlan","intendedInterval","refund","status","periodEnd","cancelAt","pausedUntil","subscribed","hasCustomer"]}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"viewer","x-vercatus-key-scopes":["read"]}},"/billing/checkout":{"post":{"operationId":"postBillingCheckout","tags":["Billing"],"summary":"Start a subscription on Stripe's checkout page; the answer is { url } to send the browser to.","description":"`{ plan, interval? }` (interval month, the default, or year): start a subscription on Stripe's checkout page; the answer is `{ url }` to send the browser to. Owners and admins.","requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"plan":{"type":"string"},"interval":{}},"required":["plan"]}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"url":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["url"]}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"admin","x-vercatus-key-scopes":null}},"/billing/checkout/{sessionId}":{"get":{"operationId":"getBillingCheckoutBySessionId","tags":["Billing"],"summary":"The checkout return: read the session and apply its subscription now, so the page does not wait for the webhook.","description":"The checkout return: read the session and apply its subscription now, so the page does not wait for the webhook.","parameters":[{"name":"sessionId","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"anyOf":[{"anyOf":[{"type":"string","enum":["open"]},{"type":"string","enum":["expired"]},{"type":"string","enum":["complete"]},{"type":"object","properties":{"length":{"type":"number"}},"required":["length"],"additionalProperties":{"type":"string"}}]},{"type":"null"}]},"applied":{"anyOf":[{"type":"object","properties":{"orgId":{"type":"string"},"planId":{"type":"string"},"status":{"type":"string","enum":["none","trialing","active","past_due","unpaid","canceled","incomplete","paused"]}},"required":["orgId","planId","status"]},{"type":"null"}]},"firstRuns":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"kind":{"type":"string","enum":["free","baseline"]}},"required":["id","kind"]}}},"required":["status","applied","firstRuns"]}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"admin","x-vercatus-key-scopes":null}},"/billing/checkout/cancelled":{"post":{"operationId":"postBillingCheckoutCancelled","tags":["Billing"],"summary":"The person came back from checkout without paying: recorded for the funnel.","description":"The person came back from checkout without paying: recorded for the funnel. Nothing was charged.","responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean","enum":[true]}},"required":["ok"]}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"admin","x-vercatus-key-scopes":null}},"/billing/refund":{"post":{"operationId":"postBillingRefund","tags":["Billing"],"summary":"Cancel now and refund what was paid (§1.8): only while refundState allows it.","description":"Cancel now and refund what was paid (§1.8): only while `refundState` allows it. The paid invoices of the subscription are refunded through Stripe and the subscription ends at once; the workspace keeps its data, back on the free plan. When Stripe does not take the refund, the plan is still cancelled and the operator is told to refund by hand. Owners and admins. V-04: the check and the money movement run under one lock per workspace, and each refund carries an idempotency key, so two calls at once (a double click, a replay) refund once: the second finds the subscription gone and is told so, and no \"refund by hand\" notice is sent for a refund that was in fact made.","responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean","enum":[true]},"refunded":{"type":"array","items":{"type":"object","properties":{"amount":{"type":"number"},"currency":{"type":"string"}},"required":["amount","currency"]}},"refundedUsd":{"type":"number"},"manual":{"type":"boolean"},"applied":{"anyOf":[{"type":"object","properties":{"orgId":{"type":"string"},"planId":{"type":"string"},"status":{"type":"string","enum":["none","trialing","active","past_due","unpaid","canceled","incomplete","paused"]}},"required":["orgId","planId","status"]},{"type":"null"}]}},"required":["ok","refunded","refundedUsd","manual","applied"]}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"admin","x-vercatus-key-scopes":null}},"/billing/portal":{"post":{"operationId":"postBillingPortal","tags":["Billing"],"summary":"Open Stripe's customer portal: card, invoices, cancellation.","description":"Open Stripe's customer portal: card, invoices, cancellation. `{ url }`.","responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"url":{"type":"string"}},"required":["url"]}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"admin","x-vercatus-key-scopes":null}},"/billing/change":{"post":{"operationId":"postBillingChange","tags":["Billing"],"summary":"Move a live subscription to another plan in place, prorated; the additional-site item follows the sites list.","description":"`{ plan, interval? }`: move a live subscription to another plan in place, prorated; the additional-site item follows the sites list. The subscription keeps its billing interval unless `interval` names the other one; the same plan on the other interval switches only the interval. Stripe restarts the billing period on an interval change and prorates what was paid, so month to year charges the year now less the unused month, and year to month credits the unused year.","requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"plan":{"type":"string"},"interval":{}},"required":["plan"]}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"anyOf":[{"type":"object","properties":{"ok":{"type":"boolean","enum":[true]},"unchanged":{"type":"boolean","enum":[true]}},"required":["ok","unchanged"]},{"$ref":"#/components/schemas/Shape11k3axj"}]}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"admin","x-vercatus-key-scopes":null}},"/billing/seats":{"post":{"operationId":"postBillingSeats","tags":["Billing"],"summary":"The seats bought on top of the plan's included ones, as the quantity of the subscription's \"Additional seat\" item, prorated.","description":"`{ extra }`: the seats bought on top of the plan's included ones, as the quantity of the subscription's \"Additional seat\" item, prorated. Refused below the seats in use (owners, admins, analysts and their open invitations). Owners and admins.","requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"extra":{}},"required":["extra"]}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Shape1h8jp8y"}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"admin","x-vercatus-key-scopes":null}},"/billing/pause":{"post":{"operationId":"postBillingPause","tags":["Billing"],"summary":"Pause the plan (RETENTION-PLAN.md §7).","description":"`{ months }` (1 to 3): pause the plan (RETENTION-PLAN.md §7). Nothing is charged, the workspace is read-only, and it resumes on its own on the date; `resumesAt` is returned.","requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"months":{}},"required":["months"]}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean","enum":[true]},"resumesAt":{"type":"string"},"applied":{"anyOf":[{"type":"object","properties":{"orgId":{"type":"string"},"planId":{"type":"string"},"status":{"type":"string","enum":["none","trialing","active","past_due","unpaid","canceled","incomplete","paused"]}},"required":["orgId","planId","status"]},{"type":"null"}]}},"required":["ok","resumesAt","applied"]}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"admin","x-vercatus-key-scopes":null}},"/billing/resume":{"post":{"operationId":"postBillingResume","tags":["Billing"],"summary":"Resume a paused plan now; the next invoice is on the usual date.","description":"Resume a paused plan now; the next invoice is on the usual date.","responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Shape11k3axj"}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"admin","x-vercatus-key-scopes":null}},"/billing/webhook":{"post":{"operationId":"postBillingWebhook","tags":["Billing"],"summary":"Stripe's webhook: verified by signature, claimed once per event id, applied, then marked applied.","description":"Stripe's webhook: verified by signature, claimed once per event id, applied, then marked applied. A failed apply releases the claim and answers 500, so Stripe's retry applies it again instead of being taken for a duplicate; a delivery arriving while the same event is being applied answers 409 and is retried later. Public.","responses":{"200":{"description":"Success","content":{"application/json":{"schema":{}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"viewer","x-vercatus-key-scopes":["write"]}},"/org/api-keys":{"get":{"operationId":"getOrgApiKeys","tags":["Workspace"],"summary":"API keys with prefix, scopes, sites, address allowlist, expiry, state (active, expiring within 14 days, rotating in its grace period, expired, revoked), who mad","description":"API keys with prefix, scopes, sites, address allowlist, expiry, state (`active`, `expiring` within 14 days, `rotating` in its grace period, `expired`, `revoked`), who made each and when it was last used (to the minute); never the secret.","responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"state":{"type":"string","enum":["active","expired","expiring","rotating","revoked"]},"id":{"type":"string"},"name":{"type":"string"},"prefix":{"type":"string"},"scopes":{"type":"array","items":{"type":"string"}},"lastUsedAt":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"revokedAt":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"createdAt":{"type":"string","format":"date-time"},"expiresAt":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"siteIds":{"anyOf":[{"type":"array","items":{"type":"string"}},{"type":"null"}]},"ipAllowlist":{"anyOf":[{"type":"array","items":{"type":"string"}},{"type":"null"}]},"replacedById":{"anyOf":[{"type":"string"},{"type":"null"}]},"createdByUserId":{"anyOf":[{"type":"string"},{"type":"null"}]},"createdBy":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["state","id","name","prefix","scopes","lastUsedAt","revokedAt","createdAt","expiresAt","siteIds","ipAllowlist","replacedById","createdByUserId","createdBy"]}}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"admin","x-vercatus-key-scopes":null},"post":{"operationId":"postOrgApiKeys","tags":["Workspace"],"summary":"Create a key.","description":"`{ name, scopes?, expiresInDays?, siteIds?, ipAllowlist? }`: create a key. Scopes are read (the default), write and export; `expiresInDays` is 1 to 730 (365 by default) or `\"never\"` on Enterprise; `siteIds` limits the key to those sites (null: every site); `ipAllowlist` lists addresses or CIDR ranges it may be used from. The secret is returned once.","requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"scopes":{"type":"array","items":{"type":"string"}},"expiresInDays":{"anyOf":[{"anyOf":[{"type":"number"},{"type":"string","enum":["never"]}]},{"type":"null"}]},"siteIds":{"anyOf":[{"type":"array","items":{"type":"string"}},{"type":"null"}]},"ipAllowlist":{"anyOf":[{"type":"array","items":{"type":"string"}},{"type":"null"}]}},"required":["name"]}}}},"responses":{"201":{"description":"Created","content":{"application/json":{"schema":{"type":"object","properties":{"secret":{"type":"string"},"id":{"type":"string"},"name":{"type":"string"},"createdAt":{"type":"string","format":"date-time"},"orgId":{"type":"string"},"expiresAt":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"siteIds":{"anyOf":[{"type":"array","items":{"type":"string"}},{"type":"null"}]},"prefix":{"type":"string"},"scopes":{"type":"array","items":{"type":"string"}},"lastUsedAt":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"revokedAt":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"createdByUserId":{"anyOf":[{"type":"string"},{"type":"null"}]},"ipAllowlist":{"anyOf":[{"type":"array","items":{"type":"string"}},{"type":"null"}]},"replacedById":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["secret","id","name","createdAt","orgId","expiresAt","siteIds","prefix","scopes","lastUsedAt","revokedAt","createdByUserId","ipAllowlist","replacedById"]}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"admin","x-vercatus-key-scopes":null}},"/org/api-keys/{id}":{"patch":{"operationId":"patchOrgApiKeysById","tags":["Workspace"],"summary":"Rename a key or change the sites and addresses it is limited to.","description":"`{ name?, siteIds?, ipAllowlist? }`: rename a key or change the sites and addresses it is limited to. Scopes and expiry are fixed at creation; rotate for new ones.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"siteIds":{"anyOf":[{"type":"array","items":{"type":"string"}},{"type":"null"}]},"ipAllowlist":{"anyOf":[{"type":"array","items":{"type":"string"}},{"type":"null"}]}}}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"orgId":{"type":"string"},"name":{"type":"string"},"prefix":{"type":"string"},"scopes":{"type":"array","items":{"type":"string"}},"lastUsedAt":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"revokedAt":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"createdAt":{"type":"string","format":"date-time"},"expiresAt":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"createdByUserId":{"anyOf":[{"type":"string"},{"type":"null"}]},"siteIds":{"anyOf":[{"type":"array","items":{"type":"string"}},{"type":"null"}]},"ipAllowlist":{"anyOf":[{"type":"array","items":{"type":"string"}},{"type":"null"}]},"replacedById":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["id","orgId","name","prefix","scopes","lastUsedAt","revokedAt","createdAt","expiresAt","createdByUserId","siteIds","ipAllowlist","replacedById"]}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"admin","x-vercatus-key-scopes":null},"delete":{"operationId":"deleteOrgApiKeysById","tags":["Workspace"],"summary":"Revoke a key at once.","description":"Revoke a key at once.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"anyOf":[{"type":"object","properties":{"ok":{"type":"boolean","enum":[true]}},"required":["ok"]},{"type":"object","properties":{"ok":{"type":"boolean","enum":[true]},"alreadyRevoked":{"type":"boolean","enum":[true]},"revokedAt":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]}},"required":["ok","alreadyRevoked","revokedAt"]}]}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"admin","x-vercatus-key-scopes":null}},"/org/api-keys/{id}/rotate":{"post":{"operationId":"postOrgApiKeysByIdRotate","tags":["Workspace"],"summary":"Rotate a key.","description":"`{ graceHours?, expiresInDays? }`: rotate a key. The replacement keeps the name, scopes, sites and addresses and gets a new expiry (365 days by default); the old key keeps working for `graceHours` (24 by default, 0 to 168), then stops. The new secret is returned once.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"graceHours":{"type":"number"},"expiresInDays":{"anyOf":[{"type":"number"},{"type":"string","enum":["never"]}]}}}}}},"responses":{"201":{"description":"Created","content":{"application/json":{"schema":{"type":"object","properties":{"replaces":{"type":"object","properties":{"id":{"type":"string"},"prefix":{"type":"string"},"endsAt":{"type":"string","format":"date-time"}},"required":["id","prefix","endsAt"]},"secret":{"type":"string"},"id":{"type":"string"},"name":{"type":"string"},"createdAt":{"type":"string","format":"date-time"},"orgId":{"type":"string"},"expiresAt":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"siteIds":{"anyOf":[{"type":"array","items":{"type":"string"}},{"type":"null"}]},"prefix":{"type":"string"},"scopes":{"type":"array","items":{"type":"string"}},"lastUsedAt":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"revokedAt":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"createdByUserId":{"anyOf":[{"type":"string"},{"type":"null"}]},"ipAllowlist":{"anyOf":[{"type":"array","items":{"type":"string"}},{"type":"null"}]},"replacedById":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["replaces","secret","id","name","createdAt","orgId","expiresAt","siteIds","prefix","scopes","lastUsedAt","revokedAt","createdByUserId","ipAllowlist","replacedById"]}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"admin","x-vercatus-key-scopes":null}},"/export/visibility.json":{"get":{"operationId":"getExportVisibilityJson","tags":["Exports"],"summary":"Visibility by ISO week × site × engine × domain: the cited share of the site, its named competitors and (?others=, up to 20) the domains cited most instead, eac","description":"Visibility by ISO week × site × engine × domain: the cited share of the site, its named competitors and (`?others=`, up to 20) the domains cited most instead, each with its asks, 95% interval, questions asked and cited, and for the site the answers that named it without a link. `?siteId=` for one site (every visible site otherwise), `?from=&to=` (the last 12 weeks by default, a year at most), `?engines=` a comma list.","parameters":[{"name":"others","in":"query","required":false,"schema":{"type":"string"}},{"name":"siteId","in":"query","required":false,"schema":{"type":"string"}},{"name":"from","in":"query","required":false,"schema":{"type":"string"}},{"name":"to","in":"query","required":false,"schema":{"type":"string"}},{"name":"engines","in":"query","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/VisibilityExport"}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"viewer","x-vercatus-key-scopes":["read","export"]}},"/mcp/context":{"get":{"operationId":"getMcpContext","tags":["Integrations"],"summary":"Who this caller is to Vercatus: the workspace, the key's scopes, sites and expiry (for an API key), and the sites it can see.","description":"Who this caller is to Vercatus: the workspace, the key's scopes, sites and expiry (for an API key), and the sites it can see. MCP clients check a key with it.","responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"workspace":{"anyOf":[{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"plan":{"type":"string"}},"required":["id","name","plan"]},{"type":"null"}]},"via":{"type":"string","enum":["single","session","apikey"]},"role":{"type":"string","enum":["analyst","owner","admin","viewer","client"]},"key":{"anyOf":[{"type":"object","properties":{"name":{"type":"string"},"expiresAt":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"siteIds":{"anyOf":[{"type":"array","items":{"type":"string"}},{"type":"null"}]},"prefix":{"type":"string"},"scopes":{"type":"array","items":{"type":"string"}}},"required":["name","expiresAt","siteIds","prefix","scopes"]},{"type":"null"}]},"sites":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"host":{"type":"string"}},"required":["id","host"]}}},"required":["workspace","via","role","sites"]}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"viewer","x-vercatus-key-scopes":["read"]}},"/openapi.json":{"get":{"operationId":"getOpenapiJson","tags":["Integrations"],"summary":"This API as an OpenAPI 3.1 document, for code generators, API clients and the docs' reference.","description":"This API as an OpenAPI 3.1 document, for code generators, API clients and the docs' reference. Public: it describes routes, not data.","responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object"}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"security":[],"x-vercatus-role":null,"x-vercatus-key-scopes":null}},"/sites/{id}/ai-demand":{"get":{"operationId":"getSitesByIdAiDemand","tags":["Vercatus Intelligence"],"summary":"The AI Demand Index of the site's active topics (PHASE-5.md §3): per topic, AI conversations a month in its market as a range (low–high, the 10th–90th percentil","description":"The AI Demand Index of the site's active topics (PHASE-5.md §3): per topic, AI conversations a month in its market as a range (`low`–`high`, the 10th–90th percentile of 5,000 draws over the factors' ranges, `mid` the median), its grade (A–D), whether it is calibrated by first-party data (`calibrated`, `calibratedSites`), every factor as a source with its value and date, and a sentence; null until the daily pass has estimated it. `coverage`: the share (0–1) of the market's searched demand the topics cover and the engines' sub-queries that belong to no topic, with their volume and engines. `weighting`: whether Answer Share weights topics by demand or tier. The assistant-fetch demand stays GET /sites/:id/demand.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"topics":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"demand":{"type":"null"}},"required":["id","name","demand"]},{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"demand":{"type":"object","properties":{"measured":{"anyOf":[{"$ref":"#/components/schemas/Shape1rvdkgg"},{"type":"null"}]},"mentions":{"anyOf":[{"$ref":"#/components/schemas/Shape1chg9iz"},{"type":"null"}]},"month":{"type":"string"},"market":{"type":"string"},"unit":{"type":"string"},"keywords":{"type":"number"},"keywordsWithVolume":{"type":"number"},"keywordsCounted":{"type":"number"},"computedAt":{"type":"string"},"sources":{"type":"array","items":{}},"refresh":{"anyOf":[{"type":"object","properties":{"failedAt":{"type":"string"},"reason":{"anyOf":[{"type":"string"},{"type":"null"}]},"text":{"type":"string"}},"required":["failedAt","reason","text"]},{"type":"null"}]},"status":{"type":"string","enum":["not_estimated"]},"reason":{"type":"string"},"why":{"type":"string","enum":["brand_not_searched","no_volume","thin_evidence"]},"low":{"type":"null"},"mid":{"type":"null"},"high":{"type":"null"},"grade":{"type":"null"},"calibrated":{"type":"boolean"},"calibratedSites":{"type":"number"},"calibration":{"type":"object","properties":{"status":{"type":"string"},"sites":{"type":"number"},"text":{"type":"string"}},"required":["status","sites","text"]},"label":{"type":"string"}},"required":["measured","mentions","month","market","unit","keywords","keywordsWithVolume","keywordsCounted","computedAt","sources","refresh","status","reason","why","low","mid","high","grade","calibrated","calibratedSites","calibration","label"]}},"required":["id","name","demand"]},{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"demand":{"type":"object","properties":{"measured":{"anyOf":[{"$ref":"#/components/schemas/Shape1rvdkgg"},{"type":"null"}]},"mentions":{"anyOf":[{"$ref":"#/components/schemas/Shape1chg9iz"},{"type":"null"}]},"month":{"type":"string"},"market":{"type":"string"},"unit":{"type":"string"},"keywords":{"type":"number"},"keywordsWithVolume":{"type":"number"},"keywordsCounted":{"type":"number"},"computedAt":{"type":"string"},"sources":{"type":"array","items":{}},"refresh":{"anyOf":[{"type":"object","properties":{"failedAt":{"type":"string"},"reason":{"anyOf":[{"type":"string"},{"type":"null"}]},"text":{"type":"string"}},"required":["failedAt","reason","text"]},{"type":"null"}]},"status":{"type":"string","enum":["estimated"]},"reason":{"type":"null"},"low":{"type":"number"},"mid":{"type":"number"},"high":{"type":"number"},"grade":{"type":"string","enum":["A","B","C","D"]},"calibrated":{"type":"boolean"},"calibratedSites":{"type":"number"},"rangeShown":{"type":"boolean"},"searched":{"anyOf":[{"type":"object","properties":{"volume":{"type":"number"},"searches":{"type":"number"},"keyword":{"type":"string"},"form":{"type":"string","enum":["full","trimmed"]},"largest":{"type":"number"}},"required":["volume","searches","keyword","form","largest"]},{"type":"null"}]},"modelled":{"type":"string"},"capped":{"type":"array","items":{}},"calibration":{"type":"object","properties":{"status":{"type":"string","enum":["not_calibrated","calibrated"]},"sites":{"type":"number"},"text":{"type":"string"}},"required":["status","sites","text"]},"label":{"type":"string"}},"required":["measured","mentions","month","market","unit","keywords","keywordsWithVolume","keywordsCounted","computedAt","sources","refresh","status","reason","low","mid","high","grade","calibrated","calibratedSites","rangeShown","searched","modelled","capped","calibration","label"]}},"required":["id","name","demand"]}]}},"coverage":{"type":"object","properties":{"uncovered":{"type":"array","items":{"type":"object","properties":{"query":{"type":"string"},"volume":{"anyOf":[{"type":"number"},{"type":"null"}]},"engines":{"type":"array","items":{"type":"string"}},"form":{"type":"string","enum":["full","trimmed"]},"looked":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["query","volume","engines","form","looked"]}},"unmatched":{"type":"number"},"coveredVolume":{"type":"number"},"uncoveredVolume":{"type":"number"},"month":{"type":"string"},"share":{"anyOf":[{"type":"number"},{"type":"null"}]},"basis":{"anyOf":[{"type":"string","enum":["known_volume"]},{"type":"null"}]},"known":{"type":"number"},"of":{"type":"number"}},"required":["uncovered","unmatched","coveredVolume","uncoveredVolume","month","share","basis","known","of"]},"weighting":{"type":"object","properties":{"kind":{"type":"string","enum":["tier","demand"]},"gradedB":{"type":"number"},"of":{"type":"number"}},"required":["kind","gradedB","of"]},"note":{"type":"string"}},"required":["topics","coverage","weighting","note"]}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"viewer","x-vercatus-key-scopes":["read"]}},"/intelligence/playbooks":{"get":{"operationId":"getIntelligencePlaybooks","tags":["Vercatus Intelligence"],"summary":"The engine playbooks (PHASE-5.md §4): per play type, engine, vertical and market, what plays like it did across sites (customer verdicts, and natural experiment","description":"`?vertical=&engine=&market=`: the engine playbooks (PHASE-5.md §4): per play type, engine, vertical and market, what plays like it did across sites (customer verdicts, and natural experiments at half weight): n, sites, the won rate (a share in percent with its Wilson range, shrunk toward the parent segment) and the median effect with its range, with a sentence. Only segments with three workspaces or more (the privacy floor); aggregates, never a workspace. Markets roll up to their language and to all markets, and each play type's record is the most specific segment that clears the floor, with its `scope` in words. `research`: per play type, the knowledge-base entries that support it, with their grades, kept apart from the records (DATA-INTEGRITY-QA.md DQ-41).","parameters":[{"name":"vertical","in":"query","required":false,"schema":{"type":"string"}},{"name":"engine","in":"query","required":false,"schema":{"type":"string"}},{"name":"market","in":"query","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"segments":{"type":"array","items":{"$ref":"#/components/schemas/Shape1m9zdy8"}},"research":{"type":"array","items":{"type":"object","properties":{"playType":{"type":"string"},"phrase":{"type":"string"},"entries":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"rule":{"anyOf":[{"type":"string"},{"type":"null"}]},"grade":{"type":"string","enum":["A","B","C","D"]},"claim":{"type":"string"},"basis":{"type":"string"},"evidence":{"type":"boolean"},"source":{}},"required":["id","rule","grade","claim","basis","evidence","source"]}}},"required":["playType","phrase","entries"]}},"floors":{"type":"object","properties":{"sites":{"type":"number"},"gains":{"type":"number"},"noEffect":{"type":"number"},"counts":{"type":"string","enum":["workspaces"]}},"required":["sites","gains","noEffect","counts"]}},"required":["segments","research","floors"]}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"viewer","x-vercatus-key-scopes":["read"]}},"/intelligence/communities":{"get":{"operationId":"getIntelligenceCommunities","tags":["Vercatus Intelligence"],"summary":"How much of the answers in a market cite forums, Q&A sites and communities across every Vercatus site, over the last 28 days.","description":"`?market=` (a code such as hu-HU; required): how much of the answers in a market cite forums, Q&A sites and communities across every Vercatus site, over the last 28 days. The share of search answers citing any community with its Wilson range, per engine, and the platforms (reddit.com, quora.com, a forum host) by the share of answers citing them. A market is shown from three sites and thirty answers, a platform or an engine from three sites; below that the answer is `{ withheld: true, reason }` with no figure. Aggregates, never a workspace, a site, a topic or a subreddit.","parameters":[{"name":"market","in":"query","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"anyOf":[{"type":"object","properties":{"market":{"type":"string"},"days":{"type":"number"},"withheld":{"type":"boolean","enum":[true]},"reason":{"type":"string"}},"required":["market","days","withheld","reason"]},{"type":"object","properties":{"market":{"type":"string"},"days":{"type":"number"},"withheld":{"type":"boolean","enum":[false]},"sites":{"type":"number"},"all":{"type":"object","properties":{"answers":{"type":"number"},"withCommunity":{"type":"number"},"pct":{"type":"number"},"lo":{"type":"number"},"hi":{"type":"number"}},"required":["answers","withCommunity","pct","lo","hi"]},"byEngine":{"type":"array","items":{"type":"object","properties":{"answers":{"type":"number"},"withCommunity":{"type":"number"},"pct":{"type":"number"},"lo":{"type":"number"},"hi":{"type":"number"},"engine":{"type":"string"},"label":{"type":"string"}},"required":["answers","withCommunity","pct","lo","hi","engine","label"]}},"platforms":{"type":"array","items":{"type":"object","properties":{"platform":{"type":"string"},"kind":{"type":"string","enum":["forum","qa","social"]},"pct":{"type":"number"},"sites":{"type":"number"}},"required":["platform","kind","pct","sites"]}}},"required":["market","days","withheld","sites","all","byEngine","platforms"]}]}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"viewer","x-vercatus-key-scopes":["read"]}},"/intelligence/changes":{"get":{"operationId":"getIntelligenceChanges","tags":["Vercatus Intelligence"],"summary":"The engines' confirmed changes of the last 90 days (PHASE-5.md §4): drifts in what an engine cites and new models, in plain words, each drift with the caller's ","description":"The engines' confirmed changes of the last 90 days (PHASE-5.md §4): drifts in what an engine cites and new models, in plain words, each drift with the caller's topics whose cited pages changed (`topics[]` with `siteId`), and per engine the caller's topics whose cited pages changed this fortnight against the one before (kind `pages`, three pages or more on each side). `watching` says what the check rests on: the caller's engines, topics and answers in 28 days, and the platform detector's citation changes this week against its bar. Keeps to the caller's sites.","responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"changes":{"type":"array","items":{"type":"object","properties":{"engine":{"type":"string"},"at":{"type":"string"},"kind":{"type":"string","enum":["pages","model","drift","platform"]},"text":{"type":"string"},"topics":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"siteId":{"type":"string"}},"required":["id","name","siteId"]}},"churn":{"type":"object","properties":{"engine":{"type":"string"},"pct":{"type":"number"},"usualPct":{"anyOf":[{"type":"number"},{"type":"null"}]},"questions":{"type":"number"},"answers":{"type":"number"}},"required":["engine","pct","usualPct","questions","answers"]}},"required":["engine","at","kind","text"]}},"watching":{"type":"object","properties":{"engines":{"type":"number"},"topics":{"type":"number"},"answers":{"type":"number"},"platformChanges":{"type":"number"},"platformBar":{"type":"number"}},"required":["engines","topics","answers","platformChanges","platformBar"]}},"required":["changes","watching"]}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"viewer","x-vercatus-key-scopes":["read"]}},"/intelligence/rewards":{"get":{"operationId":"getIntelligenceRewards","tags":["Vercatus Intelligence"],"summary":"What the engines in scope reward, against the site's own pages (DATA-INTEGRITY-QA.md DQ-10): each engine's strongest learned patterns (the site's vertical's own","description":"`?siteId=&engines=a,b`: what the engines in scope reward, against the site's own pages (DATA-INTEGRITY-QA.md DQ-10): each engine's strongest learned patterns (the site's vertical's own where that segment has cleared the bar, else the engine-wide ones), the medians of the pages it cites and passes over, the site's median over its observed pages and where it sits. Global aggregates over public-web observations, the same for every workspace; correlational, never a verdict. Available from a site's first day: the patterns do not wait for its own verdicts.","parameters":[{"name":"siteId","in":"query","required":false,"schema":{"type":"string"}},{"name":"engines","in":"query","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"kindLabel":{"anyOf":[{"type":"string"},{"type":"null"}]},"vertical":{"anyOf":[{"type":"string"},{"type":"null"}]},"pages":{"type":"number"},"items":{"type":"array","items":{"type":"object","properties":{"label":{"type":"string"},"engine":{"type":"string"},"key":{"type":"string"},"effect":{"type":"number"},"pools":{"type":"number"},"indicator":{"type":"string"},"direction":{"type":"string","enum":["higher","lower"]},"lo":{"type":"number"},"hi":{"type":"number"},"hosts":{"anyOf":[{"type":"number"},{"type":"null"}]},"citedMedian":{"anyOf":[{"type":"number"},{"type":"null"}]},"otherMedian":{"anyOf":[{"type":"number"},{"type":"null"}]},"trend":{"type":"string"},"family":{"type":"string"},"headline":{"type":"string"},"biased":{"type":"boolean"},"readableShare":{"anyOf":[{"type":"number"},{"type":"null"}]},"unit":{"type":"string"},"scope":{"type":"string","enum":["vertical","all"]},"you":{"anyOf":[{"type":"object","properties":{"median":{"type":"number"},"n":{"type":"number"}},"required":["median","n"]},{"type":"null"}]},"standing":{"type":"string","enum":["unknown","like_cited","between","like_passed_over"]}},"required":["label","engine","key","effect","pools","indicator","direction","lo","hi","hosts","citedMedian","otherMedian","trend","family","headline","biased","readableShare","unit","scope","you","standing"]}}},"required":["kindLabel","vertical","pages","items"]}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"viewer","x-vercatus-key-scopes":["read"]}},"/intelligence/engine-advice":{"get":{"operationId":"getIntelligenceEngineAdvice","tags":["Vercatus Intelligence"],"summary":"What engines say they reward (EA-13..17), for the site's segment (its kind, else its vertical) and market, or across every segment and market without a site: pe","description":"`?siteId=&engines=a,b`: what engines say they reward (EA-13..17), for the site's segment (its kind, else its vertical) and market, or across every segment and market without a site: per engine, kind of change and theme cluster, the share of briefed sites whose engines say it in a consensus of their latest briefs (`advice`), the most specific record that clears the privacy floor (three workspaces) and cannot be subtracted from another, with its `scope` in words; counts are coarse lower bounds and shares to 5 points, a cluster's `label` only words three workspaces' themes share, never an example. Engines say: perception, not a measured effect (`framing`). `outcomes`: per engine and kind, how often plays made or backed by such advice won 45 days after shipping, from three workspaces. `own`: when nothing pooled clears the floor, the site's own consensus themes of its latest week. Scoped to the caller's sites; no cost and no workspace count.","parameters":[{"name":"siteId","in":"query","required":false,"schema":{"type":"string"}},{"name":"engines","in":"query","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"framing":{"type":"string","enum":["Engines say: how engines describe what they reward, not a measured effect. A verdict on a shipped play is the proof."]},"scope":{"type":"object","properties":{"segment":{"anyOf":[{"type":"string"},{"type":"null"}]},"market":{"type":"string"},"words":{"type":"string"}},"required":["segment","market","words"]},"advice":{"type":"array","items":{"type":"object","properties":{"engine":{"type":"string"},"kind":{"type":"string"},"kindWords":{"type":"string"},"label":{"anyOf":[{"type":"string"},{"type":"null"}]},"share":{"type":"number"},"nSites":{"type":"number"},"briefedSites":{"type":"number"},"countsAtLeast":{"type":"boolean","enum":[true]},"scope":{"type":"object","properties":{"segment":{"type":"string"},"market":{"type":"string"},"words":{"type":"string"}},"required":["segment","market","words"]},"note":{"type":"string"}},"required":["engine","kind","kindWords","label","share","nSites","briefedSites","countsAtLeast","scope","note"]}},"outcomes":{"type":"array","items":{"type":"object","properties":{"engine":{"type":"string"},"kind":{"type":"string"},"kindWords":{"type":"string"},"n":{"type":"number"},"nSites":{"type":"number"},"wonRate":{"type":"object","properties":{"pct":{"type":"number"},"lo":{"type":"number"},"hi":{"type":"number"}},"required":["pct","lo","hi"]},"countsAtLeast":{"type":"boolean","enum":[true]},"note":{"type":"string"}},"required":["engine","kind","kindWords","n","nSites","wonRate","countsAtLeast","note"]}},"own":{"anyOf":[{"type":"object","properties":{"week":{"type":"string"},"themes":{"type":"array","items":{"type":"object","properties":{"theme":{"type":"string"},"kind":{"type":"string"},"kindWords":{"type":"string"},"direction":{"type":"string","enum":["against","would_change","advice","prefers_rival"]},"rival":{"anyOf":[{"type":"string"},{"type":"null"}]},"engines":{"type":"array","items":{"type":"string"}},"engineCount":{"type":"number"},"enginesBriefed":{"type":"number"},"corroboratedBy":{"type":"array","items":{"type":"string","enum":["search","memory","sources","audit"]}},"example":{"anyOf":[{"type":"object","properties":{"engine":{"type":"string"},"text":{"type":"string"}},"required":["engine","text"]},{"type":"null"}]}},"required":["theme","kind","kindWords","direction","rival","engines","engineCount","enginesBriefed","corroboratedBy","example"]}}},"required":["week","themes"]},{"type":"null"}]},"floors":{"type":"object","properties":{"workspaces":{"type":"number"},"counts":{"type":"string","enum":["workspaces"]}},"required":["workspaces","counts"]}},"required":["framing","scope","advice","outcomes","own","floors"]}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"viewer","x-vercatus-key-scopes":["read"]}},"/mos":{"get":{"operationId":"getMos","tags":["Vercatus Intelligence"],"summary":"Deprecated (PHASE-1.md): kept for MCP and exports; Answer Share and the competitor pages replaced it on screens.","description":"Deprecated (PHASE-1.md): kept for MCP and exports; Answer Share and the competitor pages replaced it on screens. `?hosts=a.com,b.com`: the latest MOS of up to 50 domains with range, pages and per-engine scores. Hosts never scored are listed under `missing`. On the free report, only the workspace's own sites.","parameters":[{"name":"hosts","in":"query","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"scores":{"type":"object","additionalProperties":{"$ref":"#/components/schemas/Shape72vm64"}},"missing":{"type":"array","items":{"type":"string"}},"withheld":{"type":"array","items":{"type":"string"}}},"required":["scores","missing","withheld"]}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"deprecated":true,"x-vercatus-role":"viewer","x-vercatus-key-scopes":["read"]}},"/mos/{host}":{"get":{"operationId":"getMosByHost","tags":["Vercatus Intelligence"],"summary":"Deprecated (PHASE-1.md): kept for MCP and exports.","description":"Deprecated (PHASE-1.md): kept for MCP and exports. One domain's MOS: the latest breakdown (every lost point with its rule, pages affected and KB ids), per-engine scores and the weights behind them, 90 days of history, the observation window and the rule catalogue.","parameters":[{"name":"host","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"host":{"type":"string"},"state":{"type":"string","enum":["scored","not_enough_pages"]},"observed":{"type":"object","properties":{"documents":{"type":"number"},"from":{"anyOf":[{"type":"string"},{"type":"null"}]},"to":{"anyOf":[{"type":"string"},{"type":"null"}]},"minimum":{"type":"number"}},"required":["documents","from","to","minimum"]},"domain":{"anyOf":[{"type":"object","properties":{"vertical":{"anyOf":[{"type":"string"},{"type":"null"}]},"language":{"anyOf":[{"type":"string"},{"type":"null"}]},"citations":{"type":"number"},"answers":{"type":"number"}},"required":["vertical","language","citations","answers"]},{"type":"null"}]},"latest":{"anyOf":[{"type":"object","properties":{"day":{"type":"string"},"score":{"type":"number"},"lo":{"type":"number"},"hi":{"type":"number"},"documents":{"type":"number"},"rulesVersion":{"type":"string"},"engines":{"type":"object","additionalProperties":{"type":"number"}},"coverage":{"anyOf":[{"type":"number"},{"type":"null"}]},"components":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","enum":["agent","evidence","structure","access","extractability","entity"]},"label":{"type":"string"},"score":{"type":"number"},"max":{"type":"number"},"coverage":{"anyOf":[{"type":"number"},{"type":"null"}]},"lost":{"type":"array","items":{}}},"required":["id","label","score","max","coverage","lost"]}}},"required":["day","score","lo","hi","documents","rulesVersion","engines","coverage","components"]},{"type":"null"}]},"history":{"type":"array","items":{"$ref":"#/components/schemas/Shape1ado3w3"}},"weights":{"type":"object","additionalProperties":{"type":"object","properties":{"weights":{"type":"object","properties":{"agent":{"type":"number"},"evidence":{"type":"number"},"structure":{"type":"number"},"access":{"type":"number"},"extractability":{"type":"number"},"entity":{"type":"number"}},"required":["agent","evidence","structure","access","extractability","entity"]},"refit":{"type":"number"}},"required":["weights","refit"]}},"rules":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"component":{"type":"string","enum":["agent","evidence","structure","access","extractability","entity"]},"componentLabel":{"type":"string"},"title":{"type":"string"},"points":{"type":"number"},"indicators":{"type":"array","items":{"type":"string"}},"also":{"type":"array","items":{"type":"string"}},"kb":{"type":"array","items":{"type":"string"}},"unsupported":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["id","component","componentLabel","title","points","indicators","also","kb","unsupported"]}}},"required":["host","state","observed","domain","latest","history","weights","rules"]}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"deprecated":true,"x-vercatus-role":"viewer","x-vercatus-key-scopes":["read"]}},"/sites/{id}/competitors/landscape":{"get":{"operationId":"getSitesByIdCompetitorsLandscape","tags":["Vercatus Intelligence"],"summary":"Deprecated (PHASE-2.md): replaced by GET /api/sites/:id/competitors.","description":"Deprecated (PHASE-2.md): replaced by GET /api/sites/:id/competitors. A site's competitive landscape: its MOS beside its named competitors and the hosts most often cited with it, overall and per engine, with the co-citation neighbourhood (nodes with MOS, edges with weights) for the network graph. `?limit=&minWeight=` shape the graph.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"schema":{"type":"string"}},{"name":"minWeight","in":"query","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"anyOf":[{"type":"object","properties":{"site":{"$ref":"#/components/schemas/Shape18fgeoh"},"competitors":{"type":"array","items":{}},"cocited":{"type":"array","items":{}},"engines":{"type":"array","items":{}},"network":{"type":"null"},"history":{"type":"array","items":{"$ref":"#/components/schemas/Shape1ado3w3"}},"limited":{"type":"string"}},"required":["site","competitors","cocited","engines","network","history","limited"]},{"type":"object","properties":{"site":{"$ref":"#/components/schemas/Shape18fgeoh"},"competitors":{"type":"array","items":{"type":"object","properties":{"host":{"type":"string"},"mos":{"$ref":"#/components/schemas/Shape72vm64"},"ahead":{"anyOf":[{"type":"boolean"},{"type":"null"}]}},"required":["host","mos","ahead"]}},"cocited":{"type":"array","items":{"type":"object","properties":{"mos":{"$ref":"#/components/schemas/Shape72vm64"},"ahead":{"anyOf":[{"type":"boolean"},{"type":"null"}]},"host":{"type":"string"},"weight":{"type":"number"},"questions":{"type":"number"},"engines":{"type":"object","additionalProperties":{"type":"number"}}},"required":["mos","ahead","host","weight","questions","engines"]}},"engines":{"type":"array","items":{"type":"object","properties":{"engine":{"type":"string","enum":["anthropic","perplexity","openai","gemini","xai","mistral","you","google_aio"]},"label":{"type":"string"},"site":{"type":"number"},"rivals":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"score":{"type":"number"},"host":{"type":"string"},"why":{"type":"string","enum":["named"]}},"required":["score","host","why"]},{"type":"object","properties":{"score":{"type":"number"},"host":{"type":"string"},"why":{"type":"string","enum":["cocited"]}},"required":["score","host","why"]}]}}},"required":["engine","label","site","rivals"]}},"components":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","enum":["agent","evidence","structure","access","extractability","entity"]},"label":{"type":"string"}},"required":["id","label"]}},"network":{"type":"object","properties":{"center":{"type":"string"},"nodes":{"type":"array","items":{"type":"object","properties":{"host":{"type":"string"},"role":{"type":"string","enum":["competitor","cocited","self"]},"mos":{"anyOf":[{"type":"object","properties":{"score":{"type":"number"},"lo":{"type":"number"},"hi":{"type":"number"},"engines":{},"documents":{"type":"number"},"coverage":{"anyOf":[{"type":"number"},{"type":"null"}]}},"required":["score","lo","hi","engines","documents","coverage"]},{"type":"null"}]},"citations":{"type":"number"},"vertical":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["host","role","mos","citations","vertical"]}},"edges":{"type":"array","items":{"type":"object","properties":{"a":{"type":"string"},"b":{"type":"string"},"weight":{"type":"number"},"questions":{"type":"number"},"engines":{"type":"object","additionalProperties":{"type":"number"}}},"required":["a","b","weight","questions","engines"]}},"windowEnd":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["center","nodes","edges","windowEnd"]},"history":{"type":"array","items":{"$ref":"#/components/schemas/Shape1ado3w3"}}},"required":["site","competitors","cocited","engines","components","network","history"]}]}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"deprecated":true,"x-vercatus-role":"viewer","x-vercatus-key-scopes":["read"]}},"/notices":{"get":{"operationId":"getNotices","tags":["Vercatus Intelligence"],"summary":"The workspace's notices (drift touching its pages, competitors passing it, prompt changes), newest first, with the unread count.","description":"`?siteId=&unread=1&dismissed=1&kind=&before=&limit=`: the workspace's notices (drift touching its pages, competitors passing it, prompt changes), newest first, with the unread count. Dismissed ones only when asked.","parameters":[{"name":"siteId","in":"query","required":false,"schema":{"type":"string"}},{"name":"unread","in":"query","required":false,"schema":{"type":"string"}},{"name":"dismissed","in":"query","required":false,"schema":{"type":"string"}},{"name":"kind","in":"query","required":false,"schema":{"type":"string"}},{"name":"before","in":"query","required":false,"schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"notices":{"type":"array","items":{"$ref":"#/components/schemas/Shapergbjnn"}},"unread":{"type":"number"}},"required":["notices","unread"]}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"viewer","x-vercatus-key-scopes":["read"]}},"/notices/{id}":{"patch":{"operationId":"patchNoticesById","tags":["Vercatus Intelligence"],"summary":"Mark a notice read or unread for the workspace, or dismiss and restore it (analyst and above).","description":"`{ read?: boolean, dismissed?: boolean }`: mark a notice read or unread for the workspace, or dismiss and restore it (analyst and above).","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"read":{"type":"boolean"},"dismissed":{"type":"boolean"}}}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Shapergbjnn"}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"viewer","x-vercatus-key-scopes":["write"]}},"/matrix":{"get":{"operationId":"getMatrix","tags":["Answer engines"],"summary":"Per engine: cited share with its interval, mentioned share, questions asked and cited, the trend against the previous period of the same length, crawler access,","description":"Per engine: cited share with its interval, mentioned share, questions asked and cited, the trend against the previous period of the same length, crawler access, the hosts cited in the site's place, the engine's retrieval focus, and for Google the share of results pages without an AI Overview. `?siteId=` for one site, else every site of the workspace. Query: `?engines=` (comma-separated answer engine ids), `?from=` (start of the period (an ISO date)), `?to=` (end of the period (an ISO date)).","parameters":[{"name":"siteId","in":"query","required":false,"schema":{"type":"string"}},{"name":"engines","in":"query","required":false,"schema":{"type":"string"}},{"name":"from","in":"query","required":false,"schema":{"type":"string"}},{"name":"to","in":"query","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"from":{"type":"string"},"to":{"type":"string"},"previous":{"type":"object","properties":{"from":{"type":"string"},"to":{"type":"string"},"fromDate":{"type":"string"},"toDate":{"type":"string"}},"required":["from","to","fromDate","toDate"]},"siteId":{"anyOf":[{"type":"string"},{"type":"null"}]},"sites":{"type":"number"},"rows":{"type":"array","items":{"type":"object","properties":{"engine":{"type":"string"},"label":{"type":"string"},"focus":{"type":"string"},"retrieval":{"type":"string"},"answered":{"type":"number"},"noAnswer":{"type":"number"},"noAnswerShare":{"anyOf":[{"type":"number"},{"type":"null"}]},"cited":{"type":"object","properties":{"k":{"type":"number"},"n":{"type":"number"},"share":{"type":"number"},"band":{"type":"array","items":{"anyOf":[{"type":"number"}]}}},"required":["k","n","share","band"]},"mentioned":{"type":"object","properties":{"k":{"type":"number"},"n":{"type":"number"},"share":{"type":"number"}},"required":["k","n","share"]},"questions":{"type":"object","properties":{"asked":{"type":"number"},"cited":{"type":"number"}},"required":["asked","cited"]},"trend":{"$ref":"#/components/schemas/Shapeosa4qd"},"winners":{"type":"array","items":{"type":"object","properties":{"host":{"type":"string"},"n":{"type":"number"},"url":{"type":"string"}},"required":["host","n","url"]}},"access":{"anyOf":[{"type":"object","properties":{"state":{"type":"string","enum":["unknown","blocked","partial","open"]},"checkedAt":{"anyOf":[{"type":"string"},{"type":"null"}]},"identities":{"type":"array","items":{}}},"required":["state","checkedAt","identities"]},{"type":"null"}]},"sources":{"type":"object","properties":{"panel":{"type":"number"},"prompt":{"type":"number"}},"required":["panel","prompt"]},"lastAt":{"anyOf":[{"type":"string"},{"type":"null"}]},"completeness":{"anyOf":[{"type":"object","properties":{"asked":{"type":"number"},"answered":{"type":"number"},"errored":{"type":"number"},"noAnswer":{"type":"number"},"rate":{"type":"number"},"partial":{"type":"boolean"}},"required":["asked","answered","errored","noAnswer","rate","partial"]},{"type":"null"}]},"partial":{"type":"boolean"}},"required":["engine","label","focus","retrieval","answered","noAnswer","noAnswerShare","cited","mentioned","questions","trend","winners","access","sources","lastAt"]}},"totals":{"type":"object","properties":{"observations":{"type":"number"},"questions":{"type":"number"},"prompts":{"type":"number"}},"required":["observations","questions","prompts"]},"winners":{"type":"array","items":{"type":"object","properties":{"host":{"type":"string"},"n":{"type":"number"},"url":{"type":"string"},"engines":{"type":"array","items":{"type":"string"}}},"required":["host","n","url","engines"]}},"completeness":{"type":"object","properties":{"asked":{"type":"number"},"answered":{"type":"number"},"errored":{"type":"number"},"noAnswer":{"type":"number"},"rate":{"type":"number"},"partial":{"type":"boolean"}},"required":["asked","answered","errored","noAnswer","rate","partial"]},"partial":{"type":"boolean"}},"required":["from","to","previous","siteId","sites","rows","totals","winners","completeness","partial"]}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"viewer","x-vercatus-key-scopes":["read"]}},"/matrix/questions":{"get":{"operationId":"getMatrixQuestions","tags":["Answer engines"],"summary":"Deprecated (PHASE-1.md): replaced by the topics endpoints.","description":"Deprecated (PHASE-1.md): replaced by the topics endpoints. Questions × engines for one site (`?siteId=` required): the panel's questions and the tracked prompts, each cell cited, mentioned, not cited or no answer, with the asks behind it. Query: `?engines=` (comma-separated answer engine ids), `?from=` (start of the period (an ISO date)), `?to=` (end of the period (an ISO date)).","parameters":[{"name":"siteId","in":"query","required":false,"schema":{"type":"string"}},{"name":"engines","in":"query","required":false,"schema":{"type":"string"}},{"name":"from","in":"query","required":false,"schema":{"type":"string"}},{"name":"to","in":"query","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"engines":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"label":{"type":"string"},"completeness":{"anyOf":[{"type":"object","properties":{"asked":{"type":"number"},"answered":{"type":"number"},"errored":{"type":"number"},"noAnswer":{"type":"number"},"rate":{"type":"number"},"partial":{"type":"boolean"}},"required":["asked","answered","errored","noAnswer","rate","partial"]},{"type":"null"}]},"partial":{"type":"boolean"}},"required":["id","label","completeness","partial"]}},"rows":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string"},"query":{"type":"string"},"sources":{"type":"array","items":{"type":"string","enum":["panel","prompt"]}},"promptId":{"anyOf":[{"type":"string"},{"type":"null"}]},"cells":{"type":"object","additionalProperties":{"type":"object","properties":{"state":{"type":"string","enum":["cited","mentioned","no_answer","not"]},"asked":{"type":"number"},"cited":{"type":"number"},"mentioned":{"type":"number"},"noAnswer":{"type":"number"},"samples":{"type":"number"},"citedSamples":{"type":"number"},"mentionedSamples":{"type":"number"},"lastAt":{"type":"string"}},"required":["state","asked","cited","mentioned","noAnswer","samples","citedSamples","lastAt"]}}},"required":["key","query","sources","promptId","cells"]}},"site":{"type":"object","properties":{"id":{"type":"string"},"host":{"type":"string"}},"required":["id","host"]},"from":{"type":"string"},"to":{"type":"string"}},"required":["engines","rows","site","from","to"]}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"deprecated":true,"x-vercatus-role":"viewer","x-vercatus-key-scopes":["read"]}},"/sites/{id}/pages/cited":{"get":{"operationId":"getSitesByIdPagesCited","tags":["Sites"],"summary":"Which of the site's pages real answers cited: per page path, the asks whose answer cited it, the questions and the engines, and every ask with an answer in the ","description":"`?days=` (90, at most 365): which of the site's pages real answers cited: per page path, the asks whose answer cited it, the questions and the engines, and every ask with an answer in the window.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"days","in":"query","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"asked":{"type":"number"},"pages":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"answers":{"type":"number"},"questions":{"type":"number"},"engines":{"type":"array","items":{"type":"string"}}},"required":["path","answers","questions","engines"]}},"days":{"type":"number"}},"required":["asked","pages","days"]}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"viewer","x-vercatus-key-scopes":["read"]}},"/matrix/engines/{engine}":{"get":{"operationId":"getMatrixEnginesByEngine","tags":["Answer engines"],"summary":"One engine in depth (?siteId= optional): every question with its latest answer and the hosts cited instead, who wins most often in the site's place, and the wee","description":"One engine in depth (`?siteId=` optional): every question with its latest answer and the hosts cited instead, who wins most often in the site's place, and the weekly cited share. Query: `?from=` (start of the period (an ISO date)), `?to=` (end of the period (an ISO date)).","parameters":[{"name":"engine","in":"path","required":true,"schema":{"type":"string"}},{"name":"siteId","in":"query","required":false,"schema":{"type":"string"}},{"name":"from","in":"query","required":false,"schema":{"type":"string"}},{"name":"to","in":"query","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"engine":{"type":"string"},"label":{"type":"string"},"focus":{"type":"string"},"retrieval":{"type":"string"},"summary":{"type":"object","properties":{"engine":{"type":"string"},"label":{"type":"string"},"focus":{"type":"string"},"retrieval":{"type":"string"},"answered":{"type":"number"},"noAnswer":{"type":"number"},"noAnswerShare":{"anyOf":[{"type":"number"},{"type":"null"}]},"cited":{"type":"object","properties":{"k":{"type":"number"},"n":{"type":"number"},"share":{"type":"number"},"band":{"type":"array","items":{"anyOf":[{"type":"number"}]}}},"required":["k","n","share","band"]},"mentioned":{"type":"object","properties":{"k":{"type":"number"},"n":{"type":"number"},"share":{"type":"number"}},"required":["k","n","share"]},"questions":{"type":"object","properties":{"asked":{"type":"number"},"cited":{"type":"number"}},"required":["asked","cited"]},"trend":{"$ref":"#/components/schemas/Shapeosa4qd"},"winners":{"type":"array","items":{"type":"object","properties":{"host":{"type":"string"},"n":{"type":"number"},"url":{"type":"string"}},"required":["host","n","url"]}},"access":{"anyOf":[{"type":"object","properties":{"state":{"type":"string","enum":["unknown","blocked","partial","open"]},"checkedAt":{"anyOf":[{"type":"string"},{"type":"null"}]},"identities":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"served":{"type":"number"},"of":{"type":"number"},"robots":{"anyOf":[{"type":"boolean"},{"type":"null"}]}},"required":["id","served","of","robots"]}}},"required":["state","checkedAt","identities"]},{"type":"null"}]},"sources":{"type":"object","properties":{"panel":{"type":"number"},"prompt":{"type":"number"}},"required":["panel","prompt"]},"lastAt":{"anyOf":[{"type":"string"},{"type":"null"}]},"completeness":{"anyOf":[{"type":"object","properties":{"asked":{"type":"number"},"answered":{"type":"number"},"errored":{"type":"number"},"noAnswer":{"type":"number"},"rate":{"type":"number"},"partial":{"type":"boolean"}},"required":["asked","answered","errored","noAnswer","rate","partial"]},{"type":"null"}]},"partial":{"type":"boolean"}},"required":["engine","label","focus","retrieval","answered","noAnswer","noAnswerShare","cited","mentioned","questions","trend","winners","access","sources","lastAt"]},"questions":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string"},"query":{"type":"string"},"state":{"type":"string","enum":["cited","mentioned","no_answer","not"]},"asked":{"type":"number"},"samples":{"type":"number"},"citedSamples":{"type":"number"},"noAnswer":{"type":"number"},"lastAt":{"type":"string"},"latest":{"type":"object","properties":{"at":{"type":"string"},"source":{"type":"string","enum":["panel","prompt"]},"cited":{"type":"boolean"},"mentioned":{"type":"boolean"},"noAnswer":{"type":"boolean"},"excerpt":{"anyOf":[{"type":"string"},{"type":"null"}]},"ownUrls":{"type":"array","items":{"type":"string"}},"winners":{"type":"array","items":{}},"ref":{"type":"object","properties":{"runId":{"type":"string"},"promptId":{"type":"string"},"resultId":{"type":"string"}}}},"required":["at","source","cited","mentioned","noAnswer","excerpt","ownUrls","winners","ref"]}},"required":["key","query","state","asked","samples","citedSamples","noAnswer","lastAt","latest"]}},"winners":{"type":"array","items":{"type":"object","properties":{"host":{"type":"string"},"n":{"type":"number"},"questions":{"type":"number"},"urls":{"type":"array","items":{"type":"string"}}},"required":["host","n","questions","urls"]}},"timeline":{"type":"array","items":{"$ref":"#/components/schemas/Shape5f2oo1"}},"series":{"type":"object","properties":{"full":{"type":"array","items":{"$ref":"#/components/schemas/Shape5f2oo1"}},"light":{"type":"array","items":{"$ref":"#/components/schemas/Shape5f2oo1"}},"prompt":{"type":"array","items":{"$ref":"#/components/schemas/Shape5f2oo1"}},"panel":{"type":"array","items":{"$ref":"#/components/schemas/Shape5f2oo1"}}},"required":["full","light","prompt","panel"]},"previous":{"type":"object","properties":{"from":{"type":"string"},"to":{"type":"string"},"fromDate":{"type":"string"},"toDate":{"type":"string"}},"required":["from","to","fromDate","toDate"]},"weeks":{"type":"object","properties":{"tz":{"type":"string"},"startsOn":{"type":"string","enum":["Monday"]}},"required":["tz","startsOn"]},"from":{"type":"string"},"to":{"type":"string"}},"required":["engine","label","focus","retrieval","summary","questions","winners","timeline","series","previous","weeks","from","to"]}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"viewer","x-vercatus-key-scopes":["read"]}},"/matrix/answer":{"get":{"operationId":"getMatrixAnswer","tags":["Answer engines"],"summary":"Deprecated (PHASE-1.md): replaced by GET /api/sites/:id/answers/:sampleId.","description":"Deprecated (PHASE-1.md): replaced by GET /api/sites/:id/answers/:sampleId. The whole text of one answer the matrix shows as an excerpt: a panel ask by its run, engine and question (`?run=&engine=&query=`, the latest kept sample), or a tracked prompt's answer (`?result=`). `text` is null when the answer's text was not kept; the excerpt stands then.","parameters":[{"name":"run","in":"query","required":false,"schema":{"type":"string"}},{"name":"engine","in":"query","required":false,"schema":{"type":"string"}},{"name":"query","in":"query","required":false,"schema":{"type":"string"}},{"name":"result","in":"query","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"anyOf":[{"type":"object","properties":{"text":{"type":"null"}},"required":["text"]},{"type":"object","properties":{"text":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["text"]}]}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"deprecated":true,"x-vercatus-role":"viewer","x-vercatus-key-scopes":["read"]}},"/engine-changes":{"get":{"operationId":"getEngineChanges","tags":["Service"],"summary":"The trend breaks in a period, oldest first, for chart annotations: [{ engine, at, kind, label }], where kind is model (a new model answered), config (how we ask","description":"The trend breaks in a period, oldest first, for chart annotations: `[{ engine, at, kind, label }]`, where kind is model (a new model answered), config (how we ask changed), outage (the engine answered under half of a run's questions) or methodology (the panel's method changed; engine \"all\"). `?from=&to=` (dates; the last 90 days by default) and `?engines=` (a change of method always comes along).","parameters":[{"name":"from","in":"query","required":false,"schema":{"type":"string"}},{"name":"to","in":"query","required":false,"schema":{"type":"string"}},{"name":"engines","in":"query","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"engine":{"type":"string"},"at":{"type":"string"},"kind":{"type":"string","enum":["config","model","outage","methodology"]},"label":{"type":"string"}},"required":["engine","at","kind","label"]}}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"viewer","x-vercatus-key-scopes":["read"]}},"/sites/{id}/brand":{"get":{"operationId":"getSitesByIdBrand","tags":["Sites"],"summary":"How answers name the site: the stored brand (null when derived) and what the matcher uses now (effective).","description":"How answers name the site: the stored brand (null when derived) and what the matcher uses now (`effective`).","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Shape118s7vd"}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"viewer","x-vercatus-key-scopes":["read"]},"put":{"operationId":"putSitesByIdBrand","tags":["Sites"],"summary":"Sets how answers name the site from the next run on; null (or all empty) goes back to the derived brand.","description":"`{ names?, aliases?, exclude? }` sets how answers name the site from the next run on; `null` (or all empty) goes back to the derived brand.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"names":{},"aliases":{},"exclude":{}}}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Shape118s7vd"}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"analyst","x-vercatus-key-scopes":["write"]}},"/sites/{id}/sov":{"get":{"operationId":"getSitesByIdSov","tags":["Sites"],"summary":"Share of voice per engine for the site and each competitor, from every ask in the period: citation share weighted 1/k (k the domains an answer cited), mention s","description":"Share of voice per engine for the site and each competitor, from every ask in the period: citation share weighted 1/k (k the domains an answer cited), mention share among the brands named, first-position share, recommendation rate, net sentiment (−1 to 1), and for results-page engines how often the AI answer was shown; each with its 95% interval and its numerator and denominator. `?from=&to=` (dates; the last 90 days by default) and `?engines=`.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"from","in":"query","required":false,"schema":{"type":"string"}},{"name":"to","in":"query","required":false,"schema":{"type":"string"}},{"name":"engines","in":"query","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"anyOf":[{"type":"object","properties":{"siteId":{"type":"string"},"from":{"type":"string"},"to":{"type":"string"},"methodologyVersion":{"type":"number"},"engines":{"type":"array","items":{"type":"object","properties":{"engine":{"type":"string"},"label":{"type":"string"},"asks":{"type":"number"},"answered":{"type":"number"},"noAnswer":{"type":"number"},"questions":{"type":"number"},"presence":{"anyOf":[{"type":"object","properties":{"value":{"anyOf":[{"type":"number"},{"type":"null"}]},"lo":{"anyOf":[{"type":"number"},{"type":"null"}]},"hi":{"anyOf":[{"type":"number"},{"type":"null"}]},"k":{"type":"number"},"n":{"type":"number"}},"required":["value","lo","hi","k","n"]},{"type":"null"}]},"entities":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string"},"label":{"type":"string"},"own":{"type":"boolean"},"citationShare":{},"mentionShare":{},"firstPositionShare":{},"recommendationRate":{},"netSentiment":{},"citedAsks":{"type":"number"},"namedAsks":{"type":"number"}},"required":["key","label","own","citationShare","mentionShare","firstPositionShare","recommendationRate","netSentiment","citedAsks","namedAsks"]}}},"required":["engine","label","asks","answered","noAnswer","questions","presence","entities"]}}},"required":["siteId","from","to","methodologyVersion","engines"]},{"type":"null"}]}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"viewer","x-vercatus-key-scopes":["read"]}},"/sites/{id}/estimates":{"get":{"operationId":"getSitesByIdEstimates","tags":["Sites"],"summary":"The estimates of the site's visibility, oldest first: per engine (and all, the fixed-weight aggregate) and per brand (the site and each competitor), cited and n","description":"The estimates of the site's visibility, oldest first: per engine (and `all`, the fixed-weight aggregate) and per brand (the site and each competitor), cited and named, each with its 95% interval, the questions and asks behind it, the probability that it fell against the period before, and the CUSUM alarm. `?kind=run` (per run, the default) or `week`, `?from=&to=`, `?entity=` (a domain) and `?engine=`.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"kind","in":"query","required":false,"schema":{"type":"string"}},{"name":"from","in":"query","required":false,"schema":{"type":"string"}},{"name":"to","in":"query","required":false,"schema":{"type":"string"}},{"name":"entity","in":"query","required":false,"schema":{"type":"string"}},{"name":"engine","in":"query","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"methodologyVersion":{"type":"number"},"method":{"type":"string"},"engineWeights":{"type":"object","additionalProperties":{"type":"number"}},"estimates":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"workflowId":{"anyOf":[{"type":"string"},{"type":"null"}]},"periodKind":{"type":"string","enum":["run","week"]},"periodStart":{"type":"string","format":"date-time"},"periodEnd":{"type":"string","format":"date-time"},"entityKey":{"type":"string"},"engine":{"type":"string"},"metric":{"type":"string","enum":["cited","named"]},"estimate":{"type":"number"},"lo":{"type":"number"},"hi":{"type":"number"},"nQuestions":{"type":"number"},"nSamples":{"type":"number"},"completeness":{"anyOf":[{"type":"number"},{"type":"null"}]},"pDecline":{"anyOf":[{"type":"number"},{"type":"null"}]},"pIncrease":{"anyOf":[{"type":"number"},{"type":"null"}]},"delta":{"anyOf":[{"type":"number"},{"type":"null"}]},"cusum":{"anyOf":[{"type":"number"},{"type":"null"}]},"alarm":{"type":"boolean"},"methodologyVersion":{"type":"number"},"computedAt":{"type":"string","format":"date-time"}},"required":["id","workflowId","periodKind","periodStart","periodEnd","entityKey","engine","metric","estimate","lo","hi","nQuestions","nSamples","completeness","pDecline","pIncrease","delta","cusum","alarm","methodologyVersion","computedAt"]}}},"required":["methodologyVersion","method","engineWeights","estimates"]}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"viewer","x-vercatus-key-scopes":["read"]}},"/sites/{id}/tracked-questions":{"get":{"operationId":"getSitesByIdTrackedQuestions","tags":["Sites"],"summary":"The questions the site's trend is measured on: the active ones by weight (with the cohort each joined with, its source, its Search Console impressions, who it i","description":"The questions the site's trend is measured on: the active ones by weight (with the cohort each joined with, its source, its Search Console impressions, who it is for and where it came from), the retired ones with who retired them and why, the latest versions of the set, and the rule that retires a question on its own.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"active":{"type":"array","items":{"$ref":"#/components/schemas/Shape1dplbos"}},"retired":{"type":"array","items":{"$ref":"#/components/schemas/Shape1dplbos"}},"versions":{"type":"array","items":{"type":"object","properties":{"version":{"type":"number"},"reason":{"type":"string"},"added":{"type":"number"},"retired":{"type":"number"},"active":{"type":"number"},"at":{"type":"string","format":"date-time"}},"required":["version","reason","added","retired","active","at"]}},"rule":{"type":"string"}},"required":["active","retired","versions","rule"]}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"viewer","x-vercatus-key-scopes":["read"]},"post":{"operationId":"postSitesByIdTrackedQuestions","tags":["Sites"],"summary":"Track a question from the next run on (this month's cohort; the site's first market when no locale is given).","description":"`{ text, locale? }`: track a question from the next run on (this month's cohort; the site's first market when no locale is given). A retired question with the same words comes back instead.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"text":{},"locale":{}},"required":["text"]}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"question":{"type":"object","properties":{"text":{"type":"string"},"id":{"type":"string"},"orgId":{"anyOf":[{"type":"string"},{"type":"null"}]},"siteId":{"type":"string"},"source":{"type":"string","enum":["manual","run","prompt","gsc"]},"key":{"type":"string"},"intentClass":{"anyOf":[{"type":"string","enum":["brand","buyer","problem","support","content","machine","echo","unclear"]},{"type":"null"}]},"language":{"type":"string"},"locale":{"type":"string"},"category":{"anyOf":[{"type":"string"},{"type":"null"}]},"importance":{"type":"number"},"relevance":{"anyOf":[{"type":"number"},{"type":"null"}]},"provenance":{"anyOf":[{"$ref":"#/components/schemas/Shape1xvkhx7"},{"type":"null"}]},"weight":{"type":"number"},"market":{"anyOf":[{"type":"string"},{"type":"null"}]},"cohort":{"type":"string"},"gscImpressions":{"anyOf":[{"type":"number"},{"type":"null"}]},"addedAt":{"type":"string","format":"date-time"},"addedWorkflowId":{"anyOf":[{"type":"string"},{"type":"null"}]},"lastProposedAt":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"staleRuns":{"type":"number"},"retiredAt":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"retireReason":{"anyOf":[{"type":"string"},{"type":"null"}]},"retiredBy":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["text","id","orgId","siteId","source","key","intentClass","language","locale","category","importance","relevance","provenance","weight","market","cohort","gscImpressions","addedAt","addedWorkflowId","lastProposedAt","staleRuns","retiredAt","retireReason","retiredBy"]},"created":{"type":"boolean"}},"required":["question","created"]}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"analyst","x-vercatus-key-scopes":["write"]}},"/sites/{id}/tracked-questions/{qid}/retire":{"post":{"operationId":"postSitesByIdTrackedQuestionsByQidRetire","tags":["Sites"],"summary":"Retire a question from the panel; its history stays and it can be restored.","description":"`{ reason }`: retire a question from the panel; its history stays and it can be restored.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"qid","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"reason":{}},"required":["reason"]}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean","enum":[true]}},"required":["ok"]}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"analyst","x-vercatus-key-scopes":["write"]}},"/sites/{id}/tracked-questions/{qid}/restore":{"post":{"operationId":"postSitesByIdTrackedQuestionsByQidRestore","tags":["Sites"],"summary":"Bring a retired question back into the panel.","description":"Bring a retired question back into the panel.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"qid","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean","enum":[true]}},"required":["ok"]}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"analyst","x-vercatus-key-scopes":["write"]}},"/sites/{id}/competitor-brands":{"get":{"operationId":"getSitesByIdCompetitorBrands","tags":["Sites"],"summary":"How answers name each competitor: the stored names, aliases and excluded phrases per competitor domain, and what the matcher uses now (effective).","description":"How answers name each competitor: the stored names, aliases and excluded phrases per competitor domain, and what the matcher uses now (`effective`).","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Shapeupbcn"}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"viewer","x-vercatus-key-scopes":["read"]},"put":{"operationId":"putSitesByIdCompetitorBrands","tags":["Sites"],"summary":"For the domains on the site's competitor list; answers are matched with them from the next ask on (and history on the next rescoring).","description":"`{ brands }`: `{ [competitor domain]: { names?, aliases?, exclude? } }` for the domains on the site's competitor list; answers are matched with them from the next ask on (and history on the next rescoring).","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"brands":{}},"required":["brands"]}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Shapeupbcn"}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"analyst","x-vercatus-key-scopes":["write"]}},"/engines/calibration":{"get":{"operationId":"getEnginesCalibration","tags":["Answer engines"],"summary":"How often the engine's app agrees with its API, per engine: on full runs the panel's top questions are also read from ChatGPT's and Gemini's apps (never part of","description":"How often the engine's app agrees with its API, per engine: on full runs the panel's top questions are also read from ChatGPT's and Gemini's apps (never part of a figure), and each is compared with the API's majority on whether the site is cited, whether it is named, and how much their cited domains overlap. `platform` across every workspace (weekly aggregates only), `workspace` on this workspace's own runs; `?from=&to=` (the last 90 days by default).","parameters":[{"name":"from","in":"query","required":false,"schema":{"type":"string"}},{"name":"to","in":"query","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"from":{"type":"string"},"to":{"type":"string"},"enabled":{"type":"boolean"},"questionsPerRun":{"type":"number"},"engines":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","enum":["openai","gemini"]},"label":{"type":"string"}},"required":["id","label"]}},"platform":{"type":"array","items":{"type":"object","properties":{"engine":{"type":"string"},"label":{"type":"string"},"weeks":{"type":"number"},"pairs":{"type":"number"},"citedAgreement":{"anyOf":[{"type":"number"},{"type":"null"}]},"citedBand":{"type":"array","items":{"anyOf":[{"type":"number"}]}},"namedAgreement":{"anyOf":[{"type":"number"},{"type":"null"}]},"domainOverlap":{"anyOf":[{"type":"number"},{"type":"null"}]}},"required":["engine","label","weeks","pairs","citedAgreement","citedBand","namedAgreement","domainOverlap"]}},"workspace":{"type":"array","items":{"type":"object","properties":{"engine":{"type":"string"},"label":{"type":"string"},"pairs":{"type":"number"},"citedAgreement":{"anyOf":[{"type":"number"},{"type":"null"}]},"citedBand":{"type":"array","items":{"anyOf":[{"type":"number"}]}},"namedAgreement":{"anyOf":[{"type":"number"},{"type":"null"}]},"domainOverlap":{"anyOf":[{"type":"number"},{"type":"null"}]},"apiAgreement":{"anyOf":[{"type":"number"},{"type":"null"}]},"apiPairs":{"type":"number"}},"required":["engine","label","pairs","citedAgreement","citedBand","namedAgreement","domainOverlap"]}}},"required":["from","to","enabled","questionsPerRun","engines","platform","workspace"]}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"viewer","x-vercatus-key-scopes":["read"]}},"/prompts":{"get":{"operationId":"getPrompts","tags":["Tracked prompts"],"summary":"The library: prompts of the workspace (?siteId=, ?tag=), each with its latest verdict per engine, the engines it is asked and its projected monthly checks, plus","description":"The library: prompts of the workspace (`?siteId=`, `?tag=`), each with its latest verdict per engine, the engines it is asked and its projected monthly checks, plus the plan's allowance and the engines the platform has.","parameters":[{"name":"siteId","in":"query","required":false,"schema":{"type":"string"}},{"name":"tag","in":"query","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"prompts":{"type":"array","items":{"$ref":"#/components/schemas/Shapefebe23"}},"allowance":{"$ref":"#/components/schemas/Shape1ekv4bx"},"engines":{"type":"array","items":{"type":"object","properties":{"available":{"type":"boolean"},"focus":{"type":"string"},"retrieval":{"type":"string"},"id":{"type":"string","enum":["anthropic","perplexity","openai","gemini","xai","mistral","you","google_aio","google_ai_mode","bing_copilot"]},"label":{"type":"string"}},"required":["available","focus","retrieval","id","label"]}},"tags":{"type":"array","items":{"type":"string"}}},"required":["prompts","allowance","engines","tags"]}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"viewer","x-vercatus-key-scopes":["read"]},"post":{"operationId":"postPrompts","tags":["Tracked prompts"],"summary":"Deprecated (the tracked-prompt list is retired, FEATURE-GAP-PLAN.md item 10): a question is added to a topic, and tracked word for word, with POST /api/sites/:i","description":"Deprecated (the tracked-prompt list is retired, FEATURE-GAP-PLAN.md item 10): a question is added to a topic, and tracked word for word, with POST /api/sites/:id/topics/:topicId/questions `{ text, exact: true }`. `{ siteId, text, locale?, engines?, cadence?, tags?, brandTerms?, competitors?, shareable? }`: the text becomes a question tracked word for word in the site's topic it fits best (the prompt row keeps only its history, paused). Text up to 500 characters; one per wording and locale per site (409); refused with 402 beyond the plan's allowance of questions tracked word for word.","requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"text":{},"locale":{},"engines":{},"cadence":{},"tags":{},"brandTerms":{},"competitors":{},"shareable":{},"siteId":{"type":"string"}}}}}},"responses":{"201":{"description":"Created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Shapeuaih0"}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"analyst","x-vercatus-key-scopes":["write"]}},"/prompts/{id}":{"patch":{"operationId":"patchPromptsById","tags":["Tracked prompts"],"summary":"Change a prompt.","description":"`{ text?, locale?, engines?, cadence?, tags?, brandTerms?, competitors?, shareable? }`: change a prompt. Resuming it or asking more engines is checked against the plan like a new one.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"text":{},"locale":{},"engines":{},"cadence":{},"tags":{},"brandTerms":{},"competitors":{},"shareable":{}}}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"prompt":{"$ref":"#/components/schemas/Shapefebe23"},"allowance":{"$ref":"#/components/schemas/Shape1ekv4bx"}},"required":["prompt","allowance"]}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"analyst","x-vercatus-key-scopes":["write"]},"delete":{"operationId":"deletePromptsById","tags":["Tracked prompts"],"summary":"Delete a prompt with its answer history and its notices.","description":"Delete a prompt with its answer history and its notices.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean","enum":[true]}},"required":["ok"]}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"analyst","x-vercatus-key-scopes":["write"]}},"/prompts/{id}/run":{"post":{"operationId":"postPromptsByIdRun","tags":["Tracked prompts"],"summary":"Run a prompt now on its engines.","description":"Run a prompt now on its engines. Analysts and up; 30 manual runs an hour per workspace; counts against the plan's monthly prompt checks (one prompt asked of one engine once) like a scheduled run, and refuses with 402 when none are left. Answers 202 at once and runs in the background; `?wait=1` waits for the answers instead.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"wait","in":"query","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean","enum":[true]},"outcome":{"type":"object","properties":{"promptId":{"type":"string"},"orgId":{"type":"string"},"siteId":{"anyOf":[{"type":"string"},{"type":"null"}]},"host":{"type":"string"},"text":{"type":"string"},"asked":{"type":"number"},"answered":{"type":"number"},"skipped":{"type":"array","items":{"type":"object","properties":{"engine":{"type":"string"},"reason":{"type":"string"}},"required":["engine","reason"]}},"changed":{"type":"array","items":{"type":"object","properties":{"engine":{"type":"string"},"label":{"type":"string"},"changes":{"type":"array","items":{}}},"required":["engine","label","changes"]}}},"required":["promptId","orgId","siteId","host","text","asked","answered","skipped","changed"]}},"required":["ok","outcome"]}}}},"202":{"description":"Accepted","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean","enum":[true]},"started":{"type":"boolean","enum":[true]},"engines":{"type":"array","items":{"type":"string","enum":["anthropic","perplexity","openai","gemini","xai","mistral","you","google_aio","google_ai_mode","bing_copilot"]}},"remaining":{"anyOf":[{"type":"number"},{"type":"null"}]}},"required":["ok","started","engines","remaining"]}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"analyst","x-vercatus-key-scopes":["write"]}},"/prompts/{id}/results":{"get":{"operationId":"getPromptsByIdResults","tags":["Tracked prompts"],"summary":"A prompt's history: ?engine= narrows it, ?limit= (20, at most 200) caps the answers returned in full.","description":"A prompt's history: `?engine=` narrows it, `?limit=` (20, at most 200) caps the answers returned in full. The timeline (up to 400 points) carries each answer's verdict and change kinds without the text.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"engine","in":"query","required":false,"schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"prompt":{"$ref":"#/components/schemas/Shapefebe23"},"site":{"anyOf":[{"type":"object","properties":{"id":{"type":"string"},"host":{"type":"string"}},"required":["id","host"]},{"type":"null"}]},"results":{"type":"array","items":{"type":"object","properties":{"error":{"anyOf":[{"type":"string"},{"type":"null"}]},"label":{"type":"string"},"noAnswer":{"type":"boolean"},"id":{"type":"string"},"orgId":{"type":"string"},"promptId":{"type":"string"},"engine":{"type":"string"},"model":{"anyOf":[{"type":"string"},{"type":"null"}]},"ranAt":{"type":"string","format":"date-time"},"answer":{"anyOf":[{"type":"string"},{"type":"null"}]},"answerHash":{"anyOf":[{"type":"string"},{"type":"null"}]},"cited":{"type":"array","items":{"type":"object","properties":{"url":{"type":"string"},"title":{"type":"string"},"own":{"type":"boolean"}},"required":["url","own"]}},"searched":{"type":"array","items":{"type":"object","properties":{"url":{"type":"string"},"title":{"type":"string"}},"required":["url"]}},"ownCited":{"type":"boolean"},"ownMentioned":{"type":"boolean"},"brands":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"own":{"type":"boolean"},"competitor":{"type":"boolean"}},"required":["name","own","competitor"]}},"rank":{"anyOf":[{"type":"number"},{"type":"null"}]},"changes":{"type":"array","items":{"type":"object","properties":{"kind":{"type":"string","enum":["mentioned","sources","dropped","rank","entered","unmentioned","rewritten"]},"detail":{"type":"string"},"before":{},"after":{}},"required":["kind"]}},"similarity":{"anyOf":[{"type":"number"},{"type":"null"}]},"elapsedMs":{"anyOf":[{"type":"number"},{"type":"null"}]},"finishReason":{"anyOf":[{"type":"string"},{"type":"null"}]},"truncated":{"anyOf":[{"type":"boolean"},{"type":"null"}]},"configHash":{"anyOf":[{"type":"string"},{"type":"null"}]},"namedDomains":{"anyOf":[{"type":"array","items":{"type":"string"}},{"type":"null"}]}},"required":["error","label","noAnswer","id","orgId","promptId","engine","model","ranAt","answer","answerHash","cited","searched","ownCited","ownMentioned","brands","rank","changes","similarity","elapsedMs","finishReason","truncated","configHash","namedDomains"]}},"timeline":{"type":"object","additionalProperties":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"at":{"type":"string"},"cited":{"type":"boolean"},"mentioned":{"type":"boolean"},"rank":{"anyOf":[{"type":"number"},{"type":"null"}]},"noAnswer":{"type":"boolean"},"error":{"anyOf":[{"type":"string"},{"type":"null"}]},"changes":{"type":"array","items":{"type":"string"}},"similarity":{"anyOf":[{"type":"number"},{"type":"null"}]}},"required":["id","at","cited","mentioned","rank","noAnswer","error","changes","similarity"]}}}},"required":["prompt","site","results","timeline"]}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"viewer","x-vercatus-key-scopes":["read"]}},"/prompts/import":{"post":{"operationId":"postPromptsImport","tags":["Tracked prompts"],"summary":"CSV import into a site's library (?siteId=, or { siteId, csv } as JSON): columns text, locale, tags (separated by ; or |), cadence, header optional, 1,000 rows ","description":"CSV import into a site's library (`?siteId=`, or `{ siteId, csv }` as JSON): columns text, locale, tags (separated by ; or |), cadence, header optional, 1,000 rows at most. Each row is created or skipped with its reason; the plan is checked row by row.","parameters":[{"name":"siteId","in":"query","required":false,"schema":{"type":"string"}}],"requestBody":{"required":false,"content":{"text/plain":{"schema":{"type":"string"}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"created":{"type":"array","items":{"$ref":"#/components/schemas/Shapefebe23"}},"skipped":{"type":"array","items":{"type":"object","properties":{"line":{"type":"number"},"text":{"type":"string"},"reason":{"type":"string"}},"required":["line","text","reason"]}},"allowance":{"$ref":"#/components/schemas/Shape2rx765"}},"required":["created","skipped","allowance"]}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"analyst","x-vercatus-key-scopes":["write"]}},"/prompts/from-question":{"post":{"operationId":"postPromptsFromQuestion","tags":["Tracked prompts"],"summary":"Copy a question from the site's question set (the questions its runs generated) into the library, in the question's language.","description":"`{ siteId, query, cadence?, engines? }`: copy a question from the site's question set (the questions its runs generated) into the library, in the question's language.","requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"siteId":{},"query":{},"cadence":{},"engines":{}},"required":["siteId","query"]}}}},"responses":{"201":{"description":"Created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Shapeuaih0"}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"analyst","x-vercatus-key-scopes":["write"]}},"/rewrites":{"post":{"operationId":"postRewrites","tags":["Page comparisons and rewrites"],"summary":"Rewrite one passage of a page in three strategies (answer-first, evidence-led, structured), each re-scored before and after, aimed at what real answers to the p","description":"`{ siteId, url, findingKey?, passage? }`: rewrite one passage of a page in three strategies (answer-first, evidence-led, structured), each re-scored before and after, aimed at what real answers to the page's questions quote from other sites (passage provenance: what to cover, never facts to take). Without `passage`, the finding's evidence passage or the page's weakest section is used. Answers 201 with the rewrite, 422 when no variant kept to the passage's facts, or 202 with the id when it takes longer than the request may wait (GET /api/rewrites/:id then has it). Uses one rewrite.","requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"siteId":{"type":"string"},"url":{"type":"string"},"findingKey":{"anyOf":[{"type":"string"},{"type":"null"}]},"passage":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["siteId","url"]}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"rewrite":{"$ref":"#/components/schemas/Shaperjswjo"},"allowance":{"$ref":"#/components/schemas/Shapep8tejg"}},"required":["rewrite","allowance"]}}}},"202":{"description":"Accepted","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"null"},"status":{"type":"string"}},"required":["id","status"]}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"analyst","x-vercatus-key-scopes":["write"]},"get":{"operationId":"getRewrites","tags":["Page comparisons and rewrites"],"summary":"The rewrites of a site, or of one page, newest first, with what is left of the plan's rewrites.","description":"`?siteId=&url=`: the rewrites of a site, or of one page, newest first, with what is left of the plan's rewrites.","parameters":[{"name":"siteId","in":"query","required":false,"schema":{"type":"string"}},{"name":"url","in":"query","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"rewrites":{"type":"array","items":{"type":"object","properties":{"error":{"anyOf":[{"type":"string"},{"type":"null"}]},"heading":{"anyOf":[{"type":"string"},{"type":"null"}]},"language":{"anyOf":[{"type":"string"},{"type":"null"}]},"strategies":{"type":"array","items":{"type":"string","enum":["answer-first","evidence-led","structured"]}},"placeholders":{"type":"number"},"id":{"type":"string"},"url":{"type":"string"},"findingKey":{"anyOf":[{"type":"string"},{"type":"null"}]},"status":{"type":"string","enum":["pending","failed","ready"]},"chosen":{"anyOf":[{"type":"number"},{"type":"null"}]},"model":{"anyOf":[{"type":"string"},{"type":"null"}]},"createdBy":{"anyOf":[{"type":"string"},{"type":"null"}]},"createdAt":{"type":"string","format":"date-time"}},"required":["error","heading","language","strategies","placeholders","id","url","findingKey","status","chosen","model","createdBy","createdAt"]}},"allowance":{"$ref":"#/components/schemas/Shapep8tejg"}},"required":["rewrites","allowance"]}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"viewer","x-vercatus-key-scopes":["read"]}},"/rewrites/{id}":{"get":{"operationId":"getRewritesById","tags":["Page comparisons and rewrites"],"summary":"One rewrite: the passage, its context, the rules with their numbers, and the variants with their scores before and after.","description":"One rewrite: the passage, its context, the rules with their numbers, and the variants with their scores before and after.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Shape1ehy9rj"}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"viewer","x-vercatus-key-scopes":["read"]},"patch":{"operationId":"patchRewritesById","tags":["Page comparisons and rewrites"],"summary":"The index of the variant the client copied (null clears it).","description":"`{ chosen }`: the index of the variant the client copied (null clears it). This is the feedback the repository learns from.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"chosen":{"anyOf":[{"type":"number"},{"type":"null"}]}},"required":["chosen"]}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Shape1ehy9rj"}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"analyst","x-vercatus-key-scopes":["write"]}},"/winners":{"get":{"operationId":"getWinners","tags":["Page comparisons and rewrites"],"summary":"Why other pages win the site's questions, newest first, each with its headline, and what is left of the plan's analyses.","description":"`?siteId=`: why other pages win the site's questions, newest first, each with its headline, and what is left of the plan's analyses.","parameters":[{"name":"siteId","in":"query","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"winners":{"type":"array","items":{"type":"object","properties":{"error":{"anyOf":[{"type":"string"},{"type":"null"}]},"headline":{"anyOf":[{"type":"string"},{"type":"null"}]},"reasons":{"type":"number"},"id":{"type":"string"},"query":{"type":"string"},"engines":{"type":"array","items":{"type":"string"}},"timesCited":{"type":"number"},"winnerUrl":{"type":"string"},"winnerHost":{"type":"string"},"ownUrl":{"anyOf":[{"type":"string"},{"type":"null"}]},"status":{"type":"string","enum":["pending","failed","ready","unreachable"]},"createdAt":{"type":"string","format":"date-time"}},"required":["error","headline","reasons","id","query","engines","timesCited","winnerUrl","winnerHost","ownUrl","status","createdAt"]}},"allowance":{"$ref":"#/components/schemas/Shapep8tejg"}},"required":["winners","allowance"]}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"viewer","x-vercatus-key-scopes":["read"]}},"/winners/{id}":{"get":{"operationId":"getWinnersById","tags":["Page comparisons and rewrites"],"summary":"One analysis: the ranked indicator comparison with weights, both passages, both structure maps and the explanation.","description":"One analysis: the ranked indicator comparison with weights, both passages, both structure maps and the explanation.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"winner":{"$ref":"#/components/schemas/Shapevdbg6u"}},"required":["winner"]}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"viewer","x-vercatus-key-scopes":["read"]}},"/winners/{id}/refresh":{"post":{"operationId":"postWinnersByIdRefresh","tags":["Page comparisons and rewrites"],"summary":"Analyse again now: re-reads the cited page and the site's latest run and rewrites the explanation.","description":"Analyse again now: re-reads the cited page and the site's latest run and rewrites the explanation. Uses one analysis from the plan when it completes. Answers with the analysis, or 202 when it takes longer than the request may wait.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"winner":{"$ref":"#/components/schemas/Shapevdbg6u"},"allowance":{"$ref":"#/components/schemas/Shapep8tejg"}},"required":["winner","allowance"]}}}},"202":{"description":"Accepted","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"status":{"type":"string"}},"required":["id","status"]}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"analyst","x-vercatus-key-scopes":["write"]}},"/sso/lookup":{"post":{"operationId":"postSsoLookup","tags":["Security"],"summary":"Email-first sign-in: { email } → { sso, url?, enforced?","description":"Email-first sign-in: `{ email }` → `{ sso, url?, enforced? }`. `sso` is true when the address's verified domain belongs to a workspace with an enabled connection; `url` starts that sign-in; `enforced` means password sign-in is refused for it.","requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"email":{"type":"string"}}}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"anyOf":[{"type":"object","properties":{"sso":{"type":"boolean","enum":[false]}},"required":["sso"]},{"anyOf":[{"type":"object","properties":{"sso":{"type":"boolean","enum":[true]},"url":{"type":"string"},"enforced":{"type":"boolean"},"protocol":{"type":"string","enum":["oidc","saml"]}},"required":["sso","url","enforced","protocol"]},{"type":"object","properties":{"sso":{"type":"boolean","enum":[false]}},"required":["sso"]}]}]}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"security":[],"x-vercatus-role":null,"x-vercatus-key-scopes":null}},"/sso/{connectionId}/start":{"get":{"operationId":"getSsoByConnectionIdStart","tags":["Security"],"summary":"Start a sign-in through a workspace's connection (OIDC or SAML); ?email= hints the IdP, ?next= is the app path to return to.","description":"Start a sign-in through a workspace's connection (OIDC or SAML); `?email=` hints the IdP, `?next=` is the app path to return to. With `?test=1` a signed-in admin of that workspace tests the connection: the claims are shown and nobody is signed in.","parameters":[{"name":"connectionId","in":"path","required":true,"schema":{"type":"string"}},{"name":"email","in":"query","required":false,"schema":{"type":"string"}},{"name":"next","in":"query","required":false,"schema":{"type":"string"}},{"name":"test","in":"query","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"text/html":{"schema":{"type":"string"}}}},"302":{"description":"Redirect: the `Location` header says where.","headers":{"Location":{"schema":{"type":"string"}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"security":[],"x-vercatus-role":null,"x-vercatus-key-scopes":null}},"/sso/oidc/callback":{"get":{"operationId":"getSsoOidcCallback","tags":["Security"],"summary":"The OpenID Connect return for workspace connections and for \"Continue with Google / Microsoft\": state, PKCE and nonce are checked against this browser's cookie,","description":"The OpenID Connect return for workspace connections and for \"Continue with Google / Microsoft\": state, PKCE and nonce are checked against this browser's cookie, then the person is signed in.","responses":{"200":{"description":"Success","content":{"text/html":{"schema":{"type":"string"}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"security":[],"x-vercatus-role":null,"x-vercatus-key-scopes":null}},"/sso/saml/{connectionId}/acs":{"post":{"operationId":"postSsoSamlByConnectionIdAcs","tags":["Security"],"summary":"SAML assertion consumer service (HTTP-POST binding): the response must be signed by the connection's certificate (or its second certificate during a rotation) a","description":"SAML assertion consumer service (HTTP-POST binding): the response must be signed by the connection's certificate (or its second certificate during a rotation) and addressed to this URL. It answers the request this browser started, or, where the workspace allows sign-ins started at the IdP, no request at all (then it must be fresh and is used once).","parameters":[{"name":"connectionId","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":false,"content":{"application/x-www-form-urlencoded":{"schema":{"type":"string"}}}},"responses":{"200":{"description":"Success","content":{"text/html":{"schema":{"type":"string"}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"security":[],"x-vercatus-role":null,"x-vercatus-key-scopes":null}},"/sso/saml/{connectionId}/metadata":{"get":{"operationId":"getSsoSamlByConnectionIdMetadata","tags":["Security"],"summary":"Our SAML service-provider metadata for a connection: entity id, assertion consumer service URL, signed assertions wanted.","description":"Our SAML service-provider metadata for a connection: entity id, assertion consumer service URL, signed assertions wanted. Give it to the IdP.","parameters":[{"name":"connectionId","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/samlmetadata+xml":{"schema":{"type":"string"}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"security":[],"x-vercatus-role":null,"x-vercatus-key-scopes":null}},"/auth/google/start":{"get":{"operationId":"getAuthGoogleStart","tags":["Authentication"],"summary":"\"Continue with Google\": the platform's Google app (openid email profile).","description":"\"Continue with Google\": the platform's Google app (openid email profile). Links to an existing account by verified email; a new person without an invitation gets a new workspace. `?next=` is the app path to return to. Query: `?consent=` (`1` when product emails were agreed to), `?domain=` (the domain typed), `?email=` (the address typed), `?from=` (start of the period (an ISO date)), `?interval=` (month or year), `?plan=` (the plan picked).","parameters":[{"name":"next","in":"query","required":false,"schema":{"type":"string"}},{"name":"consent","in":"query","required":false,"schema":{"type":"string"}},{"name":"domain","in":"query","required":false,"schema":{"type":"string"}},{"name":"email","in":"query","required":false,"schema":{"type":"string"}},{"name":"from","in":"query","required":false,"schema":{"type":"string"}},{"name":"interval","in":"query","required":false,"schema":{"type":"string"}},{"name":"plan","in":"query","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"text/html":{"schema":{"type":"string"}}}},"302":{"description":"Redirect: the `Location` header says where.","headers":{"Location":{"schema":{"type":"string"}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"security":[],"x-vercatus-role":null,"x-vercatus-key-scopes":null}},"/auth/microsoft/start":{"get":{"operationId":"getAuthMicrosoftStart","tags":["Authentication"],"summary":"\"Continue with Microsoft\": the platform's multi-tenant Entra app (work, school and personal accounts).","description":"\"Continue with Microsoft\": the platform's multi-tenant Entra app (work, school and personal accounts). Links by an address Microsoft verified; a new person without an invitation gets a new workspace. Query: `?consent=` (`1` when product emails were agreed to), `?domain=` (the domain typed), `?email=` (the address typed), `?from=` (start of the period (an ISO date)), `?interval=` (month or year), `?next=` (where to go afterwards), `?plan=` (the plan picked).","parameters":[{"name":"consent","in":"query","required":false,"schema":{"type":"string"}},{"name":"domain","in":"query","required":false,"schema":{"type":"string"}},{"name":"email","in":"query","required":false,"schema":{"type":"string"}},{"name":"from","in":"query","required":false,"schema":{"type":"string"}},{"name":"interval","in":"query","required":false,"schema":{"type":"string"}},{"name":"next","in":"query","required":false,"schema":{"type":"string"}},{"name":"plan","in":"query","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"text/html":{"schema":{"type":"string"}}}},"302":{"description":"Redirect: the `Location` header says where.","headers":{"Location":{"schema":{"type":"string"}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"security":[],"x-vercatus-role":null,"x-vercatus-key-scopes":null}},"/auth/oidc/start":{"get":{"operationId":"getAuthOidcStart","tags":["Authentication"],"summary":"The instance's own identity provider, when one is configured: the same flow as the workspace connections (PKCE, state, nonce, a verified email, SSO enforcement)","description":"The instance's own identity provider, when one is configured: the same flow as the workspace connections (PKCE, state, nonce, a verified email, SSO enforcement), members only. Query: `?email=` (the address typed), `?next=` (where to go afterwards).","parameters":[{"name":"email","in":"query","required":false,"schema":{"type":"string"}},{"name":"next","in":"query","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"text/html":{"schema":{"type":"string"}}}},"302":{"description":"Redirect: the `Location` header says where.","headers":{"Location":{"schema":{"type":"string"}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"security":[],"x-vercatus-role":null,"x-vercatus-key-scopes":null}},"/auth/callback":{"get":{"operationId":"getAuthCallback","tags":["Authentication"],"summary":"The instance provider's return (its registered redirect URI): the identity is checked as for any connection, then the person is signed in.","description":"The instance provider's return (its registered redirect URI): the identity is checked as for any connection, then the person is signed in.","responses":{"200":{"description":"Success","content":{"text/html":{"schema":{"type":"string"}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"security":[],"x-vercatus-role":null,"x-vercatus-key-scopes":null}},"/security":{"get":{"operationId":"getSecurity","tags":["Security"],"summary":"Settings › Security: what the plan includes, the verified and pending domains with their DNS records, the connections (never secrets) with the details to give t","description":"Settings › Security: what the plan includes, the verified and pending domains with their DNS records, the connections (never secrets) with the details to give the IdP, enforcement and session length, and seats. Admins.","responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"plan":{"type":"object","properties":{"name":{"type":"string"},"sso":{"type":"boolean"},"saml":{"type":"boolean"},"enforcement":{"type":"boolean"},"ipAllowlist":{"type":"boolean"},"scim":{"type":"boolean"},"dpa":{"anyOf":[{"type":"string","enum":["countersigned","self-serve"]},{"type":"null"}]}},"required":["name","sso","saml","enforcement","ipAllowlist","scim","dpa"]},"domains":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"domain":{"type":"string"},"verifiedAt":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"createdAt":{"type":"string","format":"date-time"},"record":{"type":"object","properties":{"type":{"type":"string"},"name":{"type":"string"},"value":{"type":"string"}},"required":["type","name","value"]}},"required":["id","domain","verifiedAt","createdAt","record"]}},"connections":{"type":"array","items":{"$ref":"#/components/schemas/Shapecmfdyv"}},"settings":{"$ref":"#/components/schemas/Shape9kxrvs"},"clientIp":{"anyOf":[{"type":"string"},{"type":"null"}]},"seats":{"$ref":"#/components/schemas/Shape1napw7e"},"platform":{"type":"object","properties":{"google":{"type":"boolean"},"microsoft":{"type":"boolean"},"oidcRedirectUri":{"type":"string"}},"required":["google","microsoft","oidcRedirectUri"]}},"required":["plan","domains","connections","settings","clientIp","seats","platform"]}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"admin","x-vercatus-key-scopes":null}},"/security/domains":{"post":{"operationId":"postSecurityDomains","tags":["Security"],"summary":"Claim a domain for single sign-on.","description":"`{ domain }`: claim a domain for single sign-on. The answer carries the DNS TXT record (`vercatus-domain=<token>` at the domain) to publish before verifying. A domain verified by another workspace is refused. Owners (a verified domain decides whose addresses a connection may sign in); plans with single sign-on.","requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"domain":{"type":"string"}},"required":["domain"]}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"domain":{"type":"string"},"verifiedAt":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"record":{"type":"object","properties":{"type":{"type":"string"},"name":{"type":"string"},"value":{"type":"string"}},"required":["type","name","value"]}},"required":["id","domain","verifiedAt","record"]}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"owner","x-vercatus-key-scopes":null}},"/security/domains/{id}/verify":{"post":{"operationId":"postSecurityDomainsByIdVerify","tags":["Security"],"summary":"Check the domain's DNS TXT record now; on success the domain is verified for this workspace.","description":"Check the domain's DNS TXT record now; on success the domain is verified for this workspace. Owners.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"anyOf":[{"type":"object","properties":{"ok":{"type":"boolean","enum":[true]},"verifiedAt":{"type":"string","format":"date-time"},"detail":{"type":"string"}},"required":["ok","verifiedAt","detail"]},{"type":"object","properties":{"ok":{"type":"boolean","enum":[true]},"verifiedAt":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"detail":{"type":"string"}},"required":["ok","verifiedAt","detail"]}]}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"owner","x-vercatus-key-scopes":null}},"/security/domains/{id}":{"delete":{"operationId":"deleteSecurityDomainsById","tags":["Security"],"summary":"Remove a domain; it stops routing sign-ins and is taken out of enforcement.","description":"Remove a domain; it stops routing sign-ins and is taken out of enforcement. Owners.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean","enum":[true]}},"required":["ok"]}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"owner","x-vercatus-key-scopes":null}},"/security/connections":{"post":{"operationId":"postSecurityConnections","tags":["Security"],"summary":"Create a connection: { protocol: \"oidc\", provider: google|microsoft|okta|generic, issuer, clientId, clientSecret, label?, defaultRole?, jit?","description":"Create a connection: `{ protocol: \"oidc\", provider: google|microsoft|okta|generic, issuer, clientId, clientSecret, label?, defaultRole?, jit? }` or `{ protocol: \"saml\", entryPoint, idpCert, idpIssuer?, label?, defaultRole?, jit? }`. It starts disabled; test it, then enable it. Owners (a connection lets its identity provider sign people in to the workspace, admins and owners among them); OIDC needs single sign-on in the plan, SAML the Enterprise plan.","requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"protocol":{},"provider":{},"label":{},"issuer":{},"clientId":{},"clientSecret":{},"entryPoint":{},"idpIssuer":{},"idpCert":{},"idpCert2":{},"allowIdpInitiated":{},"defaultRole":{},"jit":{},"enabled":{}}}}}},"responses":{"201":{"description":"Created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Shapecmfdyv"}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"owner","x-vercatus-key-scopes":null}},"/security/connections/{id}":{"patch":{"operationId":"patchSecurityConnectionsById","tags":["Security"],"summary":"Change a connection; any field of the create call, plus enabled.","description":"Change a connection; any field of the create call, plus `enabled`. Enabling needs a verified domain and one successful test; the secret is kept unless a new one is sent. Turning off the last enabled connection lifts enforcement. Owners.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"protocol":{},"provider":{},"label":{},"issuer":{},"clientId":{},"clientSecret":{},"entryPoint":{},"idpIssuer":{},"idpCert":{},"idpCert2":{},"allowIdpInitiated":{},"defaultRole":{},"jit":{},"enabled":{}}}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Shapecmfdyv"}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"owner","x-vercatus-key-scopes":null},"delete":{"operationId":"deleteSecurityConnectionsById","tags":["Security"],"summary":"Delete a connection.","description":"Delete a connection. When it was the last enabled one, enforcement is lifted so nobody is locked out. Owners.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean","enum":[true]}},"required":["ok"]}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"owner","x-vercatus-key-scopes":null}},"/security/connections/{id}/bindings":{"post":{"operationId":"postSecurityConnectionsByIdBindings","tags":["Security"],"summary":"Confirm that this connection's identity provider speaks for a member who is an owner or admin of the workspace, so that person can sign in through it (the first","description":"`{ email }`: confirm that this connection's identity provider speaks for a member who is an owner or admin of the workspace, so that person can sign in through it (the first sign-in of an existing owner or admin through a connection is otherwise refused: ssoIdentityBound in sso.ts says why). An owner can bind themselves by running \"Test sign-in\" on the connection; this is for the admins. Owners.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"email":{"type":"string"}},"required":["email"]}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean","enum":[true]}},"required":["ok"]}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"owner","x-vercatus-key-scopes":null}},"/security/settings":{"put":{"operationId":"putSecuritySettings","tags":["Security"],"summary":"Owners: - enforceSsoDomains: refuse password sign-in and registration for these verified domains (their people sign in through the workspace's connection; API k","description":"`{ enforceSsoDomains?, sessionHours?, idleMinutes?, requireMfa?, ipAllowlist? }`, owners: - enforceSsoDomains: refuse password sign-in and registration for these verified domains (their people sign in through the workspace's connection; API keys are unaffected). Needs an enabled connection that has signed someone in; Enterprise. Newly enforced domains end their people's sessions that did not come through this workspace's SSO. - sessionHours: cap session length in hours (1 to 720; null for the 30-day default). idleMinutes: end a session after this many minutes without a request (5 to 1440; null for none). Both apply to sessions already open. - requireMfa: everyone who signs in without this workspace's own SSO must set up an authenticator app. - ipAllowlist: IPv4/IPv6 addresses or CIDR ranges (at most 100; [] to allow every address); sessions and API keys from elsewhere are refused. A list that would shut out the caller's own address is refused. Enterprise.","requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"enforceSsoDomains":{},"sessionHours":{},"idleMinutes":{},"requireMfa":{},"ipAllowlist":{}}}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean","enum":[true]},"settings":{"$ref":"#/components/schemas/Shape9kxrvs"},"sessionsEnded":{"type":"number"}},"required":["ok","settings","sessionsEnded"]}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"owner","x-vercatus-key-scopes":null}},"/security/dpa":{"get":{"operationId":"getSecurityDpa","tags":["Security"],"summary":"The data processing agreement: whether this workspace can sign (plan and signable version), the current version, and every agreement signed here with its state ","description":"The data processing agreement: whether this workspace can sign (plan and signable version), the current version, and every agreement signed here with its state and download links. Admins.","responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"canSign":{"type":"boolean"},"needsResign":{"type":"boolean"},"active":{"anyOf":[{"$ref":"#/components/schemas/Shape9ui5rs"},{"type":"null"}]},"agreements":{"type":"array","items":{"$ref":"#/components/schemas/Shape9ui5rs"}},"mode":{"anyOf":[{"type":"string","enum":["countersigned","self-serve"]},{"type":"null"}]},"approvedVersion":{"anyOf":[{"type":"string"},{"type":"null"}]},"latestVersion":{"anyOf":[{"type":"string"},{"type":"null"}]},"available":{"type":"boolean"},"reason":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["canSign","needsResign","active","agreements","mode","approvedVersion","latestVersion","available","reason"]}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"admin","x-vercatus-key-scopes":null}},"/security/dpa/text":{"get":{"operationId":"getSecurityDpaText","tags":["Security"],"summary":"The text of the approved agreement, as Markdown, so it can be read before signing; 404 while no version is approved.","description":"The text of the approved agreement, as Markdown, so it can be read before signing; 404 while no version is approved. The reviewer's notes at the top of the file are not part of it. Admins.","responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"version":{"type":"string"},"text":{"type":"string"}},"required":["version","text"]}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"admin","x-vercatus-key-scopes":null}},"/security/dpa/sign":{"post":{"operationId":"postSecurityDpaSign","tags":["Security"],"summary":"Sign the approved version for this workspace.","description":"`{ entity, address, country, registration?, signerName, signerTitle, signerEmail, signature }`: sign the approved version for this workspace. `signature` is the signer's name typed again. The time and address are recorded, the PDF stored and emailed; an earlier agreement becomes superseded. Owners, signed in.","requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"entity":{},"address":{},"country":{},"registration":{},"signerName":{},"signerTitle":{},"signerEmail":{},"signature":{}},"required":["entity","address","country","signerName","signerTitle","signerEmail","signature"]}}}},"responses":{"201":{"description":"Created","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean","enum":[true]},"agreement":{"$ref":"#/components/schemas/Shape9ui5rs"},"emailed":{"type":"boolean"}},"required":["ok","agreement","emailed"]}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"owner","x-vercatus-key-scopes":null}},"/security/dpa/{id}/pdf":{"get":{"operationId":"getSecurityDpaByIdPdf","tags":["Security"],"summary":"Download a signed agreement as PDF; ?copy=countersigned for the countersigned copy.","description":"Download a signed agreement as PDF; `?copy=countersigned` for the countersigned copy. Admins.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"copy","in":"query","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/pdf":{"schema":{"type":"string","format":"binary"}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"admin","x-vercatus-key-scopes":null}},"/engines":{"get":{"operationId":"getEngines","tags":["Answer engines"],"summary":"The answer engines the workspace's plan measures that this installation can ask right now, with their labels and one-line focus; locked: the ones the installati","description":"The answer engines the workspace's plan measures that this installation can ask right now, with their labels and one-line focus; `locked`: the ones the installation can ask that the plan leaves out (PRICING-TIERS-PLAN.md phase 1), each with the cheapest plan that includes it, which the app names once and never shows as an empty card.","responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"engines":{"type":"array","items":{"type":"string","enum":["anthropic","perplexity","openai","gemini","xai","mistral","you","google_aio","google_ai_mode","bing_copilot"]}},"locked":{"type":"array","items":{"type":"object","properties":{"engine":{"type":"string","enum":["anthropic","perplexity","openai","gemini","xai","mistral","you","google_aio","google_ai_mode","bing_copilot"]},"plan":{"type":"string"}},"required":["engine","plan"]}},"labels":{"type":"object","additionalProperties":{"type":"string"}},"focus":{"type":"object","additionalProperties":{"type":"string"}}},"required":["engines","locked","labels","focus"]}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"viewer","x-vercatus-key-scopes":["read"]}},"/search":{"get":{"operationId":"getSearch","tags":["Service"],"summary":"What the command palette finds by its words, on the caller's sites only.","description":"`?q=` (3+ characters): what the command palette finds by its words, on the caller's sites only. `findings`: open items of each site's latest site audit; `prompts`: the workspace's own questions; `questions`: the questions asked about the sites, from the citation panel's asks, the tracked panel and the latest full run, one hit per site and question (`{ text, siteId, host, sources }`, sources among panel, tracked and run; eight at most); `knowledge`: knowledge-base entries (`{ id, title }`).","parameters":[{"name":"q","in":"query","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"anyOf":[{"type":"object","properties":{"findings":{"type":"array","items":{}},"prompts":{"type":"array","items":{}},"questions":{"type":"array","items":{}},"knowledge":{"type":"array","items":{}}},"required":["findings","prompts","questions","knowledge"]},{"type":"object","properties":{"findings":{"type":"array","items":{}},"prompts":{"type":"array","items":{}},"questions":{"type":"array","items":{}},"knowledge":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"title":{"type":"string"}},"required":["id","title"]}}},"required":["findings","prompts","questions","knowledge"]},{"type":"object","properties":{"findings":{},"prompts":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"text":{"type":"string"},"siteId":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["id","text","siteId"]}},"questions":{"type":"array","items":{"type":"object","properties":{"text":{"type":"string"},"siteId":{"type":"string"},"host":{"type":"string"},"sources":{"type":"array","items":{"type":"string","enum":["run","panel","tracked"]}}},"required":["text","siteId","host","sources"]}},"knowledge":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"title":{"type":"string"}},"required":["id","title"]}}},"required":["findings","prompts","questions","knowledge"]}]}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"viewer","x-vercatus-key-scopes":["read"]}},"/notices/read-all":{"post":{"operationId":"postNoticesReadAll","tags":["Vercatus Intelligence"],"summary":"Mark every unread notice of the workspace read.","description":"Mark every unread notice of the workspace read.","responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"read":{"type":"number"}},"required":["read"]}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"viewer","x-vercatus-key-scopes":["write"]}},"/usage/meters":{"get":{"operationId":"getUsageMeters","tags":["Portfolio and board"],"summary":"Each metered allowance the plan sets, as used against its limit in the current period, and when it renews.","description":"Each metered allowance the plan sets, as used against its limit in the current period, and when it renews. `capped: false` where nothing is enforced.","responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"plan":{"anyOf":[{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"}},"required":["id","name"]},{"type":"null"}]},"capped":{"type":"boolean"},"resetsAt":{"anyOf":[{"type":"string"},{"type":"null"}]},"meters":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string","enum":["prompt_checks","rewrites","winner_analyses","articles","seats","tracked_prompts"]},"label":{"type":"string"},"used":{"type":"number"},"limit":{"type":"number"}},"required":["key","label","used","limit"]}}},"required":["plan","capped","resetsAt","meters"]}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"viewer","x-vercatus-key-scopes":["read"]}},"/org/setup/sites":{"get":{"operationId":"getOrgSetupSites","tags":["Workspace"],"summary":"Each site's setup: the required steps (verified domain, topics, a full run, competitors, Search Console or Analytics) and the recommended ones (crawler traffic,","description":"Each site's setup: the required steps (verified domain, topics, a full run, competitors, Search Console or Analytics) and the recommended ones (crawler traffic, a CMS or deploy hook), each with whether it is done and where. Empty until the workspace has a plan.","responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"siteId":{"type":"string"},"host":{"type":"string"},"steps":{"type":"array","items":{"$ref":"#/components/schemas/Shape1xt7ts9"}},"done":{"type":"number"},"total":{"type":"number"}},"required":["siteId","host","steps","done","total"]}}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"viewer","x-vercatus-key-scopes":["read"]}},"/org/setup":{"get":{"operationId":"getOrgSetup","tags":["Workspace"],"summary":"The workspace's setup checklist: each step (a verified domain, topics, a full run, competitors, Search Console or Analytics, alerts; inviting a teammate is opti","description":"The workspace's setup checklist: each step (a verified domain, topics, a full run, competitors, Search Console or Analytics, alerts; inviting a teammate is optional and not counted) with whether it is done and where to do it. Empty until the workspace has a plan.","responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"steps":{"type":"array","items":{"$ref":"#/components/schemas/Shape1xt7ts9"}},"done":{"type":"number"},"total":{"type":"number"}},"required":["steps","done","total"]}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"viewer","x-vercatus-key-scopes":["read"]}},"/auth/me/pins":{"put":{"operationId":"putAuthMePins","tags":["Authentication"],"summary":"The signed-in person's pinned sites for the rail, in order (at most ten; sites of other workspaces are dropped).","description":"`{ siteIds }`: the signed-in person's pinned sites for the rail, in order (at most ten; sites of other workspaces are dropped). Answers the stored list.","requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"siteIds":{}},"required":["siteIds"]}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"pinnedSites":{"type":"array","items":{"type":"string"}}},"required":["pinnedSites"]}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"viewer","x-vercatus-key-scopes":["write"]}},"/assistant/threads":{"get":{"operationId":"getAssistantThreads","tags":["Assistant"],"summary":"The signed-in person's conversations, newest first; stale open ones are closed first.","description":"The signed-in person's conversations, newest first; stale open ones are closed first.","responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"threads":{"type":"array","items":{"$ref":"#/components/schemas/Shape1izin6y"}},"idleHours":{"type":"number"}},"required":["threads","idleHours"]}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"viewer","x-vercatus-key-scopes":["read"]},"post":{"operationId":"postAssistantThreads","tags":["Assistant"],"summary":"Open a conversation and stream the first answer (server-sent events: thread, status, delta, done, error).","description":"`{ message, context? }`: open a conversation and stream the first answer (server-sent events: thread, status, delta, done, error).","requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string"},"context":{}},"required":["message"]}}}},"responses":{"200":{"description":"Success","content":{"text/event-stream":{"schema":{"type":"string","description":"Server-sent events: `event:` and `data:` lines, one blank line after each."}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"viewer","x-vercatus-key-scopes":["write"]}},"/assistant/threads/{id}":{"get":{"operationId":"getAssistantThreadsById","tags":["Assistant"],"summary":"One of the person's conversations with its messages.","description":"One of the person's conversations with its messages.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"thread":{"$ref":"#/components/schemas/Shape1izin6y"},"messages":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"role":{"type":"string","enum":["user","assistant"]},"content":{"type":"string"},"sources":{"type":"array","items":{"type":"object","properties":{"title":{"type":"string"},"url":{"type":"string"},"kind":{"type":"string","enum":["workspace","product","docs","knowledge"]}},"required":["title","url","kind"]}},"createdAt":{"type":"string","format":"date-time"}},"required":["id","role","content","sources","createdAt"]}},"idleHours":{"type":"number"}},"required":["thread","messages","idleHours"]}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"viewer","x-vercatus-key-scopes":["read"]}},"/assistant/threads/{id}/messages":{"post":{"operationId":"postAssistantThreadsByIdMessages","tags":["Assistant"],"summary":"Ask again in an open conversation; the answer streams as for a new one.","description":"`{ message, context? }`: ask again in an open conversation; the answer streams as for a new one. A closed one is refused.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string"},"context":{}},"required":["message"]}}}},"responses":{"200":{"description":"Success","content":{"text/event-stream":{"schema":{"type":"string","description":"Server-sent events: `event:` and `data:` lines, one blank line after each."}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"viewer","x-vercatus-key-scopes":["write"]}},"/assistant/threads/{id}/close":{"post":{"operationId":"postAssistantThreadsByIdClose","tags":["Assistant"],"summary":"Close one's own conversation; it can be rated afterwards.","description":"Close one's own conversation; it can be rated afterwards.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean","enum":[true]}},"required":["ok"]}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"viewer","x-vercatus-key-scopes":["write"]}},"/assistant/threads/{id}/rate":{"post":{"operationId":"postAssistantThreadsByIdRate","tags":["Assistant"],"summary":"Rate a closed conversation, once.","description":"`{ rating: 1-5, solved: boolean, feedback? }`: rate a closed conversation, once. A rating of 2 or less, or \"not solved\", flags it for the team.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"rating":{"type":"number"},"solved":{"type":"boolean"},"feedback":{"type":"string"}},"required":["rating","solved"]}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean","enum":[true]}},"required":["ok"]}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"viewer","x-vercatus-key-scopes":["write"]}},"/assistant/threads/{id}/escalate":{"post":{"operationId":"postAssistantThreadsByIdEscalate","tags":["Assistant"],"summary":"Ask for a person; the ticket is flagged for the team, who reply by email.","description":"`{ reason? }`: ask for a person; the ticket is flagged for the team, who reply by email.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"reason":{"type":"string"}}}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean","enum":[true]}},"required":["ok"]}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"viewer","x-vercatus-key-scopes":["write"]}},"/sites/{id}/type":{"get":{"operationId":"getSitesByIdType","tags":["Sites"],"summary":"What kind of site it is (DATA-INTEGRITY-QA.md decision 5): { type: \"shop\" | \"publisher\" | \"local\" | \"software\" | \"other\" | null, source: \"owner\" | \"classified\" ","description":"What kind of site it is (DATA-INTEGRITY-QA.md decision 5): `{ type: \"shop\" | \"publisher\" | \"local\" | \"software\" | \"other\" | null, source: \"owner\" | \"classified\" | null, classified: { type, why }, options, commerceConfigured, showsCommerce }`. The owner's choice wins; without one the classifier decides from the site's pages and its domain's vertical, and its answer is kept on the site. The kind chooses the plays, the topic mix of the next build, and whether Commerce & compliance shows.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Shape1hwvb01"}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"viewer","x-vercatus-key-scopes":["read"]},"put":{"operationId":"putSitesByIdType","tags":["Sites"],"summary":"Sets the kind by hand; { type: null } returns it to the classifier.","description":"`{ type: \"shop\" | \"publisher\" | \"local\" | \"software\" | \"other\" }` sets the kind by hand; `{ type: null }` returns it to the classifier. The plays follow at their next generation and the topics at their next build; topics already measured are not rebuilt. Answers as GET. Analyst role; audited.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"type":{}},"required":["type"]}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Shape1hwvb01"}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"analyst","x-vercatus-key-scopes":["write"]}},"/sites/{id}/company":{"get":{"operationId":"getSitesByIdCompany","tags":["Sites"],"summary":"The company profile: { kind, position, selling, capacity, namesCompetitors, why, source, at }, each field inferred (the site's pages read once by a small model,","description":"The company profile: `{ kind, position, selling, capacity, namesCompetitors, why, source, at }`, each field inferred (the site's pages read once by a small model, the leaderboard, the workspace's members) or set by the owner, whose answer wins. It sets the topic mix of the next build (comparison topics only for a challenger that names its competitors) and the plays. The first read infers it.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Shape1rnlcdd"}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"viewer","x-vercatus-key-scopes":["read"]},"put":{"operationId":"putSitesByIdCompany","tags":["Sites"],"summary":"The owner's answers: { kind?, position?, selling?, capacity?, namesCompetitors?, fixed?","description":"The owner's answers: `{ kind?, position?, selling?, capacity?, namesCompetitors?, fixed? }`, a value sets the field, null gives it back to the inference; `fixed` is the sections the plays leave as they are (path prefixes such as \"/knowledge\", an empty list for none): pages that hold evidence are cited, never rewritten. The topics and plays follow at their next build. Answers as GET. Analyst role; audited.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"kind":{"anyOf":[{"type":"string"},{"type":"null"}]},"position":{"anyOf":[{"type":"string"},{"type":"null"}]},"selling":{"anyOf":[{"type":"string"},{"type":"null"}]},"capacity":{"anyOf":[{"type":"string"},{"type":"null"}]},"namesCompetitors":{"anyOf":[{"type":"boolean"},{"type":"null"}]},"fixed":{"type":"array","items":{"type":"string"}}}}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Shape1rnlcdd"}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"analyst","x-vercatus-key-scopes":["write"]}},"/sites/{id}/markets":{"get":{"operationId":"getSitesByIdMarkets","tags":["Sites"],"summary":"A site's markets: the ones in use (set by hand, or detected), what detection found and why, and the countries and languages to choose from.","description":"A site's markets: the ones in use (set by hand, or detected), what detection found and why, and the countries and languages to choose from.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Shapek04fuk"}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"viewer","x-vercatus-key-scopes":["read"]},"put":{"operationId":"putSitesByIdMarkets","tags":["Sites"],"summary":"Returns to detection; { mode: \"manual\", markets: [{ country (ISO code or null for global), language }] } sets them by hand (one to six).","description":"`{ mode: \"auto\" }` returns to detection; `{ mode: \"manual\", markets: [{ country (ISO code or null for global), language }] }` sets them by hand (one to six). The next run writes its questions for them.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"mode":{"type":"string"}},"required":["mode"]}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Shapek04fuk"}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"admin","x-vercatus-key-scopes":null}},"/workflows/{id}/pages":{"get":{"operationId":"getWorkflowsByIdPages","tags":["Results of a run"],"summary":"Page inventory: status, template, words, AI-crawler refusals, performance.","description":"Page inventory: status, template, words, AI-crawler refusals, performance. Query: `?cursor=` (the `x-next-cursor` of the previous page), `?envelope=` (`1` answers `{ items, nextCursor }` instead of the bare list), `?limit=` (rows per page).","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"cursor","in":"query","required":false,"schema":{"type":"string"}},{"name":"envelope","in":"query","required":false,"schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"anyOf":[{"type":"array","items":{"type":"object","additionalProperties":{}}},{"type":"object","properties":{"items":{"type":"array","items":{"type":"object","additionalProperties":{}}},"nextCursor":{"anyOf":[{"type":"string"},{"type":"null"}]},"total":{"type":"number"}},"required":["items","nextCursor","total"]}]}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"viewer","x-vercatus-key-scopes":["read"]}},"/workflows/{id}/pages/table":{"get":{"operationId":"getWorkflowsByIdPagesTable","tags":["Results of a run"],"summary":"The run's pages as the Pages tab shows them, a page of rows at a time, sorted and filtered here: { items, nextCursor, from, to, matching, summary, cited }.","description":"The run's pages as the Pages tab shows them, a page of rows at a time, sorted and filtered here: `{ items, nextCursor, from, to, matching, summary, cited }`. Query: `?q=` (in the address or title), `?template=` (a template fingerprint), `?status=` (`200` or `other`), `?ai=` (`refused` or `served`), `?cited=` (`yes` or `no`: cited in a real answer in the last 90 days), `?sort=` (url, cited, status, ai, words, js, lcp or clicks; the inventory's order by address without one), `?desc=1`, `?limit=` (10 by default, 200 at most; every row when 15 or fewer match), `?cursor=` (the `nextCursor` of the page before, in the same order and filters). Each item is an inventory row with `citedIn` (the real answers that cited the page: answers, questions, engines; null when none did). `summary` counts every page the run sampled (refused by an AI crawler, not answering 200, needing JavaScript for over 40% of the text, cited), lists its templates, names the page to fix first and the cited pages the run did not sample; `cited` is the window and the asks with an answer in it.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"q","in":"query","required":false,"schema":{"type":"string"}},{"name":"template","in":"query","required":false,"schema":{"type":"string"}},{"name":"status","in":"query","required":false,"schema":{"type":"string"}},{"name":"ai","in":"query","required":false,"schema":{"type":"string"}},{"name":"cited","in":"query","required":false,"schema":{"type":"string"}},{"name":"sort","in":"query","required":false,"schema":{"type":"string"}},{"name":"desc","in":"query","required":false,"schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"schema":{"type":"string"}},{"name":"cursor","in":"query","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"array","items":{"type":"object","properties":{"citedIn":{"anyOf":[{"type":"object","properties":{"path":{"type":"string"},"answers":{"type":"number"},"questions":{"type":"number"},"engines":{"type":"array","items":{"type":"string"}}},"required":["path","answers","questions","engines"]},{"type":"null"}]}},"required":["citedIn"]}},"nextCursor":{"anyOf":[{"type":"string"},{"type":"null"}]},"from":{"type":"number"},"to":{"type":"number"},"matching":{"type":"number"},"summary":{"type":"object","properties":{"total":{"type":"number"},"refused":{"type":"number"},"broken":{"type":"number"},"jsHeavy":{"type":"number"},"cited":{"type":"number"},"templates":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"label":{"type":"string"}},"required":["id","label"]}},"hasSearch":{"type":"boolean"},"fixFirst":{"anyOf":[{"type":"object","properties":{"id":{"type":"string"},"url":{"type":"string"},"answers":{"type":"number"}},"required":["id","url","answers"]},{"type":"null"}]},"unsampled":{"type":"object","properties":{"count":{"type":"number"},"pages":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"answers":{"type":"number"},"questions":{"type":"number"},"engines":{}},"required":["path","answers","questions","engines"]}}},"required":["count","pages"]}},"required":["total","refused","broken","jsHeavy","cited","templates","hasSearch","fixFirst","unsampled"]},"cited":{"type":"object","properties":{"days":{"type":"number"},"asked":{"type":"number"}},"required":["days","asked"]}},"required":["items","nextCursor","from","to","matching","summary","cited"]}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"viewer","x-vercatus-key-scopes":["read"]}},"/workflows/{id}/pages/{pageId}":{"get":{"operationId":"getWorkflowsByIdPagesByPageId","tags":["Results of a run"],"summary":"One page of the run: every identity's response, technical facts, extracted content and lab performance, and cited: the run's simulated answers that cited it.","description":"One page of the run: every identity's response, technical facts, extracted content and lab performance, and `cited`: the run's simulated answers that cited it.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"pageId","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"fetches":{"type":"array","items":{"type":"object","properties":{"perspective":{"type":"string"},"status":{"anyOf":[{"type":"number"},{"type":"null"}]},"blocked":{"type":"boolean"},"challenge":{"type":"boolean"},"textLength":{"anyOf":[{"type":"number"},{"type":"null"}]},"elapsedMs":{"anyOf":[{"type":"number"},{"type":"null"}]},"error":{"anyOf":[{"type":"string"},{"type":"null"}]},"headers":{"anyOf":[{"type":"object","additionalProperties":{"type":"string"}},{"type":"null"}]},"timing":{"anyOf":[{"type":"object","properties":{"ttfbMs":{"type":"number"},"totalMs":{"type":"number"},"domContentLoadedMs":{"type":"number"},"loadMs":{"type":"number"},"lcpMs":{"type":"number"},"cls":{"type":"number"}}},{"type":"null"}]}},"required":["perspective","status","blocked","challenge","textLength","elapsedMs","error","headers"]}},"chunks":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"idx":{"type":"number"},"headingPath":{"anyOf":[{"type":"string"},{"type":"null"}]},"text":{"type":"string"},"tokenCount":{"type":"number"}},"required":["id","idx","headingPath","text","tokenCount"]}},"claims":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"workflowId":{"type":"string"},"pageId":{"type":"string"},"chunkId":{"anyOf":[{"type":"string"},{"type":"null"}]},"text":{"type":"string"},"subject":{"anyOf":[{"type":"string"},{"type":"null"}]},"predicate":{"anyOf":[{"type":"string"},{"type":"null"}]},"object":{"anyOf":[{"type":"string"},{"type":"null"}]},"evidenceType":{"type":"string","enum":["none","statistic","citation","quote","first_party_data"]},"evidenceText":{"anyOf":[{"type":"string"},{"type":"null"}]},"verifiable":{"type":"boolean"},"specificity":{"type":"number"},"freshness":{"anyOf":[{"type":"string"},{"type":"null"}]},"language":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["id","workflowId","pageId","chunkId","text","subject","predicate","object","evidenceType","evidenceText","verifiable","specificity","freshness","language"]}},"entities":{},"graph":{"anyOf":[{"type":"object"},{"type":"null"}]},"inlinks":{},"outlinks":{},"cited":{"type":"number"},"status":{"anyOf":[{"type":"number"},{"type":"null"}]},"url":{"type":"string"},"id":{"type":"string"},"createdAt":{"type":"string","format":"date-time"},"workflowId":{"type":"string"},"siteId":{"type":"string"},"fetchedAt":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"language":{"anyOf":[{"type":"string"},{"type":"null"}]},"urlId":{"anyOf":[{"type":"string"},{"type":"null"}]},"finalUrl":{"anyOf":[{"type":"string"},{"type":"null"}]},"templateId":{"anyOf":[{"type":"string"},{"type":"null"}]},"title":{"anyOf":[{"type":"string"},{"type":"null"}]},"wordCount":{"anyOf":[{"type":"number"},{"type":"null"}]},"contentHash":{"anyOf":[{"type":"string"},{"type":"null"}]},"technical":{"anyOf":[{"type":"object","properties":{"status":{"type":"number"},"redirects":{"type":"array","items":{"type":"string"}},"contentType":{"type":"string"},"headers":{"type":"object","additionalProperties":{"type":"string"}},"canonical":{"type":"string"},"canonicalSelf":{"type":"boolean"},"metaRobots":{"type":"string"},"metaBingbot":{"type":"string"},"structuredDataFormats":{"type":"array","items":{"type":"string"}},"xRobots":{"type":"string"},"indexable":{"type":"boolean"},"indexabilityReasons":{"type":"array","items":{"type":"string"}},"hreflang":{"type":"array","items":{"type":"object","properties":{"lang":{"type":"string"},"href":{"type":"string"}},"required":["lang","href"]}},"title":{"type":"string"},"metaDescription":{"type":"string"},"h1":{"type":"array","items":{"type":"string"}},"headings":{"type":"array","items":{"type":"object","properties":{"level":{"type":"number"},"text":{"type":"string"}},"required":["level","text"]}},"jsonLd":{"type":"array","items":{}},"jsonLdTypes":{"type":"array","items":{"type":"string"}},"jsonLdInvalid":{"type":"number"},"openGraph":{"type":"object","additionalProperties":{"type":"string"}},"lang":{"type":"string"},"images":{"type":"object","properties":{"total":{"type":"number"},"missingAlt":{"type":"number"}},"required":["total","missingAlt"]},"links":{"type":"object","properties":{"internal":{"type":"number"},"external":{"type":"number"},"nofollow":{"type":"number"}},"required":["internal","external","nofollow"]},"wordCount":{"type":"number"},"textToHtmlRatio":{"type":"number"},"htmlBytes":{"type":"number"},"timing":{"type":"object","properties":{"ttfbMs":{"type":"number"},"totalMs":{"type":"number"},"domContentLoadedMs":{"type":"number"},"loadMs":{"type":"number"},"lcpMs":{"type":"number"},"cls":{"type":"number"}}},"performance":{"type":"object","properties":{"ttfbMs":{"type":"number"},"fcpMs":{"type":"number"},"lcpMs":{"type":"number"},"loadMs":{"type":"number"},"domContentLoadedMs":{"type":"number"},"cls":{"type":"number"},"tbtMs":{"type":"number"},"longTasks":{"type":"number"},"lcp":{"type":"object","properties":{"tag":{"type":"string"},"url":{"type":"string"},"text":{"type":"string"},"loading":{"type":"string"},"fetchPriority":{"type":"string"},"lazyAttr":{"type":"boolean"}}},"history":{"type":"object","properties":{"pushes":{"type":"number"},"urls":{"type":"array","items":{"type":"string"}}},"required":["pushes","urls"]},"contentWidth":{"type":"object","properties":{"viewport":{"type":"number"},"document":{"type":"number"}},"required":["viewport","document"]},"clsSource":{"type":"object","properties":{"selector":{"type":"string"},"value":{"type":"number"}}},"transferBytes":{"type":"number"},"resources":{"type":"number"},"byType":{"type":"object","additionalProperties":{"type":"object","properties":{"count":{"type":"number"},"bytes":{"type":"number"}},"required":["count","bytes"]}},"thirdPartyBytes":{"type":"number"},"thirdPartyHosts":{"type":"array","items":{"type":"string"}},"renderBlocking":{"type":"object","properties":{"count":{"type":"number"},"bytes":{"type":"number"}},"required":["count","bytes"]},"uncompressedText":{"type":"object","properties":{"count":{"type":"number"},"bytes":{"type":"number"}},"required":["count","bytes"]},"largest":{"type":"array","items":{"type":"object","properties":{"url":{"type":"string"},"type":{"type":"string"},"bytes":{"type":"number"}},"required":["url","type","bytes"]}},"images":{"type":"object","properties":{"total":{"type":"number"},"withoutDimensions":{"type":"number"},"oversized":{"type":"number"},"modernFormat":{"type":"number"},"lazy":{"type":"number"}},"required":["total","withoutDimensions","oversized","modernFormat","lazy"]},"scripts":{"type":"object","properties":{"total":{"type":"number"},"syncInHead":{"type":"number"}},"required":["total","syncInHead"]}}},"search":{"type":"object","properties":{"clicks":{"type":"number"},"impressions":{"type":"number"},"ctr":{"type":"number"},"position":{"type":"number"},"topQueries":{"type":"array","items":{"type":"object","properties":{"query":{"type":"string"},"clicks":{"type":"number"},"impressions":{"type":"number"},"position":{"type":"number"}},"required":["query","clicks","impressions","position"]}}},"required":["clicks","impressions","ctr","position"]},"field":{"type":"object","properties":{"scope":{"type":"string","enum":["url","origin"]},"formFactor":{"type":"string","enum":["ALL","PHONE","DESKTOP"]},"lcpMs":{"type":"number"},"cls":{"type":"number"},"inpMs":{"type":"number"},"ttfbMs":{"type":"number"},"fcpMs":{"type":"number"},"good":{"type":"object","properties":{"lcp":{"type":"number"},"cls":{"type":"number"},"inp":{"type":"number"}}},"collected":{"type":"string"}},"required":["scope","formFactor"]},"renderDelta":{"type":"object","properties":{"rawWords":{"type":"number"},"renderedWords":{"type":"number"},"addedByJs":{"type":"number"},"addedByJsRatio":{"type":"number"}},"required":["rawWords","renderedWords","addedByJs","addedByJsRatio"]},"viewport":{"type":"boolean"},"charset":{"type":"string"},"hashVersion":{"type":"number"},"head":{"type":"object","properties":{"canonicalCount":{"type":"number"},"canonicalTargets":{"type":"array","items":{"type":"string"}},"canonicalOutsideHead":{"type":"boolean"},"canonicalRaw":{"type":"string"},"canonicalHeader":{"type":"string"},"titleCount":{"type":"number"},"titleDistinct":{"type":"number"},"descriptionCount":{"type":"number"},"descriptionDistinct":{"type":"number"},"titleOutsideHead":{"type":"boolean"},"invalid":{"anyOf":[{"type":"object","properties":{"tag":{"type":"string"},"seoAfter":{"type":"boolean"}},"required":["tag","seoAfter"]},{"type":"null"}]},"robots":{"type":"array","items":{"type":"object","properties":{"source":{"type":"string"},"content":{"type":"string"}},"required":["source","content"]}},"refresh":{"anyOf":[{"type":"object","properties":{"delay":{"type":"number"},"url":{"type":"string"}},"required":["delay"]},{"type":"null"}]},"viewport":{"type":"string"},"doctype":{"type":"boolean"},"charsetEarly":{"anyOf":[{"type":"boolean"},{"type":"null"}]}},"required":["canonicalCount","canonicalTargets","canonicalOutsideHead","titleCount","titleDistinct","descriptionCount","descriptionDistinct","titleOutsideHead","invalid","robots","refresh","doctype","charsetEarly"]},"body":{"type":"object","properties":{"emptyH1":{"type":"number"},"images":{"type":"array","items":{"type":"object","properties":{"src":{"type":"string"},"srcset":{"type":"string"},"alt":{"anyOf":[{"type":"string"},{"type":"null"}]},"width":{"type":"boolean"},"height":{"type":"boolean"},"loading":{"type":"string"}},"required":["src","alt","width","height"]}},"mixed":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string"},"url":{"type":"string"}},"required":["type","url"]}},"trust":{"type":"object","properties":{"privacy":{"type":"boolean"},"terms":{"type":"boolean"},"mailto":{"type":"boolean"},"tel":{"type":"boolean"}},"required":["privacy","terms","mailto","tel"]},"plugins":{"type":"number"}},"required":["emptyH1","images","mixed","trust","plugins"]}},"required":["status","redirects","headers","indexable","indexabilityReasons","hreflang","h1","headings","jsonLd","jsonLdTypes","openGraph","images","links","wordCount","textToHtmlRatio","htmlBytes"]},{"type":"null"}]},"contentMd":{"anyOf":[{"type":"string"},{"type":"null"}]},"perspectiveDiff":{"anyOf":[{"type":"object","properties":{"perspectives":{"type":"object","additionalProperties":{"type":"object","properties":{"status":{"type":"number"},"blocked":{"type":"boolean"},"challenge":{"type":"boolean"},"textLength":{"type":"number"},"bodyHash":{"type":"string"},"note":{"type":"string"}},"required":["status","blocked","challenge","textLength"]}},"aiCrawlersBlocked":{"type":"array","items":{"type":"string"}},"rateLimited":{"type":"array","items":{"type":"string"}},"rawVsRenderedRatio":{"type":"number"}},"required":["perspectives","aiCrawlersBlocked","rateLimited"]},{"type":"null"}]}},"required":["fetches","chunks","claims","entities","graph","inlinks","outlinks","cited","status","url","id","createdAt","workflowId","siteId","fetchedAt","language","urlId","finalUrl","templateId","title","wordCount","contentHash","technical","contentMd","perspectiveDiff"]}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"viewer","x-vercatus-key-scopes":["read"]}},"/org/audit":{"get":{"operationId":"getOrgAudit","tags":["Workspace"],"summary":"A kind (finding, run, site, report, prompt, goal, traffic, org, member, account, billing, operator) or an action prefix; ?actor=, ?from=, ?to= (ISO dates, UTC),","description":"`?action=` a kind (finding, run, site, report, prompt, goal, traffic, org, member, account, billing, operator) or an action prefix; `?actor=`, `?from=`, `?to=` (ISO dates, UTC), `?q=` a search; `?limit=` (100, at most 500). Paged by `?cursor=` (the `x-next-cursor` header of the previous page); `?before=<time>` still works. The body is the list; `?envelope=1` answers `{ items, nextCursor }` instead.","parameters":[{"name":"action","in":"query","required":false,"schema":{"type":"string"}},{"name":"actor","in":"query","required":false,"schema":{"type":"string"}},{"name":"from","in":"query","required":false,"schema":{"type":"string"}},{"name":"to","in":"query","required":false,"schema":{"type":"string"}},{"name":"q","in":"query","required":false,"schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"schema":{"type":"string"}},{"name":"cursor","in":"query","required":false,"schema":{"type":"string"}},{"name":"before","in":"query","required":false,"schema":{"type":"string"}},{"name":"envelope","in":"query","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"anyOf":[{"type":"array","items":{}},{"type":"object","properties":{"items":{"type":"array","items":{}},"nextCursor":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["items","nextCursor"]}]}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"admin","x-vercatus-key-scopes":null}},"/org/audit.csv":{"get":{"operationId":"getOrgAuditCsv","tags":["Workspace"],"summary":"The same filters as a CSV file (UTC, ISO 8601), newest first, every event that matches: streamed in pages, so there is no cap and no silent cut-off (a stream th","description":"The same filters as a CSV file (UTC, ISO 8601), newest first, every event that matches: streamed in pages, so there is no cap and no silent cut-off (a stream that fails part-way is reset, not ended clean). The download is itself recorded, with the number of rows. Query: `?action=` (an action kind or prefix), `?actor=` (one person or key), `?from=` (start of the period (an ISO date)), `?q=` (a search), `?to=` (end of the period (an ISO date)).","parameters":[{"name":"action","in":"query","required":false,"schema":{"type":"string"}},{"name":"actor","in":"query","required":false,"schema":{"type":"string"}},{"name":"from","in":"query","required":false,"schema":{"type":"string"}},{"name":"q","in":"query","required":false,"schema":{"type":"string"}},{"name":"to","in":"query","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"text/csv":{"schema":{"type":"string","description":"RFC 4180, UTF-8, CRLF line ends; streamed. A stream that fails part-way ends the connection (a short file is never a clean end)."}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"admin","x-vercatus-key-scopes":null}},"/org/audit/meta":{"get":{"operationId":"getOrgAuditMeta","tags":["Workspace"],"summary":"What the filters offer: the kinds, the people and keys that appear in the log, and the retention setting.","description":"What the filters offer: the kinds, the people and keys that appear in the log, and the retention setting.","responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"groups":{"type":"array","items":{"type":"object","properties":{"value":{"type":"string"},"label":{"type":"string"}},"required":["value","label"]}},"actors":{"type":"array","items":{"type":"object","properties":{"actor":{"type":"string"},"n":{"type":"number"}},"required":["actor","n"]}},"timezone":{"type":"string"},"retention":{"type":"object","properties":{"days":{"anyOf":[{"type":"number"},{"type":"null"}]},"minDays":{"type":"number"}},"required":["days","minDays"]}},"required":["groups","actors","timezone","retention"]}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"admin","x-vercatus-key-scopes":null}},"/org/audit/retention":{"put":{"operationId":"putOrgAuditRetention","tags":["Workspace"],"summary":"Keep audit events this many days (at least 365), or null for the life of the workspace.","description":"`{ days }`: keep audit events this many days (at least 365), or `null` for the life of the workspace. Owners.","requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"days":{}},"required":["days"]}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"days":{"anyOf":[{"type":"number"},{"type":"null"}]}},"required":["days"]}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"owner","x-vercatus-key-scopes":null}},"/sites/{id}":{"delete":{"operationId":"deleteSitesById","tags":["Sites"],"summary":"With the site's host typed back: remove the site with its runs, pages, findings, answers, prompts, goals and signals.","description":"`{ confirm }` with the site's host typed back: remove the site with its runs, pages, findings, answers, prompts, goals and signals. Admins. Refused (409) while one of its runs is going. The runs still count against this month's allowance if the host is added again. The billed site count follows.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean","enum":[true]},"host":{"type":"string"},"runs":{"type":"number"}},"required":["ok","host","runs"]}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"admin","x-vercatus-key-scopes":null}},"/org/lifecycle":{"get":{"operationId":"getOrgLifecycle","tags":["Workspace"],"summary":"Whether the workspace is closed, since when, when it is deleted, and whether it can still be reopened.","description":"Whether the workspace is closed, since when, when it is deleted, and whether it can still be reopened.","responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Shapewl1w82"}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"viewer","x-vercatus-key-scopes":["read"]}},"/org/reopen":{"post":{"operationId":"postOrgReopen","tags":["Workspace"],"summary":"Reopen a closed workspace before its deletion date.","description":"Reopen a closed workspace before its deletion date. Owners. A subscription cancelled at closing stays cancelled: choose a plan again to run.","responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Shapewl1w82"}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"owner","x-vercatus-key-scopes":null}},"/org/export":{"post":{"operationId":"postOrgExport","tags":["Workspace"],"summary":"Start a workspace export: sites, runs, findings, verified fixes, citation checks, prompts and their results, goals, the audit log and usage, as CSV and JSON in ","description":"Start a workspace export: sites, runs, findings, verified fixes, citation checks, prompts and their results, goals, the audit log and usage, as CSV and JSON in one zip. Admins. Answers 202 at once; the worker writes the file and emails the person who asked. One at a time, five a day.","responses":{"202":{"description":"Accepted","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"status":{"type":"string","enum":["queued","running","failed","expired","ready"]},"requestedBy":{"anyOf":[{"type":"string"},{"type":"null"}]},"createdAt":{"type":"string","format":"date-time"},"finishedAt":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"expiresAt":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"bytes":{"anyOf":[{"type":"number"},{"type":"null"}]},"counts":{"anyOf":[{"type":"object","additionalProperties":{"type":"number"}},{"type":"null"}]},"error":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["id","status","requestedBy","createdAt","finishedAt","expiresAt","bytes","counts","error"]}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"admin","x-vercatus-key-scopes":null}},"/org/exports":{"get":{"operationId":"getOrgExports","tags":["Workspace"],"summary":"The workspace's exports, newest first, each ready one with a download link that works for 15 minutes.","description":"The workspace's exports, newest first, each ready one with a download link that works for 15 minutes. Admins.","responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"url":{"anyOf":[{"type":"string"},{"type":"null"}]},"id":{"type":"string"},"status":{"type":"string","enum":["queued","running","failed","expired","ready"]},"requestedBy":{"anyOf":[{"type":"string"},{"type":"null"}]},"createdAt":{"type":"string","format":"date-time"},"finishedAt":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"expiresAt":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"bytes":{"anyOf":[{"type":"number"},{"type":"null"}]},"counts":{"anyOf":[{"type":"object","additionalProperties":{"type":"number"}},{"type":"null"}]},"error":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["url","id","status","requestedBy","createdAt","finishedAt","expiresAt","bytes","counts","error"]}}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"admin","x-vercatus-key-scopes":null}},"/org/exports/{id}/download":{"get":{"operationId":"getOrgExportsByIdDownload","tags":["Workspace"],"summary":"The export file behind a signed link from GET /api/org/exports; the link names the workspace and expires.","description":"The export file behind a signed link from GET /api/org/exports; the link names the workspace and expires. Query: `?exp=` (the link's expiry), `?org=` (the workspace), `?sig=` (the link's signature).","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"exp","in":"query","required":false,"schema":{"type":"string"}},{"name":"org","in":"query","required":false,"schema":{"type":"string"}},{"name":"sig","in":"query","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/zip":{"schema":{"type":"string","format":"binary"}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"security":[],"x-vercatus-role":null,"x-vercatus-key-scopes":null}},"/ready":{"get":{"operationId":"getReady","tags":["Service"],"summary":"Readiness for a load balancer or an uptime check: 200 when the database answers, the blob store takes a write and gives it back, no run has waited too long in t","description":"Readiness for a load balancer or an uptime check: 200 when the database answers, the blob store takes a write and gives it back, no run has waited too long in the queue and (in worker mode) a worker is beating; 503 otherwise, with which check failed. /api/health stays the liveness check.","responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean"},"checks":{"type":"object","properties":{"db":{"type":"object","properties":{"ok":{"type":"boolean"},"ms":{"type":"number"}},"required":["ok","ms"]},"storage":{"type":"object","properties":{"ok":{"type":"boolean"},"ms":{"type":"number"},"kind":{"type":"string"}},"required":["ok","ms","kind"]},"queue":{"type":"object","properties":{"ok":{"type":"boolean"},"queued":{"type":"number"},"oldestQueuedSec":{"anyOf":[{"type":"number"},{"type":"null"}]},"limitSec":{"type":"number"}},"required":["ok","queued","oldestQueuedSec","limitSec"]},"worker":{"type":"object","properties":{"ok":{"type":"boolean"},"required":{"type":"boolean"},"lastBeatSec":{"anyOf":[{"type":"number"},{"type":"null"}]},"workers":{"type":"number"},"limitSec":{"type":"number"}},"required":["ok","required","lastBeatSec","workers","limitSec"]}},"required":["db","storage","queue","worker"]}},"required":["ok","checks"]}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"security":[],"x-vercatus-role":null,"x-vercatus-key-scopes":null}},"/account/deletion":{"get":{"operationId":"getAccountDeletion","tags":["Service"],"summary":"What deleting this account would do: the workspaces it would leave, close, and the ones that need a new owner first.","description":"What deleting this account would do: the workspaces it would leave, close, and the ones that need a new owner first.","responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"leave":{"type":"array","items":{"type":"object","properties":{"orgId":{"type":"string"},"name":{"type":"string"}},"required":["orgId","name"]}},"close":{"type":"array","items":{"type":"object","properties":{"orgId":{"type":"string"},"name":{"type":"string"}},"required":["orgId","name"]}},"blocked":{"type":"array","items":{"type":"object","properties":{"orgId":{"type":"string"},"name":{"type":"string"},"members":{"type":"number"}},"required":["orgId","name","members"]}},"email":{"anyOf":[{"type":"string"},{"type":"null"}]},"needsPassword":{"type":"boolean"},"deleteAfterDays":{"type":"number"}},"required":["leave","close","blocked","email","needsPassword","deleteAfterDays"]}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"viewer","x-vercatus-key-scopes":["read"]}},"/account/delete":{"post":{"operationId":"postAccountDelete","tags":["Service"],"summary":"With the account's email typed back, and the password when the account has one: delete the account.","description":"`{ confirm, password? }` with the account's email typed back, and the password when the account has one: delete the account. 409 with the workspaces that need another owner first. The session ends; a confirmation is emailed.","requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{},"password":{}},"required":["confirm"]}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean","enum":[true]},"left":{"type":"array","items":{"type":"object","properties":{"orgId":{"type":"string"},"name":{"type":"string"}},"required":["orgId","name"]}},"closed":{"type":"array","items":{"type":"object","properties":{"orgId":{"type":"string"},"name":{"type":"string"}},"required":["orgId","name"]}},"signedOut":{"type":"boolean","enum":[true]},"appUrl":{"type":"string"}},"required":["ok","left","closed","signedOut","appUrl"]}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"viewer","x-vercatus-key-scopes":["write"]}},"/auth/config":{"get":{"operationId":"getAuthConfig","tags":["Authentication"],"summary":"How this instance signs people in: the instance-wide OIDC provider, local passwords, \"Continue with Google\" and \"Continue with Microsoft\", and whether email-fir","description":"How this instance signs people in: the instance-wide OIDC provider, local passwords, \"Continue with Google\" and \"Continue with Microsoft\", and whether email-first SSO lookup (`POST /api/sso/lookup`) is available.","responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"mode":{"type":"string","enum":["single","multi"]},"oidc":{"type":"boolean"},"local":{"type":"boolean","enum":[true]},"google":{"type":"boolean"},"microsoft":{"type":"boolean"},"ssoLookup":{"type":"boolean"},"passwordReset":{"type":"boolean"}},"required":["mode","oidc","local","google","microsoft","ssoLookup","passwordReset"]}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"security":[],"x-vercatus-role":null,"x-vercatus-key-scopes":null}},"/auth/register":{"post":{"operationId":"postAuthRegister","tags":["Authentication"],"summary":"Local sign-up: { email, password, terms: true, name?, orgName?, domain?, plan?, interval?, from?, consent?, remember?","description":"Local sign-up: `{ email, password, terms: true, name?, orgName?, domain?, plan?, interval?, from?, consent?, remember? }`. The first user owns a new workspace; an address with an open invitation is sent to the invitation link instead (409 with `invited`). `terms` is the accepted terms and privacy notice, required. The answer's `next` is the welcome wizard (ONBOARDING-V2.md); a `plan` and `interval` from the pricing page are kept as a hint for its recommendation, and a `domain` is added as the first site. The confirmation email (a code and a link) goes out; nothing waits for it until the exploration and the checkout. `from` names the public page the click came from; `consent` is the opt-in to product emails; `remember: false` makes the session end with the browser.","requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"email":{"type":"string"},"password":{"type":"string"},"name":{"type":"string"},"orgName":{"type":"string"},"domain":{"type":"string"},"plan":{"type":"string"},"interval":{"type":"string"},"from":{"type":"string"},"consent":{"type":"boolean"},"terms":{"type":"boolean"},"remember":{"type":"boolean"}},"required":["email","password"]}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean","enum":[true]},"siteId":{"anyOf":[{"type":"string"},{"type":"null"}]},"verifyEmailSent":{"type":"boolean"},"emailVerified":{"type":"boolean","enum":[false]},"plan":{"anyOf":[{"type":"string","enum":["watch","lite","solo","portfolio"]},{"type":"null"}]},"next":{"type":"string"}},"required":["ok","siteId","verifyEmailSent","emailVerified","plan","next"]}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"security":[],"x-vercatus-role":null,"x-vercatus-key-scopes":null}},"/auth/verify-email":{"get":{"operationId":"getAuthVerifyEmail","tags":["Authentication"],"summary":"The emailed link: marks the address verified, attaches the invitations waiting for it, starts what waited for it (the exploration of the first domain; a paid wo","description":"The emailed link: marks the address verified, attaches the invitations waiting for it, starts what waited for it (the exploration of the first domain; a paid workspace's first run when its domain is verified), and lands on one small page that says so. The setup page already open in another tab ticks itself green; nobody has to go back and forth. Query: `?token=` (the emailed token). Holding the link is not proof of being the person: a mail scanner opens every link in a message, and whoever registered somebody else's address chose its password. So a GET confirms the address only for a browser that already holds a session of that very account (the person who signed up and clicked in the same browser); anyone else lands on a page that asks for the account's password and confirms with a POST (below). A link opened after the address was confirmed is still \"confirmed\".","parameters":[{"name":"token","in":"query","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"text/html":{"schema":{"type":"string"}}}},"302":{"description":"Redirect: the `Location` header says where.","headers":{"Location":{"schema":{"type":"string"}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"security":[],"x-vercatus-role":null,"x-vercatus-key-scopes":null},"post":{"operationId":"postAuthVerifyEmail","tags":["Authentication"],"summary":"Confirm the address with its emailed link, from a session of the same account or with the account's password.","description":"`{ token, password? }` (JSON, or the form on the page the link opens): confirm the address with its emailed link, from a session of the same account or with the account's password. Answers `{ ok: true }`; a form post is sent on to the \"confirmed\" page. Attempts are counted before the password is checked.","requestBody":{"required":false,"content":{"application/x-www-form-urlencoded":{"schema":{"type":"string"}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean","enum":[true]}},"required":["ok"]}},"text/html":{"schema":{"type":"string"}}}},"302":{"description":"Redirect: the `Location` header says where.","headers":{"Location":{"schema":{"type":"string"}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"security":[],"x-vercatus-role":null,"x-vercatus-key-scopes":null}},"/auth/verify-email/send":{"post":{"operationId":"postAuthVerifyEmailSend","tags":["Authentication"],"summary":"Send the confirmation link again without a session (a password sign-in is refused until the address is confirmed).","description":"`{ email }`: send the confirmation link again without a session (a password sign-in is refused until the address is confirmed). Always answers the same.","requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"email":{"type":"string"}},"required":["email"]}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean","enum":[true]}},"required":["ok"]}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"security":[],"x-vercatus-role":null,"x-vercatus-key-scopes":null}},"/auth/login":{"post":{"operationId":"postAuthLogin","tags":["Authentication"],"summary":"Local sign-in: { email, password }.","description":"Local sign-in: `{ email, password }`. Sets the session cookie, or answers `{ mfa: true }` when the account has an authenticator app (then `POST /api/auth/mfa/verify`). Refused with `sso.url` for an address whose domain a workspace enforces single sign-on for, with `unverified` until the address is confirmed, and with 429 after repeated failures from the address or for the account (the account stays locked for up to 15 minutes; a password reset clears it).","requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"email":{"type":"string"},"password":{"type":"string"},"next":{"type":"string"},"remember":{"type":"boolean"}}}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"anyOf":[{"type":"object","properties":{"mfa":{"type":"boolean","enum":[true]}},"required":["mfa"]},{"type":"object","properties":{"ok":{"type":"boolean","enum":[true]}},"required":["ok"]}]}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"security":[],"x-vercatus-role":null,"x-vercatus-key-scopes":null}},"/auth/mfa/pending":{"get":{"operationId":"getAuthMfaPending","tags":["Authentication"],"summary":"Whether this browser holds a pending two-step sign-in (after a password or an identity provider), and which second factors the account has: the sign-in page the","description":"Whether this browser holds a pending two-step sign-in (after a password or an identity provider), and which second factors the account has: the sign-in page then asks for a code or a passkey.","responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"pending":{"type":"boolean"},"next":{"anyOf":[{"type":"string"},{"type":"null"}]},"methods":{"anyOf":[{"type":"object","properties":{"totp":{"type":"boolean"},"passkey":{"type":"boolean"}},"required":["totp","passkey"]},{"type":"null"}]}},"required":["pending","next","methods"]}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"security":[],"x-vercatus-role":null,"x-vercatus-key-scopes":null}},"/auth/mfa/passkey/options":{"post":{"operationId":"postAuthMfaPasskeyOptions","tags":["Authentication"],"summary":"The second step with a passkey or security key: the options for the browser's WebAuthn call, limited to the account's own passkeys.","description":"The second step with a passkey or security key: the options for the browser's WebAuthn call, limited to the account's own passkeys.","responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"challenge":{"type":"string"},"timeout":{"type":"number"},"rpId":{"type":"string"},"allowCredentials":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"transports":{"type":"array","items":{"type":"string"}},"type":{"type":"string"}},"required":["id","type"]}},"userVerification":{"type":"string","enum":["discouraged","preferred","required"]},"hints":{"type":"array","items":{"type":"string","enum":["hybrid","security-key","client-device"]}},"extensions":{"$ref":"#/components/schemas/Shape15m9mq3"}},"required":["challenge"]}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"security":[],"x-vercatus-role":null,"x-vercatus-key-scopes":null}},"/auth/mfa/passkey/verify":{"post":{"operationId":"postAuthMfaPasskeyVerify","tags":["Authentication"],"summary":"The browser's WebAuthn answer; a passkey registered to the account completes the sign-in.","description":"`{ response }`: the browser's WebAuthn answer; a passkey registered to the account completes the sign-in.","requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"response":{}},"required":["response"]}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean"},"next":{"type":"string"}},"required":["ok","next"]}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"security":[],"x-vercatus-role":null,"x-vercatus-key-scopes":null}},"/auth/mfa/verify":{"post":{"operationId":"postAuthMfaVerify","tags":["Authentication"],"summary":"The second step of a sign-in: a code from the authenticator app, or a recovery code (spent).","description":"`{ code }`: the second step of a sign-in: a code from the authenticator app, or a recovery code (spent). Starts the session. Six wrong codes in 15 minutes lock the step.","requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"}},"required":["code"]}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"recoveryCodesLeft":{"type":"number"},"ok":{"type":"boolean"},"next":{"type":"string"}},"required":["ok","next"]}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"security":[],"x-vercatus-role":null,"x-vercatus-key-scopes":null}},"/auth/logout":{"post":{"operationId":"postAuthLogout","tags":["Authentication"],"summary":"Ends the session.","description":"Ends the session.","responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean","enum":[true]}},"required":["ok"]}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"security":[],"x-vercatus-role":null,"x-vercatus-key-scopes":null}},"/auth/password/forgot":{"post":{"operationId":"postAuthPasswordForgot","tags":["Authentication"],"summary":"Email a reset link (valid for an hour, once).","description":"`{ email }`: email a reset link (valid for an hour, once). Always answers the same, whether or not the address has an account.","requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"email":{"type":"string"}},"required":["email"]}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean","enum":[true]}},"required":["ok"]}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"security":[],"x-vercatus-role":null,"x-vercatus-key-scopes":null}},"/auth/password/reset/check":{"post":{"operationId":"postAuthPasswordResetCheck","tags":["Authentication"],"summary":"Whether a reset link is still valid, for the reset page; the link is not spent.","description":"`{ token }`: whether a reset link is still valid, for the reset page; the link is not spent.","requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"token":{"type":"string"}},"required":["token"]}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"valid":{"type":"boolean"}},"required":["valid"]}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"security":[],"x-vercatus-role":null,"x-vercatus-key-scopes":null}},"/auth/password/reset":{"post":{"operationId":"postAuthPasswordReset","tags":["Authentication"],"summary":"Set a new password with a reset link.","description":"`{ token, password }`: set a new password with a reset link. The link works once; every session of the account ends, the address counts as confirmed, and each workspace's audit log records it.","requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"token":{"type":"string"},"password":{"type":"string"}},"required":["token","password"]}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean","enum":[true]}},"required":["ok"]}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"security":[],"x-vercatus-role":null,"x-vercatus-key-scopes":null}},"/auth/invite/lookup":{"post":{"operationId":"postAuthInviteLookup","tags":["Authentication"],"summary":"What an invitation link offers: the workspace, the role, the invited address, whether it has an account, and who is signed in here.","description":"`{ token }`: what an invitation link offers: the workspace, the role, the invited address, whether it has an account, and who is signed in here.","requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"token":{"type":"string"}},"required":["token"]}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"email":{"type":"string"},"orgName":{"anyOf":[{"type":"string"},{"type":"null"}]},"role":{"type":"string"},"expiresAt":{"type":"string","format":"date-time"},"account":{"anyOf":[{"type":"object","properties":{"exists":{"type":"boolean","enum":[true]},"hasPassword":{"type":"boolean"}},"required":["exists","hasPassword"]},{"type":"object","properties":{"exists":{"type":"boolean","enum":[false]},"hasPassword":{"type":"boolean","enum":[false]}},"required":["exists","hasPassword"]}]},"signedInAs":{"anyOf":[{"type":"string"},{"type":"null"}]},"sso":{"anyOf":[{"type":"object","properties":{"url":{"type":"string"}},"required":["url"]},{"type":"null"}]}},"required":["email","orgName","role","expiresAt","account","signedInAs","sso"]}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"security":[],"x-vercatus-role":null,"x-vercatus-key-scopes":null}},"/auth/invite/accept":{"post":{"operationId":"postAuthInviteAccept","tags":["Authentication"],"summary":"Accept an invitation.","description":"`{ token, password?, name? }`: accept an invitation. The emailed link proves the address, so accepting confirms it. Signed in as the invited address: joins at once. No account: `password` creates one. An account without a session: its `password` signs in and joins (then the authenticator step, when it has one). Signed in as someone else: refused.","requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"token":{"type":"string"},"password":{"type":"string"},"name":{"type":"string"}},"required":["token"]}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"anyOf":[{"type":"object","properties":{"ok":{"type":"boolean","enum":[true]},"orgId":{"type":"string"}},"required":["ok","orgId"]},{"anyOf":[{"type":"object","properties":{"mfa":{"type":"boolean","enum":[true]},"orgId":{"type":"string"}},"required":["mfa","orgId"]},{"type":"object","properties":{"ok":{"type":"boolean","enum":[true]},"orgId":{"type":"string"}},"required":["ok","orgId"]}]}]}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"security":[],"x-vercatus-role":null,"x-vercatus-key-scopes":null}},"/auth/invite/resend":{"post":{"operationId":"postAuthInviteResend","tags":["Authentication"],"summary":"Send the open invitations for an address again, with new links (the old ones stop working).","description":"`{ email }`: send the open invitations for an address again, with new links (the old ones stop working). Always answers the same.","requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"email":{"type":"string"}},"required":["email"]}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean","enum":[true]}},"required":["ok"]}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"security":[],"x-vercatus-role":null,"x-vercatus-key-scopes":null}},"/auth/me":{"get":{"operationId":"getAuthMe","tags":["Authentication"],"summary":"Who is signed in, their role, and the workspaces they belong to; the workspace's seats (\"3 of 5\"), and whether single sign-on, SAML, enforcement and a signable ","description":"Who is signed in, their role, and the workspaces they belong to; the workspace's seats (\"3 of 5\"), and whether single sign-on, SAML, enforcement and a signable DPA are available to it; two-step sign-in (on, required by the workspace) and whether the workspace's policy confines this session (`restricted`: mfa or ip).","responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"seats":{"$ref":"#/components/schemas/Shape1napw7e"},"security":{"type":"object","properties":{"sso":{"type":"boolean"},"saml":{"type":"boolean"},"enforcement":{"type":"boolean"},"dpa":{"type":"object","properties":{"mode":{"anyOf":[{"type":"string","enum":["countersigned","self-serve"]},{"type":"null"}]},"available":{"type":"boolean"},"version":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["mode","available","version"]}},"required":["sso","saml","enforcement","dpa"]},"orgs":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"role":{"type":"string","enum":["analyst","owner","admin","viewer","client"]}},"required":["id","name","role"]},{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"role":{"type":"string"},"agency":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"}},"required":["id","name"]}},"required":["id","name","role","agency"]}]}},"emailVerified":{"type":"boolean"},"name":{"anyOf":[{"type":"string"},{"type":"null"}]},"hasPassword":{"type":"boolean"},"sso":{"type":"boolean"},"createdAt":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"lastLoginAt":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"mfa":{"type":"object","properties":{"enabled":{"type":"boolean"},"totp":{"type":"boolean"},"passkeys":{"type":"number"},"required":{"type":"boolean"},"recoveryCodesLeft":{"anyOf":[{"type":"number"},{"type":"null"}]}},"required":["enabled","totp","passkeys","required","recoveryCodesLeft"]},"restricted":{"anyOf":[{"type":"string","enum":["ip","mfa"]},{"type":"null"}]},"clientIp":{"anyOf":[{"type":"string"},{"type":"null"}]},"userId":{"anyOf":[{"type":"string"},{"type":"null"}]},"email":{"anyOf":[{"type":"string"},{"type":"null"}]},"orgId":{"type":"string"},"role":{"type":"string","enum":["analyst","owner","admin","viewer","client"]},"via":{"type":"string","enum":["single","session","apikey"]},"scopes":{"type":"array","items":{"type":"string"}},"label":{"type":"string"},"siteIds":{"anyOf":[{"type":"array","items":{"type":"string"}},{"type":"null"}]},"agencyOrgId":{"type":"string"},"sessionId":{"type":"string"},"sessionMfa":{"type":"boolean"},"sessionCreatedAt":{"type":"number"}},"required":["seats","security","orgs","emailVerified","name","hasPassword","sso","createdAt","lastLoginAt","mfa","restricted","clientIp","userId","email","orgId","role","via","label"]}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"viewer","x-vercatus-key-scopes":["read"]},"patch":{"operationId":"patchAuthMe","tags":["Authentication"],"summary":"Change the signed-in person's display name, or turn off (false) or back on (true) the recording of how they use the workspace.","description":"`{ name?, usageAnalytics? }`: change the signed-in person's display name, or turn off (false) or back on (true) the recording of how they use the workspace. Turning it off also deletes what was recorded of them.","requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"usageAnalytics":{"type":"boolean"}}}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"anyOf":[{"type":"object","properties":{"ok":{"type":"boolean","enum":[true]},"usageAnalytics":{"type":"boolean"}},"required":["ok","usageAnalytics"]},{"type":"object","properties":{"ok":{"type":"boolean","enum":[true]},"name":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["ok","name"]}]}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"viewer","x-vercatus-key-scopes":["write"]}},"/auth/password":{"post":{"operationId":"postAuthPassword","tags":["Authentication"],"summary":"Change the password.","description":"`{ current, next }`: change the password. The current one is required when one is set; the new one has at least 10 characters. Other sessions of the account end, and open reset links stop working.","requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"current":{"type":"string"},"next":{"type":"string"}},"required":["current","next"]}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean","enum":[true]},"sessionsEnded":{"type":"number"}},"required":["ok","sessionsEnded"]}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"viewer","x-vercatus-key-scopes":["write"]}},"/auth/verify-email/resend":{"post":{"operationId":"postAuthVerifyEmailResend","tags":["Authentication"],"summary":"Send the confirmation email (a new code and link; the old ones stop working) again to the signed-in user.","description":"Send the confirmation email (a new code and link; the old ones stop working) again to the signed-in user.","responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"anyOf":[{"type":"object","properties":{"sent":{"type":"boolean","enum":[false]},"reason":{"type":"string"},"code":{"type":"string"}},"required":["sent","reason","code"]},{"type":"object","properties":{"sent":{"type":"boolean"},"id":{"type":"string"},"reason":{"type":"string"}},"required":["sent"]}]}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"viewer","x-vercatus-key-scopes":["write"]}},"/auth/verify-email/code":{"post":{"operationId":"postAuthVerifyEmailCode","tags":["Authentication"],"summary":"The six digits from the confirmation email, typed on the setup page.","description":"`{ code }`: the six digits from the confirmation email, typed on the setup page. Confirms the address as the link does, and starts what waited for it. Eight wrong codes in 15 minutes lock the form until the window passes (the email's button still works); `already` when the address was confirmed meanwhile (the link in another tab).","requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"}},"required":["code"]}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"anyOf":[{"type":"object","properties":{"ok":{"type":"boolean","enum":[true]},"already":{"type":"boolean","enum":[true]}},"required":["ok","already"]},{"type":"object","properties":{"ok":{"type":"boolean","enum":[true]}},"required":["ok"]}]}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"viewer","x-vercatus-key-scopes":["write"]}},"/auth/switch-org":{"post":{"operationId":"postAuthSwitchOrg","tags":["Authentication"],"summary":"Move to another workspace the user belongs to.","description":"`{ orgId, code? }`: move to another workspace the user belongs to. A new session starts there (with that workspace's session length) and this one ends. A session that came through one workspace's single sign-on was vouched for by that workspace's identity provider only: moving it to any other workspace needs a fresh second step when the person has one (`code`: an authenticator or recovery code, else 403 `mfaRequired`), and the new session carries neither the SSO mark nor a passed second step it did not earn, so the other workspace's own policy (require two-step sign-in) applies to it as to a password session.","requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"orgId":{"type":"string"},"code":{"type":"string"}},"required":["orgId"]}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean","enum":[true]}},"required":["ok"]}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"viewer","x-vercatus-key-scopes":["write"]}},"/auth/mfa/setup":{"post":{"operationId":"postAuthMfaSetup","tags":["Authentication"],"summary":"Start setting up an authenticator app: a new secret (shown once, as text and as an otpauth:// link for the QR code).","description":"`{ currentPassword }`: start setting up an authenticator app: a new secret (shown once, as text and as an otpauth:// link for the QR code). It is off until `POST /api/auth/mfa/enable` gets a code. Needs re-authentication (see above).","requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"currentPassword":{}},"required":["currentPassword"]}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"secret":{"type":"string"},"uri":{"type":"string"}},"required":["secret","uri"]}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"viewer","x-vercatus-key-scopes":["write"]}},"/auth/mfa/enable":{"post":{"operationId":"postAuthMfaEnable","tags":["Authentication"],"summary":"The first code from the app turns two-step sign-in on.","description":"`{ code }`: the first code from the app turns two-step sign-in on. Answers the ten recovery codes, once.","requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"}},"required":["code"]}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean","enum":[true]},"recoveryCodes":{"type":"array","items":{"type":"string"}}},"required":["ok","recoveryCodes"]}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"viewer","x-vercatus-key-scopes":["write"]}},"/auth/mfa/disable":{"post":{"operationId":"postAuthMfaDisable","tags":["Authentication"],"summary":"Turn two-step sign-in off with a current code or a recovery code.","description":"`{ code }`: turn two-step sign-in off with a current code or a recovery code. Refused while the workspace requires it for this session.","requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"}},"required":["code"]}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean","enum":[true]}},"required":["ok"]}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"viewer","x-vercatus-key-scopes":["write"]}},"/auth/mfa/recovery-codes":{"post":{"operationId":"postAuthMfaRecoveryCodes","tags":["Authentication"],"summary":"New recovery codes (the old ones stop working), with a current code.","description":"`{ code }`: new recovery codes (the old ones stop working), with a current code.","requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"}},"required":["code"]}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean","enum":[true]},"recoveryCodes":{"type":"array","items":{"type":"string"}}},"required":["ok","recoveryCodes"]}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"viewer","x-vercatus-key-scopes":["write"]}},"/auth/passkeys":{"get":{"operationId":"getAuthPasskeys","tags":["Authentication"],"summary":"The signed-in person's passkeys and security keys (never the keys themselves).","description":"The signed-in person's passkeys and security keys (never the keys themselves).","responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/Shape5dhbkk"}}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"viewer","x-vercatus-key-scopes":["read"]},"post":{"operationId":"postAuthPasskeys","tags":["Authentication"],"summary":"The browser's answer; the passkey becomes a second factor for sign-in.","description":"`{ response, name? }`: the browser's answer; the passkey becomes a second factor for sign-in.","requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"response":{},"name":{}},"required":["response"]}}}},"responses":{"201":{"description":"Created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Shape5dhbkk"}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"viewer","x-vercatus-key-scopes":["write"]}},"/auth/passkeys/options":{"post":{"operationId":"postAuthPasskeysOptions","tags":["Authentication"],"summary":"Start adding a passkey: the options for the browser's WebAuthn call.","description":"`{ currentPassword }`: start adding a passkey: the options for the browser's WebAuthn call. Needs re-authentication, like setting up the authenticator app.","requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"currentPassword":{}},"required":["currentPassword"]}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"rp":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"}},"required":["name"]},"user":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"displayName":{"type":"string"}},"required":["id","name","displayName"]},"challenge":{"type":"string"},"pubKeyCredParams":{"type":"array","items":{"type":"object","properties":{"alg":{"type":"number"},"type":{"type":"string","enum":["public-key"]}},"required":["alg","type"]}},"timeout":{"type":"number"},"excludeCredentials":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"transports":{"type":"array","items":{"type":"string"}},"type":{"type":"string"}},"required":["id","type"]}},"authenticatorSelection":{"type":"object","properties":{"authenticatorAttachment":{"type":"string","enum":["platform","cross-platform"]},"requireResidentKey":{"type":"boolean"},"residentKey":{"type":"string","enum":["discouraged","preferred","required"]},"userVerification":{"type":"string","enum":["discouraged","preferred","required"]}}},"hints":{"type":"array","items":{"type":"string","enum":["hybrid","security-key","client-device"]}},"attestation":{"type":"string","enum":["none","direct","enterprise","indirect"]},"attestationFormats":{"type":"array","items":{"type":"string","enum":["none","fido-u2f","packed","android-safetynet","android-key","tpm","apple"]}},"extensions":{"$ref":"#/components/schemas/Shape15m9mq3"}},"required":["rp","user","challenge","pubKeyCredParams"]}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"viewer","x-vercatus-key-scopes":["write"]}},"/auth/passkeys/{id}":{"delete":{"operationId":"deleteAuthPasskeysById","tags":["Authentication"],"summary":"Remove a passkey.","description":"Remove a passkey. Only from a session that passed two-step sign-in, and not the last second factor while the workspace requires one.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean","enum":[true]}},"required":["ok"]}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"viewer","x-vercatus-key-scopes":["write"]}},"/auth/sessions":{"get":{"operationId":"getAuthSessions","tags":["Authentication"],"summary":"The signed-in person's sessions across workspaces: where and how each signed in, when it was last used, and which one is this browser.","description":"The signed-in person's sessions across workspaces: where and how each signed in, when it was last used, and which one is this browser.","responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"current":{"type":"boolean"},"id":{"type":"string"},"createdAt":{"type":"string","format":"date-time"},"lastSeenAt":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"expiresAt":{"type":"string","format":"date-time"},"ip":{"anyOf":[{"type":"string"},{"type":"null"}]},"userAgent":{"anyOf":[{"type":"string"},{"type":"null"}]},"authMethod":{"anyOf":[{"type":"string"},{"type":"null"}]},"mfa":{"type":"boolean"},"orgId":{"anyOf":[{"type":"string"},{"type":"null"}]},"orgName":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["current","id","createdAt","lastSeenAt","expiresAt","ip","userAgent","authMethod","mfa","orgId","orgName"]}}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"viewer","x-vercatus-key-scopes":["read"]}},"/auth/sessions/{id}":{"delete":{"operationId":"deleteAuthSessionsById","tags":["Authentication"],"summary":"Sign one session out (another browser, or this one).","description":"Sign one session out (another browser, or this one).","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean","enum":[true]},"current":{"type":"boolean"}},"required":["ok","current"]}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"viewer","x-vercatus-key-scopes":["write"]}},"/auth/sessions/revoke-all":{"post":{"operationId":"postAuthSessionsRevokeAll","tags":["Authentication"],"summary":"Sign out every other session; with includeCurrent, this one too (\"sign out everywhere\").","description":"`{ includeCurrent? }`: sign out every other session; with `includeCurrent`, this one too (\"sign out everywhere\").","requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"includeCurrent":{"type":"boolean"}}}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean","enum":[true]},"sessionsEnded":{"type":"number"}},"required":["ok","sessionsEnded"]}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"viewer","x-vercatus-key-scopes":["write"]}},"/security/provisioning":{"get":{"operationId":"getSecurityProvisioning","tags":["Security"],"summary":"SCIM: the base URL for the IdP, the workspace's tokens (never the secret), and the group-to-role mappings.","description":"SCIM: the base URL for the IdP, the workspace's tokens (never the secret), and the group-to-role mappings. Admins.","responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"available":{"type":"boolean"},"baseUrl":{"type":"string"},"tokens":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"prefix":{"type":"string"},"createdBy":{"anyOf":[{"type":"string"},{"type":"null"}]},"lastUsedAt":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"revokedAt":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"createdAt":{"type":"string","format":"date-time"}},"required":["id","name","prefix","createdBy","lastUsedAt","revokedAt","createdAt"]}},"mappings":{"type":"array","items":{"$ref":"#/components/schemas/Shapebm34nq"}},"provisioned":{"type":"object","properties":{"users":{"type":"number"},"active":{"type":"number"},"groups":{"type":"number"}},"required":["users","active","groups"]}},"required":["available","baseUrl","tokens","mappings","provisioned"]}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"admin","x-vercatus-key-scopes":null}},"/security/provisioning/tokens":{"post":{"operationId":"postSecurityProvisioningTokens","tags":["Security"],"summary":"A new SCIM token; the answer carries it once.","description":"`{ name }`: a new SCIM token; the answer carries it once. Owners (a token lets an identity provider create and remove people, so it is not an admin's to hand out); Enterprise.","requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"}},"required":["name"]}}}},"responses":{"201":{"description":"Created","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"prefix":{"type":"string"},"createdAt":{"type":"string","format":"date-time"},"token":{"type":"string"},"baseUrl":{"type":"string"}},"required":["id","name","prefix","createdAt","token","baseUrl"]}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"owner","x-vercatus-key-scopes":null}},"/security/provisioning/tokens/{id}":{"delete":{"operationId":"deleteSecurityProvisioningTokensById","tags":["Security"],"summary":"Revoke a SCIM token; the IdP's next call with it is refused.","description":"Revoke a SCIM token; the IdP's next call with it is refused. Admins (revoking is always safe).","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean","enum":[true]}},"required":["ok"]}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"admin","x-vercatus-key-scopes":null}},"/security/role-mappings":{"post":{"operationId":"postSecurityRoleMappings","tags":["Security"],"summary":"Members of this IdP group (its name or id, as SCIM or the sign-in's groups claim carries it) get this role (admin, analyst, viewer or client) and, when siteIds ","description":"`{ group, role, siteIds? }`: members of this IdP group (its name or id, as SCIM or the sign-in's groups claim carries it) get this role (admin, analyst, viewer or client) and, when `siteIds` names some, see only those sites (a client mapping must name them; admins always see every site). Replaces an existing mapping of the same group. Applies at the next SSO join and to everyone SCIM provisioned. Owners (a mapping decides who becomes an admin).","requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"group":{"type":"string"},"role":{"type":"string"},"siteIds":{"anyOf":[{"type":"array","items":{"type":"string"}},{"type":"null"}]}},"required":["group","role"]}}}},"responses":{"201":{"description":"Created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Shapebm34nq"}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"owner","x-vercatus-key-scopes":null}},"/security/role-mappings/{id}":{"delete":{"operationId":"deleteSecurityRoleMappingsById","tags":["Security"],"summary":"Remove a mapping; SCIM-provisioned members are re-evaluated.","description":"Remove a mapping; SCIM-provisioned members are re-evaluated. Owners.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean","enum":[true]}},"required":["ok"]}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"owner","x-vercatus-key-scopes":null}},"/findings/counts":{"get":{"operationId":"getFindingsCounts","tags":["Findings"],"summary":"Findings still to fix (open, planned, done and being checked) in each site's latest completed run, and of those the critical and high ones; per site and in all.","description":"`?siteId=`: findings still to fix (open, planned, done and being checked) in each site's latest completed run, and of those the critical and high ones; per site and in all. The one count Home, the sites, a site's overview, the rail and Findings agree on.","parameters":[{"name":"siteId","in":"query","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"total":{"type":"object","properties":{"active":{"type":"number"},"critical":{"type":"number"},"high":{"type":"number"}},"required":["active","critical","high"]},"sites":{"type":"object","additionalProperties":{"type":"object","properties":{"active":{"type":"number"},"critical":{"type":"number"},"high":{"type":"number"}},"required":["active","critical","high"]}}},"required":["total","sites"]}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"viewer","x-vercatus-key-scopes":["read"]}},"/search/pages":{"get":{"operationId":"getSearchPages","tags":["Service"],"summary":"Pages of each site's latest completed run whose address or title matches, for the command palette.","description":"`?q=` (3+ characters): pages of each site's latest completed run whose address or title matches, for the command palette.","parameters":[{"name":"q","in":"query","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"anyOf":[{"type":"object","properties":{"pages":{"type":"array","items":{}}},"required":["pages"]},{"type":"object","properties":{"pages":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"url":{"type":"string"},"title":{"anyOf":[{"type":"string"},{"type":"null"}]},"siteId":{"type":"string"},"host":{"type":"string"},"runId":{"type":"string"}},"required":["id","url","title","siteId","host","runId"]}}},"required":["pages"]}]}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"viewer","x-vercatus-key-scopes":["read"]}},"/findings/{id}/thread":{"get":{"operationId":"getFindingsByIdThread","tags":["Findings"],"summary":"A finding's thread: its comments (oldest first, deleted ones as a line), who watches it, whether the caller does, and the members who can be mentioned.","description":"A finding's thread: its comments (oldest first, deleted ones as a line), who watches it, whether the caller does, and the members who can be mentioned.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"comments":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"at":{"anyOf":[{"type":"string"},{"type":"null"}]},"editedAt":{"anyOf":[{"type":"string"},{"type":"null"}]},"author":{"anyOf":[{"type":"string"},{"type":"null"}]},"authorUserId":{"anyOf":[{"type":"string"},{"type":"null"}]},"body":{"anyOf":[{"type":"string"},{"type":"null"}]},"deleted":{"type":"boolean"},"mentions":{"type":"array","items":{"type":"object","properties":{"userId":{"type":"string"},"name":{"anyOf":[{"type":"string"},{"type":"null"}]},"handle":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["userId","name","handle"]}},"mine":{"type":"boolean"}},"required":["id","at","editedAt","author","authorUserId","body","deleted","mentions","mine"]}},"watchers":{"type":"array","items":{"type":"object","properties":{"userId":{"type":"string"},"name":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["userId","name"]}},"watching":{"type":"boolean"},"people":{"type":"array","items":{"type":"object","properties":{"userId":{"type":"string"},"name":{"anyOf":[{"type":"string"},{"type":"null"}]},"email":{"type":"string"}},"required":["userId","name","email"]}}},"required":["comments","watchers","watching","people"]}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"viewer","x-vercatus-key-scopes":["read"]}},"/findings/{id}/comments":{"post":{"operationId":"postFindingsByIdComments","tags":["Findings"],"summary":"Comment on a finding.","description":"`{ body, mentions? }`: comment on a finding. `mentions` are the user ids the composer picked; each mentioned member is told and starts watching, and so does the author; other watchers hear of the comment.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"body":{},"mentions":{}},"required":["body"]}}}},"responses":{"201":{"description":"Created","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"mentions":{"type":"array","items":{"type":"string"}}},"required":["id","mentions"]}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"analyst","x-vercatus-key-scopes":["write"]}},"/findings/comments/{cid}":{"patch":{"operationId":"patchFindingsCommentsByCid","tags":["Findings"],"summary":"The author edits their comment.","description":"`{ body }`: the author edits their comment.","parameters":[{"name":"cid","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"body":{}},"required":["body"]}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean","enum":[true]}},"required":["ok"]}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"analyst","x-vercatus-key-scopes":["write"]},"delete":{"operationId":"deleteFindingsCommentsByCid","tags":["Findings"],"summary":"The author, or an admin, removes a comment; the thread keeps a line saying one was removed.","description":"The author, or an admin, removes a comment; the thread keeps a line saying one was removed.","parameters":[{"name":"cid","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean","enum":[true]}},"required":["ok"]}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"analyst","x-vercatus-key-scopes":["write"]}},"/findings/{id}/watch":{"put":{"operationId":"putFindingsByIdWatch","tags":["Findings"],"summary":"Follow or stop following a finding.","description":"`{ watching }`: follow or stop following a finding.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"watching":{}},"required":["watching"]}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"watching":{"type":"boolean"}},"required":["watching"]}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"viewer","x-vercatus-key-scopes":["write"]}},"/findings/plan":{"post":{"operationId":"postFindingsPlan","tags":["Findings"],"summary":"Plan up to 200 findings at once, or clear their plans.","description":"`{ ids, plan: { ownerUserId?, ownerLabel, dueAt? } | null }`: plan up to 200 findings at once, or clear their plans. `dueAt` is a calendar day or null; the `when` bucket follows from it. Planning an open finding makes it Planned. Applied to the same finding in every run the next comparison reads; the person given them is told once each. Answers per finding, so one failure does not hide the others.","requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"ids":{},"plan":{}}}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"results":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"ok":{"type":"boolean"},"error":{"type":"string"},"finding":{}},"required":["id","ok"]}}},"required":["results"]}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"analyst","x-vercatus-key-scopes":["write"]}},"/notifications":{"get":{"operationId":"getNotifications","tags":["Service"],"summary":"The caller's notification centre, newest first: their own notifications (mentions, findings given to them, due dates, watched findings) and the workspace's noti","description":"`?kind=&siteId=&unread=1&before=&limit=`: the caller's notification centre, newest first: their own notifications (mentions, findings given to them, due dates, watched findings) and the workspace's notices, each kind only when their preferences show it in the app. `unread` counts both. `before` pages by date.","parameters":[{"name":"kind","in":"query","required":false,"schema":{"type":"string"}},{"name":"siteId","in":"query","required":false,"schema":{"type":"string"}},{"name":"unread","in":"query","required":false,"schema":{"type":"string"}},{"name":"before","in":"query","required":false,"schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"id":{"type":"string"},"source":{"type":"string","enum":["personal"]},"kind":{"type":"string"},"severity":{"type":"string"},"title":{"type":"string"},"body":{"anyOf":[{"type":"string"},{"type":"null"}]},"href":{"type":"string"},"siteId":{"anyOf":[{"type":"string"},{"type":"null"}]},"actor":{"anyOf":[{"type":"string"},{"type":"null"}]},"data":{"type":"object","additionalProperties":{}},"createdAt":{"type":"string"},"readAt":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["id","source","kind","severity","title","body","href","siteId","actor","data","createdAt","readAt"]},{"type":"object","properties":{"id":{"type":"string"},"source":{"type":"string","enum":["notice"]},"kind":{"type":"string"},"severity":{"type":"string","enum":["low","medium","high"]},"title":{"type":"string"},"body":{"anyOf":[{"type":"string"},{"type":"null"}]},"href":{"type":"null"},"siteId":{"anyOf":[{"type":"string"},{"type":"null"}]},"actor":{"type":"null"},"data":{"type":"object","additionalProperties":{}},"createdAt":{"type":"string"},"readAt":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["id","source","kind","severity","title","body","href","siteId","actor","data","createdAt","readAt"]}]}},"unread":{"type":"number"},"more":{"type":"boolean"}},"required":["items","unread","more"]}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"viewer","x-vercatus-key-scopes":["read"]}},"/notifications/{id}":{"patch":{"operationId":"patchNotificationsById","tags":["Service"],"summary":"Mark one of the caller's own notifications read or unread (a workspace notice goes through PATCH /api/notices/:id).","description":"`{ read }`: mark one of the caller's own notifications read or unread (a workspace notice goes through PATCH /api/notices/:id).","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"read":{}},"required":["read"]}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean","enum":[true]}},"required":["ok"]}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"viewer","x-vercatus-key-scopes":["write"]}},"/notifications/read-all":{"post":{"operationId":"postNotificationsReadAll","tags":["Service"],"summary":"Mark everything in the caller's centre read: their own notifications and the workspace's unread notices.","description":"Mark everything in the caller's centre read: their own notifications and the workspace's unread notices.","responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"read":{"type":"number"}},"required":["read"]}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"viewer","x-vercatus-key-scopes":["write"]}},"/notifications/prefs":{"get":{"operationId":"getNotificationsPrefs","tags":["Service"],"summary":"The caller's preferences per kind, with the defaults filled in, and whether email is set up on this instance.","description":"The caller's preferences per kind, with the defaults filled in, and whether email is set up on this instance.","responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"prefs":{"type":"object","properties":{"status":{"type":"object","properties":{"inApp":{"type":"boolean"},"email":{"type":"boolean"}},"required":["inApp","email"]},"pattern":{"type":"object","properties":{"inApp":{"type":"boolean"},"email":{"type":"boolean"}},"required":["inApp","email"]},"verification":{"type":"object","properties":{"inApp":{"type":"boolean"},"email":{"type":"boolean"}},"required":["inApp","email"]},"site":{"type":"object","properties":{"inApp":{"type":"boolean"},"email":{"type":"boolean"}},"required":["inApp","email"]},"verdict":{"type":"object","properties":{"inApp":{"type":"boolean"},"email":{"type":"boolean"}},"required":["inApp","email"]},"due":{"type":"object","properties":{"inApp":{"type":"boolean"},"email":{"type":"boolean"}},"required":["inApp","email"]},"prompt":{"type":"object","properties":{"inApp":{"type":"boolean"},"email":{"type":"boolean"}},"required":["inApp","email"]},"competitor":{"type":"object","properties":{"inApp":{"type":"boolean"},"email":{"type":"boolean"}},"required":["inApp","email"]},"winner":{"type":"object","properties":{"inApp":{"type":"boolean"},"email":{"type":"boolean"}},"required":["inApp","email"]},"drift":{"type":"object","properties":{"inApp":{"type":"boolean"},"email":{"type":"boolean"}},"required":["inApp","email"]},"usage":{"type":"object","properties":{"inApp":{"type":"boolean"},"email":{"type":"boolean"}},"required":["inApp","email"]},"share":{"type":"object","properties":{"inApp":{"type":"boolean"},"email":{"type":"boolean"}},"required":["inApp","email"]},"mention":{"type":"object","properties":{"inApp":{"type":"boolean"},"email":{"type":"boolean"}},"required":["inApp","email"]},"assigned":{"type":"object","properties":{"inApp":{"type":"boolean"},"email":{"type":"boolean"}},"required":["inApp","email"]},"comment":{"type":"object","properties":{"inApp":{"type":"boolean"},"email":{"type":"boolean"}},"required":["inApp","email"]}},"required":["status","pattern","verification","site","verdict","due","prompt","competitor","winner","drift","usage","share","mention","assigned","comment"]},"kinds":{"type":"array","items":{"type":"object","properties":{"kind":{"type":"string"},"emailable":{"type":"boolean"},"personal":{"type":"boolean"}},"required":["kind","emailable","personal"]}},"emailEnabled":{"type":"boolean"}},"required":["prefs","kinds","emailEnabled"]}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"viewer","x-vercatus-key-scopes":["read"]},"put":{"operationId":"putNotificationsPrefs","tags":["Service"],"summary":"Set one kind.","description":"`{ kind, inApp, email }`: set one kind. Workspace notices are emailed through Settings › Alerts, so their email stays off here.","requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"kind":{},"inApp":{},"email":{}},"required":["kind","inApp","email"]}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"kind":{"type":"string","enum":["status","pattern","verification","site","verdict","due","prompt","competitor","winner","drift","usage","share","mention","assigned","comment"]},"inApp":{"type":"boolean"},"email":{"type":"boolean"}},"required":["kind","inApp","email"]}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"viewer","x-vercatus-key-scopes":["write"]}},"/org/ticketing/test":{"post":{"operationId":"postOrgTicketingTest","tags":["Workspace"],"summary":"Check a ticketing integration's credentials and target without creating an issue.","description":"`{ provider }` (linear, jira, asana or github): check a ticketing integration's credentials and target without creating an issue.","requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"provider":{"type":"string"}},"required":["provider"]}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean","enum":[true]},"message":{"type":"string"}},"required":["ok","message"]}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"admin","x-vercatus-key-scopes":null}},"/org/alerts/test":{"post":{"operationId":"postOrgAlertsTest","tags":["Workspace"],"summary":"Post a sample alert to one channel ({ channel: slack | teams | email }, Slack by default) so it can be checked before a run relies on it.","description":"Post a sample alert to one channel (`{ channel: slack | teams | email }`, Slack by default) so it can be checked before a run relies on it.","requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"channel":{"type":"string","enum":["email","slack","teams"]}}}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean","enum":[true]},"channel":{}},"required":["ok","channel"]}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"admin","x-vercatus-key-scopes":null}},"/org/webhooks":{"post":{"operationId":"postOrgWebhooks","tags":["Workspace"],"summary":"Outgoing webhooks: { url, events } creates one; the signing secret is returned once, here, and stored sealed.","description":"Outgoing webhooks: `{ url, events }` creates one; the signing secret is returned once, here, and stored sealed.","requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"url":{"type":"string"},"events":{"type":"array","items":{}}}}}}},"responses":{"201":{"description":"Created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Shape1q1l2dw"}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"admin","x-vercatus-key-scopes":null}},"/org/webhooks/{id}":{"patch":{"operationId":"patchOrgWebhooksById","tags":["Workspace"],"summary":"Change an endpoint.","description":"`{ active?, events?, url? }`: change an endpoint. Unknown event names and unacceptable addresses are refused, not dropped.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"active":{},"events":{},"url":{}}}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Shape1q1l2dw"}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"admin","x-vercatus-key-scopes":null},"delete":{"operationId":"deleteOrgWebhooksById","tags":["Workspace"],"summary":"Remove an endpoint.","description":"Remove an endpoint. Its queued deliveries fail as \"removed\" when their turn comes.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean","enum":[true]}},"required":["ok"]}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"admin","x-vercatus-key-scopes":null}},"/org/webhooks/{id}/test":{"post":{"operationId":"postOrgWebhooksByIdTest","tags":["Workspace"],"summary":"Send a signed test delivery to one endpoint now and report its status (never its body); it shows in the delivery log.","description":"Send a signed test delivery to one endpoint now and report its status (never its body); it shows in the delivery log.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean"},"status":{"anyOf":[{"type":"number"},{"type":"null"}]},"error":{"type":"string"}},"required":["ok","status"]}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"admin","x-vercatus-key-scopes":null}},"/org/webhooks/{id}/rotate":{"post":{"operationId":"postOrgWebhooksByIdRotate","tags":["Workspace"],"summary":"A new signing secret, returned once.","description":"`{ graceHours? }` (0 to 168, default 24): a new signing secret, returned once. Until the grace ends, deliveries are signed with both the new and the old secret (two v1 values), so the receiver can switch without dropping any.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"graceHours":{}}}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"url":{"type":"string"},"secret":{"type":"string"},"previousSecretUntil":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["id","url","secret","previousSecretUntil"]}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"admin","x-vercatus-key-scopes":null}},"/org/webhooks/deliveries":{"get":{"operationId":"getOrgWebhooksDeliveries","tags":["Workspace"],"summary":"The delivery log: the last deliveries (30 days kept), newest first; ?hook= one endpoint, ?status= pending, delivered or failed, ?limit= up to 200.","description":"The delivery log: the last deliveries (30 days kept), newest first; `?hook=` one endpoint, `?status=` pending, delivered or failed, `?limit=` up to 200.","parameters":[{"name":"hook","in":"query","required":false,"schema":{"type":"string"}},{"name":"status","in":"query","required":false,"schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"status":{"type":"string","enum":["pending","failed","delivered"]},"id":{"type":"string"},"hookId":{"type":"string"},"event":{"type":"string"},"deliveryId":{"type":"string"},"attempt":{"type":"number"},"nextAt":{"type":"string","format":"date-time"},"responseStatus":{"anyOf":[{"type":"number"},{"type":"null"}]},"error":{"anyOf":[{"type":"string"},{"type":"null"}]},"createdAt":{"type":"string","format":"date-time"},"deliveredAt":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]}},"required":["status","id","hookId","event","deliveryId","attempt","nextAt","responseStatus","error","createdAt","deliveredAt"]}}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"admin","x-vercatus-key-scopes":null}},"/org/webhooks/deliveries/{id}/redeliver":{"post":{"operationId":"postOrgWebhooksDeliveriesByIdRedeliver","tags":["Workspace"],"summary":"Send one delivery again: a new entry in the log with the same payload and delivery id, queued now.","description":"Send one delivery again: a new entry in the log with the same payload and delivery id, queued now.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"202":{"description":"Accepted","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean","enum":[true]},"id":{"type":"string"}},"required":["ok","id"]}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"admin","x-vercatus-key-scopes":null}},"/org/monthly-brief/send":{"post":{"operationId":"postOrgMonthlyBriefSend","tags":["Workspace"],"summary":"Send the monthly brief now to its recipients (or to { to }), whatever the date.","description":"Send the monthly brief now to its recipients (or to `{ to }`), whatever the date. Only to members and addresses on the workspace's verified domains, and within the daily email cap. Admins.","requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"to":{}}}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"anyOf":[{"type":"object","properties":{"sent":{"type":"boolean"},"to":{"type":"array","items":{"type":"string"}},"reason":{"type":"string"},"sites":{"type":"number"},"html":{"type":"string"}},"required":["sent","to","sites"]},{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"},"sent":{"type":"boolean"},"to":{"type":"array","items":{"type":"string"}},"reason":{"type":"string"},"sites":{"type":"number"},"html":{"type":"string"}},"required":["error","code","sent","to","sites"]}]}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"admin","x-vercatus-key-scopes":null}},"/sites/{id}/demand":{"get":{"operationId":"getSitesByIdDemand","tags":["Sites"],"summary":"Live demand from assistant fetches: per assistant and page, the questions the pages answer ranked by fetches, with the change on the period before.","description":"`?days=` (7 to 90, default 28): live demand from assistant fetches: per assistant and page, the questions the pages answer ranked by fetches, with the change on the period before.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"days","in":"query","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"period":{"type":"object","properties":{"from":{"type":"string"},"to":{"type":"string"},"prevFrom":{"type":"string"},"prevTo":{"type":"string"},"days":{"type":"number"}},"required":["from","to","prevFrom","prevTo","days"]},"connected":{"type":"boolean"},"totals":{"type":"object","properties":{"fetches":{"type":"number"},"previous":{"type":"number"},"pages":{"type":"number"},"trend":{"type":"string","enum":["none","new","up","down","no clear change"]},"ratio":{"anyOf":[{"type":"number"},{"type":"null"}]},"lo":{"anyOf":[{"type":"number"},{"type":"null"}]},"hi":{"anyOf":[{"type":"number"},{"type":"null"}]},"otherPages":{"type":"number"}},"required":["fetches","previous","pages","trend","ratio","lo","hi","otherPages"]},"assistants":{"type":"array","items":{"type":"object","properties":{"crawler":{"type":"string"},"label":{"type":"string"},"operator":{"type":"string"},"fetches":{"type":"number"},"previous":{"type":"number"},"trend":{"type":"string","enum":["none","new","up","down","no clear change"]},"ratio":{"anyOf":[{"type":"number"},{"type":"null"}]},"lo":{"anyOf":[{"type":"number"},{"type":"null"}]},"hi":{"anyOf":[{"type":"number"},{"type":"null"}]},"served":{"type":"number"}},"required":["crawler","label","operator","fetches","previous","trend","ratio","lo","hi","served"]}},"series":{"type":"object","properties":{"days":{"type":"array","items":{"type":"string"}},"byAssistant":{"type":"object","additionalProperties":{"type":"array","items":{"type":"number"}}}},"required":["days","byAssistant"]},"pages":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"title":{"anyOf":[{"type":"string"},{"type":"null"}]},"inRun":{"type":"boolean"},"fetches":{"type":"number"},"previous":{"type":"number"},"trend":{"type":"string","enum":["none","new","up","down","no clear change"]},"byAssistant":{"type":"object","additionalProperties":{"type":"number"}},"served":{"type":"number"},"questions":{"type":"array","items":{"type":"string"}}},"required":["path","title","inRun","fetches","previous","trend","byAssistant","served","questions"]}},"questions":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string"},"text":{"type":"string"},"source":{"type":"string","enum":["search","run"]},"language":{"anyOf":[{"type":"string"},{"type":"null"}]},"category":{"anyOf":[{"type":"string"},{"type":"null"}]},"current":{"type":"number"},"previous":{"type":"number"},"byAssistant":{"type":"object","additionalProperties":{"type":"number"}},"pages":{"type":"array","items":{"type":"string"}},"impressions":{"anyOf":[{"type":"number"},{"type":"null"}]},"trend":{"type":"string","enum":["none","new","up","down","no clear change"]},"ratio":{"anyOf":[{"type":"number"},{"type":"null"}]},"lo":{"anyOf":[{"type":"number"},{"type":"null"}]},"hi":{"anyOf":[{"type":"number"},{"type":"null"}]},"tracked":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["key","text","source","language","category","current","previous","byAssistant","pages","impressions","trend","ratio","lo","hi","tracked"]}},"run":{"anyOf":[{"type":"object","properties":{"id":{"type":"string"},"at":{"type":"string"}},"required":["id","at"]},{"type":"null"}]},"searchConnected":{"type":"boolean"},"unlinked":{"type":"object","properties":{"pages":{"type":"number"},"fetches":{"type":"number"}},"required":["pages","fetches"]}},"required":["period","connected","totals","assistants","series","pages","questions","run","searchConnected","unlinked"]}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"viewer","x-vercatus-key-scopes":["read"]}},"/sites/{id}/funnel":{"get":{"operationId":"getSitesByIdFunnel","tags":["Sites"],"summary":"The visibility funnel per engine over the latest full run's pages (access, indexed, retrieved, cited, clicked, converted), with the pages that leak at each stag","description":"`?engines=`: the visibility funnel per engine over the latest full run's pages (access, indexed, retrieved, cited, clicked, converted), with the pages that leak at each stage.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"engines","in":"query","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"bing":{"anyOf":[{"$ref":"#/components/schemas/Shape1j38q80"},{"type":"null"}]},"run":{"anyOf":[{"type":"object","properties":{"id":{"type":"string"},"at":{"type":"string"}},"required":["id","at"]},{"type":"null"}]},"pages":{"type":"number"},"pagesInRun":{"type":"number"},"capped":{"type":"boolean"},"basis":{"type":"string"},"instruments":{"type":"object","properties":{"traffic":{"type":"boolean"},"watch":{"type":"boolean"},"searchConsole":{"type":"boolean"},"bing":{"type":"boolean"},"analytics":{"type":"boolean"},"panelEngines":{"type":"array","items":{"type":"string"}},"google":{"type":"object","properties":{"checked":{"type":"number"},"indexed":{"type":"number"},"lastAt":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["checked","indexed","lastAt"]},"bingIndex":{"type":"object","properties":{"checked":{"type":"number"},"indexed":{"type":"number"},"lastAt":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["checked","indexed","lastAt"]}},"required":["traffic","watch","searchConsole","bing","analytics","panelEngines","google","bingIndex"]},"engines":{"type":"array","items":{"type":"object","properties":{"engine":{"type":"string"},"label":{"type":"string"},"index":{"anyOf":[{"type":"string","enum":["google","bing","own"]},{"type":"null"}]},"stages":{"type":"array","items":{"type":"object","properties":{"stage":{"type":"string","enum":["retrieved","cited","access","indexed","clicked","converted"]},"entered":{"type":"number"},"passed":{"type":"number"},"leaked":{"type":"number"},"unmeasured":{"type":"number"},"rate":{"anyOf":[{"type":"number"},{"type":"null"}]},"siteRate":{"anyOf":[{"type":"number"},{"type":"null"}]},"lo":{"anyOf":[{"type":"number"},{"type":"null"}]},"hi":{"anyOf":[{"type":"number"},{"type":"null"}]},"leaks":{}},"required":["stage","entered","passed","leaked","unmeasured","rate","lo","hi","leaks"]}},"notes":{"type":"object","properties":{"retrieved":{"type":"string"},"cited":{"type":"string"},"access":{"type":"string"},"indexed":{"type":"string"},"clicked":{"type":"string"},"converted":{"type":"string"}}}},"required":["engine","label","index","stages","notes"]}}},"required":["bing","run","pages","instruments","engines"]}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"viewer","x-vercatus-key-scopes":["read"]}},"/sites/{id}/funnel/inspect":{"post":{"operationId":"postSitesByIdFunnelInspect","tags":["Sites"],"summary":"Check up to 25 of the site's pages in the search engine's index now, within the day's ration; the daily pass does the rest.","description":"`{ source? }` (\"google\" or \"bing\"): check up to 25 of the site's pages in the search engine's index now, within the day's ration; the daily pass does the rest.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"source":{"type":"string"}}}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","additionalProperties":{"type":"object","properties":{"checked":{"type":"number"},"skipped":{"type":"number"},"stopped":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["checked","skipped","stopped"]}}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"analyst","x-vercatus-key-scopes":["write"]}},"/sites/{id}/bing":{"get":{"operationId":"getSitesByIdBing","tags":["Sites"],"summary":"The site's Bing Webmaster Tools connection (never the key).","description":"The site's Bing Webmaster Tools connection (never the key).","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Shapeyxkc6t"}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"viewer","x-vercatus-key-scopes":["read"]},"put":{"operationId":"putSitesByIdBing","tags":["Sites"],"summary":"Connect Bing Webmaster Tools with the workspace's own API key; the key is checked against the site's host in Bing and stored sealed.","description":"`{ apiKey }`: connect Bing Webmaster Tools with the workspace's own API key; the key is checked against the site's host in Bing and stored sealed.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"apiKey":{"type":"string"}},"required":["apiKey"]}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Shapeyxkc6t"}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"admin","x-vercatus-key-scopes":null},"delete":{"operationId":"deleteSitesByIdBing","tags":["Sites"],"summary":"Disconnect Bing Webmaster Tools: the key and the stored Bing index checks are removed.","description":"Disconnect Bing Webmaster Tools: the key and the stored Bing index checks are removed.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean","enum":[true]}},"required":["ok"]}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"admin","x-vercatus-key-scopes":null}},"/sites/{id}/ledger":{"get":{"operationId":"getSitesByIdLedger","tags":["Sites"],"summary":"The crawl-to-citation ledger: each changed page with its first refetch per search crawler, first retrieval, first citation per engine and first AI visit; latenc","description":"`?days=` (14 to 365, default 120): the crawl-to-citation ledger: each changed page with its first refetch per search crawler, first retrieval, first citation per engine and first AI visit; latencies per engine and page type; the slowing check on the money templates.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"days","in":"query","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"window":{"type":"object","properties":{"from":{"type":"string"},"to":{"type":"string"},"days":{"type":"number"}},"required":["from","to","days"]},"connected":{"type":"object","properties":{"traffic":{"type":"boolean"},"cms":{"type":"boolean"},"analytics":{"type":"boolean"},"runs":{"type":"number"}},"required":["traffic","cms","analytics","runs"]},"counts":{"type":"object","properties":{"changes":{"type":"number"},"shown":{"type":"number"},"bySource":{"type":"object","properties":{"content":{"type":"number"},"cms":{"type":"number"},"deploy":{"type":"number"}},"required":["content","cms","deploy"]}},"required":["changes","shown","bySource"]},"crawlers":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"label":{"type":"string"},"operator":{"type":"string"}},"required":["id","label","operator"]}},"engines":{"type":"array","items":{"type":"string"}},"sessionEngines":{"type":"array","items":{"type":"string"}},"entries":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"url":{"type":"string"},"template":{"anyOf":[{"type":"string"},{"type":"null"}]},"changedAt":{"type":"string"},"since":{"anyOf":[{"type":"string"},{"type":"null"}]},"source":{"type":"string","enum":["content","deploy","cms"]},"until":{"anyOf":[{"type":"string"},{"type":"null"}]},"refetch":{"type":"object","additionalProperties":{"anyOf":[{"type":"string"},{"type":"null"}]}},"retrievable":{"anyOf":[{"type":"string"},{"type":"null"}]},"cited":{"type":"object","additionalProperties":{"anyOf":[{"type":"string"},{"type":"null"}]}},"session":{"type":"object","additionalProperties":{"anyOf":[{"type":"string"},{"type":"null"}]}}},"required":["path","url","template","changedAt","since","source","until","refetch","retrievable","cited","session"]}},"latency":{"type":"object","properties":{"refetch":{"type":"array","items":{"$ref":"#/components/schemas/Shape1r0gc7l"}},"retrievable":{"type":"array","items":{"$ref":"#/components/schemas/Shape1r0gc7l"}},"cited":{"type":"array","items":{"$ref":"#/components/schemas/Shape1r0gc7l"}},"session":{"type":"array","items":{"$ref":"#/components/schemas/Shape1r0gc7l"}}},"required":["refetch","retrievable","cited","session"]},"slowing":{"type":"object","properties":{"money":{"type":"object","properties":{"templates":{"type":"array","items":{"type":"string"}},"basis":{"type":"string","enum":["none","key events","page words","crawl volume"]}},"required":["templates","basis"]},"checks":{"type":"array","items":{"type":"object","properties":{"crawler":{"type":"string"},"label":{"type":"string"},"template":{"type":"string"},"check":{"type":"object","properties":{"rate":{},"success":{},"slowing":{"type":"boolean"},"days":{}},"required":["rate","success","slowing","days"]}},"required":["crawler","label","template","check"]}}},"required":["money","checks"]}},"required":["window","connected","counts","crawlers","engines","sessionEngines","entries","latency","slowing"]}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"viewer","x-vercatus-key-scopes":["read"]}},"/sites/{id}/economics":{"get":{"operationId":"getSitesByIdEconomics","tags":["Sites"],"summary":"Crawl economics per crawler and page type (requests, bytes, errors, AI visits and key events per 1,000 requests) and the what-if's inputs.","description":"`?days=` (7 to 90, default 30): crawl economics per crawler and page type (requests, bytes, errors, AI visits and key events per 1,000 requests) and the what-if's inputs.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"days","in":"query","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"whatIf":{"type":"object","properties":{"crawlers":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"label":{"type":"string"},"category":{"type":"string","enum":["search","research","ai-search","assistant-fetch","training","data-broker"]},"robots":{"type":"string","enum":["honours","user-initiated","unstated"]},"robotsOnly":{"type":"boolean"},"requests":{"type":"number"},"feeds":{"anyOf":[{"type":"object","properties":{"panel":{},"referrer":{},"via":{"type":"string","enum":["index","training","fetch"]}},"required":["panel","referrer","via"]},{"type":"null"}]},"indexDependence":{"type":"object","additionalProperties":{}},"fetchDependence":{"type":"object","additionalProperties":{}}},"required":["id","label","category","robots","robotsOnly","requests","feeds","indexDependence","fetchDependence"]}},"engines":{"type":"array","items":{"type":"object","properties":{"engine":{"type":"string"},"label":{"type":"string"},"referrer":{"anyOf":[{"type":"string"},{"type":"null"}]},"citedAsks":{"type":"number"},"asks":{"type":"number"},"sessions":{"type":"number"},"keyEvents":{"type":"number"}},"required":["engine","label","referrer","citedAsks","asks","sessions","keyEvents"]}}},"required":["crawlers","engines"]},"period":{"type":"object","properties":{"from":{"type":"string"},"to":{"type":"string"},"prevFrom":{"type":"string"},"prevTo":{"type":"string"},"days":{"type":"number"}},"required":["from","to","prevFrom","prevTo","days"]},"connected":{"type":"object","properties":{"traffic":{"type":"boolean"},"analytics":{"type":"boolean"}},"required":["traffic","analytics"]},"bytesSeen":{"type":"boolean"},"crawlers":{"type":"array","items":{"$ref":"#/components/schemas/Shapeg45xpi"}},"byTemplate":{"type":"array","items":{"$ref":"#/components/schemas/Shapeg45xpi"}}},"required":["whatIf","period","connected","bytesSeen","crawlers","byTemplate"]}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"viewer","x-vercatus-key-scopes":["read"]}},"/sites/{id}/economics/what-if":{"get":{"operationId":"getSitesByIdEconomicsWhatIf","tags":["Sites"],"summary":"The policy what-if: crawler ids to block and to charge (Pay Per Crawl, price in USD a request); the predicted change in cited asks, AI visits and key events per","description":"`?block=&charge=&price=&days=`: the policy what-if: crawler ids to block and to charge (Pay Per Crawl, `price` in USD a request); the predicted change in cited asks, AI visits and key events per engine, with its range and method, and the robots.txt and Cloudflare rules.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"block","in":"query","required":false,"schema":{"type":"string"}},{"name":"charge","in":"query","required":false,"schema":{"type":"string"}},{"name":"price","in":"query","required":false,"schema":{"type":"string"}},{"name":"days","in":"query","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"engines":{"type":"array","items":{"type":"object","properties":{"engine":{"type":"string"},"label":{"type":"string"},"share":{"type":"object","properties":{"point":{"anyOf":[{"type":"number"},{"type":"null"}]},"lo":{"type":"number"},"hi":{"type":"number"}},"required":["point","lo","hi"]},"citedAsks":{"type":"object","properties":{"now":{"type":"number"},"asks":{"type":"number"},"change":{"type":"object","properties":{"point":{"anyOf":[{"type":"number"},{"type":"null"}]},"lo":{"type":"number"},"hi":{"type":"number"}},"required":["point","lo","hi"]}},"required":["now","asks","change"]},"sessions":{"type":"object","properties":{"now":{"type":"number"},"change":{"type":"object","properties":{"point":{"anyOf":[{"type":"number"},{"type":"null"}]},"lo":{"type":"number"},"hi":{"type":"number"}},"required":["point","lo","hi"]}},"required":["now","change"]},"keyEvents":{"type":"object","properties":{"now":{"type":"number"},"change":{"type":"object","properties":{"point":{"anyOf":[{"type":"number"},{"type":"null"}]},"lo":{"type":"number"},"hi":{"type":"number"}},"required":["point","lo","hi"]}},"required":["now","change"]},"reasons":{"type":"array","items":{"type":"string"}}},"required":["engine","label","share","citedAsks","sessions","keyEvents","reasons"]}},"totals":{"type":"object","properties":{"citedAsks":{"type":"object","properties":{"point":{"anyOf":[{"type":"number"},{"type":"null"}]},"lo":{"type":"number"},"hi":{"type":"number"}},"required":["point","lo","hi"]},"sessions":{"type":"object","properties":{"point":{"anyOf":[{"type":"number"},{"type":"null"}]},"lo":{"type":"number"},"hi":{"type":"number"}},"required":["point","lo","hi"]},"keyEvents":{"type":"object","properties":{"point":{"anyOf":[{"type":"number"},{"type":"null"}]},"lo":{"type":"number"},"hi":{"type":"number"}},"required":["point","lo","hi"]}},"required":["citedAsks","sessions","keyEvents"]},"revenue":{"anyOf":[{"type":"object","properties":{"perMonthHi":{"type":"number"},"perMonthLo":{"type":"number"},"requests":{"type":"number"}},"required":["perMonthHi","perMonthLo","requests"]},{"type":"null"}]},"rules":{"type":"object","properties":{"robots":{"type":"string"},"cloudflare":{"anyOf":[{"type":"string"},{"type":"null"}]},"payPerCrawl":{"anyOf":[{"type":"string"},{"type":"null"}]},"notes":{"type":"array","items":{"type":"string"}}},"required":["robots","cloudflare","payPerCrawl","notes"]},"method":{"type":"string"}},"required":["engines","totals","revenue","rules","method"]}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"viewer","x-vercatus-key-scopes":["read"]}},"/export/citations.csv":{"get":{"operationId":"getExportCitationsCsv","tags":["Exports"],"summary":"The citation panel's answers in the period, one line per source each answer cited (an answer that cited nothing is one line without a source): when, which run, ","description":"The citation panel's answers in the period, one line per source each answer cited (an answer that cited nothing is one line without a source): when, which run, which engine and question, the asks behind it and in how many the site was cited, whether it was named without a link, and whether Google showed no AI Overview. `?siteId=&from=&to=&engines=`.","parameters":[{"name":"siteId","in":"query","required":false,"schema":{"type":"string"}},{"name":"from","in":"query","required":false,"schema":{"type":"string"}},{"name":"to","in":"query","required":false,"schema":{"type":"string"}},{"name":"engines","in":"query","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"text/csv":{"schema":{"type":"string","description":"RFC 4180, UTF-8, CRLF line ends; streamed. A stream that fails part-way ends the connection (a short file is never a clean end)."}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"viewer","x-vercatus-key-scopes":["read","export"]}},"/export/prompt-results.csv":{"get":{"operationId":"getExportPromptResultsCsv","tags":["Exports"],"summary":"Deprecated (PHASE-1.md): kept for existing exports.","description":"Deprecated (PHASE-1.md): kept for existing exports. Every tracked prompt's answers in the period: when, which prompt and engine, whether the site was cited or named, the URLs cited. `?siteId=&from=&to=&engines=`.","parameters":[{"name":"siteId","in":"query","required":false,"schema":{"type":"string"}},{"name":"from","in":"query","required":false,"schema":{"type":"string"}},{"name":"to","in":"query","required":false,"schema":{"type":"string"}},{"name":"engines","in":"query","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"text/csv":{"schema":{"type":"string","description":"RFC 4180, UTF-8, CRLF line ends; streamed. A stream that fails part-way ends the connection (a short file is never a clean end)."}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"deprecated":true,"x-vercatus-role":"viewer","x-vercatus-key-scopes":["read","export"]}},"/export/findings.csv":{"get":{"operationId":"getExportFindingsCsv","tags":["Exports"],"summary":"The findings of each site's latest completed run (the list the Findings page shows), most severe first, with status, owner and due date.","description":"The findings of each site's latest completed run (the list the Findings page shows), most severe first, with status, owner and due date. `?siteId=&status=&severity=`.","parameters":[{"name":"siteId","in":"query","required":false,"schema":{"type":"string"}},{"name":"status","in":"query","required":false,"schema":{"type":"string"}},{"name":"severity","in":"query","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"text/csv":{"schema":{"type":"string","description":"RFC 4180, UTF-8, CRLF line ends; streamed. A stream that fails part-way ends the connection (a short file is never a clean end)."}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"viewer","x-vercatus-key-scopes":["read","export"]}},"/export/visibility.csv":{"get":{"operationId":"getExportVisibilityCsv","tags":["Exports"],"summary":"Visibility by ISO week × site × engine × domain, the rows of /api/export/visibility.json as CSV: the cited share of the site, its named competitors and (?others","description":"Visibility by ISO week × site × engine × domain, the rows of /api/export/visibility.json as CSV: the cited share of the site, its named competitors and (`?others=`, up to 20) the domains cited most instead, with asks, the 95% interval and questions. `?siteId=&from=&to=&engines=` (the last 12 weeks by default).","parameters":[{"name":"others","in":"query","required":false,"schema":{"type":"string"}},{"name":"siteId","in":"query","required":false,"schema":{"type":"string"}},{"name":"from","in":"query","required":false,"schema":{"type":"string"}},{"name":"to","in":"query","required":false,"schema":{"type":"string"}},{"name":"engines","in":"query","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"text/csv":{"schema":{"type":"string","description":"RFC 4180, UTF-8, CRLF line ends; streamed. A stream that fails part-way ends the connection (a short file is never a clean end)."}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"viewer","x-vercatus-key-scopes":["read","export"]}},"/annotations":{"get":{"operationId":"getAnnotations","tags":["Notes and saved views"],"summary":"The notes in a period (every day by default), oldest first.","description":"`?siteId=&from=&to=`: the notes in a period (every day by default), oldest first. With a site, its own notes and the workspace-wide ones.","parameters":[{"name":"siteId","in":"query","required":false,"schema":{"type":"string"}},{"name":"from","in":"query","required":false,"schema":{"type":"string"}},{"name":"to","in":"query","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"annotations":{"type":"array","items":{"$ref":"#/components/schemas/Shapepuh14c"}}},"required":["annotations"]}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"viewer","x-vercatus-key-scopes":["read"]},"post":{"operationId":"postAnnotations","tags":["Notes and saved views"],"summary":"Add a note; without a site it shows on every site's charts.","description":"`{ at, label, siteId? }`: add a note; without a site it shows on every site's charts.","requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"at":{},"label":{},"siteId":{}},"required":["at","label"]}}}},"responses":{"201":{"description":"Created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Shapepuh14c"}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"analyst","x-vercatus-key-scopes":["write"]}},"/annotations/{id}":{"patch":{"operationId":"patchAnnotationsById","tags":["Notes and saved views"],"summary":"Change a note (its author, or an admin).","description":"`{ at?, label? }`: change a note (its author, or an admin).","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"at":{},"label":{}}}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Shapepuh14c"}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"analyst","x-vercatus-key-scopes":["write"]},"delete":{"operationId":"deleteAnnotationsById","tags":["Notes and saved views"],"summary":"Remove a note (its author, or an admin).","description":"Remove a note (its author, or an admin).","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean","enum":[true]}},"required":["ok"]}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"analyst","x-vercatus-key-scopes":["write"]}},"/views":{"get":{"operationId":"getViews","tags":["Notes and saved views"],"summary":"The caller's own views and the workspace's shared ones, by name.","description":"The caller's own views and the workspace's shared ones, by name.","responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"views":{"type":"array","items":{"$ref":"#/components/schemas/Shape16mriv0"}}},"required":["views"]}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"viewer","x-vercatus-key-scopes":["read"]},"post":{"operationId":"postViews","tags":["Notes and saved views"],"summary":"Save a view, shared with the workspace when shared.","description":"`{ name, path, query, shared? }`: save a view, shared with the workspace when `shared`.","requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"name":{},"path":{},"query":{},"shared":{}},"required":["name","path","query"]}}}},"responses":{"201":{"description":"Created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Shape16mriv0"}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"viewer","x-vercatus-key-scopes":["write"]}},"/views/{id}":{"patch":{"operationId":"patchViewsById","tags":["Notes and saved views"],"summary":"Rename, re-point or share a view (its author; an admin for a shared one).","description":"`{ name?, path?, query?, shared? }`: rename, re-point or share a view (its author; an admin for a shared one).","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"name":{},"path":{},"query":{},"shared":{}}}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Shape16mriv0"}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"viewer","x-vercatus-key-scopes":["write"]},"delete":{"operationId":"deleteViewsById","tags":["Notes and saved views"],"summary":"Delete a view (its author; an admin for a shared one).","description":"Delete a view (its author; an admin for a shared one).","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean","enum":[true]}},"required":["ok"]}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"viewer","x-vercatus-key-scopes":["write"]}},"/sites/{id}/commerce":{"get":{"operationId":"getSitesByIdCommerce","tags":["Sites"],"summary":"Agentic-commerce reconciliation: the settings (feed, ACP endpoint, tolerance), the latest check (feed against Offer against the JS-off price against quoted pric","description":"Agentic-commerce reconciliation: the settings (feed, ACP endpoint, tolerance), the latest check (feed against Offer against the JS-off price against quoted prices, per product page; the UCP, ACP and WebMCP checks), the recent checks' counts, the method and its limits.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"source":{"anyOf":[{"type":"object","properties":{"feedUrl":{"anyOf":[{"type":"string"},{"type":"null"}]},"feedFormat":{"type":"string","enum":["auto","merchant_xml","merchant_tsv","acp_json","ucp_json"]},"acpEndpoint":{"anyOf":[{"type":"string"},{"type":"null"}]},"tolerance":{"type":"number"},"updatedAt":{"type":"string"},"updatedBy":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["feedUrl","feedFormat","acpEndpoint","tolerance","updatedAt","updatedBy"]},{"type":"null"}]},"latest":{"type":"object","properties":{"id":{"type":"string"},"orgId":{"anyOf":[{"type":"string"},{"type":"null"}]},"siteId":{"type":"string"},"workflowId":{"anyOf":[{"type":"string"},{"type":"null"}]},"checkedAt":{"type":"string","format":"date-time"},"trigger":{"type":"string","enum":["schedule","manual"]},"feed":{"type":"object","properties":{"url":{"anyOf":[{"type":"string"},{"type":"null"}]},"format":{"anyOf":[{"type":"string"},{"type":"null"}]},"items":{"type":"number"},"error":{"anyOf":[{"type":"string"},{"type":"null"}]},"truncated":{"type":"boolean"}},"required":["url","format","items","error"]},"protocols":{"type":"array","items":{"$ref":"#/components/schemas/Shapeb2bx8v"}},"items":{"type":"array","items":{"$ref":"#/components/schemas/Shape2iy9h2"}},"summary":{"type":"object","properties":{"products":{"type":"number"},"agree":{"type":"number"},"critical":{"type":"number"},"high":{"type":"number"},"medium":{"type":"number"},"low":{"type":"number"},"feedOnly":{"type":"number"}},"required":["products","agree","critical","high","medium","low","feedOnly"]},"error":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["id","orgId","siteId","workflowId","checkedAt","trigger","feed","protocols","items","summary","error"]},"history":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"checkedAt":{"type":"string","format":"date-time"},"summary":{"type":"object","properties":{"products":{"type":"number"},"agree":{"type":"number"},"critical":{"type":"number"},"high":{"type":"number"},"medium":{"type":"number"},"low":{"type":"number"},"feedOnly":{"type":"number"}},"required":["products","agree","critical","high","medium","low","feedOnly"]}},"required":["id","checkedAt","summary"]}},"method":{"type":"string"},"limits":{"type":"array","items":{"type":"string"}}},"required":["source","latest","history","method","limits"]}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"viewer","x-vercatus-key-scopes":["read"]}},"/sites/{id}/commerce/source":{"put":{"operationId":"putSitesByIdCommerceSource","tags":["Sites"],"summary":"The product feed (public HTTPS: Merchant XML or TSV, ACP or UCP JSON; auto detects), the declared ACP checkout endpoint, and the share two prices may differ by ","description":"`{ feedUrl?, feedFormat?, acpEndpoint?, tolerance? }`: the product feed (public HTTPS: Merchant XML or TSV, ACP or UCP JSON; auto detects), the declared ACP checkout endpoint, and the share two prices may differ by and still agree (0 to 0.1).","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"feedUrl":{},"feedFormat":{},"acpEndpoint":{},"tolerance":{}}}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"source":{"type":"object","properties":{"feedUrl":{"anyOf":[{"type":"string"},{"type":"null"}]},"feedFormat":{"type":"string","enum":["auto","merchant_xml","merchant_tsv","acp_json","ucp_json"]},"acpEndpoint":{"anyOf":[{"type":"string"},{"type":"null"}]},"tolerance":{"type":"number"},"updatedBy":{"anyOf":[{"type":"string"},{"type":"null"}]},"updatedAt":{"type":"string","format":"date-time"}},"required":["feedUrl","feedFormat","acpEndpoint","tolerance","updatedBy","updatedAt"]}},"required":["source"]}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"admin","x-vercatus-key-scopes":null}},"/sites/{id}/commerce/check":{"post":{"operationId":"postSitesByIdCommerceCheck","tags":["Sites"],"summary":"Reconcile now: fetch the feed, compare the latest run's product pages, probe the declared protocols and render a few pages for WebMCP.","description":"Reconcile now: fetch the feed, compare the latest run's product pages, probe the declared protocols and render a few pages for WebMCP. At most one check every five minutes a site.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"check":{"type":"object","properties":{"error":{"anyOf":[{"type":"string"},{"type":"null"}]},"id":{"type":"string"},"orgId":{"anyOf":[{"type":"string"},{"type":"null"}]},"workflowId":{"anyOf":[{"type":"string"},{"type":"null"}]},"siteId":{"type":"string"},"checkedAt":{"type":"string","format":"date-time"},"trigger":{"type":"string","enum":["schedule","manual"]},"summary":{"type":"object","properties":{"products":{"type":"number"},"agree":{"type":"number"},"critical":{"type":"number"},"high":{"type":"number"},"medium":{"type":"number"},"low":{"type":"number"},"feedOnly":{"type":"number"}},"required":["products","agree","critical","high","medium","low","feedOnly"]},"feed":{"type":"object","properties":{"url":{"anyOf":[{"type":"string"},{"type":"null"}]},"format":{"anyOf":[{"type":"string"},{"type":"null"}]},"items":{"type":"number"},"error":{"anyOf":[{"type":"string"},{"type":"null"}]},"truncated":{"type":"boolean"}},"required":["url","format","items","error"]},"items":{"type":"array","items":{"$ref":"#/components/schemas/Shape2iy9h2"}},"protocols":{"type":"array","items":{"$ref":"#/components/schemas/Shapeb2bx8v"}}},"required":["error","id","orgId","workflowId","siteId","checkedAt","trigger","summary","feed","items","protocols"]}},"required":["check"]}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"analyst","x-vercatus-key-scopes":["write"]}},"/sites/{id}/disclosures":{"get":{"operationId":"getSitesByIdDisclosures","tags":["Sites"],"summary":"Disclosure reachability: the rules, the latest check per rule and page (present in each view: JS-off, rendered, each crawler) with the answers that carried it, ","description":"Disclosure reachability: the rules, the latest check per rule and page (present in each view: JS-off, rendered, each crawler) with the answers that carried it, per page type, and the recent checks' losses.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"rules":{"type":"array","items":{"$ref":"#/components/schemas/Shapehwhrhs"}},"views":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"label":{"type":"string"},"jsOff":{"type":"boolean"}},"required":["id","label","jsOff"]}},"patterns":{"type":"array","items":{"type":"string"}},"latest":{"type":"object","properties":{"id":{"type":"string"},"orgId":{"anyOf":[{"type":"string"},{"type":"null"}]},"siteId":{"type":"string"},"workflowId":{"anyOf":[{"type":"string"},{"type":"null"}]},"checkedAt":{"type":"string","format":"date-time"},"trigger":{"type":"string","enum":["live","schedule","manual"]},"results":{"type":"array","items":{"$ref":"#/components/schemas/Shape1xvrpbb"}},"lost":{"type":"array","items":{"type":"object","properties":{"ruleId":{"type":"string"},"url":{"type":"string"},"view":{"type":"string"}},"required":["ruleId","url","view"]}}},"required":["id","orgId","siteId","workflowId","checkedAt","trigger","results","lost"]},"summary":{"type":"array","items":{"type":"object","properties":{"ruleId":{"type":"string"},"name":{"type":"string"},"templates":{"type":"array","items":{"type":"object","properties":{"template":{"anyOf":[{"type":"string"},{"type":"null"}]},"pages":{"type":"number"},"complete":{"type":"number"},"jsOffMissing":{"type":"number"},"missing":{}},"required":["template","pages","complete","jsOffMissing","missing"]}},"answers":{"type":"object","properties":{"citing":{"type":"number"},"carried":{"type":"number"},"excerptsOnly":{"type":"number"},"samples":{"type":"array","items":{}}},"required":["citing","carried","excerptsOnly","samples"]}},"required":["ruleId","name","templates","answers"]}},"history":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"checkedAt":{"type":"string","format":"date-time"},"trigger":{"type":"string","enum":["live","schedule","manual"]},"workflowId":{"anyOf":[{"type":"string"},{"type":"null"}]},"lost":{"type":"number"},"pages":{"type":"number"},"missing":{"type":"number"}},"required":["id","checkedAt","trigger","workflowId","lost","pages","missing"]}},"method":{"type":"string"},"limits":{"type":"array","items":{"type":"string"}}},"required":["rules","views","patterns","latest","summary","history","method","limits"]}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"viewer","x-vercatus-key-scopes":["read"]}},"/sites/{id}/disclosures/rules":{"post":{"operationId":"postSitesByIdDisclosuresRules","tags":["Sites"],"summary":"A required disclosure: words or a regular expression (checked for catastrophic backtracking), for the site, a URL pattern or a path glob; answerPattern is the s","description":"`{ name, scope, scopeRef?, match, pattern, answerPattern? }`: a required disclosure: words or a regular expression (checked for catastrophic backtracking), for the site, a URL pattern or a path glob; answerPattern is the short form an answer should carry.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"name":{},"scope":{},"scopeRef":{},"match":{},"pattern":{},"answerPattern":{}},"required":["name","scope","match","pattern"]}}}},"responses":{"201":{"description":"Created","content":{"application/json":{"schema":{"type":"object","properties":{"rule":{"type":"object","properties":{"pattern":{"type":"string"},"id":{"type":"string"},"name":{"type":"string"},"match":{"type":"string","enum":["text","regex"]},"active":{"type":"boolean"},"createdAt":{"type":"string","format":"date-time"},"orgId":{"anyOf":[{"type":"string"},{"type":"null"}]},"createdBy":{"anyOf":[{"type":"string"},{"type":"null"}]},"updatedAt":{"type":"string","format":"date-time"},"siteId":{"type":"string"},"scope":{"type":"string","enum":["template","site","path"]},"scopeRef":{"anyOf":[{"type":"string"},{"type":"null"}]},"answerPattern":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["pattern","id","name","match","active","createdAt","orgId","createdBy","updatedAt","siteId","scope","scopeRef","answerPattern"]}},"required":["rule"]}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"analyst","x-vercatus-key-scopes":["write"]}},"/sites/{id}/disclosures/rules/{ruleId}":{"patch":{"operationId":"patchSitesByIdDisclosuresRulesByRuleId","tags":["Sites"],"summary":"Change a disclosure rule: any of its fields, or active.","description":"Change a disclosure rule: any of its fields, or `active`.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"ruleId","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"rule":{"$ref":"#/components/schemas/Shapehwhrhs"}},"required":["rule"]}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"analyst","x-vercatus-key-scopes":["write"]},"delete":{"operationId":"deleteSitesByIdDisclosuresRulesByRuleId","tags":["Sites"],"summary":"Remove a disclosure rule; its past checks stay.","description":"Remove a disclosure rule; its past checks stay.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"ruleId","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean","enum":[true]}},"required":["ok"]}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"analyst","x-vercatus-key-scopes":["write"]}},"/sites/{id}/disclosures/check":{"post":{"operationId":"postSitesByIdDisclosuresCheck","tags":["Sites"],"summary":"Check now, against the latest run's stored bodies, or (live) by fetching up to ten of the covered pages from every view now.","description":"`{ live?, ruleId? }`: check now, against the latest run's stored bodies, or (`live`) by fetching up to ten of the covered pages from every view now.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"live":{},"ruleId":{}}}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"check":{"type":"object","properties":{"id":{"type":"string"},"orgId":{"anyOf":[{"type":"string"},{"type":"null"}]},"workflowId":{"anyOf":[{"type":"string"},{"type":"null"}]},"siteId":{"type":"string"},"checkedAt":{"type":"string","format":"date-time"},"results":{"type":"array","items":{"$ref":"#/components/schemas/Shape1xvrpbb"}},"trigger":{"type":"string","enum":["live","schedule","manual"]},"lost":{"type":"array","items":{"type":"object","properties":{"ruleId":{"type":"string"},"url":{"type":"string"},"view":{"type":"string"}},"required":["ruleId","url","view"]}}},"required":["id","orgId","workflowId","siteId","checkedAt","results","trigger","lost"]}},"required":["check"]}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"analyst","x-vercatus-key-scopes":["write"]}},"/sites/{id}/agent-tasks":{"get":{"operationId":"getSitesByIdAgentTasks","tags":["Sites"],"summary":"Agent task trials: the tasks with their latest trial per identity, weekly success, the assistants' observed fetches of the same page types, success and blockers","description":"Agent task trials: the tasks with their latest trial per identity, weekly success, the assistants' observed fetches of the same page types, success and blockers per page type, the identities, the method and its limits.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"tasks":{"type":"array","items":{"type":"object","properties":{"running":{"type":"boolean"},"latest":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"orgId":{"anyOf":[{"type":"string"},{"type":"null"}]},"siteId":{"type":"string"},"taskId":{"type":"string"},"batchId":{"type":"string"},"identity":{"type":"string"},"trigger":{"type":"string","enum":["schedule","manual"]},"startedAt":{},"finishedAt":{},"success":{"type":"boolean"},"steps":{"type":"number"},"elapsedMs":{"anyOf":[{"type":"number"},{"type":"null"}]},"blocker":{"anyOf":[{"type":"string","enum":["unreachable","captcha","consent_wall","forbidden","js_error","not_found","server_error","timeout","step_limit","no_path","left_site"]},{"type":"null"}]},"blockerDetail":{"anyOf":[{"type":"string"},{"type":"null"}]},"finalUrl":{"anyOf":[{"type":"string"},{"type":"null"}]},"template":{"anyOf":[{"type":"string"},{"type":"null"}]},"jsErrors":{"type":"number"},"plannerCalls":{"type":"number"},"trace":{}},"required":["id","orgId","siteId","taskId","batchId","identity","trigger","startedAt","finishedAt","success","steps","elapsedMs","blocker","blockerDetail","finalUrl","template","jsErrors","plannerCalls","trace"]}},"byWeek":{"type":"array","items":{"type":"object","properties":{"week":{"type":"string"},"by":{}},"required":["week","by"]}},"observed":{"type":"array","items":{"type":"object","properties":{"hits":{"type":"number"},"served":{"type":"number"},"byCrawler":{},"template":{"type":"string"}},"required":["hits","served","byCrawler","template"]}},"id":{"type":"string"},"orgId":{"anyOf":[{"type":"string"},{"type":"null"}]},"siteId":{"type":"string"},"kind":{"type":"string","enum":["find_price","find_plans","reach_contact","start_trial","add_to_cart"]},"name":{"type":"string"},"startUrl":{"type":"string"},"target":{"anyOf":[{"type":"string"},{"type":"null"}]},"identities":{"type":"array","items":{"type":"string"}},"maxSteps":{"type":"number"},"weekly":{"type":"boolean"},"active":{"type":"boolean"},"createdBy":{"anyOf":[{"type":"string"},{"type":"null"}]},"createdAt":{"type":"string","format":"date-time"},"lastRunAt":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"requestedAt":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"claimedAt":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]}},"required":["running","latest","byWeek","observed","id","orgId","siteId","kind","name","startUrl","target","identities","maxSteps","weekly","active","createdBy","createdAt","lastRunAt","requestedAt","claimedAt"]}},"templates":{"type":"array","items":{"type":"object","properties":{"template":{"type":"string"},"runs":{"type":"number"},"passed":{"type":"number"},"blockers":{"type":"object","additionalProperties":{"type":"number"}}},"required":["template","runs","passed","blockers"]}},"identities":{"type":"array","items":{"type":"object","properties":{"available":{"type":"boolean"},"id":{"type":"string"},"label":{"type":"string"},"signed":{"type":"boolean"},"reading":{"type":"boolean"},"note":{"type":"string"}},"required":["available","id","label","signed","reading","note"]}},"kinds":{"type":"object","properties":{"find_price":{"type":"object","properties":{"label":{"type":"string"},"needsTarget":{"type":"boolean"},"goal":{"type":"string"}},"required":["label","needsTarget","goal"]},"find_plans":{"type":"object","properties":{"label":{"type":"string"},"needsTarget":{"type":"boolean"},"goal":{"type":"string"}},"required":["label","needsTarget","goal"]},"reach_contact":{"type":"object","properties":{"label":{"type":"string"},"needsTarget":{"type":"boolean"},"goal":{"type":"string"}},"required":["label","needsTarget","goal"]},"start_trial":{"type":"object","properties":{"label":{"type":"string"},"needsTarget":{"type":"boolean"},"goal":{"type":"string"}},"required":["label","needsTarget","goal"]},"add_to_cart":{"type":"object","properties":{"label":{"type":"string"},"needsTarget":{"type":"boolean"},"goal":{"type":"string"}},"required":["label","needsTarget","goal"]}},"required":["find_price","find_plans","reach_contact","start_trial","add_to_cart"]},"planner":{"type":"object","properties":{"enabled":{"type":"boolean"},"callsPerTrial":{"type":"number"}},"required":["enabled","callsPerTrial"]},"method":{"type":"string"},"limits":{"type":"array","items":{"type":"string"}}},"required":["tasks","templates","identities","kinds","planner","method","limits"]}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"viewer","x-vercatus-key-scopes":["read"]},"post":{"operationId":"postSitesByIdAgentTasks","tags":["Sites"],"summary":"A scripted task (find_price, find_plans, reach_contact, start_trial, add_to_cart) starting on a page of the site; a product target for find_price and add_to_car","description":"`{ kind, name, startUrl, target?, identities?, maxSteps?, weekly? }`: a scripted task (find_price, find_plans, reach_contact, start_trial, add_to_cart) starting on a page of the site; a product target for find_price and add_to_cart.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"kind":{},"name":{},"startUrl":{},"target":{},"identities":{},"maxSteps":{},"weekly":{}},"required":["kind","name","startUrl"]}}}},"responses":{"201":{"description":"Created","content":{"application/json":{"schema":{"type":"object","properties":{"task":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"active":{"type":"boolean"},"createdAt":{"type":"string","format":"date-time"},"orgId":{"anyOf":[{"type":"string"},{"type":"null"}]},"createdBy":{"anyOf":[{"type":"string"},{"type":"null"}]},"kind":{"type":"string","enum":["find_price","find_plans","reach_contact","start_trial","add_to_cart"]},"siteId":{"type":"string"},"target":{"anyOf":[{"type":"string"},{"type":"null"}]},"weekly":{"type":"boolean"},"lastRunAt":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"requestedAt":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"startUrl":{"type":"string"},"identities":{"type":"array","items":{"type":"string"}},"maxSteps":{"type":"number"},"claimedAt":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]}},"required":["id","name","active","createdAt","orgId","createdBy","kind","siteId","target","weekly","lastRunAt","requestedAt","startUrl","identities","maxSteps","claimedAt"]}},"required":["task"]}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"analyst","x-vercatus-key-scopes":["write"]}},"/sites/{id}/agent-tasks/{taskId}":{"patch":{"operationId":"patchSitesByIdAgentTasksByTaskId","tags":["Sites"],"summary":"Change an agent task: its name, start page, target, identities, step limit, weekly run or active.","description":"Change an agent task: its name, start page, target, identities, step limit, weekly run or `active`.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"taskId","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"task":{"type":"object","properties":{"id":{"type":"string"},"orgId":{"anyOf":[{"type":"string"},{"type":"null"}]},"siteId":{"type":"string"},"kind":{"type":"string","enum":["find_price","find_plans","reach_contact","start_trial","add_to_cart"]},"name":{"type":"string"},"startUrl":{"type":"string"},"target":{"anyOf":[{"type":"string"},{"type":"null"}]},"identities":{"type":"array","items":{"type":"string"}},"maxSteps":{"type":"number"},"weekly":{"type":"boolean"},"active":{"type":"boolean"},"createdBy":{"anyOf":[{"type":"string"},{"type":"null"}]},"createdAt":{"type":"string","format":"date-time"},"lastRunAt":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"requestedAt":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"claimedAt":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]}},"required":["id","orgId","siteId","kind","name","startUrl","target","identities","maxSteps","weekly","active","createdBy","createdAt","lastRunAt","requestedAt","claimedAt"]}},"required":["task"]}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"analyst","x-vercatus-key-scopes":["write"]},"delete":{"operationId":"deleteSitesByIdAgentTasksByTaskId","tags":["Sites"],"summary":"Remove an agent task and its trials.","description":"Remove an agent task and its trials.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"taskId","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean","enum":[true]}},"required":["ok"]}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"analyst","x-vercatus-key-scopes":["write"]}},"/sites/{id}/agent-tasks/{taskId}/run":{"post":{"operationId":"postSitesByIdAgentTasksByTaskIdRun","tags":["Sites"],"summary":"Run a task now under each of its identities; the worker takes it within a minute and the trials appear as they finish.","description":"Run a task now under each of its identities; the worker takes it within a minute and the trials appear as they finish.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"taskId","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"202":{"description":"Accepted","content":{"application/json":{"schema":{"type":"object","properties":{"queued":{"type":"boolean","enum":[true]}},"required":["queued"]}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"analyst","x-vercatus-key-scopes":["write"]}},"/sites/{id}/agent-tasks/{taskId}/trials":{"get":{"operationId":"getSitesByIdAgentTasksByTaskIdTrials","tags":["Sites"],"summary":"A task's trials, newest first, with each step taken.","description":"`?limit=` (1 to 100, default 30): a task's trials, newest first, with each step taken.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"taskId","in":"path","required":true,"schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"trials":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"orgId":{"anyOf":[{"type":"string"},{"type":"null"}]},"siteId":{"type":"string"},"taskId":{"type":"string"},"batchId":{"type":"string"},"identity":{"type":"string"},"trigger":{"type":"string","enum":["schedule","manual"]},"startedAt":{"type":"string","format":"date-time"},"finishedAt":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"success":{"type":"boolean"},"steps":{"type":"number"},"elapsedMs":{"anyOf":[{"type":"number"},{"type":"null"}]},"blocker":{"anyOf":[{"type":"string","enum":["unreachable","captcha","consent_wall","forbidden","js_error","not_found","server_error","timeout","step_limit","no_path","left_site"]},{"type":"null"}]},"blockerDetail":{"anyOf":[{"type":"string"},{"type":"null"}]},"finalUrl":{"anyOf":[{"type":"string"},{"type":"null"}]},"template":{"anyOf":[{"type":"string"},{"type":"null"}]},"jsErrors":{"type":"number"},"plannerCalls":{"type":"number"},"trace":{"type":"array","items":{"type":"object","properties":{"n":{"type":"number"},"action":{"type":"string","enum":["search","done","open","consent","click","stop"]},"name":{"anyOf":[{"type":"string"},{"type":"null"}]},"url":{"type":"string"},"status":{"anyOf":[{"type":"number"},{"type":"null"}]},"by":{"type":"string","enum":["rules","planner"]},"note":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["n","action","url"]}}},"required":["id","orgId","siteId","taskId","batchId","identity","trigger","startedAt","finishedAt","success","steps","elapsedMs","blocker","blockerDetail","finalUrl","template","jsErrors","plannerCalls","trace"]}}},"required":["trials"]}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"viewer","x-vercatus-key-scopes":["read"]}},"/sites/{id}/fixes/{verificationId}/attribution":{"get":{"operationId":"getSitesByIdFixesByVerificationIdAttribution","tags":["Sites"],"summary":"The synthetic-control estimate of a checked fix: the donor pool and weights, the series, the effect with its placebo interval and p-value, or why there is none.","description":"`?outcome=` (ai_sessions, recrawl or cited; default ai_sessions): the synthetic-control estimate of a checked fix: the donor pool and weights, the series, the effect with its placebo interval and p-value, or why there is none. Deprecated (PHASE-4.md): a play's verdict (GET /api/sites/:id/plays/:playId/verdicts) replaces it on the screens; kept for MCP, exports and the Looker connector.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"verificationId","in":"path","required":true,"schema":{"type":"string"}},{"name":"outcome","in":"query","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"anyOf":[{"type":"object","properties":{"outcome":{"type":"string","enum":["cited","ai_sessions","recrawl"]},"label":{"type":"string"},"source":{"type":"string"},"available":{"type":"boolean"},"reason":{"anyOf":[{"type":"string"},{"type":"null"}]},"fix":{"type":"object","properties":{"id":{"type":"string"},"title":{"type":"string"},"scope":{"type":"string"},"scopeRef":{"anyOf":[{"type":"string"},{"type":"null"}]},"markedAt":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["id","title","scope","scopeRef","markedAt"]},"unit":{"anyOf":[{"type":"object","properties":{"id":{"type":"string"},"kind":{"type":"string","enum":["pattern","page"]}},"required":["id","kind"]},{"type":"null"}]},"window":{"anyOf":[{"type":"object","properties":{"preFrom":{"type":"string"},"fixDay":{"type":"string"},"postTo":{"type":"string"},"preDays":{"type":"number"},"postDays":{"type":"number"}},"required":["preFrom","fixDay","postTo","preDays","postDays"]},{"type":"null"}]},"series":{"anyOf":[{"type":"object","properties":{"days":{"type":"array","items":{"type":"string"}},"treated":{"type":"array","items":{"type":"number"}},"synthetic":{"type":"array","items":{"type":"number"}}},"required":["days","treated","synthetic"]},{"type":"null"}]},"donors":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"weight":{"type":"number"}},"required":["id","weight"]}},"donorPool":{"type":"number"},"effect":{"anyOf":[{"type":"object","properties":{"relative":{"type":"number"},"lo":{"anyOf":[{"type":"number"},{"type":"null"}]},"hi":{"anyOf":[{"type":"number"},{"type":"null"}]},"level":{"anyOf":[{"type":"number"},{"type":"null"}]},"perDayTreated":{"type":"number"},"perDaySynthetic":{"type":"number"}},"required":["relative","lo","hi","level","perDayTreated","perDaySynthetic"]},{"type":"null"}]},"fit":{"anyOf":[{"type":"object","properties":{"preRmspe":{"type":"number"},"ok":{"type":"boolean"}},"required":["preRmspe","ok"]},{"type":"null"}]},"placebo":{"anyOf":[{"type":"object","properties":{"n":{"type":"number"},"kept":{"type":"number"},"pValue":{"anyOf":[{"type":"number"},{"type":"null"}]}},"required":["n","kept","pValue"]},{"type":"null"}]},"intervalReason":{"anyOf":[{"type":"string"},{"type":"null"}]},"verdict":{"type":"string","enum":["no clear change","increase","decrease","poor fit","not enough data"]},"method":{"type":"string"},"limits":{"type":"array","items":{"type":"string"}}},"required":["outcome","label","source","available","reason","fix","unit","window","series","donors","donorPool","effect","fit","placebo","intervalReason","verdict","method","limits"]},{"type":"null"}]}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"deprecated":true,"x-vercatus-role":"viewer","x-vercatus-key-scopes":["read"]}},"/sites/{id}/influence":{"get":{"operationId":"getSitesByIdInfluence","tags":["Sites"],"summary":"The dark-AI influence estimate: weekly branded search impressions and direct sessions against the cited share, with competitors and search demand as controls; t","description":"The dark-AI influence estimate: weekly branded search impressions and direct sessions against the cited share, with competitors and search demand as controls; the estimate and its interval only when it predicts recent weeks it was not fitted on and the data checks pass, otherwise the reasons. Deprecated (PHASE-4.md): Results (GET /api/sites/:id/results) replaces it on the screens; kept for MCP, exports and the Looker connector.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"anyOf":[{"type":"object","properties":{"connected":{"type":"object","properties":{"searchConsole":{"type":"boolean"},"analytics":{"type":"boolean"}},"required":["searchConsole","analytics"]},"brandPattern":{"anyOf":[{"type":"string"},{"type":"null"}]},"lastSync":{"anyOf":[{"type":"string"},{"type":"null"}]},"period":{"anyOf":[{"type":"object","properties":{"from":{"type":"string"},"to":{"type":"string"}},"required":["from","to"]},{"type":"null"}]},"weeks":{"type":"array","items":{"type":"string"}},"series":{"type":"object","properties":{"branded":{"type":"array","items":{"anyOf":[{"type":"number"},{"type":"null"}]}},"direct":{"type":"array","items":{"anyOf":[{"type":"number"},{"type":"null"}]}},"share":{"type":"array","items":{"anyOf":[{"type":"number"},{"type":"null"}]}},"comp":{"type":"array","items":{"anyOf":[{"type":"number"},{"type":"null"}]}},"demand":{"type":"array","items":{"anyOf":[{"type":"number"},{"type":"null"}]}}},"required":["branded","direct","share","comp","demand"]},"outcomes":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","enum":["direct","branded"]},"label":{"type":"string"},"available":{"type":"boolean"},"reason":{"anyOf":[{"type":"string"},{"type":"null"}]},"result":{"anyOf":[{"type":"object","properties":{"weeks":{"type":"number"},"fitWeeks":{"type":"number"},"testWeeks":{"type":"number"},"imputedShare":{"type":"number"},"coef":{"anyOf":[{"type":"number"},{"type":"null"}]},"lo":{"anyOf":[{"type":"number"},{"type":"null"}]},"hi":{"anyOf":[{"type":"number"},{"type":"null"}]},"se":{"anyOf":[{"type":"number"},{"type":"null"}]},"lag":{"anyOf":[{"type":"number"},{"type":"null"}]},"per10":{"anyOf":[{"type":"object","properties":{"estimate":{"type":"number"},"lo":{"type":"number"},"hi":{"type":"number"}},"required":["estimate","lo","hi"]},{"type":"null"}]},"heldOut":{"anyOf":[{"type":"object","properties":{"rmseWithShare":{"type":"number"},"rmseControls":{"type":"number"},"improvement":{"type":"number"}},"required":["rmseWithShare","rmseControls","improvement"]},{"type":"null"}]},"passed":{"type":"boolean"},"reasons":{"type":"array","items":{"type":"string"}}},"required":["weeks","fitWeeks","testWeeks","imputedShare","coef","lo","hi","se","lag","per10","heldOut","passed","reasons"]},{"type":"null"}]}},"required":["id","label","available","reason","result"]}},"method":{"type":"string"},"limits":{"type":"array","items":{"type":"string"}}},"required":["connected","brandPattern","lastSync","period","weeks","series","outcomes","method","limits"]},{"type":"null"}]}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"deprecated":true,"x-vercatus-role":"viewer","x-vercatus-key-scopes":["read"]}},"/sites/{id}/influence/sync":{"post":{"operationId":"postSitesByIdInfluenceSync","tags":["Sites"],"summary":"Read branded search from Search Console now (sixteen months the first time, then the days since the last read).","description":"Read branded search from Search Console now (sixteen months the first time, then the days since the last read). Deprecated (PHASE-4.md): Results (GET /api/sites/:id/results) replaces it on the screens; kept for MCP, exports and the Looker connector.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"deprecated":true,"x-vercatus-role":"analyst","x-vercatus-key-scopes":["write"]}},"/public/forecast-record":{"get":{"operationId":"getPublicForecastRecord","tags":["Service"],"summary":"Vercatus' published forecast record: before each fix, the predicted change in cited share and its 80% interval; after it, what was measured.","description":"Vercatus' published forecast record: before each fix, the predicted change in cited share and its 80% interval; after it, what was measured. Hit rate, Brier score and reliability of every workspace's scored forecasts together, as aggregates that name no workspace, site or finding.","responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"level":{"type":"number"},"platform":{"$ref":"#/components/schemas/Shape3gcr5p"}},"required":["level","platform"]}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"security":[],"x-vercatus-role":null,"x-vercatus-key-scopes":null}},"/sites/{id}/stale-answers":{"get":{"operationId":"getSitesByIdStaleAnswers","tags":["Sites"],"summary":"The site's stale answers, open and most severe first, each with its sentence, cause and fixes; the last scan; the IndexNow state.","description":"`?status=` (open, resolved, dismissed or all; default all): the site's stale answers, open and most severe first, each with its sentence, cause and fixes; the last scan; the IndexNow state.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"status","in":"query","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"array","items":{"type":"object","properties":{"engineLabel":{"type":"string"},"sentence":{"type":"string"},"id":{"type":"string"},"siteId":{"type":"string"},"key":{"type":"string"},"engine":{"type":"string"},"query":{"type":"string"},"trackedQueryId":{"anyOf":[{"type":"string"},{"type":"null"}]},"sampleId":{"anyOf":[{"type":"string"},{"type":"null"}]},"askedAt":{"type":"string","format":"date-time"},"kind":{"type":"string","enum":["number","date","plan","price","spec"]},"context":{"type":"string"},"answerValue":{"type":"string"},"answerSentence":{"type":"string"},"siteValue":{"anyOf":[{"type":"string"},{"type":"null"}]},"siteSentence":{"anyOf":[{"type":"string"},{"type":"null"}]},"pageUrl":{"anyOf":[{"type":"string"},{"type":"null"}]},"siteSince":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"answerValueUntil":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"liveCheckedAt":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"liveState":{"anyOf":[{"type":"string","enum":["site","answer","unreachable","neither"]},{"type":"null"}]},"cause":{"type":"string","enum":["refused","not_refetched","refetched","no_crawl_data","never_fetched"]},"crawl":{"type":"array","items":{"$ref":"#/components/schemas/Shape153qs14"}},"sitemapLastmod":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"fixes":{"type":"array","items":{"type":"object","properties":{"kind":{"type":"string","enum":["search_console","source","lastmod","indexnow","unblock","connect_traffic"]},"text":{"type":"string"},"urls":{},"crawler":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["kind","text"]}},"severity":{"type":"string","enum":["low","medium","high"]},"confidence":{"type":"number"},"cited":{"type":"boolean"},"factSource":{"anyOf":[{"type":"string","enum":["rules","llm","stub"]},{"type":"null"}]},"asks":{"type":"number"},"status":{"type":"string","enum":["open","resolved","dismissed"]},"firstSeenAt":{"type":"string","format":"date-time"},"lastSeenAt":{"type":"string","format":"date-time"},"resolvedAt":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"resolvedReason":{"anyOf":[{"type":"string"},{"type":"null"}]},"dismissedBy":{"anyOf":[{"type":"string"},{"type":"null"}]},"fixedAt":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]}},"required":["engineLabel","sentence","id","siteId","key","engine","query","trackedQueryId","sampleId","askedAt","kind","context","answerValue","answerSentence","siteValue","siteSentence","pageUrl","siteSince","answerValueUntil","liveCheckedAt","liveState","cause","crawl","sitemapLastmod","fixes","severity","confidence","cited","factSource","asks","status","firstSeenAt","lastSeenAt","resolvedAt","resolvedReason","dismissedBy","fixedAt"]}},"indexnow":{"$ref":"#/components/schemas/Shape1xx1prt"},"counts":{"type":"object","properties":{"open":{"type":"number"},"resolved":{"type":"number"},"dismissed":{"type":"number"},"high":{"type":"number"}},"required":["open","resolved","dismissed","high"]},"lastScanAt":{"type":"string"},"scan":{"type":"object","additionalProperties":{}}},"required":["items","indexnow","counts","lastScanAt","scan"]}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"viewer","x-vercatus-key-scopes":["read"]}},"/sites/{id}/stale-answers/scan":{"post":{"operationId":"postSitesByIdStaleAnswersScan","tags":["Sites"],"summary":"Scan the site's latest answers for stale facts now, with what is left of the day's model reads; answers with the counts.","description":"Scan the site's latest answers for stale facts now, with what is left of the day's model reads; answers with the counts. The worker scans every site with new answers anyway.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"samples":{"type":"number"},"facts":{"type":"number"},"found":{"type":"number"},"opened":{"type":"number"},"resolved":{"type":"number"},"modelCalls":{"type":"number"},"noticed":{"type":"number"}},"required":["samples","facts","found","opened","resolved","modelCalls","noticed"]}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"analyst","x-vercatus-key-scopes":["write"]}},"/sites/{id}/stale-answers/{staleId}":{"patch":{"operationId":"patchSitesByIdStaleAnswersByStaleId","tags":["Sites"],"summary":"A person's decision on one stale answer.","description":"`{ status }` (\"dismissed\": not a problem, or \"open\" again): a person's decision on one stale answer.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"staleId","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"status":{"type":"string"}},"required":["status"]}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"type":"string","enum":["open","resolved","dismissed"]},"id":{"type":"string"},"lastSeenAt":{"type":"string","format":"date-time"},"kind":{"type":"string","enum":["number","date","plan","price","spec"]},"siteId":{"type":"string"},"engine":{"type":"string"},"key":{"type":"string"},"query":{"type":"string"},"trackedQueryId":{"anyOf":[{"type":"string"},{"type":"null"}]},"cited":{"type":"boolean"},"severity":{"type":"string","enum":["low","medium","high"]},"confidence":{"type":"number"},"context":{"type":"string"},"crawl":{"type":"array","items":{"$ref":"#/components/schemas/Shape153qs14"}},"askedAt":{"type":"string","format":"date-time"},"sampleId":{"anyOf":[{"type":"string"},{"type":"null"}]},"answerValue":{"type":"string"},"answerSentence":{"type":"string"},"siteValue":{"anyOf":[{"type":"string"},{"type":"null"}]},"siteSentence":{"anyOf":[{"type":"string"},{"type":"null"}]},"pageUrl":{"anyOf":[{"type":"string"},{"type":"null"}]},"siteSince":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"answerValueUntil":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"liveCheckedAt":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"liveState":{"anyOf":[{"type":"string","enum":["site","answer","unreachable","neither"]},{"type":"null"}]},"cause":{"type":"string","enum":["refused","not_refetched","refetched","no_crawl_data","never_fetched"]},"sitemapLastmod":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"fixes":{"type":"array","items":{"type":"object","properties":{"kind":{"type":"string","enum":["search_console","source","lastmod","indexnow","unblock","connect_traffic"]},"text":{"type":"string"},"urls":{"type":"array","items":{"type":"string"}},"crawler":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["kind","text"]}},"factSource":{"anyOf":[{"type":"string","enum":["rules","llm","stub"]},{"type":"null"}]},"asks":{"type":"number"},"firstSeenAt":{"type":"string","format":"date-time"},"resolvedAt":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"resolvedReason":{"anyOf":[{"type":"string"},{"type":"null"}]},"dismissedBy":{"anyOf":[{"type":"string"},{"type":"null"}]},"fixedAt":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]}},"required":["status","id","lastSeenAt","kind","siteId","engine","key","query","trackedQueryId","cited","severity","confidence","context","crawl","askedAt","sampleId","answerValue","answerSentence","siteValue","siteSentence","pageUrl","siteSince","answerValueUntil","liveCheckedAt","liveState","cause","sitemapLastmod","fixes","factSource","asks","firstSeenAt","resolvedAt","resolvedReason","dismissedBy","fixedAt"]}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"analyst","x-vercatus-key-scopes":["write"]}},"/sites/{id}/stale-answers/{staleId}/indexnow":{"post":{"operationId":"postSitesByIdStaleAnswersByStaleIdIndexnow","tags":["Sites"],"summary":"Submit the stale answer's page to IndexNow (the site's key must be set up and checked); recorded with what IndexNow answered.","description":"Submit the stale answer's page to IndexNow (the site's key must be set up and checked); recorded with what IndexNow answered.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"staleId","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Shapewfdc2a"}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"analyst","x-vercatus-key-scopes":["write"]}},"/sites/{id}/indexnow":{"get":{"operationId":"getSitesByIdIndexnow","tags":["Sites"],"summary":"The site's IndexNow key (public by design: it is served on the site), whether its file was found, and the last submissions.","description":"The site's IndexNow key (public by design: it is served on the site), whether its file was found, and the last submissions.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Shape1xx1prt"}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"viewer","x-vercatus-key-scopes":["read"]},"delete":{"operationId":"deleteSitesByIdIndexnow","tags":["Sites"],"summary":"Remove the site's IndexNow key (its submissions stay in the record).","description":"Remove the site's IndexNow key (its submissions stay in the record).","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean","enum":[true]}},"required":["ok"]}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"admin","x-vercatus-key-scopes":null}},"/sites/{id}/indexnow/key":{"post":{"operationId":"postSitesByIdIndexnowKey","tags":["Sites"],"summary":"Make (or replace) the site's IndexNow key, to be served at its default address or at keyLocation (an https .txt address on the site's host).","description":"`{ keyLocation? }`: make (or replace) the site's IndexNow key, to be served at its default address or at `keyLocation` (an https .txt address on the site's host).","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"keyLocation":{}}}}}},"responses":{"201":{"description":"Created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Shape1xx1prt"}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"admin","x-vercatus-key-scopes":null}},"/sites/{id}/indexnow/verify":{"post":{"operationId":"postSitesByIdIndexnowVerify","tags":["Sites"],"summary":"Read the key file on the site now (through the egress guard) and record whether it holds the key.","description":"Read the key file on the site now (through the egress guard) and record whether it holds the key.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"state":{"$ref":"#/components/schemas/Shape1xx1prt"},"ok":{"type":"boolean"},"error":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["state","ok","error"]}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"analyst","x-vercatus-key-scopes":["write"]}},"/sites/{id}/indexnow/submit":{"post":{"operationId":"postSitesByIdIndexnowSubmit","tags":["Sites"],"summary":"Submit up to 10,000 of the site's own URLs to IndexNow; URLs sent within the hour are left out.","description":"`{ urls }`: submit up to 10,000 of the site's own URLs to IndexNow; URLs sent within the hour are left out.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"urls":{}},"required":["urls"]}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Shapewfdc2a"}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"analyst","x-vercatus-key-scopes":["write"]}},"/sites/{id}/provenance":{"get":{"operationId":"getSitesByIdProvenance","tags":["Sites"],"summary":"The site's answers with alignments, newest first: per answer, how many of its sentences came from the site's passages, a competitor's, another site's, or none.","description":"`?engine=&limit=`: the site's answers with alignments, newest first: per answer, how many of its sentences came from the site's passages, a competitor's, another site's, or none.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"engine","in":"query","required":false,"schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"answers":{"type":"array","items":{"type":"object","properties":{"sampleId":{"type":"string"},"engine":{"type":"string"},"engineLabel":{"type":"string"},"query":{"type":"string"},"askedAt":{"type":"string"},"own":{"type":"number"},"competitor":{"type":"number"},"other":{"type":"number"},"none":{"type":"number"}},"required":["sampleId","engine","engineLabel","query","askedAt","own","competitor","other","none"]}},"totals":{"type":"object","properties":{"own":{"type":"number"},"competitor":{"type":"number"},"other":{"type":"number"},"none":{"type":"number"}},"required":["own","competitor","other","none"]}},"required":["answers","totals"]}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"viewer","x-vercatus-key-scopes":["read"]}},"/sites/{id}/provenance/answers/{sampleId}":{"get":{"operationId":"getSitesByIdProvenanceAnswersBySampleId","tags":["Sites"],"summary":"One answer sentence by sentence, each with the passage it most likely came from (or none).","description":"One answer sentence by sentence, each with the passage it most likely came from (or none).","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"sampleId","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"sample":{"type":"object","properties":{"id":{"type":"string"},"engine":{"type":"string"},"engineLabel":{"type":"string"},"query":{"type":"string"},"askedAt":{"type":"string"}},"required":["id","engine","engineLabel","query","askedAt"]},"aligned":{"type":"boolean"},"method":{"type":"string","enum":["lexical","hybrid"]},"counts":{"type":"object","properties":{"none":{"type":"number"},"other":{"type":"number"},"competitor":{"type":"number"},"own":{"type":"number"}},"required":["none","other","competitor","own"]},"sentences":{"type":"array","items":{"type":"object","properties":{"idx":{"type":"number"},"sentence":{"type":"string"},"kind":{"type":"string","enum":["none","other","competitor","own"]},"url":{"anyOf":[{"type":"string"},{"type":"null"}]},"domain":{"anyOf":[{"type":"string"},{"type":"null"}]},"heading":{"anyOf":[{"type":"string"},{"type":"null"}]},"passage":{"anyOf":[{"type":"string"},{"type":"null"}]},"lexical":{"anyOf":[{"type":"number"},{"type":"null"}]},"dense":{"anyOf":[{"type":"number"},{"type":"null"}]},"cited":{"type":"boolean"}},"required":["idx","sentence","kind","url","domain","heading","passage","lexical","dense","cited"]}}},"required":["sample","aligned","method","counts","sentences"]}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"viewer","x-vercatus-key-scopes":["read"]},"post":{"operationId":"postSitesByIdProvenanceAnswersBySampleId","tags":["Sites"],"summary":"Align one answer now (the worker aligns every new answer on its own): the cited pages of other sites are fetched, robots.txt honoured.","description":"Align one answer now (the worker aligns every new answer on its own): the cited pages of other sites are fetched, robots.txt honoured.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"sampleId","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"sentences":{"type":"number"},"own":{"type":"number"},"other":{"type":"number"},"none":{"type":"number"}},"required":["sentences","own","other","none"]}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"analyst","x-vercatus-key-scopes":["write"]}},"/sites/{id}/provenance/page":{"get":{"operationId":"getSitesByIdProvenancePage","tags":["Sites"],"summary":"One page as answers use it: its passages answers quoted, the passages of other sites that won its questions, and the churn around its latest change.","description":"`?url=&days=`: one page as answers use it: its passages answers quoted, the passages of other sites that won its questions, and the churn around its latest change.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"url","in":"query","required":false,"schema":{"type":"string"}},{"name":"days","in":"query","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"url":{"type":"string"},"questions":{"type":"number"},"answers":{"type":"number"},"used":{"type":"array","items":{"type":"object","properties":{"passageHash":{"type":"string"},"heading":{"anyOf":[{"type":"string"},{"type":"null"}]},"passage":{"anyOf":[{"type":"string"},{"type":"null"}]},"sentences":{"type":"number"},"answers":{"type":"number"},"engines":{"type":"array","items":{"type":"string"}},"example":{"type":"object","properties":{"sentence":{"type":"string"},"engine":{"type":"string"},"query":{"type":"string"}},"required":["sentence","engine","query"]}},"required":["passageHash","heading","passage","sentences","answers","engines","example"]}},"winners":{"type":"array","items":{"type":"object","properties":{"passageHash":{"type":"string"},"url":{"anyOf":[{"type":"string"},{"type":"null"}]},"domain":{"anyOf":[{"type":"string"},{"type":"null"}]},"kind":{"type":"string"},"heading":{"anyOf":[{"type":"string"},{"type":"null"}]},"passage":{"anyOf":[{"type":"string"},{"type":"null"}]},"sentences":{"type":"number"},"answers":{"type":"number"},"engines":{"type":"array","items":{"type":"string"}},"example":{"type":"object","properties":{"sentence":{"type":"string"},"engine":{"type":"string"},"query":{"type":"string"}},"required":["sentence","engine","query"]}},"required":["passageHash","url","domain","kind","heading","passage","sentences","answers","engines","example"]}},"churn":{"anyOf":[{"type":"object","properties":{"kept":{"type":"array","items":{"type":"object","properties":{"passageHash":{"type":"string"},"heading":{"anyOf":[{"type":"string"},{"type":"null"}]},"passage":{"anyOf":[{"type":"string"},{"type":"null"}]},"before":{"type":"number"},"after":{"type":"number"}},"required":["passageHash","heading","passage","before","after"]}},"lost":{"type":"array","items":{"type":"object","properties":{"passageHash":{"type":"string"},"heading":{"anyOf":[{"type":"string"},{"type":"null"}]},"passage":{"anyOf":[{"type":"string"},{"type":"null"}]},"before":{"type":"number"},"after":{"type":"number"}},"required":["passageHash","heading","passage","before","after"]}},"gained":{"type":"array","items":{"type":"object","properties":{"passageHash":{"type":"string"},"heading":{"anyOf":[{"type":"string"},{"type":"null"}]},"passage":{"anyOf":[{"type":"string"},{"type":"null"}]},"before":{"type":"number"},"after":{"type":"number"}},"required":["passageHash","heading","passage","before","after"]}},"ownShareBefore":{"anyOf":[{"type":"number"},{"type":"null"}]},"ownShareAfter":{"anyOf":[{"type":"number"},{"type":"null"}]},"sentencesBefore":{"type":"number"},"sentencesAfter":{"type":"number"},"changedAt":{"type":"string"},"since":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["kept","lost","gained","ownShareBefore","ownShareAfter","sentencesBefore","sentencesAfter","changedAt","since"]},{"type":"null"}]}},"required":["url","questions","answers","used","winners","churn"]}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"viewer","x-vercatus-key-scopes":["read"]}},"/sites/{id}/market-parity":{"get":{"operationId":"getSitesByIdMarketParity","tags":["Sites"],"summary":"The same question across the site's markets, per engine: which market's answer cites the site, with the right page, and why not.","description":"`?days=&engines=`: the same question across the site's markets, per engine: which market's answer cites the site, with the right page, and why not.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"days","in":"query","required":false,"schema":{"type":"string"}},{"name":"engines","in":"query","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"anyOf":[{"type":"object","properties":{"engines":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"label":{"type":"string"}},"required":["id","label"]}},"groups":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"paired":{"type":"string","enum":["text","single","embedding"]},"questions":{"type":"object","additionalProperties":{"type":"object","properties":{"id":{"type":"string"},"text":{"type":"string"}},"required":["id","text"]}},"issues":{"type":"number"},"cells":{"type":"object","additionalProperties":{"type":"object","properties":{"state":{"type":"string","enum":["ok","no_answer","issue","not_cited","not_asked"]},"questionId":{"anyOf":[{"type":"string"},{"type":"null"}]},"sampleId":{"anyOf":[{"type":"string"},{"type":"null"}]},"askedAt":{"anyOf":[{"type":"string"},{"type":"null"}]},"asks":{},"ownUrls":{},"issues":{},"causes":{}},"required":["state","questionId","sampleId","askedAt","asks","ownUrls","issues","causes"]}}},"required":["id","paired","questions","issues","cells"]}},"counts":{"type":"object","properties":{"groups":{"type":"number"},"cells":{"type":"number"},"issues":{"type":"number"},"missing":{"type":"number"},"byKind":{"type":"object","additionalProperties":{"type":"number"}}},"required":["groups","cells","issues","missing","byKind"]},"single":{"type":"boolean"},"markets":{"type":"array","items":{"type":"object","properties":{"code":{"type":"string"},"label":{"type":"string"}},"required":["code","label"]}},"method":{"type":"object","properties":{"pairCosine":{"type":"number"},"days":{"type":"number"}},"required":["pairCosine","days"]}},"required":["engines","groups","counts","single","markets","method"]},{"type":"null"}]}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"viewer","x-vercatus-key-scopes":["read"]}},"/sites/{id}/forecasts":{"get":{"operationId":"getSitesByIdForecasts","tags":["Sites"],"summary":"The forecasts registered for one finding (by its key, which runs share), newest first, each with its sentence and, once scored, what was measured.","description":"`?key=`: the forecasts registered for one finding (by its key, which runs share), newest first, each with its sentence and, once scored, what was measured. Deprecated (PHASE-4.md): a play's verdict (GET /api/sites/:id/plays/:playId/verdicts) replaces it on the screens; kept for MCP, exports and the Looker connector.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"key","in":"query","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"forecasts":{"type":"array","items":{"$ref":"#/components/schemas/Shapezo7cs2"}}},"required":["forecasts"]}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"deprecated":true,"x-vercatus-role":"viewer","x-vercatus-key-scopes":["read"]}},"/forecasts/calibration":{"get":{"operationId":"getForecastsCalibration","tags":["Findings"],"summary":"The workspace's forecast record (hit rate against the 80% interval, Brier score, reliability), or one site's, beside the platform's, with its latest forecasts.","description":"`?siteId=`: the workspace's forecast record (hit rate against the 80% interval, Brier score, reliability), or one site's, beside the platform's, with its latest forecasts. Deprecated (PHASE-4.md): a play's verdict (GET /api/sites/:id/plays/:playId/verdicts) replaces it on the screens; kept for MCP, exports and the Looker connector.","parameters":[{"name":"siteId","in":"query","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"level":{"type":"number"},"workspace":{"type":"object","properties":{"counts":{"type":"object","properties":{"open":{"type":"number"},"scored":{"type":"number"},"notScored":{"type":"number"},"skipped":{"type":"number"}},"required":["open","scored","notScored","skipped"]},"byCategory":{"type":"array","items":{"$ref":"#/components/schemas/Shaperca8xs"}},"recent":{"type":"array","items":{"$ref":"#/components/schemas/Shapezo7cs2"}},"n":{"type":"number"},"level":{"type":"number"},"hits":{"type":"number"},"hitRate":{"anyOf":[{"type":"number"},{"type":"null"}]},"hitLo":{"anyOf":[{"type":"number"},{"type":"null"}]},"hitHi":{"anyOf":[{"type":"number"},{"type":"null"}]},"brier":{"anyOf":[{"type":"number"},{"type":"null"}]},"baseRate":{"anyOf":[{"type":"number"},{"type":"null"}]},"brierBase":{"anyOf":[{"type":"number"},{"type":"null"}]},"skill":{"anyOf":[{"type":"number"},{"type":"null"}]},"bins":{"type":"array","items":{"$ref":"#/components/schemas/Shape1cego5x"}}},"required":["counts","byCategory","recent","n","level","hits","hitRate","hitLo","hitHi","brier","baseRate","brierBase","skill","bins"]},"platform":{"$ref":"#/components/schemas/Shape3gcr5p"}},"required":["level","workspace","platform"]}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"deprecated":true,"x-vercatus-role":"viewer","x-vercatus-key-scopes":["read"]}},"/org/members/{userId}/sites":{"put":{"operationId":"putOrgMembersByUserIdSites","tags":["Workspace"],"summary":"The sites this member sees; null gives an analyst or viewer every site again.","description":"`{ siteIds }`: the sites this member sees; null gives an analyst or viewer every site again. A client always sees some. Admins.","parameters":[{"name":"userId","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"siteIds":{"anyOf":[{"type":"array","items":{"type":"string"}},{"type":"null"}]}},"required":["siteIds"]}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean","enum":[true]},"siteIds":{"anyOf":[{"type":"array","items":{"type":"string"}},{"type":"null"}]}},"required":["ok","siteIds"]}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"admin","x-vercatus-key-scopes":null}},"/agency":{"get":{"operationId":"getAgency","tags":["Agencies"],"summary":"The agency's portfolio: every client workspace with its sites, cited share by engine over the last days (30; 7 to 90) with its denominator, critical and high fi","description":"The agency's portfolio: every client workspace with its sites, cited share by engine over the last `days` (30; 7 to 90) with its denominator, critical and high findings in each site's latest run, the next scheduled run, and plan use; the agency's own plan, consolidated billing and the seats and sites it counts. Owners and admins of the agency. Query: `?days=` (days back from today).","parameters":[{"name":"days","in":"query","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"agency":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"plan":{"anyOf":[{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"}},"required":["id","name"]},{"type":"null"}]},"consolidatedBilling":{"type":"boolean"},"canCreate":{"type":"boolean"},"role":{"type":"string","enum":["analyst","owner","admin","viewer","client"]}},"required":["id","name","plan","consolidatedBilling","canCreate","role"]},"billing":{"type":"object","properties":{"consolidated":{"type":"boolean"},"sites":{"type":"object","properties":{"used":{"type":"number"},"limit":{"anyOf":[{"type":"number"},{"type":"null"}]}},"required":["used","limit"]},"seats":{"$ref":"#/components/schemas/Shape1napw7e"}},"required":["consolidated","sites","seats"]},"days":{"type":"number"},"workspaces":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"createdAt":{"type":"string","format":"date-time"},"closedAt":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"sites":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"host":{"type":"string"},"verified":{"type":"boolean"}},"required":["id","host","verified"]}},"citedShare":{"type":"array","items":{"type":"object","properties":{"engine":{"type":"string"},"label":{"type":"string"},"cited":{"type":"number"},"asks":{"type":"number"}},"required":["engine","label","cited","asks"]}},"findings":{"type":"object","properties":{"critical":{"type":"number"},"high":{"type":"number"}},"required":["critical","high"]},"nextRunAt":{"type":"string"},"lastRunAt":{"anyOf":[{"type":"string"},{"type":"null"}]},"plan":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"status":{"type":"string","enum":["none","trialing","active","past_due","unpaid","canceled","incomplete","paused"]},"billedByAgency":{"type":"boolean"}},"required":["id","name","status","billedByAgency"]},"usage":{"type":"object","properties":{"sites":{"type":"number"},"siteLimit":{"anyOf":[{"type":"number"},{"type":"null"}]},"fullRunsThisMonth":{"type":"number"},"changeRunsThisMonth":{"type":"number"},"fullRunsPerSite":{"anyOf":[{"type":"number"},{"type":"null"}]}},"required":["sites","siteLimit","fullRunsThisMonth","changeRunsThisMonth","fullRunsPerSite"]}},"required":["id","name","createdAt","closedAt","sites","citedShare","findings","nextRunAt","lastRunAt","plan","usage"]}},"totals":{"type":"object","properties":{"workspaces":{"type":"number"},"sites":{"type":"number"},"critical":{"type":"number"}},"required":["workspaces","sites","critical"]}},"required":["agency","billing","days","workspaces","totals"]}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"viewer","x-vercatus-key-scopes":["read"]}},"/agency/workspaces":{"post":{"operationId":"postAgencyWorkspaces","tags":["Agencies"],"summary":"Make a client workspace.","description":"`{ name }`: make a client workspace. Its branding follows the agency's; with consolidated billing it is on the agency's plan, otherwise on the free plan until it takes its own. Owners and admins of the agency, on Portfolio or Enterprise.","requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"}},"required":["name"]}}}},"responses":{"201":{"description":"Created","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"planId":{"type":"string"},"billingStatus":{"type":"string","enum":["none","trialing","active","past_due","unpaid","canceled","incomplete","paused"]}},"required":["id","name","planId","billingStatus"]}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"viewer","x-vercatus-key-scopes":["write"]}},"/agency/billing":{"put":{"operationId":"putAgencyBilling","tags":["Agencies"],"summary":"Bill the client workspaces on the agency's subscription (and count them against its plan), or each on its own.","description":"`{ consolidated }`: bill the client workspaces on the agency's subscription (and count them against its plan), or each on its own. Switching on is refused while a client workspace has a live subscription of its own (cancel it there first, so nobody pays twice); switching off returns every client workspace without its own subscription to the free plan until it takes one. The agency's additional-site quantity follows. Owners of the agency.","requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"consolidated":{}},"required":["consolidated"]}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"anyOf":[{"type":"object","properties":{"ok":{"type":"boolean","enum":[true]},"consolidated":{"type":"boolean"},"unchanged":{"type":"boolean","enum":[true]}},"required":["ok","consolidated","unchanged"]},{"type":"object","properties":{"ok":{"type":"boolean","enum":[true]},"consolidated":{"type":"boolean"},"sites":{"type":"object","properties":{"used":{"type":"number"}},"required":["used"]}},"required":["ok","consolidated","sites"]}]}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"viewer","x-vercatus-key-scopes":["write"]}},"/agency/workspaces/{id}":{"delete":{"operationId":"deleteAgencyWorkspacesById","tags":["Agencies"],"summary":"Let a client workspace go its own way (a client leaving the agency): the agency's people no longer enter it, and a consolidated one returns to the free plan unt","description":"Let a client workspace go its own way (a client leaving the agency): the agency's people no longer enter it, and a consolidated one returns to the free plan until it takes its own. It needs an owner of its own first. Owners of the agency.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean","enum":[true]}},"required":["ok"]}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"viewer","x-vercatus-key-scopes":["write"]}},"/agency/branding":{"put":{"operationId":"putAgencyBranding","tags":["Agencies"],"summary":"In a client workspace: show the agency's branding (true; the default) or keep its own (false).","description":"`{ follow }` in a client workspace: show the agency's branding (true; the default) or keep its own (false). Admins of the client workspace.","requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"follow":{}},"required":["follow"]}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean","enum":[true]},"follow":{"type":"boolean"},"branding":{"type":"object","properties":{"productName":{"type":"string"},"logoUrl":{"type":"string"},"accentColor":{"type":"string"},"supportEmail":{"type":"string"},"customDomain":{"type":"string"},"hidePoweredBy":{"type":"boolean"}}}},"required":["ok","follow","branding"]}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"viewer","x-vercatus-key-scopes":["write"]}},"/org/model-provider":{"get":{"operationId":"getOrgModelProvider","tags":["Workspace"],"summary":"The provider as stored (no secret), whether the plan includes it, the platform model ids it will be asked for, and what a Bedrock role must trust.","description":"The provider as stored (no secret), whether the plan includes it, the platform model ids it will be asked for, and what a Bedrock role must trust.","responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"allowed":{"type":"boolean"},"provider":{"anyOf":[{"$ref":"#/components/schemas/Shape4nfea0"},{"type":"null"}]},"platformFallback":{"anyOf":[{"type":"string"},{"type":"null"}]},"models":{"type":"array","items":{"type":"string"}},"bedrockRole":{"anyOf":[{"type":"object","properties":{"trustedPrincipal":{"type":"string"},"externalId":{"type":"string"}},"required":["externalId"]},{"type":"null"}]}},"required":["allowed","provider","platformFallback","models","bedrockRole"]}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"admin","x-vercatus-key-scopes":null},"put":{"operationId":"putOrgModelProvider","tags":["Workspace"],"summary":"Each with enabled?","description":"`{ kind: \"anthropic\", apiKey }`, `{ kind: \"bedrock\", region, auth: \"keys\", accessKeyId, secretAccessKey }` or `{ kind: \"bedrock\", region, auth: \"role\", roleArn }`, `{ kind: \"vertex\", projectId, region, serviceAccountJson }`, each with `enabled?` and `models?` ({ platform model id: provider model id }). A secret left empty keeps the stored one.","requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"kind":{},"apiKey":{}},"required":["kind","apiKey"]}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"provider":{"anyOf":[{"$ref":"#/components/schemas/Shape4nfea0"},{"type":"null"}]}},"required":["provider"]}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"admin","x-vercatus-key-scopes":null},"delete":{"operationId":"deleteOrgModelProvider","tags":["Workspace"],"summary":"Remove the provider: the workspace's model calls go to the platform's provider again from the next call.","description":"Remove the provider: the workspace's model calls go to the platform's provider again from the next call.","responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean","enum":[true]}},"required":["ok"]}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"admin","x-vercatus-key-scopes":null}},"/org/model-provider/test":{"post":{"operationId":"postOrgModelProviderTest","tags":["Workspace"],"summary":"One short call through the provider: the body's settings when given (before saving them, a secret left empty uses the stored one), else the stored provider, who","description":"One short call through the provider: the body's settings when given (before saving them, a secret left empty uses the stored one), else the stored provider, whose last test is then recorded.","requestBody":{"required":false,"content":{"text/plain":{"schema":{"type":"string"}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"anyOf":[{"type":"object","properties":{"ok":{"type":"boolean","enum":[true]},"model":{"type":"string"},"ms":{"type":"number"}},"required":["ok","model","ms"]},{"type":"object","properties":{"ok":{"type":"boolean","enum":[false]},"model":{"type":"string"},"error":{"type":"string"}},"required":["ok","model","error"]}]}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"admin","x-vercatus-key-scopes":null}},"/usage/history":{"get":{"operationId":"getUsageHistory","tags":["Portfolio and board"],"summary":"The workspace's usage: the contract in force (if any), where it stands against the soft limits now, and the last twelve calendar months.","description":"The workspace's usage: the contract in force (if any), where it stands against the soft limits now, and the last twelve calendar months. `?format=csv` for the months as a spreadsheet. Model tokens and cost, the platform's and those of the workspace's own provider alike, are an operator's alone, in the JSON and the CSV (2026-10-15).","parameters":[{"name":"format","in":"query","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"months":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"month":{"type":"string"},"fullRuns":{"type":"number"},"changeRuns":{"type":"number"},"promptChecks":{"type":"number"},"winnerAnalyses":{"type":"number"},"rewrites":{"type":"number"},"pagesFetched":{"type":"number"},"ownProviderTokens":{"type":"number"},"ownProviderUsd":{"type":"number"},"platformTokens":{"type":"number"},"platformUsd":{"type":"number"}},"required":["month","fullRuns","changeRuns","promptChecks","winnerAnalyses","rewrites","pagesFetched","ownProviderTokens","ownProviderUsd","platformTokens","platformUsd"]},{"type":"object","properties":{"month":{"type":"string"},"fullRuns":{"type":"number"},"changeRuns":{"type":"number"},"promptChecks":{"type":"number"},"winnerAnalyses":{"type":"number"},"rewrites":{"type":"number"},"pagesFetched":{"type":"number"}},"required":["month","fullRuns","changeRuns","promptChecks","winnerAnalyses","rewrites","pagesFetched"]}]}},"ownProvider":{"type":"boolean"},"contract":{"anyOf":[{"type":"object","properties":{"termStart":{"type":"string","format":"date-time"},"termEnd":{"type":"string","format":"date-time"},"seats":{"anyOf":[{"type":"number"},{"type":"null"}]},"sites":{"anyOf":[{"type":"number"},{"type":"null"}]},"allowances":{"type":"object","properties":{"fullRunsPerMonth":{"type":"number"},"lightRunsPerMonth":{"type":"number"},"pagesPerRun":{"type":"number"},"promptChecksPerMonth":{"type":"number"},"trackedPrompts":{"type":"number"},"winnerAnalysesPerMonth":{"type":"number"},"rewritesPerMonth":{"type":"number"},"articlesPerMonth":{"type":"number"},"assistantQuestionsPerDay":{"type":"number"},"monthlyTokenBudget":{"type":"number"},"topics":{"type":"number"},"pollAsksPerMonth":{"type":"number"}}},"poNumber":{"anyOf":[{"type":"string"},{"type":"null"}]},"invoiceDays":{"type":"number"},"invoicing":{"type":"string","enum":["stripe","outside"]}},"required":["termStart","termEnd","seats","sites","allowances","poNumber","invoiceDays","invoicing"]},{"type":"null"}]},"soft":{"anyOf":[{"type":"object","properties":{"windowStart":{"type":"string","format":"date-time"},"resetsAt":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"metrics":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string","enum":["prompt_checks","seats","full_runs","change_runs"]},"used":{"type":"number"},"limit":{"type":"number"},"site":{"type":"object","properties":{"id":{"type":"string"},"host":{"type":"string"}},"required":["id","host"]}},"required":["key","used","limit"]}}},"required":["windowStart","resetsAt","metrics"]},{"type":"null"}]}},"required":["months","ownProvider","contract","soft"]}},"text/csv":{"schema":{"type":"string","description":"RFC 4180, UTF-8, CRLF line ends; streamed. A stream that fails part-way ends the connection (a short file is never a clean end)."}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"viewer","x-vercatus-key-scopes":["read"]}},"/report-schedules":{"get":{"operationId":"getReportSchedules","tags":["Scheduled reports"],"summary":"The workspace's schedules the caller may see, newest first, each with its last send; the formats each kind takes.","description":"The workspace's schedules the caller may see, newest first, each with its last send; the formats each kind takes.","responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"schedules":{"type":"array","items":{"$ref":"#/components/schemas/Shape1kv1hfi"}},"formats":{"type":"object","properties":{"results":{"type":"array","items":{"type":"string","enum":["pdf","html-link","csv"]}},"board":{"type":"array","items":{"type":"string","enum":["pdf","html-link","csv"]}},"review":{"type":"array","items":{"type":"string","enum":["pdf","html-link","csv"]}},"brief":{"type":"array","items":{"type":"string","enum":["pdf","html-link","csv"]}},"visibility-export":{"type":"array","items":{"type":"string","enum":["pdf","html-link","csv"]}},"digest":{"type":"array","items":{"type":"string","enum":["pdf","html-link","csv"]}}},"required":["results","board","review","brief","visibility-export","digest"]},"withEngines":{"type":"array","items":{"type":"string","enum":["results","board","review","brief","visibility-export","digest"]}},"emailEnabled":{"type":"boolean"}},"required":["schedules","formats","withEngines","emailEnabled"]}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"viewer","x-vercatus-key-scopes":["read"]},"post":{"operationId":"postReportSchedules","tags":["Scheduled reports"],"summary":"A new schedule; its first send is the next slot.","description":"`{ name, kind, cadence, dayOfWeek?, dayOfMonth?, hour, timezone, siteIds (null: every site), engines (null: every engine), recipients, format }`: a new schedule; its first send is the next slot.","requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"name":{},"kind":{},"cadence":{},"dayOfWeek":{},"dayOfMonth":{},"hour":{},"timezone":{},"recipients":{},"format":{}},"required":["name","kind","cadence","hour","timezone","recipients","format"]}}}},"responses":{"201":{"description":"Created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Shapeocny73"}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"analyst","x-vercatus-key-scopes":["write"]}},"/report-schedules/{id}":{"patch":{"operationId":"patchReportSchedulesById","tags":["Scheduled reports"],"summary":"Change a schedule, pause it ({ paused: true }) or resume it; the next send is worked out again.","description":"Change a schedule, pause it (`{ paused: true }`) or resume it; the next send is worked out again.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"name":{},"kind":{},"cadence":{},"dayOfWeek":{},"dayOfMonth":{},"hour":{},"timezone":{},"siteIds":{},"engines":{},"recipients":{},"format":{},"paused":{}}}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Shapeocny73"}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"analyst","x-vercatus-key-scopes":["write"]},"delete":{"operationId":"deleteReportSchedulesById","tags":["Scheduled reports"],"summary":"Delete a schedule and its history; review links it already sent keep working until they expire or are revoked.","description":"Delete a schedule and its history; review links it already sent keep working until they expire or are revoked.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean","enum":[true]}},"required":["ok"]}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"analyst","x-vercatus-key-scopes":["write"]}},"/report-schedules/{id}/send":{"post":{"operationId":"postReportSchedulesByIdSend","tags":["Scheduled reports"],"summary":"Send it now for the period ending today, whatever its cadence says; counts against the daily email cap.","description":"Send it now for the period ending today, whatever its cadence says; counts against the daily email cap. The next scheduled send stays as it was.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"type":"string","enum":["failed","skipped","sent"]},"reason":{"type":"string"},"to":{"type":"array","items":{"type":"string"}},"window":{"type":"object","properties":{"from":{"type":"string","format":"date-time"},"to":{"type":"string","format":"date-time"}},"required":["from","to"]}},"required":["status","to"]}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"analyst","x-vercatus-key-scopes":["write"]}},"/report-schedules/{id}/sends":{"get":{"operationId":"getReportSchedulesByIdSends","tags":["Scheduled reports"],"summary":"Its sends, newest first (the last 50): when, by the schedule or by a person, to whom, the period, and why one did not go.","description":"Its sends, newest first (the last 50): when, by the schedule or by a person, to whom, the period, and why one did not go.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"sends":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"at":{"type":"string","format":"date-time"},"trigger":{"type":"string","enum":["schedule","manual"]},"status":{"type":"string","enum":["failed","skipped","sent"]},"recipients":{"type":"array","items":{"type":"string"}},"windowFrom":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"windowTo":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"reason":{"anyOf":[{"type":"string"},{"type":"null"}]},"attachments":{"type":"array","items":{"type":"string"}}},"required":["id","at","trigger","status","recipients","windowFrom","windowTo","reason","attachments"]}}},"required":["sends"]}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"viewer","x-vercatus-key-scopes":["read"]}},"/sites/{id}/move":{"get":{"operationId":"getSitesByIdMove","tags":["Sites"],"summary":"Where this site can move: every other workspace the caller administers (their own as owner or admin, and an agency's client workspaces), each with its plan's si","description":"Where this site can move: every other workspace the caller administers (their own as owner or admin, and an agency's client workspaces), each with its plan's sites used and left (a consolidated agency group counts as one, so a move inside it takes no room) and why it cannot take the site, if it cannot; plus whether a run is in progress. Owners and admins, signed in.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"moves":{"type":"array","items":{"type":"string"}},"stays":{"type":"array","items":{"type":"string"}},"site":{"type":"object","properties":{"id":{"type":"string"},"host":{"type":"string"},"verified":{"type":"boolean"},"method":{"anyOf":[{"type":"string","enum":["meta","dns","search_console","workspace"]},{"type":"null"}]}},"required":["id","host","verified","method"]},"from":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"}},"required":["id","name"]},"runInProgress":{"type":"boolean"},"targets":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"relation":{"type":"string"},"sites":{"type":"object","properties":{"used":{"type":"number"},"limit":{"anyOf":[{"type":"number"},{"type":"null"}]},"remaining":{"type":"number"},"sharedPlan":{"type":"boolean"}},"required":["used","limit","remaining","sharedPlan"]},"plan":{"anyOf":[{"type":"string"},{"type":"null"}]},"eligible":{"type":"boolean"},"reason":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["id","name","relation","sites","plan","eligible","reason"]}}},"required":["moves","stays","site","from","runInProgress","targets"]}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"admin","x-vercatus-key-scopes":null},"post":{"operationId":"postSitesByIdMove","tags":["Sites"],"summary":"With the site's host typed back: move the site, with everything measured on it and its verification, to another workspace the caller administers.","description":"`{ targetOrgId, confirm }` with the site's host typed back: move the site, with everything measured on it and its verification, to another workspace the caller administers. 409 while one of its runs is queued or running, when the other workspace already has the host, or when either workspace is closed; 402 at the other plan's site cap; 403 when the caller does not administer the other workspace. Both audit logs record it (`site.move.out`, `site.move.in`), both workspaces get a notice, and both billed site counts follow.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"targetOrgId":{},"confirm":{}},"required":["targetOrgId","confirm"]}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean","enum":[true]},"siteId":{"type":"string"},"host":{"type":"string"},"to":{"type":"string"},"at":{"type":"string"},"moved":{"type":"object","additionalProperties":{"type":"number"}},"dropped":{"type":"object","properties":{"reportSchedules":{"type":"number"},"schedulesPaused":{"type":"number"},"reviewLinks":{"type":"number"},"reviewLinksRevoked":{"type":"number"},"savedViews":{"type":"number"},"savedViewsDeleted":{"type":"number"},"apiKeys":{"type":"number"},"apiKeysRevoked":{"type":"number"},"invites":{"type":"number"},"groupMappings":{"type":"number"},"limitedMembers":{"type":"number"},"notifications":{"type":"number"},"watchersLeft":{"type":"number"}},"required":["reportSchedules","schedulesPaused","reviewLinks","reviewLinksRevoked","savedViews","savedViewsDeleted","apiKeys","apiKeysRevoked","invites","groupMappings","limitedMembers","notifications","watchersLeft"]}},"required":["ok","siteId","host","to","at","moved","dropped"]}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"admin","x-vercatus-key-scopes":null}},"/org/sites/verified-elsewhere":{"get":{"operationId":"getOrgSitesVerifiedElsewhere","tags":["Workspace"],"summary":"Whether adding this host here would be verified at once, because the caller verified it in another workspace they administer; names that workspace.","description":"`?url=`: whether adding this host here would be verified at once, because the caller verified it in another workspace they administer; names that workspace. Nothing about workspaces the caller does not run is said.","parameters":[{"name":"url","in":"query","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"anyOf":[{"type":"object","properties":{"host":{"type":"null"},"workspace":{"type":"null"}},"required":["host","workspace"]},{"type":"object","properties":{"host":{"type":"string"},"workspace":{"type":"null"},"verifiedHere":{"type":"boolean","enum":[true]}},"required":["host","workspace","verifiedHere"]},{"type":"object","properties":{"host":{"type":"string"},"workspace":{"anyOf":[{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"}},"required":["id","name"]},{"type":"null"}]},"verifiedHere":{"type":"boolean","enum":[false]}},"required":["host","workspace","verifiedHere"]}]}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"analyst","x-vercatus-key-scopes":["read"]}},"/journey":{"get":{"operationId":"getJourney","tags":["The Journey"],"summary":"The Journey, ?siteId=.","description":"The Journey, `?siteId=`. With a site: its frozen starting point, the visibility index then and now with its interval, the claim the data supports (baselining, too early, moving, unclear, proven, flat, declined) and why, the three parts (reach, readiness, citation) with their changes, the run-by-run series, the fix ledger (fixed, open, waiting for a full run, can't tell, regressed, won't fix; marked or not), the contribution of the questions the fixes touch against the rest, the peers' move, MOS, the pages that changed, the 28-day outcomes before and now, and what can and cannot be said. Without a site: the same headline figures for every site the caller sees, one row each. Deprecated (PHASE-4.md): Results (GET /api/sites/:id/results) replaces it on the screens; kept for MCP, exports and the Looker connector. Still read by the web in four places, none of which shows a multiple or a bare change since the start (the audit's \"one growth number\": Answer Share with its range, from Results, is the only since-start figure): the scope bar's anchor date, the Overview's count of answers that cite the site in the latest full run, its Projected tile, and the play's older fix-effect estimate (with `?siteId=`).","parameters":[{"name":"siteId","in":"query","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"anyOf":[{"type":"object","properties":{"siteId":{"type":"string"},"host":{"type":"string"},"baseline":{"anyOf":[{"type":"object","properties":{"id":{"type":"string"},"anchorAt":{"type":"string"},"runId":{"anyOf":[{"type":"string"},{"type":"null"}]},"kind":{"type":"string"},"days":{"type":"number"},"note":{"anyOf":[{"type":"string"},{"type":"null"}]},"unavailable":{"type":"array","items":{"type":"string"}}},"required":["id","anchorAt","runId","kind","days","note","unavailable"]},{"type":"null"}]},"claim":{"type":"object","properties":{"state":{"type":"string","enum":["unclear","too_early","flat","proven","baselining","moving","declined"]},"label":{"type":"string"},"reason":{"type":"string"}},"required":["state","label","reason"]},"headline":{"anyOf":[{"type":"string"},{"type":"null"}]},"index":{"anyOf":[{"type":"object","properties":{"before":{"anyOf":[{"$ref":"#/components/schemas/Shape1i2s94s"},{"type":"null"}]},"now":{"anyOf":[{"$ref":"#/components/schemas/Shape1i2s94s"},{"type":"null"}]},"change":{"anyOf":[{"type":"object","properties":{"delta":{"type":"number"},"lo":{"type":"number"},"hi":{"type":"number"}},"required":["delta","lo","hi"]},{"type":"null"}]},"missing":{"type":"array","items":{"type":"string"}},"matched":{"anyOf":[{"type":"object","properties":{"before":{"anyOf":[{"$ref":"#/components/schemas/Shape1i2s94s"},{"type":"null"}]},"now":{"anyOf":[{"$ref":"#/components/schemas/Shape1i2s94s"},{"type":"null"}]},"questions":{"type":"number"}},"required":["before","now","questions"]},{"type":"null"}]}},"required":["before","now","change","missing"]},{"type":"null"}]},"parts":{"anyOf":[{"type":"object","properties":{"reach":{"$ref":"#/components/schemas/Shape1ogrd47"},"readiness":{"$ref":"#/components/schemas/Shape1ogrd47"},"citation":{"type":"object","properties":{"before":{"anyOf":[{"type":"object","properties":{"pct":{"type":"number"},"lo":{"type":"number"},"hi":{"type":"number"},"n":{"type":"number"},"k":{"type":"number"}},"required":["pct","lo","hi","n","k"]},{"type":"null"}]},"now":{"anyOf":[{"type":"object","properties":{"pct":{"type":"number"},"lo":{"type":"number"},"hi":{"type":"number"},"n":{"type":"number"},"k":{"type":"number"}},"required":["pct","lo","hi","n","k"]},{"type":"null"}]},"change":{"anyOf":[{"type":"object","properties":{"delta":{"type":"number"},"lo":{"type":"number"},"hi":{"type":"number"}},"required":["delta","lo","hi"]},{"type":"null"}]},"asOf":{"anyOf":[{"type":"string"},{"type":"null"}]},"paired":{"anyOf":[{"type":"object","properties":{"matched":{"type":"number"},"beforeCited":{"type":"number"},"nowCited":{"type":"number"},"gains":{"type":"number"},"losses":{"type":"number"},"before":{"type":"number"},"now":{"type":"number"},"delta":{"type":"number"},"lo":{"type":"number"},"hi":{"type":"number"},"pUp":{"type":"number"},"pDown":{"type":"number"}},"required":["matched","beforeCited","nowCited","gains","losses","before","now","delta","lo","hi","pUp","pDown"]},{"type":"null"}]},"partial":{"type":"boolean"}},"required":["before","now","change","asOf","paired","partial"]}},"required":["reach","readiness","citation"]},{"type":"null"}]},"latest":{"type":"object","properties":{"full":{"anyOf":[{"type":"object","properties":{"id":{"type":"string"},"at":{"type":"string"}},"required":["id","at"]},{"type":"null"}]},"any":{"anyOf":[{"type":"object","properties":{"id":{"type":"string"},"at":{"type":"string"},"kind":{"type":"string"}},"required":["id","at","kind"]},{"type":"null"}]}},"required":["full","any"]},"series":{"type":"array","items":{"type":"object","properties":{"runId":{"type":"string"},"at":{"type":"string"},"kind":{"type":"string","enum":["full","light"]},"reach":{"anyOf":[{"type":"number"},{"type":"null"}]},"readiness":{"anyOf":[{"type":"number"},{"type":"null"}]},"citation":{"anyOf":[{"type":"number"},{"type":"null"}]},"index":{"anyOf":[{"type":"number"},{"type":"null"}]},"critical":{"type":"number"},"total":{"type":"number"},"answers":{"anyOf":[{"type":"number"},{"type":"null"}]}},"required":["runId","at","kind","reach","readiness","citation","index","critical","total","answers"]}},"answers":{"anyOf":[{"$ref":"#/components/schemas/Shape19yqio1"},{"type":"null"}]},"findings":{"anyOf":[{"type":"object","properties":{"before":{"type":"object","properties":{"critical":{"type":"number"},"high":{"type":"number"},"medium":{"type":"number"},"low":{"type":"number"},"info":{"type":"number"},"total":{"type":"number"}},"required":["critical","high","medium","low","info","total"]},"now":{"anyOf":[{"type":"object","properties":{"critical":{"type":"number"},"high":{"type":"number"},"medium":{"type":"number"},"low":{"type":"number"},"info":{"type":"number"},"total":{"type":"number"}},"required":["critical","high","medium","low","info","total"]},{"type":"null"}]}},"required":["before","now"]},{"type":"null"}]},"ledger":{"anyOf":[{"type":"object","properties":{"rows":{"type":"array","items":{"type":"object","properties":{"status":{"type":"string"},"source":{"type":"string"},"key":{"type":"string"},"title":{"type":"string"},"category":{"type":"string"},"scope":{"type":"string"},"scopeRef":{"anyOf":[{"type":"string"},{"type":"null"}]},"severity":{"type":"string"},"state":{"type":"string","enum":["fixed","open","wont_fix","waiting","cant_tell","regressed"]},"fixedAt":{"anyOf":[{"type":"string"},{"type":"null"}]},"fixedRunId":{"anyOf":[{"type":"string"},{"type":"null"}]},"lastSeenAt":{"anyOf":[{"type":"string"},{"type":"null"}]},"reason":{"anyOf":[{"type":"string"},{"type":"null"}]},"touched":{"anyOf":[{"type":"object","properties":{"questions":{"type":"number"},"before":{"type":"number"},"now":{"type":"number"}},"required":["questions","before","now"]},{"type":"null"}]},"grade":{"anyOf":[{"type":"string","enum":["A","B","C","D"]},{"type":"null"}]},"liveTier":{"anyOf":[{"type":"string"},{"type":"null"}]},"liveAt":{"anyOf":[{"type":"string"},{"type":"null"}]},"findingId":{"type":"string"}},"required":["status","source","key","title","category","scope","scopeRef","severity","state","fixedAt","fixedRunId","lastSeenAt","reason"]}},"counts":{"type":"object","properties":{"fixed":{"type":"number"},"open":{"type":"number"},"wont_fix":{"type":"number"},"waiting":{"type":"number"},"cant_tell":{"type":"number"},"regressed":{"type":"number"}},"required":["fixed","open","wont_fix","waiting","cant_tell","regressed"]},"total":{"type":"number"},"weightedFixed":{"anyOf":[{"type":"number"},{"type":"null"}]},"introduced":{"anyOf":[{"type":"object","properties":{"total":{"type":"number"},"critical":{"type":"number"},"high":{"type":"number"}},"required":["total","critical","high"]},{"type":"null"}]}},"required":["rows","counts","total","weightedFixed","introduced"]},{"type":"null"}]},"machine":{"type":"object","properties":{"pagesAiBlocked":{"anyOf":[{"type":"object","properties":{"before":{"type":"number"},"now":{"type":"number"}},"required":["before","now"]},{"type":"null"}]},"pagesOk":{"anyOf":[{"type":"object","properties":{"before":{"type":"number"},"now":{"type":"number"}},"required":["before","now"]},{"type":"null"}]},"pagesChanged":{"anyOf":[{"type":"object","properties":{"total":{"type":"number"},"askedFor":{"type":"number"},"other":{"type":"number"}},"required":["total","askedFor","other"]},{"type":"null"}]},"mos":{"type":"object","properties":{"before":{"anyOf":[{"type":"number"},{"type":"null"}]},"now":{"anyOf":[{"type":"number"},{"type":"null"}]},"peers":{"type":"array","items":{"type":"object","properties":{"host":{"type":"string"},"before":{"anyOf":[{"type":"number"},{"type":"null"}]},"now":{"anyOf":[{"type":"number"},{"type":"null"}]}},"required":["host","before","now"]}}},"required":["before","now","peers"]}},"required":["pagesAiBlocked","pagesOk","pagesChanged","mos"]},"contribution":{"anyOf":[{"type":"object","properties":{"matched":{"type":"number"},"groups":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","enum":["treated","untouched"]},"label":{"type":"string"},"questions":{"type":"number"},"gains":{"type":"number"},"losses":{"type":"number"},"before":{"anyOf":[{"type":"number"},{"type":"null"}]},"now":{"anyOf":[{"type":"number"},{"type":"null"}]},"groupDelta":{"anyOf":[{"type":"number"},{"type":"null"}]},"points":{"type":"number"}},"required":["id","label","questions","gains","losses","before","now","groupDelta","points"]}},"total":{"type":"number"}},"required":["matched","groups","total"]},{"type":"null"}]},"peers":{"type":"object","properties":{"moves":{"type":"array","items":{"type":"object","properties":{"host":{"type":"string"},"declared":{"type":"boolean"},"before":{"type":"number"},"now":{"type":"number"},"delta":{"type":"number"},"se":{"type":"number"}},"required":["host","declared","before","now","delta","se"]}},"median":{"anyOf":[{"type":"number"},{"type":"null"}]},"medianSe":{"anyOf":[{"type":"number"},{"type":"null"}]},"adjusted":{"anyOf":[{"type":"object","properties":{"delta":{"type":"number"},"lo":{"type":"number"},"hi":{"type":"number"}},"required":["delta","lo","hi"]},{"type":"null"}]},"ahead":{"anyOf":[{"type":"object","properties":{"before":{"type":"number"},"now":{"type":"number"},"of":{"type":"number"}},"required":["before","now","of"]},{"type":"null"}]}},"required":["moves","median","adjusted","ahead"]},"outcomes":{"type":"object","properties":{"days":{"type":"number"},"sessions":{"type":"object","properties":{"before":{"anyOf":[{"type":"number"},{"type":"null"}]},"now":{"anyOf":[{"type":"number"},{"type":"null"}]}},"required":["before","now"]},"keyEvents":{"type":"object","properties":{"before":{"anyOf":[{"type":"number"},{"type":"null"}]},"now":{"anyOf":[{"type":"number"},{"type":"null"}]}},"required":["before","now"]},"crawl":{"type":"object","properties":{"before":{"anyOf":[{"type":"number"},{"type":"null"}]},"now":{"anyOf":[{"type":"number"},{"type":"null"}]}},"required":["before","now"]},"refusedShare":{"type":"object","properties":{"before":{"anyOf":[{"type":"number"},{"type":"null"}]},"now":{"anyOf":[{"type":"number"},{"type":"null"}]}},"required":["before","now"]}},"required":["days","sessions","keyEvents","crawl","refusedShare"]},"proof":{"anyOf":[{"type":"object","properties":{"funnel":{"type":"object","properties":{"found":{"type":"number"},"decided":{"type":"number"},"live":{"type":"number"},"liveDated":{"type":"number"},"noticed":{"anyOf":[{"type":"number"},{"type":"null"}]},"linked":{"type":"number"},"measured":{"type":"number"},"caused":{"type":"number"}},"required":["found","decided","live","liveDated","noticed","linked","measured","caused"]},"byGrade":{"anyOf":[{"type":"object","properties":{"matched":{"type":"number"},"rows":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","enum":["none","consistent","caused"]},"label":{"type":"string"},"questions":{"type":"number"},"gains":{"type":"number"},"losses":{"type":"number"},"points":{"type":"number"}},"required":["id","label","questions","gains","losses","points"]}},"total":{"type":"number"},"unexplained":{"type":"number"}},"required":["matched","rows","total","unexplained"]},{"type":"null"}]},"improve":{"type":"array","items":{"type":"object","properties":{"text":{"type":"string"},"to":{"type":"string"}},"required":["text"]}},"chains":{"type":"object","additionalProperties":{"type":"object","properties":{"key":{"type":"string"},"title":{"type":"string"},"severity":{"type":"string"},"category":{"type":"string"},"state":{"type":"string","enum":["fixed","open","wont_fix","waiting","cant_tell","regressed"]},"stages":{"type":"array","items":{}},"linked":{"type":"object","properties":{"questions":{"type":"number"},"matched":{"type":"number"},"groupMatched":{"type":"number"},"citedBefore":{"type":"number"},"citedNow":{"type":"number"},"pages":{"type":"number"}},"required":["questions","matched","groupMatched","citedBefore","citedNow","pages"]},"effect":{"anyOf":[{"type":"object","properties":{"kpi":{"type":"string","enum":["citation"]},"treated":{"type":"number"},"control":{"type":"number"},"nTreated":{"type":"number"},"nControl":{"type":"number"},"effect":{},"crude":{},"stratified":{"type":"boolean"},"strata":{},"fdr":{"type":"boolean"},"tests":{"type":"number"}},"required":["kpi","treated","control","nTreated","nControl","effect"]},{"type":"null"}]},"grade":{"type":"string","enum":["A","B","C","D"]},"gradeWhy":{"type":"string"},"gradeWord":{"type":"string"},"groupSize":{"type":"number"},"groupId":{"anyOf":[{"type":"string"},{"type":"null"}]},"confounders":{"type":"array","items":{}},"holdout":{"anyOf":[{"$ref":"#/components/schemas/Shapefcaa6v"},{"type":"null"}]},"sentence":{"type":"string"}},"required":["key","title","severity","category","state","stages","linked","effect","grade","gradeWhy","gradeWord","groupSize","groupId","confounders","holdout","sentence"]}},"gradeVersion":{"type":"number"}},"required":["funnel","byGrade","improve","chains","gradeVersion"]},{"type":"null"}]},"forecast":{"anyOf":[{"type":"object","properties":{"trajectory":{"anyOf":[{"type":"object","properties":{"slopePerWeek":{"type":"number"},"r2":{"type":"number"},"projections":{"type":"array","items":{"type":"object","properties":{"day":{"type":"number"},"value":{"type":"number"},"lo":{"type":"number"},"hi":{"type":"number"}},"required":["day","value","lo","hi"]}},"basis":{"type":"object","properties":{"points":{"type":"number"},"spanDays":{"type":"number"}},"required":["points","spanDays"]}},"required":["slopePerWeek","r2","projections","basis"]},{"type":"object","properties":{"withheld":{"type":"string"}},"required":["withheld"]}]},"headroom":{"anyOf":[{"type":"object","properties":{"rate":{"type":"object","properties":{"gained":{"type":"number"},"of":{"type":"number"},"pct":{"type":"number"},"lo":{"type":"number"},"hi":{"type":"number"}},"required":["gained","of","pct","lo","hi"]},"control":{"type":"object","properties":{"gained":{"type":"number"},"of":{"type":"number"},"pct":{"type":"number"},"lo":{"type":"number"},"hi":{"type":"number"}},"required":["gained","of","pct","lo","hi"]},"net":{"type":"object","properties":{"pct":{"type":"number"},"lo":{"type":"number"},"hi":{"type":"number"}},"required":["pct","lo","hi"]},"openUncited":{"type":"number"},"expected":{"type":"object","properties":{"points":{"type":"number"},"lo":{"type":"number"},"hi":{"type":"number"}},"required":["points","lo","hi"]},"peerGap":{"anyOf":[{"type":"number"},{"type":"null"}]}},"required":["rate","control","net","openUncited","expected","peerGap"]},{"type":"object","properties":{"withheld":{"type":"string"}},"required":["withheld"]}]}},"required":["trajectory","headroom"]},{"type":"null"}]},"value":{"type":"object","properties":{"assumptions":{"anyOf":[{"type":"object","properties":{"perSession":{"anyOf":[{"type":"number"},{"type":"null"}]},"perKeyEvent":{"anyOf":[{"type":"number"},{"type":"null"}]},"currency":{"anyOf":[{"type":"string"},{"type":"null"}]},"updatedAt":{"type":"string"}},"required":["perSession","perKeyEvent","currency"]},{"type":"null"}]},"sinceStart":{"anyOf":[{"type":"object","properties":{"sessions":{"anyOf":[{"type":"number"},{"type":"null"}]},"keyEvents":{"anyOf":[{"type":"number"},{"type":"null"}]},"from":{"type":"string"},"complete":{"type":"boolean"}},"required":["sessions","keyEvents","from","complete"]},{"type":"null"}]},"worth":{"anyOf":[{"type":"object","properties":{"amount":{"type":"number"},"currency":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["amount","currency"]},{"type":"null"}]}},"required":["assumptions","sinceStart","worth"]},"can":{"type":"array","items":{"type":"string"}},"cannot":{"type":"array","items":{"type":"string"}},"next":{"anyOf":[{"type":"object","properties":{"day":{"type":"number"},"label":{"type":"string"}},"required":["day","label"]},{"type":"null"}]}},"required":["siteId","host","baseline","claim","headline","index","parts","latest","series","answers","findings","ledger","machine","contribution","peers","outcomes","proof","forecast","value","can","cannot","next"]},{"type":"object","properties":{"sites":{"type":"array","items":{"type":"object","properties":{"siteId":{"type":"string"},"host":{"type":"string"},"baseline":{"anyOf":[{"type":"object","properties":{"anchorAt":{"type":"string"},"days":{"type":"number"}},"required":["anchorAt","days"]},{"type":"null"}]},"claim":{"type":"object","properties":{"state":{"type":"string","enum":["unclear","too_early","flat","proven","baselining","moving","declined"]},"label":{"type":"string"},"reason":{"type":"string"}},"required":["state","label","reason"]},"headline":{"anyOf":[{"type":"string"},{"type":"null"}]},"index":{"anyOf":[{"type":"object","properties":{"before":{"anyOf":[{"type":"number"},{"type":"null"}]},"now":{"anyOf":[{"type":"number"},{"type":"null"}]},"change":{"anyOf":[{"type":"object","properties":{"delta":{"type":"number"},"lo":{"type":"number"},"hi":{"type":"number"}},"required":["delta","lo","hi"]},{"type":"null"}]}},"required":["before","now","change"]},{"type":"null"}]},"answers":{"anyOf":[{"$ref":"#/components/schemas/Shape19yqio1"},{"type":"null"}]},"series":{"type":"array","items":{"type":"object","properties":{"at":{"type":"string"},"answers":{"anyOf":[{"type":"number"},{"type":"null"}]},"citation":{"anyOf":[{"type":"number"},{"type":"null"}]}},"required":["at","answers","citation"]}},"cited":{"anyOf":[{"type":"object","properties":{"before":{"type":"number"},"now":{"type":"number"},"matched":{"type":"number"},"delta":{"type":"number"},"gains":{"type":"number"},"losses":{"type":"number"}},"required":["before","now","matched","delta","gains","losses"]},{"type":"null"}]},"potential":{"anyOf":[{"type":"object","properties":{"openUncited":{"type":"number"},"expected":{"type":"object","properties":{"points":{"type":"number"},"lo":{"type":"number"},"hi":{"type":"number"}},"required":["points","lo","hi"]},"rate":{"type":"object","properties":{"gained":{"type":"number"},"of":{"type":"number"},"pct":{"type":"number"},"lo":{"type":"number"},"hi":{"type":"number"}},"required":["gained","of","pct","lo","hi"]}},"required":["openUncited","expected","rate"]},{"type":"null"}]},"peers":{"anyOf":[{"type":"object","properties":{"median":{"type":"number"},"medianSe":{"anyOf":[{"type":"number"},{"type":"null"}]},"adjusted":{"anyOf":[{"type":"number"},{"type":"null"}]},"adjustedLo":{"anyOf":[{"type":"number"},{"type":"null"}]},"adjustedHi":{"anyOf":[{"type":"number"},{"type":"null"}]}},"required":["median","medianSe","adjusted","adjustedLo","adjustedHi"]},{"type":"null"}]},"proven":{"anyOf":[{"type":"object","properties":{"caused":{"type":"number"},"fixed":{"type":"number"},"top":{"type":"array","items":{}}},"required":["caused","fixed","top"]},{"type":"null"}]},"fixes":{"anyOf":[{"type":"object","properties":{"fixed":{"type":"number"},"total":{"type":"number"},"open":{"type":"number"},"weightedFixed":{"anyOf":[{"type":"number"},{"type":"null"}]}},"required":["fixed","total","open","weightedFixed"]},{"type":"null"}]},"next":{"anyOf":[{"type":"object","properties":{"day":{"type":"number"},"label":{"type":"string"}},"required":["day","label"]},{"type":"null"}]}},"required":["siteId","host","baseline","claim","headline","index","answers","series","cited","potential","peers","proven","fixes","next"]}}},"required":["sites"]}]}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"deprecated":true,"x-vercatus-role":"viewer","x-vercatus-key-scopes":["read"]}},"/findings/{id}/outcome":{"get":{"operationId":"getFindingsByIdOutcome","tags":["Findings"],"summary":"What a finding is expected to do, by finding id: the change in cited share on the questions its pages serve (points and questions, with a range) and how well th","description":"What a finding is expected to do, by finding id: the change in cited share on the questions its pages serve (points and questions, with a range) and how well that is known: measured on this site, measured across at least five sites, modelled by the citation model, estimated by Vercatus' forecast, documented by research with no size, or no effect claimed. It names the evidence in a sentence and carries the knowledge-base rule behind it with its grade. An estimate is never presented as a result. Deprecated (PHASE-4.md): plays and their verdicts replace it on the screens; kept for MCP, exports and the Looker connector.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"tier":{"type":"string","enum":["unknown","none","estimated","research","measured_here","measured_pooled","modelled"]},"points":{"anyOf":[{"type":"object","properties":{"expected":{"type":"number"},"lo":{"type":"number"},"hi":{"type":"number"}},"required":["expected","lo","hi"]},{"type":"null"}]},"serves":{"anyOf":[{"type":"number"},{"type":"null"}]},"questions":{"anyOf":[{"type":"object","properties":{"expected":{"type":"number"},"lo":{"type":"number"},"hi":{"type":"number"}},"required":["expected","lo","hi"]},{"type":"null"}]},"basis":{"type":"string"},"n":{"anyOf":[{"type":"object","properties":{"fixes":{"type":"number"},"sites":{"type":"number"},"positive":{"type":"number"}},"required":["fixes","sites"]},{"type":"null"}]},"research":{"anyOf":[{"type":"object","properties":{"id":{"type":"string"},"rule":{"type":"string"},"grade":{"type":"string"},"basis":{"type":"string"},"claim":{"type":"string"},"effect":{"type":"string"},"quantified":{"type":"boolean"},"neutral":{"type":"boolean"},"source":{"anyOf":[{"type":"object","properties":{"title":{"type":"string"},"url":{"type":"string"}},"required":["title","url"]},{"type":"null"}]}},"required":["id","rule","grade","basis","claim","effect","quantified","neutral","source"]},{"type":"null"}]}},"required":["tier","points","serves","questions","basis","n","research"]}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"deprecated":true,"x-vercatus-role":"viewer","x-vercatus-key-scopes":["read"]}},"/journey/next":{"get":{"operationId":"getJourneyNext","tags":["The Journey"],"summary":"The next best fixes, ?siteId=&limit=: a site's open findings ranked by how many more questions they are expected to get cited, each with its expected outcome an","description":"The next best fixes, `?siteId=&limit=`: a site's open findings ranked by how many more questions they are expected to get cited, each with its expected outcome and the evidence behind it. Findings with an estimate come first, most gain first; then the rest by severity. Without a site: the best of every site the caller can see, merged (`sites` says how many were read). Deprecated (PHASE-4.md): plays and their verdicts replace it on the screens; kept for MCP, exports and the Looker connector.","parameters":[{"name":"siteId","in":"query","required":false,"schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"anyOf":[{"type":"object","properties":{"sites":{"type":"number"},"fixes":{"type":"array","items":{"$ref":"#/components/schemas/Shapemgphum"}}},"required":["sites","fixes"]},{"type":"object","properties":{"fixes":{"type":"array","items":{"$ref":"#/components/schemas/Shapemgphum"}}},"required":["fixes"]}]}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"deprecated":true,"x-vercatus-role":"viewer","x-vercatus-key-scopes":["read"]}},"/journey/checkpoints":{"get":{"operationId":"getJourneyCheckpoints","tags":["The Journey"],"summary":"The checkpoints a site's journey has reached, ?siteId=, newest first: the day (14, 30, 60, 90, 180, 270, then each year), the claim the data supported that day,","description":"The checkpoints a site's journey has reached, `?siteId=`, newest first: the day (14, 30, 60, 90, 180, 270, then each year), the claim the data supported that day, and the figures and sentences exactly as they were sent, with who they went to. A later change of method never rewrites them. Deprecated (PHASE-4.md): Results (GET /api/sites/:id/results) replaces it on the screens; kept for MCP, exports and the Looker connector.","parameters":[{"name":"siteId","in":"query","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"checkpoints":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"day":{"type":"number"},"label":{"type":"string"},"dueAt":{"type":"string","format":"date-time"},"sentAt":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"sentTo":{"type":"array","items":{"type":"string"}},"claim":{"anyOf":[{"type":"string"},{"type":"null"}]},"sentences":{"type":"array","items":{"type":"string"}},"figures":{"type":"object","additionalProperties":{}}},"required":["id","day","label","dueAt","sentAt","sentTo","claim","sentences","figures"]}}},"required":["checkpoints"]}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"deprecated":true,"x-vercatus-role":"viewer","x-vercatus-key-scopes":["read"]}},"/sites/{id}/journey/value":{"put":{"operationId":"putSitesByIdJourneyValue","tags":["Sites"],"summary":"What an AI-referred visit and a key event are worth to this site, by site id: { perSession, perKeyEvent, currency }, each a non-negative number or null, the cur","description":"What an AI-referred visit and a key event are worth to this site, by site id: `{ perSession, perKeyEvent, currency }`, each a non-negative number or null, the currency a three-letter code. The customer's own assumption, kept on the site and used only to put a value on the sessions and key events the Journey counts, always as \"at least\" and always labelled as assumed. Analysts and above. Deprecated (PHASE-4.md): Results (GET /api/sites/:id/results) replaces it on the screens; kept for MCP, exports and the Looker connector.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"perSession":{"anyOf":[{"anyOf":[{"type":"string"},{"type":"number"}]},{"type":"null"}]},"perKeyEvent":{"anyOf":[{"anyOf":[{"type":"string"},{"type":"number"}]},{"type":"null"}]},"currency":{"anyOf":[{"type":"string"},{"type":"null"}]}}}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"value":{"anyOf":[{"type":"object","properties":{"perSession":{"anyOf":[{"type":"number"},{"type":"null"}]},"perKeyEvent":{"anyOf":[{"type":"number"},{"type":"null"}]},"currency":{"anyOf":[{"type":"string"},{"type":"null"}]},"updatedAt":{"type":"string"},"updatedBy":{"type":"string"}},"required":["perSession","perKeyEvent","currency","updatedAt","updatedBy"]},{"type":"null"}]}},"required":["value"]}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"deprecated":true,"x-vercatus-role":"analyst","x-vercatus-key-scopes":["write"]}},"/findings/{id}/chain":{"get":{"operationId":"getFindingsByIdChain","tags":["Findings"],"summary":"The proof chain of one finding, by its finding id: the six stages (found, decided, live, machines noticed, answers changed, visits) each with its date and how w","description":"The proof chain of one finding, by its finding id: the six stages (found, decided, live, machines noticed, answers changed, visits) each with its date and how well that date is known, the questions its pages serve and how many were cited then and now, the effect against the questions no fix serves, the evidence grade A to D with the reason, what else was going on in the window, and the sentence the grade supports. The finding must be one of the journey's starting point. Deprecated (PHASE-4.md): a play's verdict (GET /api/sites/:id/plays/:playId/verdicts) replaces it on the screens; kept for MCP, exports and the Looker connector.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"key":{"type":"string"},"title":{"type":"string"},"severity":{"type":"string"},"category":{"type":"string"},"state":{"type":"string","enum":["fixed","open","wont_fix","waiting","cant_tell","regressed"]},"stages":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","enum":["live","answered","outcome","decided","found","noticed"]},"label":{"type":"string"},"at":{"anyOf":[{"type":"string"},{"type":"null"}]},"tier":{"anyOf":[{"type":"string","enum":["measured","detected","reported","claimed","inferred","handed_off"]},{"type":"null"}]},"text":{"type":"string"},"measured":{"type":"boolean"}},"required":["id","label","at","tier","text","measured"]}},"linked":{"type":"object","properties":{"questions":{"type":"number"},"matched":{"type":"number"},"groupMatched":{"type":"number"},"citedBefore":{"type":"number"},"citedNow":{"type":"number"},"pages":{"type":"number"}},"required":["questions","matched","groupMatched","citedBefore","citedNow","pages"]},"effect":{"anyOf":[{"type":"object","properties":{"kpi":{"type":"string","enum":["citation"]},"treated":{"type":"number"},"control":{"type":"number"},"nTreated":{"type":"number"},"nControl":{"type":"number"},"effect":{"type":"object","properties":{"delta":{"type":"number"},"lo":{"type":"number"},"hi":{"type":"number"}},"required":["delta","lo","hi"]},"crude":{"type":"object","properties":{"delta":{"type":"number"},"lo":{"type":"number"},"hi":{"type":"number"}},"required":["delta","lo","hi"]},"stratified":{"type":"boolean"},"strata":{"type":"array","items":{"type":"object","properties":{"citedAtStart":{"type":"boolean"},"nTreated":{"type":"number"},"nControl":{"type":"number"},"treated":{"type":"number"},"control":{"type":"number"}},"required":["citedAtStart","nTreated","nControl","treated","control"]}},"fdr":{"type":"boolean"},"tests":{"type":"number"}},"required":["kpi","treated","control","nTreated","nControl","effect"]},{"type":"null"}]},"grade":{"type":"string","enum":["A","B","C","D"]},"gradeWhy":{"type":"string"},"gradeWord":{"type":"string"},"groupSize":{"type":"number"},"groupId":{"anyOf":[{"type":"string"},{"type":"null"}]},"confounders":{"type":"array","items":{"type":"object","properties":{"kind":{"type":"string","enum":["note","engine","market","deploy"]},"at":{"anyOf":[{"type":"string"},{"type":"null"}]},"text":{"type":"string"}},"required":["kind","at","text"]}},"holdout":{"anyOf":[{"$ref":"#/components/schemas/Shapefcaa6v"},{"type":"null"}]},"sentence":{"type":"string"}},"required":["key","title","severity","category","state","stages","linked","effect","grade","gradeWhy","gradeWord","groupSize","groupId","confounders","holdout","sentence"]}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"deprecated":true,"x-vercatus-role":"viewer","x-vercatus-key-scopes":["read"]}},"/findings/{id}/holdout":{"post":{"operationId":"postFindingsByIdHoldout","tags":["Findings"],"summary":"Ships a fix in stages, by finding id, { action } with action one of propose, confirm or release.","description":"Ships a fix in stages, by finding id, `{ action }` with `action` one of propose, confirm or release. A proposal splits a template's pages in two by a hash of the URL and names the window to wait; it changes nothing until confirmed. Confirming is the commitment to ship to the first half only until the window is over; releasing lets the held-back half have the change, at the end of the window or earlier. Offered only before the change is live, for a template of at least six sampled pages, and never for an access block or a critical finding. Analysts and above. Deprecated (PHASE-4.md): a play's verdict (GET /api/sites/:id/plays/:playId/verdicts) replaces it on the screens; kept for MCP, exports and the Looker connector.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"action":{"type":"string","enum":["propose","confirm","release"]}}}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"treated":{"type":"array","items":{"type":"string"}},"control":{"type":"array","items":{"type":"string"}},"windowDays":{"type":"number"},"proposedAt":{"type":"string"},"confirmedAt":{"anyOf":[{"type":"string"},{"type":"null"}]},"releasedAt":{"anyOf":[{"type":"string"},{"type":"null"}]},"by":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["treated","control","windowDays","proposedAt"]}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"deprecated":true,"x-vercatus-role":"analyst","x-vercatus-key-scopes":["write"]}},"/sites/{id}/journey/rebase":{"post":{"operationId":"postSitesByIdJourneyRebase","tags":["Sites"],"summary":"Starts a new journey for a site, { note }: the old starting point is archived and the site's latest completed full run becomes the new one.","description":"Starts a new journey for a site, `{ note }`: the old starting point is archived and the site's latest completed full run becomes the new one. For a migration or a redesign that makes the old start meaningless. The note is required and the change is audited. Admin only. Deprecated (PHASE-4.md): Results (GET /api/sites/:id/results) replaces it on the screens; kept for MCP, exports and the Looker connector.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"note":{"type":"string"}}}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"anchorAt":{"type":"string","format":"date-time"},"kind":{"type":"string","enum":["first","rebase"]}},"required":["id","anchorAt","kind"]}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"deprecated":true,"x-vercatus-role":"admin","x-vercatus-key-scopes":null}},"/journey/appearances":{"get":{"operationId":"getJourneyAppearances","tags":["The Journey"],"summary":"Deprecated (PHASE-4.md): replaced by the outcomes in GET /api/sites/:id/results.","description":"Deprecated (PHASE-4.md): replaced by the outcomes in GET /api/sites/:id/results. Appearances, `?siteId=`: how often the site was shown or cited in AI answers, over the 28 days before the Journey's starting point and the latest 28 days, in four tiers that are never added together. Reported: Search Console's generative AI impressions and Bing's AI Performance citations, from the exports uploaded for the site (null where none covers the days). Floor: assistants' user-initiated fetches and AI-referred sessions, at least this many. Estimated: question demand times the chance the panel found the site cited, per engine, with a 95% range, calibrated against a reported series where one exists. Not available: engines with no count of any kind, with the reason. Also the calibration weeks and error, and the change split into more people asking and being cited more often.","parameters":[{"name":"siteId","in":"query","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"siteId":{"type":"string"},"host":{"type":"string"},"periods":{"type":"object","properties":{"before":{"anyOf":[{"type":"object","properties":{"from":{"type":"string"},"to":{"type":"string"},"days":{"type":"number"}},"required":["from","to","days"]},{"type":"null"}]},"now":{"type":"object","properties":{"from":{"type":"string"},"to":{"type":"string"},"days":{"type":"number"}},"required":["from","to","days"]}},"required":["before","now"]},"baselineAnchor":{"anyOf":[{"type":"string"},{"type":"null"}]},"reported":{"type":"array","items":{"type":"object","properties":{"source":{"type":"string","enum":["gsc_ai","bing_ai"]},"label":{"type":"string"},"metric":{"type":"string","enum":["impressions","citations"]},"metricLabel":{"type":"string"},"imported":{"anyOf":[{"type":"object","properties":{"at":{"type":"string"},"by":{"anyOf":[{"type":"string"},{"type":"null"}]},"from":{"anyOf":[{"type":"string"},{"type":"null"}]},"to":{"anyOf":[{"type":"string"},{"type":"null"}]},"rows":{"type":"number"}},"required":["at","by","from","to","rows"]},{"type":"null"}]},"coverage":{"type":"array","items":{"type":"object","properties":{"from":{"type":"string"},"to":{"type":"string"}},"required":["from","to"]}},"before":{"type":"object","properties":{"value":{"anyOf":[{"type":"number"},{"type":"null"}]},"daysCovered":{"type":"number"},"complete":{"type":"boolean"},"reason":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["value","daysCovered","complete","reason"]},"now":{"type":"object","properties":{"value":{"anyOf":[{"type":"number"},{"type":"null"}]},"daysCovered":{"type":"number"},"complete":{"type":"boolean"},"reason":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["value","daysCovered","complete","reason"]},"topPages":{"type":"array","items":{"type":"object","properties":{"page":{"type":"string"},"value":{"type":"number"}},"required":["page","value"]}},"groundingQueries":{"type":"array","items":{"type":"object","properties":{"query":{"type":"string"},"value":{"type":"number"}},"required":["query","value"]}}},"required":["source","label","metric","metricLabel","imported","coverage","before","now","topPages","groundingQueries"]}},"floor":{"type":"object","properties":{"assistantFetches":{"type":"object","properties":{"before":{"type":"object","properties":{"value":{"anyOf":[{"type":"number"},{"type":"null"}]},"reason":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["value","reason"]},"now":{"type":"object","properties":{"value":{"anyOf":[{"type":"number"},{"type":"null"}]},"reason":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["value","reason"]},"byAssistant":{"type":"array","items":{"type":"object","properties":{"crawler":{"type":"string"},"label":{"type":"string"},"operator":{"type":"string"},"hits":{"type":"number"}},"required":["crawler","label","operator","hits"]}}},"required":["before","now","byAssistant"]},"aiSessions":{"type":"object","properties":{"before":{"type":"object","properties":{"value":{"anyOf":[{"type":"number"},{"type":"null"}]},"reason":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["value","reason"]},"now":{"type":"object","properties":{"value":{"anyOf":[{"type":"number"},{"type":"null"}]},"reason":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["value","reason"]}},"required":["before","now"]}},"required":["assistantFetches","aiSessions"]},"estimated":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"label":{"anyOf":[{"type":"string"},{"type":"null"}]},"engines":{"type":"array","items":{"type":"string"}},"basis":{"type":"string","enum":["search_console","equal"]},"calibrated":{"type":"string","enum":["none","own","pooled"]},"questions":{"type":"number"},"before":{"anyOf":[{"type":"object","properties":{"value":{"type":"number"},"lo":{"type":"number"},"hi":{"type":"number"}},"required":["value","lo","hi"]},{"type":"null"}]},"now":{"anyOf":[{"type":"object","properties":{"value":{"type":"number"},"lo":{"type":"number"},"hi":{"type":"number"}},"required":["value","lo","hi"]},{"type":"null"}]},"reason":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["id","label","engines","basis","calibrated","questions","before","now","reason"]}},"calibration":{"type":"array","items":{"type":"object","properties":{"group":{"type":"string"},"source":{"type":"string","enum":["gsc_ai","bing_ai"]},"ratio":{"anyOf":[{"type":"number"},{"type":"null"}]},"error":{"anyOf":[{"type":"number"},{"type":"null"}]},"weeks":{"type":"number"},"pairs":{"type":"array","items":{"type":"object","properties":{"week":{"type":"string"},"reported":{"type":"number"},"modelled":{"type":"number"}},"required":["week","reported","modelled"]}},"note":{"type":"string"}},"required":["group","source","ratio","error","weeks","pairs","note"]}},"demandGrowth":{"type":"array","items":{"type":"object","properties":{"basis":{"type":"string","enum":["estimate","reported"]},"total":{"anyOf":[{"type":"object","properties":{"value":{"type":"number"},"lo":{"type":"number"},"hi":{"type":"number"}},"required":["value","lo","hi"]},{"type":"null"}]},"demand":{"anyOf":[{"type":"object","properties":{"value":{"type":"number"},"lo":{"type":"number"},"hi":{"type":"number"}},"required":["value","lo","hi"]},{"type":"null"}]},"rate":{"anyOf":[{"type":"object","properties":{"value":{"type":"number"},"lo":{"type":"number"},"hi":{"type":"number"}},"required":["value","lo","hi"]},{"type":"null"}]},"both":{"anyOf":[{"type":"object","properties":{"value":{"type":"number"},"lo":{"type":"number"},"hi":{"type":"number"}},"required":["value","lo","hi"]},{"type":"null"}]},"note":{"type":"string"},"group":{"type":"string"}},"required":["basis","total","demand","rate","both","note","group"]}},"notAvailable":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"reason":{"type":"string"}},"required":["id","reason"]}},"notes":{"type":"array","items":{"type":"string"}}},"required":["siteId","host","periods","baselineAnchor","reported","floor","estimated","calibration","demandGrowth","notAvailable","notes"]}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"deprecated":true,"x-vercatus-role":"viewer","x-vercatus-key-scopes":["read"]}},"/sites/{id}/surface-reports":{"post":{"operationId":"postSitesByIdSurfaceReports","tags":["Sites"],"summary":"Uploads one export for a site, { source, csv, from?, to?","description":"Uploads one export for a site, `{ source, csv, from?, to? }`: `source` is `gsc_ai` (Search Console's generative AI report, impressions) or `bing_ai` (Bing Webmaster Tools AI Performance, citations); `csv` is the file's text, at most 5 MB and 50,000 rows. A table without a date column needs `from` and `to`, the dates the export covered. Rows of the same source, breakdown and dates are replaced. Answers the kind of table read, its date range, how many rows and what was replaced, or 400 with `errors` saying what could not be read. Analyst role; audited.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"source":{},"csv":{},"from":{},"to":{}}}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"importId":{"type":"string"},"source":{"type":"string","enum":["gsc_ai","bing_ai"]},"kind":{"type":"string"},"kinds":{"type":"array","items":{"type":"string"}},"rows":{"type":"number"},"range":{"type":"object","properties":{"from":{"type":"string"},"to":{"type":"string"}},"required":["from","to"]},"replaced":{"type":"number"},"warnings":{"type":"array","items":{"type":"string"}}},"required":["importId","source","kind","kinds","rows","range","replaced","warnings"]}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"analyst","x-vercatus-key-scopes":["write"]},"get":{"operationId":"getSitesByIdSurfaceReports","tags":["Sites"],"summary":"The exports uploaded for a site, newest first: which report, the dates it covers, how many rows, who uploaded it and when.","description":"The exports uploaded for a site, newest first: which report, the dates it covers, how many rows, who uploaded it and when.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"imports":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"source":{"type":"string","enum":["gsc_ai","bing_ai"]},"label":{"type":"string"},"from":{"anyOf":[{"type":"string"},{"type":"null"}]},"to":{"anyOf":[{"type":"string"},{"type":"null"}]},"rows":{"type":"number"},"by":{"anyOf":[{"type":"string"},{"type":"null"}]},"at":{"type":"string"}},"required":["id","source","label","from","to","rows","by","at"]}}},"required":["imports"]}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"viewer","x-vercatus-key-scopes":["read"]}},"/sites/{id}/connections":{"get":{"operationId":"getSitesByIdConnections","tags":["Sites"],"summary":"The site's Google connections that lost their grant (broken: product ga4 or gsc, its label and what stops), so a screen can say \"reconnect\" where the data would","description":"The site's Google connections that lost their grant (`broken`: product `ga4` or `gsc`, its label and what stops), so a screen can say \"reconnect\" where the data would be, instead of an empty strip. Empty while every connection works or none is made; a passing sync failure is not listed.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"broken":{"type":"array","items":{"type":"object","properties":{"product":{"type":"string","enum":["gsc","ga4"]},"label":{"type":"string"},"reason":{"type":"string"}},"required":["product","label","reason"]}}},"required":["broken"]}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"viewer","x-vercatus-key-scopes":["read"]}},"/sites/{id}/standing":{"get":{"operationId":"getSitesByIdStanding","tags":["Answer Share"],"summary":"The site's Answer Share, ?days= (28 by default, at most 365) and ?market=: of the AI answers on the site's topics in the window, the share that name or cite the","description":"The site's Answer Share, `?days=` (28 by default, at most 365) and `?market=`: of the AI answers on the site's topics in the window, the share that name or cite the site, with its 95% range and the change against the previous window (clear only when its range excludes zero); the leaderboard of the top brands on one scale, each engine's share and leader, every topic's share, leader and gap, the clear moves, a rolling 28-day trend, and the setup line (topics, the plan's poll asks, the answers recorded this period, the first answer). Unmeasured shares are null, never 0. Each topic carries its strongest reason from the Why lenses (`reason`, null when it has none); `next` holds the site's top three open plays (PHASE-3.md §5), so the Overview needs no second call; `wins` how many wins (topics a Won verdict moved, PHASE-4.md §5) fell in the window. `?reasons=0` leaves the reasons out (every `reason` null), for screens that do not show them: the rest is the same and comes without reading the Why lenses.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"days","in":"query","required":false,"schema":{"type":"string"}},{"name":"market","in":"query","required":false,"schema":{"type":"string"}},{"name":"reasons","in":"query","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"next":{"anyOf":[{"type":"array","items":{}},{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"key":{"type":"string"},"type":{"type":"string","enum":["source_listing","review_presence","community_presence","entity_clarity","search_presence","content_answer","page_fix","foundation","fact_correction","seo_fix"]},"title":{"type":"string"},"summary":{"type":"string"},"status":{"type":"string","enum":["planned","proposed","dismissed","in_progress","shipped","measuring"]},"owner":{"anyOf":[{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"}},"required":["id","name"]},{"type":"null"}]},"due":{"anyOf":[{"type":"string"},{"type":"null"}]},"topics":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"}},"required":["id","name"]}},"engines":{"type":"array","items":{"type":"string"}},"gain":{"$ref":"#/components/schemas/Shapen9ix7f"},"confidence":{"type":"string","enum":["low","medium","high"]},"effort":{"type":"string","enum":["S","M","L"]},"rank":{"type":"number"},"check":{"$ref":"#/components/schemas/Shapeduv3uz"},"stale":{"type":"boolean"},"createdAt":{"type":"string"},"updatedAt":{"type":"string"},"withheld":{"anyOf":[{"type":"object","properties":{"reason":{"type":"string"},"note":{"type":"string"}},"required":["reason","note"]},{"type":"null"}]},"retired":{"anyOf":[{"type":"object","properties":{"reason":{"type":"string"},"at":{"type":"string"}},"required":["reason","at"]},{"type":"null"}]},"target":{"anyOf":[{"type":"object","properties":{"url":{"type":"string"},"domain":{"type":"string"},"query":{"type":"string"},"platform":{"type":"string"},"findingKey":{"type":"string"},"rule":{"type":"string"},"pages":{"type":"array","items":{"type":"string"}}}},{"type":"null"}]},"competitors":{"type":"array","items":{"type":"object","properties":{"brandKey":{"type":"string"},"name":{"type":"string"}},"required":["brandKey","name"]}},"siteId":{"type":"string"},"externalRef":{"anyOf":[{"type":"object","properties":{"provider":{"type":"string"},"key":{"type":"string"},"url":{"type":"string"}},"required":["provider","key","url"]},{"type":"null"}]},"verdict":{"anyOf":[{"$ref":"#/components/schemas/Shape1dbs9y"},{"type":"null"}]},"held":{"type":"boolean"},"measurable":{"anyOf":[{"type":"object","properties":{"pp":{"type":"number"},"engines":{"type":"array","items":{"type":"string"}},"questions":{"type":"number"}},"required":["pp","engines","questions"]},{"type":"null"}]},"reach":{"anyOf":[{"type":"object","properties":{"answers":{"type":"number"},"topics":{"type":"number"},"cited":{"anyOf":[{"type":"number"},{"type":"null"}]},"days":{"type":"number"}},"required":["answers","topics","cited","days"]},{"type":"null"}]},"dismissedReason":{"anyOf":[{"type":"string"},{"type":"null"}]},"priority":{"type":"string","enum":["low","medium","high"]}},"required":["id","key","type","title","summary","status","owner","due","topics","engines","gain","confidence","effort","rank","check","stale","createdAt","updatedAt","withheld","retired","target","competitors","siteId","externalRef","verdict","held"]}}]},"wins":{"type":"number"},"window":{"type":"object","properties":{"from":{"type":"string"},"to":{"type":"string"},"days":{"type":"number"}},"required":["from","to","days"]},"measured":{"type":"object","properties":{"answers":{"type":"number"},"questions":{"type":"number"},"topics":{"type":"number"},"engines":{"type":"array","items":{"type":"string"}},"rho":{"type":"number"}},"required":["answers","questions","topics","engines","rho"]},"you":{"type":"object","properties":{"brandKey":{"type":"string"},"name":{"type":"string"},"share":{"anyOf":[{"type":"object","properties":{"pct":{"type":"number"},"lo":{"type":"number"},"hi":{"type":"number"},"answers":{"type":"number"},"questions":{"type":"number"},"nEff":{"type":"number"}},"required":["pct","lo","hi","answers","questions","nEff"]},{"type":"null"}]},"change":{"anyOf":[{"type":"object","properties":{"delta":{"type":"number"},"lo":{"type":"number"},"hi":{"type":"number"},"clear":{"type":"boolean"}},"required":["delta","lo","hi","clear"]},{"type":"null"}]},"domain":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["brandKey","name","share","change","domain"]},"changeBasis":{"$ref":"#/components/schemas/Shape1s2l1fs"},"leaderboard":{"type":"array","items":{"type":"object","properties":{"brandKey":{"type":"string"},"name":{"type":"string"},"kind":{"type":"string","enum":["other","competitor","own"]},"status":{"type":"string","enum":["auto","pinned","hidden"]},"share":{"type":"object","properties":{"pct":{"type":"number"},"lo":{"type":"number"},"hi":{"type":"number"},"answers":{"type":"number"},"questions":{"type":"number"},"nEff":{"type":"number"}},"required":["pct","lo","hi","answers","questions","nEff"]},"change":{"anyOf":[{"type":"object","properties":{"delta":{"type":"number"},"lo":{"type":"number"},"hi":{"type":"number"},"clear":{"type":"boolean"}},"required":["delta","lo","hi","clear"]},{"type":"null"}]},"domain":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["brandKey","name","kind","status","share","change","domain"]}},"engines":{"type":"array","items":{"type":"object","properties":{"engine":{"type":"string"},"label":{"type":"string"},"surface":{"type":"string","enum":["api","serp","ui"]},"you":{"anyOf":[{"type":"object","properties":{"pct":{"type":"number"},"lo":{"type":"number"},"hi":{"type":"number"},"answers":{"type":"number"},"questions":{"type":"number"},"nEff":{"type":"number"}},"required":["pct","lo","hi","answers","questions","nEff"]},{"type":"null"}]},"leader":{"anyOf":[{"$ref":"#/components/schemas/Shapez5ror9"},{"type":"null"}]}},"required":["engine","label","surface","you","leader"]}},"topics":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"stage":{"type":"string"},"demandTier":{"type":"string","enum":["low","medium","high"]},"demandSource":{"type":"string"},"searchVolume":{"anyOf":[{"type":"number"},{"type":"null"}]},"you":{"anyOf":[{"type":"object","properties":{"pct":{"type":"number"},"lo":{"type":"number"},"hi":{"type":"number"},"answers":{"type":"number"},"questions":{"type":"number"},"nEff":{"type":"number"}},"required":["pct","lo","hi","answers","questions","nEff"]},{"type":"null"}]},"leader":{"anyOf":[{"$ref":"#/components/schemas/Shapez5ror9"},{"type":"null"}]},"gap":{"anyOf":[{"type":"number"},{"type":"null"}]},"change":{"anyOf":[{"type":"object","properties":{"delta":{"type":"number"},"lo":{"type":"number"},"hi":{"type":"number"},"clear":{"type":"boolean"}},"required":["delta","lo","hi","clear"]},{"type":"null"}]},"reason":{"anyOf":[{"type":"object","properties":{"lens":{"type":"string","enum":["search","memory","sources"]},"text":{"type":"string"},"strength":{"type":"string","enum":["weak","some","strong"]}},"required":["lens","text","strength"]},{"type":"null"}]},"noOneRecommended":{"type":"boolean"}},"required":["id","name","stage","demandTier","demandSource","searchVolume","you","leader","gap","change"]}},"moves":{"type":"array","items":{"type":"object","properties":{"at":{"type":"string"},"topicId":{"type":"string"},"topicName":{"type":"string"},"engine":{"anyOf":[{"type":"string"},{"type":"null"}]},"brandKey":{"type":"string"},"name":{"type":"string"},"delta":{"type":"number"},"kind":{"type":"string","enum":["gain","loss"]}},"required":["at","topicId","topicName","engine","brandKey","name","delta","kind"]}},"trend":{"type":"array","items":{"type":"object","properties":{"day":{"type":"string"},"you":{"anyOf":[{"type":"number"},{"type":"null"}]},"leader":{"anyOf":[{"type":"number"},{"type":"null"}]}},"required":["day","you","leader"]}},"setup":{"type":"object","properties":{"topics":{"type":"number"},"topicsAllowed":{"type":"number"},"pollAsksPerMonth":{"type":"number"},"askedThisMonth":{"type":"number"},"firstAnswerAt":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["topics","topicsAllowed","pollAsksPerMonth","askedThisMonth","firstAnswerAt"]},"weighting":{"type":"object","properties":{"kind":{"type":"string","enum":["tier","demand"]},"gradedB":{"type":"number"},"of":{"type":"number"}},"required":["kind","gradedB","of"]},"noRecommendation":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"answers":{"type":"number"},"anyBrandPct":{"type":"number"}},"required":["id","name","answers","anyBrandPct"]}}},"required":["next","wins","window","measured","you","changeBasis","leaderboard","engines","topics","moves","trend","setup","weighting","noRecommendation"]}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"viewer","x-vercatus-key-scopes":["read"]}},"/standings":{"get":{"operationId":"getStandings","tags":["Service"],"summary":"Every site the caller can see with its Answer Share over ?days= (28 by default) and the answers it rests on, the figures each site's standing gives as you.share","description":"Every site the caller can see with its Answer Share over `?days=` (28 by default) and the answers it rests on, the figures each site's standing gives as `you.share` and `measured.answers`: `{ sites: [{ siteId, you: { share }, measured: { answers } }] }`. For a list of sites (Home) in one read, without each site's trend, engines and leaderboard.","parameters":[{"name":"days","in":"query","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"sites":{"type":"array","items":{"type":"object","properties":{"siteId":{"type":"string"},"you":{"type":"object","properties":{"share":{"anyOf":[{"type":"object","properties":{"pct":{"type":"number"},"lo":{"type":"number"},"hi":{"type":"number"},"answers":{"type":"number"},"questions":{"type":"number"},"nEff":{"type":"number"}},"required":["pct","lo","hi","answers","questions","nEff"]},{"type":"null"}]}},"required":["share"]},"measured":{"type":"object","properties":{"answers":{"type":"number"}},"required":["answers"]},"leader":{"anyOf":[{"type":"object","properties":{"name":{"type":"string"},"share":{"type":"object","properties":{"pct":{"type":"number"},"lo":{"type":"number"},"hi":{"type":"number"},"answers":{"type":"number"},"questions":{"type":"number"},"nEff":{"type":"number"}},"required":["pct","lo","hi","answers","questions","nEff"]}},"required":["name","share"]},{"type":"null"}]}},"required":["siteId","you","measured"]}}},"required":["sites"]}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"viewer","x-vercatus-key-scopes":["read"]}},"/sites/{id}/standing/reasons":{"get":{"operationId":"getSitesByIdStandingReasons","tags":["Answer Share"],"summary":"Each topic's strongest reason from the Why lenses, ?days= (28 by default): { reasons: { [topicId]: reason | null } }, the same reasons the standing carries, apa","description":"Each topic's strongest reason from the Why lenses, `?days=` (28 by default): `{ reasons: { [topicId]: reason | null } }`, the same reasons the standing carries, apart from its figures, so a screen can show the figures (`?reasons=0`) first.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"days","in":"query","required":false,"schema":{"type":"string"}},{"name":"reasons","in":"query","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"reasons":{"type":"object","additionalProperties":{"anyOf":[{"type":"object","properties":{"lens":{"type":"string","enum":["search","memory","sources"]},"text":{"type":"string"},"strength":{"type":"string","enum":["weak","some","strong"]}},"required":["lens","text","strength"]},{"type":"null"}]}}},"required":["reasons"]}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"viewer","x-vercatus-key-scopes":["read"]}},"/sites/{id}/topics":{"get":{"operationId":"getSitesByIdTopics","tags":["Answer Share"],"summary":"The site's topics that are not retired, oldest first: each with its market, stage, demand tier and its source, the site's share, the leader, the gap, the change","description":"The site's topics that are not retired, oldest first: each with its market, stage, demand tier and its source, the site's share, the leader, the gap, the change over the last 28 days and how many active questions it has.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"topics":{"type":"array","items":{"$ref":"#/components/schemas/Shapenz0qkk"}}},"required":["topics"]}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"viewer","x-vercatus-key-scopes":["read"]},"post":{"operationId":"postSitesByIdTopics","tags":["Answer Share"],"summary":"Adds a topic of the workspace's own, { name, phrasings?","description":"Adds a topic of the workspace's own, `{ name, phrasings? }`: asked in the site's first market, with up to ten phrasings as its questions (the name itself when none is given), tiered \"medium\" by hand until changed. Answers with the topic's row as the list shows it. Refused when the plan's topics are all active. Analyst role; audited.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"name":{},"phrasings":{}}}}}},"responses":{"201":{"description":"Created","content":{"application/json":{"schema":{"type":"object","properties":{"topic":{"anyOf":[{"$ref":"#/components/schemas/Shapenz0qkk"},{"type":"null"}]}},"required":["topic"]}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"analyst","x-vercatus-key-scopes":["write"]}},"/sites/{id}/topics/refresh":{"get":{"operationId":"getSitesByIdTopicsRefresh","tags":["Answer Share"],"summary":"When the site's topics were last built and when the scheduled refresh builds them next (DQ-100: a publisher's every week, other sites' every month): { siteType,","description":"When the site's topics were last built and when the scheduled refresh builds them next (DQ-100: a publisher's every week, other sites' every month): `{ siteType, cadenceDays, refreshedAt, nextAt, enabled, last, retiredTopics }`, `last` the latest build's counts (topics added, retired and kept as they were, questions retired), `nextAt` null when the schedule is held. Registered before the one-topic route so \"refresh\" is not read as a topic id.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"siteType":{"anyOf":[{"type":"string"},{"type":"null"}]},"cadenceDays":{"type":"number"},"refreshedAt":{"anyOf":[{"type":"string"},{"type":"null"}]},"nextAt":{"anyOf":[{"type":"string"},{"type":"null"}]},"enabled":{"type":"boolean"},"last":{"anyOf":[{"type":"object","properties":{"at":{"type":"string"},"mode":{"type":"string"},"added":{"type":"number"},"retired":{"type":"number"},"kept":{"type":"number"},"questionsRetired":{"type":"number"}},"required":["at","mode","added","retired","kept","questionsRetired"]},{"type":"null"}]},"retiredTopics":{"type":"number"}},"required":["siteType","cadenceDays","refreshedAt","nextAt","enabled","last","retiredTopics"]}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"viewer","x-vercatus-key-scopes":["read"]},"post":{"operationId":"postSitesByIdTopicsRefresh","tags":["Answer Share"],"summary":"Refreshes the site's topics now, as the schedule would (DQ-100): a topic named again keeps its id and the questions still asked, at most a share of the built to","description":"Refreshes the site's topics now, as the schedule would (DQ-100): a topic named again keeps its id and the questions still asked, at most a share of the built topics is retired (never one of the workspace's own), and new ones fill the plan. Answers at once with `{ started: true }`; the refresh runs in the background. Analyst role; audited.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"202":{"description":"Accepted","content":{"application/json":{"schema":{"type":"object","properties":{"started":{"type":"boolean","enum":[true]}},"required":["started"]}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"analyst","x-vercatus-key-scopes":["write"]}},"/sites/{id}/topics/{topicId}":{"get":{"operationId":"getSitesByIdTopicsByTopicId","tags":["Answer Share"],"summary":"One topic, ?days= (28 by default): who is recommended (each brand's share overall and per engine), its active questions with where each came from, its latest 40","description":"One topic, `?days=` (28 by default): who is recommended (each brand's share overall and per engine), its active questions with where each came from, its latest 40 answers with the brands each names and the sources it cites, the searches the engines ran for it (most frequent first) and the domains they cited with the brands those answers named.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"topicId","in":"path","required":true,"schema":{"type":"string"}},{"name":"days","in":"query","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"topic":{"$ref":"#/components/schemas/Shapenz0qkk"},"brands":{"type":"array","items":{"type":"object","properties":{"brandKey":{"type":"string"},"name":{"type":"string"},"kind":{"type":"string","enum":["other","competitor","own"]},"domain":{"anyOf":[{"type":"string"},{"type":"null"}]},"share":{"type":"object","properties":{"pct":{"type":"number"},"lo":{"type":"number"},"hi":{"type":"number"},"answers":{"type":"number"},"questions":{"type":"number"},"nEff":{"type":"number"}},"required":["pct","lo","hi","answers","questions","nEff"]},"byEngine":{"type":"object","additionalProperties":{"anyOf":[{"type":"object","properties":{"pct":{"type":"number"},"lo":{"type":"number"},"hi":{"type":"number"},"answers":{"type":"number"},"questions":{"type":"number"},"nEff":{"type":"number"}},"required":["pct","lo","hi","answers","questions","nEff"]},{"type":"null"}]}},"position":{"type":"object","properties":{"namedFirst":{"anyOf":[{"type":"object","properties":{"pct":{"type":"number"},"lo":{"type":"number"},"hi":{"type":"number"},"answers":{"type":"number"},"questions":{"type":"number"},"nEff":{"type":"number"}},"required":["pct","lo","hi","answers","questions","nEff"]},{"type":"null"}]},"firstSource":{"anyOf":[{"type":"object","properties":{"pct":{"type":"number"},"lo":{"type":"number"},"hi":{"type":"number"},"answers":{"type":"number"},"questions":{"type":"number"},"nEff":{"type":"number"}},"required":["pct","lo","hi","answers","questions","nEff"]},{"type":"null"}]},"avgNamed":{"anyOf":[{"type":"number"},{"type":"null"}]},"namedIn":{"type":"number"},"avgSource":{"anyOf":[{"type":"number"},{"type":"null"}]},"citedIn":{"type":"number"}},"required":["namedFirst","firstSource","avgNamed","namedIn","avgSource","citedIn"]}},"required":["brandKey","name","kind","domain","share","byEngine","position"]}},"questions":{"type":"array","items":{"$ref":"#/components/schemas/Shape105podq"}},"answers":{"type":"array","items":{"type":"object","properties":{"sampleId":{"type":"string"},"engine":{"type":"string"},"surface":{"type":"string","enum":["api","serp","ui"]},"askedAt":{"type":"string"},"questionText":{"type":"string"},"excerpt":{"type":"string"},"brands":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"named":{"type":"boolean"},"cited":{"type":"boolean"},"recommended":{"type":"boolean"},"top":{"type":"boolean"}},"required":["name","named","cited","recommended","top"]}},"cited":{"type":"array","items":{"type":"object","properties":{"url":{"type":"string"},"domain":{"type":"string"}},"required":["url","domain"]}}},"required":["sampleId","engine","surface","askedAt","questionText","excerpt","brands","cited"]}},"fanout":{"type":"array","items":{"type":"object","properties":{"query":{"type":"string"},"engines":{"type":"array","items":{"type":"string"}},"count":{"type":"number"}},"required":["query","engines","count"]}},"sources":{"type":"array","items":{"type":"object","properties":{"domain":{"type":"string"},"count":{"type":"number"},"names":{"type":"array","items":{"type":"string"}}},"required":["domain","count","names"]}}},"required":["topic","brands","questions","answers","fanout","sources"]}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"viewer","x-vercatus-key-scopes":["read"]},"patch":{"operationId":"patchSitesByIdTopicsByTopicId","tags":["Answer Share"],"summary":"Changes a topic, { status?, demandTier?, name?","description":"Changes a topic, `{ status?, demandTier?, name? }`: pause it (the poll skips it), retire it or make it active again; set its demand tier by hand (its source becomes \"manual\"); rename it. Making a topic active again needs room on the plan. Analyst role; audited.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"topicId","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"status":{},"demandTier":{},"name":{}}}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"topic":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"market":{"type":"string"},"stage":{"type":"string","enum":["choose","compare","solve","learn"]},"demandTier":{"type":"string","enum":["low","medium","high"]},"demandSource":{"type":"string","enum":["manual","model","search_volume","demand_index"]},"searchVolume":{"anyOf":[{"type":"number"},{"type":"null"}]},"status":{"type":"string","enum":["active","paused","retired"]},"origin":{"type":"string","enum":["manual","built"]}},"required":["id","name","market","stage","demandTier","demandSource","searchVolume","status","origin"]}},"required":["topic"]}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"analyst","x-vercatus-key-scopes":["write"]}},"/sites/{id}/about":{"get":{"operationId":"getSitesByIdAbout","tags":["Sites"],"summary":"What Vercatus has understood about the business, which the topics are built from: { business, audience, offerings, source } where source is you (written in the ","description":"What Vercatus has understood about the business, which the topics are built from: `{ business, audience, offerings, source }` where source is `you` (written in the site's Setup, or from the Topics banner), `run` (read from the site by the audit) or `memory`; null fields when nothing says. Also `buildNote`: why the last build kept nothing (the site could not be read, no topic fit it), or null.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"business":{"anyOf":[{"type":"string"},{"type":"null"}]},"audience":{"anyOf":[{"type":"string"},{"type":"null"}]},"offerings":{"type":"array","items":{"type":"string"}},"source":{"anyOf":[{"type":"string","enum":["memory","run","you"]},{"type":"null"}]},"buildNote":{"anyOf":[{"type":"string"},{"type":"null"}]},"building":{"type":"boolean"},"planTopics":{"type":"number"}},"required":["business","audience","offerings","source","buildNote","building","planTopics"]}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"viewer","x-vercatus-key-scopes":["read"]},"patch":{"operationId":"patchSitesByIdAbout","tags":["Sites"],"summary":"Sets what the business is, { business, audience?, offerings?, rebuild?","description":"Sets what the business is, `{ business, audience?, offerings?, rebuild? }`: 20 to 1,500 characters. Every topic build is held to it, and it wins over what the audit read. With `rebuild: true` the topics are built again at once: topics the description does not fit are left out, and built topics a rebuild no longer has are retired (their history kept). Answers `{ profile, rebuilding }`. Analyst role; audited.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"business":{},"audience":{},"offerings":{},"rebuild":{}}}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"profile":{"type":"object","properties":{"business":{"type":"string"},"audience":{"type":"string"},"offerings":{"type":"array","items":{"type":"string"}},"competitors":{"type":"array","items":{"type":"string"}},"source":{"type":"string","enum":["memory","run","you"]}}},"rebuilding":{"type":"boolean"}},"required":["profile","rebuilding"]}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"analyst","x-vercatus-key-scopes":["write"]}},"/sites/{id}/progress":{"get":{"operationId":"getSitesByIdProgress","tags":["Sites"],"summary":"What the site is waiting for before its figures fill in (LR-058): the run, the topics, the engines' answers, the competitors and Results, each done, under way, ","description":"What the site is waiting for before its figures fill in (LR-058): the run, the topics, the engines' answers, the competitors and Results, each done, under way, waiting or stopped, with a sentence and where to look. Read only from what is stored. Every member.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"anyOf":[{"type":"object","properties":{"siteId":{"type":"string"},"host":{"type":"string"},"stages":{"type":"array","items":{"$ref":"#/components/schemas/Shape16qjr7o"}},"complete":{"type":"boolean"},"current":{"anyOf":[{"$ref":"#/components/schemas/Shape16qjr7o"},{"type":"null"}]}},"required":["siteId","host","stages","complete","current"]},{"type":"null"}]}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"viewer","x-vercatus-key-scopes":["read"]}},"/progress":{"get":{"operationId":"getProgress","tags":["Service"],"summary":"The same for every site the caller can see that is not measured yet (the rail's card), newest first: { sites }.","description":"The same for every site the caller can see that is not measured yet (the rail's card), newest first: `{ sites }`.","responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"anyOf":[{"type":"object","properties":{"sites":{"type":"array","items":{}}},"required":["sites"]},{"type":"object","properties":{"sites":{"type":"array","items":{"type":"object","properties":{"siteId":{"type":"string"},"host":{"type":"string"},"stages":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string","enum":["competitors","results","run","answers","topics"]},"label":{"type":"string"},"state":{"type":"string","enum":["active","blocked","done","waiting"]},"detail":{"type":"string"},"href":{"type":"string"},"progress":{}},"required":["key","label","state","detail"]}},"complete":{"type":"boolean"},"current":{"anyOf":[{"$ref":"#/components/schemas/Shape16qjr7o"},{"type":"null"}]}},"required":["siteId","host","stages","complete","current"]}}},"required":["sites"]}]}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"viewer","x-vercatus-key-scopes":["read"]}},"/sites/{id}/topics/rebuild":{"post":{"operationId":"postSitesByIdTopicsRebuild","tags":["Answer Share"],"summary":"Builds the site's topics again from its profile, markets, admitted searches, prompts and the engines' searches; a topic named again keeps its id and history, on","description":"Builds the site's topics again from its profile, markets, admitted searches, prompts and the engines' searches; a topic named again keeps its id and history, one dropped is retired. Answers at once with `{ started: true }`; the build runs in the background (a build already running is not started twice). Analyst role; audited.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"202":{"description":"Accepted","content":{"application/json":{"schema":{"type":"object","properties":{"started":{"type":"boolean","enum":[true]}},"required":["started"]}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"analyst","x-vercatus-key-scopes":["write"]}},"/sites/{id}/topics/{topicId}/questions":{"post":{"operationId":"postSitesByIdTopicsByTopicIdQuestions","tags":["Answer Share"],"summary":"Adds a question to a topic, { text, exact?","description":"Adds a question to a topic, `{ text, exact? }`: asked by the poll like the topic's own phrasings, in the topic's market. `exact`: track it word for word (never rephrased, retired or moved by a topic build, asked on every engine at least weekly, its answers' changes told), within the plan's allowance (402 beyond it). A question the site already has moves to this topic. Analyst role; audited.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"topicId","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"text":{},"exact":{}}}}}},"responses":{"201":{"description":"Created","content":{"application/json":{"schema":{"type":"object","properties":{"question":{"$ref":"#/components/schemas/Shape105podq"}},"required":["question"]}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"analyst","x-vercatus-key-scopes":["write"]}},"/sites/{id}/topics/{topicId}/questions/{questionId}":{"patch":{"operationId":"patchSitesByIdTopicsByTopicIdQuestionsByQuestionId","tags":["Answer Share"],"summary":"Tracks a question of the topic word for word, or stops (FEATURE-GAP-PLAN.md item 10, the tracked prompts' successor): never rephrased, retired or moved by a top","description":"`{ exact }`: tracks a question of the topic word for word, or stops (FEATURE-GAP-PLAN.md item 10, the tracked prompts' successor): never rephrased, retired or moved by a topic build, asked on every engine at least weekly, its answers' changes told. Within the plan's allowance (402 beyond it). Analyst role; audited.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"topicId","in":"path","required":true,"schema":{"type":"string"}},{"name":"questionId","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"exact":{}},"required":["exact"]}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"question":{"$ref":"#/components/schemas/Shape105podq"},"room":{"type":"object","properties":{"used":{"type":"number"},"limit":{"anyOf":[{"type":"number"},{"type":"null"}]}},"required":["used","limit"]}},"required":["question","room"]}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"analyst","x-vercatus-key-scopes":["write"]}},"/sites/{id}/brands/{brandKey}":{"patch":{"operationId":"patchSitesByIdBrandsByBrandKey","tags":["Answer Share"],"summary":"Changes how a brand counts on the site, { status, kind?","description":"Changes how a brand counts on the site, `{ status, kind? }`: pin it, hide it (off every leaderboard and list) or let the answers decide again (`auto`); `kind` marks it a competitor or another brand. The site's own brand cannot be hidden or changed in kind. Analyst role; audited.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"brandKey","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"status":{},"kind":{}}}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Shape1h47rpx"}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"analyst","x-vercatus-key-scopes":["write"]}},"/sites/{id}/brands":{"post":{"operationId":"postSitesByIdBrands","tags":["Answer Share"],"summary":"Names a competitor, { name, domain?, kind: \"competitor\" }: the brand is created as a pinned competitor, or an existing one (a brand the answers brought) is pinn","description":"Names a competitor, `{ name, domain?, kind: \"competitor\" }`: the brand is created as a pinned competitor, or an existing one (a brand the answers brought) is pinned and made a competitor, keeping its counts; the domain, when given, joins its domains (so a cited page on it counts it as cited) and the site's named competitor domains while there is room for them (five). Answers `201 { brand }` when it is new, `200 { brand }` when it was there. The site's own brand or domain is refused. Analyst role; audited.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"name":{},"domain":{},"kind":{}}}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Shape1h47rpx"}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"analyst","x-vercatus-key-scopes":["write"]}},"/sites/{id}/mentions":{"get":{"operationId":"getSitesByIdMentions","tags":["Sites"],"summary":"GET /api/sites/:id/mentions?days=&market=&topic=&engine=&kind=named|cited|first&group=question&limit=&offset=: where the site's Answer Share comes from: the win","description":"GET /api/sites/:id/mentions?days=&market=&topic=&engine=&kind=named|cited|first&group=question&limit=&offset=: where the site's Answer Share comes from: the window's totals by topic and engine (with the times an engine showed no AI answer), and a page of the answers that name or cite the site, newest first; with group=question, a page of the questions instead, each with every engine's answer to it side by side.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"days","in":"query","required":false,"schema":{"type":"string"}},{"name":"market","in":"query","required":false,"schema":{"type":"string"}},{"name":"topic","in":"query","required":false,"schema":{"type":"string"}},{"name":"engine","in":"query","required":false,"schema":{"type":"string"}},{"name":"kind","in":"query","required":false,"schema":{"type":"string"}},{"name":"group","in":"query","required":false,"schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"schema":{"type":"string"}},{"name":"offset","in":"query","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"window":{"type":"object","properties":{"from":{"type":"string"},"to":{"type":"string"},"days":{"type":"number"}},"required":["from","to","days"]},"brand":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"]},"totals":{"type":"object","properties":{"answers":{"type":"number"},"mentioned":{"type":"number"},"named":{"type":"number"},"cited":{"type":"number"},"first":{"type":"number"}},"required":["answers","mentioned","named","cited","first"]},"topics":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"answers":{"type":"number"},"mentioned":{"type":"number"},"named":{"type":"number"},"cited":{"type":"number"},"first":{"type":"number"}},"required":["id","name","answers","mentioned","named","cited","first"]}},"engines":{"type":"array","items":{"type":"object","properties":{"engine":{"type":"string"},"noAnswer":{"type":"number"},"answers":{"type":"number"},"mentioned":{"type":"number"},"named":{"type":"number"},"cited":{"type":"number"},"first":{"type":"number"}},"required":["engine","noAnswer","answers","mentioned","named","cited","first"]}},"mentions":{"type":"array","items":{"type":"object","properties":{"sampleId":{"type":"string"},"topicId":{"type":"string"},"topic":{"type":"string"},"question":{"type":"string"},"engine":{"type":"string"},"surface":{"type":"string"},"askedAt":{"type":"string"},"named":{"type":"boolean"},"cited":{"type":"boolean"},"position":{"anyOf":[{"type":"number"},{"type":"null"}]},"excerpt":{"type":"string"},"counted":{"type":"boolean"},"tone":{"anyOf":[{"type":"number"},{"type":"null"}]}},"required":["sampleId","topicId","topic","question","engine","surface","askedAt","named","cited","position","excerpt","counted","tone"]}},"questions":{"type":"array","items":{"type":"object","properties":{"questionId":{"type":"string"},"question":{"type":"string"},"topicId":{"type":"string"},"topic":{"type":"string"},"latestAt":{"type":"string"},"counted":{"type":"boolean"},"engines":{"type":"array","items":{"type":"object","properties":{"engine":{"type":"string"},"surface":{"type":"string"},"sampleId":{"type":"string"},"askedAt":{"type":"string"},"named":{"type":"boolean"},"cited":{"type":"boolean"},"position":{"anyOf":[{"type":"number"},{"type":"null"}]},"answers":{"type":"number"},"mentioned":{"type":"number"},"excerpt":{"type":"string"},"tone":{"anyOf":[{"type":"number"},{"type":"null"}]}},"required":["engine","surface","sampleId","askedAt","named","cited","position","answers","mentioned","excerpt","tone"]}}},"required":["questionId","question","topicId","topic","latestAt","counted","engines"]}},"matchedQuestions":{"type":"number"},"matched":{"type":"number"}},"required":["window","brand","totals","topics","engines","mentions","matched"]}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"viewer","x-vercatus-key-scopes":["read"]}},"/sites/{id}/seo-health":{"get":{"operationId":"getSitesByIdSeoHealth","tags":["Sites"],"summary":"GET /api/sites/:id/seo-health: SEO Health (SEO-HEALTH-PLAN.md): the site's latest checked pages read against the SEO rulebook: the score with its cap and band, ","description":"GET /api/sites/:id/seo-health: SEO Health (SEO-HEALTH-PLAN.md): the site's latest checked pages read against the SEO rulebook: the score with its cap and band, the four questions' scores, every rule's result with the pages it fails on and what was measured, and each page's own score. Read from what the latest run stored; nothing is fetched. `plays`: each rule's play by rule id (SEO-HEALTH-PLAN.md §8: its SEO play, or the audit play that has it), for \"Open play\". `?format=csv`: the issues as a spreadsheet, one row per issue and page with what was measured (§8 step 5).","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"format","in":"query","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"plays":{"type":"object","additionalProperties":{"type":"object","properties":{"id":{"type":"string"},"status":{"type":"string"},"checkState":{"type":"string"},"type":{"type":"string"}},"required":["id","status","checkState","type"]}},"source":{"anyOf":[{"type":"string","enum":["check","run"]},{"type":"null"}]},"run":{"anyOf":[{"type":"object","properties":{"id":{"type":"string"},"at":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["id","at"]},{"type":"null"}]},"check":{"anyOf":[{"type":"object","properties":{"id":{"type":"string"},"status":{"type":"string","enum":["queued","running","failed","done"]},"trigger":{"type":"string"},"planned":{"type":"number"},"done":{"type":"number"},"at":{"anyOf":[{"type":"string"},{"type":"null"}]},"error":{"anyOf":[{"type":"string"},{"type":"null"}]},"nextAllowedAt":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["id","status","trigger","planned","done","at","error","nextAllowedAt"]},{"type":"null"}]},"history":{"type":"array","items":{"type":"object","properties":{"at":{"type":"string"},"score":{"anyOf":[{"type":"number"},{"type":"null"}]},"rulesVersion":{"anyOf":[{"type":"number"},{"type":"null"}]}},"required":["at","score","rulesVersion"]}},"origin":{"type":"string"},"report":{"anyOf":[{"type":"object","properties":{"rulesVersion":{"type":"number"},"score":{"anyOf":[{"type":"number"},{"type":"null"}]},"uncapped":{"anyOf":[{"type":"number"},{"type":"null"}]},"cap":{"anyOf":[{"type":"object","properties":{"at":{"type":"number"},"reason":{"type":"string"}},"required":["at","reason"]},{"type":"null"}]},"band":{"anyOf":[{"type":"string","enum":["good","needs work","poor"]},{"type":"null"}]},"groups":{"type":"array","items":{"type":"object","properties":{"group":{"type":"string","enum":["results","content","index","experience"]},"question":{"type":"string"},"weight":{"type":"number"},"score":{"anyOf":[{"type":"number"},{"type":"null"}]},"issues":{"type":"number"}},"required":["group","question","weight","score","issues"]}},"rules":{"type":"array","items":{"$ref":"#/components/schemas/Shape17k6fcp"}},"issues":{"type":"array","items":{"$ref":"#/components/schemas/Shape17k6fcp"}},"notices":{"type":"array","items":{"$ref":"#/components/schemas/Shape17k6fcp"}},"pages":{"type":"array","items":{"type":"object","properties":{"url":{"type":"string"},"template":{"anyOf":[{"type":"string"},{"type":"null"}]},"why":{"type":"array","items":{"type":"string","enum":["traffic","key","cited","home"]}},"weight":{"type":"number"},"status":{"type":"number"},"score":{"anyOf":[{"type":"number"},{"type":"null"}]},"failing":{"type":"array","items":{"type":"string"}}},"required":["url","template","why","weight","status","score","failing"]}},"checked":{"type":"object","properties":{"pages":{"type":"number"},"home":{"type":"number"},"key":{"type":"number"},"cited":{"type":"number"},"traffic":{"type":"number"},"templates":{"type":"number"}},"required":["pages","home","key","cited","traffic","templates"]}},"required":["rulesVersion","score","uncapped","cap","band","groups","rules","issues","notices","pages","checked"]},{"type":"null"}]}},"required":["plays","source","run","check","history","origin","report"]}},"text/csv":{"schema":{"type":"string","description":"RFC 4180, UTF-8, CRLF line ends; streamed. A stream that fails part-way ends the connection (a short file is never a clean end)."}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"viewer","x-vercatus-key-scopes":["read"]}},"/sites/{id}/seo-health/issues/{rule}/play":{"post":{"operationId":"postSitesByIdSeoHealthIssuesByRulePlay","tags":["Sites"],"summary":"POST /api/sites/:id/seo-health/issues/:rule/play: \"Add to plays\" (SEO-HEALTH-PLAN.md §8): the rule's play, made now from the latest SEO Health reading (201), or","description":"POST /api/sites/:id/seo-health/issues/:rule/play: \"Add to plays\" (SEO-HEALTH-PLAN.md §8): the rule's play, made now from the latest SEO Health reading (201), or the one it already has (200). 404 when the rule is not measured; 409 `ai_owned` when AI access owns the issue and the full run has not made its play yet. Analyst role; audited.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"rule","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"play":{"type":"object","properties":{"id":{"type":"string"},"status":{"type":"string"},"checkState":{"type":"string"},"type":{"type":"string"}},"required":["id","status","checkState","type"]},"created":{"type":"boolean"}},"required":["play","created"]}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"analyst","x-vercatus-key-scopes":["write"]}},"/sites/{id}/seo-health/check":{"post":{"operationId":"postSitesByIdSeoHealthCheck","tags":["Sites"],"summary":"POST /api/sites/:id/seo-health/check: \"Check again\" (SEO-HEALTH-PLAN.md slice B): queues a light SEO check of the site's important pages, or answers with the on","description":"POST /api/sites/:id/seo-health/check: \"Check again\" (SEO-HEALTH-PLAN.md slice B): queues a light SEO check of the site's important pages, or answers with the one already queued or running (200). A new check waits an hour after the last one finished (429 with `nextAllowedAt`). Analyst role; audited.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"check":{"type":"object","properties":{"id":{"type":"string"},"status":{"type":"string","enum":["queued","running","failed","done"]}},"required":["id","status"]},"queued":{"type":"boolean"}},"required":["check","queued"]}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"analyst","x-vercatus-key-scopes":["write"]}},"/sites/{id}/questions-standing":{"get":{"operationId":"getSitesByIdQuestionsStanding","tags":["Sites"],"summary":"GET /api/sites/:id/questions-standing?days=: every active question by topic, with the site's place in its answers and the rival they name most.","description":"GET /api/sites/:id/questions-standing?days=: every active question by topic, with the site's place in its answers and the rival they name most.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"days","in":"query","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"window":{"type":"object","properties":{"from":{"type":"string"},"to":{"type":"string"},"days":{"type":"number"}},"required":["from","to","days"]},"topics":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"questions":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"text":{"type":"string"},"answers":{"type":"number"},"you":{},"rival":{},"prompted":{"type":"boolean"}},"required":["id","text","answers","you","rival","prompted"]}}},"required":["id","name","questions"]}}},"required":["window","topics"]}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"viewer","x-vercatus-key-scopes":["read"]}},"/sites/{id}/answers/{sampleId}":{"get":{"operationId":"getSitesByIdAnswersBySampleId","tags":["Answer Share"],"summary":"One answer of the site's poll, for the evidence drawer: the full text, the engine and surface it came from, the question and topic, every source in order (cited","description":"One answer of the site's poll, for the evidence drawer: the full text, the engine and surface it came from, the question and topic, every source in order (cited first), the brands it names or cites and the searches the engine ran.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"sampleId","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"sampleId":{"type":"string"},"engine":{"type":"string"},"label":{"type":"string"},"surface":{"type":"string","enum":["api","serp","ui"]},"mode":{"type":"string","enum":["search","memory"]},"model":{"anyOf":[{"type":"string"},{"type":"null"}]},"askedAt":{"type":"string"},"status":{"type":"string","enum":["error","ok","truncated","no_answer"]},"truncated":{"type":"boolean"},"cached":{"type":"boolean"},"questionId":{"anyOf":[{"type":"string"},{"type":"null"}]},"questionText":{"type":"string"},"topicId":{"anyOf":[{"type":"string"},{"type":"null"}]},"topic":{"anyOf":[{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"}},"required":["id","name"]},{"type":"null"}]},"locale":{"anyOf":[{"type":"string"},{"type":"null"}]},"answer":{"type":"string"},"sources":{"type":"array","items":{"type":"object","properties":{"url":{"type":"string"},"domain":{"type":"string"},"cited":{"type":"boolean"},"position":{"type":"number"},"title":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["url","domain","cited","position","title"]}},"brands":{"type":"array","items":{"type":"object","properties":{"brandKey":{"type":"string"},"name":{"type":"string"},"product":{"anyOf":[{"type":"string"},{"type":"null"}]},"named":{"type":"boolean"},"cited":{"type":"boolean"},"recommended":{"type":"boolean"},"top":{"type":"boolean"},"position":{"type":"number"}},"required":["brandKey","name","product","named","cited","recommended","top","position"]}},"fanout":{"type":"array","items":{"type":"string"}},"repeats":{"anyOf":[{"type":"object","properties":{"days":{"type":"number"},"answers":{"type":"number"},"named":{"type":"number"},"cited":{"type":"number"}},"required":["days","answers","named","cited"]},{"type":"null"}]}},"required":["sampleId","engine","label","surface","mode","model","askedAt","status","truncated","cached","questionId","questionText","topicId","topic","locale","answer","sources","brands","fanout","repeats"]}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"viewer","x-vercatus-key-scopes":["read"]}},"/sites/{id}/topics/{topicId}/why":{"get":{"operationId":"getSitesByIdTopicsByTopicIdWhy","tags":["Why"],"summary":"Why a topic's leader is chosen, ?days= (28 by default): the leader and the site with their Answer Share; the Sources lens (the third-party pages the topic's ans","description":"Why a topic's leader is chosen, `?days=` (28 by default): the leader and the site with their Answer Share; the Sources lens (the third-party pages the topic's answers cited, how many could be read, each page with the brands it names and whether it names the site and the leader, the gap pages that name a competitor and not the site, and on how many read pages each brand appears); the Search lens (the engines' own most frequent searches with the site's and the leader's best rank in Google's and Bing's top 10, and the engines whose index is not checked); the Memory lens (answers without search, per engine); and the reasons as plain sentences from those numbers, strongest first.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"topicId","in":"path","required":true,"schema":{"type":"string"}},{"name":"days","in":"query","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"topic":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"}},"required":["id","name"]},"leader":{"anyOf":[{"$ref":"#/components/schemas/Shapez5ror9"},{"type":"null"}]},"you":{"type":"object","properties":{"brandKey":{"type":"string"},"name":{"type":"string"},"share":{"anyOf":[{"type":"object","properties":{"pct":{"type":"number"},"lo":{"type":"number"},"hi":{"type":"number"},"answers":{"type":"number"},"questions":{"type":"number"},"nEff":{"type":"number"}},"required":["pct","lo","hi","answers","questions","nEff"]},{"type":"null"}]}},"required":["brandKey","name","share"]},"sources":{"type":"object","properties":{"read":{"type":"number"},"readable":{"type":"number"},"pages":{"type":"array","items":{"type":"object","properties":{"url":{"type":"string"},"domain":{"type":"string"},"title":{"anyOf":[{"type":"string"},{"type":"null"}]},"kind":{"anyOf":[{"type":"string"},{"type":"null"}]},"ownedBy":{"anyOf":[{"type":"string"},{"type":"null"}]},"ownedByRival":{"type":"boolean"},"unreachable":{"anyOf":[{"type":"string","enum":["stale","closed","vendor","docs","video","store_listing","community","published_by_rival","encyclopedia"]},{"type":"null"}]},"unreachableWhy":{"anyOf":[{"type":"string"},{"type":"null"}]},"dated":{"anyOf":[{"type":"string"},{"type":"null"}]},"lang":{"anyOf":[{"type":"string"},{"type":"null"}]},"citedBy":{"type":"number"},"engines":{"type":"array","items":{"type":"string"}},"names":{"type":"array","items":{}},"namesYou":{"type":"boolean"},"namesLeader":{"type":"boolean"},"status":{"type":"string","enum":["error","blocked","ok","unread"]},"changedAt":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["url","domain","title","kind","ownedBy","ownedByRival","unreachable","unreachableWhy","dated","lang","citedBy","engines","names","namesYou","namesLeader","status","changedAt"]}},"gaps":{"type":"array","items":{"type":"object","properties":{"url":{"type":"string"},"domain":{"type":"string"},"title":{"anyOf":[{"type":"string"},{"type":"null"}]},"kind":{"anyOf":[{"type":"string"},{"type":"null"}]},"citedBy":{"type":"number"},"engines":{"type":"array","items":{"type":"string"}},"competitors":{"type":"array","items":{"type":"string"}}},"required":["url","domain","title","kind","citedBy","engines","competitors"]}},"coverage":{"type":"array","items":{"type":"object","properties":{"brandKey":{"type":"string"},"name":{"type":"string"},"kind":{"type":"string","enum":["other","competitor","own"]},"pages":{"type":"number"},"citedBy":{"type":"number"}},"required":["brandKey","name","kind","pages","citedBy"]}},"otherMeaning":{"type":"object","properties":{"count":{"type":"number"},"pages":{"type":"array","items":{"type":"object","properties":{"url":{"type":"string"},"domain":{"type":"string"},"title":{"anyOf":[{"type":"string"},{"type":"null"}]},"kind":{"anyOf":[{"type":"string"},{"type":"null"}]},"status":{"type":"string","enum":["error","blocked","ok","unread"]}},"required":["url","domain","title","kind","status"]}}},"required":["count","pages"]}},"required":["read","readable","pages","gaps","coverage","otherMeaning"]},"sense":{"anyOf":[{"type":"object","properties":{"answers":{"type":"number"},"share":{"anyOf":[{"type":"number"},{"type":"null"}]},"other":{"type":"boolean"}},"required":["answers","share","other"]},{"type":"null"}]},"search":{"type":"object","properties":{"queries":{"type":"array","items":{"type":"object","properties":{"query":{"type":"string"},"engines":{"type":"array","items":{"type":"string"}},"count":{"type":"number"},"google":{"anyOf":[{"type":"object","properties":{"checkedAt":{"type":"string"},"you":{"anyOf":[{"type":"number"},{"type":"null"}]},"leader":{"anyOf":[{"type":"number"},{"type":"null"}]},"top":{}},"required":["checkedAt","you","leader","top"]},{"type":"null"}]},"bing":{"anyOf":[{"type":"object","properties":{"checkedAt":{"type":"string"},"you":{"anyOf":[{"type":"number"},{"type":"null"}]},"leader":{"anyOf":[{"type":"number"},{"type":"null"}]},"top":{}},"required":["checkedAt","you","leader","top"]},{"type":"null"}]},"brave":{"anyOf":[{"type":"object","properties":{"checkedAt":{"type":"string"},"you":{"anyOf":[{"type":"number"},{"type":"null"}]},"leader":{"anyOf":[{"type":"number"},{"type":"null"}]},"top":{}},"required":["checkedAt","you","leader","top"]},{"type":"null"}]}},"required":["query","engines","count","google","bing","brave"]}},"summary":{"type":"object","properties":{"google":{"anyOf":[{"type":"object","properties":{"youIn":{"type":"number"},"leaderIn":{"type":"number"},"of":{"type":"number"}},"required":["youIn","leaderIn","of"]},{"type":"null"}]},"bing":{"anyOf":[{"type":"object","properties":{"youIn":{"type":"number"},"leaderIn":{"type":"number"},"of":{"type":"number"}},"required":["youIn","leaderIn","of"]},{"type":"null"}]},"brave":{"anyOf":[{"type":"object","properties":{"youIn":{"type":"number"},"leaderIn":{"type":"number"},"of":{"type":"number"}},"required":["youIn","leaderIn","of"]},{"type":"null"}]}},"required":["google","bing","brave"]},"unchecked":{"type":"array","items":{"type":"string"}}},"required":["queries","summary","unchecked"]},"memory":{"type":"object","properties":{"answers":{"type":"number"},"byEngine":{"type":"array","items":{"type":"object","properties":{"engine":{"type":"string"},"label":{"type":"string"},"answers":{"type":"number"},"you":{"anyOf":[{"type":"object","properties":{"pct":{"type":"number"},"lo":{"type":"number"},"hi":{"type":"number"},"answers":{"type":"number"},"questions":{"type":"number"},"nEff":{"type":"number"}},"required":["pct","lo","hi","answers","questions","nEff"]},{"type":"null"}]},"leader":{"anyOf":[{"type":"object","properties":{"brandKey":{"type":"string"},"name":{"type":"string"},"share":{}},"required":["brandKey","name","share"]},{"type":"null"}]}},"required":["engine","label","answers","you","leader"]}},"you":{"anyOf":[{"type":"object","properties":{"pct":{"type":"number"},"lo":{"type":"number"},"hi":{"type":"number"},"answers":{"type":"number"},"questions":{"type":"number"},"nEff":{"type":"number"}},"required":["pct","lo","hi","answers","questions","nEff"]},{"type":"null"}]},"leader":{"anyOf":[{"$ref":"#/components/schemas/Shapez5ror9"},{"type":"null"}]}},"required":["answers","byEngine","you","leader"]},"reasons":{"type":"array","items":{"type":"object","properties":{"lens":{"type":"string","enum":["search","memory","sources"]},"text":{"type":"string"},"strength":{"type":"string","enum":["weak","some","strong"]}},"required":["lens","text","strength"]}}},"required":["topic","leader","you","sources","sense","search","memory","reasons"]}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"viewer","x-vercatus-key-scopes":["read"]}},"/sites/{id}/sources":{"get":{"operationId":"getSitesByIdSources","tags":["Why"],"summary":"The pages to be on across the site's topics, ?days= (28 by default): every third-party page its answers cited, gaps (pages naming a competitor and not the site)","description":"The pages to be on across the site's topics, `?days=` (28 by default): every third-party page its answers cited, gaps (pages naming a competitor and not the site) first, then by answers citing it × competitors named, each with its topics, engines and status; and the domains those pages sit on.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"days","in":"query","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"pages":{"type":"array","items":{"$ref":"#/components/schemas/Shape1a3m5ki"}},"domains":{"type":"array","items":{"type":"object","properties":{"domain":{"type":"string"},"kind":{"type":"string"},"citedBy":{"type":"number"},"pages":{"type":"number"},"namesYou":{"type":"number"}},"required":["domain","kind","citedBy","pages","namesYou"]}},"otherMeaning":{"type":"object","properties":{"count":{"type":"number"},"pages":{"type":"array","items":{"type":"object","properties":{"url":{"type":"string"},"domain":{"type":"string"},"title":{"anyOf":[{"type":"string"},{"type":"null"}]},"kind":{"anyOf":[{"type":"string"},{"type":"null"}]},"status":{"type":"string","enum":["error","blocked","ok","unread"]},"topics":{"type":"array","items":{}}},"required":["url","domain","title","kind","status","topics"]}}},"required":["count","pages"]}},"required":["pages","domains","otherMeaning"]}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"viewer","x-vercatus-key-scopes":["read"]}},"/sites/{id}/communities":{"get":{"operationId":"getSitesByIdCommunities","tags":["Sites"],"summary":"The forums, Q&A sites and communities engines cite for the site's topics, ?days= (28 by default): the share of the site's search answers that cite any community","description":"The forums, Q&A sites and communities engines cite for the site's topics, `?days=` (28 by default): the share of the site's search answers that cite any community (with a Wilson range), over all engines and per engine; the number of communities by kind (forum, Q&A, social); and each community (a subreddit, Quora, a Stack Exchange site, a forum) with the answers citing it, the threads, the topics and engines, its language and whether it fits the site's market (`markets` lists the markets of the site's topics). Built from the cited addresses alone, so Reddit and the like (never fetched) are counted. `read` is true for a community whose pages Vercatus reads.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"days","in":"query","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"all":{"type":"object","properties":{"answers":{"type":"number"},"withCommunity":{"type":"number"},"pct":{"type":"number"},"lo":{"type":"number"},"hi":{"type":"number"}},"required":["answers","withCommunity","pct","lo","hi"]},"byEngine":{"type":"array","items":{"type":"object","properties":{"answers":{"type":"number"},"withCommunity":{"type":"number"},"pct":{"type":"number"},"lo":{"type":"number"},"hi":{"type":"number"},"engine":{"type":"string"},"label":{"type":"string"}},"required":["answers","withCommunity","pct","lo","hi","engine","label"]}},"byKind":{"type":"array","items":{"type":"object","properties":{"kind":{"type":"string","enum":["forum","qa","social"]},"citedBy":{"type":"number"},"communities":{"type":"number"}},"required":["kind","citedBy","communities"]}},"communities":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"},"platform":{"type":"string"},"kind":{"type":"string","enum":["forum","qa","social"]},"citedBy":{"type":"number"},"threads":{"type":"array","items":{"type":"object","properties":{"url":{"type":"string"},"title":{"anyOf":[{"type":"string"},{"type":"null"}]},"citedBy":{"type":"number"},"lang":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["url","title","citedBy","lang"]}},"threadCount":{"type":"number"},"topics":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"citedBy":{"type":"number"}},"required":["id","name","citedBy"]}},"engines":{"type":"array","items":{"type":"string"}},"lang":{"anyOf":[{"type":"string"},{"type":"null"}]},"fit":{"type":"string","enum":["unknown","local","foreign"]},"read":{"type":"boolean"}},"required":["key","name","platform","kind","citedBy","threads","threadCount","topics","engines","lang","fit","read"]}},"days":{"type":"number"},"markets":{"type":"array","items":{"type":"string"}}},"required":["all","byEngine","byKind","communities","days","markets"]}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"viewer","x-vercatus-key-scopes":["read"]}},"/sites/{id}/products":{"get":{"operationId":"getSitesByIdProducts","tags":["Sites"],"summary":"The products AI answers name (FEATURE-GAP-PLAN.md item 8), ?days= (28 by default) and ?market= (one market's topics): each product under its brand, the site's o","description":"The products AI answers name (FEATURE-GAP-PLAN.md item 8), `?days=` (28 by default) and `?market=` (one market's topics): each product under its brand, the site's own and its competitors', with the share of answers that name it, recommend it and name it the top pick (read like Answer Share, each with its range), per engine, and the topics it is named on; the 40 named most.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"days","in":"query","required":false,"schema":{"type":"string"}},{"name":"market","in":"query","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"window":{"type":"object","properties":{"from":{"type":"string"},"to":{"type":"string"},"days":{"type":"number"}},"required":["from","to","days"]},"answers":{"type":"number"},"questions":{"type":"number"},"products":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string"},"brandKey":{"type":"string"},"brandName":{"type":"string"},"name":{"type":"string"},"own":{"type":"boolean"},"topic":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"}},"required":["id","name"]},"named":{"type":"object","properties":{"pct":{"type":"number"},"lo":{"type":"number"},"hi":{"type":"number"},"answers":{"type":"number"},"questions":{"type":"number"},"nEff":{"type":"number"}},"required":["pct","lo","hi","answers","questions","nEff"]},"recommended":{"anyOf":[{"type":"object","properties":{"pct":{"type":"number"},"lo":{"type":"number"},"hi":{"type":"number"},"answers":{"type":"number"},"questions":{"type":"number"},"nEff":{"type":"number"}},"required":["pct","lo","hi","answers","questions","nEff"]},{"type":"null"}]},"top":{"anyOf":[{"type":"object","properties":{"pct":{"type":"number"},"lo":{"type":"number"},"hi":{"type":"number"},"answers":{"type":"number"},"questions":{"type":"number"},"nEff":{"type":"number"}},"required":["pct","lo","hi","answers","questions","nEff"]},{"type":"null"}]},"engines":{"type":"array","items":{"type":"object","properties":{"engine":{"type":"string"},"named":{}},"required":["engine","named"]}},"topics":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"answers":{"type":"number"}},"required":["id","name","answers"]}}},"required":["key","brandKey","brandName","name","own","topic","named","recommended","top","engines","topics"]}}},"required":["window","answers","questions","products"]}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"viewer","x-vercatus-key-scopes":["read"]}},"/sites/{id}/competitors/{brandKey}":{"get":{"operationId":"getSitesByIdCompetitorsByBrandKey","tags":["Why"],"summary":"One competitor beside the site, ?days= (28 by default): its row, both shares per topic, the pages naming it, its rank in each checked search, its share without ","description":"One competitor beside the site, `?days=` (28 by default): its row, both shares per topic, the pages naming it, its rank in each checked search, its share without search per engine, what each engine's brief says about it, and recent changes (pages that newly name it or dropped it, clear share moves).","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"brandKey","in":"path","required":true,"schema":{"type":"string"}},{"name":"days","in":"query","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"competitor":{"$ref":"#/components/schemas/Shapeac5wv6"},"you":{"$ref":"#/components/schemas/Shape7ky7qg"},"topics":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"demandTier":{"type":"string","enum":["low","medium","high"]},"them":{"anyOf":[{"type":"object","properties":{"pct":{"type":"number"},"lo":{"type":"number"},"hi":{"type":"number"},"answers":{"type":"number"},"questions":{"type":"number"},"nEff":{"type":"number"}},"required":["pct","lo","hi","answers","questions","nEff"]},{"type":"null"}]},"you":{"anyOf":[{"type":"object","properties":{"pct":{"type":"number"},"lo":{"type":"number"},"hi":{"type":"number"},"answers":{"type":"number"},"questions":{"type":"number"},"nEff":{"type":"number"}},"required":["pct","lo","hi","answers","questions","nEff"]},{"type":"null"}]},"gap":{"anyOf":[{"type":"number"},{"type":"null"}]},"why":{"type":"object","properties":{"pages":{"type":"number"},"domains":{"type":"array","items":{"type":"string"}},"searches":{"type":"number"},"search":{"type":"string"}},"required":["pages","domains","searches","search"]}},"required":["id","name","demandTier","them","you","gap","why"]}},"sources":{"type":"array","items":{"$ref":"#/components/schemas/Shape1a3m5ki"}},"search":{"type":"array","items":{"type":"object","properties":{"query":{"type":"string"},"topicId":{"type":"string"},"google":{"anyOf":[{"type":"object","properties":{"checkedAt":{"type":"string"},"rank":{"anyOf":[{"type":"number"},{"type":"null"}]}},"required":["checkedAt","rank"]},{"type":"null"}]},"bing":{"anyOf":[{"type":"object","properties":{"checkedAt":{"type":"string"},"rank":{"anyOf":[{"type":"number"},{"type":"null"}]}},"required":["checkedAt","rank"]},{"type":"null"}]},"brave":{"anyOf":[{"type":"object","properties":{"checkedAt":{"type":"string"},"rank":{"anyOf":[{"type":"number"},{"type":"null"}]}},"required":["checkedAt","rank"]},{"type":"null"}]}},"required":["query","topicId","google","bing","brave"]}},"memory":{"type":"array","items":{"type":"object","properties":{"engine":{"type":"string"},"label":{"type":"string"},"share":{"anyOf":[{"type":"object","properties":{"pct":{"type":"number"},"lo":{"type":"number"},"hi":{"type":"number"},"answers":{"type":"number"},"questions":{"type":"number"},"nEff":{"type":"number"}},"required":["pct","lo","hi","answers","questions","nEff"]},{"type":"null"}]}},"required":["engine","label","share"]}},"briefs":{"type":"array","items":{"type":"object","properties":{"engine":{"type":"string"},"label":{"type":"string"},"says":{"type":"string"}},"required":["engine","label","says"]}},"changes":{"type":"array","items":{"type":"object","properties":{"at":{"type":"string"},"kind":{"type":"string","enum":["share","source_added","source_removed","natural_experiment"]},"text":{"type":"string"},"url":{"type":"string"},"effect":{"type":"object","properties":{"pp":{"type":"number"},"lo":{"type":"number"},"hi":{"type":"number"}},"required":["pp","lo","hi"]},"grade":{"type":"string"}},"required":["at","kind","text"]}}},"required":["competitor","you","topics","sources","search","memory","briefs","changes"]}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"viewer","x-vercatus-key-scopes":["read"]}},"/sites/{id}/briefs":{"get":{"operationId":"getSitesByIdBriefs","tags":["Why"],"summary":"The Engine Briefs: per engine, what it says about the site (how well it knows it, whether it would recommend it, a paragraph in its own terms, the facts it give","description":"The Engine Briefs: per engine, what it says about the site (how well it knows it, whether it would recommend it, a paragraph in its own terms, the facts it gives, its reasons for and against, what would change its mind with the lenses that back each item, and what moved since the previous brief), and when the next round is due. What the engine says, not what moves its answers.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"engines":{"type":"array","items":{"type":"object","properties":{"engine":{"type":"string"},"label":{"type":"string"},"madeAt":{"type":"string"},"basedOn":{"type":"number"},"knows":{"type":"string","enum":["well","partly","no"]},"recommends":{"anyOf":[{"type":"string","enum":["no","yes","conditional"]},{"type":"null"}]},"says":{"type":"string"},"facts":{"type":"array","items":{"type":"string"}},"reasonsFor":{"type":"array","items":{"type":"string"}},"reasonsAgainst":{"type":"array","items":{"type":"string"}},"wouldChange":{"type":"array","items":{"type":"object","properties":{"change":{"type":"string"},"kind":{"type":"string"},"corroboratedBy":{}},"required":["change","kind","corroboratedBy"]}},"changedSince":{"anyOf":[{"type":"string"},{"type":"null"}]},"memory":{"anyOf":[{"type":"object","properties":{"knowsWithoutSearch":{"type":"string","enum":["well","partly","no"]},"confusedWith":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["knowsWithoutSearch","confusedWith"]},{"type":"null"}]}},"required":["engine","label","madeAt","basedOn","knows","recommends","says","facts","reasonsFor","reasonsAgainst","wouldChange","changedSince","memory"]}},"nextAt":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["engines","nextAt"]}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"viewer","x-vercatus-key-scopes":["read"]}},"/sites/{id}/briefs/refresh":{"post":{"operationId":"postSitesByIdBriefsRefresh","tags":["Why"],"summary":"Asks every engine the brief probes again now, in the background (about 50 calls), and makes new summaries.","description":"Asks every engine the brief probes again now, in the background (about 50 calls), and makes new summaries. Answers at once with `{ started: true }`; a round already running for the site is not started twice. Analyst role; audited. Each round is paid for by Vercatus, so the press is bounded like every other paid action (LAUNCH-READINESS LR-001): the workspace needs a plan that measures the site (402), the domain must be verified where runs need it (403), a site is refreshed by hand once a day at most (429; the weekly round is the product, this is for \"I changed something\"), and at most three presses a day are counted, so a round that failed and left no summary cannot be looped either.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"202":{"description":"Accepted","content":{"application/json":{"schema":{"type":"object","properties":{"started":{"type":"boolean","enum":[true]}},"required":["started"]}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"analyst","x-vercatus-key-scopes":["write"]}},"/sites/{id}/brief-themes":{"get":{"operationId":"getSitesByIdBriefThemes","tags":["Sites"],"summary":"What the engines agree on (engine advice, EA-05): the latest week's themes from every engine's latest brief, consensus first.","description":"What the engines agree on (engine advice, EA-05): the latest week's themes from every engine's latest brief, consensus first. Each theme is one point the engines make (against the site, what would make it a first choice, how it could be more visible, or why they would pick a named competitor instead), with the engines that make it out of those briefed, whether that is consensus (three engines, or two that are half of those briefed), the topics asked, up to five of the engines' own phrasings, and `corroboratedBy`: the lenses whose measurements show the same (sources, search, memory, audit), empty when none does. What the engines say, never a cause. `{ week: null, themes: [] }` before the first brief.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"anyOf":[{"type":"object","properties":{"week":{"type":"null"},"enginesBriefed":{"type":"number"},"themes":{"type":"array","items":{}}},"required":["week","enginesBriefed","themes"]},{"type":"object","properties":{"week":{"type":"string"},"enginesBriefed":{"type":"number"},"themes":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"theme":{"type":"string"},"kind":{"type":"string"},"direction":{"type":"string","enum":["against","would_change","advice","prefers_rival"]},"rival":{"anyOf":[{"type":"string"},{"type":"null"}]},"rivalName":{"anyOf":[{"type":"string"},{"type":"null"}]},"topics":{"type":"array","items":{"type":"string"}},"engines":{"type":"array","items":{"type":"object","properties":{"engine":{"type":"string"},"label":{"type":"string"}},"required":["engine","label"]}},"engineCount":{"type":"number"},"enginesBriefed":{"type":"number"},"consensus":{"type":"boolean"},"corroboratedBy":{"type":"array","items":{"type":"string","enum":["search","memory","sources","audit"]}},"examples":{"type":"array","items":{"type":"object","properties":{"engine":{"type":"string"},"label":{"type":"string"},"text":{"type":"string"},"briefId":{"type":"string"},"direction":{"type":"string","enum":["against","would_change","advice","prefers_rival"]}},"required":["engine","label","text","briefId","direction"]}}},"required":["id","theme","kind","direction","rival","rivalName","topics","engines","engineCount","enginesBriefed","consensus","corroboratedBy","examples"]}}},"required":["week","enginesBriefed","themes"]}]}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"viewer","x-vercatus-key-scopes":["read"]}},"/sites/{id}/briefs/{engine}/probes":{"get":{"operationId":"getSitesByIdBriefsByEngineProbes","tags":["Why"],"summary":"The raw probes behind an engine's latest brief: each question, whether it was asked with search or without, the answer, what it cited and what the answer was re","description":"The raw probes behind an engine's latest brief: each question, whether it was asked with search or without, the answer, what it cited and what the answer was read to say.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"engine","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"engine":{"type":"string"},"label":{"type":"string"},"madeAt":{"type":"string"},"probes":{"type":"array","items":{"type":"object","properties":{"probe":{"type":"string","enum":["first","know","recommend","weak","visible"]},"mode":{"type":"string","enum":["search","memory"]},"prompt":{"type":"string"},"askedAt":{"type":"string"},"answer":{"type":"string"},"cited":{"type":"array","items":{"type":"object","properties":{"url":{"type":"string"},"domain":{"type":"string"}},"required":["url","domain"]}},"error":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["probe","mode","prompt","askedAt","answer","cited","error"]}}},"required":["engine","label","madeAt","probes"]}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"viewer","x-vercatus-key-scopes":["read"]}},"/sites/{id}/plays":{"get":{"operationId":"getSitesByIdPlays","tags":["Plays"],"summary":"The site's plays, best first (by rank: expected gain × confidence ÷ effort; plays with no gain below), ?status= (one of proposed, planned, in_progress, shipped,","description":"The site's plays, best first (by rank: expected gain × confidence ÷ effort; plays with no gain below), `?status=` (one of proposed, planned, in_progress, shipped, measuring, dismissed), `?type=` and `?limit=` (1–500, 200 by default), `?evidence=1` (also the proposals the plan keeps as evidence or for the developer). Without a status, dismissed plays and stale proposals are left out of the list. `counts` holds every play that is not a stale proposal, by status and by type.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"status","in":"query","required":false,"schema":{"type":"string"}},{"name":"type","in":"query","required":false,"schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"schema":{"type":"string"}},{"name":"evidence","in":"query","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"plays":{"type":"array","items":{"type":"object","properties":{"priority":{"type":"string","enum":["low","medium","high"]},"id":{"type":"string"},"key":{"type":"string"},"type":{"type":"string","enum":["source_listing","review_presence","community_presence","entity_clarity","search_presence","content_answer","page_fix","foundation","fact_correction","seo_fix"]},"title":{"type":"string"},"summary":{"type":"string"},"status":{"type":"string","enum":["planned","proposed","dismissed","in_progress","shipped","measuring"]},"owner":{"anyOf":[{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"}},"required":["id","name"]},{"type":"null"}]},"due":{"anyOf":[{"type":"string"},{"type":"null"}]},"topics":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"}},"required":["id","name"]}},"engines":{"type":"array","items":{"type":"string"}},"gain":{"$ref":"#/components/schemas/Shapen9ix7f"},"confidence":{"type":"string","enum":["low","medium","high"]},"effort":{"type":"string","enum":["S","M","L"]},"rank":{"type":"number"},"check":{"$ref":"#/components/schemas/Shapeduv3uz"},"stale":{"type":"boolean"},"createdAt":{"type":"string"},"updatedAt":{"type":"string"},"withheld":{"anyOf":[{"type":"object","properties":{"reason":{"type":"string"},"note":{"type":"string"}},"required":["reason","note"]},{"type":"null"}]},"retired":{"anyOf":[{"type":"object","properties":{"reason":{"type":"string"},"at":{"type":"string"}},"required":["reason","at"]},{"type":"null"}]},"target":{"anyOf":[{"type":"object","properties":{"url":{"type":"string"},"domain":{"type":"string"},"query":{"type":"string"},"platform":{"type":"string"},"findingKey":{"type":"string"},"rule":{"type":"string"},"pages":{"type":"array","items":{"type":"string"}}}},{"type":"null"}]},"competitors":{"type":"array","items":{"type":"object","properties":{"brandKey":{"type":"string"},"name":{"type":"string"}},"required":["brandKey","name"]}},"siteId":{"type":"string"},"externalRef":{"anyOf":[{"type":"object","properties":{"provider":{"type":"string"},"key":{"type":"string"},"url":{"type":"string"}},"required":["provider","key","url"]},{"type":"null"}]},"verdict":{"anyOf":[{"$ref":"#/components/schemas/Shape1dbs9y"},{"type":"null"}]},"held":{"type":"boolean"},"measurable":{"anyOf":[{"type":"object","properties":{"pp":{"type":"number"},"engines":{"type":"array","items":{"type":"string"}},"questions":{"type":"number"}},"required":["pp","engines","questions"]},{"type":"null"}]},"reach":{"anyOf":[{"type":"object","properties":{"answers":{"type":"number"},"topics":{"type":"number"},"cited":{"anyOf":[{"type":"number"},{"type":"null"}]},"days":{"type":"number"}},"required":["answers","topics","cited","days"]},{"type":"null"}]},"dismissedReason":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["priority","id","key","type","title","summary","status","owner","due","topics","engines","gain","confidence","effort","rank","check","stale","createdAt","updatedAt","withheld","retired","target","competitors","siteId","externalRef","verdict","held"]}},"counts":{"type":"object","properties":{"byStatus":{"type":"object","additionalProperties":{"type":"number"}},"byType":{"type":"object","additionalProperties":{"type":"number"}}},"required":["byStatus","byType"]}},"required":["plays","counts"]}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"viewer","x-vercatus-key-scopes":["read"]}},"/sites/{id}/plan":{"get":{"operationId":"getSitesByIdPlan","tags":["Sites"],"summary":"The site's plan, made with its plays: where it stands in five areas (areas: readable, understood, answers, confirmed, authority, each strong, needs_work or bloc","description":"The site's plan, made with its plays: where it stands in five areas (`areas`: readable, understood, answers, confirmed, authority, each strong, needs_work or blocking, with why), at most three active initiatives and two after this quarter (`initiatives`, each with its steps: the play's id, status, headline and why), the step to take this week (`next`), the technical fixes for the developer (`developer`) and the claims checked and not shown (`checked`). 404 before the first plan.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"at":{"type":"string"},"open":{"type":"array","items":{"$ref":"#/components/schemas/Shapeqsztp5"}},"words":{"type":"object","additionalProperties":{"type":"object","properties":{"hash":{"type":"string"},"headline":{"type":"string"},"why":{"type":"string"},"by":{"type":"string","enum":["template","model"]},"refused":{"type":"string"}},"required":["hash","headline","why","by"]}},"v":{"type":"number"},"strong":{"type":"array","items":{"$ref":"#/components/schemas/Shapeqsztp5"}},"areas":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","enum":["confirmed","answers","readable","understood","authority"]},"status":{"type":"string","enum":["strong","needs_work","blocking"]},"why":{"type":"string"}},"required":["id","status","why"]}},"checked":{"type":"array","items":{"type":"object","properties":{"what":{"type":"string"},"why":{"type":"string"}},"required":["what","why"]}},"initiatives":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","enum":["facts","compare","proof","community","readable","offer","programme","problems","authors","lists","reviews"]},"area":{"type":"string","enum":["confirmed","answers","readable","understood","authority"]},"title":{"type":"string"},"why":{"type":"string"},"value":{"type":"number"},"status":{"type":"string","enum":["active","later"]},"steps":{"type":"object","properties":{"length":{"type":"number"}},"required":["length"],"additionalProperties":{"type":"object","properties":{"key":{"type":"string"},"title":{"type":"string"},"why":{"type":"string"},"evidence":{},"who":{"type":"string","enum":["you","developer","you_and_partner"]},"effort":{"anyOf":[{"type":"string","enum":["S","M","L"]},{"type":"null"}]},"check":{"anyOf":[{"type":"string"},{"type":"null"}]},"about":{},"id":{"anyOf":[{"type":"string"},{"type":"null"}]},"status":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["key","title","why","evidence","id","status"]}}},"required":["id","area","title","why","value","status","steps"]}},"next":{"anyOf":[{"type":"object","properties":{"key":{"type":"string"},"id":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["key","id"]},{"type":"null"}]},"developer":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string"},"id":{"anyOf":[{"type":"string"},{"type":"null"}]},"title":{"type":"string"},"plain":{"type":"boolean"}},"required":["key","id","title","plain"]}},"earlier":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"key":{"type":"string"},"title":{"type":"string"},"status":{"type":"string"}},"required":["id","key","title","status"]}}},"required":["at","open","v","strong","areas","checked","initiatives","next","developer","earlier"]}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"viewer","x-vercatus-key-scopes":["read"]}},"/sites/{id}/plays/generate":{"post":{"operationId":"postSitesByIdPlaysGenerate","tags":["Plays"],"summary":"Regenerates the site's plays now from the lenses, the briefs and the findings; a person's status, owner and due are kept.","description":"Regenerates the site's plays now from the lenses, the briefs and the findings; a person's status, owner and due are kept. Answers with what changed. Analyst role; audited.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"candidates":{"type":"number"},"created":{"type":"number"},"updated":{"type":"number"},"stale":{"type":"number"},"revived":{"type":"number"},"byType":{"type":"object","additionalProperties":{"type":"number"}},"factsChecked":{"type":"number"},"withheld":{"type":"number"},"retired":{"type":"number"}},"required":["candidates","created","updated","stale","revived","byType","factsChecked"]}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"analyst","x-vercatus-key-scopes":["write"]}},"/sites/{id}/plays/{playId}":{"get":{"operationId":"getSitesByIdPlaysByPlayId","tags":["Plays"],"summary":"One play: its row; its evidence read fresh (its topics with today's shares and leaders, the source pages with the brands they name, its searches with the site's","description":"One play: its row; its evidence read fresh (its topics with today's shares and leaders, the source pages with the brands they name, its searches with the site's and the leader's ranks in Google, Bing and Brave, what the engines say, and the site audit's findings with their recommendation, evidence and how-to); its guide (null until written); its check history and its activity.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"playId","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"play":{"$ref":"#/components/schemas/Shape16lnw8k"},"evidence":{"type":"object","properties":{"topics":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"you":{"anyOf":[{"type":"object","properties":{"pct":{"type":"number"},"lo":{"type":"number"},"hi":{"type":"number"},"answers":{"type":"number"},"questions":{"type":"number"},"nEff":{"type":"number"}},"required":["pct","lo","hi","answers","questions","nEff"]},{"type":"null"}]},"leader":{"anyOf":[{"type":"object","properties":{"brandKey":{"type":"string"},"name":{"type":"string"},"share":{}},"required":["brandKey","name","share"]},{"type":"null"}]}},"required":["id","name","you","leader"]}},"sources":{"type":"array","items":{"type":"object","properties":{"url":{"type":"string"},"domain":{"type":"string"},"title":{"anyOf":[{"type":"string"},{"type":"null"}]},"kind":{"anyOf":[{"type":"string"},{"type":"null"}]},"citedBy":{"type":"number"},"names":{"type":"array","items":{"type":"string"}},"status":{"type":"string","enum":["error","blocked","ok","unread"]},"namesYou":{"type":"boolean"}},"required":["url","domain","title","kind","citedBy","names","status","namesYou"]}},"searches":{"type":"array","items":{"type":"object","properties":{"query":{"type":"string"},"google":{"anyOf":[{"type":"object","properties":{"checkedAt":{"type":"string"},"you":{"anyOf":[{"type":"number"},{"type":"null"}]},"leader":{"anyOf":[{"type":"number"},{"type":"null"}]}},"required":["checkedAt","you","leader"]},{"type":"null"}]},"bing":{"anyOf":[{"type":"object","properties":{"checkedAt":{"type":"string"},"you":{"anyOf":[{"type":"number"},{"type":"null"}]},"leader":{"anyOf":[{"type":"number"},{"type":"null"}]}},"required":["checkedAt","you","leader"]},{"type":"null"}]},"brave":{"anyOf":[{"type":"object","properties":{"checkedAt":{"type":"string"},"you":{"anyOf":[{"type":"number"},{"type":"null"}]},"leader":{"anyOf":[{"type":"number"},{"type":"null"}]}},"required":["checkedAt","you","leader"]},{"type":"null"}]}},"required":["query","google","bing","brave"]}},"briefs":{"type":"array","items":{"type":"object","properties":{"engine":{"type":"string"},"label":{"type":"string"},"text":{"type":"string"}},"required":["engine","label","text"]}},"findings":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string"},"title":{"type":"string"},"severity":{"type":"string"},"plain":{"anyOf":[{"type":"string"},{"type":"null"}]},"recommendation":{"anyOf":[{"type":"string"},{"type":"null"}]},"evidence":{"type":"array","items":{}},"id":{"type":"string"},"category":{"type":"string"},"scope":{"type":"string"},"scopeRef":{"anyOf":[{"type":"string"},{"type":"null"}]},"summary":{"type":"string"},"workflowId":{"type":"string"},"howto":{"type":"array","items":{}}},"required":["key","title","severity","plain","recommendation","evidence","id","category","scope","scopeRef","summary","workflowId","howto"]}},"leader":{"anyOf":[{"type":"object","properties":{"brandKey":{"type":"string"},"name":{"type":"string"}},"required":["brandKey","name"]},{"type":"null"}]},"facts":{"type":"object","additionalProperties":{}}},"required":["topics","sources","searches","briefs","findings","leader","facts"]},"guide":{"anyOf":[{"$ref":"#/components/schemas/Shape16otnsv"},{"type":"null"}]},"article":{"anyOf":[{"$ref":"#/components/schemas/Shape1xc5tcl"},{"type":"null"}]},"articleVersions":{"type":"array","items":{"type":"object","properties":{"version":{"type":"number"},"madeAt":{"type":"string"},"status":{"type":"string"}},"required":["version","madeAt","status"]}},"articleAllowance":{"anyOf":[{"$ref":"#/components/schemas/Shapep8tejg"},{"type":"null"}]},"checks":{"type":"array","items":{"type":"object","properties":{"ranAt":{"type":"string"},"state":{"type":"string","enum":["error","passing","failing","not_applicable"]},"detail":{"type":"object","additionalProperties":{}}},"required":["ranAt","state","detail"]}},"events":{"type":"array","items":{"type":"object","properties":{"at":{"type":"string"},"kind":{"type":"string","enum":["status","check","owner","due","comment","created","handoff","ship_confirmed","ship_rejected"]},"actor":{"anyOf":[{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"}},"required":["id","name"]},{"type":"null"}]},"by":{"type":"string","enum":["check","system","person"]},"detail":{"type":"object","additionalProperties":{}}},"required":["at","kind","actor","by","detail"]}},"check":{"type":"object","properties":{"kind":{"type":"string","enum":["source_names_brand","profile_exists","community_mention","entity_signals","page_answers","finding_resolved","brief_fact_absent","commerce_consistent","site_signals","seo_rule"]},"label":{"type":"string"}},"required":["kind","label"],"additionalProperties":{}},"likeThis":{"anyOf":[{"$ref":"#/components/schemas/Shape1m9zdy8"},{"type":"null"}]},"step":{"anyOf":[{"anyOf":[{"type":"object","properties":{"role":{"type":"string","enum":["step"]},"initiative":{"type":"string"},"initiativeTitle":{"type":"string"},"order":{"type":"number"},"of":{"type":"number"},"who":{"type":"string","enum":["you","developer","you_and_partner"]},"effort":{"type":"string","enum":["S","M","L"]},"next":{"type":"boolean"}},"required":["role","initiative","initiativeTitle","order","of","who","effort","next"]},{"type":"object","properties":{"role":{"type":"string","enum":["evidence","developer","earlier"]}},"required":["role"]}]},{"type":"null"}]}},"required":["play","evidence","guide","article","articleVersions","articleAllowance","checks","events","check","likeThis","step"]}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"viewer","x-vercatus-key-scopes":["read"]},"patch":{"operationId":"patchSitesByIdPlaysByPlayId","tags":["Plays"],"summary":"Changes a play, { status?, ownerId?, due?, dismissedReason?, checkUrl?","description":"Changes a play, `{ status?, ownerId?, due?, dismissedReason?, checkUrl? }`: a person sets proposed, planned, in_progress or dismissed (shipped comes from a passing check); the owner is a member of the workspace; due is a day; checkUrl is the page on the site that holds the change, which the page_answers check fetches. A play on a topic the site's experiment holds out cannot be planned or started (400). Or, on its own, `{ ship: \"done\" | \"confirm\" | \"reject\" }`: a person's word on a ship. Done marks a play still to do as done now (PLAYS-UX-PLAN.md D6): it ships by that person and the check goes on reading the site. Confirm records who says they did it, and ships a play whose check asked \"Did you do this?\"; reject (\"I did not\") un-ships a shipped play (back to the status it had, out of the verdicts and the Results chart) or stops the question, and that evidence never ships the play again; 409 when there is nothing to confirm or reject. Moving a shipped play back to another status by hand un-ships it the same way. Analyst role; audited.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"playId","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"status":{},"ownerId":{},"due":{},"dismissedReason":{},"checkUrl":{},"ship":{}}}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"play":{"$ref":"#/components/schemas/Shape16lnw8k"}},"required":["play"]}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"analyst","x-vercatus-key-scopes":["write"]}},"/sites/{id}/plays/{playId}/guide/{part}":{"post":{"operationId":"postSitesByIdPlaysByPlayIdGuideByPart","tags":["Plays"],"summary":"Writes one half of the play's guide, only when someone asks (opening a play writes nothing): …/guide/steps the numbered steps, …/guide/draft the short draft (an","description":"Writes one half of the play's guide, only when someone asks (opening a play writes nothing): `…/guide/steps` the numbered steps, `…/guide/draft` the short draft (an outreach note, a page outline, JSON-LD, copy), each from the play's own evidence, in the language of the play's market. A second press writes it again. Never invents claims, reviews or customers; nothing is sent by Vercatus. Analyst role; audited. The answer is `{ guide }` with both halves as they now stand. A play whose draft is a page to write is written by `…/article`, not here (409).","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"playId","in":"path","required":true,"schema":{"type":"string"}},{"name":"part","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Shape4lqxeq"}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"analyst","x-vercatus-key-scopes":["write"]}},"/sites/{id}/plays/{playId}/article":{"post":{"operationId":"postSitesByIdPlaysByPlayIdArticle","tags":["Plays"],"summary":"Writes a page for the play now, only when someone asks (opening a play writes nothing): for a play whose draft is a page (a topic to answer, a search to rank fo","description":"Writes a page for the play now, only when someone asks (opening a play writes nothing): for a play whose draft is a page (a topic to answer, a search to rank for). The content engine researches the topic's questions, the pages engines cite, the site's own pages and facts, then writes a brief and the page in the market's language with its meta tags, FAQ and JSON-LD, checks it (language, figures, addresses, structure) and turns anything the facts do not hold into an `[ADD: …]` for the author. Uses one of the plan's monthly articles (402 with the reason when none is left); 409 while one is being written for the play; 422 for a play whose draft is a short note. Answers 201 with `{ article, allowance }`, or 202 with `{ article: { id, status: \"pending\" } }` when it takes longer than the request waits: the play then holds it. Analyst role; audited. Vercatus never publishes the page.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"playId","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"article":{"$ref":"#/components/schemas/Shape1xc5tcl"},"allowance":{"$ref":"#/components/schemas/Shapep8tejg"}},"required":["article","allowance"]}}}},"202":{"description":"Accepted","content":{"application/json":{"schema":{"type":"object","properties":{"article":{"type":"object","properties":{"id":{"type":"null"},"status":{"type":"string"}},"required":["id","status"]}},"required":["article"]}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"analyst","x-vercatus-key-scopes":["write"]},"get":{"operationId":"getSitesByIdPlaysByPlayIdArticle","tags":["Plays"],"summary":"One version of the play's page (?version= the number the play lists; the latest without it), as the app shows it.","description":"One version of the play's page (`?version=` the number the play lists; the latest without it), as the app shows it. 404 when there is none.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"playId","in":"path","required":true,"schema":{"type":"string"}},{"name":"version","in":"query","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"article":{"$ref":"#/components/schemas/Shape1xc5tcl"}},"required":["article"]}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"viewer","x-vercatus-key-scopes":["read"]}},"/sites/{id}/content":{"get":{"operationId":"getSitesByIdContent","tags":["Sites"],"summary":"Content (PLAYS-UX-PLAN.md §0): every piece written for the site, newest first: the pieces written on Content and the pages written for content plays (their late","description":"Content (PLAYS-UX-PLAN.md §0): every piece written for the site, newest first: the pieces written on Content and the pages written for content plays (their latest version), in one shape, without their bodies (`?limit=`, 1–200).","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"allowance":{"anyOf":[{"$ref":"#/components/schemas/Shapep8tejg"},{"type":"null"}]},"pieces":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"id":{"type":"string"},"source":{"type":"string","enum":["content"]},"kind":{"type":"string"},"shape":{"type":"string","enum":["text","page","section"]},"title":{"type":"string"},"subject":{"type":"string"},"language":{"type":"string"},"status":{"type":"string","enum":["pending","failed","ready"]},"wordCount":{"type":"number"},"facts":{"type":"number"},"playId":{"anyOf":[{"type":"string"},{"type":"null"}]},"play":{"anyOf":[{"type":"string"},{"type":"null"}]},"createdAt":{"type":"string"}},"required":["id","source","kind","shape","title","subject","language","status","wordCount","facts","playId","play","createdAt"]},{"type":"object","properties":{"id":{"type":"string"},"source":{"type":"string","enum":["play"]},"kind":{"type":"string"},"shape":{"type":"string","enum":["page"]},"title":{"type":"string"},"subject":{"type":"string"},"language":{"type":"string"},"status":{"type":"string"},"wordCount":{"type":"number"},"facts":{"type":"number"},"playId":{"type":"string"},"play":{"type":"string"},"createdAt":{"type":"string"}},"required":["id","source","kind","shape","title","subject","language","status","wordCount","facts","playId","play","createdAt"]}]}}},"required":["allowance","pieces"]}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"viewer","x-vercatus-key-scopes":["read"]},"post":{"operationId":"postSitesByIdContent","tags":["Sites"],"summary":"Writes a piece now, { kind, subject, ask?, structure?, shape?, length?, playId?, topicId?, targetUrl?, beat?","description":"Writes a piece now, `{ kind, subject, ask?, structure?, shape?, length?, playId?, topicId?, targetUrl?, beat? }`: kind is article, guide, faq, comparison, listicle, product_page, landing_page, section, email or custom (with `ask`, what it should be, and `shape`: page, section or text); `beat` the pages AI cites that it must do better than. Written in one pass from the site's evidence, checked, and anything the facts do not hold becomes an `[ADD: …]`. A page or a section uses one of the plan's monthly articles (402 with the reason when none is left); plain text is free; 429 past the hourly cap. Answers 201 with `{ piece, allowance }`, or 202 with `{ piece: { id, status: \"pending\" } }` when it takes longer than the request waits. Analyst role; audited. Vercatus never publishes it.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"kind":{"type":"string","enum":["custom","email","comparison","listicle","section","faq","guide","article","product_page","landing_page"]},"subject":{"type":"string"},"ask":{"type":"string"},"structure":{"type":"string"},"shape":{"type":"string","enum":["text","page","section"]},"length":{"type":"string","enum":["standard","short","long"]},"playId":{"type":"string"},"topicId":{"type":"string"},"targetUrl":{"type":"string"},"beat":{"type":"array","items":{"type":"string"}}},"required":["kind"]}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"piece":{"$ref":"#/components/schemas/Shape1prsur2"},"allowance":{"$ref":"#/components/schemas/Shapep8tejg"}},"required":["piece","allowance"]}}}},"202":{"description":"Accepted","content":{"application/json":{"schema":{"type":"object","properties":{"piece":{"type":"object","properties":{"id":{"type":"null"},"status":{"type":"string"}},"required":["id","status"]}},"required":["piece"]}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"analyst","x-vercatus-key-scopes":["write"]}},"/sites/{id}/content/{pieceId}":{"get":{"operationId":"getSitesByIdContentByPieceId","tags":["Sites"],"summary":"One piece, whole: its body, meta, links, the facts to add and its checks.","description":"One piece, whole: its body, meta, links, the facts to add and its checks. 404 when it is not the site's.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"pieceId","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"piece":{"$ref":"#/components/schemas/Shape1prsur2"}},"required":["piece"]}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"viewer","x-vercatus-key-scopes":["read"]}},"/sites/{id}/plays/{playId}/guide":{"post":{"operationId":"postSitesByIdPlaysByPlayIdGuide","tags":["Plays"],"summary":"Writes both halves at once (the steps and the draft), when asked; the app asks for each half on its own.","description":"Writes both halves at once (the steps and the draft), when asked; the app asks for each half on its own. Analyst role.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"playId","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Shape4lqxeq"}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"analyst","x-vercatus-key-scopes":["write"]}},"/sites/{id}/plays/{playId}/check":{"post":{"operationId":"postSitesByIdPlaysByPlayIdCheck","tags":["Plays"],"summary":"Runs the play's acceptance check now and answers with the result.","description":"Runs the play's acceptance check now and answers with the result. A passing check ships a planned or in-progress play on strong evidence new since it started; otherwise the play asks \"Did you do this?\" (`play.check.ask`). Analyst role.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"playId","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"check":{"type":"object","properties":{"ranAt":{"type":"string"},"state":{"type":"string","enum":["error","passing","failing","not_applicable"]},"detail":{"type":"object","additionalProperties":{}}},"required":["ranAt","state","detail"]},"shipped":{"type":"boolean"},"play":{"anyOf":[{"$ref":"#/components/schemas/Shape16lnw8k"},{"type":"null"}]}},"required":["check","shipped","play"]}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"analyst","x-vercatus-key-scopes":["write"]}},"/sites/{id}/plays/{playId}/handoff":{"post":{"operationId":"postSitesByIdPlaysByPlayIdHandoff","tags":["Plays"],"summary":"Hands the play over, { tool, context?","description":"Hands the play over, `{ tool, context? }`: claude, codex, llm or markdown answer `{ tool, kind: \"brief\", context, markdown, words }`, the play as a lean task (the goal, where, what exactly, done when and only the constraints the task needs) or, with `context: \"full\"`, with its background (the business, why, the topics, the evidence, every step and draft) for a reader without the project; linear, jira, github or asana open an issue in the workspace's tracker with the lean task as its body and answer `{ tool, kind: \"issue\", ref }` (kept on the play: a second press returns the same issue). Recorded in the play's activity. Analyst role; audited.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"playId","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"tool":{},"context":{}}}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"anyOf":[{"type":"object","properties":{"tool":{"type":"string","enum":["llm","markdown","claude","codex","linear","jira","github","asana"]},"kind":{"type":"string","enum":["brief"]},"context":{"type":"string","enum":["full","lean"]},"markdown":{"type":"string"},"words":{"type":"number"}},"required":["tool","kind","context","markdown","words"]},{"type":"object","properties":{"tool":{"type":"string","enum":["llm","markdown","claude","codex","linear","jira","github","asana"]},"kind":{"type":"string","enum":["issue"]},"ref":{"type":"object","properties":{"provider":{"type":"string","enum":["linear","jira","github","asana"]},"id":{"type":"string"},"key":{"type":"string"},"url":{"type":"string"},"createdAt":{"type":"string"}},"required":["provider","id","key","url","createdAt"]},"url":{"type":"string"}},"required":["tool","kind","ref","url"]}]}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"analyst","x-vercatus-key-scopes":["write"]}},"/sites/{id}/plays/handoff":{"post":{"operationId":"postSitesByIdPlaysHandoff","tags":["Plays"],"summary":"Hands several of the site's plays over at once (NH-11): 1 to 25 play ids of this site (404 when one is not), a tool as for one play, lean or full, an optional o","description":"`{ ids, tool, context?, note?, preview? }`: hands several of the site's plays over at once (NH-11): 1 to 25 play ids of this site (404 when one is not), a tool as for one play, lean or full, an optional one-line conventions note for the header. claude, codex, llm or markdown answer `{ tool, kind: \"brief\", context, markdown, count, words, sites }`: one document with the site's header and the rules once, the tasks numbered and grouped by page; `preview: true` builds it without recording a hand-off (text tools only). linear, jira, github or asana open one issue per play (each kept on its play) and answer `{ tool, kind: \"issues\", count, issues }` with each issue or why it failed (502 when every one failed). A \"handoff\" event is recorded on each play handed. Analyst role; audited.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Shapeqyy0rq"}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"analyst","x-vercatus-key-scopes":["write"]}},"/plays/handoff":{"post":{"operationId":"postPlaysHandoff","tags":["Plays"],"summary":"The batch hand-off across the workspace (NH-11): plays from any of the sites the caller can see (404 when one is not), the document grouped by site and then by ","description":"`{ ids, tool, context?, note?, preview? }`: the batch hand-off across the workspace (NH-11): plays from any of the sites the caller can see (404 when one is not), the document grouped by site and then by page. Answers as the site's batch hand-off. Analyst role; audited.","requestBody":{"required":false,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Shapeqyy0rq"}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"analyst","x-vercatus-key-scopes":["write"]}},"/plays":{"get":{"operationId":"getPlays","tags":["Plays"],"summary":"The workspace's top open plays across the sites the caller can see, best first, ?limit= (1–100, 10 by default), each with its site.","description":"The workspace's top open plays across the sites the caller can see, best first, `?limit=` (1–100, 10 by default), each with its site.","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"plays":{"type":"array","items":{"type":"object","properties":{"site":{"type":"object","properties":{"id":{"type":"string"},"host":{"type":"string"}},"required":["id","host"]},"id":{"type":"string"},"key":{"type":"string"},"type":{"type":"string","enum":["source_listing","review_presence","community_presence","entity_clarity","search_presence","content_answer","page_fix","foundation","fact_correction","seo_fix"]},"title":{"type":"string"},"summary":{"type":"string"},"status":{"type":"string","enum":["planned","proposed","dismissed","in_progress","shipped","measuring"]},"owner":{"anyOf":[{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"}},"required":["id","name"]},{"type":"null"}]},"due":{"anyOf":[{"type":"string"},{"type":"null"}]},"topics":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"}},"required":["id","name"]}},"engines":{"type":"array","items":{"type":"string"}},"gain":{"$ref":"#/components/schemas/Shapen9ix7f"},"confidence":{"type":"string","enum":["low","medium","high"]},"effort":{"type":"string","enum":["S","M","L"]},"rank":{"type":"number"},"check":{"$ref":"#/components/schemas/Shapeduv3uz"},"stale":{"type":"boolean"},"createdAt":{"type":"string"},"updatedAt":{"type":"string"},"withheld":{"anyOf":[{"type":"object","properties":{"reason":{"type":"string"},"note":{"type":"string"}},"required":["reason","note"]},{"type":"null"}]},"retired":{"anyOf":[{"type":"object","properties":{"reason":{"type":"string"},"at":{"type":"string"}},"required":["reason","at"]},{"type":"null"}]},"target":{"anyOf":[{"type":"object","properties":{"url":{"type":"string"},"domain":{"type":"string"},"query":{"type":"string"},"platform":{"type":"string"},"findingKey":{"type":"string"},"rule":{"type":"string"},"pages":{"type":"array","items":{"type":"string"}}}},{"type":"null"}]},"competitors":{"type":"array","items":{"type":"object","properties":{"brandKey":{"type":"string"},"name":{"type":"string"}},"required":["brandKey","name"]}},"siteId":{"type":"string"},"externalRef":{"anyOf":[{"type":"object","properties":{"provider":{"type":"string"},"key":{"type":"string"},"url":{"type":"string"}},"required":["provider","key","url"]},{"type":"null"}]},"verdict":{"anyOf":[{"$ref":"#/components/schemas/Shape1dbs9y"},{"type":"null"}]},"held":{"type":"boolean"},"measurable":{"anyOf":[{"type":"object","properties":{"pp":{"type":"number"},"engines":{"type":"array","items":{"type":"string"}},"questions":{"type":"number"}},"required":["pp","engines","questions"]},{"type":"null"}]},"reach":{"anyOf":[{"type":"object","properties":{"answers":{"type":"number"},"topics":{"type":"number"},"cited":{"anyOf":[{"type":"number"},{"type":"null"}]},"days":{"type":"number"}},"required":["answers","topics","cited","days"]},{"type":"null"}]},"dismissedReason":{"anyOf":[{"type":"string"},{"type":"null"}]},"priority":{"type":"string","enum":["low","medium","high"]}},"required":["site","id","key","type","title","summary","status","owner","due","topics","engines","gain","confidence","effort","rank","check","stale","createdAt","updatedAt","withheld","retired","target","competitors","siteId","externalRef","verdict","held"]}}},"required":["plays"]}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"viewer","x-vercatus-key-scopes":["read"]}},"/plays/counts":{"get":{"operationId":"getPlaysCounts","tags":["Plays"],"summary":"The open plays per site the caller can see and in all (open), and of them those aimed at measured topics (onTopics).","description":"The open plays per site the caller can see and in all (`open`), and of them those aimed at measured topics (`onTopics`).","responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"total":{"type":"object","properties":{"open":{"type":"number"},"onTopics":{"type":"number"}},"required":["open","onTopics"]},"sites":{"type":"object","additionalProperties":{"type":"object","properties":{"open":{"type":"number"},"onTopics":{"type":"number"}},"required":["open","onTopics"]}}},"required":["total","sites"]}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"viewer","x-vercatus-key-scopes":["read"]}},"/plays/by-finding/{findingId}":{"get":{"operationId":"getPlaysByFindingByFindingId","tags":["Plays"],"summary":"The play that holds a finding (by the finding's id, from any run): { playId, siteId }, for the old finding links.","description":"The play that holds a finding (by the finding's id, from any run): `{ playId, siteId }`, for the old finding links. 404 when no play holds it.","parameters":[{"name":"findingId","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"playId":{"type":"string"},"siteId":{"type":"string"}},"required":["playId","siteId"]}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"viewer","x-vercatus-key-scopes":["read"]}},"/sites/{id}/quality-reports":{"post":{"operationId":"postSitesByIdQualityReports","tags":["Plays"],"summary":"Says a play, a topic or an AI demand figure is wrong.","description":"`{ kind, targetId, reason, note?, shown? }`: says a play, a topic or an AI demand figure is wrong. `kind` is play, topic or demand (a demand figure is named by its topic's id); `reason` is one of the kind's reasons (a play: not_my_market, no_stake, already_done, cannot_be_done, wrong_evidence, duplicate, other; a topic: not_my_business, wrong_market, another_meaning, other; a figure: too_high, too_low, not_believable, other); `note` at most 500 characters; `shown` the figure as it was shown. A play is dismissed for good with the reason (a shipped one un-shipped first), except \"already done\", which confirms the ship (or, when no check has seen the change, closes the play as done without counting it shipped); a topic is paused; a figure is recorded. Answers `201 { report, outcome, message, undoUntil }`. Analyst role; audited.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"kind":{},"targetId":{},"reason":{},"note":{},"shown":{}},"required":["kind","targetId","reason"]}}}},"responses":{"201":{"description":"Created","content":{"application/json":{"schema":{"type":"object","properties":{"report":{"type":"object","properties":{"id":{"type":"string"},"kind":{"type":"string","enum":["topic","play","demand"]},"targetId":{"type":"string"},"reason":{"type":"string"},"createdAt":{"type":"string"}},"required":["id","kind","targetId","reason","createdAt"]},"outcome":{"type":"string","enum":["paused","confirmed","dismissed","shipped","recorded","unshipped","done_unshipped","already_paused"]},"message":{"type":"string"},"undoUntil":{"type":"string"}},"required":["report","outcome","message","undoUntil"]}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"analyst","x-vercatus-key-scopes":["write"]}},"/sites/{id}/quality-reports/{reportId}":{"delete":{"operationId":"deleteSitesByIdQualityReportsByReportId","tags":["Plays"],"summary":"Undoes a report its maker filed in the last two minutes: the play or topic goes back as it was and the report is withdrawn.","description":"Undoes a report its maker filed in the last two minutes: the play or topic goes back as it was and the report is withdrawn. 404 for anyone else's; 409 once too old or resolved. Analyst role; audited.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"reportId","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean","enum":[true]}},"required":["ok"]}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"analyst","x-vercatus-key-scopes":["write"]}},"/sites/{id}/results":{"get":{"operationId":"getSitesByIdResults","tags":["Results"],"summary":"The site's results, ?days= (28 by default, at most 365, the \"now\" window) or ?from=&to= (ISO dates; a quarter for the quarterly view; to defaults to now): since","description":"The site's results, `?days=` (28 by default, at most 365, the \"now\" window) or `?from=&to=` (ISO dates; a quarter for the quarterly view; `to` defaults to now): `since`, Answer Share in the first 14 days of poll answers (`then`) against the window (`now`: 14 days until day 42, then 28, by default), the change (null while the two overlap; `windows` says when the first reading is due), the leader, and a rolling 28-day trend since; `verdicts`, the latest read of every shipped play with the counts by state (a play waiting for its first read counts as Too early); `wins`; `pending`, the shipped plays waiting for a read with its date; `outcomes`, AI sessions (GA4), assistant fetches (crawler logs) and Search Console AI impressions, then and now, each with its source or null when not connected; and the `experiment`, or null.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"days","in":"query","required":false,"schema":{"type":"string"}},{"name":"from","in":"query","required":false,"schema":{"type":"string"}},{"name":"to","in":"query","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"since":{"type":"object","properties":{"baselineFrom":{"anyOf":[{"type":"string"},{"type":"null"}]},"baselineTo":{"anyOf":[{"type":"string"},{"type":"null"}]},"method":{"type":"string","enum":["poll","journey_v1"]},"windows":{"$ref":"#/components/schemas/Shape1aus6k3"},"refresh":{"anyOf":[{"type":"string"},{"type":"null"}]},"topicChanges":{"type":"array","items":{"type":"object","properties":{"day":{"type":"string"},"added":{"type":"number"},"retired":{"type":"number"}},"required":["day","added","retired"]}},"journeyAnchorAt":{"anyOf":[{"type":"string"},{"type":"null"}]},"you":{"type":"object","properties":{"then":{"anyOf":[{"type":"object","properties":{"pct":{"type":"number"},"lo":{"type":"number"},"hi":{"type":"number"},"answers":{"type":"number"},"questions":{"type":"number"},"nEff":{"type":"number"}},"required":["pct","lo","hi","answers","questions","nEff"]},{"type":"null"}]},"now":{"anyOf":[{"type":"object","properties":{"pct":{"type":"number"},"lo":{"type":"number"},"hi":{"type":"number"},"answers":{"type":"number"},"questions":{"type":"number"},"nEff":{"type":"number"}},"required":["pct","lo","hi","answers","questions","nEff"]},{"type":"null"}]},"change":{"anyOf":[{"type":"object","properties":{"delta":{"type":"number"},"lo":{"type":"number"},"hi":{"type":"number"},"clear":{"type":"boolean"}},"required":["delta","lo","hi","clear"]},{"type":"null"}]},"matched":{"anyOf":[{"type":"object","properties":{"then":{"anyOf":[{"type":"object","properties":{"pct":{"type":"number"},"lo":{"type":"number"},"hi":{"type":"number"},"answers":{"type":"number"},"questions":{"type":"number"},"nEff":{"type":"number"}},"required":["pct","lo","hi","answers","questions","nEff"]},{"type":"null"}]},"now":{"anyOf":[{"type":"object","properties":{"pct":{"type":"number"},"lo":{"type":"number"},"hi":{"type":"number"},"answers":{"type":"number"},"questions":{"type":"number"},"nEff":{"type":"number"}},"required":["pct","lo","hi","answers","questions","nEff"]},{"type":"null"}]}},"required":["then","now"]},{"type":"null"}]},"namedFirst":{"anyOf":[{"type":"object","properties":{"pct":{"type":"number"},"lo":{"type":"number"},"hi":{"type":"number"},"answers":{"type":"number"},"questions":{"type":"number"},"nEff":{"type":"number"}},"required":["pct","lo","hi","answers","questions","nEff"]},{"type":"null"}]}},"required":["then","now","change"]},"changeBasis":{"anyOf":[{"$ref":"#/components/schemas/Shape1s2l1fs"},{"type":"null"}]},"leader":{"anyOf":[{"type":"object","properties":{"brandKey":{"type":"string"},"name":{"type":"string"},"then":{"anyOf":[{"type":"object","properties":{"pct":{"type":"number"},"lo":{"type":"number"},"hi":{"type":"number"},"answers":{"type":"number"},"questions":{"type":"number"},"nEff":{"type":"number"}},"required":["pct","lo","hi","answers","questions","nEff"]},{"type":"null"}]},"now":{"anyOf":[{"type":"object","properties":{"pct":{"type":"number"},"lo":{"type":"number"},"hi":{"type":"number"},"answers":{"type":"number"},"questions":{"type":"number"},"nEff":{"type":"number"}},"required":["pct","lo","hi","answers","questions","nEff"]},{"type":"null"}]}},"required":["brandKey","name","then","now"]},{"type":"null"}]},"trend":{"type":"array","items":{"type":"object","properties":{"day":{"type":"string"},"you":{"anyOf":[{"type":"number"},{"type":"null"}]},"leader":{"anyOf":[{"type":"number"},{"type":"null"}]},"youFirst":{"anyOf":[{"type":"number"},{"type":"null"}]}},"required":["day","you","leader"]}},"added":{"anyOf":[{"type":"object","properties":{"topics":{"type":"number"},"share":{"anyOf":[{"type":"object","properties":{"pct":{"type":"number"},"lo":{"type":"number"},"hi":{"type":"number"},"answers":{"type":"number"},"questions":{"type":"number"},"nEff":{"type":"number"}},"required":["pct","lo","hi","answers","questions","nEff"]},{"type":"null"}]},"since":{"type":"string"}},"required":["topics","share","since"]},{"type":"null"}]}},"required":["baselineFrom","baselineTo","method","windows","journeyAnchorAt","you","changeBasis","leader","trend"]},"verdicts":{"type":"object","properties":{"counts":{"type":"object","properties":{"won":{"type":"number"},"lost_ground":{"type":"number"},"no_effect":{"type":"number"},"inconclusive":{"type":"number"},"too_early":{"type":"number"}},"required":["won","lost_ground","no_effect","inconclusive","too_early"]},"basis":{"type":"string","enum":["latest","window","final"]},"tally":{"type":"object","properties":{"latest":{"type":"object","properties":{"basis":{"type":"string","enum":["latest"]},"counts":{"type":"object","properties":{"won":{"type":"number"},"lost_ground":{"type":"number"},"no_effect":{"type":"number"},"inconclusive":{"type":"number"},"too_early":{"type":"number"}},"required":["won","lost_ground","no_effect","inconclusive","too_early"]},"plays":{"type":"number"}},"required":["basis","counts","plays"]},"final":{"type":"object","properties":{"basis":{"type":"string","enum":["final"]},"counts":{"type":"object","properties":{"won":{"type":"number"},"lost_ground":{"type":"number"},"no_effect":{"type":"number"},"inconclusive":{"type":"number"},"too_early":{"type":"number"}},"required":["won","lost_ground","no_effect","inconclusive","too_early"]},"plays":{"type":"number"},"won":{"type":"number"},"winRate":{"anyOf":[{"type":"number"},{"type":"null"}]}},"required":["basis","counts","plays","won","winRate"]},"window":{"anyOf":[{"type":"object","properties":{"basis":{"type":"string","enum":["window"]},"from":{"type":"string"},"to":{"type":"string"},"counts":{"type":"object","properties":{"won":{"type":"number"},"lost_ground":{"type":"number"},"no_effect":{"type":"number"},"inconclusive":{"type":"number"},"too_early":{"type":"number"}},"required":["won","lost_ground","no_effect","inconclusive","too_early"]},"finalReads":{"type":"number"},"winningPlays":{"type":"number"},"wins":{"type":"number"}},"required":["basis","from","to","counts","finalReads","winningPlays","wins"]},{"type":"null"}]}},"required":["latest","final","window"]},"plays":{"type":"array","items":{"type":"object","properties":{"play":{"type":"object","properties":{"id":{"type":"string"},"key":{"type":"string"},"type":{"type":"string","enum":["source_listing","review_presence","community_presence","entity_clarity","search_presence","content_answer","page_fix","foundation","fact_correction","seo_fix"]},"title":{"type":"string"},"summary":{"type":"string"},"status":{"type":"string","enum":["planned","proposed","dismissed","in_progress","shipped","measuring"]},"owner":{},"due":{"anyOf":[{"type":"string"},{"type":"null"}]},"topics":{},"engines":{},"gain":{},"confidence":{"type":"string","enum":["low","medium","high"]},"effort":{"type":"string","enum":["S","M","L"]},"rank":{"type":"number"},"check":{},"stale":{"type":"boolean"},"createdAt":{"type":"string"},"updatedAt":{"type":"string"},"withheld":{},"retired":{},"target":{},"competitors":{},"siteId":{"type":"string"},"externalRef":{},"verdict":{},"held":{"type":"boolean"},"measurable":{},"reach":{},"dismissedReason":{"anyOf":[{"type":"string"},{"type":"null"}]},"priority":{"type":"string","enum":["low","medium","high"]}},"required":["id","key","type","title","summary","status","owner","due","topics","engines","gain","confidence","effort","rank","check","stale","createdAt","updatedAt","withheld","retired","target","competitors","siteId","externalRef","verdict","held"]},"verdict":{"$ref":"#/components/schemas/Shape1knnduw"}},"required":["play","verdict"]}}},"required":["counts","basis","tally","plays"]},"wins":{"type":"array","items":{"type":"object","properties":{"at":{"type":"string"},"topicId":{"anyOf":[{"type":"string"},{"type":"null"}]},"topicName":{"anyOf":[{"type":"string"},{"type":"null"}]},"engine":{"anyOf":[{"type":"string"},{"type":"null"}]},"effectPp":{"type":"number"},"playId":{"anyOf":[{"type":"string"},{"type":"null"}]},"playTitle":{"anyOf":[{"type":"string"},{"type":"null"}]},"simulated":{"type":"boolean"},"effectRange":{"anyOf":[{"type":"object","properties":{"lo":{"type":"number"},"hi":{"type":"number"}},"required":["lo","hi"]},{"type":"null"}]},"selectedAfterWin":{"type":"boolean","enum":[true]},"grade":{"anyOf":[{"type":"string","enum":["A","B","C","D"]},{"type":"null"}]}},"required":["at","topicId","topicName","engine","effectPp","playId","playTitle","simulated","effectRange","selectedAfterWin","grade"]}},"pending":{"type":"array","items":{"type":"object","properties":{"play":{"type":"object","properties":{"id":{"type":"string"},"key":{"type":"string"},"type":{"type":"string","enum":["source_listing","review_presence","community_presence","entity_clarity","search_presence","content_answer","page_fix","foundation","fact_correction","seo_fix"]},"title":{"type":"string"},"summary":{"type":"string"},"status":{"type":"string","enum":["planned","proposed","dismissed","in_progress","shipped","measuring"]},"owner":{"anyOf":[{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"}},"required":["id","name"]},{"type":"null"}]},"due":{"anyOf":[{"type":"string"},{"type":"null"}]},"topics":{"type":"array","items":{}},"engines":{"type":"array","items":{"type":"string"}},"gain":{"type":"object","properties":{"pp":{"anyOf":[{"type":"number"},{"type":"null"}]},"lo":{"anyOf":[{"type":"number"},{"type":"null"}]},"hi":{"anyOf":[{"type":"number"},{"type":"null"}]},"basis":{"type":"string","enum":["none","verdicts","observed","heuristic"]},"note":{"type":"string"},"prior":{},"demoted":{"type":"boolean"}},"required":["pp","lo","hi","basis","note","prior"]},"confidence":{"type":"string","enum":["low","medium","high"]},"effort":{"type":"string","enum":["S","M","L"]},"rank":{"type":"number"},"check":{"type":"object","properties":{"kind":{"type":"string"},"label":{"type":"string"},"state":{"type":"string","enum":["error","passing","failing","not_applicable","not_run"]},"lastRunAt":{"anyOf":[{"type":"string"},{"type":"null"}]},"shippedAt":{"anyOf":[{"type":"string"},{"type":"null"}]},"form":{"type":"string"},"shippedBy":{"anyOf":[{"type":"string","enum":["check","person"]},{"type":"null"}]},"confirmedBy":{},"seen":{"anyOf":[{"type":"string"},{"type":"null"}]},"ask":{},"alreadyTrue":{"type":"boolean"}},"required":["kind","label","state","lastRunAt","shippedAt"]},"stale":{"type":"boolean"},"createdAt":{"type":"string"},"updatedAt":{"type":"string"},"withheld":{"anyOf":[{"type":"object","properties":{"reason":{"type":"string"},"note":{"type":"string"}},"required":["reason","note"]},{"type":"null"}]},"retired":{"anyOf":[{"type":"object","properties":{"reason":{"type":"string"},"at":{"type":"string"}},"required":["reason","at"]},{"type":"null"}]},"target":{"anyOf":[{"type":"object","properties":{"url":{"type":"string"},"domain":{"type":"string"},"query":{"type":"string"},"platform":{"type":"string"},"findingKey":{"type":"string"},"rule":{"type":"string"},"pages":{}}},{"type":"null"}]},"competitors":{"type":"array","items":{}},"siteId":{"type":"string"},"externalRef":{"anyOf":[{"type":"object","properties":{"provider":{"type":"string"},"key":{"type":"string"},"url":{"type":"string"}},"required":["provider","key","url"]},{"type":"null"}]},"verdict":{"anyOf":[{"$ref":"#/components/schemas/Shape1knnduw"},{"type":"null"}]},"held":{"type":"boolean"},"measurable":{"anyOf":[{"type":"object","properties":{"pp":{"type":"number"},"engines":{},"questions":{"type":"number"}},"required":["pp","engines","questions"]},{"type":"null"}]},"reach":{"anyOf":[{"type":"object","properties":{"answers":{"type":"number"},"topics":{"type":"number"},"cited":{"anyOf":[{"type":"number"},{"type":"null"}]},"days":{"type":"number"}},"required":["answers","topics","cited","days"]},{"type":"null"}]},"dismissedReason":{"anyOf":[{"type":"string"},{"type":"null"}]},"priority":{"type":"string","enum":["low","medium","high"]}},"required":["id","key","type","title","summary","status","owner","due","topics","engines","gain","confidence","effort","rank","check","stale","createdAt","updatedAt","withheld","retired","target","competitors","siteId","externalRef","verdict","held"]},"nextReadAt":{"anyOf":[{"type":"string"},{"type":"null"}]},"day":{"type":"number"}},"required":["play","nextReadAt","day"]}},"outcomes":{"type":"object","properties":{"aiSessions":{"type":"object","properties":{"now":{"anyOf":[{"type":"number"},{"type":"null"}]},"then":{"anyOf":[{"type":"number"},{"type":"null"}]},"source":{"anyOf":[{"type":"string","enum":["ga4"]},{"type":"null"}]}},"required":["now","then","source"]},"assistantFetches":{"type":"object","properties":{"now":{"anyOf":[{"type":"number"},{"type":"null"}]},"then":{"anyOf":[{"type":"number"},{"type":"null"}]},"source":{"anyOf":[{"type":"string","enum":["logs"]},{"type":"null"}]}},"required":["now","then","source"]},"searchAiImpressions":{"type":"object","properties":{"now":{"anyOf":[{"type":"number"},{"type":"null"}]},"then":{"anyOf":[{"type":"number"},{"type":"null"}]},"source":{"anyOf":[{"type":"string","enum":["gsc_report"]},{"type":"null"}]}},"required":["now","then","source"]}},"required":["aiSessions","assistantFetches","searchAiImpressions"]},"experiment":{"anyOf":[{"$ref":"#/components/schemas/Shapelmgajl"},{"type":"null"}]},"seo":{"anyOf":[{"type":"object","properties":{"then":{"type":"object","properties":{"at":{"type":"string"},"score":{"anyOf":[{"type":"number"},{"type":"null"}]},"rulesVersion":{"type":"number"}},"required":["at","score","rulesVersion"]},"now":{"type":"object","properties":{"at":{"type":"string"},"score":{"anyOf":[{"type":"number"},{"type":"null"}]},"rulesVersion":{"type":"number"}},"required":["at","score","rulesVersion"]},"comparable":{"type":"boolean"},"fixed":{"type":"array","items":{"$ref":"#/components/schemas/Shape1xmnuu8"}},"partlyFixed":{"type":"array","items":{"$ref":"#/components/schemas/Shape1xmnuu8"}},"newIssues":{"type":"array","items":{"$ref":"#/components/schemas/Shape1xmnuu8"}},"worse":{"type":"array","items":{"$ref":"#/components/schemas/Shape1xmnuu8"}},"newlyChecked":{"type":"array","items":{"$ref":"#/components/schemas/Shape1xmnuu8"}}},"required":["then","now","comparable","fixed","partlyFixed","newIssues","worse","newlyChecked"]},{"type":"null"}]},"demo":{"type":"boolean"}},"required":["since","verdicts","wins","pending","outcomes","experiment","seo","demo"]}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"viewer","x-vercatus-key-scopes":["read"]}},"/sites/{id}/plays/{playId}/verdicts":{"get":{"operationId":"getSitesByIdPlaysByPlayIdVerdicts","tags":["Results"],"summary":"Every read of a play's verdict (days 14, 30 and 45, its own or its bundle's), oldest first.","description":"Every read of a play's verdict (days 14, 30 and 45, its own or its bundle's), oldest first.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"playId","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"verdicts":{"type":"array","items":{"$ref":"#/components/schemas/Shapegw25lz"}}},"required":["verdicts"]}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"viewer","x-vercatus-key-scopes":["read"]}},"/sites/{id}/experiment":{"post":{"operationId":"postSitesByIdExperiment","tags":["Results"],"summary":"Holds these topics out as controls (an experiment): plays on them are paused and labelled held, so every verdict has untouched topics to compare with.","description":"`{ heldTopicIds }`: holds these topics out as controls (an experiment): plays on them are paused and labelled held, so every verdict has untouched topics to compare with. They must be the site's active topics and leave at least one to treat; a running experiment is replaced. Answers `{ experiment }`. Analyst role; audited.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"heldTopicIds":{}},"required":["heldTopicIds"]}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"experiment":{"$ref":"#/components/schemas/Shapelmgajl"}},"required":["experiment"]}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"analyst","x-vercatus-key-scopes":["write"]},"delete":{"operationId":"deleteSitesByIdExperiment","tags":["Results"],"summary":"Ends the site's experiment: held topics are released and their plays may start.","description":"Ends the site's experiment: held topics are released and their plays may start. Answers `{ experiment: null }`. Analyst role; audited.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"experiment":{"type":"null"}},"required":["experiment"]}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"analyst","x-vercatus-key-scopes":["write"]}},"/results":{"get":{"operationId":"getResults","tags":["Results"],"summary":"The workspace's sites the caller can see, ?days= (28 by default) or ?from=&to=: each one's Answer Share then and now with the change, its wins in the window and","description":"The workspace's sites the caller can see, `?days=` (28 by default) or `?from=&to=`: each one's Answer Share then and now with the change, its wins in the window and its verdict counts (Home and the portfolio).","parameters":[{"name":"days","in":"query","required":false,"schema":{"type":"string"}},{"name":"from","in":"query","required":false,"schema":{"type":"string"}},{"name":"to","in":"query","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"sites":{"type":"array","items":{"type":"object","properties":{"site":{"type":"object","properties":{"id":{"type":"string"},"host":{"type":"string"}},"required":["id","host"]},"you":{"type":"object","properties":{"then":{"anyOf":[{"type":"object","properties":{"pct":{"type":"number"},"lo":{"type":"number"},"hi":{"type":"number"},"answers":{"type":"number"},"questions":{"type":"number"},"nEff":{"type":"number"}},"required":["pct","lo","hi","answers","questions","nEff"]},{"type":"null"}]},"now":{"anyOf":[{"type":"object","properties":{"pct":{"type":"number"},"lo":{"type":"number"},"hi":{"type":"number"},"answers":{"type":"number"},"questions":{"type":"number"},"nEff":{"type":"number"}},"required":["pct","lo","hi","answers","questions","nEff"]},{"type":"null"}]},"change":{"anyOf":[{"type":"object","properties":{"delta":{"type":"number"},"lo":{"type":"number"},"hi":{"type":"number"},"clear":{"type":"boolean"}},"required":["delta","lo","hi","clear"]},{"type":"null"}]},"matched":{"anyOf":[{"type":"object","properties":{"then":{},"now":{}},"required":["then","now"]},{"type":"null"}]},"namedFirst":{"anyOf":[{"type":"object","properties":{"pct":{"type":"number"},"lo":{"type":"number"},"hi":{"type":"number"},"answers":{"type":"number"},"questions":{"type":"number"},"nEff":{"type":"number"}},"required":["pct","lo","hi","answers","questions","nEff"]},{"type":"null"}]}},"required":["then","now","change"]},"changeBasis":{"anyOf":[{"$ref":"#/components/schemas/Shape1s2l1fs"},{"type":"null"}]},"windows":{"anyOf":[{"$ref":"#/components/schemas/Shape1aus6k3"},{"type":"null"}]},"wins":{"type":"number"},"verdicts":{"type":"object","properties":{"won":{"type":"number"},"lost_ground":{"type":"number"},"no_effect":{"type":"number"},"inconclusive":{"type":"number"},"too_early":{"type":"number"}},"required":["won","lost_ground","no_effect","inconclusive","too_early"]},"tally":{"type":"object","properties":{"latest":{"type":"object","properties":{"basis":{"type":"string","enum":["latest"]},"counts":{},"plays":{"type":"number"}},"required":["basis","counts","plays"]},"final":{"type":"object","properties":{"basis":{"type":"string","enum":["final"]},"counts":{},"plays":{"type":"number"},"won":{"type":"number"},"winRate":{"anyOf":[{"type":"number"},{"type":"null"}]}},"required":["basis","counts","plays","won","winRate"]},"window":{"anyOf":[{"type":"object","properties":{"basis":{"type":"string","enum":["window"]},"from":{"type":"string"},"to":{"type":"string"},"counts":{},"finalReads":{"type":"number"},"winningPlays":{"type":"number"},"wins":{"type":"number"}},"required":["basis","from","to","counts","finalReads","winningPlays","wins"]},{"type":"null"}]}},"required":["latest","final","window"]},"demo":{"type":"boolean"},"simulated":{"type":"object","properties":{"verdicts":{"type":"number"},"wins":{"type":"number"}},"required":["verdicts","wins"]}},"required":["site","you","changeBasis","windows","wins","verdicts","tally","demo","simulated"]}}},"required":["sites"]}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"viewer","x-vercatus-key-scopes":["read"]}},"/sites/{id}/visibility-feeds":{"get":{"operationId":"getSitesByIdVisibilityFeeds","tags":["Sites"],"summary":"A site's visibility on Google's own surfaces, by its kind (siteType: shop, publisher, local, software, other; typeFrom says whether it was set or read from the ","description":"A site's visibility on Google's own surfaces, by its kind (`siteType`: shop, publisher, local, software, other; `typeFrom` says whether it was set or read from the domain's vertical): `serp`, the blocks of Google's results pages for the site's questions (Top stories, local pack, popular products, shopping, video: on how many questions each showed and on how many the site was in it) and the People Also Ask questions shown most; then the feed its kind reads, each with `status` (awaiting or ready), `asOf` and `nextBy` (the day the next read lands): `shopping` (shops: listed or not, rank, price against the others' median), `news` (publishers: in News results and Top stories, freshness of the listed articles), `maps` and `profile` (local businesses: Maps rank, and the Business Profile against the name, address and phone the site states). A feed the kind does not read is null. 404 for a site the caller cannot see.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"siteType":{"anyOf":[{"type":"string","enum":["local","shop","publisher","software","other"]},{"type":"null"}]},"typeFrom":{"anyOf":[{"type":"string","enum":["vertical","setting"]},{"type":"null"}]},"feeds":{"type":"array","items":{"type":"string","enum":["news","shopping","maps","business_profile"]}},"serp":{"anyOf":[{"type":"object","properties":{"asOf":{"type":"string"},"questions":{"type":"number"},"blocks":{"type":"object","properties":{"video":{"type":"object","properties":{"shown":{"type":"number"},"you":{"type":"number"}},"required":["shown","you"]},"shopping":{"type":"object","properties":{"shown":{"type":"number"},"you":{"type":"number"}},"required":["shown","you"]},"topStories":{"type":"object","properties":{"shown":{"type":"number"},"you":{"type":"number"}},"required":["shown","you"]},"localPack":{"type":"object","properties":{"shown":{"type":"number"},"you":{"type":"number"}},"required":["shown","you"]},"popularProducts":{"type":"object","properties":{"shown":{"type":"number"},"you":{"type":"number"}},"required":["shown","you"]}},"required":["video","shopping","topStories","localPack","popularProducts"]},"paa":{"type":"array","items":{"type":"object","properties":{"question":{"type":"string"},"count":{"type":"number"},"you":{"type":"boolean"}},"required":["question","count","you"]}}},"required":["asOf","questions","blocks","paa"]},{"type":"null"}]},"shopping":{"anyOf":[{"type":"object","properties":{"status":{"type":"string","enum":["ready","awaiting"]},"asOf":{"anyOf":[{"type":"string"},{"type":"null"}]},"nextBy":{"type":"string"},"capped":{"type":"boolean"},"queries":{"type":"array","items":{"type":"object","properties":{"query":{"type":"string"},"topicId":{"anyOf":[{"type":"string"},{"type":"null"}]},"listed":{"type":"boolean"},"rank":{"anyOf":[{"type":"number"},{"type":"null"}]},"price":{"anyOf":[{"type":"object","properties":{"currency":{"type":"string"},"own":{"type":"number"},"othersMedian":{"anyOf":[{"type":"number"},{"type":"null"}]},"othersLowest":{"anyOf":[{"type":"number"},{"type":"null"}]},"cheaperThan":{"type":"number"},"others":{"type":"number"}},"required":["currency","own","othersMedian","othersLowest","cheaperThan","others"]},{"type":"null"}]},"top":{"type":"array","items":{}}},"required":["query","topicId","listed","rank","price","top"]}}},"required":["status","asOf","nextBy","capped","queries"]},{"type":"null"}]},"news":{"anyOf":[{"type":"object","properties":{"status":{"type":"string","enum":["ready","awaiting"]},"asOf":{"anyOf":[{"type":"string"},{"type":"null"}]},"nextBy":{"type":"string"},"capped":{"type":"boolean"},"queries":{"type":"array","items":{"type":"object","properties":{"query":{"type":"string"},"topicId":{"anyOf":[{"type":"string"},{"type":"null"}]},"inNews":{"type":"boolean"},"inTopStories":{"type":"boolean"},"rank":{"anyOf":[{"type":"number"},{"type":"null"}]},"freshness":{"type":"object","properties":{"ownNewest":{"anyOf":[{"type":"string"},{"type":"null"}]},"ownAgeHours":{"anyOf":[{"type":"number"},{"type":"null"}]},"othersMedianAgeHours":{"anyOf":[{"type":"number"},{"type":"null"}]}},"required":["ownNewest","ownAgeHours","othersMedianAgeHours"]},"top":{"type":"array","items":{}}},"required":["query","topicId","inNews","inTopStories","rank","freshness","top"]}}},"required":["status","asOf","nextBy","capped","queries"]},{"type":"null"}]},"maps":{"anyOf":[{"type":"object","properties":{"status":{"type":"string","enum":["ready","awaiting"]},"asOf":{"anyOf":[{"type":"string"},{"type":"null"}]},"nextBy":{"type":"string"},"capped":{"type":"boolean"},"queries":{"type":"array","items":{"type":"object","properties":{"query":{"type":"string"},"topicId":{"anyOf":[{"type":"string"},{"type":"null"}]},"listed":{"type":"boolean"},"rank":{"anyOf":[{"type":"number"},{"type":"null"}]},"top":{"type":"array","items":{}}},"required":["query","topicId","listed","rank","top"]}}},"required":["status","asOf","nextBy","capped","queries"]},{"type":"null"}]},"profile":{"anyOf":[{"type":"object","properties":{"status":{"type":"string","enum":["ready","awaiting"]},"asOf":{"anyOf":[{"type":"string"},{"type":"null"}]},"nextBy":{"type":"string"},"capped":{"type":"boolean"},"found":{"anyOf":[{"type":"boolean"},{"type":"null"}]},"listing":{"anyOf":[{"type":"object","properties":{"title":{"type":"string"},"rating":{"anyOf":[{"type":"number"},{"type":"null"}]},"votes":{"anyOf":[{"type":"number"},{"type":"null"}]},"categories":{"type":"array","items":{"type":"string"}},"phone":{"anyOf":[{"type":"string"},{"type":"null"}]},"address":{"anyOf":[{"type":"string"},{"type":"null"}]},"claimed":{"anyOf":[{"type":"boolean"},{"type":"null"}]},"photos":{"anyOf":[{"type":"number"},{"type":"null"}]}},"required":["title","rating","votes","categories","phone","address","claimed","photos"]},{"type":"null"}]},"site":{"anyOf":[{"type":"object","properties":{"name":{"anyOf":[{"type":"string"},{"type":"null"}]},"phone":{"anyOf":[{"type":"string"},{"type":"null"}]},"address":{"anyOf":[{"type":"string"},{"type":"null"}]},"source":{"anyOf":[{"type":"string","enum":["visible","markup"]},{"type":"null"}]}},"required":["name","phone","address","source"]},{"type":"null"}]},"nap":{"anyOf":[{"type":"object","properties":{"name":{"type":"string","enum":["unknown","match","mismatch"]},"address":{"type":"string","enum":["unknown","match","mismatch"]},"phone":{"type":"string","enum":["unknown","match","mismatch"]},"consistent":{"anyOf":[{"type":"boolean"},{"type":"null"}]},"mismatches":{"type":"array","items":{"type":"object","properties":{"part":{"type":"string","enum":["name","address","phone"]},"site":{"type":"string"},"listing":{"type":"string"}},"required":["part","site","listing"]}}},"required":["name","address","phone","consistent","mismatches"]},{"type":"null"}]}},"required":["status","asOf","nextBy","capped","found","listing","site","nap"]},{"type":"null"}]}},"required":["siteType","typeFrom","feeds","serp","shopping","news","maps","profile"]}}}},"default":{"description":"An error: `{ error, code?, requestId? }` with a conventional status (400, 401, 402, 403, 404, 409, 429; 5xx for a fault). Always JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-vercatus-role":"viewer","x-vercatus-key-scopes":["read"]}}},"components":{"securitySchemes":{"apiKey":{"type":"http","scheme":"bearer","description":"A Vercatus API key (ca_…). Keys expire, may be limited to some sites and addresses, and carry the read, write and export scopes."}},"schemas":{"Shape105podq":{"type":"object","properties":{"id":{"type":"string"},"text":{"type":"string"},"origin":{"type":"string","enum":["manual","prompt","gsc","built","fanout"]},"intentClass":{"anyOf":[{"type":"string","enum":["brand","buyer","problem","support","content","machine","echo","unclear"]},{"type":"null"}]},"provenance":{"anyOf":[{"type":"object","additionalProperties":{}},{"type":"null"}]},"asked":{"type":"number"},"lastAskedAt":{"anyOf":[{"type":"string"},{"type":"null"}]},"exact":{"type":"boolean"}},"required":["id","text","origin","intentClass","provenance","asked","lastAskedAt","exact"]},"Shape118s7vd":{"type":"object","properties":{"brand":{"anyOf":[{"type":"object","properties":{"names":{"type":"array","items":{"type":"string"}},"aliases":{"type":"array","items":{"type":"string"}},"exclude":{"type":"array","items":{"type":"string"}}}},{"type":"null"}]},"effective":{"type":"object","properties":{"names":{"type":"array","items":{"type":"string"}},"aliases":{"type":"array","items":{"type":"string"}},"exclude":{"type":"array","items":{"type":"string"}},"domains":{"type":"array","items":{"type":"string"}}},"required":["names","aliases","exclude","domains"]}},"required":["brand","effective"]},"Shape11k3axj":{"type":"object","properties":{"ok":{"type":"boolean","enum":[true]},"applied":{"anyOf":[{"type":"object","properties":{"orgId":{"type":"string"},"planId":{"type":"string"},"status":{"type":"string","enum":["none","trialing","active","past_due","unpaid","canceled","incomplete","paused"]}},"required":["orgId","planId","status"]},{"type":"null"}]}},"required":["ok","applied"]},"Shape11q995e":{"type":"object","properties":{"days":{"type":"number"},"to":{"type":"string"},"requests":{"type":"number"},"previous":{"type":"number"},"crawlers":{"type":"number"},"refused":{"type":"number"},"templates":{"type":"number"},"top":{"anyOf":[{"type":"object","properties":{"crawler":{"type":"string"},"label":{"type":"string"},"requests":{"type":"number"}},"required":["crawler","label","requests"]},{"type":"null"}]},"lastDay":{"type":"string"},"previousComplete":{"type":"boolean"}},"required":["days","to","requests","previous","crawlers","refused","templates","top","lastDay","previousComplete"]},"Shape12ovojy":{"type":"object","properties":{"id":{"type":"string"},"brand":{"anyOf":[{"type":"object","properties":{"names":{"type":"array","items":{"type":"string"}},"aliases":{"type":"array","items":{"type":"string"}},"exclude":{"type":"array","items":{"type":"string"}}}},{"type":"null"}]},"name":{"anyOf":[{"type":"string"},{"type":"null"}]},"createdAt":{"type":"string","format":"date-time"},"orgId":{"anyOf":[{"type":"string"},{"type":"null"}]},"host":{"type":"string"},"verifiedAt":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"verificationToken":{"anyOf":[{"type":"string"},{"type":"null"}]},"verificationMethod":{"anyOf":[{"type":"string","enum":["meta","dns","search_console","workspace"]},{"type":"null"}]},"verification":{"anyOf":[{"$ref":"#/components/schemas/Shape1na1muw"},{"type":"null"}]},"origin":{"type":"string"},"memory":{"$ref":"#/components/schemas/Shapenglwsz"},"schedule":{"anyOf":[{"$ref":"#/components/schemas/Shapenuhyh8"},{"type":"null"}]},"nextFullAt":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"nextLightAt":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"watch":{"$ref":"#/components/schemas/Shape1tg61kc"},"competitors":{"type":"array","items":{"type":"string"}},"markets":{"$ref":"#/components/schemas/Shape1p31u7k"},"competitorBrands":{"anyOf":[{"type":"object","additionalProperties":{"type":"object","properties":{"names":{"type":"array","items":{"type":"string"}},"aliases":{"type":"array","items":{"type":"string"}},"exclude":{"type":"array","items":{"type":"string"}}}}},{"type":"null"}]},"poll":{"$ref":"#/components/schemas/Shape6nx4xt"},"demo":{"type":"boolean"},"answersScoredAt":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"siteType":{"anyOf":[{"type":"string","enum":["local","shop","publisher","software","other"]},{"type":"null"}]},"siteTypeSource":{"anyOf":[{"type":"string","enum":["owner","classified"]},{"type":"null"}]},"siteTypeClassified":{"anyOf":[{"$ref":"#/components/schemas/Shape1ypmqf8"},{"type":"null"}]},"updatedAt":{"type":"string","format":"date-time"},"integrations":{"$ref":"#/components/schemas/Shape1flbz1k"}},"required":["id","brand","name","createdAt","orgId","host","verifiedAt","verificationToken","verificationMethod","verification","origin","memory","schedule","nextFullAt","nextLightAt","watch","competitors","markets","competitorBrands","poll","demo","answersScoredAt","siteType","siteTypeSource","siteTypeClassified","updatedAt","integrations"]},"Shape13dqj2k":{"type":"object","properties":{"lastError":{"anyOf":[{"type":"string"},{"type":"null"}]},"property":{"type":"string"},"propertyName":{"type":"string"},"account":{"type":"string"},"connectedAt":{"type":"string"},"connectedBy":{"anyOf":[{"type":"string"},{"type":"null"}]},"lastSyncAt":{"anyOf":[{"type":"string"},{"type":"null"}]},"backfilledTo":{"anyOf":[{"type":"string"},{"type":"null"}]},"lastReceived":{"anyOf":[{"$ref":"#/components/schemas/Shapew5b02p"},{"type":"null"}]},"hostFilter":{"anyOf":[{"type":"array","items":{"type":"string"}},{"type":"null"}]},"properties":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"uri":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["id","name"]}},"keyEvents":{"type":"array","items":{"type":"string"}},"facetsProperty":{"anyOf":[{"type":"string"},{"type":"null"}]},"lastWeeklyCheck":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["property","connectedAt"]},"Shape143gbw2":{"type":"object","properties":{"id":{"type":"string"},"urls":{"type":"array","items":{"type":"string"}},"ok":{"type":"boolean"},"status":{"anyOf":[{"type":"number"},{"type":"null"}]},"error":{"anyOf":[{"type":"string"},{"type":"null"}]},"reason":{"type":"string","enum":["manual","stale-answer"]},"staleId":{"anyOf":[{"type":"string"},{"type":"null"}]},"by":{"anyOf":[{"type":"string"},{"type":"null"}]},"at":{"type":"string"}},"required":["id","urls","ok","status","error","reason","staleId","by","at"]},"Shape153qs14":{"type":"object","properties":{"crawler":{"type":"string"},"label":{"type":"string"},"lastServedAt":{"anyOf":[{"type":"string"},{"type":"null"}]},"refused":{"type":"number"},"served":{"type":"number"},"sawVersion":{"anyOf":[{"type":"string","enum":["new","old"]},{"type":"null"}]}},"required":["crawler","label","lastServedAt","refused","served","sawVersion"]},"Shape15itk2n":{"type":"object","properties":{"angle":{"type":"string"},"intent":{"type":"string"},"audience":{"type":"string"},"primaryKeyword":{"type":"string"},"secondaryKeywords":{"type":"array","items":{"type":"string"}},"outline":{"type":"array","items":{"type":"object","properties":{"heading":{"type":"string"},"level":{"type":"number","enum":[2,3]},"purpose":{"type":"string"},"mustCover":{}},"required":["heading","level","purpose","mustCover"]}},"beat":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"url":{"anyOf":[{"type":"string"},{"type":"null"}]},"covers":{},"missing":{"type":"string"}},"required":["name","url","covers","missing"]}},"informationGain":{"type":"array","items":{"type":"string"}},"authorMustSupply":{"type":"array","items":{"type":"string"}},"formats":{"type":"array","items":{"type":"string"}},"targetWords":{"type":"number"}},"required":["angle","intent","audience","primaryKeyword","secondaryKeywords","outline","beat","informationGain","authorMustSupply","formats","targetWords"]},"Shape15m9mq3":{"type":"object","properties":{"appid":{"type":"string"},"credProps":{"type":"boolean"},"hmacCreateSecret":{"type":"boolean"},"minPinLength":{"type":"boolean"},"prf":{"$ref":"#/components/schemas/Shapedb83bo"}}},"Shape16lnw8k":{"type":"object","properties":{"id":{"type":"string"},"key":{"type":"string"},"type":{"type":"string","enum":["source_listing","review_presence","community_presence","entity_clarity","search_presence","content_answer","page_fix","foundation","fact_correction","seo_fix"]},"title":{"type":"string"},"summary":{"type":"string"},"status":{"type":"string","enum":["planned","proposed","dismissed","in_progress","shipped","measuring"]},"owner":{"anyOf":[{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"}},"required":["id","name"]},{"type":"null"}]},"due":{"anyOf":[{"type":"string"},{"type":"null"}]},"topics":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"}},"required":["id","name"]}},"engines":{"type":"array","items":{"type":"string"}},"gain":{"$ref":"#/components/schemas/Shape1togmss"},"confidence":{"type":"string","enum":["low","medium","high"]},"effort":{"type":"string","enum":["S","M","L"]},"rank":{"type":"number"},"check":{"$ref":"#/components/schemas/Shapeduv3uz"},"stale":{"type":"boolean"},"createdAt":{"type":"string"},"updatedAt":{"type":"string"},"withheld":{"anyOf":[{"type":"object","properties":{"reason":{"type":"string"},"note":{"type":"string"}},"required":["reason","note"]},{"type":"null"}]},"retired":{"anyOf":[{"type":"object","properties":{"reason":{"type":"string"},"at":{"type":"string"}},"required":["reason","at"]},{"type":"null"}]},"target":{"anyOf":[{"type":"object","properties":{"url":{"type":"string"},"domain":{"type":"string"},"query":{"type":"string"},"platform":{"type":"string"},"findingKey":{"type":"string"},"rule":{"type":"string"},"pages":{"type":"array","items":{"type":"string"}}}},{"type":"null"}]},"competitors":{"type":"array","items":{"type":"object","properties":{"brandKey":{"type":"string"},"name":{"type":"string"}},"required":["brandKey","name"]}},"siteId":{"type":"string"},"externalRef":{"anyOf":[{"type":"object","properties":{"provider":{"type":"string"},"key":{"type":"string"},"url":{"type":"string"}},"required":["provider","key","url"]},{"type":"null"}]},"verdict":{"anyOf":[{"$ref":"#/components/schemas/Shapegw25lz"},{"type":"null"}]},"held":{"type":"boolean"},"measurable":{"anyOf":[{"type":"object","properties":{"pp":{"type":"number"},"engines":{"type":"array","items":{"type":"string"}},"questions":{"type":"number"}},"required":["pp","engines","questions"]},{"type":"null"}]},"reach":{"anyOf":[{"type":"object","properties":{"answers":{"type":"number"},"topics":{"type":"number"},"cited":{"anyOf":[{"type":"number"},{"type":"null"}]},"days":{"type":"number"}},"required":["answers","topics","cited","days"]},{"type":"null"}]},"dismissedReason":{"anyOf":[{"type":"string"},{"type":"null"}]},"priority":{"type":"string","enum":["low","medium","high"]}},"required":["id","key","type","title","summary","status","owner","due","topics","engines","gain","confidence","effort","rank","check","stale","createdAt","updatedAt","withheld","retired","target","competitors","siteId","externalRef","verdict","held"]},"Shape16mriv0":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"path":{"type":"string"},"query":{"type":"string"},"shared":{"type":"boolean"},"mine":{"type":"boolean"},"createdBy":{"anyOf":[{"type":"string"},{"type":"null"}]},"createdAt":{"type":"string"}},"required":["id","name","path","query","shared","mine","createdBy","createdAt"]},"Shape16otnsv":{"type":"object","properties":{"madeAt":{"type":"string"},"steps":{"type":"array","items":{"type":"string"}},"draft":{"anyOf":[{"type":"object","properties":{"kind":{"type":"string","enum":["steps","schema","copy","outreach","reply","page_outline"]},"title":{"type":"string"},"text":{"type":"string"}},"required":["kind","title","text"]},{"type":"null"}]},"model":{"type":"string"},"sources":{"type":"array","items":{"type":"object","properties":{"label":{"type":"string"},"url":{"type":"string"},"query":{"type":"string"}},"required":["label"]}}},"required":["madeAt","steps","draft","model","sources"]},"Shape16qjr7o":{"type":"object","properties":{"key":{"type":"string","enum":["competitors","results","run","answers","topics"]},"label":{"type":"string"},"state":{"type":"string","enum":["active","blocked","done","waiting"]},"detail":{"type":"string"},"href":{"type":"string"},"progress":{"type":"object","properties":{"done":{"type":"number"},"total":{"type":"number"}},"required":["done","total"]}},"required":["key","label","state","detail"]},"Shape16vi3lh":{"type":"object","properties":{"ownerUserId":{"anyOf":[{"type":"string"},{"type":"null"}]},"ownerLabel":{"type":"string"},"when":{"type":"string","enum":["later","this-week","this-month","next-run"]},"at":{"type":"string"},"by":{"anyOf":[{"type":"string"},{"type":"null"}]},"dueAt":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["ownerUserId","ownerLabel","when","at","by"]},"Shape17k6fcp":{"type":"object","properties":{"id":{"type":"string"},"group":{"type":"string","enum":["results","content","index","experience"]},"family":{"type":"string","enum":["status","urls","content","language","sitemap","redirects","links","robots","security","duplicates","structured","indexing","canonical","hreflang","titles","descriptions","previews","headings","images","mobile","render","speed","head","spam"]},"severity":{"type":"string","enum":["low","medium","high","critical","notice"]},"weight":{"type":"number"},"title":{"type":"string"},"checks":{"type":"string"},"why":{"type":"string"},"fix":{"type":"string"},"who":{"type":"string","enum":["developer","writer","cms"]},"effort":{"type":"string","enum":["S","M","L"]},"source":{"type":"object","properties":{"kind":{"type":"string","enum":["documented","practice"]},"label":{"type":"string"},"url":{"type":"string"}},"required":["kind","label","url"]},"related":{"type":"array","items":{"type":"string"}},"scope":{"type":"string","enum":["page","site"]},"measured":{"type":"boolean"},"share":{"anyOf":[{"type":"number"},{"type":"null"}]},"applicable":{"type":"number"},"failing":{"type":"number"},"partial":{"type":"number"},"lost":{"type":"number"},"affected":{"type":"array","items":{}},"byTemplate":{"type":"array","items":{}}},"required":["id","group","family","severity","weight","title","checks","why","fix","who","effort","source","related","scope","measured","share","applicable","failing","partial","lost","affected","byTemplate"]},"Shape18fgeoh":{"type":"object","properties":{"id":{"type":"string"},"host":{"type":"string"},"mos":{"$ref":"#/components/schemas/Shape72vm64"}},"required":["id","host","mos"]},"Shape1942tjx":{"type":"object","properties":{"id":{"type":"string"},"label":{"anyOf":[{"type":"string"},{"type":"null"}]},"from":{"type":"string"},"to":{"type":"string"},"siteIds":{"anyOf":[{"type":"array","items":{"type":"string"}},{"type":"null"}]},"createdBy":{"anyOf":[{"type":"string"},{"type":"null"}]},"createdAt":{"type":"string"},"expiresAt":{"type":"string"},"revokedAt":{"anyOf":[{"type":"string"},{"type":"null"}]},"views":{"type":"number"},"lastViewedAt":{"anyOf":[{"type":"string"},{"type":"null"}]},"url":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["id","label","from","to","siteIds","createdBy","createdAt","expiresAt","revokedAt","views","lastViewedAt","url"]},"Shape19dpe2f":{"type":"object","properties":{"title":{"anyOf":[{"type":"string"},{"type":"null"}]},"outline":{"type":"array","items":{"type":"object","properties":{"level":{"type":"number"},"text":{"type":"string"},"words":{"type":"number"}},"required":["level","text","words"]}},"schemaTypes":{"type":"array","items":{"type":"string"}},"entities":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"count":{"type":"number"}},"required":["name","count"]}},"lists":{"type":"number"},"tables":{"type":"number"},"faqs":{"type":"number"},"lead":{"anyOf":[{"type":"string"},{"type":"null"}]},"passages":{"type":"array","items":{"type":"object","properties":{"heading":{"anyOf":[{"type":"string"},{"type":"null"}]},"text":{"type":"string"}},"required":["heading","text"]}}},"required":["outline","schemaTypes","entities","lists","tables","faqs"]},"Shape19yqio1":{"type":"object","properties":{"before":{"type":"object","properties":{"cited":{"type":"number"},"asked":{"type":"number"}},"required":["cited","asked"]},"now":{"anyOf":[{"type":"object","properties":{"cited":{"type":"number"},"asked":{"type":"number"}},"required":["cited","asked"]},{"type":"null"}]},"multiple":{"anyOf":[{"type":"number"},{"type":"null"}]}},"required":["before","now","multiple"]},"Shape1a3m5ki":{"type":"object","properties":{"url":{"type":"string"},"domain":{"type":"string"},"title":{"anyOf":[{"type":"string"},{"type":"null"}]},"kind":{"anyOf":[{"type":"string"},{"type":"null"}]},"ownedBy":{"anyOf":[{"type":"string"},{"type":"null"}]},"ownedByRival":{"type":"boolean"},"unreachable":{"anyOf":[{"type":"string","enum":["stale","closed","vendor","docs","video","store_listing","community","published_by_rival","encyclopedia"]},{"type":"null"}]},"unreachableWhy":{"anyOf":[{"type":"string"},{"type":"null"}]},"dated":{"anyOf":[{"type":"string"},{"type":"null"}]},"lang":{"anyOf":[{"type":"string"},{"type":"null"}]},"citedBy":{"type":"number"},"topics":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"}},"required":["id","name"]}},"engines":{"type":"array","items":{"type":"string"}},"namesYou":{"type":"boolean"},"competitors":{"type":"array","items":{"type":"string"}},"status":{"type":"string","enum":["error","blocked","ok","unread"]},"changedAt":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["url","domain","title","kind","ownedBy","ownedByRival","unreachable","unreachableWhy","dated","lang","citedBy","topics","engines","namesYou","competitors","status","changedAt"]},"Shape1ado3w3":{"type":"object","properties":{"day":{"type":"string"},"score":{"type":"number"},"lo":{"type":"number"},"hi":{"type":"number"},"engines":{"type":"object","additionalProperties":{"type":"number"}},"documents":{"type":"number"},"coverage":{"anyOf":[{"type":"number"},{"type":"null"}]},"rulesVersion":{"type":"string"}},"required":["day","score","lo","hi","engines","documents","coverage","rulesVersion"]},"Shape1aus6k3":{"type":"object","properties":{"baselineDays":{"type":"number"},"latestDays":{"type":"number"},"latestFrom":{"type":"string"},"comparable":{"type":"boolean"},"firstReadingAt":{"anyOf":[{"type":"string"},{"type":"null"}]},"firstReadingDays":{"type":"number"}},"required":["baselineDays","latestDays","latestFrom","comparable","firstReadingAt","firstReadingDays"]},"Shape1cego5x":{"type":"object","properties":{"lo":{"type":"number"},"hi":{"type":"number"},"n":{"type":"number"},"meanP":{"anyOf":[{"type":"number"},{"type":"null"}]},"observed":{"anyOf":[{"type":"number"},{"type":"null"}]},"obsLo":{"anyOf":[{"type":"number"},{"type":"null"}]},"obsHi":{"anyOf":[{"type":"number"},{"type":"null"}]}},"required":["lo","hi","n","meanP","observed","obsLo","obsHi"]},"Shape1chg9iz":{"type":"object","properties":{"status":{"type":"string","enum":["read","skipped"]},"reason":{"anyOf":[{"type":"string"},{"type":"null"}]},"keyword":{"type":"string"},"platform":{"type":"string"},"total":{"type":"number"},"asOf":{"type":"string"},"questions":{},"brands":{},"refresh":{}},"required":["status","reason","keyword","platform","total","asOf","questions","brands","refresh"]},"Shape1dbs9y":{"type":"object","properties":{"id":{"type":"string"},"state":{"type":"string","enum":["won","lost_ground","no_effect","inconclusive","too_early"]},"grade":{"type":"string","enum":["A","B","C","D"]},"day":{"type":"number"},"readAt":{"type":"string"},"final":{"type":"boolean"},"effect":{"anyOf":[{"type":"object","properties":{"pp":{"type":"number"},"lo":{"type":"number"},"hi":{"type":"number"}},"required":["pp","lo","hi"]},{"type":"null"}]},"mde":{"anyOf":[{"type":"number"},{"type":"null"}]},"treated":{"type":"object","properties":{"topics":{},"engines":{},"answersPre":{"type":"number"},"answersPost":{"type":"number"}},"required":["topics","engines","answersPre","answersPost"]},"control":{"type":"object","properties":{"topics":{"type":"number"},"answersPre":{"type":"number"},"answersPost":{"type":"number"}},"required":["topics","answersPre","answersPost"]},"negative":{"type":"object","properties":{"memory":{},"untreatedEngines":{}},"required":["memory","untreatedEngines"]},"confounders":{"type":"array","items":{}},"intervention":{"type":"object","properties":{"at":{"type":"string"},"source":{"type":"string","enum":["check","crawler","version"]},"note":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["at","source"]},"bundle":{"anyOf":[{"type":"object","properties":{"id":{"type":"string"},"plays":{}},"required":["id","plays"]},{"type":"null"}]},"sentence":{"type":"string"},"needs":{"anyOf":[{"type":"string"},{"type":"null"}]},"simulated":{"type":"boolean"},"provisional":{"type":"boolean"},"placebo":{"anyOf":[{"$ref":"#/components/schemas/Shape3gs3pk"},{"type":"null"}]},"multiplicity":{"anyOf":[{"type":"object","properties":{"q":{"type":"number"},"compared":{"type":"number"},"held":{"type":"boolean"}},"required":["q","compared","held"]},{"type":"null"}]},"customerEvents":{"type":"number"}},"required":["id","state","grade","day","readAt","final","effect","mde","treated","control","negative","confounders","intervention","bundle","sentence","needs","simulated","provisional","placebo","multiplicity","customerEvents"]},"Shape1dmnouc":{"type":"object","properties":{"id":{"type":"string"},"rule":{"type":"string"},"grade":{"type":"string"},"basis":{"type":"string"},"claim":{"type":"string"},"effect":{"type":"string"},"quantified":{"type":"boolean"},"neutral":{"type":"boolean"},"source":{}},"required":["id","rule","grade","basis","claim","effect","quantified","neutral","source"]},"Shape1dplbos":{"type":"object","properties":{"id":{"type":"string"},"text":{"type":"string"},"locale":{"type":"string"},"cohort":{"type":"string"},"source":{"type":"string","enum":["manual","run","prompt","gsc"]},"category":{"anyOf":[{"type":"string"},{"type":"null"}]},"weight":{"type":"number"},"gscImpressions":{"anyOf":[{"type":"number"},{"type":"null"}]},"intentClass":{"anyOf":[{"type":"string","enum":["brand","buyer","problem","support","content","machine","echo","unclear"]},{"type":"null"}]},"relevance":{"anyOf":[{"type":"number"},{"type":"null"}]},"provenance":{"anyOf":[{"$ref":"#/components/schemas/Shape1xvkhx7"},{"type":"null"}]},"addedAt":{"type":"string","format":"date-time"},"staleRuns":{"type":"number"},"retiredAt":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"retiredBy":{"anyOf":[{"type":"string"},{"type":"null"}]},"retireReason":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["id","text","locale","cohort","source","category","weight","gscImpressions","intentClass","relevance","provenance","addedAt","staleRuns","retiredAt","retiredBy","retireReason"]},"Shape1ehy9rj":{"type":"object","properties":{"rewrite":{"$ref":"#/components/schemas/Shaperjswjo"}},"required":["rewrite"]},"Shape1ekv4bx":{"type":"object","properties":{"enforced":{"type":"boolean"},"unmetered":{"type":"boolean"},"periodStart":{"type":"string"},"used":{"type":"number"},"limit":{"anyOf":[{"type":"number"},{"type":"null"}]},"remaining":{"anyOf":[{"type":"number"},{"type":"null"}]},"tracked":{"type":"number"},"trackedLimit":{"anyOf":[{"type":"number"},{"type":"null"}]},"projected":{"type":"number"},"engines":{"type":"number"},"blocked":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["enforced","unmetered","periodStart","used","limit","remaining","tracked","trackedLimit","projected","engines","blocked"]},"Shape1eqo13o":{"type":"object","properties":{"kind":{"type":"string","enum":["owner","inferred"]},"position":{"type":"string","enum":["owner","inferred"]},"selling":{"type":"string","enum":["owner","inferred"]},"capacity":{"type":"string","enum":["owner","inferred"]},"namesCompetitors":{"type":"string","enum":["owner","inferred"]}},"required":["kind","position","selling","capacity","namesCompetitors"]},"Shape1flbz1k":{"type":"object","properties":{"gsc":{"type":"boolean"},"ga4":{"type":"boolean"},"cms":{"type":"boolean"},"traffic":{"type":"boolean"},"gscAccount":{"anyOf":[{"type":"string"},{"type":"null"}]},"ga4Account":{"anyOf":[{"type":"string"},{"type":"null"}]},"ga4Property":{"anyOf":[{"type":"string"},{"type":"null"}]},"trafficLastAt":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["gsc","ga4","cms","traffic"]},"Shape1gkaabg":{"type":"object","properties":{"title":{"type":"string"},"metaDescription":{"type":"string"},"slug":{"type":"string"},"h1":{"type":"string"},"ogTitle":{"type":"string"},"ogDescription":{"type":"string"},"imageAlts":{"type":"array","items":{"type":"string"}},"faq":{"type":"array","items":{"type":"object","properties":{"q":{"type":"string"},"a":{"type":"string"}},"required":["q","a"]}},"internalLinks":{"type":"array","items":{"type":"object","properties":{"anchor":{"type":"string"},"url":{"type":"string"},"why":{"type":"string"}},"required":["anchor","url","why"]}},"jsonLd":{"type":"object","properties":{"article":{"type":"string"},"faq":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["article","faq"]}},"required":["title","metaDescription","slug","h1","ogTitle","ogDescription","imageAlts","faq","internalLinks","jsonLd"]},"Shape1h47rpx":{"type":"object","properties":{"brand":{"$ref":"#/components/schemas/Shapeyenwo0"}},"required":["brand"]},"Shape1h6733o":{"type":"object","properties":{"first":{"anyOf":[{"type":"string","format":"binary"},{"type":"object","properties":{"buffer":{},"byteLength":{"type":"number"},"byteOffset":{"type":"number"}},"required":["buffer","byteLength","byteOffset"]}]},"second":{"anyOf":[{"type":"string","format":"binary"},{"type":"object","properties":{"buffer":{},"byteLength":{"type":"number"},"byteOffset":{"type":"number"}},"required":["buffer","byteLength","byteOffset"]}]}},"required":["first"]},"Shape1h8jp8y":{"type":"object","properties":{"ok":{"type":"boolean","enum":[true]},"seats":{"$ref":"#/components/schemas/Shape1napw7e"}},"required":["ok","seats"]},"Shape1hwvb01":{"type":"object","properties":{"type":{"anyOf":[{"type":"string","enum":["local","shop","publisher","software","other"]},{"type":"null"}]},"source":{"anyOf":[{"type":"string","enum":["owner","classified"]},{"type":"null"}]},"classified":{"anyOf":[{"type":"object","properties":{"type":{"anyOf":[{"type":"string","enum":["local","shop","publisher","software","other"]},{"type":"null"}]},"why":{"type":"string"}},"required":["type","why"]},{"type":"null"}]},"options":{"type":"array","items":{"type":"object","properties":{"value":{"type":"string","enum":["local","shop","publisher","software","other"]},"label":{"type":"string"}},"required":["value","label"]}},"commerceConfigured":{"type":"boolean"},"showsCommerce":{"type":"boolean"}},"required":["type","source","classified","options","commerceConfigured","showsCommerce"]},"Shape1i2s94s":{"type":"object","properties":{"value":{"type":"number"},"lo":{"type":"number"},"hi":{"type":"number"},"version":{"type":"number"},"parts":{"type":"object","properties":{"reach":{"type":"number"},"readiness":{"type":"number"},"citation":{"type":"number"}},"required":["reach","readiness","citation"]}},"required":["value","lo","hi","version","parts"]},"Shape1izin6y":{"type":"object","properties":{"id":{"type":"string"},"title":{"type":"string"},"status":{"type":"string","enum":["open","closed"]},"closedReason":{"anyOf":[{"type":"string","enum":["auto","manual"]},{"type":"null"}]},"closedAt":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"lastMessageAt":{"type":"string","format":"date-time"},"messageCount":{"type":"number"},"rating":{"anyOf":[{"type":"number"},{"type":"null"}]},"solved":{"anyOf":[{"type":"boolean"},{"type":"null"}]},"feedback":{"anyOf":[{"type":"string"},{"type":"null"}]},"escalated":{"type":"boolean"},"createdAt":{"type":"string","format":"date-time"}},"required":["id","title","status","closedReason","closedAt","lastMessageAt","messageCount","rating","solved","feedback","escalated","createdAt"]},"Shape1j38q80":{"type":"object","properties":{"lastError":{"anyOf":[{"type":"string"},{"type":"null"}]},"siteUrl":{"type":"string"},"connectedAt":{"type":"string"},"connectedBy":{"anyOf":[{"type":"string"},{"type":"null"}]},"lastCheckAt":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["siteUrl","connectedAt"]},"Shape1jok0y2":{"type":"object","properties":{"headline":{"type":"string"},"reasons":{"type":"array","items":{"type":"object","properties":{"indicator":{"anyOf":[{"type":"string"},{"type":"null"}]},"title":{"type":"string"},"detail":{"type":"string"},"weight":{"type":"string","enum":["decisive","strong","supporting"]}},"required":["indicator","title","detail","weight"]}},"actions":{"type":"array","items":{"type":"object","properties":{"title":{"type":"string"},"detail":{"type":"string"},"rules":{}},"required":["title","detail","rules"]}},"caveats":{"type":"array","items":{"type":"string"}}},"required":["headline","reasons","actions","caveats"]},"Shape1knnduw":{"type":"object","properties":{"id":{"type":"string"},"state":{"type":"string","enum":["won","lost_ground","no_effect","inconclusive","too_early"]},"grade":{"type":"string","enum":["A","B","C","D"]},"day":{"type":"number"},"readAt":{"type":"string"},"final":{"type":"boolean"},"effect":{},"mde":{"anyOf":[{"type":"number"},{"type":"null"}]},"treated":{},"control":{},"negative":{},"confounders":{},"intervention":{},"bundle":{},"sentence":{"type":"string"},"needs":{"anyOf":[{"type":"string"},{"type":"null"}]},"simulated":{"type":"boolean"},"provisional":{"type":"boolean"},"placebo":{},"multiplicity":{},"customerEvents":{"type":"number"}},"required":["id","state","grade","day","readAt","final","effect","mde","treated","control","negative","confounders","intervention","bundle","sentence","needs","simulated","provisional","placebo","multiplicity","customerEvents"]},"Shape1kq1t7u":{"type":"object","properties":{"review":{"anyOf":[{"$ref":"#/components/schemas/Shape1tkvf4c"},{"type":"null"}]},"observed":{"anyOf":[{"$ref":"#/components/schemas/Shapecrbt5f"},{"type":"null"}]},"id":{"type":"string"},"claim":{"type":"string"},"category":{"type":"string"},"grade":{"type":"string","enum":["A","B","C","D"]},"sources":{"type":"array","items":{"type":"object","properties":{"title":{"type":"string"},"url":{"type":"string"},"year":{"type":"number"}},"required":["title","url"]}},"effect":{"type":"object","properties":{"direction":{"type":"string"},"size":{"type":"string"},"note":{"type":"string"},"value":{"anyOf":[{"type":"number"},{"type":"array","items":{"anyOf":[{"type":"number"}]}}]},"unit":{"type":"string"}},"required":["direction","size"]},"applies_when":{"type":"array","items":{"type":"string"}},"engines":{"type":"array","items":{"type":"string"}},"revalidate":{"type":"string"},"tags":{"type":"array","items":{"type":"string"}},"indicators":{"type":"array","items":{"type":"string"}},"use":{"type":"string"},"status":{"type":"string","enum":["verified","reported"]},"rule":{"type":"string"},"effect_basis":{"type":"string","enum":["measured","reported","documented","unquantified"]},"threshold":{"type":"object","properties":{"indicator":{"type":"string"},"op":{"type":"string","enum":["between",">=","<="]},"value":{"anyOf":[{"type":"number"},{"type":"array","items":{"anyOf":[{"type":"number"}]}}]},"note":{"type":"string"}},"required":["indicator","op","value"]},"supersedes":{"type":"string"},"merged_from":{"type":"array","items":{"type":"string"}},"merged_rules":{"type":"array","items":{"type":"string"}},"related":{"type":"array","items":{"type":"string"}},"notes":{"type":"string"}},"required":["review","observed","id","claim","category","grade","sources","effect","applies_when","engines","revalidate","tags","indicators","use","status"]},"Shape1kv1hfi":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"kind":{"type":"string","enum":["results","board","review","brief","visibility-export","digest"]},"kindLabel":{"type":"string"},"cadence":{"type":"string","enum":["weekly","monthly","quarterly"]},"dayOfWeek":{"anyOf":[{"type":"number"},{"type":"null"}]},"dayOfMonth":{"anyOf":[{"type":"number"},{"type":"null"}]},"hour":{"type":"number"},"timezone":{"type":"string"},"siteIds":{"anyOf":[{"type":"array","items":{"type":"string"}},{"type":"null"}]},"engines":{"anyOf":[{"type":"array","items":{"type":"string"}},{"type":"null"}]},"recipients":{"type":"array","items":{"type":"string"}},"format":{"type":"string","enum":["pdf","html-link","csv"]},"paused":{"type":"boolean"},"pausedReason":{"anyOf":[{"type":"string"},{"type":"null"}]},"lastSentAt":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"nextAt":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"createdBy":{"anyOf":[{"type":"string"},{"type":"null"}]},"createdAt":{"type":"string","format":"date-time"},"updatedAt":{"type":"string","format":"date-time"},"last":{"anyOf":[{"type":"object","properties":{"reason":{"anyOf":[{"type":"string"},{"type":"null"}]},"at":{"type":"string","format":"date-time"},"status":{"type":"string"}},"required":["reason","at","status"]},{"type":"null"}]}},"required":["id","name","kind","kindLabel","cadence","dayOfWeek","dayOfMonth","hour","timezone","siteIds","engines","recipients","format","paused","pausedReason","lastSentAt","nextAt","createdBy","createdAt","updatedAt","last"]},"Shape1m9fx8s":{"type":"object","properties":{"purpose":{"type":"string"},"audience":{"type":"string"},"industry":{"type":"string"},"language":{"type":"string"},"questions":{"type":"array","items":{"type":"string"}},"heading":{"anyOf":[{"type":"string"},{"type":"null"}]},"problem":{"type":"string"},"targets":{"type":"array","items":{"type":"object","properties":{"source":{"type":"string"},"heading":{"anyOf":[{"type":"string"},{"type":"null"}]},"text":{"type":"string"},"aligned":{"type":"string"},"answers":{"type":"number"}},"required":["source","heading","text","aligned","answers"]}}}},"Shape1m9zdy8":{"type":"object","properties":{"effect":{"anyOf":[{"type":"object","properties":{"pp":{"type":"number"},"lo":{"type":"number"},"hi":{"type":"number"}},"required":["pp","lo","hi"]},{"type":"null"}]},"note":{"type":"string"},"noEffect":{"type":"boolean"},"settingGains":{"type":"boolean"},"scope":{"type":"object","properties":{"vertical":{"type":"string"},"market":{"type":"string"},"words":{"type":"string"}},"required":["vertical","market","words"]},"simulated":{"type":"boolean"},"n":{"type":"number"},"nVerdicts":{"type":"number"},"nObserved":{"type":"number"},"nSites":{"type":"number"},"wonRate":{"type":"object","properties":{"pct":{"type":"number"},"lo":{"type":"number"},"hi":{"type":"number"}},"required":["pct","lo","hi"]},"countsAtLeast":{"type":"boolean","enum":[true]},"playType":{"type":"string"},"engine":{"type":"string"},"vertical":{"type":"string"},"market":{"type":"string"}},"required":["effect","note","noEffect","settingGains","scope","simulated","n","nVerdicts","nObserved","nSites","wonRate","countsAtLeast","playType","engine","vertical","market"]},"Shape1n9qv5m":{"type":"object","properties":{"entity":{"type":"string"},"address":{"type":"string"},"country":{"type":"string"},"registration":{"anyOf":[{"type":"string"},{"type":"null"}]},"signerName":{"type":"string"},"signerTitle":{"type":"string"},"signerEmail":{"type":"string"}},"required":["entity","address","country","signerName","signerTitle","signerEmail"]},"Shape1na1muw":{"type":"object","properties":{"movedFrom":{"type":"object","properties":{"orgId":{"type":"string"},"at":{"type":"string"},"by":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["orgId","at","by"]},"sharedFrom":{"$ref":"#/components/schemas/Shaperi3a08"}}},"Shape1napw7e":{"type":"object","properties":{"used":{"type":"number"},"members":{"type":"number"},"pendingInvites":{"type":"number"},"included":{"type":"number"},"extra":{"type":"number"},"total":{"type":"number"},"available":{"type":"number"},"seatPriceUsd":{"type":"number"}},"required":["used","members","pendingInvites","included","extra","total","available","seatPriceUsd"]},"Shape1o8sy01":{"type":"object","properties":{"id":{"type":"string"},"site_id":{"type":"string"},"workflow_id":{"type":"string"},"host":{"type":"string"},"key":{"type":"string"},"title":{"type":"string"},"severity":{"type":"string","enum":["low","medium","high","info","critical"]},"category":{"type":"string"},"status":{"type":"string"},"scope":{"type":"string"},"scope_ref":{"anyOf":[{"type":"string"},{"type":"null"}]},"summary":{"anyOf":[{"type":"string"},{"type":"null"}]},"impact":{"type":"number"},"confidence":{"type":"number"},"hypothesis_ids":{"anyOf":[{"type":"array","items":{"type":"string"}},{"type":"null"}]},"ground":{"type":"array","items":{"type":"object","properties":{"kind":{"type":"string"},"at":{"type":"string"},"text":{"type":"string"},"severity":{"type":"string"}},"required":["kind","at","text","severity"],"additionalProperties":{}}},"sort_rank":{"type":"number"},"sort_score":{"type":"string"}},"required":["id","site_id","workflow_id","host","key","title","severity","category","status","scope","scope_ref","summary","impact","confidence"],"additionalProperties":{}},"Shape1ogrd47":{"type":"object","properties":{"before":{"anyOf":[{"type":"object","properties":{"pct":{"type":"number"},"lo":{"type":"number"},"hi":{"type":"number"},"n":{"type":"number"},"k":{"type":"number"}},"required":["pct","lo","hi","n","k"]},{"type":"null"}]},"now":{"anyOf":[{"type":"object","properties":{"pct":{"type":"number"},"lo":{"type":"number"},"hi":{"type":"number"},"n":{"type":"number"},"k":{"type":"number"}},"required":["pct","lo","hi","n","k"]},{"type":"null"}]},"change":{"anyOf":[{"type":"object","properties":{"delta":{"type":"number"},"lo":{"type":"number"},"hi":{"type":"number"}},"required":["delta","lo","hi"]},{"type":"null"}]},"asOf":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["before","now","change","asOf"]},"Shape1p1shz1":{"type":"object","properties":{"markets":{"type":"array","items":{"type":"object","properties":{"code":{"type":"string"},"label":{"type":"string"},"country":{"anyOf":[{"type":"string"},{"type":"null"}]},"language":{"type":"string"}},"required":["code","label","country","language"]}},"evidence":{"type":"array","items":{"type":"string"}},"at":{"anyOf":[{"type":"string"},{"type":"null"}]},"fromRun":{"type":"boolean"}},"required":["markets","evidence","at","fromRun"]},"Shape1p31u7k":{"type":"object","properties":{"mode":{"type":"string","enum":["auto","manual"]},"targets":{"type":"array","items":{"type":"object","properties":{"country":{"anyOf":[{"type":"string"},{"type":"null"}]},"language":{"type":"string"}},"required":["country","language"]}},"detected":{"anyOf":[{"$ref":"#/components/schemas/Shapekufms6"},{"type":"null"}]}},"required":["mode","targets"]},"Shape1prsur2":{"type":"object","properties":{"id":{"type":"string"},"source":{"type":"string","enum":["content"]},"kind":{"type":"string"},"shape":{"type":"string","enum":["text","page","section"]},"subject":{"type":"string"},"ask":{"anyOf":[{"type":"string"},{"type":"null"}]},"structure":{"anyOf":[{"type":"string"},{"type":"null"}]},"length":{"type":"string","enum":["standard","short","long"]},"targetUrl":{"anyOf":[{"type":"string"},{"type":"null"}]},"beat":{"type":"array","items":{"type":"object","properties":{"url":{"type":"string"},"title":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["url","title"]}},"playId":{"anyOf":[{"type":"string"},{"type":"null"}]},"topicId":{"anyOf":[{"type":"string"},{"type":"null"}]},"status":{"type":"string","enum":["pending","failed","ready"]},"error":{"anyOf":[{"type":"string"},{"type":"null"}]},"createdAt":{"type":"string"},"madeAt":{"type":"string"},"model":{"anyOf":[{"type":"string"},{"type":"null"}]},"language":{"type":"string"},"title":{"type":"string"},"metaDescription":{"type":"string"},"slug":{"type":"string"},"markdown":{"type":"string"},"html":{"type":"string"},"wordCount":{"type":"number"},"faq":{"type":"array","items":{"type":"object","properties":{"q":{"type":"string"},"a":{"type":"string"}},"required":["q","a"]}},"internalLinks":{"type":"array","items":{"type":"object","properties":{"anchor":{"type":"string"},"url":{"type":"string"},"why":{"type":"string"}},"required":["anchor","url","why"]}},"externalLinks":{"type":"array","items":{"type":"object","properties":{"anchor":{"type":"string"},"url":{"type":"string"},"why":{"type":"string"}},"required":["anchor","url","why"]}},"placeholders":{"type":"array","items":{"type":"string"}},"jsonLd":{"anyOf":[{"type":"object","properties":{"article":{"type":"string"},"faq":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["article","faq"]},{"type":"null"}]},"checks":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"ok":{"type":"boolean"},"detail":{"type":"string"},"blocking":{"type":"boolean"}},"required":["name","ok","detail"]}},"sources":{"type":"array","items":{"type":"object","properties":{"label":{"type":"string"},"url":{"type":"string"},"kind":{"type":"string","enum":["search","page","site","answer","rule","question"]}},"required":["label","kind"]}}},"required":["id","source","kind","shape","subject","ask","structure","length","targetUrl","beat","playId","topicId","status","error","createdAt","madeAt","model","language","title","metaDescription","slug","markdown","html","wordCount","faq","internalLinks","externalLinks","placeholders","jsonLd","checks","sources"]},"Shape1q1l2dw":{"type":"object","properties":{"id":{"type":"string"},"url":{"type":"string"},"secret":{"type":"string"},"events":{"type":"array","items":{"type":"string","enum":["run.completed","run.failed","fix.verified","finding.new_severe","access.changed","citation.changed","traffic.changed","prompt.changed","engine.drift","competitor.changed","crawl.slowing","disclosure.missing","agent_task.failed","answer.stale","journey.checkpoint","verdict.read","visibility.changed"]}},"active":{"type":"boolean"},"createdAt":{"type":"string"},"lastDeliveryAt":{"anyOf":[{"type":"string"},{"type":"null"}]},"lastStatus":{"anyOf":[{"type":"number"},{"type":"null"}]},"lastError":{"anyOf":[{"type":"string"},{"type":"null"}]},"previousSecret":{"anyOf":[{"type":"string"},{"type":"null"}]},"previousSecretUntil":{"anyOf":[{"type":"string"},{"type":"null"}]},"failureStreak":{"type":"number"},"pausedAt":{"anyOf":[{"type":"string"},{"type":"null"}]},"pausedReason":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["id","url","secret","events","active","createdAt"]},"Shape1qfbqgf":{"type":"object","properties":{"id":{"type":"string"},"label":{"type":"string"},"family":{"type":"string","enum":["agent","performance","freshness","evidence","structure","access","extractability","entity","semantic"]},"winner":{"anyOf":[{"type":"number"},{"type":"null"}]},"own":{"anyOf":[{"type":"number"},{"type":"null"}]},"weight":{"anyOf":[{"type":"number"},{"type":"null"}]},"direction":{"anyOf":[{"type":"string","enum":["higher","lower","band"]},{"type":"null"}]},"advantage":{"type":"string","enum":["unknown","winner","own","even"]},"gap":{"type":"number"},"score":{"type":"number"}},"required":["id","label","family","winner","own","weight","direction","advantage","gap","score"]},"Shape1r0gc7l":{"type":"object","properties":{"key":{"type":"string"},"template":{"anyOf":[{"type":"string"},{"type":"null"}]},"median":{"anyOf":[{"type":"number"},{"type":"null"}]},"p25":{"anyOf":[{"type":"number"},{"type":"null"}]},"p75":{"anyOf":[{"type":"number"},{"type":"null"}]},"n":{"type":"number"},"pending":{"type":"number"}},"required":["key","template","median","p25","p75","n","pending"]},"Shape1rnlcdd":{"type":"object","properties":{"fixed":{"type":"array","items":{"type":"string"}},"kind":{"type":"string","enum":["local","shop","publisher","software","other","programme","institution","established_operator"]},"position":{"type":"string","enum":["none","leader","challenger","incumbent"]},"selling":{"type":"string","enum":["self_serve","sales_led","not_selling"]},"capacity":{"type":"string","enum":["medium","small","large"]},"namesCompetitors":{"type":"boolean"},"why":{"type":"object","properties":{"kind":{"type":"string"},"position":{"type":"string"},"selling":{"type":"string"},"capacity":{"type":"string"},"namesCompetitors":{"type":"string"}},"required":["kind","position","selling","capacity","namesCompetitors"]},"source":{"$ref":"#/components/schemas/Shape1eqo13o"},"at":{"type":"string"}},"required":["fixed","kind","position","selling","capacity","namesCompetitors","why","source","at"]},"Shape1rvdkgg":{"type":"object","properties":{"status":{"type":"string","enum":["none","skipped","measured","thin","brand_not_searched"]},"reason":{"anyOf":[{"type":"string"},{"type":"null"}]},"lo":{"anyOf":[{"type":"number"},{"type":"null"}]},"hi":{"anyOf":[{"type":"number"},{"type":"null"}]},"best":{},"text":{"anyOf":[{"type":"string"},{"type":"null"}]},"source":{"type":"string"},"asOf":{"type":"string"},"refresh":{},"crossCheck":{}},"required":["status","reason","lo","hi","best","text","source","asOf","refresh","crossCheck"]},"Shape1s2l1fs":{"type":"object","properties":{"matched":{"type":"boolean"},"questions":{"type":"number"},"engines":{"type":"array","items":{"type":"string"}},"cells":{"type":"number"},"needed":{"type":"number"},"reason":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["matched","questions","engines","cells","needed","reason"]},"Shape1sbn5ec":{"type":"object","properties":{"names":{"type":"array","items":{"type":"string"}},"aliases":{"type":"array","items":{"type":"string"}},"exclude":{"type":"array","items":{"type":"string"}},"domains":{"type":"array","items":{"type":"string"}},"domain":{"type":"string"},"key":{"type":"string"}},"required":["names","aliases","exclude","domains","domain","key"]},"Shape1tg61kc":{"type":"object","properties":{"enabled":{"type":"boolean"},"urls":{"type":"array","items":{"type":"string"}},"lastCheckAt":{"anyOf":[{"type":"string"},{"type":"null"}]},"lastChangeAt":{"anyOf":[{"type":"string"},{"type":"null"}]},"lastCheckId":{"anyOf":[{"type":"string"},{"type":"null"}]},"summary":{"type":"object","additionalProperties":{"type":"object","properties":{"served":{"type":"number"},"of":{"type":"number"}},"required":["served","of"]}},"robotsHash":{"anyOf":[{"type":"string"},{"type":"null"}]},"llmsHash":{"anyOf":[{"type":"string"},{"type":"null"}]},"claimedAt":{"anyOf":[{"type":"string"},{"type":"null"}]}}},"Shape1tkvf4c":{"type":"object","properties":{"checkedAt":{"type":"string","format":"date-time"},"attention":{"type":"string","enum":["ok","source_changed","source_gone","due"]},"decision":{"anyOf":[{"type":"string","enum":["confirmed","updated","retired"]},{"type":"null"}]},"decidedAt":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"note":{"anyOf":[{"type":"string"},{"type":"null"}]},"revalidateAt":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"sources":{"type":"array","items":{"type":"object","properties":{"url":{"type":"string"},"status":{"type":"number"},"hash":{"anyOf":[{"type":"string"},{"type":"null"}]},"hashVersion":{"type":"number"},"changed":{"type":"boolean"},"error":{"type":"string"}},"required":["url","status","hash","changed"]}}},"required":["checkedAt","attention","decision","decidedAt","note","revalidateAt","sources"]},"Shape1to9w0q":{"type":"object","properties":{"required":{"type":"boolean"},"searchConsole":{"type":"object","properties":{"configured":{"type":"boolean"},"connected":{"type":"boolean"},"account":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["configured","connected","account"]},"tokenMissing":{"type":"boolean"},"host":{"type":"string"},"verifiedAt":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"method":{"anyOf":[{"type":"string","enum":["meta","dns","search_console","workspace"]},{"type":"null"}]},"token":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["required","searchConsole","host","verifiedAt","method","token"]},"Shape1togmss":{"type":"object","properties":{"pp":{"anyOf":[{"type":"number"},{"type":"null"}]},"lo":{"anyOf":[{"type":"number"},{"type":"null"}]},"hi":{"anyOf":[{"type":"number"},{"type":"null"}]},"basis":{"type":"string","enum":["none","verdicts","observed","heuristic"]},"note":{"type":"string"},"prior":{"anyOf":[{"$ref":"#/components/schemas/Shape30yag5"},{"type":"null"}]},"demoted":{"type":"boolean"}},"required":["pp","lo","hi","basis","note","prior"]},"Shape1xc5tcl":{"type":"object","properties":{"id":{"type":"string"},"version":{"type":"number"},"status":{"type":"string","enum":["pending","failed","ready"]},"error":{"anyOf":[{"type":"string"},{"type":"null"}]},"madeAt":{"type":"string"},"model":{"anyOf":[{"type":"string"},{"type":"null"}]},"language":{"type":"string"},"wordCount":{"type":"number"},"brief":{"anyOf":[{"$ref":"#/components/schemas/Shape15itk2n"},{"type":"null"}]},"seo":{"anyOf":[{"$ref":"#/components/schemas/Shape1gkaabg"},{"type":"null"}]},"markdown":{"type":"string"},"html":{"type":"string"},"placeholders":{"type":"array","items":{"type":"string"}},"checks":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"ok":{"type":"boolean"},"detail":{"type":"string"},"blocking":{"type":"boolean"}},"required":["name","ok","detail"]}},"sources":{"type":"array","items":{"type":"object","properties":{"label":{"type":"string"},"url":{"type":"string"},"kind":{"type":"string","enum":["search","page","site","answer","rule","question"]}},"required":["label","kind"]}}},"required":["id","version","status","error","madeAt","model","language","wordCount","brief","seo","markdown","html","placeholders","checks","sources"]},"Shape1xmnuu8":{"type":"object","properties":{"rule":{"type":"string"},"title":{"type":"string"},"severity":{"type":"string","enum":["low","medium","high","critical","notice"]},"group":{"type":"string"},"pagesThen":{"type":"number"},"pagesNow":{"type":"number"},"play":{"anyOf":[{"type":"object","properties":{"id":{"type":"string"},"status":{"type":"string"}},"required":["id","status"]},{"type":"null"}]}},"required":["rule","title","severity","group","pagesThen","pagesNow"]},"Shape1xt7ts9":{"type":"object","properties":{"key":{"type":"string"},"label":{"type":"string"},"hint":{"type":"string"},"done":{"type":"boolean"},"href":{"type":"string"},"optional":{"type":"boolean"},"followUp":{"type":"object","properties":{"label":{"type":"string"},"href":{"type":"string"}},"required":["label","href"]}},"required":["key","label","hint","done","href"]},"Shape1xvkhx7":{"type":"object","properties":{"origin":{"type":"string","enum":["generated","manual","page","prompt","gsc","heading"]},"impressions":{"type":"number"},"clicks":{"type":"number"},"landingPath":{"anyOf":[{"type":"string"},{"type":"null"}]},"pageUrl":{"anyOf":[{"type":"string"},{"type":"null"}]},"reason":{"type":"string"}},"required":["origin"]},"Shape1xvrpbb":{"type":"object","properties":{"ruleId":{"type":"string"},"name":{"type":"string"},"pages":{"type":"array","items":{}},"answers":{"type":"object","properties":{"citing":{"type":"number"},"carried":{"type":"number"},"excerptsOnly":{"type":"number"},"samples":{}},"required":["citing","carried","excerptsOnly","samples"]}},"required":["ruleId","name","pages","answers"]},"Shape1xx1prt":{"type":"object","properties":{"key":{"anyOf":[{"$ref":"#/components/schemas/Shapeshtj6u"},{"type":"null"}]},"submissions":{"type":"array","items":{"$ref":"#/components/schemas/Shape143gbw2"}}},"required":["key","submissions"]},"Shape1ypmqf8":{"type":"object","properties":{"type":{"anyOf":[{"type":"string","enum":["local","shop","publisher","software","other"]},{"type":"null"}]},"why":{"type":"string"},"at":{"type":"string"},"runId":{"anyOf":[{"type":"string"},{"type":"null"}]},"vertical":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["type","why","at","runId"]},"Shape2iy9h2":{"type":"object","properties":{"url":{"type":"string"},"path":{"type":"string"},"template":{"anyOf":[{"type":"string"},{"type":"null"}]},"title":{"anyOf":[{"type":"string"},{"type":"null"}]},"feed":{"anyOf":[{"type":"object","properties":{"id":{"type":"string"},"price":{},"salePrice":{},"availability":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["id","price","salePrice","availability"]},{"type":"null"}]},"offer":{"anyOf":[{"type":"object","properties":{"price":{},"availability":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["price","availability"]},{"type":"null"}]},"visible":{"anyOf":[{"type":"object","properties":{"price":{},"jsOnly":{"type":"boolean"},"all":{}},"required":["price","jsOnly","all"]},{"type":"null"}]},"quotes":{"type":"array","items":{}},"issues":{"type":"array","items":{}},"severity":{"anyOf":[{"type":"string","enum":["low","medium","high","critical"]},{"type":"null"}]}},"required":["url","path","template","title","feed","offer","visible","quotes","issues","severity"]},"Shape2rx765":{"type":"object","properties":{"tracked":{"type":"number"},"projected":{"type":"number"},"enforced":{"type":"boolean"},"unmetered":{"type":"boolean"},"periodStart":{"type":"string"},"used":{"type":"number"},"limit":{"anyOf":[{"type":"number"},{"type":"null"}]},"remaining":{"anyOf":[{"type":"number"},{"type":"null"}]},"trackedLimit":{"anyOf":[{"type":"number"},{"type":"null"}]},"engines":{"type":"number"},"blocked":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["tracked","projected","enforced","unmetered","periodStart","used","limit","remaining","trackedLimit","engines","blocked"]},"Shape30yag5":{"type":"object","properties":{"n":{"type":"number"},"nSites":{"type":"number"},"wonRate":{"type":"object","properties":{"pct":{"type":"number"},"lo":{"type":"number"},"hi":{"type":"number"}},"required":["pct","lo","hi"]},"effect":{"anyOf":[{"type":"object","properties":{"pp":{"type":"number"},"lo":{"type":"number"},"hi":{"type":"number"}},"required":["pp","lo","hi"]},{"type":"null"}]},"segment":{"type":"object","properties":{"playType":{"type":"string"},"engine":{"type":"string"},"vertical":{"type":"string"},"market":{"type":"string"}},"required":["playType","engine","vertical","market"]},"exposure":{"anyOf":[{"type":"number"},{"type":"null"}]},"simulated":{"type":"boolean"}},"required":["n","nSites","wonRate","effect","segment"]},"Shape3gcr5p":{"type":"object","properties":{"byCategory":{"type":"array","items":{"$ref":"#/components/schemas/Shaperca8xs"}},"n":{"type":"number"},"level":{"type":"number"},"hits":{"type":"number"},"hitRate":{"anyOf":[{"type":"number"},{"type":"null"}]},"hitLo":{"anyOf":[{"type":"number"},{"type":"null"}]},"hitHi":{"anyOf":[{"type":"number"},{"type":"null"}]},"brier":{"anyOf":[{"type":"number"},{"type":"null"}]},"baseRate":{"anyOf":[{"type":"number"},{"type":"null"}]},"brierBase":{"anyOf":[{"type":"number"},{"type":"null"}]},"skill":{"anyOf":[{"type":"number"},{"type":"null"}]},"bins":{"type":"array","items":{"$ref":"#/components/schemas/Shape1cego5x"}}},"required":["byCategory","n","level","hits","hitRate","hitLo","hitHi","brier","baseRate","brierBase","skill","bins"]},"Shape3gs3pk":{"type":"object","properties":{"testable":{"type":"boolean"},"failed":{"type":"boolean"},"pp":{"anyOf":[{"type":"number"},{"type":"null"}]},"lo":{"anyOf":[{"type":"number"},{"type":"null"}]},"hi":{"anyOf":[{"type":"number"},{"type":"null"}]},"p":{"anyOf":[{"type":"number"},{"type":"null"}]},"days":{"type":"number"},"why":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["testable","failed","pp","lo","hi","p","days","why"]},"Shape3wkeap":{"type":"object","properties":{"days":{"type":"number"},"to":{"type":"string"},"sessions":{"type":"number"},"previous":{"type":"number"},"engaged":{"type":"number"},"keyEvents":{"type":"number"},"keyEventsPrevious":{"type":"number"},"users":{"type":"number"},"topEngine":{"anyOf":[{"type":"object","properties":{"engine":{"type":"string"},"label":{"type":"string"},"sessions":{"type":"number"}},"required":["engine","label","sessions"]},{"type":"null"}]},"lastDay":{"type":"string"},"previousComplete":{"type":"boolean"}},"required":["days","to","sessions","previous","engaged","keyEvents","keyEventsPrevious","users","topEngine","lastDay","previousComplete"]},"Shape4lqxeq":{"type":"object","properties":{"guide":{"$ref":"#/components/schemas/Shape16otnsv"}},"required":["guide"]},"Shape4nfea0":{"type":"object","properties":{"kind":{"type":"string","enum":["anthropic","bedrock","vertex"]},"enabled":{"type":"boolean"},"region":{"anyOf":[{"type":"string"},{"type":"null"}]},"projectId":{"anyOf":[{"type":"string"},{"type":"null"}]},"roleArn":{"anyOf":[{"type":"string"},{"type":"null"}]},"auth":{"anyOf":[{"type":"string"},{"type":"null"}]},"accessKeyId":{"anyOf":[{"type":"string"},{"type":"null"}]},"secretSet":{"type":"boolean"},"models":{"type":"object","additionalProperties":{"type":"string"}},"lastTest":{"anyOf":[{"type":"object","properties":{"at":{"type":"string","format":"date-time"},"ok":{"type":"boolean"},"error":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["at","ok","error"]},{"type":"null"}]},"updatedBy":{"anyOf":[{"type":"string"},{"type":"null"}]},"updatedAt":{"type":"string","format":"date-time"}},"required":["kind","enabled","region","projectId","roleArn","auth","accessKeyId","secretSet","models","lastTest","updatedBy","updatedAt"]},"Shape4tfi4i":{"type":"object","properties":{"memory":{"anyOf":[{"type":"object","properties":{"pp":{"type":"number"},"lo":{"type":"number"},"hi":{"type":"number"}},"required":["pp","lo","hi"]},{"type":"null"}]},"untreatedEngines":{"anyOf":[{"type":"object","properties":{"pp":{"type":"number"},"lo":{"type":"number"},"hi":{"type":"number"}},"required":["pp","lo","hi"]},{"type":"null"}]}},"required":["memory","untreatedEngines"]},"Shape5dhbkk":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"backedUp":{"type":"boolean"},"createdAt":{"type":"string","format":"date-time"},"lastUsedAt":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]}},"required":["id","name","backedUp","createdAt","lastUsedAt"]},"Shape5f2oo1":{"type":"object","properties":{"week":{"type":"string"},"asked":{"type":"number"},"noAnswer":{"type":"number"},"samples":{"type":"number"},"citedSamples":{"type":"number"},"mentioned":{"type":"number"},"share":{"anyOf":[{"type":"number"},{"type":"null"}]},"band":{"type":"array","items":{"anyOf":[{"type":"number"}]}},"matched":{"type":"boolean"},"matchedQuestions":{"type":"number"},"previousShare":{"anyOf":[{"type":"number"},{"type":"null"}]},"index":{"anyOf":[{"type":"number"},{"type":"null"}]},"linked":{"type":"boolean"}},"required":["week","asked","noAnswer","samples","citedSamples","mentioned","share","band"]},"Shape6nx4xt":{"type":"object","properties":{"enabled":{"type":"boolean"},"buildingAt":{"anyOf":[{"type":"string"},{"type":"null"}]},"builtAt":{"anyOf":[{"type":"string"},{"type":"null"}]},"builtLanguages":{"anyOf":[{"type":"array","items":{"type":"string"}},{"type":"null"}]},"lastError":{"anyOf":[{"type":"string"},{"type":"null"}]},"lastErrorAt":{"anyOf":[{"type":"string"},{"type":"null"}]},"tieredAt":{"anyOf":[{"type":"string"},{"type":"null"}]},"tieredFrom":{"anyOf":[{"type":"string","enum":["model","search_volume"]},{"type":"null"}]},"launchedAt":{"anyOf":[{"type":"string"},{"type":"null"}]},"fromAudit":{"type":"boolean"}}},"Shape72vm64":{"type":"object","properties":{"host":{"type":"string"},"score":{"type":"number"},"lo":{"type":"number"},"hi":{"type":"number"},"engines":{"type":"object","additionalProperties":{"type":"number"}},"documents":{"type":"number"},"day":{"type":"string"},"rulesVersion":{"type":"string"},"coverage":{"anyOf":[{"type":"number"},{"type":"null"}]}},"required":["host","score","lo","hi","engines","documents","day","rulesVersion","coverage"]},"Shape7ky7qg":{"type":"object","properties":{"namedFirst":{"anyOf":[{"type":"object","properties":{"pct":{"type":"number"},"lo":{"type":"number"},"hi":{"type":"number"},"answers":{"type":"number"},"questions":{"type":"number"},"nEff":{"type":"number"}},"required":["pct","lo","hi","answers","questions","nEff"]},{"type":"null"}]},"namedFirstChange":{"anyOf":[{"type":"object","properties":{"delta":{"type":"number"},"lo":{"type":"number"},"hi":{"type":"number"},"clear":{"type":"boolean"}},"required":["delta","lo","hi","clear"]},{"type":"null"}]},"firstSource":{"anyOf":[{"type":"object","properties":{"pct":{"type":"number"},"lo":{"type":"number"},"hi":{"type":"number"},"answers":{"type":"number"},"questions":{"type":"number"},"nEff":{"type":"number"}},"required":["pct","lo","hi","answers","questions","nEff"]},{"type":"null"}]},"avgNamed":{"anyOf":[{"type":"number"},{"type":"null"}]},"namedIn":{"type":"number"},"avgSource":{"anyOf":[{"type":"number"},{"type":"null"}]},"citedIn":{"type":"number"},"recommended":{"anyOf":[{"type":"object","properties":{"pct":{"type":"number"},"lo":{"type":"number"},"hi":{"type":"number"},"answers":{"type":"number"},"questions":{"type":"number"},"nEff":{"type":"number"}},"required":["pct","lo","hi","answers","questions","nEff"]},{"type":"null"}]},"tone":{"anyOf":[{"type":"object","properties":{"value":{"type":"number"},"lo":{"anyOf":[{"type":"number"},{"type":"null"}]},"hi":{"anyOf":[{"type":"number"},{"type":"null"}]},"sentences":{"type":"number"}},"required":["value","lo","hi","sentences"]},{"type":"null"}]}},"required":["namedFirst","namedFirstChange","firstSource","avgNamed","namedIn","avgSource","citedIn","recommended","tone"]},"Shape9kxrvs":{"type":"object","properties":{"enforceSsoDomains":{"type":"array","items":{"type":"string"}},"sessionHours":{"anyOf":[{"type":"number"},{"type":"null"}]},"idleMinutes":{"anyOf":[{"type":"number"},{"type":"null"}]},"requireMfa":{"type":"boolean"},"ipAllowlist":{"type":"array","items":{"type":"string"}}},"required":["enforceSsoDomains","sessionHours","idleMinutes","requireMfa","ipAllowlist"]},"Shape9ui5rs":{"type":"object","properties":{"id":{"type":"string"},"version":{"type":"string"},"status":{"type":"string","enum":["signed","countersigned","superseded"]},"party":{"$ref":"#/components/schemas/Shape1n9qv5m"},"signedAt":{"type":"string","format":"date-time"},"signerIp":{"anyOf":[{"type":"string"},{"type":"null"}]},"documentHash":{"type":"string"},"countersignedAt":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"countersignedBy":{"anyOf":[{"type":"string"},{"type":"null"}]},"pdf":{"type":"string"},"countersignedPdf":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["id","version","status","party","signedAt","signerIp","documentHash","countersignedAt","countersignedBy","pdf","countersignedPdf"]},"Shapeac5wv6":{"type":"object","properties":{"brandKey":{"type":"string"},"name":{"type":"string"},"kind":{"type":"string","enum":["other","competitor","own"]},"status":{"type":"string","enum":["auto","pinned","hidden"]},"domains":{"type":"array","items":{"type":"string"}},"share":{"anyOf":[{"type":"object","properties":{"pct":{"type":"number"},"lo":{"type":"number"},"hi":{"type":"number"},"answers":{"type":"number"},"questions":{"type":"number"},"nEff":{"type":"number"}},"required":["pct","lo","hi","answers","questions","nEff"]},{"type":"null"}]},"change":{"anyOf":[{"type":"object","properties":{"delta":{"type":"number"},"lo":{"type":"number"},"hi":{"type":"number"},"clear":{"type":"boolean"}},"required":["delta","lo","hi","clear"]},{"type":"null"}]},"ahead":{"type":"array","items":{"type":"object","properties":{"topicId":{"type":"string"},"topicName":{"type":"string"},"gap":{"type":"number"}},"required":["topicId","topicName","gap"]}},"sources":{"type":"object","properties":{"pages":{"type":"number"},"withoutYou":{"type":"number"}},"required":["pages","withoutYou"]},"searchIn":{"anyOf":[{"type":"number"},{"type":"null"}]},"searchOf":{"anyOf":[{"type":"number"},{"type":"null"}]},"memory":{"anyOf":[{"type":"object","properties":{"pct":{"type":"number"},"lo":{"type":"number"},"hi":{"type":"number"},"answers":{"type":"number"},"questions":{"type":"number"},"nEff":{"type":"number"}},"required":["pct","lo","hi","answers","questions","nEff"]},{"type":"null"}]},"position":{"anyOf":[{"$ref":"#/components/schemas/Shape7ky7qg"},{"type":"null"}]}},"required":["brandKey","name","kind","status","domains","share","change","ahead","sources","searchIn","searchOf","memory","position"]},"Shapeava2n7":{"type":"object","properties":{"runId":{"type":"string"},"at":{"type":"string"},"kind":{"type":"string"},"aiReach":{"anyOf":[{"type":"number"},{"type":"null"}]},"answer":{"anyOf":[{"type":"number"},{"type":"null"}]},"buying":{"anyOf":[{"type":"number"},{"type":"null"}]},"cited":{"anyOf":[{"type":"number"},{"type":"null"}]},"critical":{"type":"number"},"high":{"type":"number"}},"required":["runId","at","kind","aiReach","answer","buying","cited","critical","high"]},"Shapeb2bx8v":{"type":"object","properties":{"id":{"type":"string","enum":["ucp","acp","webmcp"]},"state":{"type":"string","enum":["skipped","pass","warn","fail","absent"]},"url":{"anyOf":[{"type":"string"},{"type":"null"}]},"notes":{"type":"array","items":{"type":"string"}},"detail":{"type":"object","additionalProperties":{}}},"required":["id","state","url","notes"]},"Shapebm34nq":{"type":"object","properties":{"id":{"type":"string"},"group":{"type":"string"},"role":{"type":"string","enum":["analyst","admin","viewer","client"]},"siteIds":{"anyOf":[{"type":"array","items":{"type":"string"}},{"type":"null"}]},"createdAt":{"type":"string","format":"date-time"}},"required":["id","group","role","siteIds","createdAt"]},"Shapebw11ug":{"type":"object","properties":{"countries":{"type":"array","items":{"type":"object","properties":{"code":{"type":"string"},"name":{"type":"string"},"language":{"type":"string"}},"required":["code","name","language"]}},"languages":{"type":"array","items":{"type":"object","properties":{"code":{"type":"string"},"name":{"type":"string"}},"required":["code","name"]}},"max":{"type":"number"}},"required":["countries","languages","max"]},"Shapecmfdyv":{"type":"object","properties":{"id":{"type":"string"},"protocol":{"type":"string","enum":["oidc","saml"]},"provider":{"type":"string","enum":["google","microsoft","okta","generic"]},"label":{"anyOf":[{"type":"string"},{"type":"null"}]},"issuer":{"anyOf":[{"type":"string"},{"type":"null"}]},"clientId":{"anyOf":[{"type":"string"},{"type":"null"}]},"hasSecret":{"type":"boolean"},"entryPoint":{"anyOf":[{"type":"string"},{"type":"null"}]},"idpIssuer":{"anyOf":[{"type":"string"},{"type":"null"}]},"cert":{"anyOf":[{"type":"object","properties":{"notAfter":{"type":"string"},"subject":{"type":"string"},"daysLeft":{"type":"number"}},"required":["notAfter","subject","daysLeft"]},{"type":"null"}]},"cert2":{"anyOf":[{"type":"object","properties":{"notAfter":{"type":"string"},"subject":{"type":"string"},"daysLeft":{"type":"number"}},"required":["notAfter","subject","daysLeft"]},{"type":"null"}]},"certWarning":{"anyOf":[{"type":"string"},{"type":"null"}]},"allowIdpInitiated":{"type":"boolean"},"defaultRole":{"type":"string","enum":["analyst","admin","viewer"]},"jit":{"type":"boolean"},"enabled":{"type":"boolean"},"lastLoginAt":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"lastError":{"anyOf":[{"type":"string"},{"type":"null"}]},"createdAt":{"type":"string","format":"date-time"},"jitWarning":{"anyOf":[{"type":"string"},{"type":"null"}]},"testUrl":{"type":"string"},"sp":{"anyOf":[{"type":"object","properties":{"metadataUrl":{"type":"string"},"entityId":{"type":"string"},"acs":{"type":"string"}},"required":["metadataUrl","entityId","acs"]},{"type":"object","properties":{"redirectUri":{"type":"string"}},"required":["redirectUri"]}]}},"required":["id","protocol","provider","label","issuer","clientId","hasSecret","entryPoint","idpIssuer","cert","cert2","certWarning","allowIdpInitiated","defaultRole","jit","enabled","lastLoginAt","lastError","createdAt","jitWarning","testUrl","sp"]},"Shapecrbt5f":{"type":"object","properties":{"verdict":{"type":"string","enum":["supported","not_observed","contradicted"]},"n":{"type":"number"},"nSites":{"type":"number"},"effect":{"anyOf":[{"type":"object","properties":{"pp":{"type":"number"},"lo":{"type":"number"},"hi":{"type":"number"}},"required":["pp","lo","hi"]},{"type":"null"}]},"withheld":{"type":"boolean"},"playTypes":{"type":"array","items":{"type":"string"}}},"required":["verdict","n","nSites","effect","playTypes"]},"Shapedb83bo":{"type":"object","properties":{"eval":{"$ref":"#/components/schemas/Shape1h6733o"},"evalByCredential":{"type":"object","additionalProperties":{"type":"object","properties":{"first":{},"second":{}},"required":["first"]}}}},"Shapeduv3uz":{"type":"object","properties":{"kind":{"type":"string"},"label":{"type":"string"},"state":{"type":"string","enum":["error","passing","failing","not_applicable","not_run"]},"lastRunAt":{"anyOf":[{"type":"string"},{"type":"null"}]},"shippedAt":{"anyOf":[{"type":"string"},{"type":"null"}]},"form":{"type":"string"},"shippedBy":{"anyOf":[{"type":"string","enum":["check","person"]},{"type":"null"}]},"confirmedBy":{"anyOf":[{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"}},"required":["id","name"]},{"type":"null"}]},"seen":{"anyOf":[{"type":"string"},{"type":"null"}]},"ask":{"anyOf":[{"type":"object","properties":{"reason":{"type":"string"},"seen":{"anyOf":[{"type":"string"},{"type":"null"}]},"at":{"type":"string"}},"required":["reason","seen","at"]},{"type":"null"}]},"alreadyTrue":{"type":"boolean"}},"required":["kind","label","state","lastRunAt","shippedAt"]},"Shapefcaa6v":{"type":"object","properties":{"windowDays":{"type":"number"},"confirmedAt":{"anyOf":[{"type":"string"},{"type":"null"}]},"releasedAt":{"anyOf":[{"type":"string"},{"type":"null"}]},"treated":{"type":"number"},"control":{"type":"number"}},"required":["windowDays","confirmedAt","releasedAt","treated","control"]},"Shapefebe23":{"type":"object","properties":{"latest":{"type":"object","additionalProperties":{"type":"object","properties":{"at":{"type":"string"},"cited":{"type":"boolean"},"mentioned":{"type":"boolean"},"rank":{"anyOf":[{"type":"number"},{"type":"null"}]},"error":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["at","cited","mentioned","rank"]}},"askedEngines":{"type":"array","items":{"type":"string","enum":["anthropic","perplexity","openai","gemini","xai","mistral","you","google_aio","google_ai_mode","bing_copilot"]}},"projectedChecks":{"type":"number"},"text":{"type":"string"},"id":{"type":"string"},"createdAt":{"type":"string","format":"date-time"},"orgId":{"type":"string"},"createdBy":{"anyOf":[{"type":"string"},{"type":"null"}]},"competitors":{"type":"array","items":{"type":"string"}},"siteId":{"anyOf":[{"type":"string"},{"type":"null"}]},"locale":{"type":"string"},"engines":{"type":"array","items":{"type":"string"}},"cadence":{"type":"string","enum":["paused","daily","weekly"]},"tags":{"type":"array","items":{"type":"string"}},"brandTerms":{"type":"array","items":{"type":"string"}},"shareable":{"type":"boolean"},"nextRunAt":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"lastRunAt":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"lastChangeAt":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]}},"required":["latest","askedEngines","projectedChecks","text","id","createdAt","orgId","createdBy","competitors","siteId","locale","engines","cadence","tags","brandTerms","shareable","nextRunAt","lastRunAt","lastChangeAt"]},"Shapeg45xpi":{"type":"object","properties":{"crawler":{"type":"string"},"label":{"type":"string"},"operator":{"type":"string"},"category":{"anyOf":[{"type":"string","enum":["search","research","ai-search","assistant-fetch","training","data-broker"]},{"type":"null"}]},"template":{"anyOf":[{"type":"string"},{"type":"null"}]},"requests":{"type":"number"},"served":{"type":"number"},"refused":{"type":"number"},"limited":{"type":"number"},"errors":{"type":"number"},"bytes":{"anyOf":[{"type":"number"},{"type":"null"}]},"bytesCoverage":{"type":"number"},"sessions":{"type":"number"},"keyEvents":{"type":"number"},"sessionsPer1k":{"anyOf":[{"type":"number"},{"type":"null"}]},"keyEventsPer1k":{"anyOf":[{"type":"number"},{"type":"null"}]},"referrers":{"type":"array","items":{"type":"string"}}},"required":["crawler","label","operator","category","template","requests","served","refused","limited","errors","bytes","bytesCoverage","sessions","keyEvents","sessionsPer1k","keyEventsPer1k","referrers"]},"Shapegw25lz":{"type":"object","properties":{"id":{"type":"string"},"state":{"type":"string","enum":["won","lost_ground","no_effect","inconclusive","too_early"]},"grade":{"type":"string","enum":["A","B","C","D"]},"day":{"type":"number"},"readAt":{"type":"string"},"final":{"type":"boolean"},"effect":{"anyOf":[{"type":"object","properties":{"pp":{"type":"number"},"lo":{"type":"number"},"hi":{"type":"number"}},"required":["pp","lo","hi"]},{"type":"null"}]},"mde":{"anyOf":[{"type":"number"},{"type":"null"}]},"treated":{"type":"object","properties":{"topics":{"type":"array","items":{}},"engines":{"type":"array","items":{"type":"string"}},"answersPre":{"type":"number"},"answersPost":{"type":"number"}},"required":["topics","engines","answersPre","answersPost"]},"control":{"type":"object","properties":{"topics":{"type":"number"},"answersPre":{"type":"number"},"answersPost":{"type":"number"}},"required":["topics","answersPre","answersPost"]},"negative":{"$ref":"#/components/schemas/Shape4tfi4i"},"confounders":{"type":"array","items":{"type":"object","properties":{"kind":{"type":"string","enum":["engine_change","other_play","competitor_move","poll_gap","pre_trend","customer_event"]},"text":{"type":"string"},"at":{"type":"string"},"ref":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["kind","text","at"]}},"intervention":{"type":"object","properties":{"at":{"type":"string"},"source":{"type":"string","enum":["check","crawler","version"]},"note":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["at","source"]},"bundle":{"anyOf":[{"type":"object","properties":{"id":{"type":"string"},"plays":{"type":"array","items":{}}},"required":["id","plays"]},{"type":"null"}]},"sentence":{"type":"string"},"needs":{"anyOf":[{"type":"string"},{"type":"null"}]},"simulated":{"type":"boolean"},"provisional":{"type":"boolean"},"placebo":{"anyOf":[{"$ref":"#/components/schemas/Shape3gs3pk"},{"type":"null"}]},"multiplicity":{"anyOf":[{"type":"object","properties":{"q":{"type":"number"},"compared":{"type":"number"},"held":{"type":"boolean"}},"required":["q","compared","held"]},{"type":"null"}]},"customerEvents":{"type":"number"}},"required":["id","state","grade","day","readAt","final","effect","mde","treated","control","negative","confounders","intervention","bundle","sentence","needs","simulated","provisional","placebo","multiplicity","customerEvents"]},"Shapehwhrhs":{"type":"object","properties":{"id":{"type":"string"},"orgId":{"anyOf":[{"type":"string"},{"type":"null"}]},"siteId":{"type":"string"},"name":{"type":"string"},"scope":{"type":"string","enum":["template","site","path"]},"scopeRef":{"anyOf":[{"type":"string"},{"type":"null"}]},"match":{"type":"string","enum":["text","regex"]},"pattern":{"type":"string"},"answerPattern":{"anyOf":[{"type":"string"},{"type":"null"}]},"active":{"type":"boolean"},"createdBy":{"anyOf":[{"type":"string"},{"type":"null"}]},"createdAt":{"type":"string","format":"date-time"},"updatedAt":{"type":"string","format":"date-time"}},"required":["id","orgId","siteId","name","scope","scopeRef","match","pattern","answerPattern","active","createdBy","createdAt","updatedAt"]},"Shapek04fuk":{"type":"object","properties":{"mode":{"type":"string","enum":["auto","manual"]},"markets":{"type":"array","items":{"type":"object","properties":{"code":{"type":"string"},"label":{"type":"string"},"country":{"anyOf":[{"type":"string"},{"type":"null"}]},"language":{"type":"string"}},"required":["code","label","country","language"]}},"detected":{"$ref":"#/components/schemas/Shape1p1shz1"},"manual":{"type":"array","items":{"type":"object","properties":{"code":{"type":"string"},"label":{"type":"string"},"country":{"anyOf":[{"type":"string"},{"type":"null"}]},"language":{"type":"string"}},"required":["code","label","country","language"]}},"options":{"$ref":"#/components/schemas/Shapebw11ug"}},"required":["mode","markets","detected","manual","options"]},"Shapekufms6":{"type":"object","properties":{"targets":{"type":"array","items":{}},"evidence":{"type":"array","items":{"type":"string"}},"at":{"type":"string"},"source":{"type":"string","enum":["run","home"]},"held":{"type":"array","items":{"type":"string"}},"run":{"type":"string"},"prior":{"anyOf":[{"type":"object","properties":{"targets":{},"evidence":{},"at":{"type":"string"},"source":{"type":"string","enum":["run","home"]},"held":{}},"required":["targets","evidence","at"]},{"type":"null"}]}},"required":["targets","evidence","at"]},"Shapekzrfof":{"type":"object","properties":{"hookUrl":{"type":"string"},"shopify":{"type":"boolean"},"sanity":{"type":"boolean"},"contentful":{"type":"boolean"},"github":{"type":"boolean"},"vercel":{"type":"boolean"},"netlify":{"type":"boolean"},"createdAt":{"type":"string"},"lastDeploy":{"anyOf":[{"type":"object","properties":{"source":{"type":"string"},"ref":{"anyOf":[{"type":"string"},{"type":"null"}]},"url":{"anyOf":[{"type":"string"},{"type":"null"}]},"at":{"type":"string"}},"required":["source","ref","url","at"]},{"type":"null"}]},"urlTemplate":{"type":"string"},"markOpen":{"type":"boolean"},"autoRun":{"type":"boolean"},"pendingRunAt":{"anyOf":[{"type":"string"},{"type":"null"}]},"lastAutoRunAt":{"anyOf":[{"type":"string"},{"type":"null"}]},"lastEventAt":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["hookUrl","shopify","sanity","contentful","github","vercel","netlify","createdAt"]},"Shapelmgajl":{"type":"object","properties":{"active":{"type":"boolean"},"startedAt":{"type":"string"},"treatedTopics":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"}},"required":["id","name"]}},"heldTopics":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"}},"required":["id","name"]}}},"required":["active","startedAt","treatedTopics","heldTopics"]},"Shapemgphum":{"type":"object","properties":{"id":{"type":"string"},"siteId":{"type":"string"},"host":{"type":"string"},"key":{"type":"string"},"title":{"type":"string"},"plain":{"anyOf":[{"type":"string"},{"type":"null"}]},"severity":{"type":"string"},"category":{"type":"string"},"pages":{"type":"number"},"outcome":{"$ref":"#/components/schemas/Shapeyogbmo"}},"required":["id","siteId","host","key","title","plain","severity","category","pages","outcome"]},"Shapemktu07":{"type":"object","properties":{"createdAt":{"anyOf":[{"type":"string"},{"type":"null"}]},"createdBy":{"anyOf":[{"type":"string"},{"type":"null"}]},"source":{"anyOf":[{"type":"string","enum":["cf-worker","logpush","upload","drain"]},{"type":"null"}]},"lastReceivedAt":{"anyOf":[{"type":"string"},{"type":"null"}]},"today":{"anyOf":[{"type":"object","properties":{"day":{"type":"string"},"lines":{"type":"number"},"hits":{"type":"number"},"dropped":{"type":"number"},"errors":{"type":"number"},"capped":{"type":"boolean"},"liveLines":{"type":"number"}},"required":["day","lines","hits","dropped","errors"]},{"type":"null"}]},"hookUrl":{"anyOf":[{"type":"string"},{"type":"null"}]},"worker":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["source","lastReceivedAt","today","hookUrl","worker"]},"Shapen9ix7f":{"type":"object","properties":{"pp":{"anyOf":[{"type":"number"},{"type":"null"}]},"lo":{"anyOf":[{"type":"number"},{"type":"null"}]},"hi":{"anyOf":[{"type":"number"},{"type":"null"}]},"basis":{"type":"string","enum":["none","verdicts","observed","heuristic"]},"note":{"type":"string"},"prior":{"anyOf":[{"type":"object","properties":{"n":{"type":"number"},"nSites":{"type":"number"},"wonRate":{},"effect":{},"segment":{},"exposure":{"anyOf":[{"type":"number"},{"type":"null"}]},"simulated":{"type":"boolean"}},"required":["n","nSites","wonRate","effect","segment"]},{"type":"null"}]},"demoted":{"type":"boolean"}},"required":["pp","lo","hi","basis","note","prior"]},"Shapenglwsz":{"type":"object","properties":{"business":{"type":"string"},"audience":{"type":"string"},"languages":{"type":"array","items":{"type":"string"}},"coreEntities":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"qid":{"type":"string"}},"required":["name"]}},"competitors":{"type":"array","items":{"type":"string"}},"notes":{"type":"array","items":{"type":"string"}},"lastWorkflowId":{"type":"string"}}},"Shapenuhyh8":{"type":"object","properties":{"timezone":{"type":"string"},"full":{"anyOf":[{"type":"object","properties":{"dayOfMonth":{"type":"number"},"hour":{"type":"number"}},"required":["dayOfMonth","hour"]},{"type":"null"}]},"light":{"anyOf":[{"type":"object","properties":{"dayOfWeek":{"type":"number"},"hour":{"type":"number"}},"required":["dayOfWeek","hour"]},{"type":"null"}]},"pages":{"type":"number"},"paused":{"type":"boolean"},"lastSkipped":{"anyOf":[{"type":"object","properties":{"at":{"type":"string"},"kind":{"type":"string","enum":["full","light"]},"reason":{"type":"string"}},"required":["at","kind","reason"]},{"type":"null"}]}},"required":["timezone","full","light"]},"Shapenz0qkk":{"type":"object","properties":{"noOneRecommended":{"type":"boolean"},"id":{"type":"string"},"name":{"type":"string"},"description":{"anyOf":[{"type":"string"},{"type":"null"}]},"market":{"type":"string"},"stage":{"type":"string","enum":["choose","compare","solve","learn"]},"demandTier":{"type":"string","enum":["low","medium","high"]},"demandSource":{"type":"string","enum":["manual","model","search_volume","demand_index"]},"searchVolume":{"anyOf":[{"type":"number"},{"type":"null"}]},"relevance":{"type":"number"},"status":{"type":"string","enum":["active","paused","retired"]},"origin":{"type":"string","enum":["manual","built"]},"createdAt":{"type":"string"},"updatedAt":{"type":"string"},"you":{"anyOf":[{"type":"object","properties":{"pct":{"type":"number"},"lo":{"type":"number"},"hi":{"type":"number"},"answers":{"type":"number"},"questions":{"type":"number"},"nEff":{"type":"number"}},"required":["pct","lo","hi","answers","questions","nEff"]},{"type":"null"}]},"leader":{"anyOf":[{"$ref":"#/components/schemas/Shapez5ror9"},{"type":"null"}]},"gap":{"anyOf":[{"type":"number"},{"type":"null"}]},"change":{"anyOf":[{"type":"object","properties":{"delta":{"type":"number"},"lo":{"type":"number"},"hi":{"type":"number"},"clear":{"type":"boolean"}},"required":["delta","lo","hi","clear"]},{"type":"null"}]},"questions":{"type":"number"}},"required":["id","name","description","market","stage","demandTier","demandSource","searchVolume","relevance","status","origin","createdAt","updatedAt","you","leader","gap","change","questions"]},"Shapeocny73":{"type":"object","properties":{"schedule":{"$ref":"#/components/schemas/Shape1kv1hfi"}},"required":["schedule"]},"Shapeosa4qd":{"type":"object","properties":{"previous":{"anyOf":[{"type":"number"},{"type":"null"}]},"previousSamples":{"type":"number"},"delta":{"anyOf":[{"type":"number"},{"type":"null"}]},"current":{"anyOf":[{"type":"number"},{"type":"null"}]},"matched":{"type":"number"},"partial":{"type":"boolean"}},"required":["previous","previousSamples","delta"]},"Shapep8tejg":{"type":"object","properties":{"kind":{"type":"string","enum":["rewrites","winner_analyses","articles"]},"used":{"type":"number"},"limit":{"anyOf":[{"type":"number"},{"type":"null"}]},"remaining":{"anyOf":[{"type":"number"},{"type":"null"}]},"periodStart":{"type":"string"},"resetsAt":{"anyOf":[{"type":"string"},{"type":"null"}]},"reason":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["kind","used","limit","remaining","periodStart","resetsAt","reason"]},"Shapepuh14c":{"type":"object","properties":{"id":{"type":"string"},"siteId":{"anyOf":[{"type":"string"},{"type":"null"}]},"at":{"type":"string"},"label":{"type":"string"},"createdBy":{"anyOf":[{"type":"string"},{"type":"null"}]},"createdAt":{"type":"string"},"mine":{"type":"boolean"}},"required":["id","siteId","at","label","createdBy","createdAt","mine"]},"Shapeqsztp5":{"type":"object","properties":{"question":{"type":"string"},"leader":{"anyOf":[{"type":"object","properties":{"name":{"type":"string"},"share":{"type":"number"}},"required":["name","share"]},{"type":"null"}]},"you":{"anyOf":[{"type":"number"},{"type":"null"}]}},"required":["question","leader","you"]},"Shapeqyy0rq":{"type":"object","properties":{"ids":{"type":"array","items":{"type":"string"}},"tool":{"type":"string","enum":["llm","markdown","claude","codex","linear","jira","github","asana"]},"context":{"type":"string","enum":["full","lean"]},"note":{"type":"string"},"preview":{"type":"boolean"}},"required":["ids","tool"]},"Shaper8h97e":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"limits":{"$ref":"#/components/schemas/Shapetinkmx"}},"required":["id","name","limits"]},"Shaperca8xs":{"type":"object","properties":{"n":{"type":"number"},"level":{"type":"number"},"hits":{"type":"number"},"hitRate":{"anyOf":[{"type":"number"},{"type":"null"}]},"hitLo":{"anyOf":[{"type":"number"},{"type":"null"}]},"hitHi":{"anyOf":[{"type":"number"},{"type":"null"}]},"brier":{"anyOf":[{"type":"number"},{"type":"null"}]},"baseRate":{"anyOf":[{"type":"number"},{"type":"null"}]},"brierBase":{"anyOf":[{"type":"number"},{"type":"null"}]},"skill":{"anyOf":[{"type":"number"},{"type":"null"}]},"bins":{"type":"array","items":{}},"category":{"type":"string"}},"required":["n","level","hits","hitRate","hitLo","hitHi","brier","baseRate","brierBase","skill","bins","category"]},"Shapergbjnn":{"type":"object","properties":{"id":{"type":"string"},"orgId":{"type":"string"},"siteId":{"anyOf":[{"type":"string"},{"type":"null"}]},"kind":{"type":"string","enum":["pattern","verification","site","agent","verdict","prompt","competitor","winner","drift","security","crawl","disclosure","stale","usage","share"]},"key":{"type":"string"},"severity":{"type":"string","enum":["low","medium","high"]},"title":{"type":"string"},"body":{"anyOf":[{"type":"string"},{"type":"null"}]},"data":{"type":"object","additionalProperties":{}},"createdAt":{"type":"string","format":"date-time"},"readAt":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"dismissedAt":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]}},"required":["id","orgId","siteId","kind","key","severity","title","body","data","createdAt","readAt","dismissedAt"]},"Shaperi3a08":{"type":"object","properties":{"orgId":{"type":"string"},"orgName":{"type":"string"},"siteId":{"type":"string"},"at":{"type":"string"},"by":{"anyOf":[{"type":"string"},{"type":"null"}]},"rootSiteId":{"type":"string"},"basis":{"anyOf":[{"type":"string","enum":["meta","dns","search_console"]},{"type":"null"}]}},"required":["orgId","orgName","siteId","at","by","rootSiteId","basis"]},"Shaperjswjo":{"type":"object","properties":{"error":{"anyOf":[{"type":"string"},{"type":"null"}]},"status":{"type":"string","enum":["pending","failed","ready"]},"url":{"type":"string"},"input":{"type":"string"},"id":{"type":"string"},"createdAt":{"type":"string","format":"date-time"},"createdBy":{"anyOf":[{"type":"string"},{"type":"null"}]},"rules":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"number":{"type":"string"},"text":{"type":"string"},"source":{"type":"string","enum":["pattern","kb"]}},"required":["id","number","text","source"]}},"siteId":{"type":"string"},"model":{"anyOf":[{"type":"string"},{"type":"null"}]},"findingKey":{"anyOf":[{"type":"string"},{"type":"null"}]},"context":{"$ref":"#/components/schemas/Shape1m9fx8s"},"variants":{"type":"array","items":{"$ref":"#/components/schemas/Shapezeqg3v"}},"notes":{"type":"array","items":{"type":"string"}},"chosen":{"anyOf":[{"type":"number"},{"type":"null"}]}},"required":["error","status","url","input","id","createdAt","createdBy","rules","siteId","model","findingKey","context","variants","notes","chosen"]},"Shapeshtj6u":{"type":"object","properties":{"key":{"type":"string"},"keyLocation":{"type":"string"},"verifiedAt":{"anyOf":[{"type":"string"},{"type":"null"}]},"lastCheckAt":{"anyOf":[{"type":"string"},{"type":"null"}]},"lastError":{"anyOf":[{"type":"string"},{"type":"null"}]},"fileContent":{"type":"string"}},"required":["key","keyLocation","verifiedAt","lastCheckAt","lastError","fileContent"]},"Shapetinkmx":{"type":"object","properties":{"sites":{"type":"number"},"pagesPerRun":{"type":"number"},"seoPages":{"type":"number"},"llmPagesPerRun":{"type":"number"},"fullRunsPerMonth":{"type":"number"},"lightRunsPerMonth":{"type":"number"},"citationIntents":{"type":"number"},"citationSamples":{"type":"number"},"panelUsdPerRun":{"type":"number"},"monthlyTokenBudget":{"type":"number"},"sso":{"type":"boolean"},"byok":{"type":"boolean"},"api":{"type":"boolean"},"handoffs":{"type":"boolean"},"whiteLabel":{"type":"boolean"},"crossSite":{"type":"boolean"},"resets":{"type":"string","enum":["never","monthly"]},"questionsPerRun":{"type":"number"},"watch":{"type":"boolean"},"trafficLinesPerDay":{"type":"number"},"newUrlPages":{"type":"number"},"seats":{"type":"number"},"seatPriceUsd":{"type":"number"},"trackedPrompts":{"type":"number"},"promptChecksPerMonth":{"type":"number"},"winnerAnalysesPerMonth":{"type":"number"},"rewritesPerMonth":{"type":"number"},"articlesPerMonth":{"type":"number"},"intelligence":{"type":"boolean"},"dpa":{"type":"string","enum":["countersigned","self-serve"]},"saml":{"type":"boolean"},"assistantQuestionsPerDay":{"type":"number"},"topics":{"type":"number"},"pollAsksPerMonth":{"type":"number"},"memoryAsksPerMonth":{"type":"number"},"engines":{"type":"array","items":{"type":"string"}},"apiAccess":{"type":"string","enum":["read","write"]}},"required":["sites","pagesPerRun","llmPagesPerRun","fullRunsPerMonth","lightRunsPerMonth","citationIntents","monthlyTokenBudget","sso","byok","api","whiteLabel","crossSite","assistantQuestionsPerDay"]},"Shapeuabwj8":{"type":"object","properties":{"lastError":{"anyOf":[{"type":"string"},{"type":"null"}]},"property":{"type":"string"},"account":{"type":"string"},"connectedAt":{"type":"string"},"connectedBy":{"anyOf":[{"type":"string"},{"type":"null"}]},"lastSyncAt":{"anyOf":[{"type":"string"},{"type":"null"}]},"days":{"type":"number"},"properties":{"type":"array","items":{"type":"string"}},"daysTo":{"anyOf":[{"type":"string"},{"type":"null"}]},"daysProperty":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["property","connectedAt"]},"Shapeuaih0":{"type":"object","properties":{"prompt":{"$ref":"#/components/schemas/Shapefebe23"},"allowance":{"$ref":"#/components/schemas/Shape2rx765"}},"required":["prompt","allowance"]},"Shapeulni8":{"type":"object","properties":{"runId":{"type":"string"},"pages":{"type":"number"},"aiReadPct":{"anyOf":[{"type":"number"},{"type":"null"}]},"jsRatio":{"anyOf":[{"type":"number"},{"type":"null"}]},"answeredPct":{"anyOf":[{"type":"number"},{"type":"null"}]},"asked":{"type":"number"},"findings":{"type":"number"},"severe":{"type":"number"}},"required":["runId","pages","aiReadPct","jsRatio","answeredPct","asked","findings","severe"]},"Shapeupbcn":{"type":"object","properties":{"brands":{"type":"object","additionalProperties":{"type":"object","properties":{"names":{"type":"array","items":{"type":"string"}},"aliases":{"type":"array","items":{"type":"string"}},"exclude":{"type":"array","items":{"type":"string"}}}}},"effective":{"type":"array","items":{"$ref":"#/components/schemas/Shape1sbn5ec"}}},"required":["brands","effective"]},"Shapevdbg6u":{"type":"object","properties":{"error":{"anyOf":[{"type":"string"},{"type":"null"}]},"headline":{"anyOf":[{"type":"string"},{"type":"null"}]},"modelUsed":{"type":"boolean"},"indicators":{"type":"array","items":{"$ref":"#/components/schemas/Shape1qfbqgf"}},"status":{"type":"string","enum":["pending","failed","ready","unreachable"]},"id":{"type":"string"},"createdAt":{"type":"string","format":"date-time"},"workflowId":{"anyOf":[{"type":"string"},{"type":"null"}]},"siteId":{"type":"string"},"query":{"type":"string"},"model":{"anyOf":[{"type":"string"},{"type":"null"}]},"comparison":{"type":"object","additionalProperties":{"type":"object","properties":{"winner":{"anyOf":[{"type":"number"},{"type":"null"}]},"own":{"anyOf":[{"type":"number"},{"type":"null"}]},"weight":{"anyOf":[{"type":"number"},{"type":"null"}]}},"required":["winner","own","weight"]}},"engines":{"type":"array","items":{"type":"string"}},"promptId":{"anyOf":[{"type":"string"},{"type":"null"}]},"timesCited":{"type":"number"},"winnerUrl":{"type":"string"},"winnerHost":{"type":"string"},"ownUrl":{"anyOf":[{"type":"string"},{"type":"null"}]},"winnerPassage":{"anyOf":[{"type":"string"},{"type":"null"}]},"ownPassage":{"anyOf":[{"type":"string"},{"type":"null"}]},"winnerStructure":{"anyOf":[{"$ref":"#/components/schemas/Shape19dpe2f"},{"type":"null"}]},"ownStructure":{"anyOf":[{"$ref":"#/components/schemas/Shape19dpe2f"},{"type":"null"}]},"explanation":{"anyOf":[{"$ref":"#/components/schemas/Shape1jok0y2"},{"type":"null"}]}},"required":["error","headline","modelUsed","indicators","status","id","createdAt","workflowId","siteId","query","model","comparison","engines","promptId","timesCited","winnerUrl","winnerHost","ownUrl","winnerPassage","ownPassage","winnerStructure","ownStructure","explanation"]},"Shapew5b02p":{"type":"object","properties":{"from":{"type":"string"},"to":{"type":"string"},"rows":{"type":"number"},"sessions":{"type":"number"},"aiSessions":{"type":"number"},"dataLoss":{"type":"boolean"},"hosts":{"anyOf":[{"type":"array","items":{"type":"string"}},{"type":"null"}]}},"required":["from","to","rows","sessions","aiSessions"]},"Shapew8uuzz":{"type":"object","properties":{"includedSites":{"type":"number"},"siteTiers":{"type":"array","items":{"type":"object","properties":{"upTo":{"anyOf":[{"type":"number"},{"type":"null"}]},"usd":{"type":"number"}},"required":["upTo","usd"]}},"pageBlockUsd":{"type":"number"},"pageBlockSize":{"type":"number"},"fromUsd":{"type":"number"}},"required":["includedSites","siteTiers"]},"Shapewfdc2a":{"type":"object","properties":{"ok":{"type":"boolean"},"status":{"anyOf":[{"type":"number"},{"type":"null"}]},"message":{"type":"string"},"submitted":{"type":"array","items":{"type":"string"}},"skipped":{"type":"array","items":{"type":"string"}},"rejected":{"type":"array","items":{"type":"string"}}},"required":["ok","status","message","submitted","skipped","rejected"]},"Shapewl1w82":{"type":"object","properties":{"closed":{"type":"boolean"},"closedAt":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"deleteAfter":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"reason":{"anyOf":[{"type":"string"},{"type":"null"}]},"closedBy":{"anyOf":[{"type":"string"},{"type":"null"}]},"canReopen":{"type":"boolean"},"canClose":{"type":"boolean"},"policy":{"type":"object","properties":{"readOnlyDaysAfterCancel":{"type":"number"},"deleteAfterDays":{"type":"number"},"exportDays":{"type":"number"}},"required":["readOnlyDaysAfterCancel","deleteAfterDays","exportDays"]}},"required":["closed","closedAt","deleteAfter","reason","closedBy","canReopen","canClose","policy"]},"Shapexd63x":{"type":"object","properties":{"trigger":{"type":"string","enum":["api","free","schedule","manual","first","cms"]},"deploy":{"anyOf":[{"type":"object","properties":{"source":{"type":"string"},"ref":{"anyOf":[{"type":"string"},{"type":"null"}]},"url":{"anyOf":[{"type":"string"},{"type":"null"}]},"at":{"type":"string"}},"required":["source","ref","url","at"]},{"type":"null"}]},"maxPages":{"type":"number"},"perspectives":{"type":"array","items":{"type":"string"}},"render":{"type":"boolean"},"languages":{"type":"array","items":{"type":"string"}},"llm":{"type":"boolean"},"intentCount":{"type":"number"}},"required":["maxPages","perspectives","render","llm","intentCount"]},"Shapeyenwo0":{"type":"object","properties":{"brandKey":{"type":"string"},"name":{"type":"string"},"kind":{"type":"string","enum":["other","competitor","own"]},"status":{"type":"string","enum":["auto","pinned","hidden"]},"domains":{"type":"array","items":{"type":"string"}},"answers":{"type":"number"}},"required":["brandKey","name","kind","status","domains","answers"]},"Shapeyogbmo":{"type":"object","properties":{"tier":{"type":"string","enum":["unknown","none","estimated","research","measured_here","measured_pooled","modelled"]},"points":{"anyOf":[{"type":"object","properties":{"expected":{"type":"number"},"lo":{"type":"number"},"hi":{"type":"number"}},"required":["expected","lo","hi"]},{"type":"null"}]},"serves":{"anyOf":[{"type":"number"},{"type":"null"}]},"questions":{"anyOf":[{"type":"object","properties":{"expected":{"type":"number"},"lo":{"type":"number"},"hi":{"type":"number"}},"required":["expected","lo","hi"]},{"type":"null"}]},"basis":{"type":"string"},"n":{"anyOf":[{"type":"object","properties":{"fixes":{"type":"number"},"sites":{"type":"number"},"positive":{"type":"number"}},"required":["fixes","sites"]},{"type":"null"}]},"research":{"anyOf":[{"$ref":"#/components/schemas/Shape1dmnouc"},{"type":"null"}]}},"required":["tier","points","serves","questions","basis","n","research"]},"Shapeyxkc6t":{"type":"object","properties":{"connection":{"anyOf":[{"$ref":"#/components/schemas/Shape1j38q80"},{"type":"null"}]}},"required":["connection"]},"Shapez5ror9":{"type":"object","properties":{"brandKey":{"type":"string"},"name":{"type":"string"},"share":{"type":"object","properties":{"pct":{"type":"number"},"lo":{"type":"number"},"hi":{"type":"number"},"answers":{"type":"number"},"questions":{"type":"number"},"nEff":{"type":"number"}},"required":["pct","lo","hi","answers","questions","nEff"]}},"required":["brandKey","name","share"]},"Shapezeqg3v":{"type":"object","properties":{"strategy":{"type":"string","enum":["answer-first","evidence-led","structured"]},"text":{"type":"string"},"rules":{"type":"array","items":{"type":"string"}},"notes":{"type":"array","items":{"type":"string"}},"placeholders":{"type":"array","items":{"type":"string"}},"before":{"type":"object","additionalProperties":{"type":"number"}},"after":{"type":"object","additionalProperties":{"type":"number"}},"retrieval":{"type":"array","items":{}}},"required":["strategy","text","rules","notes","placeholders","before","after"]},"Shapezo7cs2":{"type":"object","properties":{"id":{"type":"string"},"findingKey":{"type":"string"},"findingId":{"anyOf":[{"type":"string"},{"type":"null"}]},"title":{"type":"string"},"category":{"type":"string"},"method":{"type":"string","enum":["none","model","simulation"]},"state":{"type":"string","enum":["skipped","open","scored","not_scored"]},"reason":{"anyOf":[{"type":"string"},{"type":"null"}]},"createdAt":{"type":"string"},"decidedAt":{"type":"string"},"baseline":{"anyOf":[{"type":"number"},{"type":"null"}]},"questions":{"type":"number"},"asks":{"type":"number"},"expected":{"anyOf":[{"type":"number"},{"type":"null"}]},"lo":{"anyOf":[{"type":"number"},{"type":"null"}]},"hi":{"anyOf":[{"type":"number"},{"type":"null"}]},"level":{"type":"number"},"pUp":{"anyOf":[{"type":"number"},{"type":"null"}]},"measured":{"anyOf":[{"type":"number"},{"type":"null"}]},"measuredLo":{"anyOf":[{"type":"number"},{"type":"null"}]},"measuredHi":{"anyOf":[{"type":"number"},{"type":"null"}]},"measuredN":{"anyOf":[{"type":"number"},{"type":"null"}]},"hit":{"anyOf":[{"type":"boolean"},{"type":"null"}]},"brier":{"anyOf":[{"type":"number"},{"type":"null"}]},"scoredAt":{"anyOf":[{"type":"string"},{"type":"null"}]},"sentence":{"type":"string"},"inputs":{"type":"object","additionalProperties":{}}},"required":["id","findingKey","findingId","title","category","method","state","reason","createdAt","decidedAt","baseline","questions","asks","expected","lo","hi","level","pUp","measured","measuredLo","measuredHi","measuredN","hit","brier","scoredAt","sentence","inputs"]},"Error":{"type":"object","required":["error"],"description":"Every failure of the API, whatever its status. `error` is a sentence for a person; `code` names the refusal for a program (bad_id, bad_json, bad_url, bad_input, bad_cursor, not_found, site_cap, workspace_closed, rate_limited, not_configured and others); `requestId` is the `x-request-id` of the response, to quote to support.","properties":{"error":{"type":"string"},"code":{"type":"string"},"requestId":{"type":"string"}},"additionalProperties":true},"VisibilityExport":{"type":"object","properties":{"from":{"type":"string","format":"date-time"},"to":{"type":"string","format":"date-time"},"generatedAt":{"type":"string","format":"date-time"},"sites":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"host":{"type":"string"}}}},"definitions":{"type":"object","additionalProperties":{"type":"string"}},"rows":{"type":"array","items":{"type":"object","required":["week","siteId","site","engine","domain","role","asks","citedAsks"],"properties":{"week":{"type":"string","format":"date","description":"Monday of the ISO week (UTC)"},"siteId":{"type":"string"},"site":{"type":"string"},"engine":{"type":"string"},"engineLabel":{"type":"string"},"domain":{"type":"string"},"role":{"type":"string","enum":["own","competitor","other"]},"asks":{"type":"integer"},"citedAsks":{"type":"integer"},"citedShare":{"type":["number","null"]},"low":{"type":"number"},"high":{"type":"number"},"questions":{"type":"integer"},"questionsCited":{"type":"integer"},"namedNotCited":{"type":["integer","null"]}}}}}}}}}