{"openapi":"3.1.0","info":{"title":"SEO Intelligence Engine","version":"0.1.0"},"paths":{"/audit-framework/plan":{"get":{"tags":["audit-framework"],"summary":"Plan Search Audit","description":"ONE call to turn a target client domain into a scoped Five-Layer Search\nAudit action plan — the module list for that domain's profile/tier, each\nwith a one-line why and the exact Xeorank tools to call for real data\n(deduped into suggested_tool_call_order). Deliberately lean: no full\nchecklists here (that would bloat this call) — fetch a module's full\nchecklist on demand via GET /audit-framework?section=module&module_id=X\nonce you're actually working it, and section=deliverable when it's time\nto write the client-facing report. Business-intelligence inputs (B1-B4)\ncan't come from tool calls — this flags them so you go get them from the\nclient, not guess.","operationId":"plan_search_audit_audit_framework_plan_get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"domain","in":"query","required":true,"schema":{"type":"string","description":"The target client's domain, e.g. example.com","title":"Domain"},"description":"The target client's domain, e.g. example.com"},{"name":"site_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"If this domain is already a Xeorank site, pass its id to infer the profile from real crawl/GSC signals instead of guessing","title":"Site Id"},"description":"If this domain is already a Xeorank site, pass its id to infer the profile from real crawl/GSC signals instead of guessing"},{"name":"profile","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Override the inferred profile: P1 (local) | P2 (SMB) | P3 (mid-market) | P4 (enterprise)","title":"Profile"},"description":"Override the inferred profile: P1 (local) | P2 (SMB) | P3 (mid-market) | P4 (enterprise)"},{"name":"tier","in":"query","required":false,"schema":{"type":"string","description":"core (default) | deep | autonomous","default":"core","title":"Tier"},"description":"core (default) | deep | autonomous"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Plan Search Audit Audit Framework Plan Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/audit-framework":{"get":{"tags":["audit-framework"],"summary":"Get Audit Framework","description":"Xeorank's proprietary Five-Layer Search Audit (SEO/AEO/GEO/AIO/AAO):\n4 business profiles, 26 modules, 295 checks, 3 engagement tiers, a\nVisibility Score + Future Readiness Index, a forecast model, and a\nclient-ready deliverable structure. Every module already maps to real\nXeorank tools in its run_with field — call those for real data before\nwriting any finding; never write a finding the tools didn't surface.","operationId":"get_audit_framework_audit_framework_get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"section","in":"query","required":false,"schema":{"type":"string","description":"overview (default) | profile_matrix | modules | module | deliverable | tool_standards | report_template","default":"overview","title":"Section"},"description":"overview (default) | profile_matrix | modules | module | deliverable | tool_standards | report_template"},{"name":"profile","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter modules: P1 (local) | P2 (SMB) | P3 (mid-market) | P4 (enterprise)","title":"Profile"},"description":"Filter modules: P1 (local) | P2 (SMB) | P3 (mid-market) | P4 (enterprise)"},{"name":"tier","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter modules: core | deep | autonomous","title":"Tier"},"description":"Filter modules: core | deep | autonomous"},{"name":"module_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Required for section=module — e.g. F1, G2, T6","title":"Module Id"},"description":"Required for section=module — e.g. F1, G2, T6"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Audit Framework Audit Framework Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/citations/test":{"post":{"tags":["citations"],"summary":"Test Citations","operationId":"test_citations_citations_test_post","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"email","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CitationTestRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/citations/generate-prompts":{"post":{"tags":["citations"],"summary":"Generate Prompts","description":"Generate provider-tailored citation-test prompts (Gemini, backend keys).","operationId":"generate_prompts_citations_generate_prompts_post","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"email","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneratePromptsRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Generate Prompts Citations Generate Prompts Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/citations/query":{"post":{"tags":["citations"],"summary":"Query Provider","description":"Run ONE prompt against ONE LLM provider (backend keys). Returns\n{text, tokens, latency_ms} — the primitive the dashboard scanner uses.","operationId":"query_provider_citations_query_post","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"email","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProviderQueryRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Query Provider Citations Query Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/ai-visibility/scan":{"post":{"tags":["ai-visibility"],"summary":"Run Scan","description":"Kick off a grounded visibility scan. Returns immediately; poll the scan_id.","operationId":"run_scan_ai_visibility_scan_post","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"email","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ScanRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Run Scan Ai Visibility Scan Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/ai-visibility/prompts":{"post":{"tags":["ai-visibility"],"summary":"Get Prompt Pool","description":"Return the pool of prompts to choose from for a scan.\n\nDefault reuses the site's saved prompts (free); regenerate=true generates a\nfresh candidate pool. Generation is a cheap Gemini call and is NOT metered —\nonly running a scan against the paid engines consumes quota.","operationId":"get_prompt_pool_ai_visibility_prompts_post","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"email","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PromptsRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Prompt Pool Ai Visibility Prompts Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/ai-visibility/list":{"get":{"tags":["ai-visibility"],"summary":"List Scans","description":"List visibility scans, newest first, optionally scoped to one site.\n\nsite_id is filtered here rather than by the caller: the column is indexed\n(ix_visibility_scans_site_created) and LIMIT is applied in SQL, so filtering\nafter the fact would return the newest N scans across every site and then\ndiscard most of them.","operationId":"list_scans_ai_visibility_list_get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":25,"title":"Limit"}},{"name":"email","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"}},{"name":"site_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Site Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response List Scans Ai Visibility List Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/ai-visibility/sources":{"get":{"tags":["ai-visibility"],"summary":"Get Sources","description":"Which external domains do AI engines cite for this site's topics?\n\nThese are the sites the engines already trust — i.e. the backlink targets.","operationId":"get_sources_ai_visibility_sources_get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"site_id","in":"query","required":true,"schema":{"type":"string","title":"Site Id"}},{"name":"days","in":"query","required":false,"schema":{"type":"integer","maximum":365,"minimum":1,"default":30,"title":"Days"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":25,"title":"Limit"}},{"name":"email","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Sources Ai Visibility Sources Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/ai-visibility/{scan_id}":{"get":{"tags":["ai-visibility"],"summary":"Get Scan","operationId":"get_scan_ai_visibility__scan_id__get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"scan_id","in":"path","required":true,"schema":{"type":"string","title":"Scan Id"}},{"name":"email","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Scan Ai Visibility  Scan Id  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/ai-visibility/outreach/discover-contacts":{"post":{"tags":["ai-visibility"],"summary":"Outreach Discover Contacts","operationId":"outreach_discover_contacts_ai_visibility_outreach_discover_contacts_post","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"email","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DiscoverContactsRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Outreach Discover Contacts Ai Visibility Outreach Discover Contacts Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/ai-visibility/outreach/draft":{"post":{"tags":["ai-visibility"],"summary":"Outreach Draft","operationId":"outreach_draft_ai_visibility_outreach_draft_post","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"email","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DraftRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Outreach Draft Ai Visibility Outreach Draft Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/queries":{"get":{"tags":["queries"],"summary":"List Queries","description":"Search Console queries for one of the caller's own sites. The caller is\nthe personal key's owner, or ?email= with the shared server key; without\neither the call is refused, because an unscoped lookup by domain would\nreturn another account's data for the same domain.","operationId":"list_queries_queries_get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"site","in":"query","required":true,"schema":{"type":"string","description":"Site domain or URL","title":"Site"},"description":"Site domain or URL"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"default":50,"title":"Limit"}},{"name":"email","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/QueryOut"},"title":"Response List Queries Queries Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/competitors":{"get":{"tags":["competitors"],"summary":"List Competitors","operationId":"list_competitors_competitors_get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"query","in":"query","required":true,"schema":{"type":"string","minLength":2,"title":"Query"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/CompetitorPageOut"},"title":"Response List Competitors Competitors Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/gaps":{"get":{"tags":["gaps"],"summary":"List Page Gaps","operationId":"list_page_gaps_gaps_get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"page","in":"query","required":true,"schema":{"type":"string","description":"Absolute page URL","title":"Page"},"description":"Absolute page URL"},{"name":"query","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Query"}},{"name":"email","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"}},{"name":"X-Org-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Org-Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/GapOut"},"title":"Response List Page Gaps Gaps Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/sites/{site_id}/content/opportunities":{"get":{"tags":["content"],"summary":"Content Opportunities","operationId":"content_opportunities_sites__site_id__content_opportunities_get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"site_id","in":"path","required":true,"schema":{"type":"string","title":"Site Id"}},{"name":"email","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":25,"title":"Limit"}},{"name":"trends","in":"query","required":false,"schema":{"type":"boolean","description":"Fetch live GSC windows for rising/new-demand signals","default":true,"title":"Trends"},"description":"Fetch live GSC windows for rising/new-demand signals"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Content Opportunities Sites  Site Id  Content Opportunities Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/sites/{site_id}/content/briefs":{"get":{"tags":["content"],"summary":"List Briefs","operationId":"list_briefs_sites__site_id__content_briefs_get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"site_id","in":"path","required":true,"schema":{"type":"string","title":"Site Id"}},{"name":"email","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"}},{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response List Briefs Sites  Site Id  Content Briefs Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["content"],"summary":"Create Brief","description":"Open a brief for a keyword: stores the opportunity it came from and\ncollects the evidence bundle the agent writes against.","operationId":"create_brief_sites__site_id__content_briefs_post","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"site_id","in":"path","required":true,"schema":{"type":"string","title":"Site Id"}},{"name":"email","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateBriefBody"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Create Brief Sites  Site Id  Content Briefs Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/content/briefs/{brief_id}":{"get":{"tags":["content"],"summary":"Get Brief","operationId":"get_brief_content_briefs__brief_id__get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"brief_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Brief Id"}},{"name":"email","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Brief Content Briefs  Brief Id  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"patch":{"tags":["content"],"summary":"Update Brief","operationId":"update_brief_content_briefs__brief_id__patch","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"brief_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Brief Id"}},{"name":"email","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateBriefBody"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Update Brief Content Briefs  Brief Id  Patch"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/content/briefs/{brief_id}/score":{"post":{"tags":["content"],"summary":"Score Brief","description":"Deterministic rankability score of the stored draft. Free; re-run after every revision.","operationId":"score_brief_content_briefs__brief_id__score_post","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"brief_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Brief Id"}},{"name":"email","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Score Brief Content Briefs  Brief Id  Score Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/content/briefs/{brief_id}/publish":{"post":{"tags":["content"],"summary":"Publish Brief","description":"Create a WordPress DRAFT (never live) from the brief's markdown via the\nGutenberg builder. Uses the brand's verified connection — the caller's own\nor a teammate's, per the org model — and the normal WordPress write gates.","operationId":"publish_brief_content_briefs__brief_id__publish_post","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"brief_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Brief Id"}},{"name":"email","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublishBody"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Publish Brief Content Briefs  Brief Id  Publish Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/content/review":{"post":{"tags":["content"],"summary":"Review Writing","description":"Deterministic writing review of ANY text or public URL — slop index,\nfive component scores, findings with spans and fixes, blockers. No model\ncall, no credits, no brief needed. The same detector gates publishing.","operationId":"review_writing_content_review_post","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"email","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReviewBody"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Review Writing Content Review Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/content/briefs/{brief_id}/sources/suggest":{"post":{"tags":["content"],"summary":"Suggest Sources","description":"Candidate sources for every '[SOURCE NEEDED]' marker and unsourced figure\nin the draft. Candidates are found, never generated: the brief's first-party\nevidence, the vendor's own page from the SERP, and a live Google search per\nclaim. Each web candidate is fetched and checked for whether it states the\nclaim's figure. Pro (Writing Agent).","operationId":"suggest_sources_content_briefs__brief_id__sources_suggest_post","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"brief_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Brief Id"}},{"name":"email","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuggestSourcesBody"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Suggest Sources Content Briefs  Brief Id  Sources Suggest Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/content/briefs/{brief_id}/sources/accept":{"post":{"tags":["content"],"summary":"Accept Source","description":"Write the chosen source into the draft at the claim, as a markdown link\n(replacing the marker). Clears the score; re-score after.","operationId":"accept_source_content_briefs__brief_id__sources_accept_post","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"brief_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Brief Id"}},{"name":"email","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AcceptSourceBody"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Accept Source Content Briefs  Brief Id  Sources Accept Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/content/briefs/{brief_id}/outcome":{"get":{"tags":["content"],"summary":"Brief Outcome","operationId":"brief_outcome_content_briefs__brief_id__outcome_get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"brief_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Brief Id"}},{"name":"email","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"}},{"name":"refresh","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Refresh"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Brief Outcome Content Briefs  Brief Id  Outcome Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/sites/{site_id}/content/outcomes":{"get":{"tags":["content"],"summary":"Site Outcomes","description":"Published briefs for a site: the score we predicted vs the clicks and\nposition they earned, with a rank correlation once there are 5+ pages.","operationId":"site_outcomes_sites__site_id__content_outcomes_get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"site_id","in":"path","required":true,"schema":{"type":"string","title":"Site Id"}},{"name":"email","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"}},{"name":"checkpoint","in":"query","required":false,"schema":{"type":"integer","default":30,"title":"Checkpoint"}},{"name":"refresh","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Refresh"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Site Outcomes Sites  Site Id  Content Outcomes Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/content/outcomes/sweep":{"post":{"tags":["content"],"summary":"Outcomes Sweep","description":"Scheduled job: refresh outcomes for every published brief that is due.\nService key only. Each brief refreshes at most once per 20 hours.","operationId":"outcomes_sweep_content_outcomes_sweep_post","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":500,"minimum":1,"default":100,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Outcomes Sweep Content Outcomes Sweep Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/sites/{site_id}/voice-profile":{"post":{"tags":["content"],"summary":"Create Voice Profile","description":"Build the brand's voice fingerprint from the author's OWN unedited\nwriting (5,000+ words recommended, 2,000 minimum): sentence rhythm,\ncontractions, first person, punctuation, word length, function words. Drafts\nare then scored as distance from it — never as \"AI or not\". Pro.","operationId":"create_voice_profile_sites__site_id__voice_profile_post","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"site_id","in":"path","required":true,"schema":{"type":"string","title":"Site Id"}},{"name":"email","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/VoiceProfileBody"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Create Voice Profile Sites  Site Id  Voice Profile Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["content"],"summary":"Get Voice Profile","operationId":"get_voice_profile_sites__site_id__voice_profile_get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"site_id","in":"path","required":true,"schema":{"type":"string","title":"Site Id"}},{"name":"email","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Voice Profile Sites  Site Id  Voice Profile Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["content"],"summary":"Delete Voice Profile","operationId":"delete_voice_profile_sites__site_id__voice_profile_delete","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"site_id","in":"path","required":true,"schema":{"type":"string","title":"Site Id"}},{"name":"email","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"}},{"name":"wipe","in":"query","required":false,"schema":{"type":"boolean","description":"Also remove the declared answers and the author's corpus","default":false,"title":"Wipe"},"description":"Also remove the declared answers and the author's corpus"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Delete Voice Profile Sites  Site Id  Voice Profile Delete"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/sites/{site_id}/voice-profile/declared":{"post":{"tags":["content"],"summary":"Declare Voice","description":"The six-question fallback when the author has no samples yet: their\nanswers become declared constraints, used (and labelled 'declared') until\nthe measured profile builds itself from their interview answers and drafts.","operationId":"declare_voice_sites__site_id__voice_profile_declared_post","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"site_id","in":"path","required":true,"schema":{"type":"string","title":"Site Id"}},{"name":"email","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeclareVoiceBody"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Declare Voice Sites  Site Id  Voice Profile Declared Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/voice-questions":{"get":{"tags":["content"],"summary":"Voice Questions","operationId":"voice_questions_voice_questions_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Voice Questions Voice Questions Get"}}}}},"security":[{"APIKeyHeader":[]}]}},"/sites/{site_id}/content/for-goal/{goal_id}":{"post":{"tags":["content"],"summary":"Content For Goal","description":"Start (or resume) the content loop from a goal: the brief already open\nfor this goal, else a new one with the keyword derived from the goal's\ntitle unless given. Returns the brief and the next step — the same ladder\nas create_content_brief, entered from the roadmap.","operationId":"content_for_goal_sites__site_id__content_for_goal__goal_id__post","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"site_id","in":"path","required":true,"schema":{"type":"string","title":"Site Id"}},{"name":"goal_id","in":"path","required":true,"schema":{"type":"string","title":"Goal Id"}},{"name":"email","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ForGoalBody"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Content For Goal Sites  Site Id  Content For Goal  Goal Id  Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/sites/{site_id}/voice-probe":{"get":{"tags":["content"],"summary":"Voice Probe","description":"Two sentence pairs about the author's own topic, each differing in one\ntrait. Least-confirmed traits first. Ask one or two per brief; the answers\naccumulate into the declared voice while the corpus builds the measured one.","operationId":"voice_probe_sites__site_id__voice_probe_get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"site_id","in":"path","required":true,"schema":{"type":"string","title":"Site Id"}},{"name":"email","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"}},{"name":"brief_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Brief Id"}},{"name":"n","in":"query","required":false,"schema":{"type":"integer","maximum":4,"minimum":1,"default":2,"title":"N"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Voice Probe Sites  Site Id  Voice Probe Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["content"],"summary":"Voice Probe Answer","operationId":"voice_probe_answer_sites__site_id__voice_probe_post","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"site_id","in":"path","required":true,"schema":{"type":"string","title":"Site Id"}},{"name":"email","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProbeAnswerBody"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Voice Probe Answer Sites  Site Id  Voice Probe Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/content/briefs/{brief_id}/disclosure":{"get":{"tags":["content"],"summary":"Brief Disclosure","operationId":"brief_disclosure_content_briefs__brief_id__disclosure_get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"brief_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Brief Id"}},{"name":"email","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"}},{"name":"author","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Author"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Brief Disclosure Content Briefs  Brief Id  Disclosure Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/sites/{site_id}/content/for-page":{"post":{"tags":["content"],"summary":"Content For Page","description":"Optimise a page that already exists. Fetches the live post, makes its\ntext the brief's author_draft AND draft (with its own title/meta/slug as\nfront-matter), picks the target from the page's striking-distance Search\nConsole queries, saves the before-score and the 28-day baseline, and\nreturns optimisation guidance: change the least. Resumes an open brief for\nthe same URL.","operationId":"content_for_page_sites__site_id__content_for_page_post","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"site_id","in":"path","required":true,"schema":{"type":"string","title":"Site Id"}},{"name":"email","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ForPageBody"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Content For Page Sites  Site Id  Content For Page Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/analyze":{"post":{"tags":["analyze"],"summary":"Analyze Page","operationId":"analyze_page_analyze_post","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"email","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"}},{"name":"X-Org-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Org-Id"}},{"name":"x-xyle-source","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Xyle-Source"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AnalyzeRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AnalyzeResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/analyze/snippets":{"post":{"tags":["analyze"],"summary":"Snippet Check","description":"Title, meta description, Open Graph, canonical, robots and H1 for up to 20\npublic URLs — any site, no crawl, no JavaScript — with lengths, per-URL checks\nand cross-URL duplicates. For competitor snippet research and for verifying a\nfix landed. SSRF-safe: public hosts only, pinned DNS, hop-by-hop redirects.","operationId":"snippet_check_analyze_snippets_post","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"email","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SnippetCheckRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Snippet Check Analyze Snippets Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/analyze/robots":{"post":{"tags":["analyze"],"summary":"Robots Check Ep","description":"robots.txt as a crawler reads it: raw file, parsed groups, Sitemap lines,\nand an allowed/blocked matrix for search and AI bots (Googlebot, Bingbot,\nGPTBot, OAI-SearchBot, PerplexityBot, ClaudeBot, Claude-SearchBot,\nGoogle-Extended, CCBot …) over the homepage plus any URLs given. Also reports\n/llms.txt. Any public domain, no crawl.","operationId":"robots_check_ep_analyze_robots_post","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"email","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SiteFetchRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Robots Check Ep Analyze Robots Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/analyze/sitemap":{"post":{"tags":["analyze"],"summary":"Sitemap Check Ep","description":"Every sitemap the site declares or serves at the standard paths, index\nfiles followed, each URL with its lastmod, a lastmod staleness summary and a\nspot-check of URL statuses.","operationId":"sitemap_check_ep_analyze_sitemap_post","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"email","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SiteFetchRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Sitemap Check Ep Analyze Sitemap Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/analyze/redirects":{"post":{"tags":["analyze"],"summary":"Redirect Check Ep","description":"http/https × www/non-www × / and /index.html (eight variants) plus slash and\ncase variants of an inner path: hop chain, status codes, final URL, and a\npass/fail on 'one https URL in one permanent hop'.","operationId":"redirect_check_ep_analyze_redirects_post","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"email","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SiteFetchRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Redirect Check Ep Analyze Redirects Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/analyze/cwv":{"post":{"tags":["analyze"],"summary":"Cwv Check Ep","description":"One URL's Core Web Vitals from PageSpeed Insights with the server's key, so\nthe free tool does not depend on Google's shared anonymous quota. Google\nfetches the page, not us, so there is no SSRF surface beyond URL validation.","operationId":"cwv_check_ep_analyze_cwv_post","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"email","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CwvCheckRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Cwv Check Ep Analyze Cwv Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/assist/balance":{"get":{"tags":["assist"],"summary":"Assist Balance","description":"Current Assist credit balance (pay-gated; no auto-seed — coupons/top-ups only).","operationId":"assist_balance_assist_balance_get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"email","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Assist Balance Assist Balance Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/assist/redeem":{"post":{"tags":["assist"],"summary":"Assist Redeem","description":"Redeem a credit coupon (e.g. the workshop code). Once per user per code.","operationId":"assist_redeem_assist_redeem_post","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"email","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RedeemBody"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Assist Redeem Assist Redeem Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/assist/classify-keywords":{"post":{"tags":["assist"],"summary":"Assist Classify Keywords","description":"Server-side keyword classification (intent / funnel / cluster) on Flash-Lite —\nthe agent no longer spends its own tokens reasoning over keyword lists.","operationId":"assist_classify_keywords_assist_classify_keywords_post","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"email","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ClassifyBody"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Assist Classify Keywords Assist Classify Keywords Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/assist/page-digest":{"post":{"tags":["assist"],"summary":"Assist Page Digest","description":"Compact, structured digest of a WordPress page — sections (with a semantic\ntype + one-line summary), the flat editable-element skeleton, and SEO gaps —\nso the agent understands a page WITHOUT reading its raw HTML (the costliest\nop). Edit handles here feed straight into assist_edit_section / wp_patch_page.","operationId":"assist_page_digest_assist_page_digest_post","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"email","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PageDigestBody"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Assist Page Digest Assist Page Digest Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/assist/edit-section":{"post":{"tags":["assist"],"summary":"Assist Edit Section","description":"Edit one page element BY INTENT: XeoRank reads the element's current text\nserver-side, rewrites it on Flash-Lite per your instruction, and applies it\nthrough the validated patch path (round-trip checked, write-gated). The agent\nnever handles raw HTML. Use dry_run=true to preview the change first.","operationId":"assist_edit_section_assist_edit_section_post","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"email","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EditSectionBody"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Assist Edit Section Assist Edit Section Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/assist/design-lint":{"post":{"tags":["assist"],"summary":"Assist Design Lint","description":"Pre-apply structural lint of a WordPress page (server-side, deterministic —\nno browser): flags Pro-widget use, unsupported deep nesting, empty bands, and\nsection bloat, so the agent catches issues before writing. Visual checks\n(contrast, mobile overflow, stretched columns) are the separate rendering tier.","operationId":"assist_design_lint_assist_design_lint_post","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"email","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DesignLintBody"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Assist Design Lint Assist Design Lint Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/assist/security-audit":{"post":{"tags":["assist"],"summary":"Assist Security Audit","description":"Read-only WordPress security posture audit of a connected site: core-version\ncurrency, plugin/theme inventory, user-enumeration exposure, XML-RPC, version-\nleak files, missing security headers, and directory listing. Returns a graded,\nseverity-ranked report with fixes. No wp-cli/SSH needed (works on plugin sites);\nno page changes. Known-plugin-CVE cross-reference is planned.","operationId":"assist_security_audit_assist_security_audit_post","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"email","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SecurityAuditBody"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Assist Security Audit Assist Security Audit Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/assist/transform-page":{"post":{"tags":["assist"],"summary":"Assist Transform Page","description":"Intelligently transform ALL of a page's text by a high-level instruction\n(e.g. 'respecialize this urology page to pulmonology') — handling the long tail\nof related terms a literal find/replace can't (conditions, procedures, patient\nlanguage). Reads every text field server-side, Flash-Lite rewrites them (HTML\npreserved), applies via the validated patch path. dry_run=true previews samples\n+ estimated credits for FREE; only a real apply debits credits.","operationId":"assist_transform_page_assist_transform_page_post","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"email","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TransformPageBody"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Assist Transform Page Assist Transform Page Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/assist/savings":{"get":{"tags":["assist"],"summary":"Assist Savings","description":"Report the user's cumulative Assist savings: how many of their OWN agent\ntokens the offload displaced, the credits it cost, and the large-model spend\navoided (estimated). Great for showing ROI after a session.","operationId":"assist_savings_assist_savings_get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"email","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Assist Savings Assist Savings Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/assist/widget-keys":{"post":{"tags":["assist"],"summary":"Assist Widget Keys","description":"Resolve a styling/content intent to that widget's REAL Elementor control keys.\n\nThe alternative is pulling the widget's whole control registry into the\nagent's context — the largest single payload our tools can produce — to learn\ntwo or three names. Here the registry goes to Flash-Lite instead, and only\nthe answer comes back. Every returned key is checked against the registry\nbefore it leaves, so this cannot degrade into a smaller model guessing.","operationId":"assist_widget_keys_assist_widget_keys_post","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"email","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WidgetKeysBody"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Assist Widget Keys Assist Widget Keys Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/assist/writing-fix":{"post":{"tags":["assist"],"summary":"Assist Writing Fix","description":"Propose the SMALLEST patches that resolve the writing findings, using the\neditor model (Sonnet-class, not the lite tier). Returns find/replace pairs\nkeyed to findings — it never rewrites the document and never applies\nanything; the caller (the user's Claude) applies what the user accepts and\nre-runs review_writing. Numbers are never invented: an unsupported claim is\nqualified, marked [SOURCE NEEDED] or removed. Costs WRITING_FIX_COST credits\nper call; a detector-only pass (no findings) costs nothing.","operationId":"assist_writing_fix_assist_writing_fix_post","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"email","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WritingFixBody"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Assist Writing Fix Assist Writing Fix Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/assist/draft":{"post":{"tags":["assist"],"summary":"Assist Draft","description":"LAST-RESORT WRITER. Drafts the brief's piece from the author's own\nmaterial — interview answers or their rough draft — inside the brand's voice\nprofile, then loops review → revise until there are no blockers, no cadence\nfindings and the voice is in range (or max_passes). Refuses when the brief\nhas no author material: without it this would be the slop machine the\nWriting Agent exists to stop. Pro + WRITING_CREDITS_PER_1000_WORDS credits per 1,000 words; appends a disclosure\nline. The user's Claude stays the default writer; this is for when a draft\nhas failed twice or the user asks.","operationId":"assist_draft_assist_draft_post","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"email","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DraftBody"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Assist Draft Assist Draft Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/rewrite":{"post":{"tags":["rewrite"],"summary":"Rewrite Page","operationId":"rewrite_page_rewrite_post","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"email","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"}},{"name":"X-Org-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Org-Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RewriteRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RewriteResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/generate-schema":{"post":{"tags":["schema"],"summary":"Generate Schema","operationId":"generate_schema_generate_schema_post","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"email","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"}},{"name":"X-Org-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Org-Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SchemaGenRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SchemaGenResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/crawl":{"post":{"tags":["crawl"],"summary":"Crawl Page","operationId":"crawl_page_crawl_post","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"email","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"}},{"name":"X-Org-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Org-Id"}},{"name":"x-xyle-source","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Xyle-Source"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CrawlRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CrawlResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/sites":{"get":{"tags":["admin"],"summary":"Get User Sites","operationId":"get_user_sites_admin_sites_get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"email","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/SiteOut"},"title":"Response Get User Sites Admin Sites Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/gsc/access":{"get":{"tags":["admin"],"summary":"Get Search Console Access","operationId":"get_search_console_access_admin_gsc_access_get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"site","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Site"}},{"name":"email","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SearchConsoleAccessResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/gsc/properties":{"get":{"tags":["admin"],"summary":"Gsc Properties","description":"List the Search Console properties this user's Google account can see.\n\nExists to answer the question a failed sync raises and never answered: the\nsync says \"devfi.com not found in your Search Console\", and the user has no\nway to tell whether it is spelled differently there (sc-domain:x.com vs\nhttps://x.com/), lives in another Google account, or was never added. Those\nneed three different actions; without this list every one of them looked\nlike the same dead end.","operationId":"gsc_properties_admin_gsc_properties_get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"email","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Gsc Properties Admin Gsc Properties Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/dataforseo/probe":{"get":{"tags":["admin"],"summary":"Dataforseo Probe","description":"One live SERP call with DataForSEO's documented payload, reported raw.\n\nDiagnostic only. Live SERP tasks have been rejected account-wide with\n\"40502 POST Data Is Empty\" while our logged payload was fully populated, and\nno tracked keyword on any brand has ever received a position. This isolates\nthe cause: if the documented minimal payload succeeds, our extra fields\n(target, stop_crawl_on_match) are to blame; if it fails identically, the\nendpoint is not available to this account. Costs one request.","operationId":"dataforseo_probe_admin_dataforseo_probe_get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"keyword","in":"query","required":false,"schema":{"type":"string","default":"albert einstein","title":"Keyword"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Dataforseo Probe Admin Dataforseo Probe Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/dataforseo/serp-competitors-probe":{"get":{"tags":["admin"],"summary":"Dataforseo Serp Competitors Probe","description":"Competitor ranks across a brand's TRACKED keywords — one request.\n\ncompetitors_domain answers \"who else ranks for what you already rank for\",\nwhich is noise for a small site. This asks the useful question instead: for\nthe keywords this brand TARGETS, who is ranking, and where.","operationId":"dataforseo_serp_competitors_probe_admin_dataforseo_serp_competitors_probe_get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"site_id","in":"query","required":true,"schema":{"type":"string","title":"Site Id"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":15,"title":"Limit"}},{"name":"by_keyword","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"By Keyword"}},{"name":"top","in":"query","required":false,"schema":{"type":"integer","default":10,"title":"Top"}},{"name":"email","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Dataforseo Serp Competitors Probe Admin Dataforseo Serp Competitors Probe Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/dataforseo/competitor-probe":{"get":{"tags":["admin"],"summary":"Dataforseo Competitor Probe","description":"Competitors + their keyword overlap, from Labs, in one call each.\n\nCompetitor discovery harvests SERPs one keyword at a time, so when live SERP\nwas rejected account-wide it produced nothing — leaving cogniswitch.ai with\nzero competitors and an onboarding report with nothing in it. Labs answers\nthe same question directly and cheaply.","operationId":"dataforseo_competitor_probe_admin_dataforseo_competitor_probe_get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"domain","in":"query","required":true,"schema":{"type":"string","title":"Domain"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":10,"title":"Limit"}},{"name":"location_code","in":"query","required":false,"schema":{"type":"integer","default":2840,"title":"Location Code"}},{"name":"email","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Dataforseo Competitor Probe Admin Dataforseo Competitor Probe Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/dataforseo/ranked-probe":{"get":{"tags":["admin"],"summary":"Dataforseo Ranked Probe","description":"Can we get rank from ONE Labs call instead of N live SERP calls?\n\ncheck_rankings currently issues one live SERP request per tracked keyword —\n53 requests, ~$0.82, 7.5 minutes, and a rate rejection if paced too fast.\nfetch_domain_ranked_keywords asks the Labs endpoint for everything a domain\nranks for in a single request at ~$0.05. It has existed in the codebase with\nZERO callers.\n\nThis checks whether that path actually returns positions for this account.\nIf it does, it replaces the fan-out entirely and takes the DB-session\nproblem with it, since the call finishes in seconds.","operationId":"dataforseo_ranked_probe_admin_dataforseo_ranked_probe_get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"domain","in":"query","required":true,"schema":{"type":"string","title":"Domain"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":100,"title":"Limit"}},{"name":"location_code","in":"query","required":false,"schema":{"type":"integer","default":2840,"title":"Location Code"}},{"name":"email","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Dataforseo Ranked Probe Admin Dataforseo Ranked Probe Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/sync":{"post":{"tags":["admin"],"summary":"Sync Queries","operationId":"sync_queries_admin_sync_post","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"site","in":"query","required":true,"schema":{"type":"string","title":"Site"}},{"name":"site_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Site Id"}},{"name":"email","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"}},{"name":"stub","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Stub"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SyncResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/gsc/auth-url":{"get":{"tags":["admin"],"summary":"Get Gsc Oauth Url","description":"Return the Google OAuth authorization URL for Search Console.\n\nCLI flow: `cli_port` is carried in state so the callback redirects back to the CLI.\nWeb flow: `origin` (frontend host) + `site_id` + the logged-in `user_email` are\nsigned into state so the callback returns the user to the right site AND attaches\nthe GSC token to THEIR account — even for email/OTP users whose Google (used for the\nGSC consent) isn't their login. `user_email` must be HMAC-signed with AGENT_API_KEY\n(only the frontend, which holds that key, can vouch for a logged-in identity).","operationId":"get_gsc_oauth_url_admin_gsc_auth_url_get","parameters":[{"name":"cli_port","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Cli Port"}},{"name":"origin","in":"query","required":false,"schema":{"type":"string","default":"","title":"Origin"}},{"name":"site_id","in":"query","required":false,"schema":{"type":"string","default":"","title":"Site Id"}},{"name":"return_to","in":"query","required":false,"schema":{"type":"string","default":"","title":"Return To"}},{"name":"user_email","in":"query","required":false,"schema":{"type":"string","default":"","title":"User Email"}},{"name":"user_sig","in":"query","required":false,"schema":{"type":"string","default":"","title":"User Sig"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OAuthURLResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/gsc/callback":{"get":{"tags":["admin"],"summary":"Gsc Oauth Callback","description":"Exchange OAuth authorization code for tokens.\n\nIf state contains a cli_port, also fetches the user profile,\ncreates/updates the user, issues a personal API key, and redirects\nto the local CLI server with the key and user info.","operationId":"gsc_oauth_callback_admin_gsc_callback_get","parameters":[{"name":"code","in":"query","required":true,"schema":{"type":"string","title":"Code"}},{"name":"state","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"State"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/ga4/audit-domain-mismatches":{"get":{"tags":["admin"],"summary":"Ga4 Audit Domain Mismatches","description":"Sweep active GA4 connections for the 2026-09-12 incident class: a\nconnection whose data stream's own GA4 \"Default URI\" doesn't match the\nbrand it's attached to (found live on a real account — see\napi/services/google_analytics.ga4_stream_domain_mismatch).\n\nExisting connections predate that guardrail and were never re-checked —\nthis is the one-time backfill/detection sweep, not something that runs\nautomatically. Read-only by default; pass apply=true to persist findings\nonto each GaConnection row so ga_status starts warning on them too.","operationId":"ga4_audit_domain_mismatches_admin_ga4_audit_domain_mismatches_get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"apply","in":"query","required":false,"schema":{"type":"boolean","description":"If true, persist stream_default_uri/domain_mismatch on each checked connection. Default is a dry-run report only.","default":false,"title":"Apply"},"description":"If true, persist stream_default_uri/domain_mismatch on each checked connection. Default is a dry-run report only."},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"default":200,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Ga4 Audit Domain Mismatches Admin Ga4 Audit Domain Mismatches Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/rank-checks/run":{"post":{"tags":["admin"],"summary":"Run Rank Checks Ep","description":"Run the due rank checks (scheduler and local runner both call this).\n\nDefaults to ``dry_run`` so a stray call costs nothing: it reports what it\nWOULD check and why it skips the rest. ``force`` ignores the cadence and\nplan gates for one named site — for a support request, not for a sweep.","operationId":"run_rank_checks_ep_admin_rank_checks_run_post","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"dry_run","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Dry Run"}},{"name":"limit_keywords","in":"query","required":false,"schema":{"type":"integer","maximum":20000,"minimum":1,"default":1000,"title":"Limit Keywords"}},{"name":"cadence_days","in":"query","required":false,"schema":{"anyOf":[{"type":"integer","maximum":90,"minimum":1},{"type":"null"}],"title":"Cadence Days"}},{"name":"site_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Site Id"}},{"name":"force","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Force"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Run Rank Checks Ep Admin Rank Checks Run Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/whatsapp/webhook":{"get":{"tags":["whatsapp-webhook"],"summary":"Verify Webhook","operationId":"verify_webhook_whatsapp_webhook_get","parameters":[{"name":"hub.mode","in":"query","required":true,"schema":{"type":"string","title":"Hub.Mode"}},{"name":"hub.verify_token","in":"query","required":true,"schema":{"type":"string","title":"Hub.Verify Token"}},{"name":"hub.challenge","in":"query","required":true,"schema":{"type":"string","title":"Hub.Challenge"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"string","title":"Response Verify Webhook Whatsapp Webhook Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["whatsapp-webhook"],"summary":"Receive Webhook","operationId":"receive_webhook_whatsapp_webhook_post","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Payload"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WhatsAppWebhookProcessResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/whatsapp/send":{"post":{"tags":["whatsapp-send"],"summary":"Send Message","operationId":"send_message_whatsapp_send_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WhatsAppSendRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WhatsAppSendResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"APIKeyHeader":[]}]}},"/whatsapp/broadcast":{"post":{"tags":["whatsapp-broadcast"],"summary":"Create Broadcast","operationId":"create_broadcast_whatsapp_broadcast_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WhatsAppBroadcastRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WhatsAppBroadcastResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"APIKeyHeader":[]}]}},"/whatsapp/conversations":{"get":{"tags":["whatsapp-conversations"],"summary":"List Conversations","operationId":"list_conversations_whatsapp_conversations_get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"tenant_id","in":"query","required":true,"schema":{"type":"string","minLength":2,"title":"Tenant Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WhatsAppConversationListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/whatsapp/contacts":{"get":{"tags":["whatsapp-contacts"],"summary":"List Contacts","operationId":"list_contacts_whatsapp_contacts_get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"tenant_id","in":"query","required":true,"schema":{"type":"string","minLength":2,"title":"Tenant Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WhatsAppContactListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/whatsapp/templates":{"get":{"tags":["whatsapp-templates"],"summary":"List Templates","operationId":"list_templates_whatsapp_templates_get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"tenant_id","in":"query","required":true,"schema":{"type":"string","minLength":2,"title":"Tenant Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WhatsAppTemplateListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/whatsapp/templates/render":{"post":{"tags":["whatsapp-templates"],"summary":"Render Template","operationId":"render_template_whatsapp_templates_render_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WhatsAppTemplateRenderRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WhatsAppRenderedTemplate"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"APIKeyHeader":[]}]}},"/whatsapp/inbox":{"get":{"tags":["whatsapp-inbox"],"summary":"List Inbox","operationId":"list_inbox_whatsapp_inbox_get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"tenant_id","in":"query","required":true,"schema":{"type":"string","minLength":2,"title":"Tenant Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WhatsAppInboxResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/whatsapp":{"get":{"tags":["admin-whatsapp"],"summary":"Get Whatsapp Admin Config","operationId":"get_whatsapp_admin_config_admin_whatsapp_get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"tenant_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tenant Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WhatsAppAdminConfigResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/users/me/assistant-status":{"get":{"tags":["api-keys"],"summary":"Get Assistant Status","description":"Report whether this account has an active MCP assistant authorization.","operationId":"get_assistant_status_users_me_assistant_status_get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"email","in":"query","required":true,"schema":{"type":"string","title":"Email"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AssistantStatusOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/users/me/api-keys":{"get":{"tags":["api-keys"],"summary":"List Keys","description":"List the caller's API keys, newest first.\n\n``limit`` was sent by the MCP tool and ignored here, so every call returned\nthe account's entire key history — 59 rows on a developer account that has\nbeen minting short-lived keys.","operationId":"list_keys_users_me_api_keys_get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"email","in":"query","required":true,"schema":{"type":"string","title":"Email"}},{"name":"limit","in":"query","required":false,"schema":{"anyOf":[{"type":"integer","maximum":500,"minimum":1},{"type":"null"}],"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ApiKeyOut"},"title":"Response List Keys Users Me Api Keys Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["api-keys"],"summary":"Create Key","operationId":"create_key_users_me_api_keys_post","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"email","in":"query","required":true,"schema":{"type":"string","title":"Email"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateKeyRequest"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiKeyCreated"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/users/me/api-keys/{key_id}":{"delete":{"tags":["api-keys"],"summary":"Revoke Key","operationId":"revoke_key_users_me_api_keys__key_id__delete","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"key_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Key Id"}},{"name":"email","in":"query","required":true,"schema":{"type":"string","title":"Email"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/users/me/plan":{"get":{"tags":["api-keys"],"summary":"Get Plan","description":"Return the effective plan + caps for the user's **active org**.\n\nThe plan is the org's (its owner's) — pass ``org_id`` for the active org, else the\ncaller's default org. This picks up the internal-domain agency override + org\nmembership, so a member of an agency org gets the agency plan.\n\nAuth: personal API key → user from key; or shared AGENT_API_KEY + ?email=.","operationId":"get_plan_users_me_plan_get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"email","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"}},{"name":"org_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Org Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Plan Users Me Plan Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/users/me/usage":{"get":{"tags":["api-keys"],"summary":"Get Usage","description":"Return current-period usage per metric (used vs cap).","operationId":"get_usage_users_me_usage_get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"email","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"}},{"name":"org_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Org Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Usage Users Me Usage Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/users/me/usage/consume":{"post":{"tags":["api-keys"],"summary":"Consume Usage","description":"Atomically reserve one legacy AI-visibility scan for the active org.","operationId":"consume_usage_users_me_usage_consume_post","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"email","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"}},{"name":"org_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Org Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConsumeUsageRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Consume Usage Users Me Usage Consume Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api-keys/validate":{"get":{"tags":["api-keys"],"summary":"Validate Key","description":"Validate an API key and return the associated user identity.\n\nUsed by the MCP server to authenticate incoming requests that carry\na user's personal API key in the Authorization header.","operationId":"validate_key_api_keys_validate_get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"api_key","in":"query","required":true,"schema":{"type":"string","description":"The raw API key to validate (xyle_...)","title":"Api Key"},"description":"The raw API key to validate (xyle_...)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidateResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/snapshots":{"get":{"tags":["snapshots"],"summary":"List Snapshots Endpoint","operationId":"list_snapshots_endpoint_snapshots_get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"url","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Url"}},{"name":"site_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Site Id"}},{"name":"site_domain","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Site Domain"}},{"name":"email","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":20,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/SnapshotSummary"},"title":"Response List Snapshots Endpoint Snapshots Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/snapshots/trends":{"get":{"tags":["snapshots"],"summary":"Trends Endpoint","operationId":"trends_endpoint_snapshots_trends_get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"url","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Url"}},{"name":"site_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Site Id"}},{"name":"site_domain","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Site Domain"}},{"name":"email","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"}},{"name":"days","in":"query","required":false,"schema":{"type":"integer","maximum":365,"minimum":1,"default":90,"title":"Days"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TrendsResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/snapshots/diff":{"get":{"tags":["snapshots"],"summary":"Diff Endpoint","operationId":"diff_endpoint_snapshots_diff_get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"before","in":"query","required":true,"schema":{"type":"string","format":"uuid","title":"Before"}},{"name":"after","in":"query","required":true,"schema":{"type":"string","format":"uuid","title":"After"}},{"name":"email","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SnapshotDiff"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/snapshots/{snapshot_id}":{"get":{"tags":["snapshots"],"summary":"Get Snapshot Endpoint","operationId":"get_snapshot_endpoint_snapshots__snapshot_id__get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"snapshot_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Snapshot Id"}},{"name":"email","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SnapshotDetail"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/seed/instructions":{"get":{"tags":["seed"],"summary":"Get Seed Instructions","operationId":"get_seed_instructions_seed_instructions_get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"tool","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Tool name (e.g. claude-code, cursor)","title":"Tool"},"description":"Tool name (e.g. claude-code, cursor)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SeedInstructionsResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/kb/ask":{"post":{"tags":["knowledge"],"summary":"Ask Knowledge Base","description":"Expert Q&A — returns a grounded answer from Xyle's internal knowledge.","operationId":"ask_knowledge_base_kb_ask_post","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"email","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"}},{"name":"X-Org-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Org-Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KBQueryRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/KBAnswerResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/kb/stats":{"get":{"tags":["knowledge"],"summary":"Knowledge Base Stats","description":"Return knowledge base indexing statistics.","operationId":"knowledge_base_stats_kb_stats_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Knowledge Base Stats Kb Stats Get"}}}}},"security":[{"APIKeyHeader":[]}]}},"/kb/index":{"post":{"tags":["knowledge"],"summary":"Index Knowledge Base Endpoint","description":"Trigger knowledge base indexing (admin).","operationId":"index_knowledge_base_endpoint_kb_index_post","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"email","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/KBIndexResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/site-crawl":{"post":{"tags":["site-crawl"],"summary":"Start Crawl","description":"Create a queued crawl_jobs row. Execution is triggered separately\nvia Trigger.dev calling POST /site-crawl/{job_id}/_run, OR inline\nvia BackgroundTasks when ?immediate=1 is set.","operationId":"start_crawl_site_crawl_post","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"immediate","in":"query","required":false,"schema":{"type":"boolean","description":"If true, schedule a FastAPI BackgroundTask to run the crawl in-process. Used by the CLI (long-lived polling keeps the instance warm). The web UI leaves this false and triggers a Trigger.dev task instead.","default":false,"title":"Immediate"},"description":"If true, schedule a FastAPI BackgroundTask to run the crawl in-process. Used by the CLI (long-lived polling keeps the instance warm). The web UI leaves this false and triggers a Trigger.dev task instead."},{"name":"email","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"}},{"name":"X-Org-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Org-Id"}},{"name":"x-xyle-source","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Xyle-Source"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StartSiteCrawlRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CrawlJobStatus"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["site-crawl"],"summary":"List Crawl Jobs","operationId":"list_crawl_jobs_site_crawl_get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":25,"title":"Limit"}},{"name":"site_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Site Id"}},{"name":"email","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CrawlJobListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/site-crawl/{job_id}/continue":{"post":{"tags":["site-crawl"],"summary":"Continue Crawl Job","description":"Extend a page-limited crawl and resume its persisted priority frontier.","operationId":"continue_crawl_job_site_crawl__job_id__continue_post","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","title":"Job Id"}},{"name":"email","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"}},{"name":"X-Org-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Org-Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ContinueSiteCrawlRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CrawlJobStatus"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/site-crawl/{job_id}/_fail":{"post":{"tags":["site-crawl"],"summary":"Fail Undispatched Crawl","description":"Mark a job failed when the external worker could not be dispatched.","operationId":"fail_undispatched_crawl_site_crawl__job_id___fail_post","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","title":"Job Id"}},{"name":"reason","in":"query","required":false,"schema":{"type":"string","default":"dispatch_failed","title":"Reason"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Fail Undispatched Crawl Site Crawl  Job Id   Fail Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/site-crawl/{job_id}/_run":{"post":{"tags":["site-crawl"],"summary":"Run Crawl Inline","description":"Synchronously execute a queued crawl. Called by the Trigger.dev\n`site-crawl` task. Auth: agent key only (no user binding here — the\njob row already has user_id and isolation is enforced on read).","operationId":"run_crawl_inline_site_crawl__job_id___run_post","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","title":"Job Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Run Crawl Inline Site Crawl  Job Id   Run Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/site-crawl/{job_id}":{"get":{"tags":["site-crawl"],"summary":"Crawl Status","operationId":"crawl_status_site_crawl__job_id__get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","title":"Job Id"}},{"name":"email","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CrawlJobStatus"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/site-crawl/{job_id}/pages":{"get":{"tags":["site-crawl"],"summary":"Crawl Pages","operationId":"crawl_pages_site_crawl__job_id__pages_get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","title":"Job Id"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":500,"minimum":1,"default":50,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Offset"}},{"name":"filter","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Filter"}},{"name":"email","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CrawlPagesResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/site-crawl/{job_id}/overview":{"get":{"tags":["site-crawl"],"summary":"Crawl Overview","operationId":"crawl_overview_site_crawl__job_id__overview_get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","title":"Job Id"}},{"name":"email","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Crawl Overview Site Crawl  Job Id  Overview Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/site-crawl/{job_id}/issues":{"get":{"tags":["site-crawl"],"summary":"Crawl Issues","operationId":"crawl_issues_site_crawl__job_id__issues_get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","title":"Job Id"}},{"name":"severity","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Severity"}},{"name":"category","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Category"}},{"name":"group","in":"query","required":false,"schema":{"anyOf":[{"type":"string","maxLength":128},{"type":"null"}],"title":"Group"}},{"name":"query","in":"query","required":false,"schema":{"anyOf":[{"type":"string","maxLength":500},{"type":"null"}],"title":"Query"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"default":200,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Offset"}},{"name":"email","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CrawlIssuesResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/site-crawl/{job_id}/issue-report":{"get":{"tags":["site-crawl"],"summary":"Issue Report","operationId":"issue_report_site_crawl__job_id__issue_report_get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","title":"Job Id"}},{"name":"email","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Issue Report Site Crawl  Job Id  Issue Report Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/site-crawl/{job_id}/graph":{"get":{"tags":["site-crawl"],"summary":"Crawl Graph","operationId":"crawl_graph_site_crawl__job_id__graph_get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","title":"Job Id"}},{"name":"email","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CrawlGraphResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/site-crawl/{job_id}/cancel":{"post":{"tags":["site-crawl"],"summary":"Cancel Crawl Job","operationId":"cancel_crawl_job_site_crawl__job_id__cancel_post","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","title":"Job Id"}},{"name":"email","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CrawlJobStatus"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/sites":{"get":{"tags":["sites"],"summary":"List Sites","description":"List the brands in the caller's active org.\n\nThe active org comes from the ``X-Org-Id`` header (web) or the ``org_id`` query\nparam (MCP/CLI), defaulting to the user's own org. Viewing your default org also\nsurfaces any legacy untagged brands (back-compat); viewing a teammate's org shows\nonly that org's brands.\n\n``limit`` keeps the newest N brands. The MCP tool has declared and sent it\nsince it was written and this endpoint ignored it, so an agent asking for\ntwo brands received the whole list — on the single most-called tool in the\nproduct, on the first call of almost every session. It is applied before the\nWordPress/Framer/Search-Console decoration below so the bulk lookups only\nrun for rows that will be returned. Default stays None (everything), because\nthe dashboard lists all brands and must not start truncating.","operationId":"list_sites_sites_get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"email","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"}},{"name":"org_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Org Id"}},{"name":"limit","in":"query","required":false,"schema":{"anyOf":[{"type":"integer","maximum":500,"minimum":1},{"type":"null"}],"title":"Limit"}},{"name":"X-Org-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Org-Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/SiteOut"},"title":"Response List Sites Sites Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["sites"],"summary":"Create Site","description":"Create (or return existing) site in the caller's ACTIVE org.\n\nThe active org comes from ``X-Org-Id`` (web) / ``org_id`` (MCP-CLI), same as\n``list_sites`` — membership-validated, falling back to the default org. Brands\ncreated while a team org is selected must land in that org, not the personal one.","operationId":"create_site_sites_post","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"email","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"}},{"name":"org_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Org Id"}},{"name":"X-Org-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Org-Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateSiteRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SiteOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/sites/preflight":{"post":{"tags":["sites"],"summary":"Preflight Brand Creation","description":"Check duplicate and plan constraints without scraping or invoking AI.","operationId":"preflight_brand_creation_sites_preflight_post","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"email","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"}},{"name":"org_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Org Id"}},{"name":"X-Org-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Org-Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnderstandBrandRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Preflight Brand Creation Sites Preflight Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/sites/understand":{"post":{"tags":["sites"],"summary":"Understand Brand","description":"Scrape the domain's homepage and infer a brand profile for confirmation\n(industry / USP / ICP / target audience / summary). Best-effort; never raises\non inference failure (returns empty fields).","operationId":"understand_brand_sites_understand_post","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"email","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"}},{"name":"org_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Org Id"}},{"name":"X-Org-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Org-Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnderstandBrandRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Understand Brand Sites Understand Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/sites/brand-discuss":{"post":{"tags":["sites"],"summary":"Brand Discuss","description":"One conversational turn refining the brand profile (reply + refined profile).","operationId":"brand_discuss_sites_brand_discuss_post","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"email","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BrandDiscussRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Brand Discuss Sites Brand Discuss Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/sites/{site_id}/intelligence":{"get":{"tags":["sites"],"summary":"Get Intelligence","description":"Return the brand's intelligence; lazily farms logo/favicon/summary if missing.","operationId":"get_intelligence_sites__site_id__intelligence_get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"site_id","in":"path","required":true,"schema":{"type":"string","title":"Site Id"}},{"name":"email","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Intelligence Sites  Site Id  Intelligence Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["sites"],"summary":"Save Intelligence","description":"Persist the edited brand profile + summary to the Site.","operationId":"save_intelligence_sites__site_id__intelligence_post","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"site_id","in":"path","required":true,"schema":{"type":"string","title":"Site Id"}},{"name":"email","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/IntelligenceSaveRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Save Intelligence Sites  Site Id  Intelligence Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/sites/{site_id}/intelligence/discuss":{"post":{"tags":["sites"],"summary":"Intelligence Discuss","description":"One refine-chat turn (reply + refined profile). Frontend saves on demand.","operationId":"intelligence_discuss_sites__site_id__intelligence_discuss_post","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"site_id","in":"path","required":true,"schema":{"type":"string","title":"Site Id"}},{"name":"email","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BrandDiscussRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Intelligence Discuss Sites  Site Id  Intelligence Discuss Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/sites/{site_id}/intelligence/refresh":{"post":{"tags":["sites"],"summary":"Intelligence Refresh","description":"Re-farm assets + re-infer the profile (force overwrite).","operationId":"intelligence_refresh_sites__site_id__intelligence_refresh_post","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"site_id","in":"path","required":true,"schema":{"type":"string","title":"Site Id"}},{"name":"email","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Intelligence Refresh Sites  Site Id  Intelligence Refresh Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/sites/{site_id}/brand-guidelines":{"get":{"tags":["sites"],"summary":"Get Brand Guidelines","description":"Return the brand's stored Brand Kit + the Elementor coverage it computes,\nplus the linked WordPress site (if any) so the UI can offer 'Sync to Elementor'.\nThe kit is brand-level — it displays as guidelines whether or not WP is connected.","operationId":"get_brand_guidelines_sites__site_id__brand_guidelines_get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"site_id","in":"path","required":true,"schema":{"type":"string","title":"Site Id"}},{"name":"email","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Brand Guidelines Sites  Site Id  Brand Guidelines Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["sites"],"summary":"Save Brand Guidelines","description":"Store/replace the brand's Brand Kit (guidelines) on the Site. This does NOT\ntouch Elementor — applying to a live site goes through wp_set_brand_kit (which\ncarries the confirm + established-site double-ask). Authoring here is safe.","operationId":"save_brand_guidelines_sites__site_id__brand_guidelines_post","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"site_id","in":"path","required":true,"schema":{"type":"string","title":"Site Id"}},{"name":"email","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BrandGuidelinesSaveRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Save Brand Guidelines Sites  Site Id  Brand Guidelines Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/sites/lookup/by-domain":{"get":{"tags":["sites"],"summary":"Find Site By Domain","description":"Find the brand(s) for a domain across EVERY workspace the caller belongs to.\n\nlist_sites is scoped to one workspace, so an agent with five workspaces had\nto list each in turn to find navyaai.com (gap review, 2026-10-05). This\nanswers in one call, says which workspace each match lives in, and warns\nwhen the same brand exists in more than one.","operationId":"find_site_by_domain_sites_lookup_by_domain_get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"domain","in":"query","required":true,"schema":{"type":"string","minLength":3,"maxLength":253,"title":"Domain"}},{"name":"email","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Find Site By Domain Sites Lookup By Domain Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/sites/{site_id}":{"get":{"tags":["sites"],"summary":"Get Site Overview","operationId":"get_site_overview_sites__site_id__get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"site_id","in":"path","required":true,"schema":{"type":"string","title":"Site Id"}},{"name":"email","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SiteOverviewOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["sites"],"summary":"Delete Site Ep","description":"Delete a brand and all its data (pages, queries, keywords, connections\n— DB cascades). Owner-only. This is what the MCP delete_site tool calls;\nthe route was previously missing (405).","operationId":"delete_site_ep_sites__site_id__delete","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"site_id","in":"path","required":true,"schema":{"type":"string","title":"Site Id"}},{"name":"email","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Delete Site Ep Sites  Site Id  Delete"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/sites/{site_id}/competitors":{"get":{"tags":["sites"],"summary":"List Site Competitors Ep","operationId":"list_site_competitors_ep_sites__site_id__competitors_get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"site_id","in":"path","required":true,"schema":{"type":"string","title":"Site Id"}},{"name":"email","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SiteCompetitorsResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/sites/{site_id}/competitors/discover":{"post":{"tags":["sites"],"summary":"Discover Competitors Ep","operationId":"discover_competitors_ep_sites__site_id__competitors_discover_post","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"site_id","in":"path","required":true,"schema":{"type":"string","title":"Site Id"}},{"name":"email","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DiscoverCompetitorsRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SiteCompetitorsResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/sites/{site_id}/competitors/manual":{"post":{"tags":["sites"],"summary":"Add Manual Competitors Ep","operationId":"add_manual_competitors_ep_sites__site_id__competitors_manual_post","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"site_id","in":"path","required":true,"schema":{"type":"string","title":"Site Id"}},{"name":"email","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ManualCompetitorsRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SiteCompetitorsResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/sites/{site_id}/competitors/{link_id}":{"delete":{"tags":["sites"],"summary":"Unlink Site Competitor Ep","operationId":"unlink_site_competitor_ep_sites__site_id__competitors__link_id__delete","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"site_id","in":"path","required":true,"schema":{"type":"string","title":"Site Id"}},{"name":"link_id","in":"path","required":true,"schema":{"type":"string","title":"Link Id"}},{"name":"email","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Unlink Site Competitor Ep Sites  Site Id  Competitors  Link Id  Delete"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/sites/{site_id}/competitors/suggestions":{"get":{"tags":["sites"],"summary":"Competitor Suggestions Ep","description":"Return cached organic competitor suggestions, refreshing at most daily.","operationId":"competitor_suggestions_ep_sites__site_id__competitors_suggestions_get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"site_id","in":"path","required":true,"schema":{"type":"string","title":"Site Id"}},{"name":"email","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Competitor Suggestions Ep Sites  Site Id  Competitors Suggestions Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/sites/{site_id}/adopt-redirect":{"post":{"tags":["sites"],"summary":"Adopt Redirect","description":"Point this site at the domain its own homepage redirects to, and re-crawl.\n\nThe one-click end of a dead end. A user adds the domain they own, it 301s to\ntheir canonical domain, the crawler correctly refuses to follow a redirect\noff-site, and the first crawl returns zero pages. The crawl now records where\nit was sent (`coverage.seed_redirects_to`); this applies it.\n\nThe redirect is re-verified live rather than trusted from the stored crawl —\nthe record can be hours old, and this rewrites which site we crawl.","operationId":"adopt_redirect_sites__site_id__adopt_redirect_post","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"site_id","in":"path","required":true,"schema":{"type":"string","title":"Site Id"}},{"name":"email","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Adopt Redirect Sites  Site Id  Adopt Redirect Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/sites/{site_id}/refresh":{"post":{"tags":["sites"],"summary":"Refresh Site","description":"Re-run the analysis for this site.\n\nIf ``payload.url`` is provided, that URL is analyzed (the host must\nmatch the site's registered domain). Otherwise falls back to the\nsite homepage. Reuses the existing analyze path (crawl_url +\nanalyze_page_content) so signals and stored snapshots stay\nconsistent with what ``/dashboard/analysis`` produces.","operationId":"refresh_site_sites__site_id__refresh_post","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"site_id","in":"path","required":true,"schema":{"type":"string","title":"Site Id"}},{"name":"email","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"}}],"requestBody":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/RefreshSiteRequest"},{"type":"null"}],"title":"Payload"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SiteOverviewOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/sites/{site_id}/fixes":{"get":{"tags":["sites"],"summary":"Get Site Fixes","operationId":"get_site_fixes_sites__site_id__fixes_get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"site_id","in":"path","required":true,"schema":{"type":"string","title":"Site Id"}},{"name":"email","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SiteFixesResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/sites/{site_id}/fixes/handoff":{"post":{"tags":["sites"],"summary":"Record Site Fix Handoff","operationId":"record_site_fix_handoff_sites__site_id__fixes_handoff_post","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"site_id","in":"path","required":true,"schema":{"type":"string","title":"Site Id"}},{"name":"email","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SiteFixHandoffRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SiteFixesResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/sites/{site_id}/fixes/verify":{"post":{"tags":["sites"],"summary":"Verify Site Fixes","operationId":"verify_site_fixes_sites__site_id__fixes_verify_post","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"site_id","in":"path","required":true,"schema":{"type":"string","title":"Site Id"}},{"name":"email","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SiteFixVerifyRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SiteFixVerifyResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/sites/{site_id}/gsc-scope":{"get":{"tags":["sites"],"summary":"Get Gsc Scope Status","description":"Check if user has full GSC scope for URL Inspection.","operationId":"get_gsc_scope_status_sites__site_id__gsc_scope_get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"site_id","in":"path","required":true,"schema":{"type":"string","title":"Site Id"}},{"name":"email","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GscScopeStatus"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/sites/{site_id}/inspect":{"post":{"tags":["sites"],"summary":"Inspect Single Url","description":"Inspect a single URL via Google's URL Inspection API.","operationId":"inspect_single_url_sites__site_id__inspect_post","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"site_id","in":"path","required":true,"schema":{"type":"string","title":"Site Id"}},{"name":"email","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UrlInspectionRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Inspect Single Url Sites  Site Id  Inspect Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/sites/{site_id}/inspect/batch":{"post":{"tags":["sites"],"summary":"Inspect Batch Urls","description":"Inspect up to 50 URLs in batch.","operationId":"inspect_batch_urls_sites__site_id__inspect_batch_post","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"site_id","in":"path","required":true,"schema":{"type":"string","title":"Site Id"}},{"name":"email","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BatchInspectionRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BatchInspectionResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/sites/{site_id}/inspections":{"get":{"tags":["sites"],"summary":"List Inspections","description":"List cached URL inspection results.","operationId":"list_inspections_sites__site_id__inspections_get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"site_id","in":"path","required":true,"schema":{"type":"string","title":"Site Id"}},{"name":"email","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":500,"minimum":1,"default":100,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Offset"}},{"name":"verdict","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Verdict"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UrlInspectionsResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/sites/{site_id}/search-console":{"get":{"tags":["sites"],"summary":"Get Search Console","description":"Full Search Console dashboard data.","operationId":"get_search_console_sites__site_id__search_console_get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"site_id","in":"path","required":true,"schema":{"type":"string","title":"Site Id"}},{"name":"email","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"}},{"name":"country","in":"query","required":false,"schema":{"anyOf":[{"type":"string","minLength":3,"maxLength":3},{"type":"null"}],"title":"Country"}},{"name":"start_date","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Start Date"}},{"name":"end_date","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"End Date"}},{"name":"data_state","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Data State"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GscDashboardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/sites/{site_id}/search-console/sync":{"post":{"tags":["sites"],"summary":"Sync Search Console Ep","description":"Refresh: sync queries + discover sitemap URLs + batch inspect new ones.","operationId":"sync_search_console_ep_sites__site_id__search_console_sync_post","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"site_id","in":"path","required":true,"schema":{"type":"string","title":"Site Id"}},{"name":"email","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GscDashboardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/sites/{site_id}/search-console/sitemaps":{"get":{"tags":["sites"],"summary":"List Gsc Sitemaps","description":"List GSC sitemaps.","operationId":"list_gsc_sitemaps_sites__site_id__search_console_sitemaps_get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"site_id","in":"path","required":true,"schema":{"type":"string","title":"Site Id"}},{"name":"email","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","additionalProperties":true},"title":"Response List Gsc Sitemaps Sites  Site Id  Search Console Sitemaps Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/sites/{site_id}/gsc-agent/scan":{"post":{"tags":["sites"],"summary":"Start Gsc Scan","description":"Start a GSC agent scan.","operationId":"start_gsc_scan_sites__site_id__gsc_agent_scan_post","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"site_id","in":"path","required":true,"schema":{"type":"string","title":"Site Id"}},{"name":"email","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Start Gsc Scan Sites  Site Id  Gsc Agent Scan Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/sites/{site_id}/gsc-agent/scan/{scan_id}/retrigger":{"post":{"tags":["sites"],"summary":"Retrigger Gsc Scan Endpoint","description":"Retrigger a GSC scan from a specific stage.","operationId":"retrigger_gsc_scan_endpoint_sites__site_id__gsc_agent_scan__scan_id__retrigger_post","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"site_id","in":"path","required":true,"schema":{"type":"string","title":"Site Id"}},{"name":"scan_id","in":"path","required":true,"schema":{"type":"string","title":"Scan Id"}},{"name":"email","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"}},{"name":"from_stage","in":"query","required":false,"schema":{"type":"string","default":"crawl","title":"From Stage"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Retrigger Gsc Scan Endpoint Sites  Site Id  Gsc Agent Scan  Scan Id  Retrigger Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/sites/{site_id}/gsc-agent/scans":{"get":{"tags":["sites"],"summary":"List Gsc Scans","description":"List GSC scan history.","operationId":"list_gsc_scans_sites__site_id__gsc_agent_scans_get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"site_id","in":"path","required":true,"schema":{"type":"string","title":"Site Id"}},{"name":"email","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":20,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response List Gsc Scans Sites  Site Id  Gsc Agent Scans Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/sites/{site_id}/gsc-agent/scan/{scan_id}":{"get":{"tags":["sites"],"summary":"Get Gsc Scan Detail","description":"Get a single GSC scan.","operationId":"get_gsc_scan_detail_sites__site_id__gsc_agent_scan__scan_id__get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"site_id","in":"path","required":true,"schema":{"type":"string","title":"Site Id"}},{"name":"scan_id","in":"path","required":true,"schema":{"type":"string","title":"Scan Id"}},{"name":"email","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GscScanOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/sites/{site_id}/gsc-agent/autofix":{"post":{"tags":["sites"],"summary":"Gsc Autofix","description":"Generate fixes from a scan.","operationId":"gsc_autofix_sites__site_id__gsc_agent_autofix_post","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"site_id","in":"path","required":true,"schema":{"type":"string","title":"Site Id"}},{"name":"email","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GscAutofixRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Gsc Autofix Sites  Site Id  Gsc Agent Autofix Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/sites/{site_id}/gsc-agent/changeset/{changeset_id}":{"get":{"tags":["sites"],"summary":"Get Gsc Changeset Detail","description":"Get changeset + all changes.","operationId":"get_gsc_changeset_detail_sites__site_id__gsc_agent_changeset__changeset_id__get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"site_id","in":"path","required":true,"schema":{"type":"string","title":"Site Id"}},{"name":"changeset_id","in":"path","required":true,"schema":{"type":"string","title":"Changeset Id"}},{"name":"email","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GscChangesetOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/sites/{site_id}/gsc-agent/changeset/{changeset_id}/review":{"post":{"tags":["sites"],"summary":"Review Gsc Changeset","description":"Approve/reject changes.","operationId":"review_gsc_changeset_sites__site_id__gsc_agent_changeset__changeset_id__review_post","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"site_id","in":"path","required":true,"schema":{"type":"string","title":"Site Id"}},{"name":"changeset_id","in":"path","required":true,"schema":{"type":"string","title":"Changeset Id"}},{"name":"email","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GscReviewRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Review Gsc Changeset Sites  Site Id  Gsc Agent Changeset  Changeset Id  Review Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/sites/{site_id}/gsc-agent/changeset/{changeset_id}/apply":{"post":{"tags":["sites"],"summary":"Apply Gsc Changeset Endpoint","description":"Apply approved changes.","operationId":"apply_gsc_changeset_endpoint_sites__site_id__gsc_agent_changeset__changeset_id__apply_post","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"site_id","in":"path","required":true,"schema":{"type":"string","title":"Site Id"}},{"name":"changeset_id","in":"path","required":true,"schema":{"type":"string","title":"Changeset Id"}},{"name":"email","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Apply Gsc Changeset Endpoint Sites  Site Id  Gsc Agent Changeset  Changeset Id  Apply Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/sites/{site_id}/gsc-agent/changeset/{changeset_id}/rollback":{"post":{"tags":["sites"],"summary":"Rollback Gsc Changeset Endpoint","description":"Rollback applied changes.","operationId":"rollback_gsc_changeset_endpoint_sites__site_id__gsc_agent_changeset__changeset_id__rollback_post","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"site_id","in":"path","required":true,"schema":{"type":"string","title":"Site Id"}},{"name":"changeset_id","in":"path","required":true,"schema":{"type":"string","title":"Changeset Id"}},{"name":"email","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Rollback Gsc Changeset Endpoint Sites  Site Id  Gsc Agent Changeset  Changeset Id  Rollback Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/sites/{site_id}/competitors/setup":{"post":{"tags":["sites"],"summary":"Competitor Setup Ep","description":"Save onboarding context and trigger enhanced discovery.","operationId":"competitor_setup_ep_sites__site_id__competitors_setup_post","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"site_id","in":"path","required":true,"schema":{"type":"string","title":"Site Id"}},{"name":"email","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CompetitorSetupRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SiteCompetitorsResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/sites/{site_id}/competitors/select":{"post":{"tags":["sites"],"summary":"Competitor Select Ep","description":"Mark selected competitors as tracked.","operationId":"competitor_select_ep_sites__site_id__competitors_select_post","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"site_id","in":"path","required":true,"schema":{"type":"string","title":"Site Id"}},{"name":"email","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CompetitorSelectRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Competitor Select Ep Sites  Site Id  Competitors Select Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/sites/{site_id}/competitors/dashboard":{"get":{"tags":["sites"],"summary":"Competitor Dashboard Ep","description":"Aggregated competitor dashboard data.","operationId":"competitor_dashboard_ep_sites__site_id__competitors_dashboard_get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"site_id","in":"path","required":true,"schema":{"type":"string","title":"Site Id"}},{"name":"email","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CompetitorDashboardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/sites/{site_id}/competitors/changes":{"get":{"tags":["sites"],"summary":"Competitor Changes Ep","description":"Paginated change feed.","operationId":"competitor_changes_ep_sites__site_id__competitors_changes_get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"site_id","in":"path","required":true,"schema":{"type":"string","title":"Site Id"}},{"name":"email","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"default":50,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CompetitorChangesResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/sites/{site_id}/competitors/keywords":{"get":{"tags":["sites"],"summary":"Competitor Keywords Ep","description":"Keyword overlap for a specific competitor.\n\n``competitor_id`` can be either a SiteCompetitor link id or a\nCompetitorPage id — we resolve the link id to the underlying\ncompetitor_page_id so the frontend can pass whichever it has.","operationId":"competitor_keywords_ep_sites__site_id__competitors_keywords_get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"site_id","in":"path","required":true,"schema":{"type":"string","title":"Site Id"}},{"name":"competitor_id","in":"query","required":true,"schema":{"type":"string","title":"Competitor Id"}},{"name":"email","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CompetitorKeywordsResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/sites/{site_id}/costs":{"get":{"tags":["sites"],"summary":"Get Site Costs Ep","description":"Per-brand API cost breakdown.","operationId":"get_site_costs_ep_sites__site_id__costs_get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"site_id","in":"path","required":true,"schema":{"type":"string","title":"Site Id"}},{"name":"email","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"}},{"name":"start_date","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"Start Date"}},{"name":"end_date","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"End Date"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SiteCostsResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/sites/{site_id}/tracked-keywords":{"get":{"tags":["sites"],"summary":"List Tracked Keywords Ep","description":"List all tracked keywords for a brand.","operationId":"list_tracked_keywords_ep_sites__site_id__tracked_keywords_get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"site_id","in":"path","required":true,"schema":{"type":"string","title":"Site Id"}},{"name":"email","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TrackedKeywordsListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["sites"],"summary":"Add Tracked Keywords Ep","description":"Bulk-add tracked keywords. Accepts plain strings and/or rich objects\n({keyword, intent, funnel_stage, cluster_name, notes, source}) — the agent\nsupplies the intelligence, Xyle stores it.","operationId":"add_tracked_keywords_ep_sites__site_id__tracked_keywords_post","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"site_id","in":"path","required":true,"schema":{"type":"string","title":"Site Id"}},{"name":"email","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"}},{"name":"x-xyle-source","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Xyle-Source"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AddKeywordsRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AddKeywordsResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["sites"],"summary":"Delete Tracked Keywords Ep","description":"Delete tracked keywords by id.","operationId":"delete_tracked_keywords_ep_sites__site_id__tracked_keywords_delete","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"site_id","in":"path","required":true,"schema":{"type":"string","title":"Site Id"}},{"name":"keyword_ids","in":"query","required":false,"schema":{"type":"array","items":{"type":"string"},"default":[],"title":"Keyword Ids"}},{"name":"email","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Delete Tracked Keywords Ep Sites  Site Id  Tracked Keywords Delete"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/sites/{site_id}/tracked-keywords/performance":{"get":{"tags":["sites"],"summary":"Tracked Keyword Performance Ep","description":"Report rank distribution and movement for the configured country/city scope.","operationId":"tracked_keyword_performance_ep_sites__site_id__tracked_keywords_performance_get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"site_id","in":"path","required":true,"schema":{"type":"string","title":"Site Id"}},{"name":"start_date","in":"query","required":true,"schema":{"type":"string","format":"date","title":"Start Date"}},{"name":"end_date","in":"query","required":true,"schema":{"type":"string","format":"date","title":"End Date"}},{"name":"email","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/KeywordRankingPerformanceResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/sites/{site_id}/tracked-keywords/locations":{"get":{"tags":["sites"],"summary":"Search Keyword Locations Ep","description":"Search provider-supported countries, states, cities and local areas.","operationId":"search_keyword_locations_ep_sites__site_id__tracked_keywords_locations_get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"site_id","in":"path","required":true,"schema":{"type":"string","title":"Site Id"}},{"name":"q","in":"query","required":true,"schema":{"type":"string","minLength":2,"maxLength":100,"title":"Q"}},{"name":"email","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/RankingLocationOut"},"title":"Response Search Keyword Locations Ep Sites  Site Id  Tracked Keywords Locations Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/sites/{site_id}/tracked-keywords/gsc-insights":{"get":{"tags":["sites"],"summary":"Gsc Keyword Insights Ep","description":"Cross-reference tracked keywords with GSC query data.","operationId":"gsc_keyword_insights_ep_sites__site_id__tracked_keywords_gsc_insights_get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"site_id","in":"path","required":true,"schema":{"type":"string","title":"Site Id"}},{"name":"email","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"}},{"name":"country","in":"query","required":false,"schema":{"anyOf":[{"type":"string","minLength":3,"maxLength":3},{"type":"null"}],"title":"Country"}},{"name":"start_date","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Start Date"}},{"name":"end_date","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"End Date"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GscInsightsResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/sites/{site_id}/issues":{"get":{"tags":["sites"],"summary":"List Site Issues Ep","description":"Durable issue list with lifecycle statuses (audit issue 3): active\n(open/fix_in_progress/pending_verification/fix_failed/reopened) vs resolved,\nwith fix attribution and seen/resolved timestamps.","operationId":"list_site_issues_ep_sites__site_id__issues_get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"site_id","in":"path","required":true,"schema":{"type":"string","title":"Site Id"}},{"name":"email","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response List Site Issues Ep Sites  Site Id  Issues Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/sites/{site_id}/health":{"get":{"tags":["sites"],"summary":"Site Health Ep","description":"One consolidated health picture, assembled server-side.\n\nThe same finding currently renders across five surfaces in five\nvocabularies with no shared identity. This is the single payload behind the\nHealth tab: scores, triage counts, issues grouped by RULE (one row saying\n\"40 pages\", not 40 rows), the new-vs-fixed delta, ranked opportunities and\nthe site-type requirements summary.\n\nScores are computed server-side so the tab never re-derives them client-side\n— the 0.45/0.30/0.25 weights were duplicated in brand-overview.tsx and drifting.","operationId":"site_health_ep_sites__site_id__health_get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"site_id","in":"path","required":true,"schema":{"type":"string","title":"Site Id"}},{"name":"email","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"}},{"name":"days","in":"query","required":false,"schema":{"type":"integer","maximum":365,"minimum":1,"default":30,"title":"Days"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Site Health Ep Sites  Site Id  Health Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/sites/{site_id}/requirements":{"get":{"tags":["sites"],"summary":"Site Requirements Ep","description":"What \"good\" means for THIS kind of site — \"X of Y requirements met\".\n\nA layer on top of the scores, not a change to them: existing weights and\ntrends are untouched. Checks read only signals the last crawl already\npersisted, and anything not measured is reported as `unknown` rather than\ncounted either way.","operationId":"site_requirements_ep_sites__site_id__requirements_get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"site_id","in":"path","required":true,"schema":{"type":"string","title":"Site Id"}},{"name":"email","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"}},{"name":"site_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Override the detected type (persisted as user-set)","title":"Site Type"},"description":"Override the detected type (persisted as user-set)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Site Requirements Ep Sites  Site Id  Requirements Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/sites/{site_id}/tracked-keywords/gsc-candidates":{"get":{"tags":["sites"],"summary":"Gsc Keyword Candidates Ep","description":"Queries this site already ranks for but isn't tracking.\n\nRead-only preview behind the \"we found N keywords you already rank for\"\ncard, so the user sees the list before anything is written. Pure DB read\nover stored Search Console data — no external call, no cost.","operationId":"gsc_keyword_candidates_ep_sites__site_id__tracked_keywords_gsc_candidates_get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"site_id","in":"path","required":true,"schema":{"type":"string","title":"Site Id"}},{"name":"email","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"default":50,"title":"Limit"}},{"name":"min_impressions","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":10,"title":"Min Impressions"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Gsc Keyword Candidates Ep Sites  Site Id  Tracked Keywords Gsc Candidates Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/sites/{site_id}/tracked-keywords/seed-from-gsc":{"post":{"tags":["sites"],"summary":"Seed Keywords From Gsc Ep","description":"Track the queries this site already ranks for (`source='gsc'`).\n\nThe zero-typing path into keywords. Everything is free: queries and the\nranking page come from stored GSC data, the funnel stage from a heuristic.","operationId":"seed_keywords_from_gsc_ep_sites__site_id__tracked_keywords_seed_from_gsc_post","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"site_id","in":"path","required":true,"schema":{"type":"string","title":"Site Id"}},{"name":"email","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"default":50,"title":"Limit"}},{"name":"min_impressions","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":10,"title":"Min Impressions"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Seed Keywords From Gsc Ep Sites  Site Id  Tracked Keywords Seed From Gsc Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/sites/{site_id}/journeys":{"get":{"tags":["sites"],"summary":"Site Journeys Ep","description":"Keywords → pages → funnel stage, with the gaps called out.\n\nDegrades honestly rather than going blank: with Search Console we show what\npeople actually search to reach each page; without it we still infer each\ncrawled page's stage, which is enough to say \"you have nothing for someone\nready to buy\".","operationId":"site_journeys_ep_sites__site_id__journeys_get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"site_id","in":"path","required":true,"schema":{"type":"string","title":"Site Id"}},{"name":"email","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Site Journeys Ep Sites  Site Id  Journeys Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/sites/{site_id}/gaps/compute":{"post":{"tags":["sites"],"summary":"Compute Content Gaps Ep","description":"Work out what rivals cover that this site's pages don't, and store it.\n\nDeliberately user-triggered rather than scheduled: each gap fetches rival\npages, and running that on a timer across the fleet would generate a lot of\noutbound traffic for answers nobody asked for. Everything downstream reads\nthe stored result for free.\n\nMetered against `content_gaps.monthly` (free 25 / pro 150 / agency 500 /\nmanaged unlimited), one unit per gap. If the allowance runs out mid-run the\ngaps computed so far are kept and the response says how many were left.\n\n`dry_run=true` lists what would be analysed and how many units it needs,\nwithout spending any.","operationId":"compute_content_gaps_ep_sites__site_id__gaps_compute_post","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"site_id","in":"path","required":true,"schema":{"type":"string","title":"Site Id"}},{"name":"email","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":50,"minimum":1,"default":10,"title":"Limit"}},{"name":"dry_run","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Dry Run"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Compute Content Gaps Ep Sites  Site Id  Gaps Compute Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/sites/{site_id}/angles":{"post":{"tags":["sites"],"summary":"Generate Angles Ep","description":"Angle Engine v0: scored, gain-gated content briefs for this site.\n\nReads the citation-gap matrix (who AI engines cite instead of us, per prompt),\nunanswered GSC demand, the site's competitor consensus/void and first-party\ncrawl-corpus stats; every brief carries a mandatory unique ingredient and an\ninformation-gain check. Briefs without an ingredient, or whose ingredient a\nrival already covers, are REJECTED (and kept, so rejects are countable).\n\n`index_competitors=true` (re)embeds the site's competitor pages for the gain\ncheck first — one Gemini embedding call per ~50 chunks. `explain=true` adds a\nFlash-Lite \"why they win\" reason per competitor (no credits: internal op).","operationId":"generate_angles_ep_sites__site_id__angles_post","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"site_id","in":"path","required":true,"schema":{"type":"string","title":"Site Id"}},{"name":"email","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":50,"minimum":1,"default":10,"title":"Limit"}},{"name":"save","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Save"}},{"name":"explain","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Explain"}},{"name":"index_competitors","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Index Competitors"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Generate Angles Ep Sites  Site Id  Angles Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["sites"],"summary":"List Angles Ep","description":"Stored briefs for this site (newest generation, highest score first).","operationId":"list_angles_ep_sites__site_id__angles_get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"site_id","in":"path","required":true,"schema":{"type":"string","title":"Site Id"}},{"name":"email","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"}},{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"default":50,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response List Angles Ep Sites  Site Id  Angles Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/sites/{site_id}/competitors/capture":{"post":{"tags":["sites"],"summary":"Capture Competitor Serps Ep","description":"Fetch SERPs for this site's most valuable keywords and record who outranks it.\n\nTHE ONLY PAID PATH in the competitive family — roughly $0.0155 per keyword.\nKeywords captured within the cache window are skipped, so a repeat call\ninside the month costs nothing. Pass ``dry_run=true`` to see exactly what\nwould be fetched, and the estimated cost, without spending.","operationId":"capture_competitor_serps_ep_sites__site_id__competitors_capture_post","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"site_id","in":"path","required":true,"schema":{"type":"string","title":"Site Id"}},{"name":"email","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"}},{"name":"max_keywords","in":"query","required":false,"schema":{"type":"integer","maximum":25,"minimum":1,"default":5,"title":"Max Keywords"}},{"name":"dry_run","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Dry Run"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Capture Competitor Serps Ep Sites  Site Id  Competitors Capture Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/sites/{site_id}/competitors/overlap":{"get":{"tags":["sites"],"summary":"Competitor Keyword Overlap Ep","description":"Which keywords this site's competitors are relevant for, and where that\nmeets its own terms.\n\nFree — Google Keyword Planner, no DataForSEO. Returns `configured: false`\nwith an explanation (never an error) until a developer token and Ads account\nare set, so callers can degrade cleanly.\n\nThis approximates the CONTESTED set; it does not report ranking positions.\nUse it to choose the few keywords worth an exact SERP check.","operationId":"competitor_keyword_overlap_ep_sites__site_id__competitors_overlap_get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"site_id","in":"path","required":true,"schema":{"type":"string","title":"Site Id"}},{"name":"email","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"}},{"name":"limit_per_domain","in":"query","required":false,"schema":{"type":"integer","maximum":500,"minimum":10,"default":200,"title":"Limit Per Domain"}},{"name":"location_code","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Country location code, e.g. 2840 for United States, 2356 India. Defaults to 2840 when omitted.","title":"Location Code"},"description":"Country location code, e.g. 2840 for United States, 2356 India. Defaults to 2840 when omitted."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Competitor Keyword Overlap Ep Sites  Site Id  Competitors Overlap Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/sites/{site_id}/tracked-keywords/auto-classify":{"post":{"tags":["sites"],"summary":"Auto Classify Keywords Ep","description":"Classify all unclassified tracked keywords server-side (Gemini Flash-Lite,\nplatform key — no user credits). Backs the dashboard's 'Classify now' button.","operationId":"auto_classify_keywords_ep_sites__site_id__tracked_keywords_auto_classify_post","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"site_id","in":"path","required":true,"schema":{"type":"string","title":"Site Id"}},{"name":"email","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Auto Classify Keywords Ep Sites  Site Id  Tracked Keywords Auto Classify Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/sites/{site_id}/tracked-keywords/check":{"post":{"tags":["sites"],"summary":"Check Rankings Ep","description":"Run DataForSEO ranking check for all tracked keywords.\n\nSmall sets (<= RANK_CHECK_INLINE_MAX) run inline and return the checked\nrows. Larger sets start in the background and return status=\"started\":\n~3.5 s of live SERP per keyword would outlast the MCP client's timeout,\nand a timed-out caller retried and paid twice (2026-09-26). While a check\nis running, a second call returns status=\"running\" instead of starting\nanother.","operationId":"check_rankings_ep_sites__site_id__tracked_keywords_check_post","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"site_id","in":"path","required":true,"schema":{"type":"string","title":"Site Id"}},{"name":"email","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"}},{"name":"due_only","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Due Only"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CheckRankingsResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/sites/{site_id}/tracked-keywords/location":{"put":{"tags":["sites"],"summary":"Set Keyword Location Ep","description":"Set ICP target location for keyword tracking.","operationId":"set_keyword_location_ep_sites__site_id__tracked_keywords_location_put","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"site_id","in":"path","required":true,"schema":{"type":"string","title":"Site Id"}},{"name":"email","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SetLocationRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Set Keyword Location Ep Sites  Site Id  Tracked Keywords Location Put"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/sites/{site_id}/tracked-keywords/classify":{"post":{"tags":["sites"],"summary":"Classify Tracked Keywords Ep","description":"Store agent-supplied classification (intent / funnel stage / cluster / notes)\non existing tracked keywords, matched by keyword. Pure storage — the agent\ndoes the classifying.","operationId":"classify_tracked_keywords_ep_sites__site_id__tracked_keywords_classify_post","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"site_id","in":"path","required":true,"schema":{"type":"string","title":"Site Id"}},{"name":"email","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ClassifyKeywordsRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ClassifyKeywordsResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/sites/{site_id}/tracked-keywords/funnel":{"get":{"tags":["sites"],"summary":"Keyword Funnel Ep","description":"TOFU/MOFU/BOFU funnel + cluster breakdown of tracked keywords. Free, read-only.","operationId":"keyword_funnel_ep_sites__site_id__tracked_keywords_funnel_get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"site_id","in":"path","required":true,"schema":{"type":"string","title":"Site Id"}},{"name":"email","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/KeywordFunnelResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/sites/{site_id}/insights":{"get":{"tags":["sites"],"summary":"Site Insights Ep","description":"Traffic Intelligence: derived GSC + GA4 insights.\n\nStriking-distance keywords, CTR underperformers, rising/falling queries,\ncontent decay, cannibalization, branded split, and AI-assistant referral\ntraffic (ChatGPT/Perplexity/Claude/...) — each with an action. Pure\ncomputation over two 28-day Google API windows; free on all plans.","operationId":"site_insights_ep_sites__site_id__insights_get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"site_id","in":"path","required":true,"schema":{"type":"string","title":"Site Id"}},{"name":"email","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Site Insights Ep Sites  Site Id  Insights Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/sites/{site_id}/competitors/refresh":{"post":{"tags":["sites"],"summary":"Competitor Refresh Ep","description":"Re-crawl + detect changes + refresh CWV + DataForSEO for all tracked competitors.","operationId":"competitor_refresh_ep_sites__site_id__competitors_refresh_post","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"site_id","in":"path","required":true,"schema":{"type":"string","title":"Site Id"}},{"name":"email","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Competitor Refresh Ep Sites  Site Id  Competitors Refresh Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/sites/{site_id}/ai-citations":{"get":{"tags":["sites"],"summary":"Get Site Ai Citations","description":"Where this site appears inside Google's AI answers.\n\nCounts AI Overview and AI Mode citations across the site's own Search\nConsole keywords, and names the domains taking the slots it misses.\n\nPaid per call, like backlinks: each keyword costs ~$0.002 on AI Overviews\nand ~$0.004 on AI Mode, so a 100-keyword refresh across both is ~$0.60.\nResults are cached for 24 h; ``force_refresh`` buys a new sweep.","operationId":"get_site_ai_citations_sites__site_id__ai_citations_get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"site_id","in":"path","required":true,"schema":{"type":"string","title":"Site Id"}},{"name":"email","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"}},{"name":"force_refresh","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Force Refresh"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":50,"title":"Limit"}},{"name":"surface","in":"query","required":false,"schema":{"type":"string","pattern":"^(both|ai_overview|ai_mode)$","default":"both","title":"Surface"}},{"name":"location_code","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Location Code"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AiCitationProfileResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/sites/{site_id}/backlinks":{"get":{"tags":["sites"],"summary":"Get Site Backlinks","description":"Return the backlink profile for a site.\n\nResults are cached for 24 h. Pass ``force_refresh=true`` to trigger a live,\ncursor-paginated DataForSEO fetch. Requires DataForSEO credentials.","operationId":"get_site_backlinks_sites__site_id__backlinks_get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"site_id","in":"path","required":true,"schema":{"type":"string","title":"Site Id"}},{"name":"email","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"}},{"name":"force_refresh","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Force Refresh"}},{"name":"domain","in":"query","required":false,"schema":{"anyOf":[{"type":"string","maxLength":500},{"type":"null"}],"title":"Domain"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BacklinkProfileResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/sites/{site_id}/backlinks/disavow-file":{"get":{"tags":["sites"],"summary":"Get Disavow File","description":"Generate and download a Google Search Console disavow file.\n\nBuilt from ``disavow_candidates()`` — the same filtered, scored list the\nbacklink profile shows — so every ``domain:`` line here corresponds to a\nlink the user can see (with its reasons) under ``suspect`` in\n``GET /backlinks``. Flagged domains (score >= ``threshold``) are formatted\nas Google's plain-text disavow format (``domain:example.com`` lines).\n\nReturns a ``text/plain`` file attachment. This never triggers a DataForSEO\ncall, even on a cache miss — unlike ``get_backlink_profile(force_refresh=False)``,\nwhich falls back to a live (paid) fetch when no snapshot exists yet. That\nfallback is appropriate for the /backlinks endpoint, but not for a\nread-only export that a client could hit repeatedly.","operationId":"get_disavow_file_sites__site_id__backlinks_disavow_file_get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"site_id","in":"path","required":true,"schema":{"type":"string","title":"Site Id"}},{"name":"email","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"}},{"name":"threshold","in":"query","required":false,"schema":{"type":"number","maximum":1.0,"minimum":0.0,"default":0.61,"title":"Threshold"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/sites/{site_id}/goals":{"get":{"tags":["sites"],"summary":"List Goals","description":"The brand's goal tree, with progress and rolled-up fix-queue counts.","operationId":"list_goals_sites__site_id__goals_get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"site_id","in":"path","required":true,"schema":{"type":"string","title":"Site Id"}},{"name":"email","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response List Goals Sites  Site Id  Goals Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["sites"],"summary":"Create Goal","description":"Create a goal. The baseline is measured here, never taken from the caller.","operationId":"create_goal_sites__site_id__goals_post","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"site_id","in":"path","required":true,"schema":{"type":"string","title":"Site Id"}},{"name":"email","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GoalCreateRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Create Goal Sites  Site Id  Goals Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/sites/{site_id}/goals/{goal_id}":{"patch":{"tags":["sites"],"summary":"Update Goal","description":"Update a goal's fields or status.","operationId":"update_goal_sites__site_id__goals__goal_id__patch","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"site_id","in":"path","required":true,"schema":{"type":"string","title":"Site Id"}},{"name":"goal_id","in":"path","required":true,"schema":{"type":"string","title":"Goal Id"}},{"name":"email","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GoalUpdateRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Update Goal Sites  Site Id  Goals  Goal Id  Patch"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["sites"],"summary":"Delete Goal","description":"Delete a goal. Sub-goals survive as top-level; linked issues are unlinked.","operationId":"delete_goal_sites__site_id__goals__goal_id__delete","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"site_id","in":"path","required":true,"schema":{"type":"string","title":"Site Id"}},{"name":"goal_id","in":"path","required":true,"schema":{"type":"string","title":"Goal Id"}},{"name":"email","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Delete Goal Sites  Site Id  Goals  Goal Id  Delete"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/sites/{site_id}/goals/{goal_id}/issues":{"post":{"tags":["sites"],"summary":"Link Goal Issues","description":"Roll fix-queue items up to this goal, by id or by rule_key/category.","operationId":"link_goal_issues_sites__site_id__goals__goal_id__issues_post","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"site_id","in":"path","required":true,"schema":{"type":"string","title":"Site Id"}},{"name":"goal_id","in":"path","required":true,"schema":{"type":"string","title":"Goal Id"}},{"name":"email","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GoalLinkIssuesRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Link Goal Issues Sites  Site Id  Goals  Goal Id  Issues Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/sites/{site_id}/goals/refresh":{"post":{"tags":["sites"],"summary":"Refresh Goals","description":"Re-measure every metric-backed goal on this brand now.","operationId":"refresh_goals_sites__site_id__goals_refresh_post","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"site_id","in":"path","required":true,"schema":{"type":"string","title":"Site Id"}},{"name":"email","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Refresh Goals Sites  Site Id  Goals Refresh Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/goals/metrics":{"get":{"tags":["goals"],"summary":"Goal Metrics","description":"Every metric a goal can be measured against, and where each is read from.","operationId":"goal_metrics_goals_metrics_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Goal Metrics Goals Metrics Get"}}}}},"security":[{"APIKeyHeader":[]}]}},"/orgs":{"get":{"tags":["orgs"],"summary":"List Orgs","description":"List the organizations the caller belongs to (with brand counts + role).","operationId":"list_orgs_orgs_get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"email","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response List Orgs Orgs Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["orgs"],"summary":"Create Org","description":"Create a new organization owned by the caller.","operationId":"create_org_orgs_post","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"email","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateOrgBody"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Create Org Orgs Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/orgs/{org_id}":{"patch":{"tags":["orgs"],"summary":"Update Org","description":"Update an organization's visible identity (admin/owner only).","operationId":"update_org_orgs__org_id__patch","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","title":"Org Id"}},{"name":"email","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateOrgBody"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Update Org Orgs  Org Id  Patch"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/orgs/{org_id}/members":{"get":{"tags":["orgs"],"summary":"List Members","description":"List an org's members + pending invites (admin only).","operationId":"list_members_orgs__org_id__members_get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","title":"Org Id"}},{"name":"email","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response List Members Orgs  Org Id  Members Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/orgs/{org_id}/invites":{"post":{"tags":["orgs"],"summary":"Create Invite","description":"Invite a teammate by email; returns a shareable token (admin only).","operationId":"create_invite_orgs__org_id__invites_post","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","title":"Org Id"}},{"name":"email","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/InviteBody"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Create Invite Orgs  Org Id  Invites Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/orgs/{org_id}/invites/{invite_id}":{"delete":{"tags":["orgs"],"summary":"Revoke Invite","description":"Revoke a pending invite (admin only).","operationId":"revoke_invite_orgs__org_id__invites__invite_id__delete","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","title":"Org Id"}},{"name":"invite_id","in":"path","required":true,"schema":{"type":"string","title":"Invite Id"}},{"name":"email","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Revoke Invite Orgs  Org Id  Invites  Invite Id  Delete"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/orgs/{org_id}/members/{user_id}":{"patch":{"tags":["orgs"],"summary":"Update Member","description":"Change a member's role / write access (admin only; not the owner).","operationId":"update_member_orgs__org_id__members__user_id__patch","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","title":"Org Id"}},{"name":"user_id","in":"path","required":true,"schema":{"type":"string","title":"User Id"}},{"name":"email","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MemberPatchBody"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Update Member Orgs  Org Id  Members  User Id  Patch"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["orgs"],"summary":"Remove Member","description":"Remove a member from the org (admin only; not the owner).","operationId":"remove_member_orgs__org_id__members__user_id__delete","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","title":"Org Id"}},{"name":"user_id","in":"path","required":true,"schema":{"type":"string","title":"User Id"}},{"name":"email","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Remove Member Orgs  Org Id  Members  User Id  Delete"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/orgs/invites/{token}":{"get":{"tags":["orgs"],"summary":"Preview Invite","description":"Public-ish preview of an invite (org name + intended email).","operationId":"preview_invite_orgs_invites__token__get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"token","in":"path","required":true,"schema":{"type":"string","title":"Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Preview Invite Orgs Invites  Token  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/orgs/invites/{token}/accept":{"post":{"tags":["orgs"],"summary":"Accept Invite","description":"The signed-in user (matching the invite email) joins the org.","operationId":"accept_invite_orgs_invites__token__accept_post","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"token","in":"path","required":true,"schema":{"type":"string","title":"Token"}},{"name":"email","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Accept Invite Orgs Invites  Token  Accept Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/shopify-rewrite":{"post":{"tags":["shopify"],"summary":"Shopify Rewrite","operationId":"shopify_rewrite_shopify_rewrite_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ShopifyRewriteRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ShopifyRewriteResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"APIKeyHeader":[]}]}},"/reports/export-doc":{"post":{"tags":["reports"],"summary":"Export Doc","description":"Export an analysis report as a Google Doc.\n\nCreates the doc in the user's own Google Drive using their OAuth\nrefresh token (same one used for GSC access).","operationId":"export_doc_reports_export_doc_post","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"email","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExportDocRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExportDocResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/reports/export-pdf":{"post":{"tags":["reports"],"summary":"Export Pdf","description":"Export an analysis report as a styled PDF.\n\nGenerates a Deloitte-style HTML report and renders it to PDF via\nheadless Chromium. Shares the ``doc_exports.monthly`` billing cap.","operationId":"export_pdf_reports_export_pdf_post","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"email","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExportDocRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/reports/exports":{"get":{"tags":["reports"],"summary":"List Exports","description":"Return all report exports for the authenticated user.","operationId":"list_exports_reports_exports_get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"email","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ReportExportOut"},"title":"Response List Exports Reports Exports Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/sites/{site_id}/cwv":{"get":{"tags":["cwv"],"summary":"List Cwv Metrics","description":"Return recent CWV metrics for a site.\n\nOptionally filter by page URL and/or device. ``include_diagnostics=false``\ndrops the Lighthouse blob (screenshot, filmstrip, audits — 600-700 KB per\nrow): the MCP tools pass it, because technical_health on a 3-row site came\nback as 478 KB and the concise shaper had to omit the whole CWV section\n(2026-09-26). The dashboard keeps the default.","operationId":"list_cwv_metrics_sites__site_id__cwv_get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"site_id","in":"path","required":true,"schema":{"type":"string","title":"Site Id"}},{"name":"email","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"}},{"name":"url","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Url"}},{"name":"device","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Device"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":20,"title":"Limit"}},{"name":"include_diagnostics","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Include Diagnostics"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/CwvMetricOut"},"title":"Response List Cwv Metrics Sites  Site Id  Cwv Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/sites/{site_id}/cwv/measure":{"post":{"tags":["cwv"],"summary":"Measure Cwv","description":"Run a new CWV measurement for a page.\n\nCalls PageSpeed Insights (always) and CrUX (when the user has a\nGSC refresh token). Both results are persisted and returned.\n``include_diagnostics=false`` drops the Lighthouse blob from the reply:\nthe MCP measure_cwv on wintwealth.com (2026-09-27) returned 530 KB, of\nwhich 550 KB-equivalent was ``psi.diagnostics`` (audits_by_id, filmstrip,\nscreenshot) and 200 bytes were the scores an agent quotes.","operationId":"measure_cwv_sites__site_id__cwv_measure_post","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"site_id","in":"path","required":true,"schema":{"type":"string","title":"Site Id"}},{"name":"email","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"}},{"name":"include_diagnostics","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Include Diagnostics"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MeasureRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MeasureResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/sites/{site_id}/cwv/preview":{"get":{"tags":["cwv"],"summary":"Site Preview Image","description":"Latest stored PageSpeed screenshot as a real image (browser-cacheable).\n\nThe grid/hero UIs use this instead of pulling fat base64 JSON per site.\nPrefers desktop captures (landscape fits card covers). 404 when none.","operationId":"site_preview_image_sites__site_id__cwv_preview_get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"site_id","in":"path","required":true,"schema":{"type":"string","title":"Site Id"}},{"name":"email","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/ga/auth-url":{"get":{"tags":["google-analytics"],"summary":"Ga Auth Url","description":"Return the Google OAuth URL for GA4 analytics.readonly scope.\n\nBefore generating the URL the endpoint checks the user's billing\nplan to ensure they haven't exceeded their ``ga_connections.count``\ncap.","operationId":"ga_auth_url_ga_auth_url_get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"email","in":"query","required":true,"schema":{"type":"string","description":"Signed-in user email","title":"Email"},"description":"Signed-in user email"},{"name":"site_id","in":"query","required":true,"schema":{"type":"string","description":"Site UUID to connect GA4 to","title":"Site Id"},"description":"Site UUID to connect GA4 to"},{"name":"origin","in":"query","required":false,"schema":{"type":"string","description":"Frontend origin to return to after auth (e.g. https://xeorank.com)","default":"","title":"Origin"},"description":"Frontend origin to return to after auth (e.g. https://xeorank.com)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Ga Auth Url Ga Auth Url Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/ga/callback":{"get":{"tags":["google-analytics"],"summary":"Ga Callback","description":"Handle the Google OAuth callback for GA4.\n\nExchanges the authorization code for tokens, creates (or updates)\na ``GaConnection`` record, and redirects the user back to the\nfrontend.","operationId":"ga_callback_ga_callback_get","parameters":[{"name":"code","in":"query","required":true,"schema":{"type":"string","description":"OAuth authorization code","title":"Code"},"description":"OAuth authorization code"},{"name":"state","in":"query","required":true,"schema":{"type":"string","description":"Encoded state from auth-url","title":"State"},"description":"Encoded state from auth-url"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/ga/status":{"get":{"tags":["google-analytics"],"summary":"Ga Status","description":"Check whether GA4 is connected for the given site.","operationId":"ga_status_ga_status_get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"email","in":"query","required":true,"schema":{"type":"string","description":"Signed-in user email","title":"Email"},"description":"Signed-in user email"},{"name":"site_id","in":"query","required":true,"schema":{"type":"string","description":"Site UUID","title":"Site Id"},"description":"Site UUID"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Ga Status Ga Status Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/ga/selection":{"get":{"tags":["google-analytics"],"summary":"Ga Selection Options","description":"List accessible properties and streams, including the saved selection.","operationId":"ga_selection_options_ga_selection_get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"email","in":"query","required":true,"schema":{"type":"string","description":"Signed-in user email","title":"Email"},"description":"Signed-in user email"},{"name":"site_id","in":"query","required":true,"schema":{"type":"string","description":"Site UUID","title":"Site Id"},"description":"Site UUID"},{"name":"property_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Property to load streams for","title":"Property Id"},"description":"Property to load streams for"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Ga Selection Options Ga Selection Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["google-analytics"],"summary":"Save Ga Selection","description":"Validate and persist the exact GA4 property and data stream to report.","operationId":"save_ga_selection_ga_selection_put","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"email","in":"query","required":true,"schema":{"type":"string","description":"Signed-in user email","title":"Email"},"description":"Signed-in user email"},{"name":"site_id","in":"query","required":true,"schema":{"type":"string","description":"Site UUID","title":"Site Id"},"description":"Site UUID"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GaSelectionRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Save Ga Selection Ga Selection Put"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/ga/disconnect":{"post":{"tags":["google-analytics"],"summary":"Ga Disconnect","description":"Disconnect GA4 for the given site (sets is_active = False).","operationId":"ga_disconnect_ga_disconnect_post","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"email","in":"query","required":true,"schema":{"type":"string","description":"Signed-in user email","title":"Email"},"description":"Signed-in user email"},{"name":"site_id","in":"query","required":true,"schema":{"type":"string","description":"Site UUID","title":"Site Id"},"description":"Site UUID"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Ga Disconnect Ga Disconnect Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/ga/traffic-sources":{"get":{"tags":["google-analytics"],"summary":"Ga Traffic Sources","description":"Traffic by source/channel with AI-assistant referral detection.\n\nCompares the last `days` window to the prior one and surfaces sessions\nfrom ChatGPT / Perplexity / Claude / Gemini / Copilot etc.","operationId":"ga_traffic_sources_ga_traffic_sources_get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"email","in":"query","required":true,"schema":{"type":"string","description":"Signed-in user email","title":"Email"},"description":"Signed-in user email"},{"name":"site_id","in":"query","required":true,"schema":{"type":"string","description":"Site UUID","title":"Site Id"},"description":"Site UUID"},{"name":"days","in":"query","required":false,"schema":{"type":"integer","description":"Window length in days (compared to the prior window)","default":28,"title":"Days"},"description":"Window length in days (compared to the prior window)"},{"name":"start_date","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Start date (YYYY-MM-DD)","title":"Start Date"},"description":"Start date (YYYY-MM-DD)"},{"name":"end_date","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"End date (YYYY-MM-DD)","title":"End Date"},"description":"End date (YYYY-MM-DD)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Ga Traffic Sources Ga Traffic Sources Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/ga/metrics":{"get":{"tags":["google-analytics"],"summary":"Ga Metrics","description":"Fetch GA4 analytics metrics for a connected site.","operationId":"ga_metrics_ga_metrics_get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"email","in":"query","required":true,"schema":{"type":"string","description":"Signed-in user email","title":"Email"},"description":"Signed-in user email"},{"name":"site_id","in":"query","required":true,"schema":{"type":"string","description":"Site UUID","title":"Site Id"},"description":"Site UUID"},{"name":"days","in":"query","required":false,"schema":{"type":"integer","description":"Number of days to look back","default":30,"title":"Days"},"description":"Number of days to look back"},{"name":"start_date","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Start date (YYYY-MM-DD)","title":"Start Date"},"description":"Start date (YYYY-MM-DD)"},{"name":"end_date","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"End date (YYYY-MM-DD)","title":"End Date"},"description":"End date (YYYY-MM-DD)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Ga Metrics Ga Metrics Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/ga/metrics-by-domain":{"get":{"tags":["google-analytics"],"summary":"Ga Metrics By Domain","description":"Fetch GA4 metrics by domain (for CLI usage).","operationId":"ga_metrics_by_domain_ga_metrics_by_domain_get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"email","in":"query","required":true,"schema":{"type":"string","description":"Signed-in user email","title":"Email"},"description":"Signed-in user email"},{"name":"domain","in":"query","required":true,"schema":{"type":"string","description":"Site domain","title":"Domain"},"description":"Site domain"},{"name":"days","in":"query","required":false,"schema":{"type":"integer","description":"Number of days to look back","default":30,"title":"Days"},"description":"Number of days to look back"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Ga Metrics By Domain Ga Metrics By Domain Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/gbp/audit":{"get":{"tags":["gbp"],"summary":"Gbp Audit","description":"Audit a business's public Google Business Profile.\n\nUses the Places API (public data) — no user OAuth and no Business Profile API\napproval needed. Returns a completeness score + ranked AEO/GEO recommendations\n+ top public reviews. Results are cached (~6h); calls are rate-limited per caller.","operationId":"gbp_audit_gbp_audit_get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"query","in":"query","required":false,"schema":{"type":"string","description":"Business name + city, or full address","default":"","title":"Query"},"description":"Business name + city, or full address"},{"name":"place_id","in":"query","required":false,"schema":{"type":"string","description":"Google place_id (skips the lookup)","default":"","title":"Place Id"},"description":"Google place_id (skips the lookup)"},{"name":"email","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Caller email (rate-limit key)","title":"Email"},"description":"Caller email (rate-limit key)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Gbp Audit Gbp Audit Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/code/connect/github":{"post":{"tags":["code-sites"],"summary":"Connect Github","operationId":"connect_github_code_connect_github_post","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"email","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/api__routers__code_sites__ConnectBody"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Connect Github Code Connect Github Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/code/connect/vercel":{"post":{"tags":["code-sites"],"summary":"Connect Vercel","operationId":"connect_vercel_code_connect_vercel_post","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"email","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/api__routers__code_sites__ConnectBody"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Connect Vercel Code Connect Vercel Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/code/github/auth-url":{"get":{"tags":["code-sites"],"summary":"Github Auth Url","operationId":"github_auth_url_code_github_auth_url_get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"email","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"}},{"name":"origin","in":"query","required":false,"schema":{"type":"string","description":"Frontend origin to return to after auth","default":"","title":"Origin"},"description":"Frontend origin to return to after auth"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Github Auth Url Code Github Auth Url Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/code/github/callback":{"get":{"tags":["code-sites"],"summary":"Github Callback","operationId":"github_callback_code_github_callback_get","parameters":[{"name":"code","in":"query","required":true,"schema":{"type":"string","title":"Code"}},{"name":"state","in":"query","required":true,"schema":{"type":"string","title":"State"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/code/vercel/auth-url":{"get":{"tags":["code-sites"],"summary":"Vercel Auth Url","operationId":"vercel_auth_url_code_vercel_auth_url_get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"email","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"}},{"name":"origin","in":"query","required":false,"schema":{"type":"string","description":"Frontend origin to return to after auth","default":"","title":"Origin"},"description":"Frontend origin to return to after auth"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Vercel Auth Url Code Vercel Auth Url Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/code/vercel/callback":{"get":{"tags":["code-sites"],"summary":"Vercel Callback","operationId":"vercel_callback_code_vercel_callback_get","parameters":[{"name":"code","in":"query","required":true,"schema":{"type":"string","title":"Code"}},{"name":"state","in":"query","required":true,"schema":{"type":"string","title":"State"}},{"name":"teamId","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Teamid"}},{"name":"configurationId","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Configurationid"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/code/status":{"get":{"tags":["code-sites"],"summary":"Code Status","operationId":"code_status_code_status_get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"email","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Code Status Code Status Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/code/github/repos":{"get":{"tags":["code-sites"],"summary":"Github Repos","operationId":"github_repos_code_github_repos_get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"email","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"}},{"name":"q","in":"query","required":false,"schema":{"type":"string","description":"Filter by name substring","default":"","title":"Q"},"description":"Filter by name substring"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":30,"minimum":1,"description":"Page size (lazy — keep small)","default":10,"title":"Limit"},"description":"Page size (lazy — keep small)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Github Repos Code Github Repos Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/code/github/link":{"post":{"tags":["code-sites"],"summary":"Github Link","operationId":"github_link_code_github_link_post","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"email","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LinkBody"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Github Link Code Github Link Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/code/github/create":{"post":{"tags":["code-sites"],"summary":"Github Create Site","operationId":"github_create_site_code_github_create_post","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"email","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateBody"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Github Create Site Code Github Create Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/code/write":{"post":{"tags":["code-sites"],"summary":"Code Write","operationId":"code_write_code_write_post","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"email","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WriteBody"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Code Write Code Write Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/code/vercel/link":{"post":{"tags":["code-sites"],"summary":"Vercel Link","description":"Create a Vercel project linked to the site's GitHub repo.","operationId":"vercel_link_code_vercel_link_post","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"email","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SiteRefBody"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Vercel Link Code Vercel Link Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/code/deploy":{"get":{"tags":["code-sites"],"summary":"Code Deploy Status","operationId":"code_deploy_status_code_deploy_get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"email","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"}},{"name":"site_id","in":"query","required":true,"schema":{"type":"string","title":"Site Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Code Deploy Status Code Deploy Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/code/logs":{"get":{"tags":["code-sites"],"summary":"Code Logs","operationId":"code_logs_code_logs_get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"email","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"}},{"name":"deployment_id","in":"query","required":true,"schema":{"type":"string","title":"Deployment Id"}},{"name":"errors_only","in":"query","required":false,"schema":{"type":"boolean","description":"Only error/warning lines (cheap)","default":false,"title":"Errors Only"},"description":"Only error/warning lines (cheap)"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"description":"Tail size (lazy — keep small)","default":25,"title":"Limit"},"description":"Tail size (lazy — keep small)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Code Logs Code Logs Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/code/public":{"post":{"tags":["code-sites"],"summary":"Code Set Public","description":"Make a code site publicly accessible (disable Vercel Authentication) or re-protect it.","operationId":"code_set_public_code_public_post","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"email","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicBody"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Code Set Public Code Public Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/code/domain":{"post":{"tags":["code-sites"],"summary":"Code Domain","operationId":"code_domain_code_domain_post","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"email","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DomainBody"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Code Domain Code Domain Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/code/local-setup":{"get":{"tags":["code-sites"],"summary":"Code Local Setup","description":"Everything the user needs to get the site onto their LOCAL drive and keep it\nin sync — XeoRank's only job for local work. After cloning, git is the sync\nengine: edit locally → push → the git-linked Vercel project auto-builds. That IS\nthe branch auto-sync; no separate machinery. Cheap read, no external calls.","operationId":"code_local_setup_code_local_setup_get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"email","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"}},{"name":"site_id","in":"query","required":true,"schema":{"type":"string","title":"Site Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Code Local Setup Code Local Setup Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/code/sites":{"get":{"tags":["code-sites"],"summary":"List Sites","operationId":"list_sites_code_sites_get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"email","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":20,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response List Sites Code Sites Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/google-ads/auth-url":{"get":{"tags":["google-ads"],"summary":"Ads Auth Url","description":"Return the Google OAuth URL for the adwords scope.","operationId":"ads_auth_url_google_ads_auth_url_get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"email","in":"query","required":true,"schema":{"type":"string","description":"Signed-in user email","title":"Email"},"description":"Signed-in user email"},{"name":"site_id","in":"query","required":true,"schema":{"type":"string","description":"Site UUID to connect Google Ads to","title":"Site Id"},"description":"Site UUID to connect Google Ads to"},{"name":"origin","in":"query","required":false,"schema":{"type":"string","description":"Frontend origin to return to after auth","default":"","title":"Origin"},"description":"Frontend origin to return to after auth"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Ads Auth Url Google Ads Auth Url Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/google-ads/callback":{"get":{"tags":["google-ads"],"summary":"Ads Callback","description":"OAuth callback: upsert the connection, redirect to the Integrations tab.","operationId":"ads_callback_google_ads_callback_get","parameters":[{"name":"code","in":"query","required":true,"schema":{"type":"string","description":"OAuth authorization code","title":"Code"},"description":"OAuth authorization code"},{"name":"state","in":"query","required":true,"schema":{"type":"string","description":"Encoded state from auth-url","title":"State"},"description":"Encoded state from auth-url"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/google-ads/status":{"get":{"tags":["google-ads"],"summary":"Ads Status","description":"Connection + activation status for a site's Google Ads integration.","operationId":"ads_status_google_ads_status_get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"email","in":"query","required":true,"schema":{"type":"string","title":"Email"}},{"name":"site_id","in":"query","required":true,"schema":{"type":"string","title":"Site Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Ads Status Google Ads Status Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/google-ads/disconnect":{"post":{"tags":["google-ads"],"summary":"Ads Disconnect","description":"Deactivate a site's Google Ads connection.","operationId":"ads_disconnect_google_ads_disconnect_post","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"email","in":"query","required":true,"schema":{"type":"string","title":"Email"}},{"name":"site_id","in":"query","required":true,"schema":{"type":"string","title":"Site Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Ads Disconnect Google Ads Disconnect Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/google-ads/keyword-ideas":{"post":{"tags":["google-ads"],"summary":"Ads Keyword Ideas","description":"Keyword Planner ideas — ONLY when the integration is fully active.\n\nDormant path returns HTTP 200 with ``configured: false`` (never a 500)\nso agents cleanly fall back to their own ideation + Xyle storage.","operationId":"ads_keyword_ideas_google_ads_keyword_ideas_post","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"email","in":"query","required":true,"schema":{"type":"string","title":"Email"}},{"name":"site_id","in":"query","required":true,"schema":{"type":"string","title":"Site Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdsKeywordIdeasRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Ads Keyword Ideas Google Ads Keyword Ideas Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/marketing/leads":{"get":{"tags":["marketing"],"summary":"List Leads","operationId":"list_leads_marketing_leads_get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"email","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"}},{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status"}},{"name":"source","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Source"}},{"name":"q","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Q"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":500,"default":100,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response List Leads Marketing Leads Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["marketing"],"summary":"Add Leads","operationId":"add_leads_marketing_leads_post","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"email","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AddLeadsRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Add Leads Marketing Leads Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/marketing/leads/{lead_id}":{"patch":{"tags":["marketing"],"summary":"Update Lead","operationId":"update_lead_marketing_leads__lead_id__patch","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"lead_id","in":"path","required":true,"schema":{"type":"string","title":"Lead Id"}},{"name":"email","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateLeadRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Update Lead Marketing Leads  Lead Id  Patch"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/marketing/segments":{"get":{"tags":["marketing"],"summary":"Segments","operationId":"segments_marketing_segments_get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"email","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Segments Marketing Segments Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/marketing/prospect-audit":{"post":{"tags":["marketing"],"summary":"Prospect Audit","operationId":"prospect_audit_marketing_prospect_audit_post","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"email","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProspectAuditRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Prospect Audit Marketing Prospect Audit Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/marketing/email/draft":{"post":{"tags":["marketing"],"summary":"Draft Email","operationId":"draft_email_marketing_email_draft_post","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"email","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DraftEmailRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Draft Email Marketing Email Draft Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/marketing/email/send":{"post":{"tags":["marketing"],"summary":"Send Email","operationId":"send_email_marketing_email_send_post","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"email","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SendEmailRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Send Email Marketing Email Send Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/marketing/email/history":{"get":{"tags":["marketing"],"summary":"Email History","operationId":"email_history_marketing_email_history_get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"email","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"}},{"name":"to","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"To"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"default":50,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Email History Marketing Email History Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/marketing/unsubscribe":{"get":{"tags":["marketing"],"summary":"Unsubscribe","operationId":"unsubscribe_marketing_unsubscribe_get","parameters":[{"name":"e","in":"query","required":true,"schema":{"type":"string","title":"E"}},{"name":"t","in":"query","required":true,"schema":{"type":"string","title":"T"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/sites/{site_id}/reports/branding":{"get":{"tags":["business-reports"],"summary":"Report Branding","description":"Whether this user can white-label reports (agency plan) + their org name.","operationId":"report_branding_sites__site_id__reports_branding_get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"site_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Site Id"}},{"name":"email","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BrandingOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/sites/{site_id}/reports":{"get":{"tags":["business-reports"],"summary":"List Reports","description":"List business reports for a site, newest first.","operationId":"list_reports_sites__site_id__reports_get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"site_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Site Id"}},{"name":"email","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":20,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ReportOut"},"title":"Response List Reports Sites  Site Id  Reports Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/sites/{site_id}/reports/{report_id}/presentation":{"patch":{"tags":["business-reports"],"summary":"Update Report Presentation","description":"Store report layout edits separately from verified source measurements.","operationId":"update_report_presentation_sites__site_id__reports__report_id__presentation_patch","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"site_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Site Id"}},{"name":"report_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Report Id"}},{"name":"email","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReportPresentationUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReportOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/sites/{site_id}/reports/{report_id}":{"delete":{"tags":["business-reports"],"summary":"Delete Report","operationId":"delete_report_sites__site_id__reports__report_id__delete","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"site_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Site Id"}},{"name":"report_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Report Id"}},{"name":"email","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["business-reports"],"summary":"Get Report","description":"Get a single business report by ID.","operationId":"get_report_sites__site_id__reports__report_id__get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"site_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Site Id"}},{"name":"report_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Report Id"}},{"name":"email","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReportOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/sites/{site_id}/reports/{report_id}/duplicate":{"post":{"tags":["business-reports"],"summary":"Duplicate Report","operationId":"duplicate_report_sites__site_id__reports__report_id__duplicate_post","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"site_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Site Id"}},{"name":"report_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Report Id"}},{"name":"email","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReportOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/sites/{site_id}/reports/generate":{"post":{"tags":["business-reports"],"summary":"Generate Report","description":"Generate an on-demand business impact report.\n\nAggregates data from GSC, GA4, and Shopify (when connected), then\ncalls Gemini to produce a narrative summary. The finished report\nis persisted and returned.","operationId":"generate_report_sites__site_id__reports_generate_post","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"site_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Site Id"}},{"name":"email","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenerateReportRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReportOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/sites/{site_id}/reports/schedule":{"get":{"tags":["business-reports"],"summary":"Get Schedule","description":"Get the report schedule for a site (if one exists).","operationId":"get_schedule_sites__site_id__reports_schedule_get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"site_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Site Id"}},{"name":"email","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/ScheduleOut"},{"type":"null"}],"title":"Response Get Schedule Sites  Site Id  Reports Schedule Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["business-reports"],"summary":"Upsert Schedule","description":"Create or update the report schedule for a site.\n\nRequires the ``scheduled_reports`` feature flag on the user's plan.","operationId":"upsert_schedule_sites__site_id__reports_schedule_put","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"site_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Site Id"}},{"name":"email","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/api__routers__business_reports__ScheduleRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ScheduleOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/sites/{site_id}/reports/{report_id}/export-pdf":{"get":{"tags":["business-reports"],"summary":"Export Report Pdf","description":"Export a business report as a Deloitte-style PDF.\n\nGenerates a self-contained HTML report using the monthly template\nand renders it to an A4 PDF via headless Chromium.","operationId":"export_report_pdf_sites__site_id__reports__report_id__export_pdf_get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"site_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Site Id"}},{"name":"report_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Report Id"}},{"name":"email","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"}},{"name":"white_label","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"White Label"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["business-reports"],"summary":"Export Displayed Report Pdf","description":"Download the report view's print layout as a PDF.","operationId":"export_displayed_report_pdf_sites__site_id__reports__report_id__export_pdf_post","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"site_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Site Id"}},{"name":"report_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Report Id"}},{"name":"email","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PrintableReportRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/sites/{site_id}/reports/failures":{"post":{"tags":["business-reports"],"summary":"Record Report Failure","description":"Persist a scheduled generation failure so it remains visible in history.","operationId":"record_report_failure_sites__site_id__reports_failures_post","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"site_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Site Id"}},{"name":"email","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FailedReportRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReportOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/sites/{site_id}/reports/{report_id}/export-doc":{"get":{"tags":["business-reports"],"summary":"Export Report Doc","description":"Export a business report as a Google Doc in the user's Drive.\n\nUses the same styled HTML as the PDF export, uploaded to Google Drive\nwhich auto-converts it to Google Docs format.","operationId":"export_report_doc_sites__site_id__reports__report_id__export_doc_get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"site_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Site Id"}},{"name":"report_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Report Id"}},{"name":"email","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"}},{"name":"white_label","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"White Label"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExportDocResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/sites/{site_id}/reports/{report_id}/delivery":{"patch":{"tags":["business-reports"],"summary":"Update Report Delivery","description":"Record scheduled-report delivery outcome for report history.","operationId":"update_report_delivery_sites__site_id__reports__report_id__delivery_patch","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"site_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Site Id"}},{"name":"report_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Report Id"}},{"name":"email","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeliveryUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReportOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/prospect-audits":{"post":{"tags":["prospect-audits"],"summary":"Start Prospect Audit","description":"Kick off a prospect audit. Returns immediately — poll GET /{id}.\n\nStatus code varies by outcome (no fixed status_code on the route — a\nfixed one would force 201 even on the \"not enough credits\" branch below):\n201 when an audit was actually created (new or the in-flight retry),\n200 with {\"ok\": false, \"error\": \"credits_exhausted\"} when it wasn't.\n\nTypically completes in 2-5 minutes for a 300-page crawl — a 1,000-page\nPro crawl of a large site can run 30+ minutes (the crawl and the AI-visibility scan\ndominate). Everything found is real: a live crawl, real PageSpeed/CrUX,\nreal DataForSEO data, real model responses in the visibility scan.","operationId":"start_prospect_audit_prospect_audits_post","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"email","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StartProspectAuditRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Start Prospect Audit Prospect Audits Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["prospect-audits"],"summary":"List Prospect Audits","operationId":"list_prospect_audits_prospect_audits_get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"email","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":20,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ProspectAuditOut"},"title":"Response List Prospect Audits Prospect Audits Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/prospect-audits/{audit_id}":{"get":{"tags":["prospect-audits"],"summary":"Get Prospect Audit","operationId":"get_prospect_audit_prospect_audits__audit_id__get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"audit_id","in":"path","required":true,"schema":{"type":"string","title":"Audit Id"}},{"name":"email","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProspectAuditOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/keywords/sessions":{"get":{"tags":["keywords"],"summary":"List Sessions","description":"List the user's keyword research sessions, optionally scoped to one brand.\n\nlimit is applied in SQL. Callers have been sending it since the MCP tool was\nwritten; it was accepted and ignored, so every call fanned out a per-session\nmessage count over the user's entire history.","operationId":"list_sessions_keywords_sessions_get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"email","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"}},{"name":"site_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Site Id"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"default":25,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/KeywordSessionOut"},"title":"Response List Sessions Keywords Sessions Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["keywords"],"summary":"Create Session","description":"Create a new keyword research session.\n\nChecks the ``keyword_sessions.monthly`` billing cap.","operationId":"create_session_keywords_sessions_post","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"email","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateSessionRequest"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/KeywordSessionOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/keywords/sessions/{session_id}":{"get":{"tags":["keywords"],"summary":"Get Session","description":"Get a keyword session with its messages and clusters.","operationId":"get_session_keywords_sessions__session_id__get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"session_id","in":"path","required":true,"schema":{"type":"string","title":"Session Id"}},{"name":"email","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/KeywordSessionDetailOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["keywords"],"summary":"Delete Session","description":"Delete a keyword research session and all its messages/clusters.","operationId":"delete_session_keywords_sessions__session_id__delete","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"session_id","in":"path","required":true,"schema":{"type":"string","title":"Session Id"}},{"name":"email","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":{"type":"boolean"},"title":"Response Delete Session Keywords Sessions  Session Id  Delete"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/keywords/sessions/{session_id}/chat":{"post":{"tags":["keywords"],"summary":"Chat","description":"Streaming chat endpoint.\n\nSaves the user message before streaming, saves the assistant message\nafter the stream completes. Returns SSE (``text/event-stream``).\n\nFree plan: 20 messages per session.  Pro plan: unlimited.","operationId":"chat_keywords_sessions__session_id__chat_post","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"session_id","in":"path","required":true,"schema":{"type":"string","title":"Session Id"}},{"name":"email","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/api__routers__keywords__ChatRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/keywords/sessions/{session_id}/clusters":{"post":{"tags":["keywords"],"summary":"Save Clusters","description":"Save extracted keyword clusters for a session.","operationId":"save_clusters_keywords_sessions__session_id__clusters_post","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"session_id","in":"path","required":true,"schema":{"type":"string","title":"Session Id"}},{"name":"email","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SaveClustersRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/KeywordClusterOut"},"title":"Response Save Clusters Keywords Sessions  Session Id  Clusters Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["keywords"],"summary":"Get Clusters","description":"Get all keyword clusters for a session.","operationId":"get_clusters_keywords_sessions__session_id__clusters_get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"session_id","in":"path","required":true,"schema":{"type":"string","title":"Session Id"}},{"name":"email","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/KeywordClusterOut"},"title":"Response Get Clusters Keywords Sessions  Session Id  Clusters Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/keywords/sessions/{session_id}/promote":{"post":{"tags":["keywords"],"summary":"Promote Session","description":"RECORD a research session against a brand: promote its clusters into the\nbrand's tracked keywords (source='research', keeps cluster + intent +\nsession provenance). Pure storage — no external calls.","operationId":"promote_session_keywords_sessions__session_id__promote_post","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"session_id","in":"path","required":true,"schema":{"type":"string","title":"Session Id"}},{"name":"email","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PromoteRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PromoteResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/keywords/domain-profile":{"get":{"tags":["keywords"],"summary":"Domain Profile","description":"Traffic, ranking keywords and URLs for ANY domain — no site ownership,\nno GSC/GA connection. The self-serve version of the domain_keyword_profile\n/ discover_competitors MCP tools, previously reachable only by asking an\nAI agent for it; this puts the same DataForSEO-backed lookup behind a\nplain page a person can use directly.\n\nTwo Labs calls, ~$0.07 total — gated to paid plans and rate-limited per\nuser, the same way the agent-only version already reasoned about cost.","operationId":"domain_profile_keywords_domain_profile_get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"domain","in":"query","required":true,"schema":{"type":"string","minLength":3,"title":"Domain"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":300,"minimum":1,"default":100,"title":"Limit"}},{"name":"email","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DomainProfileOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/xeo-audits/":{"post":{"tags":["xeo-audits"],"summary":"Create Audit","description":"Create a new XEO audit.","operationId":"create_audit_xeo_audits__post","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"email","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateAuditRequest"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AuditOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["xeo-audits"],"summary":"List Audits","description":"List the current user's XEO audits, optionally scoped to one site.\n\nAn audit records a domain, not a site_id, so site_id is resolved to that\nsite's host and matched against the audit's normalised domain. The filter\nruns before the limit: limiting first would return the newest N audits\nacross every brand and then hide most of them.","operationId":"list_audits_xeo_audits__get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"email","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"}},{"name":"site_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Site Id"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"default":25,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/AuditOut"},"title":"Response List Audits Xeo Audits  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/xeo-audits/{audit_id}":{"get":{"tags":["xeo-audits"],"summary":"Get Audit","description":"Get an audit with its phases and messages.","operationId":"get_audit_xeo_audits__audit_id__get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"audit_id","in":"path","required":true,"schema":{"type":"string","title":"Audit Id"}},{"name":"email","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AuditDetailOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["xeo-audits"],"summary":"Delete Audit","description":"Delete an audit and all related data.","operationId":"delete_audit_xeo_audits__audit_id__delete","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"audit_id","in":"path","required":true,"schema":{"type":"string","title":"Audit Id"}},{"name":"email","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":{"type":"boolean"},"title":"Response Delete Audit Xeo Audits  Audit Id  Delete"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/xeo-audits/{audit_id}/chat":{"post":{"tags":["xeo-audits"],"summary":"Chat","description":"Streaming chat endpoint for audit interaction.\n\nReturns SSE with text chunks, tool calls, tool results, and phase advances.","operationId":"chat_xeo_audits__audit_id__chat_post","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"audit_id","in":"path","required":true,"schema":{"type":"string","title":"Audit Id"}},{"name":"email","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/api__routers__xeo_audit__ChatRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/xeo-audits/{audit_id}/advance-phase":{"post":{"tags":["xeo-audits"],"summary":"Advance Phase","description":"Explicitly advance to the next audit phase.","operationId":"advance_phase_xeo_audits__audit_id__advance_phase_post","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"audit_id","in":"path","required":true,"schema":{"type":"string","title":"Audit Id"}},{"name":"email","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Advance Phase Xeo Audits  Audit Id  Advance Phase Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/xeo-audits/{audit_id}/results":{"get":{"tags":["xeo-audits"],"summary":"Get Results","description":"Get all analysis results for an audit.","operationId":"get_results_xeo_audits__audit_id__results_get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"audit_id","in":"path","required":true,"schema":{"type":"string","title":"Audit Id"}},{"name":"result_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Result Type"}},{"name":"email","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/AuditResultOut"},"title":"Response Get Results Xeo Audits  Audit Id  Results Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/xeo-audits/{audit_id}/action-items":{"get":{"tags":["xeo-audits"],"summary":"Get Action Items","description":"Get action items for an audit.","operationId":"get_action_items_xeo_audits__audit_id__action_items_get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"audit_id","in":"path","required":true,"schema":{"type":"string","title":"Audit Id"}},{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status"}},{"name":"email","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ActionItemOut"},"title":"Response Get Action Items Xeo Audits  Audit Id  Action Items Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/xeo-audits/{audit_id}/action-items/{item_id}":{"patch":{"tags":["xeo-audits"],"summary":"Update Action Item","description":"Update an action item's status, priority, etc.","operationId":"update_action_item_xeo_audits__audit_id__action_items__item_id__patch","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"audit_id","in":"path","required":true,"schema":{"type":"string","title":"Audit Id"}},{"name":"item_id","in":"path","required":true,"schema":{"type":"string","title":"Item Id"}},{"name":"email","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateActionItemRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ActionItemOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/xeo-audits/{audit_id}/recheck":{"post":{"tags":["xeo-audits"],"summary":"Recheck Urls","description":"Re-audit specified URLs and compare scores.","operationId":"recheck_urls_xeo_audits__audit_id__recheck_post","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"audit_id","in":"path","required":true,"schema":{"type":"string","title":"Audit Id"}},{"name":"email","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RecheckRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Recheck Urls Xeo Audits  Audit Id  Recheck Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/xeo-audits/{audit_id}/export":{"post":{"tags":["xeo-audits"],"summary":"Export Report","description":"Export audit report.","operationId":"export_report_xeo_audits__audit_id__export_post","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"audit_id","in":"path","required":true,"schema":{"type":"string","title":"Audit Id"}},{"name":"email","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExportRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Export Report Xeo Audits  Audit Id  Export Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/xeo-audits/{audit_id}/schedule":{"post":{"tags":["xeo-audits"],"summary":"Configure Schedule","description":"Configure monthly re-audit schedule.","operationId":"configure_schedule_xeo_audits__audit_id__schedule_post","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"audit_id","in":"path","required":true,"schema":{"type":"string","title":"Audit Id"}},{"name":"email","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/api__routers__xeo_audit__ScheduleRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Configure Schedule Xeo Audits  Audit Id  Schedule Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/.well-known/oauth-authorization-server":{"get":{"tags":["oauth"],"summary":"Authorization Server Metadata","operationId":"authorization_server_metadata__well_known_oauth_authorization_server_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/oauth/register":{"post":{"tags":["oauth"],"summary":"Oauth Register","description":"Register a new OAuth 2.1 client dynamically.","operationId":"oauth_register_oauth_register_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/oauth/authorize":{"get":{"tags":["oauth"],"summary":"Oauth Authorize","description":"Validate OAuth params, store in signed cookie, show sign-in chooser.\n\nThe user picks Google OR email+OTP — both resolve to the same account by\nemail, so users who signed up with an email code (no Google) can connect too.","operationId":"oauth_authorize_oauth_authorize_get","parameters":[{"name":"response_type","in":"query","required":true,"schema":{"type":"string","title":"Response Type"}},{"name":"client_id","in":"query","required":true,"schema":{"type":"string","title":"Client Id"}},{"name":"redirect_uri","in":"query","required":true,"schema":{"type":"string","title":"Redirect Uri"}},{"name":"code_challenge","in":"query","required":true,"schema":{"type":"string","title":"Code Challenge"}},{"name":"code_challenge_method","in":"query","required":false,"schema":{"type":"string","default":"S256","title":"Code Challenge Method"}},{"name":"state","in":"query","required":true,"schema":{"type":"string","title":"State"}},{"name":"scope","in":"query","required":false,"schema":{"type":"string","default":"xyle:read xyle:write","title":"Scope"}},{"name":"resource","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Resource"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/oauth/authorize/google":{"get":{"tags":["oauth"],"summary":"Oauth Authorize Google","description":"Continue the MCP flow via Google (pending cookie already set).","operationId":"oauth_authorize_google_oauth_authorize_google_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/oauth/email/start":{"post":{"tags":["oauth"],"summary":"Oauth Email Start","description":"Send a 6-digit sign-in code to the user's email.","operationId":"oauth_email_start_oauth_email_start_post","requestBody":{"content":{"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/Body_oauth_email_start_oauth_email_start_post"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/oauth/email/verify":{"post":{"tags":["oauth"],"summary":"Oauth Email Verify","description":"Verify the emailed code, resolve the user, redirect to consent.","operationId":"oauth_email_verify_oauth_email_verify_post","requestBody":{"content":{"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/Body_oauth_email_verify_oauth_email_verify_post"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/oauth/callback":{"get":{"tags":["oauth"],"summary":"Oauth Callback","description":"Google OAuth callback — resolve user, redirect to consent page.","operationId":"oauth_callback_oauth_callback_get","parameters":[{"name":"code","in":"query","required":true,"schema":{"type":"string","title":"Code"}},{"name":"state","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"State"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/oauth/consent":{"get":{"tags":["oauth"],"summary":"Oauth Consent Page","description":"Render the consent page showing what Claude wants to access.","operationId":"oauth_consent_page_oauth_consent_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}},"post":{"tags":["oauth"],"summary":"Oauth Consent Action","description":"Handle Allow/Deny from consent page.","operationId":"oauth_consent_action_oauth_consent_post","requestBody":{"content":{"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/Body_oauth_consent_action_oauth_consent_post"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/oauth/token":{"post":{"tags":["oauth"],"summary":"Oauth Token","description":"Exchange authorization code or refresh token for access + refresh tokens.","operationId":"oauth_token_oauth_token_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/framer/connect":{"post":{"tags":["framer"],"summary":"Framer Connect","description":"Bind a Framer project to this account: validate the key by fetching\nproject info through the bridge, then store it encrypted. Re-connecting the\nsame project updates the key in place.","operationId":"framer_connect_framer_connect_post","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"email","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FramerConnectBody"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Framer Connect Framer Connect Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/framer/sites":{"get":{"tags":["framer"],"summary":"Framer Sites","operationId":"framer_sites_framer_sites_get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"email","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Framer Sites Framer Sites Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/framer/sites/{framer_site_id}/op":{"post":{"tags":["framer"],"summary":"Framer Op","description":"Whitelisted passthrough to the bridge for a connected project.","operationId":"framer_op_framer_sites__framer_site_id__op_post","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"framer_site_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Framer Site Id"}},{"name":"email","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FramerOpBody"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Framer Op Framer Sites  Framer Site Id  Op Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/wordpress/sites":{"post":{"tags":["wordpress"],"summary":"Connect Wordpress","description":"Start onboarding for a domain: generate the per-site key and return the\nHostinger deep link + public key + copy-over instructions.\n\nActs in the caller's ACTIVE org (X-Org-Id / org_id, membership-validated),\nlike create_site. If a teammate already has a verified connection for this\ndomain in that org, return it instead of starting a duplicate.","operationId":"connect_wordpress_wordpress_sites_post","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"email","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"}},{"name":"org_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Org Id"}},{"name":"X-Org-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Org-Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/api__routers__wordpress__ConnectBody"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Connect Wordpress Wordpress Sites Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["wordpress"],"summary":"List Sites","operationId":"list_sites_wordpress_sites_get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"email","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"}},{"name":"brand_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Brand Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response List Sites Wordpress Sites Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/wordpress/link/mint":{"post":{"tags":["wordpress"],"summary":"Wp Link Mint","description":"Mint a short-lived, single-use link code for the logged-in user + approved\nsite (called by the xeorank.com Connect page). The plugin redeems it via\n/link/complete.","operationId":"wp_link_mint_wordpress_link_mint_post","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"email","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"}},{"name":"X-Org-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Org-Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LinkMintBody"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Wp Link Mint Wordpress Link Mint Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/wordpress/sites/{site_id}/connection":{"post":{"tags":["wordpress"],"summary":"Set Connection","description":"Capture the connection details. SSH: ssh_ip + username. Plugin: site_url +\nwp_username + app_password. Auto-verifies either way.","operationId":"set_connection_wordpress_sites__site_id__connection_post","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"site_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Site Id"}},{"name":"email","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConnectionBody"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Set Connection Wordpress Sites  Site Id  Connection Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/wordpress/sites/{site_id}/verify":{"post":{"tags":["wordpress"],"summary":"Verify Site","description":"SSH into the host, pin the host key, and detect the WordPress install.\n\nMarks the site `verified` on success, `error` on failure.","operationId":"verify_site_wordpress_sites__site_id__verify_post","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"site_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Site Id"}},{"name":"email","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Verify Site Wordpress Sites  Site Id  Verify Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/wordpress/sites/{site_id}":{"get":{"tags":["wordpress"],"summary":"Get Site","operationId":"get_site_wordpress_sites__site_id__get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"site_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Site Id"}},{"name":"email","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Site Wordpress Sites  Site Id  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["wordpress"],"summary":"Delete Site","operationId":"delete_site_wordpress_sites__site_id__delete","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"site_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Site Id"}},{"name":"email","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Delete Site Wordpress Sites  Site Id  Delete"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/wordpress/sites/{site_id}/capabilities":{"get":{"tags":["wordpress"],"summary":"Site Capabilities","description":"What exists on THIS site and which write path does it: connector version,\nElementor version, Pro, Editor V4 state, the five write paths (sections,\nelements, atomic, patch, blocks) with their conditions, the curated V4\nelement list, and what is not possible through XeoRank at all.","operationId":"site_capabilities_wordpress_sites__site_id__capabilities_get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"site_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Site Id"}},{"name":"email","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Site Capabilities Wordpress Sites  Site Id  Capabilities Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/wordpress/sites/{site_id}/enable-writes":{"post":{"tags":["wordpress"],"summary":"Enable Writes","description":"Turn writes ON for a site. Newly connected sites start with writes OFF\n(WpSite.write_enabled defaults to False); older rows keep their setting.","operationId":"enable_writes_wordpress_sites__site_id__enable_writes_post","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"site_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Site Id"}},{"name":"email","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Enable Writes Wordpress Sites  Site Id  Enable Writes Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/wordpress/sites/{site_id}/disable-writes":{"post":{"tags":["wordpress"],"summary":"Disable Writes","description":"Set a site read-only. Writes default to ON once verified, so this is the\nescape hatch — every write tool then refuses with error=writes_disabled until\nwp_enable_writes is called again. Reads are unaffected.","operationId":"disable_writes_wordpress_sites__site_id__disable_writes_post","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"site_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Site Id"}},{"name":"email","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Disable Writes Wordpress Sites  Site Id  Disable Writes Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/wordpress/sites/{site_id}/pages":{"post":{"tags":["wordpress"],"summary":"Create Page","description":"Create a NEW DRAFT Elementor page with seed content (safe first write —\nnever touches existing/live content). Requires write opt-in.","operationId":"create_page_wordpress_sites__site_id__pages_post","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"site_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Site Id"}},{"name":"email","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreatePageBody"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Create Page Wordpress Sites  Site Id  Pages Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["wordpress"],"summary":"List Pages","description":"List pages/posts/Elementor templates/Editor V4 components (post_type=elementor_component,\nconnector ≥ 0.9.18) on the connected WordPress site.\n\n``search`` narrows by title or slug. It exists because agents overwhelmingly\narrive holding a URL — the user pastes one — and without it the only route\nfrom URL to post_id was to page through the whole site and match by eye.\nOn a 150-page site that is several very large responses to learn one\ninteger, and it was previously accepted-and-ignored rather than rejected,\nso the caller had no signal that the filter did nothing.","operationId":"list_pages_wordpress_sites__site_id__pages_get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"site_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Site Id"}},{"name":"post_type","in":"query","required":false,"schema":{"type":"string","default":"page","title":"Post Type"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":100,"title":"Limit"}},{"name":"search","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Match against title, slug or full URL. A URL is reduced to its last path segment, so a browser address can be pasted directly.","title":"Search"},"description":"Match against title, slug or full URL. A URL is reduced to its last path segment, so a browser address can be pasted directly."},{"name":"email","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response List Pages Wordpress Sites  Site Id  Pages Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/wordpress/sites/{site_id}/pages/{post_id}/clone":{"post":{"tags":["wordpress"],"summary":"Clone Page","description":"Duplicate an Elementor page losslessly, server-side.\n\nThe raw `_elementor_data` never crosses the wire to the caller — it is read,\nround-trip validated, and written to the new page here. A large page's builder\nJSON can be hundreds of KB; sending it out and back would blow the caller's\ncontext and risk corruption on re-serialization. Nothing about the source page\nis modified.","operationId":"clone_page_wordpress_sites__site_id__pages__post_id__clone_post","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"site_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Site Id"}},{"name":"post_id","in":"path","required":true,"schema":{"type":"integer","title":"Post Id"}},{"name":"email","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ClonePageBody"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Clone Page Wordpress Sites  Site Id  Pages  Post Id  Clone Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/wordpress/sites/{dest_site_id}/pages/copy":{"post":{"tags":["wordpress"],"summary":"Copy Page","description":"Copy an Elementor page LOSSLESSLY from one connected site to another.\n\nReads the source page's raw `_elementor_data` server-side (never through the\ncaller's context, so the 200K read cap is irrelevant), optionally re-hosts its\nimages into the destination's media library, and writes the JSON verbatim to a\nnew page. Nothing is dropped — every section, text string and style is preserved.\nPro-only widgets are copied as-is and reported (they need Elementor Pro to render).","operationId":"copy_page_wordpress_sites__dest_site_id__pages_copy_post","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"dest_site_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Dest Site Id"}},{"name":"email","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CopyPageBody"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Copy Page Wordpress Sites  Dest Site Id  Pages Copy Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/wordpress/sites/{site_id}/pages/{post_id}/content":{"post":{"tags":["wordpress"],"summary":"Update Page Content","description":"Replace an existing page's Elementor content (no leftover seed heading).\nProvide `html` (wrapped as one HTML widget) or raw `elementor_data` JSON.\nRound-trip validated, canvas template kept, write-gated. Edit on a DRAFT and\nreview before it's the live homepage.","operationId":"update_page_content_wordpress_sites__site_id__pages__post_id__content_post","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"site_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Site Id"}},{"name":"post_id","in":"path","required":true,"schema":{"type":"integer","title":"Post Id"}},{"name":"email","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateContentBody"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Update Page Content Wordpress Sites  Site Id  Pages  Post Id  Content Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/wordpress/sites/{site_id}/pages/{post_id}/snapshots":{"get":{"tags":["wordpress"],"summary":"List Page Snapshots","description":"The page's pre-write snapshots, newest first (up to 20 per page). Each\nrow says which store it holds (`kind`: elementor | post_content) and whether\nit is restorable; skipped rows are kept so the timeline has no silent gaps.","operationId":"list_page_snapshots_wordpress_sites__site_id__pages__post_id__snapshots_get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"site_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Site Id"}},{"name":"post_id","in":"path","required":true,"schema":{"type":"integer","title":"Post Id"}},{"name":"email","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response List Page Snapshots Wordpress Sites  Site Id  Pages  Post Id  Snapshots Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/wordpress/sites/{site_id}/pages/{post_id}/restore":{"post":{"tags":["wordpress"],"summary":"Restore Page Snapshot","description":"Put a page back to a captured pre-write state. Writes whichever store the\nsnapshot holds — `_elementor_data` for Elementor pages, `post_content` for\nblock/classic pages (plugin transport only for the latter). The current state\nis snapshotted first, so a restore can itself be undone. Write-gated; dry_run\nreports what would be written without touching the site.","operationId":"restore_page_snapshot_wordpress_sites__site_id__pages__post_id__restore_post","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"site_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Site Id"}},{"name":"post_id","in":"path","required":true,"schema":{"type":"integer","title":"Post Id"}},{"name":"email","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RestoreSnapshotBody"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Restore Page Snapshot Wordpress Sites  Site Id  Pages  Post Id  Restore Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/wordpress/sites/{site_id}/pages/{post_id}/upgrade-accordions":{"post":{"tags":["wordpress"],"summary":"Upgrade Accordions Ep","operationId":"upgrade_accordions_ep_wordpress_sites__site_id__pages__post_id__upgrade_accordions_post","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"site_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Site Id"}},{"name":"post_id","in":"path","required":true,"schema":{"type":"integer","title":"Post Id"}},{"name":"email","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpgradeAccordionsBody","default":{"dry_run":false}}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Upgrade Accordions Ep Wordpress Sites  Site Id  Pages  Post Id  Upgrade Accordions Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/wordpress/sites/{site_id}/pages/{post_id}/section":{"post":{"tags":["wordpress"],"summary":"Replace Section","description":"Replace / insert / delete ONE top-level section without rewriting the page.\n\nSafer than wp_update_page for large pages: only the targeted section changes;\nevery other section is preserved exactly. Target by `index` or top-level\n`node_id` (from wp_get_page outline). dry_run=true previews section counts.","operationId":"replace_section_wordpress_sites__site_id__pages__post_id__section_post","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"site_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Site Id"}},{"name":"post_id","in":"path","required":true,"schema":{"type":"integer","title":"Post Id"}},{"name":"email","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SectionOpBody"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Replace Section Wordpress Sites  Site Id  Pages  Post Id  Section Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/wordpress/compare-pages":{"post":{"tags":["wordpress"],"summary":"Compare Pages","description":"Structural diff of two Elementor pages (same or cross-site). Detects dropped\nsections, missing headings/FAQ items, changed CTAs and missing images — so you\ncan prove a clone kept everything the source had.","operationId":"compare_pages_wordpress_compare_pages_post","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"email","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ComparePagesBody"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Compare Pages Wordpress Compare Pages Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/wordpress/widget-schema":{"get":{"tags":["wordpress"],"summary":"Widget Schema Ep","description":"The exact CONTENT fields a native widget spec accepts (counter's number is\n`end`, accordion's answer is `content`, …) so callers stop guessing.","operationId":"widget_schema_ep_wordpress_widget_schema_get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"widget_type","in":"query","required":true,"schema":{"type":"string","title":"Widget Type"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Widget Schema Ep Wordpress Widget Schema Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/wordpress/style-keys":{"get":{"tags":["wordpress"],"summary":"Style Keys","description":"Which style fields a widget supports and the Elementor keys they map to.\n\nRead-only and site-independent: this is a vocabulary lookup, not a page read.","operationId":"style_keys_wordpress_style_keys_get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"widget_type","in":"query","required":true,"schema":{"type":"string","title":"Widget Type"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Style Keys Wordpress Style Keys Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/wordpress/section-recipes":{"get":{"tags":["wordpress"],"summary":"Section Recipes Ep","description":"Design/element suggestions: intent → paste-ready section spec (hero with\nimage+overlay, curved shape divider, split hero, stats band, …). Read-only,\nsite-independent vocabulary lookup — the on-demand answer to 'how do I build X'.","operationId":"section_recipes_ep_wordpress_section_recipes_get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"intent","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Intent"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Section Recipes Ep Wordpress Section Recipes Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/wordpress/sites/{site_id}/pages/{post_id}/patch":{"post":{"tags":["wordpress"],"summary":"Patch Page Content","description":"Surgically edit an Elementor page by element id — change only the named\nfields of existing widgets, preserving ids/structure/other settings. Far cheaper\nthan replacing the whole page. ``dry_run=true`` validates + returns the diff\nwithout writing. Round-trip validated, write-gated (a real apply needs writes on).","operationId":"patch_page_content_wordpress_sites__site_id__pages__post_id__patch_post","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"site_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Site Id"}},{"name":"post_id","in":"path","required":true,"schema":{"type":"integer","title":"Post Id"}},{"name":"email","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PatchPageBody"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Patch Page Content Wordpress Sites  Site Id  Pages  Post Id  Patch Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/wordpress/sites/{site_id}/pages/{post_id}/replicate-node":{"post":{"tags":["wordpress"],"summary":"Replicate Node","description":"Duplicate an element (and its whole subtree) N times as siblings.\n\nThe \"build one, verify it, then replicate\" primitive. Hand-authoring N copies\nof a card is what produces N slightly different cards: every copy is another\nchance to typo a hex or forget a radius, and nothing afterwards holds them\ntogether. A verified source copied N times cannot drift from itself.\n\nEvery id in each copy is re-issued — element ids AND repeater item `_id`s —\nbecause Elementor keys per-element CSS off them, and duplicates would leak\nstyling between copies and make editing one silently change another.","operationId":"replicate_node_wordpress_sites__site_id__pages__post_id__replicate_node_post","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"site_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Site Id"}},{"name":"post_id","in":"path","required":true,"schema":{"type":"integer","title":"Post Id"}},{"name":"email","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReplicateNodeBody"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Replicate Node Wordpress Sites  Site Id  Pages  Post Id  Replicate Node Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/wordpress/sites/{site_id}/pages/{post_id}/bulk-replace":{"post":{"tags":["wordpress"],"summary":"Bulk Replace","description":"Deterministic find/replace across ALL of a page's editable text fields,\nserver-side. Send a tiny [{find, replace}] list; XeoRank reads the page, applies\nthe swaps to every text field, and writes through the validated patch path\n(round-trip checked, write-gated) — returning only a replacement count + a few\nsample diffs, NEVER the full page. Built for template work (swap terminology\nacross many fields) where pasting the whole ops payload inline is the token sink.\nRound-trip safe; dry_run previews the counts + samples without writing.","operationId":"bulk_replace_wordpress_sites__site_id__pages__post_id__bulk_replace_post","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"site_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Site Id"}},{"name":"post_id","in":"path","required":true,"schema":{"type":"integer","title":"Post Id"}},{"name":"email","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BulkReplaceBody"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Bulk Replace Wordpress Sites  Site Id  Pages  Post Id  Bulk Replace Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/wordpress/sites/{site_id}/pages/{post_id}/clone-and-customize":{"post":{"tags":["wordpress"],"summary":"Clone And Customize","description":"Clone a source page into N variants, applying each variant's find/replace to\nits clone — all server-side. ONE call instead of N clone + N patch round-trips\nthat each carry the full page payload. Returns a compact per-variant result\n(post_id, title, replacements_made) — never page content. Reuses the validated\nclone + bulk-replace paths (round-trip checked, write-gated). Each variant is a\ndraft you review; failures are reported per-variant, not fatal to the batch.","operationId":"clone_and_customize_wordpress_sites__site_id__pages__post_id__clone_and_customize_post","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"site_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Site Id"}},{"name":"post_id","in":"path","required":true,"schema":{"type":"integer","title":"Post Id"}},{"name":"email","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CloneCustomizeBody"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Clone And Customize Wordpress Sites  Site Id  Pages  Post Id  Clone And Customize Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/wordpress/sites/{site_id}/media":{"post":{"tags":["wordpress"],"summary":"Upload Media Ep","description":"Sideload an image (from a URL, or from base64 bytes a client already has\nlocally) into the site's WordPress media library and return the HOSTED url —\nuse it in a `sections` image widget or swap an image via wp_patch_page.\nWrite-gated. Plugin transport needs Xyle Connector >= 0.2.0 (>= 0.9.8 for\nimage_data). image_data is plugin-transport only — SSH sites must host the\nimage publicly and use image_url.","operationId":"upload_media_ep_wordpress_sites__site_id__media_post","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"site_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Site Id"}},{"name":"email","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MediaUploadBody"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Upload Media Ep Wordpress Sites  Site Id  Media Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["wordpress"],"summary":"List Media Ep","description":"List recent image attachments in the site's media library (read-only) so an agent\ncan reuse existing images. Plugin transport needs Xyle Connector >= 0.2.2.","operationId":"list_media_ep_wordpress_sites__site_id__media_get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"site_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Site Id"}},{"name":"email","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":30,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response List Media Ep Wordpress Sites  Site Id  Media Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/wordpress/sites/{site_id}/acf/{post_id}":{"get":{"tags":["wordpress"],"summary":"Get Acf Ep","description":"Read the ACF (Advanced Custom Fields) values on a page/post → {post_id, fields}.","operationId":"get_acf_ep_wordpress_sites__site_id__acf__post_id__get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"site_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Site Id"}},{"name":"post_id","in":"path","required":true,"schema":{"type":"integer","title":"Post Id"}},{"name":"email","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Acf Ep Wordpress Sites  Site Id  Acf  Post Id  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["wordpress"],"summary":"Set Acf Ep","description":"Set ACF field values on a page/post. Body: {fields: {name: value}}. Write-gated.","operationId":"set_acf_ep_wordpress_sites__site_id__acf__post_id__post","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"site_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Site Id"}},{"name":"post_id","in":"path","required":true,"schema":{"type":"integer","title":"Post Id"}},{"name":"email","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AcfUpdateBody"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Set Acf Ep Wordpress Sites  Site Id  Acf  Post Id  Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/wordpress/sites/{site_id}/pages/{post_id}/template":{"post":{"tags":["wordpress"],"summary":"Set Page Template","description":"Set a page's WordPress template. Use 'canvas' for a full-bleed design with\nno theme header/title/footer (clones, landing pages). Requires write opt-in.","operationId":"set_page_template_wordpress_sites__site_id__pages__post_id__template_post","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"site_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Site Id"}},{"name":"post_id","in":"path","required":true,"schema":{"type":"integer","title":"Post Id"}},{"name":"email","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SetTemplateBody"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Set Page Template Wordpress Sites  Site Id  Pages  Post Id  Template Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/wordpress/sites/{site_id}/seo-meta":{"get":{"tags":["wordpress"],"summary":"Get Seo Meta","description":"Read a page's SEO title, meta description, EFFECTIVE robots directive and\ncanonical URL as the active SEO plugin (Yoast/RankMath/AIOSEO, or the\nConnector itself) stores them. post_id omitted = the static front page.\nConnector >= 0.9.17.","operationId":"get_seo_meta_wordpress_sites__site_id__seo_meta_get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"site_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Site Id"}},{"name":"post_id","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Post Id"}},{"name":"email","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Seo Meta Wordpress Sites  Site Id  Seo Meta Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["wordpress"],"summary":"Set Seo Meta","description":"Set a page's SEO meta description / SEO title — the small, safe first fix.\npost_id omitted targets the homepage. Writes the active SEO plugin's fields\n(Yoast/RankMath/AIOSEO); with none installed the Connector renders the tag\nitself, so this works on ANY WordPress site. Connector >= 0.7.5.","operationId":"set_seo_meta_wordpress_sites__site_id__seo_meta_post","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"site_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Site Id"}},{"name":"email","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SeoMetaBody"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Set Seo Meta Wordpress Sites  Site Id  Seo Meta Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/wordpress/sites/{site_id}/preview-link":{"post":{"tags":["wordpress"],"summary":"Preview Link","description":"Mint a short-lived tokenized preview URL for a page — drafts included.\nThe URL renders the page server-side (theme CSS, Elementor kit, and per-post\nElementor CSS all load — same as the published page) with no WP login, so\nrender_screenshot can capture it before publishing. Connector >= 0.7.6\nminimum; >= 0.9.10 for CSS to actually render (older connectors mint a\nworking link that renders with NO CSS at all).","operationId":"preview_link_wordpress_sites__site_id__preview_link_post","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"site_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Site Id"}},{"name":"email","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PreviewLinkBody"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Preview Link Wordpress Sites  Site Id  Preview Link Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/wordpress/sites/{site_id}/homepage":{"post":{"tags":["wordpress"],"summary":"Set Homepage","description":"Set a published page as the site's front page (or revert to latest-posts\nwhen post_id is omitted). Changes the live homepage; reversible. Requires\nwrite opt-in.","operationId":"set_homepage_wordpress_sites__site_id__homepage_post","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"site_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Site Id"}},{"name":"email","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SetHomepageBody"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Set Homepage Wordpress Sites  Site Id  Homepage Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/wordpress/sites/{site_id}/themes":{"get":{"tags":["wordpress"],"summary":"List Themes","description":"List installed WordPress themes (name, status, version) via Xyle SSH.","operationId":"list_themes_wordpress_sites__site_id__themes_get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"site_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Site Id"}},{"name":"email","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response List Themes Wordpress Sites  Site Id  Themes Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/wordpress/sites/{site_id}/theme":{"post":{"tags":["wordpress"],"summary":"Set Theme","description":"Activate a theme (e.g. hello-elementor) via Xyle's server-side SSH. Changes\nthe live site's theme; reversible by activating the previous one. Write-gated.","operationId":"set_theme_wordpress_sites__site_id__theme_post","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"site_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Site Id"}},{"name":"email","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SetThemeBody"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Set Theme Wordpress Sites  Site Id  Theme Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/wordpress/sites/{site_id}/pages/{post_id}/slug":{"post":{"tags":["wordpress"],"summary":"Set Page Slug","description":"Change a page's permalink slug (`post_name`).\n\nNothing else in WordPress regenerates a slug from the title — it must be\nwritten explicitly. Editing Elementor content (wp_patch_page / wp_update_page)\ncannot change it, because the slug lives on the post row, not in the builder data.","operationId":"set_page_slug_wordpress_sites__site_id__pages__post_id__slug_post","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"site_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Site Id"}},{"name":"post_id","in":"path","required":true,"schema":{"type":"integer","title":"Post Id"}},{"name":"email","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SetSlugBody"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Set Page Slug Wordpress Sites  Site Id  Pages  Post Id  Slug Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/wordpress/sites/{site_id}/pages/{post_id}/status":{"post":{"tags":["wordpress"],"summary":"Set Page Status","description":"Change a page's status (publish / draft / private). Reversible. Requires\nwrite opt-in. Use status=publish to take a draft live.","operationId":"set_page_status_wordpress_sites__site_id__pages__post_id__status_post","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"site_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Site Id"}},{"name":"post_id","in":"path","required":true,"schema":{"type":"integer","title":"Post Id"}},{"name":"email","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SetStatusBody"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Set Page Status Wordpress Sites  Site Id  Pages  Post Id  Status Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/wordpress/sites/{site_id}/pages/{post_id}":{"get":{"tags":["wordpress"],"summary":"Get Page","description":"Return one page's content as an editable Elementor node list (read-only).\n\nCheap discovery first, then drill in:\n  outline=true                  -> the section/widget skeleton, no values\n  node_id=<id>                  -> just that element's subtree\n  node_id=<id>&self_only=true   -> that element ONLY, no descendants (a container's own styles)\n  widget_type=icon-box          -> only those widgets\n  search=Doctor                 -> only nodes whose value matches\n  path_prefix=2 (or 2,1)        -> only nodes under that outline path (one section)\n  limit/cursor                  -> node-boundary pagination (next_cursor in response)\n  include_styles=true           -> each widget's current style settings\n  include_content=true          -> the full rendered post_content (large)","operationId":"get_page_wordpress_sites__site_id__pages__post_id__get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"site_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Site Id"}},{"name":"post_id","in":"path","required":true,"schema":{"type":"integer","title":"Post Id"}},{"name":"email","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"}},{"name":"include_content","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Include Content"}},{"name":"outline","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Outline"}},{"name":"node_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Node Id"}},{"name":"self_only","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Self Only"}},{"name":"widget_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Widget Type"}},{"name":"search","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Search"}},{"name":"include_styles","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Include Styles"}},{"name":"path_prefix","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Path Prefix"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":500,"minimum":1,"default":120,"title":"Limit"}},{"name":"cursor","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Cursor"}},{"name":"breakpoint","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Breakpoint"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Page Wordpress Sites  Site Id  Pages  Post Id  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["wordpress"],"summary":"Delete Wp Page","description":"Trash a page/post (recoverable). Refused for the homepage.","operationId":"delete_wp_page_wordpress_sites__site_id__pages__post_id__delete","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"site_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Site Id"}},{"name":"post_id","in":"path","required":true,"schema":{"type":"integer","title":"Post Id"}},{"name":"confirm","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Confirm"}},{"name":"email","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Delete Wp Page Wordpress Sites  Site Id  Pages  Post Id  Delete"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/wordpress/sites/{site_id}/brand-kit":{"get":{"tags":["wordpress"],"summary":"Get Brand Kit","description":"Return the site's stored Global Brand Kit plus the token ids the agent can\nreference in page styles (e.g. @primary, typographyToken 'h1').","operationId":"get_brand_kit_wordpress_sites__site_id__brand_kit_get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"site_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Site Id"}},{"name":"email","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Brand Kit Wordpress Sites  Site Id  Brand Kit Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["wordpress"],"summary":"Set Brand Kit","description":"Author/replace the Global Brand Kit and apply it to the Elementor active\nkit (global colors/fonts/type scale). CHANGES EVERY PAGE — requires\nconfirm=true; dry_run=true returns the computed kit settings without writing.\n\nSafety: this endpoint deliberately does NOT go through _assert_editable_page\n(which blocks all kit writes). It is safe because the plugin resolves the\nactive kit id server-side and only ever writes `_elementor_page_settings` — the\nagent cannot redirect it at an arbitrary post.","operationId":"set_brand_kit_wordpress_sites__site_id__brand_kit_post","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"site_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Site Id"}},{"name":"email","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BrandKitBody"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Set Brand Kit Wordpress Sites  Site Id  Brand Kit Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/wordpress/sites/{site_id}/custom-code":{"get":{"tags":["wordpress"],"summary":"List Custom Code","description":"Custom Code snippets on this site, with their raw post meta.\n\nThe meta dump is the point: Elementor Pro is closed source and does not\npublish where a snippet's location/priority live, so this reports the real\nstorage shape on this site's Elementor version rather than an assumed one.","operationId":"list_custom_code_wordpress_sites__site_id__custom_code_get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"site_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Site Id"}},{"name":"email","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response List Custom Code Wordpress Sites  Site Id  Custom Code Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["wordpress"],"summary":"Set Custom Code","description":"Create/update one site-wide Custom Code snippet — global CSS AND JS.\n\nThis is the only site-wide code layer WordPress renders without a theme edit,\nand one snippet carries both (`<style>` and `<script>` in the same body). It\nis what makes backdrop-filter, keyframe animation, sticky/scroll behaviour and\nthird-party embeds deliverable without a manual wp-admin step.\n\n`name` is the idempotency key — re-pushing updates in place rather than\nstacking duplicate snippets that all inject at once.\n\nCHANGES EVERY PAGE, so it requires confirm=true, like the brand kit.\n\nRead `rendered` in the response, not the status code: the plugin loopback-\nfetches the front page and reports whether the code is actually in the HTML.","operationId":"set_custom_code_wordpress_sites__site_id__custom_code_post","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"site_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Site Id"}},{"name":"email","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomCodeBody"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Set Custom Code Wordpress Sites  Site Id  Custom Code Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/wordpress/sites/{site_id}/custom-code/{name}":{"delete":{"tags":["wordpress"],"summary":"Delete Custom Code","description":"Delete a custom-code snippet by NAME (from wp_list_custom_code).","operationId":"delete_custom_code_wordpress_sites__site_id__custom_code__name__delete","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"site_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Site Id"}},{"name":"name","in":"path","required":true,"schema":{"type":"string","title":"Name"}},{"name":"email","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Delete Custom Code Wordpress Sites  Site Id  Custom Code  Name  Delete"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/wordpress/sites/{site_id}/regenerate-css":{"post":{"tags":["wordpress"],"summary":"Regenerate Css","description":"Clear Elementor's CSS cache and bump the versioned per-post CSS files.\n\nEvery write path already does this automatically. This exists for the case\nthe automatic pass cannot cover: a stale versioned `post-<id>.css` still being\nserved from a CDN or page cache after a change landed correctly.","operationId":"regenerate_css_wordpress_sites__site_id__regenerate_css_post","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"site_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Site Id"}},{"name":"email","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Regenerate Css Wordpress Sites  Site Id  Regenerate Css Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/wordpress/sites/{site_id}/templates":{"get":{"tags":["wordpress"],"summary":"List Wp Templates","description":"List Elementor library / Theme Builder templates (read-only).","operationId":"list_wp_templates_wordpress_sites__site_id__templates_get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"site_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Site Id"}},{"name":"email","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response List Wp Templates Wordpress Sites  Site Id  Templates Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["wordpress"],"summary":"Create Wp Template","description":"Create an Elementor Theme Builder template (header/footer/single/archive/…)\nas a DRAFT. Conditions optional here; publishing via conditions endpoint.","operationId":"create_wp_template_wordpress_sites__site_id__templates_post","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"site_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Site Id"}},{"name":"email","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateTemplateBody"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Create Wp Template Wordpress Sites  Site Id  Templates Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/wordpress/sites/{site_id}/templates/{template_id}/conditions":{"post":{"tags":["wordpress"],"summary":"Set Wp Template Conditions","description":"Set Theme Builder display conditions on a template (and optionally publish).","operationId":"set_wp_template_conditions_wordpress_sites__site_id__templates__template_id__conditions_post","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"site_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Site Id"}},{"name":"template_id","in":"path","required":true,"schema":{"type":"integer","title":"Template Id"}},{"name":"email","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TemplateConditionsBody"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Set Wp Template Conditions Wordpress Sites  Site Id  Templates  Template Id  Conditions Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/wordpress/sites/{site_id}/posts/{post_id}/v4-style":{"post":{"tags":["wordpress"],"summary":"V4 Style","description":"Style Editor V4 elements natively: CSS per breakpoint and state into each\nelement's local style class, global classes, interactions. Pages, posts,\ncomponents and library templates. Snapshotted, write-gated; dry_run saves nothing.","operationId":"v4_style_wordpress_sites__site_id__posts__post_id__v4_style_post","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"site_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Site Id"}},{"name":"post_id","in":"path","required":true,"schema":{"type":"integer","title":"Post Id"}},{"name":"email","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/V4StyleBody"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response V4 Style Wordpress Sites  Site Id  Posts  Post Id  V4 Style Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/wordpress/sites/{site_id}/templates/{template_id}/patch":{"post":{"tags":["wordpress"],"summary":"Patch Wp Template","description":"Surgically edit a template (header/footer/…) by element id — change one value\nwithout rebuilding it. dry_run previews the diff. Round-trip validated, write-gated.","operationId":"patch_wp_template_wordpress_sites__site_id__templates__template_id__patch_post","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"site_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Site Id"}},{"name":"template_id","in":"path","required":true,"schema":{"type":"integer","title":"Template Id"}},{"name":"email","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PatchTemplateBody"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Patch Wp Template Wordpress Sites  Site Id  Templates  Template Id  Patch Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/wordpress/sites/{site_id}/templates/{template_id}/content":{"post":{"tags":["wordpress"],"summary":"Update Wp Template","description":"Replace a template's Elementor content (from a native `sections` spec or raw\nelementor_data). For small tweaks prefer wp_patch_template.","operationId":"update_wp_template_wordpress_sites__site_id__templates__template_id__content_post","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"site_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Site Id"}},{"name":"template_id","in":"path","required":true,"schema":{"type":"integer","title":"Template Id"}},{"name":"email","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateTemplateBody"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Update Wp Template Wordpress Sites  Site Id  Templates  Template Id  Content Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/wordpress/sites/{site_id}/templates/{template_id}/status":{"post":{"tags":["wordpress"],"summary":"Set Wp Template Status","description":"Publish / unpublish (draft) / trash a template.","operationId":"set_wp_template_status_wordpress_sites__site_id__templates__template_id__status_post","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"site_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Site Id"}},{"name":"template_id","in":"path","required":true,"schema":{"type":"integer","title":"Template Id"}},{"name":"email","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TemplateStatusBody"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Set Wp Template Status Wordpress Sites  Site Id  Templates  Template Id  Status Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/wordpress/sites/{site_id}/templates/{template_id}/activate":{"post":{"tags":["wordpress"],"summary":"Activate Wp Template","description":"One call to make a template the LIVE header/footer: publish it, set its\ndisplay condition, and demote the previously-active same-type template.","operationId":"activate_wp_template_wordpress_sites__site_id__templates__template_id__activate_post","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"site_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Site Id"}},{"name":"template_id","in":"path","required":true,"schema":{"type":"integer","title":"Template Id"}},{"name":"email","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ActivateTemplateBody"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Activate Wp Template Wordpress Sites  Site Id  Templates  Template Id  Activate Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/wordpress/sites/{site_id}/templates/{template_id}":{"delete":{"tags":["wordpress"],"summary":"Delete Wp Template","description":"Trash a template (recoverable). Clears its conditions first so it stops rendering.","operationId":"delete_wp_template_wordpress_sites__site_id__templates__template_id__delete","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"site_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Site Id"}},{"name":"template_id","in":"path","required":true,"schema":{"type":"integer","title":"Template Id"}},{"name":"confirm","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Confirm"}},{"name":"email","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Delete Wp Template Wordpress Sites  Site Id  Templates  Template Id  Delete"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/wordpress/sites/{site_id}/menus":{"get":{"tags":["wordpress"],"summary":"List Wp Menus","description":"List nav menus (with items) + the theme's registered menu locations.","operationId":"list_wp_menus_wordpress_sites__site_id__menus_get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"site_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Site Id"}},{"name":"email","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response List Wp Menus Wordpress Sites  Site Id  Menus Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["wordpress"],"summary":"Create Wp Menu","description":"Create a nav menu (returns the existing one if the name is taken).","operationId":"create_wp_menu_wordpress_sites__site_id__menus_post","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"site_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Site Id"}},{"name":"email","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateMenuBody"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Create Wp Menu Wordpress Sites  Site Id  Menus Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/wordpress/sites/{site_id}/menus/{menu_id}/items":{"post":{"tags":["wordpress"],"summary":"Set Wp Menu Items","description":"Set a menu's items. Nested dropdowns via each item's `parent_index` (0-based\nindex into this list). Item shape: {title, url?, type?:custom|page|post, object_id?,\nparent_index?}. `replace` (default true) clears existing items first.","operationId":"set_wp_menu_items_wordpress_sites__site_id__menus__menu_id__items_post","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"site_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Site Id"}},{"name":"menu_id","in":"path","required":true,"schema":{"type":"integer","title":"Menu Id"}},{"name":"email","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MenuItemsBody"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Set Wp Menu Items Wordpress Sites  Site Id  Menus  Menu Id  Items Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/wordpress/sites/{site_id}/menu-locations":{"get":{"tags":["wordpress"],"summary":"List Wp Menu Locations","description":"The theme's registered menu locations + current assignments.","operationId":"list_wp_menu_locations_wordpress_sites__site_id__menu_locations_get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"site_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Site Id"}},{"name":"email","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response List Wp Menu Locations Wordpress Sites  Site Id  Menu Locations Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["wordpress"],"summary":"Assign Wp Menu Location","description":"Assign a menu to a theme location (e.g. the header 'primary' slot).","operationId":"assign_wp_menu_location_wordpress_sites__site_id__menu_locations_post","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"site_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Site Id"}},{"name":"email","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AssignLocationBody"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Assign Wp Menu Location Wordpress Sites  Site Id  Menu Locations Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/wordpress/sites/{site_id}/widget-controls":{"get":{"tags":["wordpress"],"summary":"Wp Widget Controls","description":"Real Elementor control schema for a widget, read from the site itself.\n\nOur hand-maintained schema covers ~20 static widgets and nothing dynamic.\nThis asks Elementor directly, so it is right for that version and licence and\nincludes third-party addons. `post_id` + `node_id` resolve the widget type\nfrom the element itself — passing them used to be silently ignored and the\nwhole 142-widget registry came back instead (agent feedback 2026-09-17).","operationId":"wp_widget_controls_wordpress_sites__site_id__widget_controls_get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"site_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Site Id"}},{"name":"type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Type"}},{"name":"tab","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tab"}},{"name":"mode","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Mode"}},{"name":"names","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Names"}},{"name":"offset","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Offset"}},{"name":"limit","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Limit"}},{"name":"post_id","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Post Id"}},{"name":"node_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Node Id"}},{"name":"email","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Wp Widget Controls Wordpress Sites  Site Id  Widget Controls Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/wordpress/plugin/download/dev":{"get":{"tags":["wordpress-public"],"summary":"Download Plugin Dev","description":"DEV channel — the plugin built live from the current source tree.\n\nThe stable route serves a committed, blessed zip; this one serves whatever is\non HEAD. Install this on ONE test site, confirm the new routes behave against\na real WordPress, and only then promote: `wordpress-plugin/build.sh` and\ncommit the zip, which makes this exact build the stable download.\n\nExisting connector releases have shipped changes that were never exercised\nagainst a live install — this is the step that was missing.","operationId":"download_plugin_dev_wordpress_plugin_download_dev_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/wordpress/plugin/download":{"get":{"tags":["wordpress-public"],"summary":"Download Plugin","description":"Serve the Xyle Connector plugin as a zip for the user to upload to WordPress.","operationId":"download_plugin_wordpress_plugin_download_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/wordpress/link/complete":{"post":{"tags":["wordpress-public"],"summary":"Wp Link Complete","description":"Redeemed by the connector plugin with a plugin-generated Application Password.\nPUBLIC (no agent key — the plugin can't hold that shared secret): auth is the\nunguessable one-shot code. Binds the credential to the code's owner + approved\nsite, creates/updates the WpSite, and verifies.","operationId":"wp_link_complete_wordpress_link_complete_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LinkCompleteBody"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Wp Link Complete Wordpress Link Complete Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/render/screenshot":{"get":{"tags":["render"],"summary":"Screenshot","description":"Capture a screenshot (or a focused region) of `url` and return it base64-encoded.","operationId":"screenshot_render_screenshot_get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"url","in":"query","required":true,"schema":{"type":"string","title":"Url"}},{"name":"width","in":"query","required":false,"schema":{"type":"integer","default":1280,"title":"Width"}},{"name":"full_page","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Full Page"}},{"name":"format","in":"query","required":false,"schema":{"type":"string","default":"jpeg","title":"Format"}},{"name":"quality","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":80,"title":"Quality"}},{"name":"selector","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Selector"}},{"name":"clip","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Clip"}},{"name":"email","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Screenshot Render Screenshot Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/internal/telemetry/mcp-call":{"post":{"tags":["telemetry"],"summary":"Ingest Mcp Call","description":"Append one MCP tool-call row. Best-effort: never raises on failure.","operationId":"ingest_mcp_call_internal_telemetry_mcp_call_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/McpCallIn"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Ingest Mcp Call Internal Telemetry Mcp Call Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"APIKeyHeader":[]}]}},"/internal/telemetry/summary":{"get":{"tags":["telemetry"],"summary":"Telemetry Summary","description":"Admin-only per-tool rollup over the last N days + feedback categories.","operationId":"telemetry_summary_internal_telemetry_summary_get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"email","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"}},{"name":"days","in":"query","required":false,"schema":{"type":"integer","maximum":90,"minimum":1,"default":7,"title":"Days"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Telemetry Summary Internal Telemetry Summary Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/agent-feedback":{"post":{"tags":["feedback"],"summary":"Submit Feedback","operationId":"submit_feedback_agent_feedback_post","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"email","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FeedbackIn"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Submit Feedback Agent Feedback Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/health":{"get":{"summary":"Healthcheck","operationId":"healthcheck_health_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HealthResponse"}}}}}}},"/health/deep":{"get":{"summary":"Deep Healthcheck","description":"Dependency-aware health: DB ping + config presence. Used by uptime monitoring.\n\nReturns 200 only when the database answers; 503 otherwise so uptime checks\ncatch outages the shallow /health can't see. No secrets in the payload.","operationId":"deep_healthcheck_health_deep_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}}},"components":{"schemas":{"AcceptSourceBody":{"properties":{"claim_id":{"type":"string","maxLength":40,"minLength":6,"title":"Claim Id"},"url":{"type":"string","maxLength":2000,"minLength":8,"title":"Url"},"title":{"anyOf":[{"type":"string","maxLength":200},{"type":"null"}],"title":"Title"}},"type":"object","required":["claim_id","url"],"title":"AcceptSourceBody"},"AcfUpdateBody":{"properties":{"fields":{"additionalProperties":true,"type":"object","title":"Fields"}},"type":"object","required":["fields"],"title":"AcfUpdateBody"},"ActionItemOut":{"properties":{"id":{"type":"string","title":"Id"},"parent_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Parent Id"},"title":{"type":"string","title":"Title"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"category":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Category"},"priority":{"type":"string","title":"Priority"},"status":{"type":"string","title":"Status"},"url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Url"},"recheck_data":{"title":"Recheck Data"},"sort_order":{"type":"integer","title":"Sort Order"},"created_at":{"title":"Created At"},"updated_at":{"title":"Updated At"}},"type":"object","required":["id","title","priority","status","sort_order","created_at","updated_at"],"title":"ActionItemOut"},"ActivateTemplateBody":{"properties":{"condition":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Condition"},"demote_others":{"type":"boolean","title":"Demote Others","default":true}},"type":"object","title":"ActivateTemplateBody"},"AddKeywordsRequest":{"properties":{"keywords":{"items":{"anyOf":[{"type":"string"},{"$ref":"#/components/schemas/KeywordUpsertItem"}]},"type":"array","maxItems":200,"minItems":1,"title":"Keywords"}},"type":"object","required":["keywords"],"title":"AddKeywordsRequest"},"AddKeywordsResponse":{"properties":{"added":{"type":"integer","title":"Added"},"duplicates":{"type":"integer","title":"Duplicates"},"keywords":{"items":{"$ref":"#/components/schemas/TrackedKeywordOut"},"type":"array","title":"Keywords"}},"type":"object","required":["added","duplicates"],"title":"AddKeywordsResponse"},"AddLeadsRequest":{"properties":{"leads":{"items":{"$ref":"#/components/schemas/LeadIn"},"type":"array","maxItems":500,"minItems":1,"title":"Leads"}},"type":"object","required":["leads"],"title":"AddLeadsRequest"},"AdsKeywordIdeasRequest":{"properties":{"seeds":{"items":{"type":"string"},"type":"array","maxItems":20,"minItems":1,"title":"Seeds"},"limit":{"type":"integer","maximum":300.0,"minimum":1.0,"title":"Limit","default":100},"location_code":{"type":"integer","title":"Location Code","default":2840}},"type":"object","required":["seeds"],"title":"AdsKeywordIdeasRequest"},"AeoSignals":{"properties":{"has_faq_schema":{"type":"boolean","title":"Has Faq Schema","default":false},"has_howto_schema":{"type":"boolean","title":"Has Howto Schema","default":false},"has_article_schema":{"type":"boolean","title":"Has Article Schema","default":false},"has_speakable_schema":{"type":"boolean","title":"Has Speakable Schema","default":false},"has_faq_content":{"type":"boolean","title":"Has Faq Content","default":false},"heading_hierarchy_valid":{"type":"boolean","title":"Heading Hierarchy Valid","default":false},"list_count":{"type":"integer","title":"List Count","default":0},"table_count":{"type":"integer","title":"Table Count","default":0},"concise_answer_count":{"type":"integer","title":"Concise Answer Count","default":0},"definition_count":{"type":"integer","title":"Definition Count","default":0},"avg_sentence_length":{"type":"number","title":"Avg Sentence Length","default":0.0},"has_date_modified":{"type":"boolean","title":"Has Date Modified","default":false},"citation_count":{"type":"integer","title":"Citation Count","default":0},"has_breadcrumb_schema":{"type":"boolean","title":"Has Breadcrumb Schema","default":false},"has_org_schema":{"type":"boolean","title":"Has Org Schema","default":false},"has_video_schema":{"type":"boolean","title":"Has Video Schema","default":false},"has_video_content":{"type":"boolean","title":"Has Video Content","default":false},"question_count":{"type":"integer","title":"Question Count","default":0},"direct_answer_ratio":{"type":"number","title":"Direct Answer Ratio","default":0.0},"direct_answer_count":{"type":"integer","title":"Direct Answer Count","default":0},"unanswered_questions":{"items":{"type":"string"},"type":"array","title":"Unanswered Questions","default":[]}},"type":"object","title":"AeoSignals"},"AiCitationCompetitor":{"properties":{"domain":{"type":"string","title":"Domain"},"citations":{"type":"integer","title":"Citations"}},"type":"object","required":["domain","citations"],"title":"AiCitationCompetitor"},"AiCitationProfileResponse":{"properties":{"surfaces":{"additionalProperties":{"$ref":"#/components/schemas/AiSurfaceStats"},"type":"object","title":"Surfaces"},"total_cited":{"type":"integer","title":"Total Cited","default":0},"distinct_pages":{"type":"integer","title":"Distinct Pages","default":0},"cited_urls":{"items":{"type":"string"},"type":"array","title":"Cited Urls"},"top_competitors":{"items":{"$ref":"#/components/schemas/AiCitationCompetitor"},"type":"array","title":"Top Competitors"},"keywords_checked":{"type":"integer","title":"Keywords Checked","default":0},"location_code":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Location Code"},"fetched_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Fetched At"},"from_cache":{"type":"boolean","title":"From Cache","default":false},"next_step":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Next Step"}},"type":"object","title":"AiCitationProfileResponse","description":"Where this site appears inside Google's AI answers.\n\nCounts are a FLOOR, not a census: the sweep covers the site's own Search\nConsole keywords, so an AI answer citing a page that does not rank\norganically is not counted."},"AiSurfaceStats":{"properties":{"label":{"type":"string","title":"Label"},"checked":{"type":"integer","title":"Checked","default":0},"with_answer":{"type":"integer","title":"With Answer","default":0},"cited":{"type":"integer","title":"Cited","default":0},"pages":{"type":"integer","title":"Pages","default":0},"citation_rate":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Citation Rate"}},"type":"object","required":["label"],"title":"AiSurfaceStats","description":"One AI surface (AI Overviews or AI Mode) over the swept keyword set."},"AnalyzeRequest":{"properties":{"url":{"type":"string","title":"Url"},"content":{"type":"string","title":"Content"},"query":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Query"}},"type":"object","required":["url","content"],"title":"AnalyzeRequest"},"AnalyzeResponse":{"properties":{"url":{"type":"string","title":"Url"},"title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Title"},"analyzed_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Analyzed At"},"query":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Query"},"missing_topics":{"items":{"type":"string"},"type":"array","title":"Missing Topics"},"competitor_themes":{"items":{"type":"string"},"type":"array","title":"Competitor Themes"},"summary":{"type":"string","title":"Summary"},"score":{"type":"number","title":"Score"},"seo_breakdown":{"anyOf":[{"$ref":"#/components/schemas/SeoScoreBreakdown"},{"type":"null"}]},"page_type":{"anyOf":[{"type":"string","enum":["homepage","about","contact","collection","search_results","profile","article","product","service","faq","howto","job_posting","event","recipe","course","dataset","software","medical","webpage","legal","pricing","auth","support","error"]},{"type":"null"}],"title":"Page Type"},"page_type_confidence":{"anyOf":[{"type":"number","maximum":1.0,"minimum":0.0},{"type":"null"}],"title":"Page Type Confidence"},"schema_validation":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Schema Validation"},"grounded":{"type":"boolean","title":"Grounded","default":false},"aeo_score":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Aeo Score"},"aeo_recommendations":{"items":{"type":"string"},"type":"array","title":"Aeo Recommendations"},"geo_score":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Geo Score"},"geo_recommendations":{"items":{"type":"string"},"type":"array","title":"Geo Recommendations"},"recommendations":{"items":{"$ref":"#/components/schemas/Recommendation"},"type":"array","title":"Recommendations"},"verification_signals":{"additionalProperties":{"additionalProperties":true,"type":"object"},"type":"object","title":"Verification Signals"},"passing_signals":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Passing Signals"},"total_signals":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Total Signals"},"aeo_recommendations_all":{"items":{"type":"string"},"type":"array","title":"Aeo Recommendations All"},"geo_recommendations_all":{"items":{"type":"string"},"type":"array","title":"Geo Recommendations All"}},"type":"object","required":["url","summary","score"],"title":"AnalyzeResponse"},"ApiKeyCreated":{"properties":{"id":{"type":"string","title":"Id"},"key_prefix":{"type":"string","title":"Key Prefix"},"name":{"type":"string","title":"Name"},"raw_key":{"type":"string","title":"Raw Key"}},"type":"object","required":["id","key_prefix","name","raw_key"],"title":"ApiKeyCreated"},"ApiKeyOut":{"properties":{"id":{"type":"string","title":"Id"},"key_prefix":{"type":"string","title":"Key Prefix"},"name":{"type":"string","title":"Name"},"created_at":{"type":"string","title":"Created At"},"last_used_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Last Used At"},"revoked":{"type":"boolean","title":"Revoked"}},"type":"object","required":["id","key_prefix","name","created_at","last_used_at","revoked"],"title":"ApiKeyOut"},"AssignLocationBody":{"properties":{"location":{"type":"string","title":"Location"},"menu_id":{"type":"integer","title":"Menu Id"}},"type":"object","required":["location","menu_id"],"title":"AssignLocationBody"},"AssistantStatusOut":{"properties":{"account_id":{"type":"string","title":"Account Id"},"connected":{"type":"boolean","title":"Connected"}},"type":"object","required":["account_id","connected"],"title":"AssistantStatusOut"},"AuditDetailOut":{"properties":{"id":{"type":"string","title":"Id"},"client_name":{"type":"string","title":"Client Name"},"domain":{"type":"string","title":"Domain"},"business_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Business Type"},"objectives":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Objectives"},"competitors":{"title":"Competitors"},"current_phase":{"type":"string","title":"Current Phase"},"status":{"type":"string","title":"Status"},"created_at":{"title":"Created At"},"updated_at":{"title":"Updated At"},"message_count":{"type":"integer","title":"Message Count","default":0},"phases":{"items":{"$ref":"#/components/schemas/AuditPhaseOut"},"type":"array","title":"Phases","default":[]},"messages":{"items":{"$ref":"#/components/schemas/AuditMessageOut"},"type":"array","title":"Messages","default":[]}},"type":"object","required":["id","client_name","domain","current_phase","status","created_at","updated_at"],"title":"AuditDetailOut"},"AuditMessageOut":{"properties":{"id":{"type":"string","title":"Id"},"phase_key":{"type":"string","title":"Phase Key"},"role":{"type":"string","title":"Role"},"content":{"type":"string","title":"Content"},"metadata":{"title":"Metadata"},"created_at":{"title":"Created At"}},"type":"object","required":["id","phase_key","role","content","created_at"],"title":"AuditMessageOut"},"AuditOut":{"properties":{"id":{"type":"string","title":"Id"},"client_name":{"type":"string","title":"Client Name"},"domain":{"type":"string","title":"Domain"},"business_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Business Type"},"objectives":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Objectives"},"competitors":{"title":"Competitors"},"current_phase":{"type":"string","title":"Current Phase"},"status":{"type":"string","title":"Status"},"created_at":{"title":"Created At"},"updated_at":{"title":"Updated At"},"message_count":{"type":"integer","title":"Message Count","default":0},"phases":{"items":{"$ref":"#/components/schemas/AuditPhaseOut"},"type":"array","title":"Phases","default":[]}},"type":"object","required":["id","client_name","domain","current_phase","status","created_at","updated_at"],"title":"AuditOut"},"AuditPhaseOut":{"properties":{"id":{"type":"string","title":"Id"},"phase_key":{"type":"string","title":"Phase Key"},"label":{"type":"string","title":"Label"},"status":{"type":"string","title":"Status"},"summary":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Summary"},"started_at":{"title":"Started At"},"completed_at":{"title":"Completed At"}},"type":"object","required":["id","phase_key","label","status"],"title":"AuditPhaseOut"},"AuditResultOut":{"properties":{"id":{"type":"string","title":"Id"},"result_type":{"type":"string","title":"Result Type"},"url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Url"},"scores":{"title":"Scores"},"data":{"title":"Data"},"created_at":{"title":"Created At"}},"type":"object","required":["id","result_type","created_at"],"title":"AuditResultOut"},"BacklinkDetailItem":{"properties":{"referring_domain":{"type":"string","title":"Referring Domain","default":""},"source_title":{"type":"string","title":"Source Title","default":""},"source_url":{"type":"string","title":"Source Url"},"target_url":{"type":"string","title":"Target Url","default":""},"anchor_text":{"type":"string","title":"Anchor Text"},"alt_text":{"type":"string","title":"Alt Text","default":""},"image_url":{"type":"string","title":"Image Url","default":""},"item_type":{"type":"string","title":"Item Type","default":"anchor"},"attributes":{"items":{"type":"string"},"type":"array","title":"Attributes"},"dofollow":{"type":"boolean","title":"Dofollow"},"semantic_location":{"type":"string","title":"Semantic Location","default":""},"page_type":{"type":"string","enum":["Blog","News","Article","Homepage","Category","Product","Collection","Service","Landing Page","Directory","Forum","Community","Wiki","Documentation","Knowledge Base","Resource Page","Tools Page","Profile Page","Business Listing","Press Release","Event","Job Listing","Review","Portfolio","Case Study","FAQ","Contact","About","Author Page","Tag Page","Archive","Search Results","Login/Register","Media (Image/Video/PDF)","Coupon","Affiliate","Sponsored Content","Government","Educational","Non-Profit","E-commerce"],"title":"Page Type","default":"Landing Page"},"language":{"type":"string","title":"Language","default":""},"mobile_friendly_status":{"anyOf":[{"type":"string","enum":["Mobile friendly","Not mobile friendly"]},{"type":"null"}],"title":"Mobile Friendly Status"},"first_seen":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"First Seen"},"last_seen":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Last Seen"},"page_rank":{"type":"integer","title":"Page Rank","default":0},"links_count":{"type":"integer","title":"Links Count","default":1},"external_links":{"type":"integer","title":"External Links","default":0},"internal_links":{"type":"integer","title":"Internal Links","default":0},"source_status_code":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Source Status Code"},"link_status":{"type":"string","title":"Link Status","default":"active"},"spam_score":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Spam Score"},"toxicity_score":{"type":"number","title":"Toxicity Score","default":0.0},"risk_level":{"type":"string","enum":["low","medium","high"],"title":"Risk Level","default":"low"},"reasons":{"items":{"type":"string"},"type":"array","title":"Reasons"}},"type":"object","required":["source_url","anchor_text","dofollow"],"title":"BacklinkDetailItem"},"BacklinkProfileResponse":{"properties":{"summary":{"$ref":"#/components/schemas/BacklinkSummary"},"detail":{"items":{"$ref":"#/components/schemas/BacklinkDetailItem"},"type":"array","title":"Detail"},"fetched_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Fetched At"},"from_cache":{"type":"boolean","title":"From Cache","default":false},"fetch_status":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Fetch Status"},"fetch_error":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Fetch Error"},"provider":{"$ref":"#/components/schemas/BacklinkProviderInfo"},"last_successful_refresh":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Last Successful Refresh"},"suspect":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Suspect"},"top_anchors":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Top Anchors"},"note":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Note"}},"type":"object","required":["summary"],"title":"BacklinkProfileResponse"},"BacklinkProviderInfo":{"properties":{"name":{"type":"string","title":"Name","default":"DataForSEO Backlinks API"},"connected":{"type":"boolean","title":"Connected","default":false},"status":{"type":"string","title":"Status","default":"disconnected"},"action_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Action Url"},"authority_metric":{"type":"string","title":"Authority Metric","default":"DataForSEO Rank (domain) and Page Rank (per link)"},"authority_scale":{"type":"string","title":"Authority Scale","default":"0-100"},"coverage":{"type":"string","title":"Coverage","default":"Full unique referring-page index via cursor pagination"},"refresh_frequency":{"type":"string","title":"Refresh Frequency","default":"Cached for 24 hours; manual refresh available"}},"type":"object","title":"BacklinkProviderInfo"},"BacklinkSummary":{"properties":{"backlinks_count":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Backlinks Count"},"referring_domains":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Referring Domains"},"domain_rank":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Domain Rank"},"dofollow_count":{"type":"integer","title":"Dofollow Count","default":0},"nofollow_count":{"type":"integer","title":"Nofollow Count","default":0},"active_links":{"type":"integer","title":"Active Links","default":0},"new_links":{"type":"integer","title":"New Links","default":0},"lost_links":{"type":"integer","title":"Lost Links","default":0},"top_anchors":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Top Anchors"},"suspect_links":{"type":"integer","title":"Suspect Links","default":0},"suspect_new_links":{"type":"integer","title":"Suspect New Links","default":0},"risk_breakdown":{"additionalProperties":{"type":"integer"},"type":"object","title":"Risk Breakdown"},"potentially_harmful_domains":{"type":"integer","title":"Potentially Harmful Domains","default":0}},"type":"object","title":"BacklinkSummary"},"BatchInspectionRequest":{"properties":{"urls":{"items":{"type":"string"},"type":"array","maxItems":50,"title":"Urls"}},"type":"object","required":["urls"],"title":"BatchInspectionRequest"},"BatchInspectionResponse":{"properties":{"results":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Results"},"inspected_count":{"type":"integer","title":"Inspected Count","default":0},"error_count":{"type":"integer","title":"Error Count","default":0}},"type":"object","title":"BatchInspectionResponse"},"BlogSignals":{"properties":{"is_blog_post":{"type":"boolean","title":"Is Blog Post","default":false},"has_author_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Has Author Name"},"has_publish_date":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Has Publish Date"},"content_freshness":{"type":"string","title":"Content Freshness","default":"unknown"},"has_social_sharing":{"type":"boolean","title":"Has Social Sharing","default":false},"estimated_reading_time":{"type":"integer","title":"Estimated Reading Time","default":0}},"type":"object","title":"BlogSignals"},"Body_oauth_consent_action_oauth_consent_post":{"properties":{"action":{"type":"string","title":"Action"}},"type":"object","required":["action"],"title":"Body_oauth_consent_action_oauth_consent_post"},"Body_oauth_email_start_oauth_email_start_post":{"properties":{"email":{"type":"string","title":"Email"}},"type":"object","required":["email"],"title":"Body_oauth_email_start_oauth_email_start_post"},"Body_oauth_email_verify_oauth_email_verify_post":{"properties":{"code":{"type":"string","title":"Code"}},"type":"object","required":["code"],"title":"Body_oauth_email_verify_oauth_email_verify_post"},"BrandDiscussRequest":{"properties":{"domain":{"type":"string","title":"Domain"},"profile":{"additionalProperties":true,"type":"object","title":"Profile"},"messages":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Messages"}},"type":"object","required":["domain"],"title":"BrandDiscussRequest"},"BrandGuidelinesSaveRequest":{"properties":{"brand_kit":{"additionalProperties":true,"type":"object","title":"Brand Kit"}},"type":"object","required":["brand_kit"],"title":"BrandGuidelinesSaveRequest"},"BrandKitBody":{"properties":{"brand_kit":{"additionalProperties":true,"type":"object","title":"Brand Kit"},"confirm":{"type":"boolean","title":"Confirm","default":false},"dry_run":{"type":"boolean","title":"Dry Run","default":false},"override_existing_kit":{"type":"boolean","title":"Override Existing Kit","default":false},"scope":{"type":"string","title":"Scope","default":"full"}},"type":"object","required":["brand_kit"],"title":"BrandKitBody"},"BrandingOut":{"properties":{"can_white_label":{"type":"boolean","title":"Can White Label"},"org_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Org Name"}},"type":"object","required":["can_white_label"],"title":"BrandingOut"},"BulkReplaceBody":{"properties":{"replacements":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Replacements"},"whole_word":{"type":"boolean","title":"Whole Word","default":false},"case_insensitive":{"type":"boolean","title":"Case Insensitive","default":false},"dry_run":{"type":"boolean","title":"Dry Run","default":false}},"type":"object","required":["replacements"],"title":"BulkReplaceBody"},"CheckRankingsResponse":{"properties":{"checked":{"type":"integer","title":"Checked"},"status":{"type":"string","title":"Status","default":"completed"},"run_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Run Id"},"keyword_count":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Keyword Count"},"estimated_seconds":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Estimated Seconds"},"next_step":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Next Step"},"not_ranking":{"type":"integer","title":"Not Ranking","default":0},"failed":{"type":"integer","title":"Failed","default":0},"errors":{"items":{"type":"string"},"type":"array","title":"Errors"},"location":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Location"},"note":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Note"},"keywords":{"items":{"$ref":"#/components/schemas/TrackedKeywordOut"},"type":"array","title":"Keywords"}},"type":"object","required":["checked"],"title":"CheckRankingsResponse"},"CitationTestRequest":{"properties":{"prompts":{"items":{"$ref":"#/components/schemas/PromptItem"},"type":"array","title":"Prompts"},"domain":{"type":"string","title":"Domain"},"brand":{"type":"string","title":"Brand"},"providers":{"items":{"type":"string","enum":["gemini","openai","anthropic","perplexity"]},"type":"array","title":"Providers","default":["gemini","openai","anthropic"]},"site_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Site Id"}},"type":"object","required":["prompts","domain","brand"],"title":"CitationTestRequest"},"ClassifyBody":{"properties":{"site_id":{"type":"string","title":"Site Id"},"keywords":{"items":{"type":"string"},"type":"array","title":"Keywords","default":[]},"industry":{"type":"string","title":"Industry","default":""},"store":{"type":"boolean","title":"Store","default":true}},"type":"object","required":["site_id"],"title":"ClassifyBody"},"ClassifyKeywordsRequest":{"properties":{"updates":{"items":{"$ref":"#/components/schemas/KeywordUpsertItem"},"type":"array","maxItems":500,"minItems":1,"title":"Updates"}},"type":"object","required":["updates"],"title":"ClassifyKeywordsRequest"},"ClassifyKeywordsResponse":{"properties":{"updated":{"type":"integer","title":"Updated"},"not_found":{"items":{"type":"string"},"type":"array","title":"Not Found"},"next_step":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Next Step"}},"type":"object","required":["updated"],"title":"ClassifyKeywordsResponse"},"CloneCustomizeBody":{"properties":{"variants":{"items":{"$ref":"#/components/schemas/CloneVariant"},"type":"array","title":"Variants"}},"type":"object","required":["variants"],"title":"CloneCustomizeBody"},"ClonePageBody":{"properties":{"title":{"type":"string","title":"Title"},"slug":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Slug"},"post_type":{"type":"string","title":"Post Type","default":"page"},"status":{"type":"string","title":"Status","default":"draft"}},"type":"object","required":["title"],"title":"ClonePageBody"},"CloneVariant":{"properties":{"title":{"type":"string","title":"Title"},"slug":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Slug"},"status":{"type":"string","title":"Status","default":"draft"},"replacements":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Replacements","default":[]},"whole_word":{"type":"boolean","title":"Whole Word","default":false},"case_insensitive":{"type":"boolean","title":"Case Insensitive","default":false}},"type":"object","required":["title"],"title":"CloneVariant"},"ComparePagesBody":{"properties":{"source_site_id":{"type":"string","format":"uuid","title":"Source Site Id"},"source_post_id":{"type":"integer","title":"Source Post Id"},"clone_site_id":{"type":"string","format":"uuid","title":"Clone Site Id"},"clone_post_id":{"type":"integer","title":"Clone Post Id"}},"type":"object","required":["source_site_id","source_post_id","clone_site_id","clone_post_id"],"title":"ComparePagesBody"},"CompetitorChangeOut":{"properties":{"id":{"type":"string","title":"Id"},"competitor_domain":{"type":"string","title":"Competitor Domain"},"change_type":{"type":"string","title":"Change Type"},"summary":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Summary"},"old_value":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Old Value"},"new_value":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"New Value"},"ai_analysis":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Ai Analysis"},"detected_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Detected At"}},"type":"object","required":["id","competitor_domain","change_type"],"title":"CompetitorChangeOut"},"CompetitorChangesResponse":{"properties":{"changes":{"items":{"$ref":"#/components/schemas/CompetitorChangeOut"},"type":"array","title":"Changes"},"total":{"type":"integer","title":"Total","default":0},"limit":{"type":"integer","title":"Limit","default":50},"offset":{"type":"integer","title":"Offset","default":0}},"type":"object","title":"CompetitorChangesResponse"},"CompetitorCwvOut":{"properties":{"device":{"type":"string","title":"Device"},"lcp_ms":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Lcp Ms"},"inp_ms":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Inp Ms"},"cls":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Cls"},"fcp_ms":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Fcp Ms"},"ttfb_ms":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Ttfb Ms"},"measured_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Measured At"}},"type":"object","required":["device"],"title":"CompetitorCwvOut"},"CompetitorDashboardCard":{"properties":{"id":{"type":"string","title":"Id"},"url":{"type":"string","title":"Url"},"domain":{"type":"string","title":"Domain"},"title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Title"},"favicon_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Favicon Url"},"source":{"type":"string","title":"Source"},"rationale":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Rationale"},"latest_snapshot":{"anyOf":[{"$ref":"#/components/schemas/CompetitorSnapshotOut"},{"type":"null"}]},"cwv_phone":{"anyOf":[{"$ref":"#/components/schemas/CompetitorCwvOut"},{"type":"null"}]},"cwv_desktop":{"anyOf":[{"$ref":"#/components/schemas/CompetitorCwvOut"},{"type":"null"}]},"traffic":{"anyOf":[{"$ref":"#/components/schemas/CompetitorTrafficOut"},{"type":"null"}]},"changes_count_30d":{"type":"integer","title":"Changes Count 30D","default":0},"last_change_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Change At"},"keywords_count":{"type":"integer","title":"Keywords Count","default":0}},"type":"object","required":["id","url","domain","source"],"title":"CompetitorDashboardCard"},"CompetitorDashboardResponse":{"properties":{"site_domain":{"type":"string","title":"Site Domain"},"site_cwv_phone":{"anyOf":[{"$ref":"#/components/schemas/CompetitorCwvOut"},{"type":"null"}]},"site_cwv_desktop":{"anyOf":[{"$ref":"#/components/schemas/CompetitorCwvOut"},{"type":"null"}]},"competitors":{"items":{"$ref":"#/components/schemas/CompetitorDashboardCard"},"type":"array","title":"Competitors"},"recent_changes":{"items":{"$ref":"#/components/schemas/CompetitorChangeOut"},"type":"array","title":"Recent Changes"},"setup_done":{"type":"boolean","title":"Setup Done","default":false}},"type":"object","required":["site_domain"],"title":"CompetitorDashboardResponse"},"CompetitorKeywordOut":{"properties":{"keyword":{"type":"string","title":"Keyword"},"search_volume":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Search Volume"},"your_position":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Your Position"},"competitor_position":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Competitor Position"},"overlap_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Overlap Type"}},"type":"object","required":["keyword"],"title":"CompetitorKeywordOut"},"CompetitorKeywordsResponse":{"properties":{"keywords":{"items":{"$ref":"#/components/schemas/CompetitorKeywordOut"},"type":"array","title":"Keywords"},"competitor_domain":{"type":"string","title":"Competitor Domain","default":""},"total":{"type":"integer","title":"Total","default":0}},"type":"object","title":"CompetitorKeywordsResponse"},"CompetitorPageOut":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"query":{"type":"string","title":"Query"},"url":{"type":"string","title":"Url"},"position":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Position"},"title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Title"},"meta_desc":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Meta Desc"},"headings":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Headings"},"word_count":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Word Count"},"entities":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Entities"},"cache_until":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Cache Until"}},"type":"object","required":["id","query","url"],"title":"CompetitorPageOut"},"CompetitorSelectRequest":{"properties":{"competitor_link_ids":{"items":{"type":"string"},"type":"array","maxItems":10,"minItems":1,"title":"Competitor Link Ids"}},"type":"object","required":["competitor_link_ids"],"title":"CompetitorSelectRequest"},"CompetitorSetupRequest":{"properties":{"usp":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Usp"},"icp":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Icp"},"industry":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Industry"},"target_audience":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Target Audience"},"known_competitors":{"items":{"type":"string"},"type":"array","title":"Known Competitors"},"max_candidates":{"type":"integer","maximum":20.0,"minimum":1.0,"title":"Max Candidates","default":12}},"type":"object","title":"CompetitorSetupRequest"},"CompetitorSnapshotOut":{"properties":{"title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Title"},"meta_desc":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Meta Desc"},"headings":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Headings"},"word_count":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Word Count"},"crawled_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Crawled At"}},"type":"object","title":"CompetitorSnapshotOut"},"CompetitorTrafficOut":{"properties":{"estimated_visits":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Estimated Visits"},"organic_traffic":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Organic Traffic"},"paid_traffic":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Paid Traffic"},"traffic_trend":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Traffic Trend"},"organic_keywords_count":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Organic Keywords Count"},"backlinks_count":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Backlinks Count"},"referring_domains":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Referring Domains"},"fetched_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Fetched At"}},"type":"object","title":"CompetitorTrafficOut"},"ConnectionBody":{"properties":{"ssh_ip":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Ssh Ip"},"username":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Username"},"wp_root":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Wp Root"},"wp_user":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Wp User"},"site_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Site Url"},"wp_username":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Wp Username"},"app_password":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"App Password"}},"type":"object","title":"ConnectionBody"},"ConsumeUsageRequest":{"properties":{"metric":{"type":"string","enum":["ai_visibility.free.monthly","ai_visibility.deep.monthly","ai_visibility.full.monthly"],"title":"Metric"}},"type":"object","required":["metric"],"title":"ConsumeUsageRequest"},"ContentQualitySignals":{"properties":{"word_count":{"type":"integer","title":"Word Count","default":0},"sentence_count":{"type":"integer","title":"Sentence Count","default":0},"paragraph_count":{"type":"integer","title":"Paragraph Count","default":0},"avg_words_per_sentence":{"type":"number","title":"Avg Words Per Sentence","default":0.0},"flesch_reading_ease":{"type":"number","title":"Flesch Reading Ease","default":0.0},"flesch_kincaid_grade":{"type":"number","title":"Flesch Kincaid Grade","default":0.0},"reading_time_minutes":{"type":"integer","title":"Reading Time Minutes","default":0},"vocabulary_richness":{"type":"number","title":"Vocabulary Richness","default":0.0},"content_depth_score":{"type":"number","title":"Content Depth Score","default":0.0},"humanness_score":{"type":"number","title":"Humanness Score","default":0.0},"eeat_score":{"type":"number","title":"Eeat Score","default":0.0},"has_author":{"type":"boolean","title":"Has Author","default":false},"has_publish_date":{"type":"boolean","title":"Has Publish Date","default":false},"has_updated_date":{"type":"boolean","title":"Has Updated Date","default":false},"has_sources_section":{"type":"boolean","title":"Has Sources Section","default":false}},"type":"object","title":"ContentQualitySignals"},"ContinueSiteCrawlRequest":{"properties":{"additional_pages":{"type":"integer","maximum":5000.0,"minimum":1.0,"title":"Additional Pages","default":500}},"type":"object","title":"ContinueSiteCrawlRequest"},"CopyPageBody":{"properties":{"source_site_id":{"type":"string","format":"uuid","title":"Source Site Id"},"source_post_id":{"type":"integer","title":"Source Post Id"},"title":{"type":"string","title":"Title"},"slug":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Slug"},"status":{"type":"string","title":"Status","default":"draft"},"post_type":{"type":"string","title":"Post Type","default":"page"},"rehost_images":{"type":"boolean","title":"Rehost Images","default":true}},"type":"object","required":["source_site_id","source_post_id","title"],"title":"CopyPageBody"},"CostDailyPoint":{"properties":{"date":{"type":"string","title":"Date"},"total_microcents":{"type":"integer","title":"Total Microcents","default":0}},"type":"object","required":["date"],"title":"CostDailyPoint"},"CostOperationBreakdown":{"properties":{"provider":{"type":"string","title":"Provider"},"operation":{"type":"string","title":"Operation"},"total_microcents":{"type":"integer","title":"Total Microcents","default":0},"total_dollars":{"type":"number","title":"Total Dollars","default":0.0},"call_count":{"type":"integer","title":"Call Count","default":0}},"type":"object","required":["provider","operation"],"title":"CostOperationBreakdown"},"CostProviderBreakdown":{"properties":{"provider":{"type":"string","title":"Provider"},"total_microcents":{"type":"integer","title":"Total Microcents","default":0},"total_dollars":{"type":"number","title":"Total Dollars","default":0.0},"call_count":{"type":"integer","title":"Call Count","default":0}},"type":"object","required":["provider"],"title":"CostProviderBreakdown"},"CrawlCounts":{"properties":{"fetched_pages":{"type":"integer","title":"Fetched Pages","default":0},"recorded_urls":{"type":"integer","title":"Recorded Urls","default":0},"not_fetched_urls":{"type":"integer","title":"Not Fetched Urls","default":0}},"type":"object","title":"CrawlCounts"},"CrawlGraphEdge":{"properties":{"source":{"type":"string","title":"Source"},"target":{"type":"string","title":"Target"},"anchor":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Anchor"}},"type":"object","required":["source","target"],"title":"CrawlGraphEdge"},"CrawlGraphNode":{"properties":{"id":{"type":"string","title":"Id"},"url":{"type":"string","title":"Url"},"depth":{"type":"integer","title":"Depth"},"status":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Status"},"score":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Score"}},"type":"object","required":["id","url","depth"],"title":"CrawlGraphNode"},"CrawlGraphResponse":{"properties":{"nodes":{"items":{"$ref":"#/components/schemas/CrawlGraphNode"},"type":"array","title":"Nodes"},"edges":{"items":{"$ref":"#/components/schemas/CrawlGraphEdge"},"type":"array","title":"Edges"}},"type":"object","title":"CrawlGraphResponse"},"CrawlIssueOut":{"properties":{"id":{"type":"string","title":"Id"},"page_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Page Id"},"category":{"type":"string","title":"Category"},"severity":{"type":"string","title":"Severity"},"message":{"type":"string","title":"Message"},"page_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Page Url"},"details":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Details"},"rule_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Rule Id"},"evidence":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Evidence"},"actionable":{"type":"boolean","title":"Actionable","default":true}},"type":"object","required":["id","category","severity","message"],"title":"CrawlIssueOut"},"CrawlIssuesResponse":{"properties":{"issues":{"items":{"$ref":"#/components/schemas/CrawlIssueOut"},"type":"array","title":"Issues"},"counts_by_severity":{"additionalProperties":{"type":"integer"},"type":"object","title":"Counts By Severity"},"counts_by_category":{"additionalProperties":{"type":"integer"},"type":"object","title":"Counts By Category"},"total":{"type":"integer","title":"Total","default":0},"limit":{"type":"integer","title":"Limit","default":200},"offset":{"type":"integer","title":"Offset","default":0}},"type":"object","title":"CrawlIssuesResponse"},"CrawlJobListResponse":{"properties":{"jobs":{"items":{"$ref":"#/components/schemas/CrawlJobStatus"},"type":"array","title":"Jobs"}},"type":"object","title":"CrawlJobListResponse"},"CrawlJobStatus":{"properties":{"job_id":{"type":"string","title":"Job Id"},"seed_url":{"type":"string","title":"Seed Url"},"status":{"type":"string","enum":["queued","running","completed","partial","failed","cancelled"],"title":"Status"},"stage":{"type":"string","title":"Stage","default":"queued"},"status_detail":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status Detail"},"pages_crawled":{"type":"integer","title":"Pages Crawled","default":0},"pages_discovered":{"type":"integer","title":"Pages Discovered","default":0},"counts":{"anyOf":[{"$ref":"#/components/schemas/CrawlCounts"},{"type":"null"}]},"errors_count":{"type":"integer","title":"Errors Count","default":0},"health_score":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Health Score"},"health_breakdown":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Health Breakdown"},"coverage":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Coverage"},"error_message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error Message"},"retry_count":{"type":"integer","title":"Retry Count","default":0},"last_heartbeat_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Heartbeat At"},"dispatch_required":{"type":"boolean","title":"Dispatch Required","default":false},"started_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Started At"},"finished_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Finished At"},"created_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Created At"}},"type":"object","required":["job_id","seed_url","status"],"title":"CrawlJobStatus"},"CrawlPagesResponse":{"properties":{"pages":{"items":{"$ref":"#/components/schemas/CrawledPageSummary"},"type":"array","title":"Pages"},"total":{"type":"integer","title":"Total","default":0},"limit":{"type":"integer","title":"Limit","default":50},"offset":{"type":"integer","title":"Offset","default":0}},"type":"object","title":"CrawlPagesResponse"},"CrawlRequest":{"properties":{"url":{"type":"string","title":"Url"},"site_domain":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Site Domain"}},"type":"object","required":["url"],"title":"CrawlRequest"},"CrawlResponse":{"properties":{"url":{"type":"string","title":"Url"},"title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Title"},"meta_desc":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Meta Desc"},"headings":{"items":{"type":"string"},"type":"array","title":"Headings"},"word_count":{"type":"integer","title":"Word Count","default":0},"aeo_signals":{"anyOf":[{"$ref":"#/components/schemas/AeoSignals"},{"type":"null"}]},"geo_signals":{"anyOf":[{"$ref":"#/components/schemas/GeoSignals"},{"type":"null"}]},"technical_seo":{"anyOf":[{"$ref":"#/components/schemas/TechnicalSeoSignals"},{"type":"null"}]},"rendering":{"anyOf":[{"$ref":"#/components/schemas/RenderingInfo"},{"type":"null"}]},"content_quality":{"anyOf":[{"$ref":"#/components/schemas/ContentQualitySignals"},{"type":"null"}]},"link_analysis":{"anyOf":[{"$ref":"#/components/schemas/LinkAnalysis"},{"type":"null"}]},"blog_signals":{"anyOf":[{"$ref":"#/components/schemas/BlogSignals"},{"type":"null"}]}},"type":"object","required":["url"],"title":"CrawlResponse"},"CrawledPageSummary":{"properties":{"id":{"type":"string","title":"Id"},"url":{"type":"string","title":"Url"},"http_status":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Http Status"},"depth":{"type":"integer","title":"Depth","default":0},"link_reachable":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Link Reachable"},"title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Title"},"word_count":{"type":"integer","title":"Word Count","default":0},"seo_score":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Seo Score"},"aeo_score":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Aeo Score"},"geo_score":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Geo Score"},"indexable":{"type":"boolean","title":"Indexable","default":true},"issues_count":{"type":"integer","title":"Issues Count","default":0},"error":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error"},"checks_unavailable":{"items":{"type":"string"},"type":"array","title":"Checks Unavailable"},"page_type":{"anyOf":[{"type":"string","enum":["homepage","about","contact","collection","search_results","profile","article","product","service","faq","howto","job_posting","event","recipe","course","dataset","software","medical","webpage","legal","pricing","auth","support","error"]},{"type":"null"}],"title":"Page Type"},"page_type_confidence":{"anyOf":[{"type":"number","maximum":1.0,"minimum":0.0},{"type":"null"}],"title":"Page Type Confidence"},"judgments":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Judgments"},"rich_result_eligibility":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Rich Result Eligibility"},"schema_validation_errors":{"items":{"$ref":"#/components/schemas/SchemaFinding"},"type":"array","title":"Schema Validation Errors"},"schema_validation_warnings":{"items":{"$ref":"#/components/schemas/SchemaFinding"},"type":"array","title":"Schema Validation Warnings"},"schema_property_checklist":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Schema Property Checklist"},"schema_profile_verdict":{"anyOf":[{"type":"string","enum":["valid","valid_with_warnings","invalid","missing","not_applicable"]},{"type":"null"}],"title":"Schema Profile Verdict"},"rich_results_verdict":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Rich Results Verdict"},"rich_results_items":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Rich Results Items"}},"type":"object","required":["id","url"],"title":"CrawledPageSummary"},"CreateAuditRequest":{"properties":{"client_name":{"type":"string","maxLength":255,"minLength":1,"title":"Client Name"},"domain":{"type":"string","maxLength":512,"minLength":1,"title":"Domain"},"notes":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Notes"}},"type":"object","required":["client_name","domain"],"title":"CreateAuditRequest"},"CreateBody":{"properties":{"name":{"type":"string","title":"Name"},"private":{"type":"boolean","title":"Private","default":true},"template":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Template"}},"type":"object","required":["name"],"title":"CreateBody"},"CreateBriefBody":{"properties":{"target_keyword":{"type":"string","maxLength":300,"minLength":2,"title":"Target Keyword"},"kind":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Kind"},"intent":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Intent"},"title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Title"},"opportunity":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Opportunity"},"notes":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Notes"},"live_serp":{"type":"boolean","title":"Live Serp","default":true},"goal_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Goal Id"}},"type":"object","required":["target_keyword"],"title":"CreateBriefBody"},"CreateKeyRequest":{"properties":{"name":{"type":"string","title":"Name","default":"default"}},"type":"object","title":"CreateKeyRequest"},"CreateMenuBody":{"properties":{"name":{"type":"string","title":"Name"}},"type":"object","required":["name"],"title":"CreateMenuBody"},"CreateOrgBody":{"properties":{"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"}},"type":"object","title":"CreateOrgBody"},"CreatePageBody":{"properties":{"title":{"type":"string","title":"Title"},"post_type":{"type":"string","title":"Post Type","default":"page"},"heading":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Heading"},"subtext":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Subtext"},"sections":{"anyOf":[{"items":{},"type":"array"},{"type":"null"}],"title":"Sections"},"elementor_data":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Elementor Data"},"blocks":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Blocks"},"atomic":{"anyOf":[{"items":{},"type":"array"},{"type":"null"}],"title":"Atomic"},"template":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Template"},"featured_image":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Featured Image"},"categories":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Categories"},"tags":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Tags"},"dry_run":{"type":"boolean","title":"Dry Run","default":false}},"type":"object","required":["title"],"title":"CreatePageBody"},"CreateSessionRequest":{"properties":{"site_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Site Id"},"title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Title"},"topic":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Topic"},"country":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Country"},"language":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Language"}},"type":"object","title":"CreateSessionRequest"},"CreateSiteRequest":{"properties":{"domain":{"type":"string","title":"Domain"},"industry":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Industry"},"target_audience":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Target Audience"},"usp":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Usp"},"icp":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Icp"}},"type":"object","required":["domain"],"title":"CreateSiteRequest"},"CreateTemplateBody":{"properties":{"title":{"type":"string","title":"Title"},"template_type":{"type":"string","title":"Template Type"},"sections":{"anyOf":[{"items":{},"type":"array"},{"type":"null"}],"title":"Sections"},"elementor_data":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Elementor Data"},"conditions":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Conditions"},"publish":{"type":"boolean","title":"Publish","default":false},"page_settings":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Page Settings"}},"type":"object","required":["title","template_type"],"title":"CreateTemplateBody"},"CustomCodeBody":{"properties":{"name":{"type":"string","title":"Name"},"code":{"type":"string","title":"Code"},"location":{"type":"string","title":"Location","default":"head"},"priority":{"type":"integer","title":"Priority","default":10},"conditions":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Conditions"},"status":{"type":"string","title":"Status","default":"publish"},"verify":{"type":"boolean","title":"Verify","default":true},"confirm":{"type":"boolean","title":"Confirm","default":false}},"type":"object","required":["name","code"],"title":"CustomCodeBody"},"CwvCheckRequest":{"properties":{"url":{"type":"string","title":"Url"},"device":{"type":"string","title":"Device","default":"mobile"}},"type":"object","required":["url"],"title":"CwvCheckRequest"},"CwvMetricOut":{"properties":{"id":{"type":"string","title":"Id"},"site_id":{"type":"string","title":"Site Id"},"url":{"type":"string","title":"Url"},"source":{"type":"string","title":"Source"},"device":{"type":"string","title":"Device"},"lcp_ms":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Lcp Ms"},"inp_ms":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Inp Ms"},"cls":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Cls"},"fcp_ms":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Fcp Ms"},"ttfb_ms":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Ttfb Ms"},"tbt_ms":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Tbt Ms"},"speed_index":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Speed Index"},"performance_score":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Performance Score"},"dom_size":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Dom Size"},"dom_depth":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Dom Depth"},"page_load_ms":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Page Load Ms"},"diagnostics":{"anyOf":[{"additionalProperties":true,"type":"object"},{"items":{"additionalProperties":true,"type":"object"},"type":"array"},{"type":"null"}],"title":"Diagnostics"},"measured_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Measured At"}},"type":"object","required":["id","site_id","url","source","device"],"title":"CwvMetricOut"},"DeclareVoiceBody":{"properties":{"answers":{"additionalProperties":{"type":"string"},"type":"object","title":"Answers"}},"type":"object","required":["answers"],"title":"DeclareVoiceBody"},"DeliveryUpdate":{"properties":{"status":{"type":"string","title":"Status"},"error":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error"}},"type":"object","required":["status"],"title":"DeliveryUpdate"},"DesignLintBody":{"properties":{"site_id":{"type":"string","title":"Site Id"},"post_id":{"type":"integer","title":"Post Id"}},"type":"object","required":["site_id","post_id"],"title":"DesignLintBody"},"DiscoverCompetitorsRequest":{"properties":{"max_results":{"type":"integer","maximum":15.0,"minimum":1.0,"title":"Max Results","default":8}},"type":"object","title":"DiscoverCompetitorsRequest"},"DiscoverContactsRequest":{"properties":{"site_id":{"type":"string","title":"Site Id"},"domains":{"items":{"type":"string"},"type":"array","title":"Domains"}},"type":"object","required":["site_id","domains"],"title":"DiscoverContactsRequest"},"DiscoveryReasoning":{"properties":{"summary":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Summary"},"category":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Category"},"target_user":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Target User"},"core_job":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Core Job"},"differentiator":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Differentiator"}},"type":"object","title":"DiscoveryReasoning"},"DomainBody":{"properties":{"site_id":{"type":"string","title":"Site Id"},"domain":{"type":"string","title":"Domain"}},"type":"object","required":["site_id","domain"],"title":"DomainBody"},"DomainProfileOut":{"properties":{"domain":{"type":"string","title":"Domain"},"estimated_visits":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Estimated Visits"},"organic_traffic":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Organic Traffic"},"paid_traffic":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Paid Traffic"},"organic_keywords_count":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Organic Keywords Count"},"backlinks_count":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Backlinks Count"},"referring_domains":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Referring Domains"},"traffic_trend":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Traffic Trend"},"keywords":{"items":{"$ref":"#/components/schemas/DomainRankedKeywordOut"},"type":"array","title":"Keywords","default":[]},"keywords_returned":{"type":"integer","title":"Keywords Returned","default":0},"note":{"type":"string","title":"Note","default":"Source is DataForSEO's index of Google — it lags a live SERP and is not device- or location-specific."}},"type":"object","required":["domain"],"title":"DomainProfileOut","description":"SEMrush-style domain overview: works for ANY domain, no site ownership\nor GSC/GA connection required — just DataForSEO's index of Google."},"DomainRankedKeywordOut":{"properties":{"keyword":{"type":"string","title":"Keyword"},"search_volume":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Search Volume"},"position":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Position"},"url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Url"}},"type":"object","required":["keyword"],"title":"DomainRankedKeywordOut"},"DraftBody":{"properties":{"brief_id":{"type":"string","title":"Brief Id"},"max_passes":{"type":"integer","title":"Max Passes","default":3},"save":{"type":"boolean","title":"Save","default":true}},"type":"object","required":["brief_id"],"title":"DraftBody"},"DraftEmailRequest":{"properties":{"to":{"type":"string","maxLength":320,"title":"To"},"subject":{"type":"string","maxLength":300,"minLength":1,"title":"Subject"},"title":{"type":"string","maxLength":200,"minLength":1,"title":"Title"},"body_html":{"type":"string","maxLength":50000,"minLength":1,"title":"Body Html"},"cta_label":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Cta Label"},"cta_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Cta Url"},"footnote":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Footnote"},"unsubscribe":{"type":"boolean","title":"Unsubscribe","default":true}},"type":"object","required":["to","subject","title","body_html"],"title":"DraftEmailRequest"},"DraftRequest":{"properties":{"site_id":{"type":"string","title":"Site Id"},"target_domain":{"type":"string","title":"Target Domain"},"contact_email":{"type":"string","title":"Contact Email"},"scan_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Scan Id"}},"type":"object","required":["site_id","target_domain","contact_email"],"title":"DraftRequest"},"EditSectionBody":{"properties":{"site_id":{"type":"string","title":"Site Id"},"post_id":{"type":"integer","title":"Post Id"},"node_id":{"type":"string","title":"Node Id"},"instruction":{"type":"string","title":"Instruction"},"dry_run":{"type":"boolean","title":"Dry Run","default":false}},"type":"object","required":["site_id","post_id","node_id","instruction"],"title":"EditSectionBody"},"ExportDocRequest":{"properties":{"url":{"type":"string","title":"Url"},"report_data":{"additionalProperties":true,"type":"object","title":"Report Data"},"site_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Site Id"}},"type":"object","required":["url","report_data"],"title":"ExportDocRequest"},"ExportDocResponse":{"properties":{"doc_id":{"type":"string","title":"Doc Id"},"doc_url":{"type":"string","title":"Doc Url"}},"type":"object","required":["doc_id","doc_url"],"title":"ExportDocResponse"},"ExportRequest":{"properties":{"format":{"type":"string","title":"Format","default":"html"}},"type":"object","title":"ExportRequest"},"FailedReportRequest":{"properties":{"period_type":{"type":"string","title":"Period Type"},"period_start":{"type":"string","format":"date-time","title":"Period Start"},"period_end":{"type":"string","format":"date-time","title":"Period End"},"error":{"type":"string","maxLength":2000,"minLength":1,"title":"Error"},"timezone":{"type":"string","maxLength":64,"minLength":1,"title":"Timezone","default":"UTC"}},"type":"object","required":["period_type","period_start","period_end","error"],"title":"FailedReportRequest"},"FeedbackIn":{"properties":{"category":{"type":"string","title":"Category"},"message":{"type":"string","maxLength":4000,"title":"Message"},"severity":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Severity"},"site_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Site Id"},"tool":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tool"}},"type":"object","required":["category","message"],"title":"FeedbackIn"},"ForGoalBody":{"properties":{"target_keyword":{"anyOf":[{"type":"string","maxLength":300},{"type":"null"}],"title":"Target Keyword"},"notes":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Notes"},"live_serp":{"type":"boolean","title":"Live Serp","default":true}},"type":"object","title":"ForGoalBody"},"ForPageBody":{"properties":{"url":{"type":"string","maxLength":2000,"minLength":10,"title":"Url"},"target_keyword":{"anyOf":[{"type":"string","maxLength":300},{"type":"null"}],"title":"Target Keyword"},"notes":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Notes"},"live_serp":{"type":"boolean","title":"Live Serp","default":true},"goal_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Goal Id"},"author_wrote_it":{"type":"boolean","title":"Author Wrote It","default":false}},"type":"object","required":["url"],"title":"ForPageBody"},"FramerConnectBody":{"properties":{"project":{"type":"string","title":"Project"},"api_key":{"type":"string","title":"Api Key"},"label":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Label"},"site_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Site Id"},"domain":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Domain"}},"type":"object","required":["project","api_key"],"title":"FramerConnectBody"},"FramerOpBody":{"properties":{"op":{"type":"string","title":"Op"},"args":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Args"}},"type":"object","required":["op"],"title":"FramerOpBody"},"GaSelectionRequest":{"properties":{"property_id":{"type":"string","maxLength":64,"minLength":1,"title":"Property Id"},"data_stream_id":{"type":"string","maxLength":64,"minLength":1,"title":"Data Stream Id"},"confirm_mismatch":{"type":"boolean","title":"Confirm Mismatch","default":false}},"type":"object","required":["property_id","data_stream_id"],"title":"GaSelectionRequest"},"GapOut":{"properties":{"query":{"type":"string","title":"Query"},"missing_topics":{"items":{"type":"string"},"type":"array","title":"Missing Topics"},"ctr_issue":{"type":"boolean","title":"Ctr Issue","default":false},"position_bucket":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Position Bucket"},"competitor_count":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Competitor Count"},"our_word_count":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Our Word Count"},"competitor_word_count":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Competitor Word Count"},"computed_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Computed At"}},"type":"object","required":["query"],"title":"GapOut"},"GeneratePromptsRequest":{"properties":{"domain":{"type":"string","title":"Domain"},"title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Title"},"meta_desc":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Meta Desc"},"headings":{"items":{"type":"string"},"type":"array","title":"Headings","default":[]},"summary":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Summary"},"top_queries":{"items":{"type":"string"},"type":"array","title":"Top Queries","default":[]},"competitor_themes":{"items":{"type":"string"},"type":"array","title":"Competitor Themes","default":[]},"max_prompts":{"type":"integer","title":"Max Prompts","default":5},"provider":{"type":"string","title":"Provider","default":"gemini"}},"type":"object","required":["domain"],"title":"GeneratePromptsRequest"},"GenerateReportRequest":{"properties":{"period_type":{"type":"string","title":"Period Type","description":"weekly, monthly, or custom"},"period_start":{"type":"string","format":"date-time","title":"Period Start"},"period_end":{"type":"string","format":"date-time","title":"Period End"},"comparison_mode":{"type":"string","title":"Comparison Mode","description":"previous_period or previous_year","default":"previous_period"},"brand_terms":{"items":{"type":"string"},"type":"array","maxItems":25,"title":"Brand Terms"},"comparison_start":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Comparison Start"},"comparison_end":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Comparison End"},"comparison_enabled":{"type":"boolean","title":"Comparison Enabled","default":true},"data_only":{"type":"boolean","title":"Data Only","default":false}},"type":"object","required":["period_type","period_start","period_end"],"title":"GenerateReportRequest"},"GeoSignals":{"properties":{"quotable_statement_count":{"type":"integer","title":"Quotable Statement Count","default":0},"statistic_count":{"type":"integer","title":"Statistic Count","default":0},"unique_insight_density":{"type":"number","title":"Unique Insight Density","default":0.0},"source_attribution_count":{"type":"integer","title":"Source Attribution Count","default":0},"named_entity_count":{"type":"integer","title":"Named Entity Count","default":0},"topical_coverage_score":{"type":"number","title":"Topical Coverage Score","default":0.0},"definition_clarity_count":{"type":"integer","title":"Definition Clarity Count","default":0},"has_summary_section":{"type":"boolean","title":"Has Summary Section","default":false},"comparison_structure_count":{"type":"integer","title":"Comparison Structure Count","default":0},"step_by_step_count":{"type":"integer","title":"Step By Step Count","default":0},"content_segmentation_score":{"type":"number","title":"Content Segmentation Score","default":0.0},"has_last_reviewed_date":{"type":"boolean","title":"Has Last Reviewed Date","default":false},"author_expertise_signals":{"type":"integer","title":"Author Expertise Signals","default":0},"has_methodology_section":{"type":"boolean","title":"Has Methodology Section","default":false},"is_research_content":{"type":"boolean","title":"Is Research Content","default":false},"outbound_authority_ratio":{"type":"number","title":"Outbound Authority Ratio","default":0.0}},"type":"object","title":"GeoSignals"},"GoalCreateRequest":{"properties":{"title":{"type":"string","title":"Title"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"parent_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Parent Id"},"category":{"type":"string","title":"Category","default":"seo"},"stage":{"type":"string","title":"Stage","default":"fix"},"priority":{"type":"string","title":"Priority","default":"medium"},"tags":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Tags"},"metric_key":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Metric Key"},"direction":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Direction"},"target_value":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Target Value"},"manual_total":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Manual Total"},"starts_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Starts At"},"due_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Due At"},"owner_email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Owner Email"}},"type":"object","required":["title"],"title":"GoalCreateRequest"},"GoalLinkIssuesRequest":{"properties":{"issue_ids":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Issue Ids"},"rule_keys":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Rule Keys"},"category":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Category"},"reassign":{"type":"boolean","title":"Reassign","default":false},"unlink":{"type":"boolean","title":"Unlink","default":false},"dry_run":{"type":"boolean","title":"Dry Run","default":false}},"type":"object","title":"GoalLinkIssuesRequest","description":"Attach fix-queue items to a goal, by id or by matching rule."},"GoalUpdateRequest":{"properties":{"title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Title"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"category":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Category"},"stage":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Stage"},"status":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status"},"priority":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Priority"},"tags":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Tags"},"metric_key":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Metric Key"},"target_value":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Target Value"},"manual_done":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Manual Done"},"manual_total":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Manual Total"},"starts_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Starts At"},"due_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Due At"},"owner_email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Owner Email"}},"type":"object","title":"GoalUpdateRequest"},"GscAutofixRequest":{"properties":{"scan_id":{"type":"string","title":"Scan Id"}},"type":"object","required":["scan_id"],"title":"GscAutofixRequest"},"GscChangeOut":{"properties":{"id":{"type":"string","title":"Id"},"resource_type":{"type":"string","title":"Resource Type"},"resource_url":{"type":"string","title":"Resource Url"},"resource_title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Resource Title"},"field":{"type":"string","title":"Field"},"original_value":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Original Value"},"proposed_value":{"type":"string","title":"Proposed Value"},"fix_category":{"type":"string","title":"Fix Category"},"fix_severity":{"type":"string","title":"Fix Severity"},"issue_title":{"type":"string","title":"Issue Title"},"reasoning":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Reasoning"},"status":{"type":"string","title":"Status"},"applied_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Applied At"},"error_message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error Message"}},"type":"object","required":["id","resource_type","resource_url","field","proposed_value","fix_category","fix_severity","issue_title","status"],"title":"GscChangeOut"},"GscChangesetOut":{"properties":{"id":{"type":"string","title":"Id"},"scan_id":{"type":"string","title":"Scan Id"},"site_id":{"type":"string","title":"Site Id"},"status":{"type":"string","title":"Status"},"total_changes":{"type":"integer","title":"Total Changes","default":0},"approved_count":{"type":"integer","title":"Approved Count","default":0},"rejected_count":{"type":"integer","title":"Rejected Count","default":0},"applied_count":{"type":"integer","title":"Applied Count","default":0},"failed_count":{"type":"integer","title":"Failed Count","default":0},"created_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Created At"},"applied_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Applied At"},"rolled_back_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Rolled Back At"},"error_message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error Message"},"changes":{"items":{"$ref":"#/components/schemas/GscChangeOut"},"type":"array","title":"Changes"}},"type":"object","required":["id","scan_id","site_id","status"],"title":"GscChangesetOut"},"GscCoverageSummary":{"properties":{"indexed":{"type":"integer","title":"Indexed","default":0},"excluded":{"type":"integer","title":"Excluded","default":0},"error":{"type":"integer","title":"Error","default":0},"total_inspected":{"type":"integer","title":"Total Inspected","default":0},"breakdown":{"additionalProperties":{"type":"integer"},"type":"object","title":"Breakdown"}},"type":"object","title":"GscCoverageSummary"},"GscDashboardResponse":{"properties":{"performance":{"additionalProperties":true,"type":"object","title":"Performance"},"coverage":{"$ref":"#/components/schemas/GscCoverageSummary"},"sitemaps":{"items":{"$ref":"#/components/schemas/GscSitemapOut"},"type":"array","title":"Sitemaps"},"issues":{"items":{"$ref":"#/components/schemas/UrlInspectionOut"},"type":"array","title":"Issues"},"last_synced_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Last Synced At"},"sync_status":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Sync Status"},"sync_error":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Sync Error"}},"type":"object","required":["performance","coverage"],"title":"GscDashboardResponse"},"GscInsightsResponse":{"properties":{"matched":{"items":{"$ref":"#/components/schemas/GscKeywordMatch"},"type":"array","title":"Matched"},"opportunities":{"items":{"$ref":"#/components/schemas/GscOpportunity"},"type":"array","title":"Opportunities"},"last_synced_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Last Synced At"}},"type":"object","title":"GscInsightsResponse"},"GscKeywordMatch":{"properties":{"keyword":{"type":"string","title":"Keyword"},"impressions":{"type":"integer","title":"Impressions"},"clicks":{"type":"integer","title":"Clicks"},"ctr":{"type":"number","title":"Ctr"},"gsc_position":{"type":"number","title":"Gsc Position"},"locations":{"items":{"$ref":"#/components/schemas/GscRankingLocation"},"type":"array","title":"Locations"}},"type":"object","required":["keyword","impressions","clicks","ctr","gsc_position"],"title":"GscKeywordMatch"},"GscOpportunity":{"properties":{"query":{"type":"string","title":"Query"},"impressions":{"type":"integer","title":"Impressions"},"clicks":{"type":"integer","title":"Clicks"},"ctr":{"type":"number","title":"Ctr"},"position":{"type":"number","title":"Position"}},"type":"object","required":["query","impressions","clicks","ctr","position"],"title":"GscOpportunity"},"GscRankingLocation":{"properties":{"country_code":{"type":"string","title":"Country Code"},"country_name":{"type":"string","title":"Country Name"},"device":{"type":"string","title":"Device"},"impressions":{"type":"integer","title":"Impressions"},"clicks":{"type":"integer","title":"Clicks"},"ctr":{"type":"number","title":"Ctr"},"position":{"type":"number","title":"Position"},"ranking_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Ranking Url"}},"type":"object","required":["country_code","country_name","device","impressions","clicks","ctr","position"],"title":"GscRankingLocation"},"GscReviewRequest":{"properties":{"action":{"type":"string","enum":["approve","reject"],"title":"Action"},"change_ids":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Change Ids"},"bulk":{"anyOf":[{"type":"string","enum":["all","critical_only"]},{"type":"null"}],"title":"Bulk"}},"type":"object","required":["action"],"title":"GscReviewRequest"},"GscScanOut":{"properties":{"id":{"type":"string","title":"Id"},"site_id":{"type":"string","title":"Site Id"},"status":{"type":"string","title":"Status"},"stage":{"type":"string","title":"Stage","default":"crawl"},"pages_analyzed":{"type":"integer","title":"Pages Analyzed","default":0},"issues":{"anyOf":[{"items":{"additionalProperties":true,"type":"object"},"type":"array"},{"type":"null"}],"title":"Issues"},"summary":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Summary"},"indexing_score":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Indexing Score"},"error_message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error Message"},"started_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Started At"},"finished_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Finished At"},"created_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Created At"}},"type":"object","required":["id","site_id","status"],"title":"GscScanOut"},"GscScopeStatus":{"properties":{"has_refresh_token":{"type":"boolean","title":"Has Refresh Token","default":false},"has_full_scope":{"type":"boolean","title":"Has Full Scope","default":false},"needs_reauth":{"type":"boolean","title":"Needs Reauth","default":false},"site_paired":{"type":"boolean","title":"Site Paired","default":false},"message":{"type":"string","title":"Message","default":""}},"type":"object","title":"GscScopeStatus"},"GscSitemapOut":{"properties":{"path":{"type":"string","title":"Path"},"last_submitted":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Last Submitted"},"is_pending":{"type":"boolean","title":"Is Pending","default":false},"is_sitemaps_index":{"type":"boolean","title":"Is Sitemaps Index","default":false},"warnings":{"type":"integer","title":"Warnings","default":0},"errors":{"type":"integer","title":"Errors","default":0},"contents":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Contents"}},"type":"object","required":["path"],"title":"GscSitemapOut"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"HealthResponse":{"properties":{"status":{"type":"string","title":"Status"}},"type":"object","required":["status"],"title":"HealthResponse"},"IntelligenceSaveRequest":{"properties":{"brand_type":{"anyOf":[{"type":"string","enum":["b2b","consumer","local_service"]},{"type":"null"}],"title":"Brand Type"},"industry":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Industry"},"usp":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Usp"},"icp":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Icp"},"target_audience":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Target Audience"},"summary":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Summary"}},"type":"object","title":"IntelligenceSaveRequest"},"InviteBody":{"properties":{"email":{"type":"string","title":"Email"},"role":{"type":"string","title":"Role","default":"member"},"can_write":{"type":"boolean","title":"Can Write","default":false}},"type":"object","required":["email"],"title":"InviteBody"},"KBAnswerResponse":{"properties":{"answer":{"type":"string","title":"Answer"},"grounded":{"type":"boolean","title":"Grounded","default":false}},"type":"object","required":["answer"],"title":"KBAnswerResponse"},"KBIndexResponse":{"properties":{"status":{"type":"string","title":"Status"},"chunks_indexed":{"additionalProperties":{"type":"integer"},"type":"object","title":"Chunks Indexed"},"total_chunks":{"type":"integer","title":"Total Chunks","default":0}},"type":"object","required":["status"],"title":"KBIndexResponse"},"KBQueryRequest":{"properties":{"question":{"type":"string","title":"Question"},"context_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Context Url"},"topic":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Topic"},"n_sources":{"type":"integer","maximum":20.0,"minimum":1.0,"title":"N Sources","default":5}},"type":"object","required":["question"],"title":"KBQueryRequest"},"KeywordClusterOut":{"properties":{"id":{"type":"string","title":"Id"},"cluster_name":{"type":"string","title":"Cluster Name"},"primary_keyword":{"type":"string","title":"Primary Keyword"},"keywords":{"title":"Keywords"},"intent":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Intent"},"content_brief":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Content Brief"},"created_at":{"title":"Created At"}},"type":"object","required":["id","cluster_name","primary_keyword","keywords","created_at"],"title":"KeywordClusterOut"},"KeywordFunnelCluster":{"properties":{"cluster_name":{"type":"string","title":"Cluster Name"},"count":{"type":"integer","title":"Count","default":0},"total_volume":{"type":"integer","title":"Total Volume","default":0},"avg_position":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Avg Position"}},"type":"object","required":["cluster_name"],"title":"KeywordFunnelCluster"},"KeywordFunnelOpportunity":{"properties":{"keyword":{"type":"string","title":"Keyword"},"search_volume":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Search Volume"},"current_position":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Current Position"},"cluster_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Cluster Name"}},"type":"object","required":["keyword"],"title":"KeywordFunnelOpportunity"},"KeywordFunnelResponse":{"properties":{"stages":{"additionalProperties":{"$ref":"#/components/schemas/KeywordFunnelStage"},"type":"object","title":"Stages"},"clusters":{"items":{"$ref":"#/components/schemas/KeywordFunnelCluster"},"type":"array","title":"Clusters"},"unclassified_count":{"type":"integer","title":"Unclassified Count","default":0},"unsnapshotted_count":{"type":"integer","title":"Unsnapshotted Count","default":0},"total":{"type":"integer","title":"Total","default":0},"next_step":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Next Step"}},"type":"object","title":"KeywordFunnelResponse"},"KeywordFunnelStage":{"properties":{"count":{"type":"integer","title":"Count","default":0},"total_volume":{"type":"integer","title":"Total Volume","default":0},"avg_position":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Avg Position"},"top_opportunities":{"items":{"$ref":"#/components/schemas/KeywordFunnelOpportunity"},"type":"array","title":"Top Opportunities"}},"type":"object","title":"KeywordFunnelStage"},"KeywordMessageOut":{"properties":{"id":{"type":"string","title":"Id"},"role":{"type":"string","title":"Role"},"content":{"type":"string","title":"Content"},"created_at":{"title":"Created At"}},"type":"object","required":["id","role","content","created_at"],"title":"KeywordMessageOut"},"KeywordRankingBucket":{"properties":{"label":{"type":"string","title":"Label"},"max_position":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Max Position"},"count":{"type":"integer","title":"Count","default":0}},"type":"object","required":["label"],"title":"KeywordRankingBucket"},"KeywordRankingPerformanceItem":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"keyword":{"type":"string","title":"Keyword"},"position":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Position"},"ranking_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Ranking Url"},"checked_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Checked At"}},"type":"object","required":["id","keyword"],"title":"KeywordRankingPerformanceItem"},"KeywordRankingPerformanceResponse":{"properties":{"start_date":{"type":"string","format":"date","title":"Start Date"},"end_date":{"type":"string","format":"date","title":"End Date"},"history_starts_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"History Starts At"},"history_available_from":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"History Available From"},"location_code":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Location Code"},"location_name":{"type":"string","title":"Location Name"},"location_type":{"type":"string","title":"Location Type"},"language_code":{"type":"string","title":"Language Code"},"device":{"type":"string","title":"Device"},"total_keywords":{"type":"integer","title":"Total Keywords","default":0},"average_position":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Average Position"},"improved":{"type":"integer","title":"Improved","default":0},"declined":{"type":"integer","title":"Declined","default":0},"unchanged":{"type":"integer","title":"Unchanged","default":0},"buckets":{"items":{"$ref":"#/components/schemas/KeywordRankingBucket"},"type":"array","title":"Buckets"},"trend":{"items":{"$ref":"#/components/schemas/KeywordRankingTrendPoint"},"type":"array","title":"Trend"},"keywords":{"items":{"$ref":"#/components/schemas/KeywordRankingPerformanceItem"},"type":"array","title":"Keywords"}},"type":"object","required":["start_date","end_date","location_name","location_type","language_code","device"],"title":"KeywordRankingPerformanceResponse"},"KeywordRankingTrendPoint":{"properties":{"date":{"type":"string","title":"Date"},"average_position":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Average Position"},"top_3":{"type":"integer","title":"Top 3","default":0},"top_10":{"type":"integer","title":"Top 10","default":0},"top_25":{"type":"integer","title":"Top 25","default":0},"top_50":{"type":"integer","title":"Top 50","default":0},"top_100":{"type":"integer","title":"Top 100","default":0}},"type":"object","required":["date"],"title":"KeywordRankingTrendPoint"},"KeywordSessionDetailOut":{"properties":{"id":{"type":"string","title":"Id"},"site_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Site Id"},"title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Title"},"status":{"type":"string","title":"Status"},"created_at":{"title":"Created At"},"updated_at":{"title":"Updated At"},"message_count":{"type":"integer","title":"Message Count","default":0},"messages":{"items":{"$ref":"#/components/schemas/KeywordMessageOut"},"type":"array","title":"Messages","default":[]},"clusters":{"items":{"$ref":"#/components/schemas/KeywordClusterOut"},"type":"array","title":"Clusters","default":[]}},"type":"object","required":["id","status","created_at","updated_at"],"title":"KeywordSessionDetailOut"},"KeywordSessionOut":{"properties":{"id":{"type":"string","title":"Id"},"site_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Site Id"},"title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Title"},"status":{"type":"string","title":"Status"},"created_at":{"title":"Created At"},"updated_at":{"title":"Updated At"},"message_count":{"type":"integer","title":"Message Count","default":0}},"type":"object","required":["id","status","created_at","updated_at"],"title":"KeywordSessionOut"},"KeywordUpsertItem":{"properties":{"keyword":{"type":"string","maxLength":200,"minLength":1,"title":"Keyword"},"intent":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Intent"},"funnel_stage":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Funnel Stage"},"cluster_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Cluster Name"},"notes":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Notes"},"source":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Source"},"ranking_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Ranking Url"}},"type":"object","required":["keyword"],"title":"KeywordUpsertItem","description":"Rich keyword entry — the agent supplies the intelligence, Xyle stores it."},"LeadIn":{"properties":{"email":{"type":"string","maxLength":320,"title":"Email"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"domain":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Domain"},"source":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Source"},"tags":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Tags"},"notes":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Notes"}},"type":"object","required":["email"],"title":"LeadIn"},"LinkAnalysis":{"properties":{"internal_link_count":{"type":"integer","title":"Internal Link Count","default":0},"external_link_count":{"type":"integer","title":"External Link Count","default":0},"nofollow_link_count":{"type":"integer","title":"Nofollow Link Count","default":0},"broken_link_sample":{"items":{"type":"string"},"type":"array","title":"Broken Link Sample"},"anchor_quality":{"type":"string","title":"Anchor Quality","default":"unknown"},"generic_anchor_count":{"type":"integer","title":"Generic Anchor Count","default":0},"links_in_content":{"type":"integer","title":"Links In Content","default":0},"external_link_ratio":{"type":"number","title":"External Link Ratio","default":0.0}},"type":"object","title":"LinkAnalysis"},"LinkBody":{"properties":{"repo":{"type":"string","title":"Repo"}},"type":"object","required":["repo"],"title":"LinkBody"},"LinkCompleteBody":{"properties":{"code":{"type":"string","title":"Code"},"site_url":{"type":"string","title":"Site Url"},"wp_user":{"type":"string","title":"Wp User"},"app_password":{"type":"string","title":"App Password"},"site_key":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Site Key"}},"type":"object","required":["code","site_url","wp_user","app_password"],"title":"LinkCompleteBody"},"LinkMintBody":{"properties":{"site_url":{"type":"string","title":"Site Url"}},"type":"object","required":["site_url"],"title":"LinkMintBody"},"ManualCompetitorsRequest":{"properties":{"urls":{"items":{"type":"string","minLength":1,"format":"uri"},"type":"array","maxItems":15,"minItems":1,"title":"Urls"}},"type":"object","required":["urls"],"title":"ManualCompetitorsRequest"},"McpCallIn":{"properties":{"tool":{"type":"string","title":"Tool"},"email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"},"latency_ms":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Latency Ms"},"arg_bytes":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Arg Bytes"},"resp_bytes":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Resp Bytes"},"upstream_bytes":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Upstream Bytes"},"truncated":{"type":"boolean","title":"Truncated","default":false},"est_tokens":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Est Tokens"},"ok":{"type":"boolean","title":"Ok","default":true},"error_kind":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error Kind"},"site_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Site Id"},"source":{"type":"string","title":"Source","default":"mcp"}},"type":"object","required":["tool"],"title":"McpCallIn"},"MeasureRequest":{"properties":{"url":{"type":"string","title":"Url","description":"The page URL to measure"},"device":{"type":"string","title":"Device","description":"Device type: mobile or desktop","default":"mobile"}},"type":"object","required":["url"],"title":"MeasureRequest"},"MeasureResponse":{"properties":{"psi":{"$ref":"#/components/schemas/CwvMetricOut"},"crux":{"anyOf":[{"$ref":"#/components/schemas/CwvMetricOut"},{"type":"null"}]}},"type":"object","required":["psi"],"title":"MeasureResponse"},"MediaUploadBody":{"properties":{"image_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Image Url"},"image_data":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Image Data"},"filename":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Filename"},"title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Title"},"alt":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Alt"}},"type":"object","title":"MediaUploadBody"},"MemberPatchBody":{"properties":{"role":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Role"},"can_write":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Can Write"}},"type":"object","title":"MemberPatchBody"},"MenuItemsBody":{"properties":{"items":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Items"},"replace":{"type":"boolean","title":"Replace","default":true}},"type":"object","required":["items"],"title":"MenuItemsBody"},"OAuthURLResponse":{"properties":{"auth_url":{"type":"string","title":"Auth Url"}},"type":"object","required":["auth_url"],"title":"OAuthURLResponse"},"PageDigestBody":{"properties":{"site_id":{"type":"string","title":"Site Id"},"post_id":{"type":"integer","title":"Post Id"}},"type":"object","required":["site_id","post_id"],"title":"PageDigestBody"},"PatchOp":{"properties":{"node_id":{"type":"string","title":"Node Id"},"field":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Field"},"new_value":{"title":"New Value"},"value":{"title":"Value"},"style":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Style"},"tabs":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Tabs"}},"type":"object","required":["node_id"],"title":"PatchOp"},"PatchPageBody":{"properties":{"ops":{"items":{"$ref":"#/components/schemas/PatchOp"},"type":"array","title":"Ops"},"dry_run":{"type":"boolean","title":"Dry Run","default":false}},"type":"object","required":["ops"],"title":"PatchPageBody"},"PatchTemplateBody":{"properties":{"ops":{"items":{"$ref":"#/components/schemas/PatchOp"},"type":"array","title":"Ops"},"dry_run":{"type":"boolean","title":"Dry Run","default":false}},"type":"object","required":["ops"],"title":"PatchTemplateBody"},"PreviewLinkBody":{"properties":{"post_id":{"type":"integer","title":"Post Id"},"ttl":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Ttl"},"share":{"type":"boolean","title":"Share","default":false}},"type":"object","required":["post_id"],"title":"PreviewLinkBody"},"PrintableReportRequest":{"properties":{"html":{"type":"string","maxLength":1500000,"minLength":100,"title":"Html"}},"type":"object","required":["html"],"title":"PrintableReportRequest"},"ProbeAnswerBody":{"properties":{"trait":{"type":"string","maxLength":32,"title":"Trait"},"side":{"type":"string","maxLength":16,"title":"Side"},"brief_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Brief Id"}},"type":"object","required":["trait","side"],"title":"ProbeAnswerBody"},"PromoteRequest":{"properties":{"site_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Site Id"},"cluster_ids":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Cluster Ids"},"max_keywords":{"type":"integer","maximum":500.0,"minimum":1.0,"title":"Max Keywords","default":200}},"type":"object","title":"PromoteRequest"},"PromoteResponse":{"properties":{"added":{"type":"integer","title":"Added"},"duplicates":{"type":"integer","title":"Duplicates"},"clusters_promoted":{"type":"integer","title":"Clusters Promoted"},"site_id":{"type":"string","title":"Site Id"},"keywords":{"items":{"type":"string"},"type":"array","title":"Keywords","default":[]},"next_step":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Next Step"}},"type":"object","required":["added","duplicates","clusters_promoted","site_id"],"title":"PromoteResponse"},"PromptItem":{"properties":{"prompt":{"type":"string","title":"Prompt"},"funnelStage":{"type":"string","title":"Funnelstage","default":""}},"type":"object","required":["prompt"],"title":"PromptItem"},"PromptsRequest":{"properties":{"site_id":{"type":"string","title":"Site Id"},"regenerate":{"type":"boolean","title":"Regenerate","default":false},"count":{"type":"integer","title":"Count","default":8}},"type":"object","required":["site_id"],"title":"PromptsRequest"},"ProspectAuditOut":{"properties":{"id":{"type":"string","title":"Id"},"domain":{"type":"string","title":"Domain"},"site_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Site Id"},"status":{"type":"string","title":"Status"},"progress":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Progress"},"client_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Client Name"},"agency_notes":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Agency Notes"},"style_reference":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Style Reference"},"result":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Result"},"error":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error"},"budget_usd":{"type":"number","title":"Budget Usd"},"spent_usd":{"type":"number","title":"Spent Usd"},"ai_visibility_enabled":{"type":"boolean","title":"Ai Visibility Enabled"},"created_at":{"type":"string","title":"Created At"},"updated_at":{"type":"string","title":"Updated At"}},"type":"object","required":["id","domain","status","budget_usd","spent_usd","ai_visibility_enabled","created_at","updated_at"],"title":"ProspectAuditOut"},"ProspectAuditRequest":{"properties":{"url":{"type":"string","title":"Url"},"query":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Query"}},"type":"object","required":["url"],"title":"ProspectAuditRequest"},"ProviderQueryRequest":{"properties":{"provider":{"type":"string","enum":["gemini","openai","anthropic","perplexity"],"title":"Provider"},"prompt":{"type":"string","title":"Prompt"}},"type":"object","required":["provider","prompt"],"title":"ProviderQueryRequest"},"PublicBody":{"properties":{"site_id":{"type":"string","title":"Site Id"},"public":{"type":"boolean","title":"Public","default":true}},"type":"object","required":["site_id"],"title":"PublicBody"},"PublishBody":{"properties":{"wp_site_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Wp Site Id"},"post_type":{"type":"string","title":"Post Type","default":"post"},"dry_run":{"type":"boolean","title":"Dry Run","default":false},"acknowledge_blockers":{"type":"boolean","title":"Acknowledge Blockers","default":false},"acknowledge_reason":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Acknowledge Reason"}},"type":"object","title":"PublishBody"},"QueryOut":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"query":{"type":"string","title":"Query"},"impressions":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Impressions"},"clicks":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Clicks"},"ctr":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Ctr"},"position":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Position"},"fetched_at":{"type":"string","format":"date-time","title":"Fetched At"}},"type":"object","required":["id","query","fetched_at"],"title":"QueryOut"},"RankCheckRunOut":{"properties":{"run_id":{"type":"string","title":"Run Id"},"status":{"type":"string","title":"Status"},"mode":{"type":"string","title":"Mode","default":"inline"},"started_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Started At"},"finished_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Finished At"},"age_seconds":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Age Seconds"},"keyword_count":{"type":"integer","title":"Keyword Count","default":0},"checked":{"type":"integer","title":"Checked","default":0},"not_ranking":{"type":"integer","title":"Not Ranking","default":0},"failed":{"type":"integer","title":"Failed","default":0},"error":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error"},"errors":{"items":{"type":"string"},"type":"array","title":"Errors"},"location":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Location"},"next_step":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Next Step"}},"type":"object","required":["run_id","status"],"title":"RankCheckRunOut","description":"The last rank-check run for a brand — the status a poller reads."},"RankingConfig":{"properties":{"location_code":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Location Code"},"location_name":{"type":"string","maxLength":200,"minLength":1,"title":"Location Name","default":"Global"},"location_type":{"type":"string","maxLength":32,"minLength":1,"title":"Location Type","default":"Global"},"search_engine":{"type":"string","const":"google","title":"Search Engine","default":"google"},"language_code":{"type":"string","pattern":"^[a-z]{2,3}(?:-[A-Z]{2})?$","title":"Language Code","default":"en"},"device":{"type":"string","enum":["desktop","mobile"],"title":"Device","default":"desktop"}},"type":"object","title":"RankingConfig"},"RankingLocationOut":{"properties":{"location_code":{"type":"integer","title":"Location Code"},"location_name":{"type":"string","title":"Location Name"},"location_type":{"type":"string","title":"Location Type"},"country_iso_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Country Iso Code"}},"type":"object","required":["location_code","location_name","location_type"],"title":"RankingLocationOut"},"RecheckRequest":{"properties":{"urls":{"items":{"type":"string"},"type":"array","minItems":1,"title":"Urls"}},"type":"object","required":["urls"],"title":"RecheckRequest"},"Recommendation":{"properties":{"rule_id":{"type":"string","title":"Rule Id"},"category":{"type":"string","title":"Category"},"priority":{"type":"string","title":"Priority"},"title":{"type":"string","title":"Title"},"description":{"type":"string","title":"Description"},"impact":{"type":"string","title":"Impact"},"locator":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Locator"}},"type":"object","required":["rule_id","category","priority","title","description","impact"],"title":"Recommendation"},"RedeemBody":{"properties":{"code":{"type":"string","title":"Code"}},"type":"object","required":["code"],"title":"RedeemBody"},"RefreshSiteRequest":{"properties":{"url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Url"}},"type":"object","title":"RefreshSiteRequest","description":"Optional override for POST /sites/{id}/refresh.\n\nWhen ``url`` is omitted or null, the refresh runs against the site's\nhomepage (existing behavior). When present, the URL must belong to\nthe same host as the site's registered domain (prevents abuse)."},"RenderingInfo":{"properties":{"detected_framework":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Detected Framework"},"site_builder":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Site Builder"},"site_builder_label":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Site Builder Label"},"builder_fixes":{"items":{"type":"string"},"type":"array","title":"Builder Fixes"},"rendering_type":{"type":"string","title":"Rendering Type","default":"unknown"},"has_noscript_content":{"type":"boolean","title":"Has Noscript Content","default":false},"js_bundle_count":{"type":"integer","title":"Js Bundle Count","default":0},"initial_dom_has_content":{"type":"boolean","title":"Initial Dom Has Content","default":false},"uses_client_router":{"type":"boolean","title":"Uses Client Router","default":false},"seo_impact":{"type":"string","title":"Seo Impact","default":"unknown"},"rendering_notes":{"type":"string","title":"Rendering Notes","default":""},"raw_html_word_count":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Raw Html Word Count"},"content_measurement":{"type":"string","enum":["raw_html","browser_rendered"],"title":"Content Measurement","default":"raw_html"}},"type":"object","title":"RenderingInfo"},"ReplicateNodeBody":{"properties":{"node_id":{"type":"string","title":"Node Id"},"count":{"type":"integer","title":"Count","default":1},"overrides":{"anyOf":[{"items":{"additionalProperties":true,"type":"object"},"type":"array"},{"type":"null"}],"title":"Overrides"},"dry_run":{"type":"boolean","title":"Dry Run","default":false}},"type":"object","required":["node_id"],"title":"ReplicateNodeBody"},"ReportExportOut":{"properties":{"id":{"type":"string","title":"Id"},"url":{"type":"string","title":"Url"},"doc_id":{"type":"string","title":"Doc Id"},"doc_url":{"type":"string","title":"Doc Url"},"format":{"type":"string","title":"Format"},"created_at":{"type":"string","title":"Created At"}},"type":"object","required":["id","url","doc_id","doc_url","format","created_at"],"title":"ReportExportOut"},"ReportOut":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"site_id":{"type":"string","format":"uuid","title":"Site Id"},"period_type":{"type":"string","title":"Period Type"},"period_start":{"type":"string","format":"date-time","title":"Period Start"},"period_end":{"type":"string","format":"date-time","title":"Period End"},"status":{"type":"string","title":"Status"},"gsc_data":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Gsc Data"},"ga_data":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Ga Data"},"shopify_data":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Shopify Data"},"keyword_funnel":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Keyword Funnel"},"traffic_insights":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Traffic Insights"},"report_metadata":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Report Metadata"},"source_status":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Source Status"},"narrative":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Narrative"},"highlights":{"anyOf":[{"items":{},"type":"array"},{"type":"null"}],"title":"Highlights"},"recommendations":{"anyOf":[{"items":{},"type":"array"},{"type":"null"}],"title":"Recommendations"},"email_sent_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Email Sent At"},"delivery_status":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Delivery Status"},"delivery_error":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Delivery Error"},"created_at":{"type":"string","format":"date-time","title":"Created At"}},"type":"object","required":["id","site_id","period_type","period_start","period_end","status","created_at"],"title":"ReportOut"},"ReportPresentationUpdate":{"properties":{"presentation":{"additionalProperties":true,"type":"object","title":"Presentation"}},"type":"object","required":["presentation"],"title":"ReportPresentationUpdate"},"RestoreSnapshotBody":{"properties":{"revision_id":{"type":"string","format":"uuid","title":"Revision Id"},"dry_run":{"type":"boolean","title":"Dry Run","default":false}},"type":"object","required":["revision_id"],"title":"RestoreSnapshotBody"},"ReviewBody":{"properties":{"text":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Text"},"url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Url"},"target_keyword":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Target Keyword"},"site_domain":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Site Domain"},"expect_front_matter":{"type":"boolean","title":"Expect Front Matter","default":false},"page_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Page Type"},"site_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Site Id"},"original":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Original"},"shape":{"type":"boolean","title":"Shape","default":false}},"type":"object","title":"ReviewBody"},"RewriteRequest":{"properties":{"url":{"type":"string","title":"Url"},"type":{"type":"string","enum":["title","meta","heading","section"],"title":"Type","default":"title"},"context":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Context"},"query":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Query"}},"type":"object","required":["url"],"title":"RewriteRequest"},"RewriteResponse":{"properties":{"url":{"type":"string","title":"Url"},"type":{"type":"string","title":"Type"},"original":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Original"},"suggested":{"type":"string","title":"Suggested"},"reasoning":{"type":"string","title":"Reasoning"},"grounded":{"type":"boolean","title":"Grounded","default":false},"supporting_points":{"items":{"type":"string"},"type":"array","title":"Supporting Points"}},"type":"object","required":["url","type","suggested","reasoning"],"title":"RewriteResponse"},"SaveClustersRequest":{"properties":{"clusters":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Clusters"}},"type":"object","required":["clusters"],"title":"SaveClustersRequest"},"ScanRequest":{"properties":{"site_id":{"type":"string","title":"Site Id"},"query":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Query"},"providers":{"anyOf":[{"items":{"type":"string","enum":["gemini","openai","anthropic","perplexity"]},"type":"array"},{"type":"null"}],"title":"Providers"},"regenerate":{"type":"boolean","title":"Regenerate","default":false},"prompts":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Prompts"}},"type":"object","required":["site_id"],"title":"ScanRequest"},"ScheduleOut":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"site_id":{"type":"string","format":"uuid","title":"Site Id"},"frequency":{"type":"string","title":"Frequency"},"is_active":{"type":"boolean","title":"Is Active"},"day_of_month":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Day Of Month"},"recipients":{"anyOf":[{"items":{},"type":"array"},{"type":"null"}],"title":"Recipients"},"timezone":{"type":"string","title":"Timezone","default":"UTC"},"brand_terms":{"anyOf":[{"items":{},"type":"array"},{"type":"null"}],"title":"Brand Terms"},"last_weekly_run_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Weekly Run At"},"last_monthly_run_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Monthly Run At"},"created_at":{"type":"string","format":"date-time","title":"Created At"}},"type":"object","required":["id","site_id","frequency","is_active","created_at"],"title":"ScheduleOut"},"SchemaFinding":{"properties":{"type":{"type":"string","title":"Type"},"error":{"type":"string","title":"Error"},"schema_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Schema Type"},"property":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Property"},"suggested_property":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Suggested Property"},"missing_required":{"items":{"type":"string"},"type":"array","title":"Missing Required"},"missing_recommended":{"items":{"type":"string"},"type":"array","title":"Missing Recommended"},"severity":{"anyOf":[{"type":"string","enum":["error","warning"]},{"type":"null"}],"title":"Severity"}},"additionalProperties":true,"type":"object","required":["type","error"],"title":"SchemaFinding"},"SchemaGenRequest":{"properties":{"url":{"type":"string","title":"Url"},"schema_type":{"type":"string","enum":["faq","organization","article","howto","breadcrumb","localbusiness","auto"],"title":"Schema Type","default":"auto"},"context":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Context"}},"type":"object","required":["url"],"title":"SchemaGenRequest"},"SchemaGenResponse":{"properties":{"url":{"type":"string","title":"Url"},"schema_type":{"type":"string","title":"Schema Type"},"jsonld":{"type":"string","title":"Jsonld"},"html_snippet":{"type":"string","title":"Html Snippet"},"notes":{"type":"string","title":"Notes","default":""},"grounded":{"type":"boolean","title":"Grounded","default":false}},"type":"object","required":["url","schema_type","jsonld","html_snippet"],"title":"SchemaGenResponse"},"SearchConsoleAccessResponse":{"properties":{"site":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Site"},"sync_mode":{"type":"string","enum":["stub","oauth-ready","service-account-ready","connected"],"title":"Sync Mode"},"current_status":{"type":"string","title":"Current Status"},"synced_queries":{"type":"integer","title":"Synced Queries","default":0},"required_steps":{"items":{"type":"string"},"type":"array","title":"Required Steps"},"configured_redirect_uri":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Configured Redirect Uri"},"service_account_email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Service Account Email"},"oauth_client_configured":{"type":"boolean","title":"Oauth Client Configured","default":false}},"type":"object","required":["sync_mode","current_status"],"title":"SearchConsoleAccessResponse"},"SectionOpBody":{"properties":{"op":{"type":"string","title":"Op","default":"replace"},"index":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Index"},"node_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Node Id"},"sections":{"anyOf":[{"items":{},"type":"array"},{"type":"null"}],"title":"Sections"},"elements":{"anyOf":[{"items":{},"type":"array"},{"type":"null"}],"title":"Elements"},"atomic":{"anyOf":[{"items":{},"type":"array"},{"type":"null"}],"title":"Atomic"},"dry_run":{"type":"boolean","title":"Dry Run","default":false},"allow_widget_loss":{"type":"boolean","title":"Allow Widget Loss","default":false}},"type":"object","title":"SectionOpBody"},"SecurityAuditBody":{"properties":{"site_id":{"type":"string","title":"Site Id"}},"type":"object","required":["site_id"],"title":"SecurityAuditBody"},"SeedInstructionsResponse":{"properties":{"version":{"type":"string","title":"Version"},"base":{"type":"string","title":"Base"},"tool_hint":{"type":"string","title":"Tool Hint","default":""}},"type":"object","required":["version","base"],"title":"SeedInstructionsResponse"},"SendEmailRequest":{"properties":{"draft_id":{"type":"string","title":"Draft Id"},"confirm":{"type":"boolean","title":"Confirm","default":false}},"type":"object","required":["draft_id"],"title":"SendEmailRequest"},"SeoMetaBody":{"properties":{"post_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Post Id"},"meta_description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Meta Description"},"seo_title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Seo Title"},"robots":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Robots"},"canonical_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Canonical Url"}},"type":"object","title":"SeoMetaBody"},"SeoScoreBreakdown":{"properties":{"overall":{"type":"number","title":"Overall","default":0.0},"technical":{"type":"number","title":"Technical","default":0.0},"on_page":{"type":"number","title":"On Page","default":0.0},"content":{"type":"number","title":"Content","default":0.0},"links":{"type":"number","title":"Links","default":0.0}},"type":"object","title":"SeoScoreBreakdown"},"SetHomepageBody":{"properties":{"post_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Post Id"}},"type":"object","title":"SetHomepageBody"},"SetLocationRequest":{"properties":{"location_code":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Location Code"},"location_name":{"type":"string","maxLength":200,"minLength":1,"title":"Location Name","default":"Global"},"location_type":{"type":"string","maxLength":32,"minLength":1,"title":"Location Type","default":"Global"},"search_engine":{"type":"string","const":"google","title":"Search Engine","default":"google"},"language_code":{"type":"string","pattern":"^[a-z]{2,3}(?:-[A-Z]{2})?$","title":"Language Code","default":"en"},"device":{"type":"string","enum":["desktop","mobile"],"title":"Device","default":"desktop"}},"type":"object","title":"SetLocationRequest"},"SetSlugBody":{"properties":{"slug":{"type":"string","title":"Slug"}},"type":"object","required":["slug"],"title":"SetSlugBody"},"SetStatusBody":{"properties":{"status":{"type":"string","title":"Status"}},"type":"object","required":["status"],"title":"SetStatusBody"},"SetTemplateBody":{"properties":{"template":{"type":"string","title":"Template"}},"type":"object","required":["template"],"title":"SetTemplateBody"},"SetThemeBody":{"properties":{"theme":{"type":"string","title":"Theme"},"install":{"type":"boolean","title":"Install","default":false}},"type":"object","required":["theme"],"title":"SetThemeBody"},"ShopifyRewriteRequest":{"properties":{"content":{"type":"string","title":"Content"},"type":{"type":"string","title":"Type"},"product_title":{"type":"string","title":"Product Title"},"product_context":{"type":"string","title":"Product Context"}},"type":"object","required":["content","type","product_title","product_context"],"title":"ShopifyRewriteRequest"},"ShopifyRewriteResponse":{"properties":{"suggested":{"type":"string","title":"Suggested"},"reasoning":{"type":"string","title":"Reasoning"}},"type":"object","required":["suggested","reasoning"],"title":"ShopifyRewriteResponse"},"SiteCompetitorOut":{"properties":{"id":{"type":"string","title":"Id"},"competitor_page_id":{"type":"string","title":"Competitor Page Id"},"url":{"type":"string","title":"Url"},"domain":{"type":"string","title":"Domain"},"title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Title"},"meta_desc":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Meta Desc"},"rank":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Rank"},"source":{"type":"string","title":"Source"},"rationale":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Rationale"},"created_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Created At"}},"type":"object","required":["id","competitor_page_id","url","domain","source"],"title":"SiteCompetitorOut","description":"One row in the competitors tab of the site hub.\n\nFlattens SiteCompetitor + the joined CompetitorPage into a single\npayload the frontend can render without another round-trip."},"SiteCompetitorsResponse":{"properties":{"competitors":{"items":{"$ref":"#/components/schemas/SiteCompetitorOut"},"type":"array","title":"Competitors"},"count":{"type":"integer","title":"Count","default":0},"reasoning":{"anyOf":[{"$ref":"#/components/schemas/DiscoveryReasoning"},{"type":"null"}]}},"type":"object","title":"SiteCompetitorsResponse"},"SiteCostsResponse":{"properties":{"site_id":{"type":"string","title":"Site Id"},"domain":{"type":"string","title":"Domain"},"total_microcents":{"type":"integer","title":"Total Microcents","default":0},"total_dollars":{"type":"number","title":"Total Dollars","default":0.0},"by_provider":{"items":{"$ref":"#/components/schemas/CostProviderBreakdown"},"type":"array","title":"By Provider"},"by_operation":{"items":{"$ref":"#/components/schemas/CostOperationBreakdown"},"type":"array","title":"By Operation"},"daily":{"items":{"$ref":"#/components/schemas/CostDailyPoint"},"type":"array","title":"Daily"}},"type":"object","required":["site_id","domain"],"title":"SiteCostsResponse"},"SiteCrawlConfig":{"properties":{"max_pages":{"type":"integer","maximum":5000.0,"minimum":1.0,"title":"Max Pages","default":500},"max_depth":{"type":"integer","maximum":20.0,"minimum":1.0,"title":"Max Depth","default":8},"render_js":{"type":"boolean","title":"Render Js","default":false},"include_subdomains":{"type":"boolean","title":"Include Subdomains","default":false}},"type":"object","title":"SiteCrawlConfig","description":"Public site-crawl config.\n\nSeveral fields are intentionally *not* exposed:\n- ``user_agent`` cannot be overridden — the crawler always identifies as\n  ``Xyle-Crawler/<version>`` so target sites can identify and block us.\n- ``respect_robots`` is always true — a public, multi-tenant crawler\n  must never ignore robots.txt. Removed from the surface entirely.\n\nDefaults cover a typical brand site while retaining a hard safety ceiling.\nA crawl that reaches either ceiling is reported as partial rather than\nsilently claiming complete coverage.\n``render_js`` defaults to False (Playwright is expensive); enable only\nwhen crawling JS-heavy SPAs."},"SiteFetchRequest":{"properties":{"domain":{"type":"string","title":"Domain"},"urls":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Urls"},"bots":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Bots"},"max_urls":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Max Urls"},"status_sample":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Status Sample"},"path":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Path"}},"type":"object","required":["domain"],"title":"SiteFetchRequest"},"SiteFixHandoffRequest":{"properties":{"issues":{"items":{"$ref":"#/components/schemas/SiteFixIssueIn"},"type":"array","title":"Issues"},"provider":{"type":"string","title":"Provider"},"execution_result":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Execution Result"},"previous_scan_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Previous Scan At"},"latest_scan_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Latest Scan At"}},"type":"object","required":["provider"],"title":"SiteFixHandoffRequest"},"SiteFixIssueIn":{"properties":{"signature":{"type":"string","title":"Signature"},"title":{"type":"string","title":"Title"},"category":{"type":"string","title":"Category"},"priority":{"type":"string","title":"Priority"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"impact":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Impact"},"url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Url"},"site_issue_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Site Issue Id"},"rule_key":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Rule Key"},"source":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Source"}},"type":"object","required":["signature","title","category","priority"],"title":"SiteFixIssueIn"},"SiteFixRecordOut":{"properties":{"id":{"type":"string","title":"Id"},"site_id":{"type":"string","title":"Site Id"},"signature":{"type":"string","title":"Signature"},"title":{"type":"string","title":"Title"},"category":{"type":"string","title":"Category"},"priority":{"type":"string","title":"Priority"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"impact":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Impact"},"status":{"type":"string","title":"Status"},"provider":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Provider"},"initiated_by_user_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Initiated By User Id"},"initiated_by_email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Initiated By Email"},"initiated_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Initiated At"},"execution_result":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Execution Result"},"verification_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Verification At"},"verification_result":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Verification Result"},"previous_scan_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Previous Scan At"},"latest_scan_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Latest Scan At"},"failure_reason":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Failure Reason"},"history":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"History"},"created_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Created At"},"updated_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Updated At"}},"type":"object","required":["id","site_id","signature","title","category","priority","status"],"title":"SiteFixRecordOut"},"SiteFixVerifyRequest":{"properties":{"issues":{"items":{"$ref":"#/components/schemas/SiteFixIssueIn"},"type":"array","title":"Issues"},"url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Url"},"provider":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Provider"},"execution_result":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Execution Result"},"previous_scan_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Previous Scan At"},"latest_scan_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Latest Scan At"}},"type":"object","title":"SiteFixVerifyRequest"},"SiteFixVerifyResponse":{"properties":{"overview":{"$ref":"#/components/schemas/SiteOverviewOut"},"fixes":{"$ref":"#/components/schemas/SiteFixesResponse"},"resolved":{"type":"integer","title":"Resolved","default":0},"failed":{"type":"integer","title":"Failed","default":0}},"type":"object","required":["overview","fixes"],"title":"SiteFixVerifyResponse"},"SiteFixesResponse":{"properties":{"records":{"items":{"$ref":"#/components/schemas/SiteFixRecordOut"},"type":"array","title":"Records"},"active_count":{"type":"integer","title":"Active Count","default":0},"resolved_count":{"type":"integer","title":"Resolved Count","default":0},"latest_scan_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Latest Scan At"},"verification_result":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Verification Result"}},"type":"object","title":"SiteFixesResponse"},"SiteOut":{"properties":{"id":{"type":"string","title":"Id"},"domain":{"type":"string","title":"Domain"},"legacy_brand_ids":{"items":{"type":"string"},"type":"array","title":"Legacy Brand Ids"},"logo_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Logo Url"},"favicon_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Favicon Url"},"already_exists":{"type":"boolean","title":"Already Exists","default":false},"org_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Org Id"},"organization_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Organization Name"},"owner_user_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Owner User Id"},"owner_email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Owner Email"},"can_admin":{"type":"boolean","title":"Can Admin","default":false},"gsc_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Gsc Url"},"synced_queries":{"type":"integer","title":"Synced Queries","default":0},"wp_connected":{"type":"boolean","title":"Wp Connected","default":false},"framer_connected":{"type":"boolean","title":"Framer Connected","default":false},"gsc_connected":{"type":"boolean","title":"Gsc Connected","default":false},"gsc_status":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Gsc Status"},"shopify_connected":{"type":"boolean","title":"Shopify Connected","default":false},"created_at":{"type":"string","format":"date-time","title":"Created At"}},"type":"object","required":["id","domain","created_at"],"title":"SiteOut"},"SiteOverviewOut":{"properties":{"id":{"type":"string","title":"Id"},"domain":{"type":"string","title":"Domain"},"org_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Org Id"},"organization_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Organization Name"},"owner_user_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Owner User Id"},"owner_email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Owner Email"},"can_admin":{"type":"boolean","title":"Can Admin","default":false},"gsc_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Gsc Url"},"gsc_connected":{"type":"boolean","title":"Gsc Connected","default":false},"gsc_site_paired":{"type":"boolean","title":"Gsc Site Paired","default":false},"gsc_status":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Gsc Status"},"gsc_fix":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Gsc Fix"},"gsc_sync_error":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Gsc Sync Error"},"gsc_synced_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Gsc Synced At"},"framer_connected":{"type":"boolean","title":"Framer Connected","default":false},"framer_site_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Framer Site Id"},"framer_project":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Framer Project"},"wordpress_connected":{"type":"boolean","title":"Wordpress Connected","default":false},"editable_surfaces":{"items":{"type":"string"},"type":"array","title":"Editable Surfaces"},"editing_hint":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Editing Hint"},"created_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Created At"},"pages_count":{"type":"integer","title":"Pages Count","default":0},"competitor_count":{"type":"integer","title":"Competitor Count","default":0},"latest_crawl":{"anyOf":[{"$ref":"#/components/schemas/CrawlJobStatus"},{"type":"null"}]},"related_site_ids":{"items":{"type":"string"},"type":"array","title":"Related Site Ids"},"latest_analysis":{"anyOf":[{"$ref":"#/components/schemas/AnalyzeResponse"},{"type":"null"}]}},"type":"object","required":["id","domain"],"title":"SiteOverviewOut","description":"Roll-up payload for /dashboard/sites/[siteId]."},"SiteRefBody":{"properties":{"site_id":{"type":"string","title":"Site Id"}},"type":"object","required":["site_id"],"title":"SiteRefBody"},"SnapshotDetail":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"url":{"type":"string","title":"Url"},"seo_score":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Seo Score"},"aeo_score":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Aeo Score"},"geo_score":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Geo Score"},"seo_breakdown":{"anyOf":[{"$ref":"#/components/schemas/SeoScoreBreakdown"},{"type":"null"}]},"passing_signals":{"type":"integer","title":"Passing Signals","default":0},"total_signals":{"type":"integer","title":"Total Signals","default":33},"trigger_source":{"type":"string","title":"Trigger Source","default":"api"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"crawl_data":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Crawl Data"},"analyze_data":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Analyze Data"}},"type":"object","required":["id","url","created_at"],"title":"SnapshotDetail"},"SnapshotDiff":{"properties":{"before":{"$ref":"#/components/schemas/SnapshotSummary"},"after":{"$ref":"#/components/schemas/SnapshotSummary"},"seo_delta":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Seo Delta"},"aeo_delta":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Aeo Delta"},"geo_delta":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Geo Delta"},"breakdown_delta":{"anyOf":[{"additionalProperties":{"type":"number"},"type":"object"},{"type":"null"}],"title":"Breakdown Delta"},"signals_delta":{"type":"integer","title":"Signals Delta","default":0},"new_issues":{"items":{"type":"string"},"type":"array","title":"New Issues"},"resolved_issues":{"items":{"type":"string"},"type":"array","title":"Resolved Issues"}},"type":"object","required":["before","after"],"title":"SnapshotDiff"},"SnapshotSummary":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"url":{"type":"string","title":"Url"},"seo_score":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Seo Score"},"aeo_score":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Aeo Score"},"geo_score":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Geo Score"},"seo_breakdown":{"anyOf":[{"$ref":"#/components/schemas/SeoScoreBreakdown"},{"type":"null"}]},"passing_signals":{"type":"integer","title":"Passing Signals","default":0},"total_signals":{"type":"integer","title":"Total Signals","default":33},"trigger_source":{"type":"string","title":"Trigger Source","default":"api"},"created_at":{"type":"string","format":"date-time","title":"Created At"}},"type":"object","required":["id","url","created_at"],"title":"SnapshotSummary"},"SnippetCheckRequest":{"properties":{"urls":{"items":{"type":"string"},"type":"array","title":"Urls"}},"type":"object","required":["urls"],"title":"SnippetCheckRequest"},"StartProspectAuditRequest":{"properties":{"domain":{"type":"string","maxLength":255,"minLength":3,"title":"Domain"},"client_name":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Client Name"},"agency_notes":{"anyOf":[{"type":"string","maxLength":4000},{"type":"null"}],"title":"Agency Notes"},"style_reference":{"anyOf":[{"type":"string","maxLength":20000},{"type":"null"}],"title":"Style Reference","description":"An example of a past audit's structure/tone — round-tripped back to you, never interpreted server-side. Use it yourself when you write the narrative."},"competitor_domains":{"anyOf":[{"items":{"type":"string"},"type":"array","maxItems":5},{"type":"null"}],"title":"Competitor Domains"},"max_pages":{"anyOf":[{"type":"integer","maximum":2000.0,"minimum":10.0},{"type":"null"}],"title":"Max Pages"}},"type":"object","required":["domain"],"title":"StartProspectAuditRequest"},"StartSiteCrawlRequest":{"properties":{"seed_url":{"type":"string","title":"Seed Url"},"site_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Site Id"},"config":{"anyOf":[{"$ref":"#/components/schemas/SiteCrawlConfig"},{"type":"null"}]}},"type":"object","required":["seed_url"],"title":"StartSiteCrawlRequest"},"SuggestSourcesBody":{"properties":{"max_claims":{"type":"integer","maximum":10.0,"minimum":1.0,"title":"Max Claims","default":6},"web_search":{"type":"boolean","title":"Web Search","default":true}},"type":"object","title":"SuggestSourcesBody"},"SyncResponse":{"properties":{"synced_queries":{"type":"integer","title":"Synced Queries"},"site":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Site"},"warning":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Warning"}},"type":"object","required":["synced_queries"],"title":"SyncResponse"},"TechnicalSeoSignals":{"properties":{"has_canonical":{"type":"boolean","title":"Has Canonical","default":false},"canonical_self_referencing":{"type":"boolean","title":"Canonical Self Referencing","default":false},"canonical_variant_of_self":{"type":"boolean","title":"Canonical Variant Of Self","default":false},"canonical_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Canonical Url"},"page_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Page Url"},"has_robots_meta":{"type":"boolean","title":"Has Robots Meta","default":false},"robots_directives":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Robots Directives"},"robots_sources":{"anyOf":[{"items":{"additionalProperties":{"type":"string"},"type":"object"},"type":"array"},{"type":"null"}],"title":"Robots Sources"},"has_viewport":{"type":"boolean","title":"Has Viewport","default":false},"has_charset":{"type":"boolean","title":"Has Charset","default":false},"has_lang":{"type":"boolean","title":"Has Lang","default":false},"lang_value":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Lang Value"},"is_https":{"type":"boolean","title":"Is Https","default":false},"has_og_title":{"type":"boolean","title":"Has Og Title","default":false},"has_og_desc":{"type":"boolean","title":"Has Og Desc","default":false},"has_og_image":{"type":"boolean","title":"Has Og Image","default":false},"has_twitter_card":{"type":"boolean","title":"Has Twitter Card","default":false},"title_length":{"type":"integer","title":"Title Length","default":0},"meta_desc_length":{"type":"integer","title":"Meta Desc Length","default":0},"h1_count":{"type":"integer","title":"H1 Count","default":0},"image_count":{"type":"integer","title":"Image Count","default":0},"images_without_alt":{"type":"integer","title":"Images Without Alt","default":0},"has_favicon":{"type":"boolean","title":"Has Favicon","default":false}},"type":"object","title":"TechnicalSeoSignals"},"TemplateConditionsBody":{"properties":{"conditions":{"items":{"type":"string"},"type":"array","title":"Conditions"},"publish":{"type":"boolean","title":"Publish","default":false}},"type":"object","required":["conditions"],"title":"TemplateConditionsBody"},"TemplateStatusBody":{"properties":{"status":{"type":"string","title":"Status"}},"type":"object","required":["status"],"title":"TemplateStatusBody"},"TrackedKeywordOut":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"keyword":{"type":"string","title":"Keyword"},"search_volume":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Search Volume"},"keyword_difficulty":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Keyword Difficulty"},"current_position":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Current Position"},"ranking_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Ranking Url"},"ranking_location_code":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Ranking Location Code"},"ranking_location_name":{"type":"string","title":"Ranking Location Name","default":"Global"},"ranking_location_type":{"type":"string","title":"Ranking Location Type","default":"Global"},"ranking_search_engine":{"type":"string","title":"Ranking Search Engine","default":"google"},"ranking_language_code":{"type":"string","title":"Ranking Language Code","default":"en"},"ranking_device":{"type":"string","title":"Ranking Device","default":"desktop"},"cpc":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Cpc"},"competition":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Competition"},"last_checked_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Checked At"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"intent":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Intent"},"funnel_stage":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Funnel Stage"},"cluster_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Cluster Name"},"source":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Source","default":"manual"},"notes":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Notes"},"classified_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Classified At"},"position_context":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Position Context"},"checked_days_ago":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Checked Days Ago"}},"type":"object","required":["id","keyword","created_at"],"title":"TrackedKeywordOut"},"TrackedKeywordsListResponse":{"properties":{"keywords":{"items":{"$ref":"#/components/schemas/TrackedKeywordOut"},"type":"array","title":"Keywords"},"count":{"type":"integer","title":"Count","default":0},"location_code":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Location Code"},"ranking_config":{"$ref":"#/components/schemas/RankingConfig"},"brand_profile":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Brand Profile"},"placeholder_keywords":{"items":{"type":"string"},"type":"array","title":"Placeholder Keywords"},"last_check":{"anyOf":[{"$ref":"#/components/schemas/RankCheckRunOut"},{"type":"null"}]}},"type":"object","required":["ranking_config"],"title":"TrackedKeywordsListResponse"},"TransformPageBody":{"properties":{"site_id":{"type":"string","title":"Site Id"},"post_id":{"type":"integer","title":"Post Id"},"instruction":{"type":"string","title":"Instruction"},"dry_run":{"type":"boolean","title":"Dry Run","default":false}},"type":"object","required":["site_id","post_id","instruction"],"title":"TransformPageBody"},"TrendPoint":{"properties":{"date":{"type":"string","title":"Date"},"seo_score":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Seo Score"},"aeo_score":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Aeo Score"},"geo_score":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Geo Score"},"passing_signals":{"type":"integer","title":"Passing Signals","default":0}},"type":"object","required":["date"],"title":"TrendPoint"},"TrendsResponse":{"properties":{"url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Url"},"site":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Site"},"points":{"items":{"$ref":"#/components/schemas/TrendPoint"},"type":"array","title":"Points"},"period_days":{"type":"integer","title":"Period Days","default":90}},"type":"object","title":"TrendsResponse"},"UnderstandBrandRequest":{"properties":{"domain":{"type":"string","title":"Domain"}},"type":"object","required":["domain"],"title":"UnderstandBrandRequest"},"UpdateActionItemRequest":{"properties":{"status":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status"},"priority":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Priority"},"title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Title"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"}},"type":"object","title":"UpdateActionItemRequest"},"UpdateBriefBody":{"properties":{"title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Title"},"intent":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Intent"},"kind":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Kind"},"status":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status"},"outline":{"anyOf":[{"items":{},"type":"array"},{"type":"null"}],"title":"Outline"},"draft_md":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Draft Md"},"notes":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Notes"},"refresh_evidence":{"type":"boolean","title":"Refresh Evidence","default":false},"refresh_serp":{"type":"boolean","title":"Refresh Serp","default":false},"published_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Published Url"},"human_inputs":{"anyOf":[{"additionalProperties":{"type":"string"},"type":"object"},{"type":"null"}],"title":"Human Inputs"},"author_draft":{"anyOf":[{"type":"string","maxLength":200000},{"type":"null"}],"title":"Author Draft"}},"type":"object","title":"UpdateBriefBody"},"UpdateContentBody":{"properties":{"sections":{"anyOf":[{"items":{},"type":"array"},{"type":"null"}],"title":"Sections"},"html":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Html"},"elementor_data":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Elementor Data"},"atomic":{"anyOf":[{"items":{},"type":"array"},{"type":"null"}],"title":"Atomic"},"blocks":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Blocks"},"force_builder":{"type":"boolean","title":"Force Builder","default":false},"title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Title"},"dry_run":{"type":"boolean","title":"Dry Run","default":false},"page_settings":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Page Settings"}},"type":"object","title":"UpdateContentBody"},"UpdateLeadRequest":{"properties":{"status":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status"},"notes":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Notes"},"tags":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Tags"}},"type":"object","title":"UpdateLeadRequest"},"UpdateOrgBody":{"properties":{"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"avatar_color":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Avatar Color"},"avatar_icon":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Avatar Icon"}},"type":"object","title":"UpdateOrgBody"},"UpdateTemplateBody":{"properties":{"sections":{"anyOf":[{"items":{},"type":"array"},{"type":"null"}],"title":"Sections"},"elementor_data":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Elementor Data"},"elements":{"anyOf":[{"items":{},"type":"array"},{"type":"null"}],"title":"Elements"},"atomic":{"anyOf":[{"items":{},"type":"array"},{"type":"null"}],"title":"Atomic"},"dry_run":{"type":"boolean","title":"Dry Run","default":false},"title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Title"},"page_settings":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Page Settings"}},"type":"object","title":"UpdateTemplateBody"},"UpgradeAccordionsBody":{"properties":{"dry_run":{"type":"boolean","title":"Dry Run","default":false}},"type":"object","title":"UpgradeAccordionsBody"},"UrlInspectionOut":{"properties":{"id":{"type":"string","title":"Id"},"url":{"type":"string","title":"Url"},"verdict":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Verdict"},"coverage_state":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Coverage State"},"indexing_state":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Indexing State"},"robots_txt_state":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Robots Txt State"},"page_fetch_state":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Page Fetch State"},"crawled_as":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Crawled As"},"google_canonical":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Google Canonical"},"user_canonical":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"User Canonical"},"last_crawl_time":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Last Crawl Time"},"referring_urls":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Referring Urls"},"mobile_verdict":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Mobile Verdict"},"mobile_issues":{"anyOf":[{"items":{"additionalProperties":true,"type":"object"},"type":"array"},{"type":"null"}],"title":"Mobile Issues"},"rich_results_verdict":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Rich Results Verdict"},"rich_results_items":{"anyOf":[{"items":{"additionalProperties":true,"type":"object"},"type":"array"},{"type":"null"}],"title":"Rich Results Items"},"inspected_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Inspected At"}},"type":"object","required":["id","url"],"title":"UrlInspectionOut"},"UrlInspectionRequest":{"properties":{"url":{"type":"string","title":"Url"}},"type":"object","required":["url"],"title":"UrlInspectionRequest"},"UrlInspectionsResponse":{"properties":{"inspections":{"items":{"$ref":"#/components/schemas/UrlInspectionOut"},"type":"array","title":"Inspections"},"total":{"type":"integer","title":"Total","default":0},"limit":{"type":"integer","title":"Limit","default":100},"offset":{"type":"integer","title":"Offset","default":0}},"type":"object","title":"UrlInspectionsResponse"},"V4StyleBody":{"properties":{"operations":{"items":{"$ref":"#/components/schemas/V4StyleOp"},"type":"array","title":"Operations"},"dry_run":{"type":"boolean","title":"Dry Run","default":false},"publish":{"type":"boolean","title":"Publish","default":true},"include_pending_draft":{"type":"boolean","title":"Include Pending Draft","default":false}},"type":"object","required":["operations"],"title":"V4StyleBody"},"V4StyleOp":{"properties":{"element_id":{"type":"string","title":"Element Id"},"css":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Css"},"mode":{"type":"string","title":"Mode","default":"patch"},"classes":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Classes"},"interactions":{"anyOf":[{"items":{},"type":"array"},{"type":"null"}],"title":"Interactions"}},"type":"object","required":["element_id"],"title":"V4StyleOp"},"ValidateResponse":{"properties":{"user_id":{"type":"string","title":"User Id"},"email":{"type":"string","title":"Email"},"valid":{"type":"boolean","title":"Valid"}},"type":"object","required":["user_id","email","valid"],"title":"ValidateResponse"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"},"input":{"title":"Input"},"ctx":{"type":"object","title":"Context"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"},"VoiceProfileBody":{"properties":{"urls":{"anyOf":[{"items":{"type":"string"},"type":"array","maxItems":25},{"type":"null"}],"title":"Urls"},"text":{"anyOf":[{"type":"string","maxLength":400000},{"type":"null"}],"title":"Text"},"register":{"type":"string","maxLength":32,"title":"Register","default":"blog"},"label":{"anyOf":[{"type":"string","maxLength":120},{"type":"null"}],"title":"Label"}},"type":"object","title":"VoiceProfileBody"},"WhatsAppAIPlan":{"properties":{"next_action":{"type":"string","title":"Next Action"},"confidence":{"type":"number","title":"Confidence"},"reply_text":{"type":"string","title":"Reply Text"},"reasons":{"items":{"type":"string"},"type":"array","title":"Reasons"}},"type":"object","required":["next_action","confidence","reply_text"],"title":"WhatsAppAIPlan"},"WhatsAppAdminConfigResponse":{"properties":{"tenant_id":{"type":"string","title":"Tenant Id"},"status":{"type":"string","title":"Status"},"dependencies":{"additionalProperties":true,"type":"object","title":"Dependencies"},"next_steps":{"items":{"type":"string"},"type":"array","title":"Next Steps"}},"type":"object","required":["tenant_id","status"],"title":"WhatsAppAdminConfigResponse"},"WhatsAppBroadcastRequest":{"properties":{"tenant_id":{"type":"string","title":"Tenant Id"},"audience_name":{"type":"string","title":"Audience Name"},"recipient_count":{"type":"integer","minimum":1.0,"title":"Recipient Count"},"body":{"type":"string","title":"Body"}},"type":"object","required":["tenant_id","audience_name","recipient_count","body"],"title":"WhatsAppBroadcastRequest"},"WhatsAppBroadcastResponse":{"properties":{"tenant_id":{"type":"string","title":"Tenant Id"},"broadcast_id":{"type":"string","title":"Broadcast Id"},"audience_name":{"type":"string","title":"Audience Name"},"recipient_count":{"type":"integer","title":"Recipient Count"},"accepted":{"type":"boolean","title":"Accepted"},"channel":{"type":"string","title":"Channel"}},"type":"object","required":["tenant_id","broadcast_id","audience_name","recipient_count","accepted","channel"],"title":"WhatsAppBroadcastResponse"},"WhatsAppContact":{"properties":{"tenant_id":{"type":"string","title":"Tenant Id"},"phone_number":{"type":"string","title":"Phone Number"},"display_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Display Name"},"tags":{"items":{"type":"string"},"type":"array","title":"Tags"},"last_message_preview":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Last Message Preview"}},"type":"object","required":["tenant_id","phone_number"],"title":"WhatsAppContact"},"WhatsAppContactListResponse":{"properties":{"tenant_id":{"type":"string","title":"Tenant Id"},"contacts":{"items":{"$ref":"#/components/schemas/WhatsAppContact"},"type":"array","title":"Contacts"}},"type":"object","required":["tenant_id"],"title":"WhatsAppContactListResponse"},"WhatsAppConversationItem":{"properties":{"tenant_id":{"type":"string","title":"Tenant Id"},"conversation_id":{"type":"string","title":"Conversation Id"},"phone_number":{"type":"string","title":"Phone Number"},"status":{"type":"string","title":"Status"},"assigned_to":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Assigned To"},"last_message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Last Message"},"waiting_for":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Waiting For"}},"type":"object","required":["tenant_id","conversation_id","phone_number","status"],"title":"WhatsAppConversationItem"},"WhatsAppConversationListResponse":{"properties":{"tenant_id":{"type":"string","title":"Tenant Id"},"conversations":{"items":{"$ref":"#/components/schemas/WhatsAppConversationItem"},"type":"array","title":"Conversations"}},"type":"object","required":["tenant_id"],"title":"WhatsAppConversationListResponse"},"WhatsAppEscalationDecision":{"properties":{"tenant_id":{"type":"string","title":"Tenant Id"},"phone_number":{"type":"string","title":"Phone Number"},"escalate":{"type":"boolean","title":"Escalate"},"queue":{"type":"string","title":"Queue"},"reason":{"type":"string","title":"Reason"}},"type":"object","required":["tenant_id","phone_number","escalate","queue","reason"],"title":"WhatsAppEscalationDecision"},"WhatsAppInboxItem":{"properties":{"tenant_id":{"type":"string","title":"Tenant Id"},"inbox_item_id":{"type":"string","title":"Inbox Item Id"},"phone_number":{"type":"string","title":"Phone Number"},"priority":{"type":"string","title":"Priority"},"summary":{"type":"string","title":"Summary"},"needs_human":{"type":"boolean","title":"Needs Human","default":false}},"type":"object","required":["tenant_id","inbox_item_id","phone_number","priority","summary"],"title":"WhatsAppInboxItem"},"WhatsAppInboxResponse":{"properties":{"tenant_id":{"type":"string","title":"Tenant Id"},"items":{"items":{"$ref":"#/components/schemas/WhatsAppInboxItem"},"type":"array","title":"Items"}},"type":"object","required":["tenant_id"],"title":"WhatsAppInboxResponse"},"WhatsAppRenderedTemplate":{"properties":{"tenant_id":{"type":"string","title":"Tenant Id"},"name":{"type":"string","title":"Name"},"rendered_text":{"type":"string","title":"Rendered Text"},"missing_variables":{"items":{"type":"string"},"type":"array","title":"Missing Variables"},"grounded":{"type":"boolean","title":"Grounded","default":false}},"type":"object","required":["tenant_id","name","rendered_text"],"title":"WhatsAppRenderedTemplate"},"WhatsAppSendRequest":{"properties":{"tenant_id":{"type":"string","title":"Tenant Id"},"to":{"type":"string","title":"To"},"body":{"type":"string","title":"Body"},"correlation_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Correlation Id"}},"type":"object","required":["tenant_id","to","body"],"title":"WhatsAppSendRequest"},"WhatsAppSendResponse":{"properties":{"tenant_id":{"type":"string","title":"Tenant Id"},"to":{"type":"string","title":"To"},"message_id":{"type":"string","title":"Message Id"},"status":{"type":"string","title":"Status"},"channel":{"type":"string","title":"Channel"},"correlation_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Correlation Id"},"delivered_via":{"type":"string","title":"Delivered Via"}},"type":"object","required":["tenant_id","to","message_id","status","channel","delivered_via"],"title":"WhatsAppSendResponse"},"WhatsAppSessionState":{"properties":{"tenant_id":{"type":"string","title":"Tenant Id"},"phone_number":{"type":"string","title":"Phone Number"},"intent":{"type":"string","title":"Intent"},"status":{"type":"string","title":"Status"},"expires_at":{"type":"string","format":"date-time","title":"Expires At"}},"type":"object","required":["tenant_id","phone_number","intent","status","expires_at"],"title":"WhatsAppSessionState"},"WhatsAppTemplateDefinition":{"properties":{"name":{"type":"string","title":"Name"},"language":{"type":"string","title":"Language"},"category":{"type":"string","title":"Category"},"body":{"type":"string","title":"Body"},"variables":{"items":{"type":"string"},"type":"array","title":"Variables"}},"type":"object","required":["name","language","category","body"],"title":"WhatsAppTemplateDefinition"},"WhatsAppTemplateListResponse":{"properties":{"tenant_id":{"type":"string","title":"Tenant Id"},"templates":{"items":{"$ref":"#/components/schemas/WhatsAppTemplateDefinition"},"type":"array","title":"Templates"}},"type":"object","required":["tenant_id"],"title":"WhatsAppTemplateListResponse"},"WhatsAppTemplateRenderRequest":{"properties":{"tenant_id":{"type":"string","title":"Tenant Id"},"name":{"type":"string","title":"Name"},"body":{"type":"string","title":"Body"},"variables":{"items":{"type":"string"},"type":"array","title":"Variables"},"values":{"additionalProperties":true,"type":"object","title":"Values"}},"type":"object","required":["tenant_id","name","body"],"title":"WhatsAppTemplateRenderRequest"},"WhatsAppWebhookEvent":{"properties":{"tenant_id":{"type":"string","title":"Tenant Id"},"message_id":{"type":"string","title":"Message Id"},"from_number":{"type":"string","title":"From Number"},"profile_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Profile Name"},"text":{"type":"string","title":"Text","default":""},"timestamp":{"type":"string","format":"date-time","title":"Timestamp"},"message_type":{"type":"string","title":"Message Type","default":"text"},"metadata":{"additionalProperties":true,"type":"object","title":"Metadata"}},"type":"object","required":["tenant_id","message_id","from_number","timestamp"],"title":"WhatsAppWebhookEvent"},"WhatsAppWebhookProcessResponse":{"properties":{"event":{"$ref":"#/components/schemas/WhatsAppWebhookEvent"},"ai_plan":{"$ref":"#/components/schemas/WhatsAppAIPlan"},"session":{"$ref":"#/components/schemas/WhatsAppSessionState"},"escalation":{"$ref":"#/components/schemas/WhatsAppEscalationDecision"},"outbound":{"$ref":"#/components/schemas/WhatsAppSendResponse"}},"type":"object","required":["event","ai_plan","session","escalation","outbound"],"title":"WhatsAppWebhookProcessResponse"},"WidgetKeysBody":{"properties":{"site_id":{"type":"string","title":"Site Id"},"widget_type":{"type":"string","title":"Widget Type"},"intent":{"type":"string","title":"Intent"},"tab":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tab"}},"type":"object","required":["site_id","widget_type","intent"],"title":"WidgetKeysBody"},"WriteBody":{"properties":{"site_id":{"type":"string","title":"Site Id"},"files":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Files"},"message":{"type":"string","title":"Message","default":"Update from XeoRank agent"}},"type":"object","required":["site_id","files"],"title":"WriteBody"},"WritingFixBody":{"properties":{"text":{"type":"string","title":"Text"},"findings":{"anyOf":[{"items":{"additionalProperties":true,"type":"object"},"type":"array"},{"type":"null"}],"title":"Findings"},"target_keyword":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Target Keyword"},"voice_notes":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Voice Notes"},"site_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Site Id"},"max_findings":{"type":"integer","title":"Max Findings","default":12}},"type":"object","required":["text"],"title":"WritingFixBody"},"api__routers__business_reports__ScheduleRequest":{"properties":{"frequency":{"type":"string","title":"Frequency","description":"weekly, monthly, or both"},"is_active":{"type":"boolean","title":"Is Active","default":true},"day_of_month":{"type":"integer","maximum":28.0,"minimum":1.0,"title":"Day Of Month","default":1},"recipients":{"items":{"type":"string"},"type":"array","maxItems":50,"title":"Recipients"},"timezone":{"type":"string","maxLength":64,"minLength":1,"title":"Timezone","default":"UTC"},"brand_terms":{"items":{"type":"string"},"type":"array","maxItems":25,"title":"Brand Terms"}},"type":"object","required":["frequency"],"title":"ScheduleRequest"},"api__routers__code_sites__ConnectBody":{"properties":{"token":{"type":"string","title":"Token"},"team_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Team Id"}},"type":"object","required":["token"],"title":"ConnectBody"},"api__routers__keywords__ChatRequest":{"properties":{"message":{"type":"string","maxLength":4000,"minLength":1,"title":"Message"}},"type":"object","required":["message"],"title":"ChatRequest"},"api__routers__wordpress__ConnectBody":{"properties":{"domain":{"type":"string","title":"Domain"},"label":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Label"},"transport":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Transport","default":"plugin"}},"type":"object","required":["domain"],"title":"ConnectBody"},"api__routers__xeo_audit__ChatRequest":{"properties":{"message":{"type":"string","maxLength":8000,"minLength":1,"title":"Message"}},"type":"object","required":["message"],"title":"ChatRequest"},"api__routers__xeo_audit__ScheduleRequest":{"properties":{"frequency":{"type":"string","title":"Frequency","default":"monthly"}},"type":"object","title":"ScheduleRequest"}},"securitySchemes":{"APIKeyHeader":{"type":"apiKey","in":"header","name":"X-Agent-Key"}}}}