{"openapi":"3.1.0","info":{"title":"Corpus Plan","version":"0.1.0"},"paths":{"/signup":{"get":{"summary":"Signup Page","operationId":"signup_page_signup_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}},"post":{"tags":["auth"],"summary":"Signup","operationId":"signup_signup_post","requestBody":{"content":{"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/Body_signup_signup_post"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/login":{"get":{"summary":"Login Page","operationId":"login_page_login_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}},"post":{"tags":["auth"],"summary":"Login","operationId":"login_login_post","requestBody":{"content":{"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/Body_login_login_post"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/logout":{"post":{"tags":["auth"],"summary":"Logout","operationId":"logout_logout_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/auth/google":{"get":{"tags":["auth"],"summary":"Google Start","description":"Send the visitor to Google's consent screen.\n\n``next`` and ``claim`` travel inside the signed state rather than on the\nredirect URI, which Google matches literally.","operationId":"google_start_auth_google_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/auth/google/callback":{"get":{"tags":["auth"],"summary":"Google Callback","description":"Google's redirect back after consent.\n\nOrder matters: verify the signed state before anything else, then\nexchange the code, then validate the ID token (signature, audience,\nissuer, and a verified email). Only after all of that does a User row get\nread or written.","operationId":"google_callback_auth_google_callback_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/billing/checkout":{"get":{"summary":"Checkout After Signup","description":"Cardless signup lands here and opens the same Checkout session.","operationId":"checkout_after_signup_billing_checkout_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}},"post":{"summary":"Checkout","description":"Existing $99 Pro Checkout. STRIPE_PRICE_PRO is price_1UAZIG0GTTeerVyiRYzzHhve.","operationId":"checkout_billing_checkout_post","requestBody":{"content":{"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/Body_checkout_billing_checkout_post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/billing/portal":{"post":{"summary":"Billing Portal","operationId":"billing_portal_billing_portal_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/webhooks/stripe":{"post":{"summary":"Stripe Webhook","operationId":"stripe_webhook_webhooks_stripe_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/":{"get":{"summary":"Landing","operationId":"landing__get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/demo":{"get":{"summary":"Portal Demo","description":"The portal, visible without an account: a read-only view of our own\nsite's latest stored audit, built with the same helpers the logged-in\nsite view uses. Every number rendered comes from DB rows — nothing is\nmocked. When no completed audit exists for the demo site, an honest\nempty state renders instead of a 500.\n\nDemo site selection: among Site rows whose url matches DEMO_SITE_URL,\nthe one holding the newest completed audit wins (anonymous free audits\ncan create several rows for the same origin).","operationId":"portal_demo_demo_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/methodology":{"get":{"summary":"Methodology","description":"Public methodology page: every check, threshold band and deduction the\naudit runs, rendered from the same constants the engine imports — the\nnumbers on the page cannot drift from the code that produces the scores.\nThe finding-code tables are hand-written from the pillar sources and held\nin step by a parity test (tests/test_methodology.py) that fails the build\nif any code in the pillar files is missing from the page.","operationId":"methodology_methodology_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/learn/who-ai-cites-immigration-law":{"get":{"summary":"Cite Study Article","description":"Published study: who retrieval answer engines cite for the questions\nimmigration clients actually ask.\n\nEvery figure is our own measurement, taken with the same engine and the\nsame audit that runs for customers. No outside claim is made, so there is\nno source list to maintain - the method section IS the citation.","operationId":"cite_study_article_learn_who_ai_cites_immigration_law_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/learn/llms-txt-honest-data":{"get":{"summary":"Llms Truth Article","description":"Public content piece from the GTM calendar.\n\nHouse rails: source every outside fact, keep llms.txt framed as a cheap\nparity file and a documentation aid, and never imply it causes AI mentions.","operationId":"llms_truth_article_learn_llms_txt_honest_data_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/learn/what-an-seo-score-means":{"get":{"summary":"Seo Score Article","description":"Teardown of our own score regression (GTM content cadence, 2026-09-10).\n\nEvery first-party number on the page is a real measurement of our own\nsite, dated on the page. Outside facts are limited to Google's own\ndocumentation and carry numbered sources with access dates.","operationId":"seo_score_article_learn_what_an_seo_score_means_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/learn/google-search-console-seo-wins":{"get":{"summary":"Gsc Seo Wins Article","description":"Public content piece for Search Console opportunity mining.","operationId":"gsc_seo_wins_article_learn_google_search_console_seo_wins_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/learn/chatgpt-traffic-is-seo":{"get":{"summary":"Chatgpt Traffic Article","description":"Public content piece for the SEO-first AI visibility angle.","operationId":"chatgpt_traffic_article_learn_chatgpt_traffic_is_seo_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/learn/marketing-portal":{"get":{"summary":"Marketing Portal Article","description":"Plan launch page: portal positioning, product facts only.","operationId":"marketing_portal_article_learn_marketing_portal_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/learn/free-seo-audit-no-email":{"get":{"summary":"No Wall Audit Article","description":"Public product-led content piece from the GTM calendar.\n\nUses only Corpus Plan product facts: one URL field, no email wall, the\nfive published pillars, and the upgrade path into a tracked workspace.","operationId":"no_wall_audit_article_learn_free_seo_audit_no_email_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/tools/{slug}":{"get":{"summary":"Inbound Tool Page","operationId":"inbound_tool_page_tools__slug__get","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string","title":"Slug"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/guides/{slug}":{"get":{"summary":"Inbound Guide Page","operationId":"inbound_guide_page_guides__slug__get","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string","title":"Slug"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/resources/{slug}":{"get":{"summary":"Inbound Resource Page","operationId":"inbound_resource_page_resources__slug__get","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string","title":"Slug"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/ai-visibility":{"get":{"summary":"Ai Visibility Page","operationId":"ai_visibility_page_ai_visibility_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/managed":{"get":{"summary":"Managed Page","operationId":"managed_page_managed_get","parameters":[{"name":"site_url","in":"query","required":false,"schema":{"type":"string","default":"","title":"Site Url"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/managed/intake":{"post":{"summary":"Managed Intake","operationId":"managed_intake_managed_intake_post","requestBody":{"content":{"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/Body_managed_intake_managed_intake_post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/managed/thanks":{"get":{"summary":"Managed Thanks","operationId":"managed_thanks_managed_thanks_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/contact":{"get":{"summary":"Contact Page","operationId":"contact_page_contact_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/privacy":{"get":{"summary":"Privacy Page","operationId":"privacy_page_privacy_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/terms":{"get":{"summary":"Terms Page","operationId":"terms_page_terms_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/vs/{slug}":{"get":{"summary":"Vs Page","description":"Public comparison pages (docs/gtm/SEO_GEO_STRATEGY.md section 2.6; the\nads plan's Alternatives ad group). One template driven by VS_PAGES.\nR-no-fabrication is enforced by shape: a competitor cell either carries a\nnumbered source rendered next to it or says \"not published\".","operationId":"vs_page_vs__slug__get","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string","title":"Slug"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/audit":{"post":{"summary":"Start Free Audit","operationId":"start_free_audit_audit_post","requestBody":{"content":{"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/Body_start_free_audit_audit_post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/r/{slug}/print":{"get":{"summary":"Report Print","description":"Print / save-as-PDF view of a completed report (account gate, hub D15).\n\nNeeds a login. An unclaimed report is claimed into this account first\n(same rules as every other claim); when that fails the viewer lands back\non the report with an honest notice. Claimed reports are shareable, so any\nlogged-in viewer of one may print it.","operationId":"report_print_r__slug__print_get","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string","title":"Slug"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/r/{slug}":{"get":{"summary":"Report","operationId":"report_r__slug__get","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string","title":"Slug"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api":{"get":{"summary":"Api Index","description":"Public machine surface for agents and integrators.\n\nKeep this honest: advertise only endpoints that actually exist. Planned\nsurfaces are marked unavailable instead of being implied by the brand copy.","operationId":"api_index_api_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/connectors/claude":{"get":{"summary":"Claude Connector Setup","operationId":"claude_connector_setup_connectors_claude_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/connectors/chatgpt":{"get":{"summary":"Chatgpt Connector Setup","operationId":"chatgpt_connector_setup_connectors_chatgpt_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/mcp":{"get":{"summary":"Mcp Get","operationId":"mcp_get_mcp_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}},"post":{"summary":"Mcp Post","operationId":"mcp_post_mcp_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/reports/{slug}":{"get":{"summary":"Report Json","operationId":"report_json_api_reports__slug__get","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string","title":"Slug"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/audit/{slug}/progress":{"get":{"summary":"Audit Progress","description":"Live progress JSON for the audit behind a report link (teardown item 2).\n\nAccess rule is exactly the report page's: the unguessable 128-bit slug IS\nthe capability, so anyone who could watch the running report may poll its\nprogress — nothing more is exposed. Shape: {\"status\": ..., \"steps\": [...]}.\nSteps come from the engine's in-process registry; when it has nothing for\na still-running audit (process restarted mid-run) one generic line is\nreturned instead — never fabricated step lines.","operationId":"audit_progress_audit__slug__progress_get","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string","title":"Slug"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/r/{slug}/claim":{"post":{"summary":"Claim Report","description":"One-click claim for a logged-in viewer of an unowned report.\n\nSame rules as claiming at signup/login (_try_claim_site): an owned site is\nnever reassigned and the per-plan site cap holds. On failure the viewer\nlands back on the report with an honest notice.","operationId":"claim_report_r__slug__claim_post","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string","title":"Slug"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/billing/success":{"get":{"summary":"Billing Success","description":"Stripe Checkout success landing page.\n\nRenders the subscription confirmation and fires the client-side conversion\nevents (GA4 sign_up/purchase, an optional Google Ads conversion, an optional\nMeta Subscribe). This page has to exist for Google Ads attribution: the\ngclid we persist first-party on the ad landing is what the offline-conversion\nimport later ties to the subscription, and a fired conversion needs a real\nlanding URL. The billing state itself is set by the Stripe webhook (builder\nB), not by this page — this only confirms and reports the conversion.\n\nThe conversion snippet is gated on ``viewer_is_pro``: this URL is public and\nguessable, so an anonymous or still-free visitor who lands here would\notherwise mint a $99 purchase on page load and teach Smart Bidding to buy\nthat traffic. Server-held plan state is the cheap guard — it needs no Stripe\ncall. The proper fix is verifying the Stripe ``session_id`` on this request;\nthat is billing code and waits for a watched window.\n\nThe GA4 pair carries a second, one-shot gate on top of that: ``viewer_is_pro``\nis true forever, GA4 does not dedupe, and so every later visit to this URL\nre-reported the same purchase as new revenue. The Google Ads line keeps the\nplain Pro gate on purpose — its conversion action is ONE_PER_CLICK over a\n90-day window, so repeat renders cannot inflate it, and a second condition\nthere could only suppress a legitimate first conversion.\n\n``?w=`` is the bounded re-check counter for the one case the gate would\notherwise cost us a real sale: a genuine buyer redirected here before the\nwebhook has promoted them. It only drives a client-side reload of this same\nGET, so it can neither grant Pro nor fire anything on its own; anything\noutside 0..SUCCESS_WAIT_MAX reads as 0, and the last attempt renders no\nscript at all.","operationId":"billing_success_billing_success_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/llms.txt":{"get":{"summary":"Llms Txt","description":"Dogfood: the llms.txt Corpus Plan tells customers to publish, published\nfor our own site. Lists only pages that actually exist and are public.","operationId":"llms_txt_llms_txt_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/robots.txt":{"get":{"summary":"Robots Txt","description":"Dogfood: allow normal crawling and name the AI crawlers explicitly, so\nthe same GEO advice the product gives is applied to our own site.","operationId":"robots_txt_robots_txt_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/sitemap.xml":{"get":{"summary":"Sitemap Xml","description":"Backs the robots.txt Sitemap: line with a real sitemap of the public\npages, so that line points at something that exists (house rule: no dead\nreferences). Opaque report links are intentionally not listed.","operationId":"sitemap_xml_sitemap_xml_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/health":{"get":{"summary":"Health","operationId":"health_health_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Health Health Get"}}}}}}},"/static/{path}":{"get":{"summary":"Static File","description":"Serve the web layer's own static files so the pages work regardless of\nhow main.py mounts things. Resolves and containment-checks the path.","operationId":"static_file_static__path__get","parameters":[{"name":"path","in":"path","required":true,"schema":{"type":"string","title":"Path"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/u/{token}":{"get":{"summary":"Nurture Unsubscribe Page","operationId":"nurture_unsubscribe_page_u__token__get","parameters":[{"name":"token","in":"path","required":true,"schema":{"type":"string","title":"Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"summary":"Nurture Unsubscribe","operationId":"nurture_unsubscribe_u__token__post","parameters":[{"name":"token","in":"path","required":true,"schema":{"type":"string","title":"Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/app":{"get":{"summary":"Dashboard","operationId":"dashboard_app_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/app/sites":{"post":{"summary":"Add Site","operationId":"add_site_app_sites_post","requestBody":{"content":{"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/Body_add_site_app_sites_post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/app/sites/{site_id}":{"get":{"summary":"Site Detail","operationId":"site_detail_app_sites__site_id__get","parameters":[{"name":"site_id","in":"path","required":true,"schema":{"type":"integer","title":"Site Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/app/sites/{site_id}/items/{key}/state":{"post":{"summary":"Set Item State","description":"Mark one queue item (a finding or a worked-plan step) open, done, or\ndismissed. Free AND pro — no billing gate; ownership-checked like every\nsite action. The key must belong to the latest completed audit\n(queue_keys), otherwise 404, so junk keys never accumulate. Persists as\nEvent(kind=\"finding_state\", data={key, state, at}), replacing any prior\nrow for the same key; \"open\" is the undo and is stored the same way so\nthe change carries a timestamp. Redirects back to the section the form\nnamed (queue or findings).","operationId":"set_item_state_app_sites__site_id__items__key__state_post","parameters":[{"name":"site_id","in":"path","required":true,"schema":{"type":"integer","title":"Site Id"}},{"name":"key","in":"path","required":true,"schema":{"type":"string","title":"Key"}}],"requestBody":{"content":{"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/Body_set_item_state_app_sites__site_id__items__key__state_post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/app/sites/{site_id}/audit":{"post":{"summary":"Rerun Audit","operationId":"rerun_audit_app_sites__site_id__audit_post","parameters":[{"name":"site_id","in":"path","required":true,"schema":{"type":"integer","title":"Site Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/app/sites/{site_id}/plan":{"post":{"summary":"Make Plan","operationId":"make_plan_app_sites__site_id__plan_post","parameters":[{"name":"site_id","in":"path","required":true,"schema":{"type":"integer","title":"Site Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/app/sites/{site_id}/artifacts/{kind}":{"post":{"summary":"Make Artifact","operationId":"make_artifact_app_sites__site_id__artifacts__kind__post","parameters":[{"name":"site_id","in":"path","required":true,"schema":{"type":"integer","title":"Site Id"}},{"name":"kind","in":"path","required":true,"schema":{"type":"string","title":"Kind"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/app/sites/{site_id}/artifacts/{artifact_id}/download":{"get":{"summary":"Download Artifact","operationId":"download_artifact_app_sites__site_id__artifacts__artifact_id__download_get","parameters":[{"name":"site_id","in":"path","required":true,"schema":{"type":"integer","title":"Site Id"}},{"name":"artifact_id","in":"path","required":true,"schema":{"type":"integer","title":"Artifact Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/app/sites/{site_id}/visibility":{"post":{"summary":"Visibility Check","operationId":"visibility_check_app_sites__site_id__visibility_post","parameters":[{"name":"site_id","in":"path","required":true,"schema":{"type":"integer","title":"Site Id"}}],"requestBody":{"content":{"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/Body_visibility_check_app_sites__site_id__visibility_post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/app/sites/{site_id}/ask":{"post":{"summary":"Ask Report","description":"Answer one question about this site, grounded strictly in stored rows.\n\nPro-only (same 303-to-/billing gate as the other pro POSTs). The call\ngoes through app.llm.generate with purpose=\"ask\", the small model, and a\nhard output cap, so the per-user daily budget applies before any spend.\nA successful answer persists as Event(kind=\"ask\") with {\"q\", \"a\"};\nfailures store nothing and flash an honest notice instead.","operationId":"ask_report_app_sites__site_id__ask_post","parameters":[{"name":"site_id","in":"path","required":true,"schema":{"type":"integer","title":"Site Id"}}],"requestBody":{"content":{"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/Body_ask_report_app_sites__site_id__ask_post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/app/sites/{site_id}/drafts":{"post":{"summary":"Make Drafts","description":"Write three social-post DRAFTS grounded strictly in stored rows.\n\nThe owner reviews, edits, and posts them themselves — this product\nnever posts to any platform. Pro-only (same 303-to-/billing gate as the\nother pro POSTs), ownership-checked, and needs a completed audit to\nground in. The call goes through app.llm.generate with\npurpose=\"drafts\", the small model, and a hard output cap, so the\nper-user daily budget applies before any spend. A non-empty completion\npersists as Event(kind=\"drafts\") with {\"drafts\": [{\"channel\",\n\"text\"}]} — three parsed channels, or one unsplit fallback draft;\nfailures store nothing and flash an honest notice instead.","operationId":"make_drafts_app_sites__site_id__drafts_post","parameters":[{"name":"site_id","in":"path","required":true,"schema":{"type":"integer","title":"Site Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/app/sites/{site_id}/weekly":{"post":{"summary":"Toggle Weekly","operationId":"toggle_weekly_app_sites__site_id__weekly_post","parameters":[{"name":"site_id","in":"path","required":true,"schema":{"type":"integer","title":"Site Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/app/sites/{site_id}/gsc/start":{"get":{"summary":"Gsc Start","description":"Send the owner to Google's consent screen for this site.\n\nPro + ownership gated like every other site action. The OAuth state is\nsigned with the app SECRET_KEY and carries user id + site id with a\n10-minute expiry, so the callback can only complete the flow this user\nstarted for this site.","operationId":"gsc_start_app_sites__site_id__gsc_start_get","parameters":[{"name":"site_id","in":"path","required":true,"schema":{"type":"integer","title":"Site Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/oauth/gsc/callback":{"get":{"summary":"Gsc Callback","description":"Google's redirect back after consent (same browser, same login).\n\nVerifies the signed state (signature, 10-minute expiry, user match,\nownership) before anything else. Then: exchange the code, list the\naccount's Search Console properties, and store a token ONLY when one of\nthem actually covers this site's host — otherwise flash the honest\nno-match notice with the real property count and store nothing.","operationId":"gsc_callback_oauth_gsc_callback_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/app/sites/{site_id}/gsc/disconnect":{"post":{"summary":"Gsc Disconnect","description":"Delete the stored token (and this site's snapshots with it): after\nthis, nothing can read the property and no stored numbers remain.","operationId":"gsc_disconnect_app_sites__site_id__gsc_disconnect_post","parameters":[{"name":"site_id","in":"path","required":true,"schema":{"type":"integer","title":"Site Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/app/sites/{site_id}/keywords":{"post":{"summary":"Run Keyword Research","description":"One explicit, spend-guarded DataForSEO call; the result persists as\nEvent(kind=\"keywords\") and every later page view renders the stored set\nfree of charge. CapReached and failures store nothing and flash.","operationId":"run_keyword_research_app_sites__site_id__keywords_post","parameters":[{"name":"site_id","in":"path","required":true,"schema":{"type":"integer","title":"Site Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/app/sites/{site_id}/competitors":{"post":{"summary":"Run Competitor Detection","description":"One explicit, spend-guarded DataForSEO competitors_domain call; the\nresult persists as Event(kind=\"competitors\") and renders in the Context\ncolumn with its source and date. Same guard rails as keywords.","operationId":"run_competitor_detection_app_sites__site_id__competitors_post","parameters":[{"name":"site_id","in":"path","required":true,"schema":{"type":"integer","title":"Site Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/app/compare":{"get":{"summary":"Compare Page","operationId":"compare_page_app_compare_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/app/addons":{"get":{"summary":"Addons Page","operationId":"addons_page_app_addons_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/billing":{"get":{"summary":"Billing Page","operationId":"billing_page_billing_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/app/sales":{"get":{"summary":"Sales Workspace","operationId":"sales_workspace_app_sales_get","parameters":[{"name":"campaign_id","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Campaign Id"}},{"name":"site_id","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Site Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/app/sales/campaigns":{"post":{"summary":"Create Campaign","operationId":"create_campaign_app_sales_campaigns_post","requestBody":{"content":{"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/Body_create_campaign_app_sales_campaigns_post"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/app/sales/campaigns/{campaign_id}/targeting":{"post":{"summary":"Targeting","operationId":"targeting_app_sales_campaigns__campaign_id__targeting_post","parameters":[{"name":"campaign_id","in":"path","required":true,"schema":{"type":"integer","title":"Campaign Id"}}],"requestBody":{"required":true,"content":{"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/Body_targeting_app_sales_campaigns__campaign_id__targeting_post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/app/sales/campaigns/{campaign_id}/state":{"post":{"summary":"Campaign State","operationId":"campaign_state_app_sales_campaigns__campaign_id__state_post","parameters":[{"name":"campaign_id","in":"path","required":true,"schema":{"type":"integer","title":"Campaign Id"}}],"requestBody":{"required":true,"content":{"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/Body_campaign_state_app_sales_campaigns__campaign_id__state_post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/app/sales/campaigns/{campaign_id}/prospects":{"post":{"summary":"Add Prospect","operationId":"add_prospect_app_sales_campaigns__campaign_id__prospects_post","parameters":[{"name":"campaign_id","in":"path","required":true,"schema":{"type":"integer","title":"Campaign Id"}}],"requestBody":{"required":true,"content":{"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/Body_add_prospect_app_sales_campaigns__campaign_id__prospects_post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/app/sales/prospects/{prospect_id}/prepare":{"post":{"summary":"Prepare","operationId":"prepare_app_sales_prospects__prospect_id__prepare_post","parameters":[{"name":"prospect_id","in":"path","required":true,"schema":{"type":"integer","title":"Prospect Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/app/sales/drafts/{draft_id}/review":{"post":{"summary":"Review","operationId":"review_app_sales_drafts__draft_id__review_post","parameters":[{"name":"draft_id","in":"path","required":true,"schema":{"type":"integer","title":"Draft Id"}}],"requestBody":{"required":true,"content":{"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/Body_review_app_sales_drafts__draft_id__review_post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/app/sales/prospects/{prospect_id}/outcome":{"post":{"summary":"Outcome","operationId":"outcome_app_sales_prospects__prospect_id__outcome_post","parameters":[{"name":"prospect_id","in":"path","required":true,"schema":{"type":"integer","title":"Prospect Id"}}],"requestBody":{"required":true,"content":{"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/Body_outcome_app_sales_prospects__prospect_id__outcome_post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/app/sales/drafts/{draft_id}/dispatch":{"post":{"summary":"Dispatch","operationId":"dispatch_app_sales_drafts__draft_id__dispatch_post","parameters":[{"name":"draft_id","in":"path","required":true,"schema":{"type":"integer","title":"Draft Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/app/sales/prospects/{prospect_id}/source":{"post":{"summary":"Recheck Source","operationId":"recheck_source_app_sales_prospects__prospect_id__source_post","parameters":[{"name":"prospect_id","in":"path","required":true,"schema":{"type":"integer","title":"Prospect Id"}}],"requestBody":{"required":true,"content":{"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/Body_recheck_source_app_sales_prospects__prospect_id__source_post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/app/sales/campaigns/{campaign_id}/context":{"post":{"summary":"Refresh Context","operationId":"refresh_context_app_sales_campaigns__campaign_id__context_post","parameters":[{"name":"campaign_id","in":"path","required":true,"schema":{"type":"integer","title":"Campaign Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/app/sites/{site_id}/operations/strategy":{"post":{"summary":"Strategy Save","operationId":"strategy_save_app_sites__site_id__operations_strategy_post","parameters":[{"name":"site_id","in":"path","required":true,"schema":{"type":"integer","title":"Site Id"}}],"requestBody":{"required":true,"content":{"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/Body_strategy_save_app_sites__site_id__operations_strategy_post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/app/sites/{site_id}/operations/strategy/history":{"get":{"summary":"Strategy History","operationId":"strategy_history_app_sites__site_id__operations_strategy_history_get","parameters":[{"name":"site_id","in":"path","required":true,"schema":{"type":"integer","title":"Site Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/app/sites/{site_id}/operations/jobs":{"post":{"summary":"Job Create","operationId":"job_create_app_sites__site_id__operations_jobs_post","parameters":[{"name":"site_id","in":"path","required":true,"schema":{"type":"integer","title":"Site Id"}}],"requestBody":{"required":true,"content":{"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/Body_job_create_app_sites__site_id__operations_jobs_post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"summary":"Job Status","operationId":"job_status_app_sites__site_id__operations_jobs_get","parameters":[{"name":"site_id","in":"path","required":true,"schema":{"type":"integer","title":"Site Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/app/sites/{site_id}/operations/jobs/{job_id}/cancel":{"post":{"summary":"Job Cancel","operationId":"job_cancel_app_sites__site_id__operations_jobs__job_id__cancel_post","parameters":[{"name":"site_id","in":"path","required":true,"schema":{"type":"integer","title":"Site Id"}},{"name":"job_id","in":"path","required":true,"schema":{"type":"integer","title":"Job Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/app/sites/{site_id}/operations/jobs/{job_id}/retry":{"post":{"summary":"Job Retry","operationId":"job_retry_app_sites__site_id__operations_jobs__job_id__retry_post","parameters":[{"name":"site_id","in":"path","required":true,"schema":{"type":"integer","title":"Site Id"}},{"name":"job_id","in":"path","required":true,"schema":{"type":"integer","title":"Job Id"}}],"requestBody":{"required":true,"content":{"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/Body_job_retry_app_sites__site_id__operations_jobs__job_id__retry_post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/app/sites/{site_id}/operations/drafts/{draft_id}":{"post":{"summary":"Draft Review","operationId":"draft_review_app_sites__site_id__operations_drafts__draft_id__post","parameters":[{"name":"site_id","in":"path","required":true,"schema":{"type":"integer","title":"Site Id"}},{"name":"draft_id","in":"path","required":true,"schema":{"type":"integer","title":"Draft Id"}}],"requestBody":{"required":true,"content":{"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/Body_draft_review_app_sites__site_id__operations_drafts__draft_id__post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/app/sites/{site_id}/operations/drafts/{draft_id}/publish":{"post":{"summary":"Draft Publish","description":"Explicit owner publish. Approval alone does not reach this route.","operationId":"draft_publish_app_sites__site_id__operations_drafts__draft_id__publish_post","parameters":[{"name":"site_id","in":"path","required":true,"schema":{"type":"integer","title":"Site Id"}},{"name":"draft_id","in":"path","required":true,"schema":{"type":"integer","title":"Draft Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/app/sites/{site_id}/operations/drafts/{draft_id}/publish-x":{"post":{"summary":"Draft Publish X","description":"Explicit owner publish to X. Approval alone does not reach this route.","operationId":"draft_publish_x_app_sites__site_id__operations_drafts__draft_id__publish_x_post","parameters":[{"name":"site_id","in":"path","required":true,"schema":{"type":"integer","title":"Site Id"}},{"name":"draft_id","in":"path","required":true,"schema":{"type":"integer","title":"Draft Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/app/sites/{site_id}/operations/drafts/{draft_id}/history":{"get":{"summary":"Draft History","operationId":"draft_history_app_sites__site_id__operations_drafts__draft_id__history_get","parameters":[{"name":"site_id","in":"path","required":true,"schema":{"type":"integer","title":"Site Id"}},{"name":"draft_id","in":"path","required":true,"schema":{"type":"integer","title":"Draft Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/app/operations/jobs":{"post":{"summary":"Board Job Create","operationId":"board_job_create_app_operations_jobs_post","requestBody":{"content":{"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/Body_board_job_create_app_operations_jobs_post"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/app/sites/{site_id}/operations/history/{channel}":{"get":{"summary":"Channel History","operationId":"channel_history_app_sites__site_id__operations_history__channel__get","parameters":[{"name":"site_id","in":"path","required":true,"schema":{"type":"integer","title":"Site Id"}},{"name":"channel","in":"path","required":true,"schema":{"type":"string","title":"Channel"}},{"name":"page","in":"query","required":false,"schema":{"type":"integer","maximum":10000,"minimum":1,"default":1,"title":"Page"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/app/sites/{site_id}/operations/documents/{kind}":{"post":{"summary":"Document Save","operationId":"document_save_app_sites__site_id__operations_documents__kind__post","parameters":[{"name":"site_id","in":"path","required":true,"schema":{"type":"integer","title":"Site Id"}},{"name":"kind","in":"path","required":true,"schema":{"type":"string","title":"Kind"}}],"requestBody":{"required":true,"content":{"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/Body_document_save_app_sites__site_id__operations_documents__kind__post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/app/sites/{site_id}/operations/documents/{kind}/history":{"get":{"summary":"Document History","operationId":"document_history_app_sites__site_id__operations_documents__kind__history_get","parameters":[{"name":"site_id","in":"path","required":true,"schema":{"type":"integer","title":"Site Id"}},{"name":"kind","in":"path","required":true,"schema":{"type":"string","title":"Kind"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/app/sites/{site_id}/operations/jobs/{job_id}/context":{"get":{"summary":"Job Context","operationId":"job_context_app_sites__site_id__operations_jobs__job_id__context_get","parameters":[{"name":"site_id","in":"path","required":true,"schema":{"type":"integer","title":"Site Id"}},{"name":"job_id","in":"path","required":true,"schema":{"type":"integer","title":"Job Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/app/sites/{site_id}/actions":{"get":{"summary":"Index","operationId":"index_app_sites__site_id__actions_get","parameters":[{"name":"site_id","in":"path","required":true,"schema":{"type":"integer","title":"Site Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"summary":"Prepare","operationId":"prepare_app_sites__site_id__actions_post","parameters":[{"name":"site_id","in":"path","required":true,"schema":{"type":"integer","title":"Site Id"}}],"requestBody":{"required":true,"content":{"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/Body_prepare_app_sites__site_id__actions_post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/app/sites/{site_id}/actions/{job_id}":{"get":{"summary":"Detail","operationId":"detail_app_sites__site_id__actions__job_id__get","parameters":[{"name":"site_id","in":"path","required":true,"schema":{"type":"integer","title":"Site Id"}},{"name":"job_id","in":"path","required":true,"schema":{"type":"integer","title":"Job Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/app/sites/{site_id}/actions/drafts/{draft_id}/export":{"post":{"summary":"Export","operationId":"export_app_sites__site_id__actions_drafts__draft_id__export_post","parameters":[{"name":"site_id","in":"path","required":true,"schema":{"type":"integer","title":"Site Id"}},{"name":"draft_id","in":"path","required":true,"schema":{"type":"integer","title":"Draft Id"}}],"requestBody":{"required":true,"content":{"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/Body_export_app_sites__site_id__actions_drafts__draft_id__export_post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/app/sites/{site_id}/actions/receipts/{receipt_id}/download":{"get":{"summary":"Download","operationId":"download_app_sites__site_id__actions_receipts__receipt_id__download_get","parameters":[{"name":"site_id","in":"path","required":true,"schema":{"type":"integer","title":"Site Id"}},{"name":"receipt_id","in":"path","required":true,"schema":{"type":"integer","title":"Receipt Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/app/sites/{site_id}/actions/{job_id}/retry":{"post":{"summary":"Retry","operationId":"retry_app_sites__site_id__actions__job_id__retry_post","parameters":[{"name":"site_id","in":"path","required":true,"schema":{"type":"integer","title":"Site Id"}},{"name":"job_id","in":"path","required":true,"schema":{"type":"integer","title":"Job Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/citation-check":{"get":{"summary":"Citation Check Form","operationId":"citation_check_form_citation_check_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}},"post":{"summary":"Citation Check Run","operationId":"citation_check_run_citation_check_post","requestBody":{"content":{"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/Body_citation_check_run_citation_check_post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/citation-check/r/{token}":{"get":{"summary":"Citation Check Result","operationId":"citation_check_result_citation_check_r__token__get","parameters":[{"name":"token","in":"path","required":true,"schema":{"type":"string","title":"Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"Body_add_prospect_app_sales_campaigns__campaign_id__prospects_post":{"properties":{"name":{"type":"string","maxLength":120,"minLength":2,"title":"Name"},"website":{"type":"string","maxLength":2048,"title":"Website"},"source_url":{"type":"string","maxLength":2048,"title":"Source Url"},"source_quote":{"type":"string","maxLength":400,"minLength":20,"title":"Source Quote"},"fit_reason":{"type":"string","maxLength":1000,"minLength":10,"title":"Fit Reason"}},"type":"object","required":["name","website","source_url","source_quote","fit_reason"],"title":"Body_add_prospect_app_sales_campaigns__campaign_id__prospects_post"},"Body_add_site_app_sites_post":{"properties":{"url":{"type":"string","title":"Url","default":""}},"type":"object","title":"Body_add_site_app_sites_post"},"Body_ask_report_app_sites__site_id__ask_post":{"properties":{"question":{"type":"string","title":"Question","default":""},"workspace":{"type":"boolean","title":"Workspace","default":false},"strategy_id":{"type":"integer","title":"Strategy Id","default":0},"document_ids":{"items":{"type":"integer"},"type":"array","title":"Document Ids","default":[]}},"type":"object","title":"Body_ask_report_app_sites__site_id__ask_post"},"Body_board_job_create_app_operations_jobs_post":{"properties":{"site_id":{"type":"integer","title":"Site Id"},"channel":{"type":"string","title":"Channel"},"request_key":{"type":"string","title":"Request Key"}},"type":"object","required":["site_id","channel","request_key"],"title":"Body_board_job_create_app_operations_jobs_post"},"Body_campaign_state_app_sales_campaigns__campaign_id__state_post":{"properties":{"action":{"type":"string","title":"Action"}},"type":"object","required":["action"],"title":"Body_campaign_state_app_sales_campaigns__campaign_id__state_post"},"Body_checkout_billing_checkout_post":{"properties":{"gclid":{"type":"string","title":"Gclid","default":""},"fbclid":{"type":"string","title":"Fbclid","default":""},"plan":{"type":"string","title":"Plan","default":"monthly"}},"type":"object","title":"Body_checkout_billing_checkout_post"},"Body_citation_check_run_citation_check_post":{"properties":{"url":{"type":"string","title":"Url","default":""},"brand":{"type":"string","title":"Brand","default":""}},"type":"object","title":"Body_citation_check_run_citation_check_post"},"Body_create_campaign_app_sales_campaigns_post":{"properties":{"site_id":{"type":"integer","title":"Site Id"},"name":{"type":"string","maxLength":120,"minLength":2,"title":"Name"}},"type":"object","required":["site_id","name"],"title":"Body_create_campaign_app_sales_campaigns_post"},"Body_document_save_app_sites__site_id__operations_documents__kind__post":{"properties":{"version":{"type":"integer","title":"Version"},"content":{"type":"string","title":"Content"},"source_url":{"type":"string","title":"Source Url","default":""}},"type":"object","required":["version","content"],"title":"Body_document_save_app_sites__site_id__operations_documents__kind__post"},"Body_draft_review_app_sites__site_id__operations_drafts__draft_id__post":{"properties":{"action":{"type":"string","title":"Action"},"version":{"type":"integer","title":"Version"},"content":{"type":"string","title":"Content","default":""}},"type":"object","required":["action","version"],"title":"Body_draft_review_app_sites__site_id__operations_drafts__draft_id__post"},"Body_export_app_sites__site_id__actions_drafts__draft_id__export_post":{"properties":{"version":{"type":"integer","title":"Version"}},"type":"object","required":["version"],"title":"Body_export_app_sites__site_id__actions_drafts__draft_id__export_post"},"Body_job_create_app_sites__site_id__operations_jobs_post":{"properties":{"channel":{"type":"string","title":"Channel"},"request_key":{"type":"string","title":"Request Key"}},"type":"object","required":["channel","request_key"],"title":"Body_job_create_app_sites__site_id__operations_jobs_post"},"Body_job_retry_app_sites__site_id__operations_jobs__job_id__retry_post":{"properties":{"request_key":{"type":"string","title":"Request Key"}},"type":"object","required":["request_key"],"title":"Body_job_retry_app_sites__site_id__operations_jobs__job_id__retry_post"},"Body_login_login_post":{"properties":{"email":{"type":"string","title":"Email"},"password":{"type":"string","title":"Password"},"next":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Next"},"claim":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Claim"}},"type":"object","required":["email","password"],"title":"Body_login_login_post"},"Body_managed_intake_managed_intake_post":{"properties":{"site_url":{"type":"string","title":"Site Url","default":""},"email":{"type":"string","title":"Email","default":""},"priority":{"type":"string","title":"Priority","default":"not_sure"},"scope":{"type":"string","title":"Scope","default":"monthly"},"notes":{"type":"string","title":"Notes","default":""}},"type":"object","title":"Body_managed_intake_managed_intake_post"},"Body_outcome_app_sales_prospects__prospect_id__outcome_post":{"properties":{"kind":{"type":"string","title":"Kind"},"note":{"type":"string","maxLength":1000,"minLength":10,"title":"Note"},"source_url":{"type":"string","maxLength":2048,"title":"Source Url"}},"type":"object","required":["kind","note","source_url"],"title":"Body_outcome_app_sales_prospects__prospect_id__outcome_post"},"Body_prepare_app_sites__site_id__actions_post":{"properties":{"audit_id":{"type":"integer","title":"Audit Id"},"finding_index":{"type":"integer","title":"Finding Index"}},"type":"object","required":["audit_id","finding_index"],"title":"Body_prepare_app_sites__site_id__actions_post"},"Body_recheck_source_app_sales_prospects__prospect_id__source_post":{"properties":{"source_url":{"type":"string","maxLength":2048,"title":"Source Url"},"source_quote":{"type":"string","maxLength":400,"minLength":20,"title":"Source Quote"}},"type":"object","required":["source_url","source_quote"],"title":"Body_recheck_source_app_sales_prospects__prospect_id__source_post"},"Body_review_app_sales_drafts__draft_id__review_post":{"properties":{"action":{"type":"string","title":"Action"},"subject":{"type":"string","maxLength":180,"title":"Subject","default":""},"body":{"type":"string","maxLength":3000,"title":"Body","default":""}},"type":"object","required":["action"],"title":"Body_review_app_sales_drafts__draft_id__review_post"},"Body_set_item_state_app_sites__site_id__items__key__state_post":{"properties":{"state":{"type":"string","title":"State","default":""},"back":{"type":"string","title":"Back","default":"findings"}},"type":"object","title":"Body_set_item_state_app_sites__site_id__items__key__state_post"},"Body_signup_signup_post":{"properties":{"email":{"type":"string","title":"Email"},"password":{"type":"string","title":"Password"},"next":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Next"},"claim":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Claim"},"tool":{"type":"string","title":"Tool","default":""},"return_to":{"type":"string","title":"Return To","default":""}},"type":"object","required":["email","password"],"title":"Body_signup_signup_post"},"Body_start_free_audit_audit_post":{"properties":{"url":{"type":"string","title":"Url","default":""},"acquisition_page":{"type":"string","title":"Acquisition Page","default":""}},"type":"object","title":"Body_start_free_audit_audit_post"},"Body_strategy_save_app_sites__site_id__operations_strategy_post":{"properties":{"content":{"type":"string","title":"Content"},"version":{"type":"integer","title":"Version"}},"type":"object","required":["content","version"],"title":"Body_strategy_save_app_sites__site_id__operations_strategy_post"},"Body_targeting_app_sales_campaigns__campaign_id__targeting_post":{"properties":{"targeting":{"type":"string","maxLength":1500,"minLength":10,"title":"Targeting"}},"type":"object","required":["targeting"],"title":"Body_targeting_app_sales_campaigns__campaign_id__targeting_post"},"Body_visibility_check_app_sites__site_id__visibility_post":{"properties":{"queries":{"type":"string","title":"Queries","default":""}},"type":"object","title":"Body_visibility_check_app_sites__site_id__visibility_post"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"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"}}}}