{"openapi":"3.1.0","info":{"title":"Dokeo Content Quality API","description":"Pre-publish content quality gate + listicle/comparison builder.\n\n**Engines:** SEO · AEO · GEO across 17 content types.\n\n**Auth:** Bearer token via `Authorization: Bearer <key>` header. Set `DOKEO_API_KEY` in env (dev: open when unset).\n\n**Rate limit:** per-IP token bucket. See `X-RateLimit-*` headers.","version":"3.1.3"},"paths":{"/api/v1/health":{"get":{"tags":["meta"],"summary":"Health","operationId":"health_api_v1_health_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HealthResponse"}}}}}}},"/api/v1/ready":{"get":{"tags":["meta"],"summary":"Ready","operationId":"ready_api_v1_ready_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReadyResponse"}}}}}}},"/api/v1/version":{"get":{"tags":["meta"],"summary":"Version","operationId":"version_api_v1_version_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/home/summary":{"get":{"tags":["home"],"summary":"Home Summary","operationId":"home_summary_api_v1_home_summary_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"days","in":"query","required":false,"schema":{"type":"integer","default":14,"title":"Days"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/home/sample":{"get":{"tags":["home"],"summary":"Home Sample","description":"Score the fixed sample draft. Not stored, not billed.","operationId":"home_sample_api_v1_home_sample_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/home/events":{"post":{"tags":["home"],"summary":"Home Event","operationId":"home_event_api_v1_home_events_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProofEvent"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/control":{"get":{"tags":["control"],"summary":"Control","operationId":"control_api_v1_control_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/campaign/qa":{"post":{"tags":["campaign"],"summary":"Campaign Qa","operationId":"campaign_qa_api_v1_campaign_qa_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"X-Dokeo-User-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Dokeo-User-Id"}},{"name":"X-Dokeo-User-Email","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Dokeo-User-Email"}},{"name":"X-Dokeo-User-Name","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Dokeo-User-Name"}},{"name":"X-Dokeo-Tenant","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Dokeo-Tenant"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CampaignQARequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/campaign/summary":{"get":{"tags":["campaign"],"summary":"Summary","description":"What campaign QA did for this workspace: runs, emails checked, what it would have blocked,\nrecipients the ledger dropped, schedule and voice flags, and the most common reasons.\nCounts only. No addresses and no text.","operationId":"summary_api_v1_campaign_summary_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"days","in":"query","required":false,"schema":{"type":"integer","maximum":90,"minimum":1,"default":28,"title":"Days"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/campaign/suppressions":{"post":{"tags":["campaign"],"summary":"Add Suppression","description":"Record a refusal. The wording is stored as given and never rewritten.","operationId":"add_suppression_api_v1_campaign_suppressions_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"X-Dokeo-User-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Dokeo-User-Id"}},{"name":"X-Dokeo-User-Email","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Dokeo-User-Email"}},{"name":"X-Dokeo-User-Name","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Dokeo-User-Name"}},{"name":"X-Dokeo-Tenant","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Dokeo-Tenant"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuppressionRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["campaign"],"summary":"List Suppressions","operationId":"list_suppressions_api_v1_campaign_suppressions_get","security":[{"HTTPBearer":[]}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/campaign/suppressions/import":{"post":{"tags":["campaign"],"summary":"Import Suppressions","description":"Add an existing do-not-contact list in one call. Safe to run twice: anyone already\non the ledger is left as they were, with their first wording.","operationId":"import_suppressions_api_v1_campaign_suppressions_import_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/api__routes__campaign__ImportIn"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/campaign/suppressions/anonymise":{"post":{"tags":["campaign"],"summary":"Anonymise Suppression","description":"Erase the personal data of a suppressed address (an erasure request) and keep the block:\nthe address becomes its SHA-256 digest and the stored wording is cleared.","operationId":"anonymise_suppression_api_v1_campaign_suppressions_anonymise_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AnonymiseRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/campaign/suppressions/lift":{"post":{"tags":["campaign"],"summary":"Lift Suppression","description":"An admin removes a suppression, with a reason. The history row stays.","operationId":"lift_suppression_api_v1_campaign_suppressions_lift_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"X-Dokeo-User-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Dokeo-User-Id"}},{"name":"X-Dokeo-User-Email","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Dokeo-User-Email"}},{"name":"X-Dokeo-User-Name","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Dokeo-User-Name"}},{"name":"X-Dokeo-Tenant","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Dokeo-Tenant"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LiftRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/public/stats":{"get":{"tags":["public"],"summary":"Public Stats","operationId":"public_stats_api_v1_public_stats_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/public/scan":{"post":{"tags":["public"],"summary":"Public Scan","description":"Run the real deterministic gate on pasted content. No auth, no credits,\nper-IP quota. Stores the result under a short id for a shareable URL.","operationId":"public_scan_api_v1_public_scan_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicScanIn"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/public/scan/{sid}":{"get":{"tags":["public"],"summary":"Public Scan Result","operationId":"public_scan_result_api_v1_public_scan__sid__get","parameters":[{"name":"sid","in":"path","required":true,"schema":{"type":"string","title":"Sid"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/px":{"post":{"tags":["watch"],"summary":"Pixel Ingest","description":"Public pixel endpoint - called cross-origin from customer sites via\nthe JS snippet. The body carries a write-only pixel token (api.pixel_token),\nnever a workspace API key: the snippet sits in public HTML, so anything in\nit is public. Only AI-classified hits are stored.","operationId":"pixel_ingest_api_v1_px_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PixelEvent"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/watch/pixel-token":{"get":{"tags":["watch"],"summary":"Get Pixel Token","description":"The write-only token to paste into the pixel snippet. It can only log\nAI-referral hits for this workspace, so it is safe to publish.","operationId":"get_pixel_token_api_v1_watch_pixel_token_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/watch/crawler-log":{"post":{"tags":["watch"],"summary":"Crawler Log Upload","description":"Parse pasted/uploaded nginx or Apache combined-format access log\nlines, classify each user-agent, and store only the AI-bot hits.","operationId":"crawler_log_upload_api_v1_watch_crawler_log_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CrawlerLogUpload"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/watch/stats":{"get":{"tags":["watch"],"summary":"Watch Stats","operationId":"watch_stats_api_v1_watch_stats_get","security":[{"HTTPBearer":[]}],"parameters":[{"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":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/watch/monitors":{"get":{"tags":["watch"],"summary":"List Monitors","operationId":"list_monitors_api_v1_watch_monitors_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]},"post":{"tags":["watch"],"summary":"Create Monitor","operationId":"create_monitor_api_v1_watch_monitors_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MonitorCreate"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/watch/monitors/{monitor_id}":{"get":{"tags":["watch"],"summary":"Get Monitor","operationId":"get_monitor_api_v1_watch_monitors__monitor_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"monitor_id","in":"path","required":true,"schema":{"type":"integer","title":"Monitor Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/watch/monitors/{monitor_id}/prompts":{"post":{"tags":["watch"],"summary":"Add Prompt","operationId":"add_prompt_api_v1_watch_monitors__monitor_id__prompts_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"monitor_id","in":"path","required":true,"schema":{"type":"integer","title":"Monitor Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PromptCreate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["watch"],"summary":"List Prompts","operationId":"list_prompts_api_v1_watch_monitors__monitor_id__prompts_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"monitor_id","in":"path","required":true,"schema":{"type":"integer","title":"Monitor Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/watch/monitors/{monitor_id}/run":{"post":{"tags":["watch"],"summary":"Run Monitor","description":"Run every active prompt in this monitor against the requested\nengines. Engines with no API key configured come back status\n'not_configured' - never a fabricated response.","operationId":"run_monitor_api_v1_watch_monitors__monitor_id__run_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"monitor_id","in":"path","required":true,"schema":{"type":"integer","title":"Monitor Id"}},{"name":"engines","in":"query","required":false,"schema":{"type":"string","description":"Comma-separated engine keys","default":"claude,chatgpt,gemini,perplexity,grok,muse,minimax","title":"Engines"},"description":"Comma-separated engine keys"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/watch/monitors/{monitor_id}/runs":{"get":{"tags":["watch"],"summary":"Monitor Runs","operationId":"monitor_runs_api_v1_watch_monitors__monitor_id__runs_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"monitor_id","in":"path","required":true,"schema":{"type":"integer","title":"Monitor Id"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":500,"minimum":1,"default":50,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/watch/monitors/{monitor_id}/sov":{"get":{"tags":["watch"],"summary":"Monitor Sov","operationId":"monitor_sov_api_v1_watch_monitors__monitor_id__sov_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"monitor_id","in":"path","required":true,"schema":{"type":"integer","title":"Monitor Id"}},{"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":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/watch/monitors/{monitor_id}/gaps":{"get":{"tags":["watch"],"summary":"Monitor Gaps","operationId":"monitor_gaps_api_v1_watch_monitors__monitor_id__gaps_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"monitor_id","in":"path","required":true,"schema":{"type":"integer","title":"Monitor Id"}},{"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":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/watch/regressions":{"get":{"tags":["watch"],"summary":"List Regressions","description":"The regression set: pages under watch, with their baseline and last recheck.","operationId":"list_regressions_api_v1_watch_regressions_get","security":[{"HTTPBearer":[]}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}},"delete":{"tags":["watch"],"summary":"Delete Regression","operationId":"delete_regression_api_v1_watch_regressions_delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"url","in":"query","required":true,"schema":{"type":"string","title":"Url"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/watch/regressions/scan":{"post":{"tags":["watch"],"summary":"Scan Regressions","description":"Detect own-domain pages losing AI citations and promote them into the\nregression set with a fresh baseline score. This is the auto-promotion\nhalf of close-the-loop.","operationId":"scan_regressions_api_v1_watch_regressions_scan_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"days","in":"query","required":false,"schema":{"type":"integer","default":14,"title":"Days"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/watch/regressions/recheck":{"post":{"tags":["watch"],"summary":"Recheck Regressions","description":"Re-fetch + re-gate every watched page; flag any that dropped below its\nbaseline. This is the re-audit half of close-the-loop.","operationId":"recheck_regressions_api_v1_watch_regressions_recheck_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/watch/regressions/add":{"post":{"tags":["watch"],"summary":"Add Regression","description":"Manually put a page under regression watch (baseline = a fresh scan).","operationId":"add_regression_api_v1_watch_regressions_add_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/_RegAddIn"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/review/items":{"get":{"tags":["review"],"summary":"List Items","operationId":"list_items_api_v1_review_items_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"status","in":"query","required":false,"schema":{"type":"string","title":"Status"}},{"name":"assignee","in":"query","required":false,"schema":{"type":"string","title":"Assignee"}},{"name":"source","in":"query","required":false,"schema":{"type":"string","title":"Source"}},{"name":"mine","in":"query","required":false,"schema":{"type":"boolean","description":"Only items assigned to me","default":false,"title":"Mine"},"description":"Only items assigned to me"},{"name":"X-Dokeo-User-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Dokeo-User-Id"}},{"name":"X-Dokeo-User-Email","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Dokeo-User-Email"}},{"name":"X-Dokeo-User-Name","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Dokeo-User-Name"}},{"name":"X-Dokeo-Tenant","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Dokeo-Tenant"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/review/calibration":{"get":{"tags":["review"],"summary":"Calibration","description":"Where the deterministic gate and human reviewers disagree - the signal\nfor which checks may be miscalibrated. Reframes Review from sign-off into\nthe mechanism that keeps the 5ms gate honest.","operationId":"calibration_api_v1_review_calibration_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/review/loop-suggestions":{"get":{"tags":["review"],"summary":"Loop Suggestions","description":"Loop: analyze where reviewers OVERRIDE the gate (approve a FAIL), re-gate\nthat content to find the check that keeps failing, and suggest which checks\nto revisit. This is the agent authoring an eval insight, not just scoring.","operationId":"loop_suggestions_api_v1_review_loop_suggestions_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/review/items/{item_id}":{"get":{"tags":["review"],"summary":"Get Item","operationId":"get_item_api_v1_review_items__item_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"item_id","in":"path","required":true,"schema":{"type":"string","title":"Item Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/review/items/{item_id}/assign":{"post":{"tags":["review"],"summary":"Assign Item","operationId":"assign_item_api_v1_review_items__item_id__assign_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"item_id","in":"path","required":true,"schema":{"type":"string","title":"Item Id"}},{"name":"X-Dokeo-User-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Dokeo-User-Id"}},{"name":"X-Dokeo-User-Email","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Dokeo-User-Email"}},{"name":"X-Dokeo-User-Name","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Dokeo-User-Name"}},{"name":"X-Dokeo-Tenant","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Dokeo-Tenant"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AssignIn"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/review/items/{item_id}/decision":{"post":{"tags":["review"],"summary":"Decide Item","operationId":"decide_item_api_v1_review_items__item_id__decision_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"item_id","in":"path","required":true,"schema":{"type":"string","title":"Item Id"}},{"name":"X-Dokeo-User-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Dokeo-User-Id"}},{"name":"X-Dokeo-User-Email","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Dokeo-User-Email"}},{"name":"X-Dokeo-User-Name","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Dokeo-User-Name"}},{"name":"X-Dokeo-Tenant","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Dokeo-Tenant"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DecisionIn"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/review/items/{item_id}/comment":{"post":{"tags":["review"],"summary":"Comment Item","operationId":"comment_item_api_v1_review_items__item_id__comment_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"item_id","in":"path","required":true,"schema":{"type":"string","title":"Item Id"}},{"name":"X-Dokeo-User-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Dokeo-User-Id"}},{"name":"X-Dokeo-User-Email","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Dokeo-User-Email"}},{"name":"X-Dokeo-User-Name","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Dokeo-User-Name"}},{"name":"X-Dokeo-Tenant","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Dokeo-Tenant"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CommentIn"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/catalog/content-types/detect":{"post":{"tags":["catalog"],"summary":"Detect Ct","description":"Auto-detect content type from title + body. Deterministic + auditable.","operationId":"detect_ct_api_v1_catalog_content_types_detect_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DetectRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/catalog/content-types":{"get":{"tags":["catalog"],"summary":"List Content Types","operationId":"list_content_types_api_v1_catalog_content_types_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/ContentType"},"type":"array","title":"Response List Content Types Api V1 Catalog Content Types Get"}}}}}}},"/api/v1/catalog/content-types/{key}":{"get":{"tags":["catalog"],"summary":"Get Content Type","operationId":"get_content_type_api_v1_catalog_content_types__key__get","parameters":[{"name":"key","in":"path","required":true,"schema":{"type":"string","title":"Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ContentType"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/catalog/engines":{"get":{"tags":["catalog"],"summary":"List Engines","operationId":"list_engines_api_v1_catalog_engines_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/EngineInfo"},"type":"array","title":"Response List Engines Api V1 Catalog Engines Get"}}}}}}},"/api/v1/catalog/checks":{"get":{"tags":["catalog"],"summary":"List Checks","description":"The Dokeo Checks - the open spec of every SEO/AEO/GEO check the gate runs.\nPublic + unauthenticated: this is the standard, meant to be referenced.","operationId":"list_checks_api_v1_catalog_checks_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/catalog/content-samples":{"get":{"tags":["catalog"],"summary":"List Content Samples","operationId":"list_content_samples_api_v1_catalog_content_samples_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/ContentSampleMeta"},"type":"array","title":"Response List Content Samples Api V1 Catalog Content Samples Get"}}}}}}},"/api/v1/catalog/content-samples/{key}":{"get":{"tags":["catalog"],"summary":"Get Content Sample","operationId":"get_content_sample_api_v1_catalog_content_samples__key__get","parameters":[{"name":"key","in":"path","required":true,"schema":{"type":"string","title":"Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ContentSample"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/catalog/builder-formats":{"get":{"tags":["catalog"],"summary":"List Builder Formats","operationId":"list_builder_formats_api_v1_catalog_builder_formats_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/FormatInfo"},"type":"array","title":"Response List Builder Formats Api V1 Catalog Builder Formats Get"}}}}}}},"/api/v1/catalog/object-types":{"get":{"tags":["catalog"],"summary":"List Object Types","operationId":"list_object_types_api_v1_catalog_object_types_get","parameters":[{"name":"domain","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Domain"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/catalog/builder-categories":{"get":{"tags":["catalog"],"summary":"List Builder Categories","operationId":"list_builder_categories_api_v1_catalog_builder_categories_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/CategoryFile"},"type":"array","title":"Response List Builder Categories Api V1 Catalog Builder Categories Get"}}}}}}},"/api/v1/scan":{"post":{"tags":["scan"],"summary":"Scan","operationId":"scan_api_v1_scan_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"X-Dokeo-Source","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Dokeo-Source"}},{"name":"X-Dokeo-User-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Dokeo-User-Id"}},{"name":"X-Dokeo-User-Email","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Dokeo-User-Email"}},{"name":"X-Dokeo-User-Name","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Dokeo-User-Name"}},{"name":"X-Dokeo-Tenant","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Dokeo-Tenant"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ScanRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ScanResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/scan/replay":{"post":{"tags":["scan"],"summary":"Replay","description":"Re-run an earlier scan and say whether the decision is identical.\n\nCosts no credit and only works for a decision hash this workspace produced,\nso it is not a free scan. It re-runs the engine that is running now: if the\nengine or a tenant rule changed since, the response names what changed.","operationId":"replay_api_v1_scan_replay_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReplayRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReplayResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/scan/url":{"post":{"tags":["scan"],"summary":"Scan Url","operationId":"scan_url_api_v1_scan_url_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"X-Dokeo-User-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Dokeo-User-Id"}},{"name":"X-Dokeo-User-Email","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Dokeo-User-Email"}},{"name":"X-Dokeo-User-Name","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Dokeo-User-Name"}},{"name":"X-Dokeo-Tenant","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Dokeo-Tenant"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ScanUrlRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ScanResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/scan/blog":{"post":{"tags":["scan"],"summary":"Scan Blog","operationId":"scan_blog_api_v1_scan_blog_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"X-Dokeo-User-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Dokeo-User-Id"}},{"name":"X-Dokeo-User-Email","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Dokeo-User-Email"}},{"name":"X-Dokeo-User-Name","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Dokeo-User-Name"}},{"name":"X-Dokeo-Tenant","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Dokeo-Tenant"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ScanBlogRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/builder/research":{"post":{"tags":["builder"],"summary":"Run Research","description":"Stage 1 - grounded research. Returns a ResearchBundle that's frozen\nat gate 1 (the client reviews and edits before generation).","operationId":"run_research_api_v1_builder_research_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BuilderResearchRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/builder/generate":{"post":{"tags":["builder"],"summary":"Run Generate","description":"Stages 2-4 - generate connective prose, assemble in chosen format, QA.","operationId":"run_generate_api_v1_builder_generate_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BuilderGenerateRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BuilderGenerateResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/builder/compose":{"post":{"tags":["builder"],"summary":"Run Compose","description":"Type-aware composition for any content type (email, blog, social, ...).\n\nGenerates content shaped to the selected content type, runs it through the\ncontent-type-aware gate, and registers the draft for human review. This is\nthe real per-type writer - not the tool-listicle pipeline.","operationId":"run_compose_api_v1_builder_compose_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BuilderComposeRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BuilderComposeResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/audit/stats":{"get":{"tags":["audit"],"summary":"Stats","operationId":"stats_api_v1_audit_stats_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/audit/tenants":{"get":{"tags":["audit"],"summary":"List Tenants","description":"Platform-wide tenant list — operator only (leaks every tenant id).","operationId":"list_tenants_api_v1_audit_tenants_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/audit/diff":{"get":{"tags":["audit"],"summary":"Diff Scans","description":"Compare the most recent two scans of the same slug. Returns the\nscore delta, verdict change, and which checks flipped status.\nScoped to the caller's tenant so versions never leak across tenants.","operationId":"diff_scans_api_v1_audit_diff_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"slug","in":"query","required":true,"schema":{"type":"string","description":"Post slug to compare across scans","title":"Slug"},"description":"Post slug to compare across scans"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":2,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/audit/recent":{"get":{"tags":["audit"],"summary":"Recent","operationId":"recent_api_v1_audit_recent_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":20,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/batch/stream":{"post":{"tags":["batch"],"summary":"Stream Batch","description":"Stream batch progress as Server-Sent Events.\n\nOne event per URL: `progress` while scanning, `done` at the end.\nConsumes 1 credit per URL scanned (capped at limit). Skipped URLs\n(fetch error / too short) don't consume.","operationId":"stream_batch_api_v1_batch_stream_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"X-Dokeo-User-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Dokeo-User-Id"}},{"name":"X-Dokeo-User-Email","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Dokeo-User-Email"}},{"name":"X-Dokeo-User-Name","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Dokeo-User-Name"}},{"name":"X-Dokeo-Tenant","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Dokeo-Tenant"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ScanBlogRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/rules":{"get":{"tags":["rules"],"summary":"List Rules","operationId":"list_rules_api_v1_rules_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]},"post":{"tags":["rules"],"summary":"Add Rule","operationId":"add_rule_api_v1_rules_post","requestBody":{"content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Rule"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/rules/{name}":{"delete":{"tags":["rules"],"summary":"Delete Rule","operationId":"delete_rule_api_v1_rules__name__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"name","in":"path","required":true,"schema":{"type":"string","title":"Name"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/billing/catalog":{"get":{"tags":["billing"],"summary":"Catalog","description":"Public list of tiers for the pricing page.","operationId":"catalog_api_v1_billing_catalog_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/billing/entitlement":{"get":{"tags":["billing"],"summary":"Entitlement","operationId":"entitlement_api_v1_billing_entitlement_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TierInfo"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/billing/balance":{"get":{"tags":["billing"],"summary":"Balance","description":"Part 3: returns the split between interactive and automated scan usage.\n\nInteractive = scans invoked from the web UI (one-off, paste, /scan page).\nAutomated = scans invoked from CI/pre-commit/GitHub Action/MCP/batch.\n\nEach draws from a separate allowance so CI on every commit doesn't burn\nthe interactive budget of most-embedded customers.","operationId":"balance_api_v1_billing_balance_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/billing/usage":{"get":{"tags":["billing"],"summary":"Usage History","description":"Per-day credit consumption for the last N days. Powers the usage\nchart on the account page.","operationId":"usage_history_api_v1_billing_usage_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"days","in":"query","required":false,"schema":{"type":"integer","default":30,"title":"Days"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/billing/change-tier":{"post":{"tags":["billing"],"summary":"Change Tier","operationId":"change_tier_api_v1_billing_change_tier_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TierChangeRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/billing/credits/repair":{"post":{"tags":["billing"],"summary":"Repair Credits","description":"One-click repair for free-tier tenants whose credits are below\nthe 100 interactive-scan monthly allowance.\n\nSafe to call any time. Returns the current state. Used by the web UI\non first /account visit if the user appears to be missing credits.","operationId":"repair_credits_api_v1_billing_credits_repair_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreditRepairIn"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/billing/credits/add":{"post":{"tags":["billing"],"summary":"Add Credits","description":"Operator tool: manually top up credits for a tenant.","operationId":"add_credits_api_v1_billing_credits_add_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"tenant","in":"query","required":true,"schema":{"type":"string","title":"Tenant"}},{"name":"amount","in":"query","required":true,"schema":{"type":"integer","title":"Amount"}},{"name":"reason","in":"query","required":false,"schema":{"type":"string","default":"manual_credit","title":"Reason"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/checkout/create-session":{"post":{"tags":["checkout"],"summary":"Create Session","operationId":"create_session_api_v1_checkout_create_session_post","parameters":[{"name":"X-Dokeo-User-Email","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Dokeo-User-Email"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateSessionRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/checkout/create-portal-session":{"post":{"tags":["checkout"],"summary":"Create Portal Session","description":"Paddle or Stripe customer portal, for the caller's own tenant.\n\nA Stripe customer id is not a secret, so it can never be taken from the\nrequest: we read it from the caller's tenant record (or, for a purchase\nmade before the account existed, the record keyed by their email).\nOwners only (docs/ORGS_RBAC.md).","operationId":"create_portal_session_api_v1_checkout_create_portal_session_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"X-Dokeo-User-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Dokeo-User-Id"}},{"name":"X-Dokeo-User-Email","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Dokeo-User-Email"}},{"name":"X-Dokeo-User-Name","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Dokeo-User-Name"}},{"name":"X-Dokeo-Tenant","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Dokeo-Tenant"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PortalRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/checkout/webhook":{"post":{"tags":["checkout"],"summary":"Webhook","operationId":"webhook_api_v1_checkout_webhook_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/checkout/config":{"get":{"tags":["checkout"],"summary":"Checkout Config","operationId":"checkout_config_api_v1_checkout_config_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/payments/create-order":{"post":{"tags":["payments"],"summary":"Create Order","operationId":"create_order_api_v1_payments_create_order_post","parameters":[{"name":"X-Dokeo-User-Email","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Dokeo-User-Email"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateOrderRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateOrderResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/payments/create-credit-order":{"post":{"tags":["payments"],"summary":"Create Credit Order","operationId":"create_credit_order_api_v1_payments_create_credit_order_post","parameters":[{"name":"X-Dokeo-User-Email","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Dokeo-User-Email"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateCreditOrderRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateCreditOrderResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/payments/verify-payment":{"post":{"tags":["payments"],"summary":"Verify Payment","operationId":"verify_payment_api_v1_payments_verify_payment_post","parameters":[{"name":"X-Dokeo-User-Email","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Dokeo-User-Email"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/VerifyPaymentRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/VerifyPaymentResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/account/keys":{"get":{"tags":["account-keys"],"summary":"List My Keys","operationId":"list_my_keys_api_v1_account_keys_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"X-Dokeo-User-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Dokeo-User-Id"}},{"name":"X-Dokeo-User-Email","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Dokeo-User-Email"}},{"name":"X-Dokeo-User-Name","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Dokeo-User-Name"}},{"name":"X-Dokeo-Tenant","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Dokeo-Tenant"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["account-keys"],"summary":"Create My Key","operationId":"create_my_key_api_v1_account_keys_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"X-Dokeo-User-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Dokeo-User-Id"}},{"name":"X-Dokeo-User-Email","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Dokeo-User-Email"}},{"name":"X-Dokeo-User-Name","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Dokeo-User-Name"}},{"name":"X-Dokeo-Tenant","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Dokeo-Tenant"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KeyCreateIn"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/account/keys/{kid}":{"patch":{"tags":["account-keys"],"summary":"Rename My Key","operationId":"rename_my_key_api_v1_account_keys__kid__patch","security":[{"HTTPBearer":[]}],"parameters":[{"name":"kid","in":"path","required":true,"schema":{"type":"string","title":"Kid"}},{"name":"X-Dokeo-User-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Dokeo-User-Id"}},{"name":"X-Dokeo-User-Email","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Dokeo-User-Email"}},{"name":"X-Dokeo-User-Name","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Dokeo-User-Name"}},{"name":"X-Dokeo-Tenant","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Dokeo-Tenant"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KeyCreateIn"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["account-keys"],"summary":"Revoke My Key","operationId":"revoke_my_key_api_v1_account_keys__kid__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"kid","in":"path","required":true,"schema":{"type":"string","title":"Kid"}},{"name":"X-Dokeo-User-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Dokeo-User-Id"}},{"name":"X-Dokeo-User-Email","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Dokeo-User-Email"}},{"name":"X-Dokeo-User-Name","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Dokeo-User-Name"}},{"name":"X-Dokeo-Tenant","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Dokeo-Tenant"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/account/keys/{kid}/rotate":{"post":{"tags":["account-keys"],"summary":"Rotate My Key","description":"Mint a fresh key for the same tenant and revoke the old one atomically.","operationId":"rotate_my_key_api_v1_account_keys__kid__rotate_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"kid","in":"path","required":true,"schema":{"type":"string","title":"Kid"}},{"name":"X-Dokeo-User-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Dokeo-User-Id"}},{"name":"X-Dokeo-User-Email","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Dokeo-User-Email"}},{"name":"X-Dokeo-User-Name","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Dokeo-User-Name"}},{"name":"X-Dokeo-Tenant","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Dokeo-Tenant"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/knowledge-base/summary":{"get":{"tags":["knowledge"],"summary":"Summary","description":"Counts by doc type. Cheap; just inspects filenames + frontmatter.","operationId":"summary_api_v1_knowledge_base_summary_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/knowledge-base/docs":{"get":{"tags":["knowledge"],"summary":"List Docs","operationId":"list_docs_api_v1_knowledge_base_docs_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]},"post":{"tags":["knowledge"],"summary":"Create Doc","description":"Upload a new brand-voice guide, playbook, or benchmark.","operationId":"create_doc_api_v1_knowledge_base_docs_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DocCreate"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/knowledge-base/docs/{doc_id}":{"get":{"tags":["knowledge"],"summary":"Get Doc","operationId":"get_doc_api_v1_knowledge_base_docs__doc_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"doc_id","in":"path","required":true,"schema":{"type":"string","title":"Doc Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["knowledge"],"summary":"Update Doc","operationId":"update_doc_api_v1_knowledge_base_docs__doc_id__post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"doc_id","in":"path","required":true,"schema":{"type":"string","title":"Doc Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DocUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["knowledge"],"summary":"Delete Doc","operationId":"delete_doc_api_v1_knowledge_base_docs__doc_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"doc_id","in":"path","required":true,"schema":{"type":"string","title":"Doc Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/knowledge-base/search":{"get":{"tags":["knowledge"],"summary":"Search","description":"Search the tenant's KB docs by substring (case-insensitive).","operationId":"search_api_v1_knowledge_base_search_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"q","in":"query","required":true,"schema":{"type":"string","title":"Q"}},{"name":"top_k","in":"query","required":false,"schema":{"type":"integer","default":5,"title":"Top K"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/knowledge-base/brand-voice/check":{"post":{"tags":["knowledge"],"summary":"Brand Voice Check","description":"Check a body of text against the tenant's brand-voice docs.","operationId":"brand_voice_check_api_v1_knowledge_base_brand_voice_check_post","requestBody":{"content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Payload"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/knowledge-graph/documents/upload":{"post":{"tags":["knowledge-graph"],"summary":"Upload Document","description":"Upload a file (PDF, HTML, Markdown, text) to the knowledge graph.","operationId":"upload_document_api_v1_knowledge_graph_documents_upload_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"title","in":"query","required":false,"schema":{"type":"string","default":"","title":"Title"}},{"name":"description","in":"query","required":false,"schema":{"type":"string","default":"","title":"Description"}},{"name":"category","in":"query","required":false,"schema":{"type":"string","default":"","title":"Category"}},{"name":"tags","in":"query","required":false,"schema":{"type":"string","default":"","title":"Tags"}}],"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_upload_document_api_v1_knowledge_graph_documents_upload_post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/knowledge-graph/documents/text":{"post":{"tags":["knowledge-graph"],"summary":"Upload Text Document","description":"Upload text/markdown/HTML content directly (no file upload needed).","operationId":"upload_text_document_api_v1_knowledge_graph_documents_text_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TextDocUpload"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/knowledge-graph/documents":{"get":{"tags":["knowledge-graph"],"summary":"List Documents","description":"List all documents in the tenant's knowledge graph.","operationId":"list_documents_api_v1_knowledge_graph_documents_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/knowledge-graph/documents/{doc_id}":{"get":{"tags":["knowledge-graph"],"summary":"Get Document","description":"Get document details including extracted entities, concepts, and rules.","operationId":"get_document_api_v1_knowledge_graph_documents__doc_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"doc_id","in":"path","required":true,"schema":{"type":"string","title":"Doc Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["knowledge-graph"],"summary":"Delete Document","description":"Remove a document and all its extracted nodes from the graph.","operationId":"delete_document_api_v1_knowledge_graph_documents__doc_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"doc_id","in":"path","required":true,"schema":{"type":"string","title":"Doc Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/knowledge-graph/search":{"post":{"tags":["knowledge-graph"],"summary":"Search Graph","description":"Search across the tenant's knowledge graph.","operationId":"search_graph_api_v1_knowledge_graph_search_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SearchQuery"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/knowledge-graph/entities":{"get":{"tags":["knowledge-graph"],"summary":"List Entities","description":"List entities in the tenant's knowledge graph, optionally filtered.","operationId":"list_entities_api_v1_knowledge_graph_entities_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"q","in":"query","required":false,"schema":{"type":"string","default":"","title":"Q"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":50,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/knowledge-graph/entities/{entity_id}/subgraph":{"get":{"tags":["knowledge-graph"],"summary":"Entity Subgraph","description":"Get the subgraph around an entity (neighbors up to given depth).","operationId":"entity_subgraph_api_v1_knowledge_graph_entities__entity_id__subgraph_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"entity_id","in":"path","required":true,"schema":{"type":"string","title":"Entity Id"}},{"name":"depth","in":"query","required":false,"schema":{"type":"integer","default":2,"title":"Depth"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/knowledge-graph/contradictions":{"post":{"tags":["knowledge-graph"],"summary":"Check Contradictions","description":"Check a body of text against the tenant's stored rules for contradictions.","operationId":"check_contradictions_api_v1_knowledge_graph_contradictions_post","requestBody":{"content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Payload"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/knowledge-graph/stats":{"get":{"tags":["knowledge-graph"],"summary":"Graph Stats","description":"Get summary statistics for the tenant's knowledge graph.","operationId":"graph_stats_api_v1_knowledge_graph_stats_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/chat/respond":{"post":{"tags":["support"],"summary":"Chat Respond","description":"Reply to the chatbot widget. Canned but routed by intent - good enough\nfor the marketing site without dragging a real LLM into the loop.","operationId":"chat_respond_api_v1_chat_respond_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChatIn"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChatOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/contact":{"post":{"tags":["support"],"summary":"Contact Submit","operationId":"contact_submit_api_v1_contact_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ContactIn"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ContactOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/mcp/info":{"get":{"tags":["mcp"],"summary":"Info","description":"Lightweight tool inventory + server info. Unauthenticated.","operationId":"info_api_v1_mcp_info_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/mcp/jsonrpc":{"post":{"tags":["mcp"],"summary":"Jsonrpc Endpoint","description":"Accept a JSON-RPC 2.0 request OR a batch {\"requests\": [...]}.\n\nStandard JSON-RPC 2.0: requests have jsonrpc, id, method, params.\nFor tool calls, we charge 1 credit per call (admin tier exempt).","operationId":"jsonrpc_endpoint_api_v1_mcp_jsonrpc_post","requestBody":{"content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Body"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/integrations/catalog":{"get":{"tags":["integrations"],"summary":"Catalog","description":"Public catalog of supported providers + events. No secrets.","operationId":"catalog_api_v1_integrations_catalog_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/integrations":{"get":{"tags":["integrations"],"summary":"List Integrations","description":"List all integrations for the calling tenant. Secrets are never returned.","operationId":"list_integrations_api_v1_integrations_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]},"post":{"tags":["integrations"],"summary":"Connect","description":"Connect a new integration. Returns the integration id + signing secret\n(shown only once).","operationId":"connect_api_v1_integrations_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/api__routes__integrations__ConnectIn"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/integrations/{iid}":{"delete":{"tags":["integrations"],"summary":"Disconnect","operationId":"disconnect_api_v1_integrations__iid__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"iid","in":"path","required":true,"schema":{"type":"string","title":"Iid"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/integrations/{iid}/test":{"post":{"tags":["integrations"],"summary":"Test Endpoint","description":"Synchronously POST a test event to this integration. Returns immediately\nwith the delivery record (callers can poll /deliveries to see retries).","operationId":"test_endpoint_api_v1_integrations__iid__test_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"iid","in":"path","required":true,"schema":{"type":"string","title":"Iid"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/integrations/deliveries":{"get":{"tags":["integrations"],"summary":"Deliveries","description":"Recent deliveries for the tenant across all integrations.","operationId":"deliveries_api_v1_integrations_deliveries_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":500,"default":50,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/integrations/{iid}/deliveries":{"get":{"tags":["integrations"],"summary":"Deliveries For Integration","description":"Recent deliveries for one integration.","operationId":"deliveries_for_integration_api_v1_integrations__iid__deliveries_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"iid","in":"path","required":true,"schema":{"type":"string","title":"Iid"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":500,"default":50,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/integrations/{iid}/preview":{"post":{"tags":["integrations"],"summary":"Preview Endpoint","description":"Return what would be sent to a provider for a given event, without\nactually posting. Useful for debugging the body format.","operationId":"preview_endpoint_api_v1_integrations__iid__preview_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"iid","in":"path","required":true,"schema":{"type":"string","title":"Iid"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/api__routes__integrations__ConnectIn"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/oauth/{provider}/start":{"get":{"tags":["oauth"],"summary":"Start","operationId":"start_api_v1_oauth__provider__start_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"provider","in":"path","required":true,"schema":{"type":"string","title":"Provider"}},{"name":"return_to","in":"query","required":false,"schema":{"type":"string","default":"","title":"Return To"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/oauth/{provider}/callback":{"get":{"tags":["oauth"],"summary":"Callback","operationId":"callback_api_v1_oauth__provider__callback_get","parameters":[{"name":"provider","in":"path","required":true,"schema":{"type":"string","title":"Provider"}},{"name":"code","in":"query","required":false,"schema":{"type":"string","default":"","title":"Code"}},{"name":"state","in":"query","required":false,"schema":{"type":"string","default":"","title":"State"}},{"name":"error","in":"query","required":false,"schema":{"type":"string","default":"","title":"Error"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/oauth/{provider}/status":{"get":{"tags":["oauth"],"summary":"Status","operationId":"status_api_v1_oauth__provider__status_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"provider","in":"path","required":true,"schema":{"type":"string","title":"Provider"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/oauth/{provider}":{"delete":{"tags":["oauth"],"summary":"Disconnect","operationId":"disconnect_api_v1_oauth__provider__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"provider","in":"path","required":true,"schema":{"type":"string","title":"Provider"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/oauth/{provider}/files":{"get":{"tags":["oauth"],"summary":"List Files","operationId":"list_files_api_v1_oauth__provider__files_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"provider","in":"path","required":true,"schema":{"type":"string","title":"Provider"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":50,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/oauth/{provider}/import":{"post":{"tags":["oauth"],"summary":"Import Doc","operationId":"import_doc_api_v1_oauth__provider__import_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"provider","in":"path","required":true,"schema":{"type":"string","title":"Provider"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/api__routes__oauth__ImportIn"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/oauth/{provider}/settings":{"get":{"tags":["oauth"],"summary":"Source Settings","operationId":"source_settings_api_v1_oauth__provider__settings_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"provider","in":"path","required":true,"schema":{"type":"string","title":"Provider"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["oauth"],"summary":"Save Source Settings","operationId":"save_source_settings_api_v1_oauth__provider__settings_put","security":[{"HTTPBearer":[]}],"parameters":[{"name":"provider","in":"path","required":true,"schema":{"type":"string","title":"Provider"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SourceOptions"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/composio/toolkits":{"get":{"tags":["composio"],"summary":"List Toolkits","operationId":"list_toolkits_api_v1_composio_toolkits_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"search","in":"query","required":false,"schema":{"type":"string","maxLength":80,"default":"","title":"Search"}},{"name":"category","in":"query","required":false,"schema":{"type":"string","maxLength":60,"default":"","title":"Category"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":60,"minimum":1,"default":24,"title":"Limit"}},{"name":"cursor","in":"query","required":false,"schema":{"type":"string","maxLength":200,"default":"","title":"Cursor"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/composio/connections":{"get":{"tags":["composio"],"summary":"List Connections","operationId":"list_connections_api_v1_composio_connections_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/composio/connect":{"post":{"tags":["composio"],"summary":"Connect","operationId":"connect_api_v1_composio_connect_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/api__routes__composio__ConnectIn"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/composio/connections/{account_id}":{"delete":{"tags":["composio"],"summary":"Disconnect","operationId":"disconnect_api_v1_composio_connections__account_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"account_id","in":"path","required":true,"schema":{"type":"string","title":"Account Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/composio/recipes":{"get":{"tags":["composio"],"summary":"List Recipes","description":"Every reviewed action, whether this workspace switched it on, and whether its app is connected.","operationId":"list_recipes_api_v1_composio_recipes_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/composio/recipes/{recipe_id}/enable":{"post":{"tags":["composio"],"summary":"Enable Recipe","operationId":"enable_recipe_api_v1_composio_recipes__recipe_id__enable_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"recipe_id","in":"path","required":true,"schema":{"type":"string","title":"Recipe Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/composio/recipes/{recipe_id}/disable":{"post":{"tags":["composio"],"summary":"Disable Recipe","operationId":"disable_recipe_api_v1_composio_recipes__recipe_id__disable_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"recipe_id","in":"path","required":true,"schema":{"type":"string","title":"Recipe Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/composio/events":{"get":{"tags":["composio"],"summary":"Recent Events","description":"What was enabled and run in this workspace. Names and counts only.","operationId":"recent_events_api_v1_composio_events_get","security":[{"HTTPBearer":[]}],"parameters":[{"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":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/composio/run":{"post":{"tags":["composio"],"summary":"Run Recipe","operationId":"run_recipe_api_v1_composio_run_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/api__routes__composio__RunIn"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/grid/tables":{"get":{"tags":["grid"],"summary":"List Tables","operationId":"list_tables_api_v1_grid_tables_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]},"post":{"tags":["grid"],"summary":"Create Table","operationId":"create_table_api_v1_grid_tables_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TableIn"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/grid/tables/{table_id}":{"get":{"tags":["grid"],"summary":"Get Table","operationId":"get_table_api_v1_grid_tables__table_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"table_id","in":"path","required":true,"schema":{"type":"string","title":"Table Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"patch":{"tags":["grid"],"summary":"Update Table","operationId":"update_table_api_v1_grid_tables__table_id__patch","security":[{"HTTPBearer":[]}],"parameters":[{"name":"table_id","in":"path","required":true,"schema":{"type":"string","title":"Table Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TablePatch"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["grid"],"summary":"Delete Table","operationId":"delete_table_api_v1_grid_tables__table_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"table_id","in":"path","required":true,"schema":{"type":"string","title":"Table Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/grid/tables/{table_id}/rows":{"post":{"tags":["grid"],"summary":"Add Rows","operationId":"add_rows_api_v1_grid_tables__table_id__rows_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"table_id","in":"path","required":true,"schema":{"type":"string","title":"Table Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RowsIn"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/grid/tables/{table_id}/rows/{row_id}/result":{"put":{"tags":["grid"],"summary":"Save Result","operationId":"save_result_api_v1_grid_tables__table_id__rows__row_id__result_put","security":[{"HTTPBearer":[]}],"parameters":[{"name":"table_id","in":"path","required":true,"schema":{"type":"string","title":"Table Id"}},{"name":"row_id","in":"path","required":true,"schema":{"type":"string","title":"Row Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResultIn"}}}},"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/grid/tables/{table_id}/rows/{row_id}":{"delete":{"tags":["grid"],"summary":"Delete Row","operationId":"delete_row_api_v1_grid_tables__table_id__rows__row_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"table_id","in":"path","required":true,"schema":{"type":"string","title":"Table Id"}},{"name":"row_id","in":"path","required":true,"schema":{"type":"string","title":"Row Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/grid/tables/{table_id}/columns":{"post":{"tags":["grid"],"summary":"Add Column","operationId":"add_column_api_v1_grid_tables__table_id__columns_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"table_id","in":"path","required":true,"schema":{"type":"string","title":"Table Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ColumnIn"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/grid/tables/{table_id}/columns/{col_id}":{"patch":{"tags":["grid"],"summary":"Update Column","operationId":"update_column_api_v1_grid_tables__table_id__columns__col_id__patch","security":[{"HTTPBearer":[]}],"parameters":[{"name":"table_id","in":"path","required":true,"schema":{"type":"string","title":"Table Id"}},{"name":"col_id","in":"path","required":true,"schema":{"type":"string","title":"Col Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ColumnPatch"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["grid"],"summary":"Delete Column","operationId":"delete_column_api_v1_grid_tables__table_id__columns__col_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"table_id","in":"path","required":true,"schema":{"type":"string","title":"Table Id"}},{"name":"col_id","in":"path","required":true,"schema":{"type":"string","title":"Col Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/grid/tables/{table_id}/columns-order":{"put":{"tags":["grid"],"summary":"Reorder Columns","operationId":"reorder_columns_api_v1_grid_tables__table_id__columns_order_put","security":[{"HTTPBearer":[]}],"parameters":[{"name":"table_id","in":"path","required":true,"schema":{"type":"string","title":"Table Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/OrderIn"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/grid/tables/{table_id}/rows/{row_id}/values/{col_id}":{"put":{"tags":["grid"],"summary":"Set Value","operationId":"set_value_api_v1_grid_tables__table_id__rows__row_id__values__col_id__put","security":[{"HTTPBearer":[]}],"parameters":[{"name":"table_id","in":"path","required":true,"schema":{"type":"string","title":"Table Id"}},{"name":"row_id","in":"path","required":true,"schema":{"type":"string","title":"Row Id"}},{"name":"col_id","in":"path","required":true,"schema":{"type":"string","title":"Col Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValueIn"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/grid/tables/{table_id}/runs":{"post":{"tags":["grid"],"summary":"Start Run","operationId":"start_run_api_v1_grid_tables__table_id__runs_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"table_id","in":"path","required":true,"schema":{"type":"string","title":"Table Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/api__routes__grid__RunIn"}}}},"responses":{"202":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/grid/tables/{table_id}/runs/stop":{"post":{"tags":["grid"],"summary":"Stop Run","operationId":"stop_run_api_v1_grid_tables__table_id__runs_stop_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"table_id","in":"path","required":true,"schema":{"type":"string","title":"Table Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/grid/tables/{table_id}/views":{"post":{"tags":["grid"],"summary":"Add View","operationId":"add_view_api_v1_grid_tables__table_id__views_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"table_id","in":"path","required":true,"schema":{"type":"string","title":"Table Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ViewIn"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/grid/tables/{table_id}/views/{view_id}":{"patch":{"tags":["grid"],"summary":"Update View","operationId":"update_view_api_v1_grid_tables__table_id__views__view_id__patch","security":[{"HTTPBearer":[]}],"parameters":[{"name":"table_id","in":"path","required":true,"schema":{"type":"string","title":"Table Id"}},{"name":"view_id","in":"path","required":true,"schema":{"type":"string","title":"View Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ViewPatch"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["grid"],"summary":"Delete View","operationId":"delete_view_api_v1_grid_tables__table_id__views__view_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"table_id","in":"path","required":true,"schema":{"type":"string","title":"Table Id"}},{"name":"view_id","in":"path","required":true,"schema":{"type":"string","title":"View Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/grid/tables/{table_id}/runs/preview":{"post":{"tags":["grid"],"summary":"Preview Run","operationId":"preview_run_api_v1_grid_tables__table_id__runs_preview_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"table_id","in":"path","required":true,"schema":{"type":"string","title":"Table Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/api__routes__grid__RunIn"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/consent":{"post":{"tags":["consent"],"summary":"Record Consent","description":"Anonymous consent record. No PII - just timestamp + region + categories.\nUsed as audit evidence for GDPR / PDPL compliance.","operationId":"record_consent_api_v1_consent_post","parameters":[{"name":"x-dokeo-session","in":"header","required":false,"schema":{"type":"string","default":"","title":"X-Dokeo-Session"}},{"name":"accept-language","in":"header","required":false,"schema":{"type":"string","default":"","title":"Accept-Language"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConsentIn"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/consent/region":{"get":{"tags":["consent"],"summary":"Get Region","description":"Returns the user's inferred region based on TZ + Accept-Language.","operationId":"get_region_api_v1_consent_region_get","parameters":[{"name":"accept-language","in":"header","required":false,"schema":{"type":"string","default":"","title":"Accept-Language"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/consent/stats":{"get":{"tags":["consent"],"summary":"Stats","description":"Aggregate consent counts per region (compliance evidence).","operationId":"stats_api_v1_consent_stats_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/governance":{"get":{"tags":["governance"],"summary":"Get My Governance","operationId":"get_my_governance_api_v1_governance_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]},"put":{"tags":["governance"],"summary":"Update Governance","operationId":"update_governance_api_v1_governance_put","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GovernanceUpdate"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/governance/ruleset/{name}":{"get":{"tags":["governance"],"summary":"Get Ruleset","operationId":"get_ruleset_api_v1_governance_ruleset__name__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"name","in":"path","required":true,"schema":{"type":"string","title":"Name"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/governance/members":{"get":{"tags":["governance"],"summary":"List Members","operationId":"list_members_api_v1_governance_members_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]},"post":{"tags":["governance"],"summary":"Add Member","description":"Adding a member now means inviting them: a membership needs an account.","operationId":"add_member_api_v1_governance_members_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MemberAdd"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/governance/invites":{"post":{"tags":["governance"],"summary":"Create Invite Ep","description":"Admin invites a teammate. Returns an accept link; best-effort emails it.","operationId":"create_invite_ep_api_v1_governance_invites_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/InviteCreate"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/governance/members/{email}":{"delete":{"tags":["governance"],"summary":"Remove Member","operationId":"remove_member_api_v1_governance_members__email__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"email","in":"path","required":true,"schema":{"type":"string","title":"Email"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/governance/members/{email}/role":{"post":{"tags":["governance"],"summary":"Change Role","operationId":"change_role_api_v1_governance_members__email__role_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"email","in":"path","required":true,"schema":{"type":"string","title":"Email"}},{"name":"role","in":"query","required":true,"schema":{"type":"string","title":"Role"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/governance/approvals":{"get":{"tags":["governance"],"summary":"List Approvals","operationId":"list_approvals_api_v1_governance_approvals_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]},"post":{"tags":["governance"],"summary":"Submit For Review Ep","operationId":"submit_for_review_ep_api_v1_governance_approvals_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReviewSubmit"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/governance/approvals/{review_id}/decide":{"post":{"tags":["governance"],"summary":"Decide Review","operationId":"decide_review_api_v1_governance_approvals__review_id__decide_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"review_id","in":"path","required":true,"schema":{"type":"string","title":"Review Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReviewDecision"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/governance/approvers":{"get":{"tags":["governance"],"summary":"List Approvers","operationId":"list_approvers_api_v1_governance_approvers_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/org":{"get":{"tags":["org"],"summary":"Get Org","operationId":"get_org_api_v1_org_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/org/members":{"get":{"tags":["org"],"summary":"List Members","operationId":"list_members_api_v1_org_members_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/org/members/{uid}":{"patch":{"tags":["org"],"summary":"Change Member Role","operationId":"change_member_role_api_v1_org_members__uid__patch","security":[{"HTTPBearer":[]}],"parameters":[{"name":"uid","in":"path","required":true,"schema":{"type":"string","title":"Uid"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RoleIn"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["org"],"summary":"Remove Member","operationId":"remove_member_api_v1_org_members__uid__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"uid","in":"path","required":true,"schema":{"type":"string","title":"Uid"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/org/leave":{"post":{"tags":["org"],"summary":"Leave","operationId":"leave_api_v1_org_leave_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/org/invites":{"get":{"tags":["org"],"summary":"List Invites","operationId":"list_invites_api_v1_org_invites_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]},"post":{"tags":["org"],"summary":"Create Invite","operationId":"create_invite_api_v1_org_invites_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/InviteIn"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/org/invites/{invite_id}":{"delete":{"tags":["org"],"summary":"Revoke Invite","operationId":"revoke_invite_api_v1_org_invites__invite_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"invite_id","in":"path","required":true,"schema":{"type":"string","title":"Invite Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/org/invites/accept":{"post":{"tags":["org"],"summary":"Accept Invite","description":"A signed-in user joins the org behind an invite link.","operationId":"accept_invite_api_v1_org_invites_accept_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AcceptIn"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/manager/summary":{"get":{"tags":["manager"],"summary":"Summary","description":"Team-level pass/fail summary for the last N days.","operationId":"summary_api_v1_manager_summary_get","security":[{"HTTPBearer":[]}],"parameters":[{"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":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/manager/export.csv":{"get":{"tags":["manager"],"summary":"Export Csv","description":"CSV export of scan history. Streams the file.","operationId":"export_csv_api_v1_manager_export_csv_get","security":[{"HTTPBearer":[]}],"parameters":[{"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":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/manager/export.pdf":{"get":{"tags":["manager"],"summary":"Export Pdf","description":"PDF export of the summary. Falls back to HTML when reportlab is unavailable.\nReturns HTML by default since headless PDF libraries aren't reliable on Fly machines.","operationId":"export_pdf_api_v1_manager_export_pdf_get","security":[{"HTTPBearer":[]}],"parameters":[{"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":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/schedules":{"get":{"tags":["schedules"],"summary":"List Schedules","operationId":"list_schedules_api_v1_schedules_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]},"post":{"tags":["schedules"],"summary":"Create Schedule","operationId":"create_schedule_api_v1_schedules_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ScheduleCreate"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/schedules/{schedule_id}":{"get":{"tags":["schedules"],"summary":"Get Schedule","operationId":"get_schedule_api_v1_schedules__schedule_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"schedule_id","in":"path","required":true,"schema":{"type":"string","title":"Schedule Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["schedules"],"summary":"Update Schedule","operationId":"update_schedule_api_v1_schedules__schedule_id__post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"schedule_id","in":"path","required":true,"schema":{"type":"string","title":"Schedule Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ScheduleUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["schedules"],"summary":"Delete Schedule","operationId":"delete_schedule_api_v1_schedules__schedule_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"schedule_id","in":"path","required":true,"schema":{"type":"string","title":"Schedule Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/schedules/{schedule_id}/run":{"post":{"tags":["schedules"],"summary":"Run Now","description":"Manually trigger a re-scan. Consumes one automated scan credit.\n\nInvariant preserved: this is the existing deterministic /scan/url pipeline.\nNo AI engine is queried; no prompts are tracked. The body lives in\napi/schedule_exec.py, shared with the background scheduler tick.","operationId":"run_now_api_v1_schedules__schedule_id__run_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"schedule_id","in":"path","required":true,"schema":{"type":"string","title":"Schedule Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/editor/docs/scan":{"post":{"tags":["editor-integrations"],"summary":"Docs Scan","description":"Google Docs add-on scan endpoint.\n\nAuthenticate via X-API-Key header (the user pastes their Dokeo API key\ninto the add-on settings).\n\nReturns the same five-severity verdict (BLOCKER/FAIL/WARNING/OPTIMIZATION/PASS)\n+ inline issues as /scan, formatted for the add-on sidebar.","operationId":"docs_scan_api_v1_editor_docs_scan_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DocsScanRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/editor/wordpress/scan":{"post":{"tags":["editor-integrations"],"summary":"Wordpress Scan","description":"WordPress plugin scan-before-publish endpoint.\n\nAuthenticate via X-API-Key.\n\nPass `block_publish_on_fail=true` to receive a hard 422 when the gate\nfails so the WP plugin can block publish. Pass `return_inline=true` to\ninclude paragraph-level issue highlights for the editor.","operationId":"wordpress_scan_api_v1_editor_wordpress_scan_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WordPressScanRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/brand_rules":{"get":{"tags":["brand-rules"],"summary":"List Rules","operationId":"list_rules_api_v1_brand_rules_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]},"post":{"tags":["brand-rules"],"summary":"Upsert Rules","operationId":"upsert_rules_api_v1_brand_rules_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RulesetIn"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]},"delete":{"tags":["brand-rules"],"summary":"Deactivate Rules","operationId":"deactivate_rules_api_v1_brand_rules_delete","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/brand_rules/packs":{"get":{"tags":["brand-rules"],"summary":"List Packs","operationId":"list_packs_api_v1_brand_rules_packs_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/brand_rules/packs/install":{"post":{"tags":["brand-rules"],"summary":"Install Pack","operationId":"install_pack_api_v1_brand_rules_packs_install_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PackIn"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/brand_rules/drafts":{"get":{"tags":["brand-rules"],"summary":"List Drafts","operationId":"list_drafts_api_v1_brand_rules_drafts_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]},"post":{"tags":["brand-rules"],"summary":"Save Drafts","description":"Save a batch of rule drafts from the offline LLM pass.\n\nThe drafts are pending human review. The /drafts/{id}/approve\nendpoint promotes them into the active ruleset.","operationId":"save_drafts_api_v1_brand_rules_drafts_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DraftBatchIn"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/brand_rules/drafts/{draft_id}/approve":{"post":{"tags":["brand-rules"],"summary":"Approve Draft","description":"Approve a single draft rule and merge it into the active ruleset.","operationId":"approve_draft_api_v1_brand_rules_drafts__draft_id__approve_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"draft_id","in":"path","required":true,"schema":{"type":"string","title":"Draft Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/brand_rules/drafts/{draft_id}/reject":{"post":{"tags":["brand-rules"],"summary":"Reject Draft","operationId":"reject_draft_api_v1_brand_rules_drafts__draft_id__reject_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"draft_id","in":"path","required":true,"schema":{"type":"string","title":"Draft Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/brand_rules/import-style-guide":{"post":{"tags":["brand-rules"],"summary":"Import Style Guide","description":"Offline LLM pass: draft candidate rules from a style guide.\n\nAccepts either raw text or a URL to fetch. The LLM is invoked ONLY\nhere (offline, never on the scan path) to produce draft rules.\nFalls back to a heuristic drafter when ANTHROPIC_API_KEY is absent.\n\nOutput: drafts waiting for human approval. They do NOT go live\nuntil you POST /rules/drafts/{draft_id}/approve.","operationId":"import_style_guide_api_v1_brand_rules_import_style_guide_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StyleGuideIn"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/brand_rules/exemplars":{"post":{"tags":["brand-rules"],"summary":"Learn From Exemplars","description":"Infer patterns from 3-5 published URLs that represent 'good' content.\n\nDeterministic: reads each URL, computes stats (heading counts, avg\nsentence length, banned phrases absent), and proposes candidate rules.\nOptionally invokes an offline LLM in addition. Always returns\ndrafts - never mutates the active ruleset.","operationId":"learn_from_exemplars_api_v1_brand_rules_exemplars_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExemplarIn"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/pipeline/ideas":{"post":{"tags":["pipeline"],"summary":"Propose Ideas","operationId":"propose_ideas_api_v1_pipeline_ideas_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/IdeaRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/pipeline/batch":{"post":{"tags":["pipeline"],"summary":"Submit Batch","description":"Submit a batch. Spawns a thread to process. Survives restarts as\ndurable jobs at /data/jobs/{tenant}-{id}.json.","operationId":"submit_batch_api_v1_pipeline_batch_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BatchSubmit"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/pipeline/jobs":{"get":{"tags":["pipeline"],"summary":"List Jobs","operationId":"list_jobs_api_v1_pipeline_jobs_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"state","in":"query","required":false,"schema":{"type":"string","pattern":"^(all|queued|running|completed|failed)$","default":"all","title":"State"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/pipeline/jobs/{job_id}":{"get":{"tags":["pipeline"],"summary":"Get Job","operationId":"get_job_api_v1_pipeline_jobs__job_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","title":"Job Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/pipeline/jobs/{job_id}/cancel":{"post":{"tags":["pipeline"],"summary":"Cancel Job","operationId":"cancel_job_api_v1_pipeline_jobs__job_id__cancel_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","title":"Job Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/pipeline/jobs/{job_id}/publish/{destination}":{"post":{"tags":["pipeline"],"summary":"Publish Job","description":"Push a completed pipeline job to a destination. Gate-checked:\nif any item is FAIL and fail_open=false, block.\nOtherwise, walk through the items and 'push' each (mock publish stub\nthat records the destination + draft). A real adapter is wired per\ndestination in C1.","operationId":"publish_job_api_v1_pipeline_jobs__job_id__publish__destination__post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","title":"Job Id"}},{"name":"destination","in":"path","required":true,"schema":{"type":"string","title":"Destination"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublishRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/pipeline/presets":{"get":{"tags":["pipeline"],"summary":"List Presets","operationId":"list_presets_api_v1_pipeline_presets_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]},"post":{"tags":["pipeline"],"summary":"Save Preset","operationId":"save_preset_api_v1_pipeline_presets_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PresetIn"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/pipeline/presets/{preset_id}/apply":{"post":{"tags":["pipeline"],"summary":"Apply Preset","description":"Apply a preset to a batch submission. Convenience: preset baked in.","operationId":"apply_preset_api_v1_pipeline_presets__preset_id__apply_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"preset_id","in":"path","required":true,"schema":{"type":"string","title":"Preset Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BatchSubmit"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/orchestrate/capabilities":{"get":{"tags":["orchestrate"],"summary":"Capabilities","description":"Whether a writing model is configured, so the UI can say so instead of\noffering a Fix button that cannot work. Never exposes which provider.","operationId":"capabilities_api_v1_orchestrate_capabilities_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/orchestrate/stream":{"post":{"tags":["orchestrate"],"summary":"Orchestrate Stream","description":"Stream the fix loop as Server-Sent Events.\n\nEvents: `start` (initial scan), `attempt_start` / `attempt_result` per\niteration, `done` (final result). A `landed` field on `done` carries the\nreview-queue item id when the draft passed.","operationId":"orchestrate_stream_api_v1_orchestrate_stream_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/OrchestrateRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/orchestrate/jobs/{job_id}":{"get":{"tags":["orchestrate"],"summary":"Get Job","description":"Fetch a past orchestration job and its attempt timeline from the ledger.","operationId":"get_job_api_v1_orchestrate_jobs__job_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","title":"Job Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/prospect-audit":{"post":{"tags":["prospect"],"summary":"Prospect Audit","description":"Run the signal factory over a list of domains. Bounded by crawl_budget\n(default 300 fetches). Synchronous so a Clay HTTP-enrichment row gets its\nsignal back inline; pass webhook_url for async fan-out too. The pipeline\nnever self-selects domains; it audits exactly what it is given.","operationId":"prospect_audit_api_v1_prospect_audit_post","parameters":[{"name":"format","in":"query","required":false,"schema":{"type":"string","pattern":"^(json|csv)$","default":"json","title":"Format"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProspectAuditIn"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/prospect-audit/funnel":{"get":{"tags":["prospect"],"summary":"Funnel","description":"The one number: report_created -> viewed -> claimed -> signup ->\nactivated -> converted. Computed only from logged events.","operationId":"funnel_api_v1_prospect_audit_funnel_get","parameters":[{"name":"since","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Since"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/suppressions":{"get":{"tags":["prospect"],"summary":"Suppressions","description":"Opt-out list for the outbound stack to sync and honor.","operationId":"suppressions_api_v1_suppressions_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/r/{slug}":{"get":{"tags":["prospect"],"summary":"Get Report","description":"Public report data. Worst posts are teasers; the full line-by-line fixes\nare 'locked' until the report is claimed (free signup). noindex is set on the\nfrontend route.","operationId":"get_report_api_v1_r__slug__get","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string","title":"Slug"}},{"name":"src","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Src"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/r/{slug}/opt-out":{"post":{"tags":["prospect"],"summary":"Opt Out","description":"Remove a report and suppress its domain from future runs. Public: the\nfooter opt-out link hits this. Idempotent.","operationId":"opt_out_api_v1_r__slug__opt_out_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"}}}}}}},"/api/v1/r/{slug}/claim":{"post":{"tags":["prospect"],"summary":"Claim Report","description":"Attach a report to the signed-in account (called after a claim signup).\n\n2026-08-04: previously trusted the unsigned X-Dokeo-Tenant header with no\nauth at all on this route, so anyone could re-attach any report to any\ntenant string. Requires a verified session now, same as the rest of the\nidentity-header hardening in this pass.","operationId":"claim_report_api_v1_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"}}}}}}},"/api/v1/copilot/ask":{"post":{"tags":["copilot"],"summary":"Copilot Ask","operationId":"copilot_ask_api_v1_copilot_ask_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CopilotAskIn"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/connectors/{source}/credentials":{"post":{"tags":["connectors"],"summary":"Save Credentials","operationId":"save_credentials_api_v1_connectors__source__credentials_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"source","in":"path","required":true,"schema":{"type":"string","title":"Source"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CredentialsIn"}}}},"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["connectors"],"summary":"Delete Credentials","operationId":"delete_credentials_api_v1_connectors__source__credentials_delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"source","in":"path","required":true,"schema":{"type":"string","title":"Source"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/connectors/{source}/sync":{"post":{"tags":["connectors"],"summary":"Sync","operationId":"sync_api_v1_connectors__source__sync_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"source","in":"path","required":true,"schema":{"type":"string","title":"Source"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/connectors/{source}/status":{"get":{"tags":["connectors"],"summary":"Status","operationId":"status_api_v1_connectors__source__status_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"source","in":"path","required":true,"schema":{"type":"string","title":"Source"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/objects":{"post":{"tags":["core-objects"],"summary":"Create Object","operationId":"create_object_api_v1_objects_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"X-Dokeo-User-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Dokeo-User-Id"}},{"name":"X-Dokeo-User-Email","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Dokeo-User-Email"}},{"name":"X-Dokeo-User-Name","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Dokeo-User-Name"}},{"name":"X-Dokeo-Tenant","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Dokeo-Tenant"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateObjectRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["core-objects"],"summary":"List Objects","operationId":"list_objects_api_v1_objects_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"object_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Object Type"}},{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/objects/{object_id}":{"get":{"tags":["core-objects"],"summary":"Get Object","operationId":"get_object_api_v1_objects__object_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"object_id","in":"path","required":true,"schema":{"type":"string","title":"Object Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/tests/run":{"post":{"tags":["core-tests"],"summary":"Run Test","operationId":"run_test_api_v1_tests_run_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"X-Dokeo-User-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Dokeo-User-Id"}},{"name":"X-Dokeo-User-Email","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Dokeo-User-Email"}},{"name":"X-Dokeo-User-Name","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Dokeo-User-Name"}},{"name":"X-Dokeo-Tenant","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Dokeo-Tenant"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RunTestRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/tests/rerun":{"post":{"tags":["core-tests"],"summary":"Rerun Test","operationId":"rerun_test_api_v1_tests_rerun_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"X-Dokeo-User-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Dokeo-User-Id"}},{"name":"X-Dokeo-User-Email","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Dokeo-User-Email"}},{"name":"X-Dokeo-User-Name","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Dokeo-User-Name"}},{"name":"X-Dokeo-Tenant","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Dokeo-Tenant"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RunTestRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/tests/runs":{"get":{"tags":["core-tests"],"summary":"List Test Runs","operationId":"list_test_runs_api_v1_tests_runs_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"object_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Object Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/issues":{"get":{"tags":["core-issues"],"summary":"List Issues","operationId":"list_issues_api_v1_issues_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"severity","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Comma-separated, e.g. BLOCKER,FAIL","title":"Severity"},"description":"Comma-separated, e.g. BLOCKER,FAIL"},{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"default":"open","title":"Status"}},{"name":"object_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Object Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/issues/{issue_id}":{"get":{"tags":["core-issues"],"summary":"Get Issue","operationId":"get_issue_api_v1_issues__issue_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"issue_id","in":"path","required":true,"schema":{"type":"string","title":"Issue Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/fixes":{"post":{"tags":["core-fixes"],"summary":"Submit Fix","operationId":"submit_fix_api_v1_fixes_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"X-Dokeo-User-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Dokeo-User-Id"}},{"name":"X-Dokeo-User-Email","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Dokeo-User-Email"}},{"name":"X-Dokeo-User-Name","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Dokeo-User-Name"}},{"name":"X-Dokeo-Tenant","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Dokeo-Tenant"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SubmitFixRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/approvals/request":{"post":{"tags":["core-approvals"],"summary":"Request Approval","operationId":"request_approval_api_v1_approvals_request_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RequestApprovalRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/approvals":{"get":{"tags":["core-approvals"],"summary":"List Approvals","operationId":"list_approvals_api_v1_approvals_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"default":"pending","title":"Status"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/approvals/{approval_id}/decision":{"post":{"tags":["core-approvals"],"summary":"Decide Approval","operationId":"decide_approval_api_v1_approvals__approval_id__decision_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"approval_id","in":"path","required":true,"schema":{"type":"string","title":"Approval Id"}},{"name":"X-Dokeo-User-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Dokeo-User-Id"}},{"name":"X-Dokeo-User-Email","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Dokeo-User-Email"}},{"name":"X-Dokeo-User-Name","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Dokeo-User-Name"}},{"name":"X-Dokeo-Tenant","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Dokeo-Tenant"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApprovalDecisionRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/deployments":{"post":{"tags":["core-deployments"],"summary":"Create Deployment","operationId":"create_deployment_api_v1_deployments_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"X-Dokeo-User-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Dokeo-User-Id"}},{"name":"X-Dokeo-User-Email","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Dokeo-User-Email"}},{"name":"X-Dokeo-User-Name","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Dokeo-User-Name"}},{"name":"X-Dokeo-Tenant","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Dokeo-Tenant"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateDeploymentRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["core-deployments"],"summary":"List Deployments","operationId":"list_deployments_api_v1_deployments_get","security":[{"HTTPBearer":[]}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/monitors":{"get":{"tags":["core-monitors"],"summary":"List Monitors","operationId":"list_monitors_api_v1_monitors_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]},"post":{"tags":["core-monitors"],"summary":"Create Monitor","operationId":"create_monitor_api_v1_monitors_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateMonitorRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/outcomes":{"get":{"tags":["core-outcomes"],"summary":"List Outcomes","operationId":"list_outcomes_api_v1_outcomes_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"object_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Object Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/policies":{"post":{"tags":["core-policies"],"summary":"Create Policy","operationId":"create_policy_api_v1_policies_post","security":[{"HTTPBearer":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreatePolicyRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["core-policies"],"summary":"List Policies","operationId":"list_policies_api_v1_policies_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"object_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Object Type"}},{"name":"workspace_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Workspace Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/webhooks/ingest/{object_type}":{"post":{"tags":["core-webhooks"],"summary":"Ingest","operationId":"ingest_api_v1_webhooks_ingest__object_type__post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"object_type","in":"path","required":true,"schema":{"type":"string","title":"Object Type"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebhookIngestRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/site-audit/stream":{"post":{"tags":["site-audit"],"summary":"Stream Site Audit","description":"Stream a multi-lens site audit as Server-Sent Events.\n\nEvents: discover, progress, page_result, lens_summary, ranked_findings, done","operationId":"stream_site_audit_api_v1_site_audit_stream_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"X-Dokeo-User-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Dokeo-User-Id"}},{"name":"X-Dokeo-User-Email","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Dokeo-User-Email"}},{"name":"X-Dokeo-User-Name","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Dokeo-User-Name"}},{"name":"X-Dokeo-Tenant","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Dokeo-Tenant"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SiteAuditRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/crem/metrics":{"get":{"tags":["crem"],"summary":"Crem Metrics","description":"CREM outcome metrics: open exposures, SLA compliance, MTTR,\nconfirmed risk reduced.","operationId":"crem_metrics_api_v1_crem_metrics_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/crem/exposures":{"get":{"tags":["crem"],"summary":"List Exposures","description":"List exposures for the tenant, ordered by exposure_score descending.","operationId":"list_exposures_api_v1_crem_exposures_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by status","title":"Status"},"description":"Filter by status"},{"name":"severity","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by severity","title":"Severity"},"description":"Filter by severity"},{"name":"tier","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by business tier (P0-P3)","title":"Tier"},"description":"Filter by business tier (P0-P3)"},{"name":"source","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by module source (scan, watch, regression, security, intent_signal, data_quality)","title":"Source"},"description":"Filter by module source (scan, watch, regression, security, intent_signal, data_quality)"},{"name":"check_key","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by check key","title":"Check Key"},"description":"Filter by check key"},{"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":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/crem/exposures/overdue":{"get":{"tags":["crem"],"summary":"Overdue Exposures","description":"List exposures past their SLA deadline.","operationId":"overdue_exposures_api_v1_crem_exposures_overdue_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/crem/exposures/{exposure_id}":{"get":{"tags":["crem"],"summary":"Get Exposure","description":"Get a single exposure by ID.","operationId":"get_exposure_api_v1_crem_exposures__exposure_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"exposure_id","in":"path","required":true,"schema":{"type":"string","title":"Exposure Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/crem/exposures/{exposure_id}/validate":{"post":{"tags":["crem"],"summary":"Validate Exposure","description":"Manually validate an exposure (confirm it has real-world impact).","operationId":"validate_exposure_api_v1_crem_exposures__exposure_id__validate_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"exposure_id","in":"path","required":true,"schema":{"type":"string","title":"Exposure Id"}},{"name":"source","in":"query","required":false,"schema":{"type":"string","description":"Validation source","default":"manual","title":"Source"},"description":"Validation source"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/crem/exposures/{exposure_id}/dismiss":{"post":{"tags":["crem"],"summary":"Dismiss Exposure","description":"Dismiss an exposure (not worth fixing).","operationId":"dismiss_exposure_api_v1_crem_exposures__exposure_id__dismiss_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"exposure_id","in":"path","required":true,"schema":{"type":"string","title":"Exposure Id"}},{"name":"reason","in":"query","required":false,"schema":{"type":"string","description":"Why this exposure is being dismissed","default":"","title":"Reason"},"description":"Why this exposure is being dismissed"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/crem/surface":{"post":{"tags":["crem"],"summary":"Update Surface","description":"Update the content surface rules for a tenant. Body is the\ncontent_surface config object (rules + default_tier).","operationId":"update_surface_api_v1_crem_surface_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/crem/signals/webhook":{"post":{"tags":["crem"],"summary":"Signals Webhook","description":"Receive ClearCue intent-signal payloads (one object or a list).\nEach is normalized and stored; the next CREM cycle turns unacted\nsignals into intent_signal exposures. Idempotent per signal id.","operationId":"signals_webhook_api_v1_crem_signals_webhook_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/crem/metrics/modules":{"get":{"tags":["crem"],"summary":"Module Metrics","description":"Per-module CREM metrics: open count, validated rate, MTTR by source.","operationId":"module_metrics_api_v1_crem_metrics_modules_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/crem/cycle":{"post":{"tags":["crem"],"summary":"Trigger Cycle","description":"Manually trigger a CREM cycle for the tenant. Useful for testing\nor after bulk content changes.","operationId":"trigger_cycle_api_v1_crem_cycle_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/agents/status":{"get":{"tags":["agents"],"summary":"Agent Status","operationId":"agent_status_api_v1_agents_status_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/agents/runs":{"get":{"tags":["agents"],"summary":"Agent Runs","operationId":"agent_runs_api_v1_agents_runs_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":50,"title":"Limit"}},{"name":"agent_name","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Agent Name"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/agents/root-file":{"get":{"tags":["agents"],"summary":"Get Root File","operationId":"get_root_file_api_v1_agents_root_file_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/agents/{name}/trigger":{"post":{"tags":["agents"],"summary":"Trigger Agent","operationId":"trigger_agent_api_v1_agents__name__trigger_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"name","in":"path","required":true,"schema":{"type":"string","title":"Name"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/auth/forgot-password":{"post":{"tags":["auth"],"summary":"Forgot Password","description":"Request a password reset email. Always returns the same message.","operationId":"forgot_password_api_v1_auth_forgot_password_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ForgotPasswordIn"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/auth/reset-password":{"post":{"tags":["auth"],"summary":"Reset Password","description":"Set a new password using a one-time reset token.","operationId":"reset_password_api_v1_auth_reset_password_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResetPasswordIn"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/auth/verify-email":{"post":{"tags":["auth"],"summary":"Verify Email","description":"Confirm an email using the link from the verification email. Idempotent.","operationId":"verify_email_api_v1_auth_verify_email_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/VerifyEmailIn"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/auth/resend-verification":{"post":{"tags":["auth"],"summary":"Resend Verification","description":"Re-send the verification email for the signed-in, still-unverified user.","operationId":"resend_verification_api_v1_auth_resend_verification_post","parameters":[{"name":"X-Dokeo-User-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Dokeo-User-Id"}},{"name":"X-Dokeo-User-Email","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Dokeo-User-Email"}},{"name":"X-Dokeo-User-Name","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Dokeo-User-Name"}},{"name":"X-Dokeo-Tenant","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Dokeo-Tenant"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/auth/sign-up":{"post":{"tags":["auth"],"summary":"Sign Up","description":"Create a new account and set the session cookie.\n\nReturns the issued JWT so the calling Next.js proxy can also set it\non its own domain (the FastAPI cookie here is best-effort cross-domain).","operationId":"sign_up_api_v1_auth_sign_up_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SignUpIn"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/auth/accept-invite":{"post":{"tags":["auth"],"summary":"Accept Invite","description":"Unauthenticated: a teammate with no account accepts an invite, creating\ntheir account in the inviting tenant's org with the invited role. (A user\nwho already has an account signs in and uses POST /org/invites/accept.)","operationId":"accept_invite_api_v1_auth_accept_invite_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AcceptInviteIn"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/auth/sign-in":{"post":{"tags":["auth"],"summary":"Sign In","description":"Verify password and issue a session JWT.","operationId":"sign_in_api_v1_auth_sign_in_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SignInIn"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/auth/sign-out":{"post":{"tags":["auth"],"summary":"Sign Out","operationId":"sign_out_api_v1_auth_sign_out_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/auth/me":{"get":{"tags":["auth"],"summary":"Me","description":"Return the current session + user profile.","operationId":"me_api_v1_auth_me_get","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}},{"name":"__session","in":"cookie","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"  Session"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"patch":{"tags":["auth"],"summary":"Update Me","description":"Update mutable profile fields on the current user.","operationId":"update_me_api_v1_auth_me_patch","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}},{"name":"__session","in":"cookie","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"  Session"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProfileUpdateIn"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["auth"],"summary":"Delete My Account","description":"Queue a verified erasure request. Never delete a shared workspace here.\n\nThe old endpoint deleted every member's keys, billing and integrations,\nmissed Better Auth and Core records, then falsely reported full erasure.\nThe operator reviews shared-workspace ownership and completes deletion.","operationId":"delete_my_account_api_v1_auth_me_delete","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}},{"name":"__session","in":"cookie","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"  Session"}}],"responses":{"202":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/auth/change-password":{"post":{"tags":["auth"],"summary":"Change Pw","description":"Change the current user's password.","operationId":"change_pw_api_v1_auth_change_password_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}},{"name":"__session","in":"cookie","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"  Session"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChangePasswordIn"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/auth/verify-token":{"post":{"tags":["auth"],"summary":"Verify Token Endpoint","description":"Validate a JWT issued by our sign-in/sign-up. Used by Next.js\nmiddleware to confirm a cookie minted by the FastAPI service.","operationId":"verify_token_endpoint_api_v1_auth_verify_token_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TokenIn"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/auth/me/export":{"get":{"tags":["auth"],"summary":"Export My Data","description":"Partial self-service export. Full portability requests need operator review.","operationId":"export_my_data_api_v1_auth_me_export_get","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}},{"name":"__session","in":"cookie","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"  Session"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/sso/initiate":{"post":{"tags":["sso"],"summary":"Sso Initiate","description":"Start SSO login flow. Returns redirect URL for the IdP.","operationId":"sso_initiate_api_v1_sso_initiate_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SSOInitiateRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/sso/callback":{"post":{"tags":["sso"],"summary":"Sso Callback","description":"SAML ACS (Assertion Consumer Service) endpoint.\nReceives the SAML Response from the IdP, validates it, and creates/finds\nthe user, then issues a session JWT and redirects to the app.","operationId":"sso_callback_api_v1_sso_callback_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/sso/metadata":{"get":{"tags":["sso"],"summary":"Sso Metadata","description":"SAML SP metadata XML. IdP admins paste this URL into their SSO config.","operationId":"sso_metadata_api_v1_sso_metadata_get","parameters":[{"name":"tenant","in":"query","required":false,"schema":{"type":"string","default":"","title":"Tenant"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/sso/config/{tenant_id}":{"put":{"tags":["sso"],"summary":"Update Sso Config","description":"Admin: configure SSO for a tenant. Requires admin token.","operationId":"update_sso_config_api_v1_sso_config__tenant_id__put","parameters":[{"name":"tenant_id","in":"path","required":true,"schema":{"type":"string","title":"Tenant Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SSOConfigUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/version":{"get":{"tags":["meta"],"summary":"Version Endpoint","operationId":"version_endpoint_version_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}}},"components":{"schemas":{"AcceptIn":{"properties":{"token":{"type":"string","minLength":10,"title":"Token"}},"type":"object","required":["token"],"title":"AcceptIn"},"AcceptInviteIn":{"properties":{"token":{"type":"string","title":"Token"},"password":{"type":"string","minLength":8,"title":"Password"}},"type":"object","required":["token","password"],"title":"AcceptInviteIn"},"AnonymiseRequest":{"properties":{"target":{"type":"string","maxLength":254,"minLength":3,"title":"Target"}},"type":"object","required":["target"],"title":"AnonymiseRequest"},"ApprovalDecisionRequest":{"properties":{"status":{"type":"string","pattern":"^(approved|rejected|changes_requested)$","title":"Status"},"comment":{"type":"string","title":"Comment","default":""}},"type":"object","required":["status"],"title":"ApprovalDecisionRequest"},"AssignIn":{"properties":{"reviewer":{"type":"string","title":"Reviewer"}},"type":"object","required":["reviewer"],"title":"AssignIn"},"BatchItem":{"properties":{"primary_keyword":{"type":"string","title":"Primary Keyword"},"category_label":{"type":"string","title":"Category Label","default":""},"audience":{"type":"string","title":"Audience","default":"marketers"},"house_product":{"type":"string","title":"House Product","default":""},"secondary_keywords":{"items":{},"type":"array","title":"Secondary Keywords"},"tool_count":{"type":"integer","title":"Tool Count","default":10},"format":{"type":"string","title":"Format","default":"listicle"}},"type":"object","required":["primary_keyword"],"title":"BatchItem"},"BatchSubmit":{"properties":{"items":{"items":{"$ref":"#/components/schemas/BatchItem"},"type":"array","maxItems":100,"title":"Items"},"preset_id":{"type":"string","title":"Preset Id","default":""},"fail_open":{"type":"boolean","title":"Fail Open","default":true}},"type":"object","required":["items"],"title":"BatchSubmit"},"Body_upload_document_api_v1_knowledge_graph_documents_upload_post":{"properties":{"file":{"type":"string","format":"binary","title":"File"}},"type":"object","required":["file"],"title":"Body_upload_document_api_v1_knowledge_graph_documents_upload_post"},"BrandVoice":{"properties":{"allow_terms":{"items":{"type":"string"},"type":"array","title":"Allow Terms"},"deny_terms":{"items":{"type":"string"},"type":"array","title":"Deny Terms"}},"type":"object","title":"BrandVoice"},"BuilderComposeRequest":{"properties":{"content_type":{"type":"string","maxLength":40,"title":"Content Type","default":"blog"},"topic":{"type":"string","maxLength":800,"minLength":3,"title":"Topic"},"audience":{"type":"string","title":"Audience","default":"B2B teams"},"key_points":{"items":{"type":"string"},"type":"array","title":"Key Points"},"tone":{"type":"string","title":"Tone","default":""},"house_product":{"type":"string","title":"House Product","default":""},"mock":{"type":"boolean","title":"Mock","default":false},"provider":{"type":"string","pattern":"^(auto|mock|glm|minimax|anthropic|openai|gemini|custom|inhouse)$","title":"Provider","default":"auto"},"model":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Model"},"api_key":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Api Key"},"base_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Base Url"}},"type":"object","required":["topic"],"title":"BuilderComposeRequest","description":"Type-aware composition for any content type (email, blog, social, ...).\nUnlike the listicle path, this does not need a research bundle."},"BuilderComposeResponse":{"properties":{"draft_md":{"type":"string","title":"Draft Md"},"title":{"type":"string","title":"Title"},"content_type":{"type":"string","title":"Content Type"},"verdict":{"type":"string","title":"Verdict"},"score":{"type":"integer","title":"Score"},"review_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Review Id"},"meta":{"additionalProperties":true,"type":"object","title":"Meta"}},"type":"object","required":["draft_md","title","content_type","verdict","score","meta"],"title":"BuilderComposeResponse"},"BuilderGenerateRequest":{"properties":{"research_bundle":{"additionalProperties":true,"type":"object","title":"Research Bundle"},"format":{"type":"string","pattern":"^(listicle|comparison|alternatives|buyers_guide)$","title":"Format","default":"listicle"},"humanize":{"type":"boolean","title":"Humanize","default":false},"check_links":{"type":"boolean","title":"Check Links","default":false},"mock":{"type":"boolean","title":"Mock","default":false},"provider":{"type":"string","pattern":"^(auto|mock|glm|minimax|anthropic|openai|gemini|custom|inhouse)$","title":"Provider","default":"auto"},"model":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Model"},"api_key":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Api Key"},"base_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Base Url"}},"type":"object","required":["research_bundle"],"title":"BuilderGenerateRequest"},"BuilderGenerateResponse":{"properties":{"draft_md":{"type":"string","title":"Draft Md"},"qa_report":{"additionalProperties":true,"type":"object","title":"Qa Report"},"sections":{"additionalProperties":true,"type":"object","title":"Sections"},"editorial":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Editorial"},"format":{"type":"string","title":"Format"}},"type":"object","required":["draft_md","qa_report","sections","format"],"title":"BuilderGenerateResponse"},"BuilderResearchRequest":{"properties":{"primary_keyword":{"type":"string","title":"Primary Keyword"},"category_label":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Category Label"},"audience":{"type":"string","title":"Audience","default":"B2B teams"},"year":{"type":"integer","title":"Year","default":2026},"tool_count":{"type":"integer","maximum":15.0,"minimum":2.0,"title":"Tool Count","default":6},"house_product":{"type":"string","title":"House Product","default":""},"secondary_keywords":{"items":{"type":"string"},"type":"array","title":"Secondary Keywords"},"mock":{"type":"boolean","title":"Mock","default":false},"provider":{"type":"string","pattern":"^(auto|mock|glm|minimax|anthropic|openai|gemini|custom|inhouse)$","title":"Provider","default":"auto"},"model":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Model"},"api_key":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Api Key","description":"Session key - overrides env, never stored"},"base_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Base Url","description":"Custom OpenAI-compatible base URL"}},"type":"object","required":["primary_keyword"],"title":"BuilderResearchRequest"},"CampaignEmail":{"properties":{"step":{"type":"string","maxLength":40,"minLength":1,"title":"Step","description":"Sequence step, e.g. 1 or follow-up-2"},"subject":{"type":"string","maxLength":300,"title":"Subject","default":""},"body":{"type":"string","maxLength":50000,"minLength":1,"title":"Body"},"send_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Send At","description":"When this step is scheduled to go. With an offset it is converted to the recipient time zone; without one it is read as already local. Enables the timing rules."}},"type":"object","required":["step","body"],"title":"CampaignEmail"},"CampaignQARequest":{"properties":{"campaign":{"type":"string","maxLength":120,"minLength":1,"title":"Campaign"},"emails":{"items":{"$ref":"#/components/schemas/CampaignEmail"},"type":"array","maxItems":25,"minItems":1,"title":"Emails"},"mode":{"type":"string","enum":["shadow","enforce"],"title":"Mode","default":"shadow"},"fail_on":{"type":"string","pattern":"^(none|blocker|fail|warning|flag|optimization|pass)$","title":"Fail On","default":"fail"},"min_score":{"type":"number","maximum":100.0,"minimum":0.0,"title":"Min Score","default":0},"strictness":{"type":"string","pattern":"^(strict|balanced|permissive)$","title":"Strictness","default":"strict"},"footer":{"type":"string","maxLength":2000,"title":"Footer","description":"What your sender appends to every email (for example the unsubscribe line). It is scored with each email, so the unsubscribe check sees it.","default":""},"timing":{"$ref":"#/components/schemas/TimingRules","description":"Quiet hours and step spacing. Only applied to steps that have send_at."},"recipients":{"items":{"type":"string"},"type":"array","maxItems":1000,"title":"Recipients","description":"Addresses this campaign is about to go to. Anyone on the do-not-contact ledger (or whose domain is) is dropped from send_to in every mode."}},"type":"object","required":["campaign","emails"],"title":"CampaignQARequest"},"CategoryFile":{"properties":{"stem":{"type":"string","title":"Stem"},"label":{"type":"string","title":"Label"},"primary_keyword":{"type":"string","title":"Primary Keyword"},"tool_count":{"type":"integer","title":"Tool Count"},"house_product":{"type":"string","title":"House Product"}},"type":"object","required":["stem","label","primary_keyword","tool_count","house_product"],"title":"CategoryFile"},"ChangePasswordIn":{"properties":{"current_password":{"type":"string","title":"Current Password"},"new_password":{"type":"string","minLength":8,"title":"New Password"}},"type":"object","required":["current_password","new_password"],"title":"ChangePasswordIn"},"ChatIn":{"properties":{"message":{"type":"string","maxLength":500,"minLength":1,"title":"Message"}},"type":"object","required":["message"],"title":"ChatIn"},"ChatOut":{"properties":{"reply":{"type":"string","title":"Reply"},"suggestions":{"items":{"type":"string"},"type":"array","title":"Suggestions","default":[]}},"type":"object","required":["reply"],"title":"ChatOut"},"ColumnIn":{"properties":{"name":{"type":"string","maxLength":200,"title":"Name"},"kind":{"type":"string","maxLength":20,"title":"Kind","default":"text"},"config":{"additionalProperties":true,"type":"object","title":"Config"}},"type":"object","required":["name"],"title":"ColumnIn"},"ColumnPatch":{"properties":{"name":{"anyOf":[{"type":"string","maxLength":200},{"type":"null"}],"title":"Name"},"hidden":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Hidden"},"width":{"anyOf":[{"type":"integer","maximum":2000.0,"minimum":0.0},{"type":"null"}],"title":"Width"},"config":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Config"}},"type":"object","title":"ColumnPatch"},"CommentIn":{"properties":{"body":{"type":"string","maxLength":4000,"minLength":1,"title":"Body"}},"type":"object","required":["body"],"title":"CommentIn"},"CompetitorIn":{"properties":{"name":{"type":"string","title":"Name"},"aliases":{"items":{"type":"string"},"type":"array","title":"Aliases"}},"type":"object","required":["name"],"title":"CompetitorIn"},"ConsentIn":{"properties":{"necessary":{"type":"boolean","title":"Necessary","default":true},"analytics":{"type":"boolean","title":"Analytics","default":false},"marketing":{"type":"boolean","title":"Marketing","default":false},"region":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Region"}},"type":"object","title":"ConsentIn"},"ContactIn":{"properties":{"name":{"type":"string","maxLength":120,"minLength":1,"title":"Name"},"email":{"type":"string","format":"email","title":"Email"},"company":{"anyOf":[{"type":"string","maxLength":200},{"type":"null"}],"title":"Company"},"message":{"type":"string","maxLength":4000,"minLength":10,"title":"Message"}},"type":"object","required":["name","email","message"],"title":"ContactIn"},"ContactOut":{"properties":{"ok":{"type":"boolean","title":"Ok"},"id":{"type":"string","title":"Id"}},"type":"object","required":["ok","id"],"title":"ContactOut"},"ContentSample":{"properties":{"content_type":{"type":"string","title":"Content Type"},"file":{"type":"string","title":"File"},"title":{"type":"string","title":"Title"},"primary_keyword":{"type":"string","title":"Primary Keyword"},"body":{"type":"string","title":"Body"}},"type":"object","required":["content_type","file","title","primary_keyword","body"],"title":"ContentSample"},"ContentSampleMeta":{"properties":{"content_type":{"type":"string","title":"Content Type"},"file":{"type":"string","title":"File"},"title":{"type":"string","title":"Title"},"primary_keyword":{"type":"string","title":"Primary Keyword"}},"type":"object","required":["content_type","file","title","primary_keyword"],"title":"ContentSampleMeta"},"ContentType":{"properties":{"key":{"type":"string","title":"Key"},"label":{"type":"string","title":"Label"},"desc":{"type":"string","title":"Desc"},"min_words":{"type":"integer","title":"Min Words"},"engines":{"items":{"type":"string"},"type":"array","title":"Engines"},"extra_checks":{"items":{"type":"string"},"type":"array","title":"Extra Checks"}},"type":"object","required":["key","label","desc","min_words","engines","extra_checks"],"title":"ContentType"},"CopilotAskIn":{"properties":{"question":{"type":"string","maxLength":2000,"minLength":1,"title":"Question"},"scope":{"type":"string","title":"Scope","default":"content"}},"type":"object","required":["question"],"title":"CopilotAskIn"},"CrawlerLogUpload":{"properties":{"lines":{"items":{"type":"string"},"type":"array","maxItems":100000,"title":"Lines","description":"Raw nginx/Apache combined-format access log lines"}},"type":"object","required":["lines"],"title":"CrawlerLogUpload"},"CreateCreditOrderRequest":{"properties":{"pack_id":{"type":"string","title":"Pack Id"}},"type":"object","required":["pack_id"],"title":"CreateCreditOrderRequest"},"CreateCreditOrderResponse":{"properties":{"order_id":{"type":"string","title":"Order Id"},"amount":{"type":"integer","title":"Amount"},"currency":{"type":"string","title":"Currency"},"key_id":{"type":"string","title":"Key Id"},"pack_id":{"type":"string","title":"Pack Id"},"credits":{"type":"integer","title":"Credits"},"kind":{"type":"string","title":"Kind","default":"credit_pack"}},"type":"object","required":["order_id","amount","currency","key_id","pack_id","credits"],"title":"CreateCreditOrderResponse"},"CreateDeploymentRequest":{"properties":{"object_id":{"type":"string","title":"Object Id"},"object_version_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Object Version Id"},"target":{"type":"string","title":"Target","default":""}},"type":"object","required":["object_id"],"title":"CreateDeploymentRequest"},"CreateMonitorRequest":{"properties":{"object_id":{"type":"string","title":"Object Id"},"cadence":{"type":"string","title":"Cadence","default":"daily"},"policy_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Policy Id"}},"type":"object","required":["object_id"],"title":"CreateMonitorRequest"},"CreateObjectRequest":{"properties":{"object_type":{"type":"string","title":"Object Type","description":"e.g. \"content.blog\", \"crm.contact\""},"payload":{"additionalProperties":true,"type":"object","title":"Payload","description":"The object's domain-specific fields"},"workspace_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Workspace Id"},"title":{"type":"string","maxLength":200,"title":"Title","default":""},"external_ref":{"type":"string","maxLength":200,"title":"External Ref","default":""}},"type":"object","required":["object_type","payload"],"title":"CreateObjectRequest"},"CreateOrderRequest":{"properties":{"tier":{"type":"string","title":"Tier"},"cycle":{"type":"string","title":"Cycle","default":"monthly"}},"type":"object","required":["tier"],"title":"CreateOrderRequest"},"CreateOrderResponse":{"properties":{"order_id":{"type":"string","title":"Order Id"},"amount":{"type":"integer","title":"Amount"},"currency":{"type":"string","title":"Currency"},"key_id":{"type":"string","title":"Key Id"},"tier":{"type":"string","title":"Tier"},"cycle":{"type":"string","title":"Cycle"}},"type":"object","required":["order_id","amount","currency","key_id","tier","cycle"],"title":"CreateOrderResponse"},"CreatePolicyRequest":{"properties":{"object_type":{"type":"string","title":"Object Type"},"name":{"type":"string","title":"Name"},"rules":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Rules"},"workspace_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Workspace Id"},"description":{"type":"string","title":"Description","default":""},"inherits_from":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Inherits From"}},"type":"object","required":["object_type","name"],"title":"CreatePolicyRequest"},"CreateSessionRequest":{"properties":{"tier":{"type":"string","title":"Tier"},"cycle":{"type":"string","title":"Cycle","default":"monthly"},"customer_email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Customer Email"},"success_path":{"type":"string","title":"Success Path","default":"/pricing?checkout=success"},"cancel_path":{"type":"string","title":"Cancel Path","default":"/pricing?checkout=cancelled"}},"type":"object","required":["tier"],"title":"CreateSessionRequest"},"CredentialsIn":{"properties":{"api_key":{"type":"string","minLength":1,"title":"Api Key"},"target":{"type":"string","minLength":1,"title":"Target"}},"type":"object","required":["api_key","target"],"title":"CredentialsIn"},"CreditRepairIn":{"properties":{"reason":{"type":"string","maxLength":200,"title":"Reason","default":"onboarding repair"}},"type":"object","title":"CreditRepairIn"},"DecisionIn":{"properties":{"decision":{"type":"string","title":"Decision"},"comment":{"type":"string","title":"Comment","default":""}},"type":"object","required":["decision"],"title":"DecisionIn"},"DetectRequest":{"properties":{"title":{"type":"string","title":"Title","default":""},"body":{"type":"string","title":"Body","default":""},"url":{"type":"string","title":"Url","default":""},"override":{"type":"string","title":"Override","description":"Force a content type","default":""}},"type":"object","title":"DetectRequest"},"DocCreate":{"properties":{"title":{"type":"string","maxLength":200,"minLength":1,"title":"Title"},"doc_type":{"type":"string","pattern":"^(brand_voice|playbook|benchmarks|style_guides|competitor_intel|general)$","title":"Doc Type"},"engine":{"type":"string","pattern":"^(seo|aeo|geo|general)$","title":"Engine","default":"general"},"body":{"type":"string","maxLength":200000,"minLength":1,"title":"Body"},"min_words":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Min Words"}},"type":"object","required":["title","doc_type","body"],"title":"DocCreate"},"DocUpdate":{"properties":{"title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Title"},"doc_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Doc Type"},"engine":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Engine"},"body":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Body"},"min_words":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Min Words"}},"type":"object","title":"DocUpdate"},"DocsScanRequest":{"properties":{"document_id":{"type":"string","maxLength":256,"title":"Document Id","default":""},"revision_id":{"type":"string","maxLength":128,"title":"Revision Id","default":""},"title":{"type":"string","maxLength":512,"title":"Title","default":""},"body_text":{"type":"string","maxLength":200000,"title":"Body Text","default":""},"content_type":{"type":"string","title":"Content Type","default":"blog"},"strictness":{"type":"string","title":"Strictness","default":"balanced"},"return_inline":{"type":"boolean","title":"Return Inline","default":true}},"type":"object","title":"DocsScanRequest","description":"Google Docs add-on sends the doc body + doc id + revision."},"DraftBatchIn":{"properties":{"rules":{"items":{"$ref":"#/components/schemas/DraftRule"},"type":"array","title":"Rules"},"source":{"type":"string","title":"Source","default":"manual"},"auto_activate":{"type":"boolean","title":"Auto Activate","default":false}},"type":"object","required":["rules"],"title":"DraftBatchIn"},"DraftRule":{"properties":{"id":{"type":"string","title":"Id"},"type":{"type":"string","title":"Type"},"severity":{"type":"string","title":"Severity","default":"flag"},"scope":{"items":{},"type":"array","title":"Scope"},"params":{"additionalProperties":true,"type":"object","title":"Params"},"message":{"type":"string","title":"Message","default":""},"fix":{"type":"string","title":"Fix","default":""},"source":{"type":"string","title":"Source","default":""}},"type":"object","required":["id","type"],"title":"DraftRule"},"EngineInfo":{"properties":{"key":{"type":"string","title":"Key"},"label":{"type":"string","title":"Label"},"desc":{"type":"string","title":"Desc"},"checks":{"items":{"type":"string"},"type":"array","title":"Checks"}},"type":"object","required":["key","label","desc","checks"],"title":"EngineInfo"},"ExemplarIn":{"properties":{"urls":{"items":{"type":"string"},"type":"array","maxItems":10,"minItems":1,"title":"Urls"}},"type":"object","required":["urls"],"title":"ExemplarIn"},"FindingIn":{"properties":{"id":{"type":"string","maxLength":80,"title":"Id"},"severity":{"type":"string","maxLength":20,"title":"Severity"},"reasons":{"items":{"type":"string"},"type":"array","maxItems":20,"title":"Reasons"}},"type":"object","required":["id","severity"],"title":"FindingIn"},"ForgotPasswordIn":{"properties":{"email":{"type":"string","format":"email","title":"Email"}},"type":"object","required":["email"],"title":"ForgotPasswordIn"},"FormatInfo":{"properties":{"key":{"type":"string","title":"Key"},"label":{"type":"string","title":"Label"},"hint":{"type":"string","title":"Hint"},"icon":{"type":"string","title":"Icon"}},"type":"object","required":["key","label","hint","icon"],"title":"FormatInfo"},"GovernanceUpdate":{"properties":{"brand_voice":{"anyOf":[{"$ref":"#/components/schemas/BrandVoice"},{"type":"null"}]},"required_sections":{"anyOf":[{"items":{"$ref":"#/components/schemas/RequiredSection"},"type":"array"},{"type":"null"}],"title":"Required Sections"},"rulesets":{"anyOf":[{"items":{"$ref":"#/components/schemas/Ruleset"},"type":"array"},{"type":"null"}],"title":"Rulesets"},"active_ruleset":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Active Ruleset"},"approval_required":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Approval Required"},"approvers":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Approvers"}},"type":"object","title":"GovernanceUpdate"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"HealthResponse":{"properties":{"status":{"type":"string","title":"Status"},"service":{"type":"string","title":"Service"},"version":{"type":"string","title":"Version"},"auth_enabled":{"type":"boolean","title":"Auth Enabled"},"uptime_seconds":{"type":"integer","title":"Uptime Seconds"}},"type":"object","required":["status","service","version","auth_enabled","uptime_seconds"],"title":"HealthResponse"},"IdeaRequest":{"properties":{"category":{"type":"string","title":"Category"},"house_product":{"type":"string","title":"House Product","default":""},"competitors":{"items":{},"type":"array","title":"Competitors"},"count":{"type":"integer","title":"Count","default":8}},"type":"object","required":["category"],"title":"IdeaRequest"},"InviteCreate":{"properties":{"email":{"type":"string","title":"Email"},"role":{"type":"string","title":"Role","default":"member"}},"type":"object","required":["email"],"title":"InviteCreate"},"InviteIn":{"properties":{"email":{"type":"string","title":"Email"},"role":{"type":"string","title":"Role","default":"member"}},"type":"object","required":["email"],"title":"InviteIn"},"KeyCreateIn":{"properties":{"label":{"type":"string","maxLength":120,"minLength":1,"title":"Label","description":"Human-readable name, e.g. 'CI - production'"}},"type":"object","required":["label"],"title":"KeyCreateIn"},"LiftRequest":{"properties":{"target":{"type":"string","maxLength":254,"minLength":3,"title":"Target"},"reason":{"type":"string","maxLength":200,"minLength":3,"title":"Reason"}},"type":"object","required":["target","reason"],"title":"LiftRequest"},"MemberAdd":{"properties":{"email":{"type":"string","title":"Email"},"role":{"type":"string","title":"Role","default":"member"}},"type":"object","required":["email"],"title":"MemberAdd"},"MonitorCreate":{"properties":{"name":{"type":"string","maxLength":200,"minLength":1,"title":"Name"},"geo":{"type":"string","title":"Geo","default":"us"},"own_aliases":{"items":{"type":"string"},"type":"array","minItems":1,"title":"Own Aliases","description":"Brand name + aliases to track"},"competitors":{"items":{"$ref":"#/components/schemas/CompetitorIn"},"type":"array","title":"Competitors"},"own_domain":{"type":"string","title":"Own Domain","description":"Used to flag citations as your own, e.g. dokeo.co","default":""}},"type":"object","required":["name","own_aliases"],"title":"MonitorCreate"},"OrchestrateRequest":{"properties":{"content":{"type":"string","maxLength":16000,"minLength":1,"title":"Content"},"content_type":{"type":"string","title":"Content Type","default":"blog"},"title":{"type":"string","title":"Title","default":""},"max_iterations":{"type":"integer","maximum":3.0,"minimum":1.0,"title":"Max Iterations","default":3},"strictness":{"type":"string","title":"Strictness","default":"balanced"}},"type":"object","required":["content"],"title":"OrchestrateRequest"},"OrderIn":{"properties":{"ids":{"items":{"type":"string"},"type":"array","maxItems":40,"minItems":1,"title":"Ids"}},"type":"object","required":["ids"],"title":"OrderIn"},"PackIn":{"properties":{"pack_id":{"type":"string","title":"Pack Id"}},"type":"object","required":["pack_id"],"title":"PackIn"},"PixelEvent":{"properties":{"k":{"type":"string","title":"K","description":"Write-only pixel token from GET /watch/pixel-token, never a workspace API key"},"p":{"type":"string","maxLength":2000,"title":"P","description":"Page path","default":"/"},"r":{"type":"string","maxLength":500,"title":"R","description":"document.referrer hostname","default":""},"s":{"type":"string","maxLength":200,"title":"S","description":"Client-generated session id","default":""}},"type":"object","required":["k"],"title":"PixelEvent"},"PortalRequest":{"properties":{"customer_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Customer Id"}},"type":"object","title":"PortalRequest"},"PresetIn":{"properties":{"name":{"type":"string","title":"Name"},"ruleset_yaml":{"type":"string","title":"Ruleset Yaml","default":""},"audience":{"type":"string","title":"Audience","default":"marketers"},"house_product":{"type":"string","title":"House Product","default":""},"voice_hints":{"additionalProperties":true,"type":"object","title":"Voice Hints"}},"type":"object","required":["name"],"title":"PresetIn"},"ProfileUpdateIn":{"properties":{"first_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"First Name"},"last_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Last Name"},"job_title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Job Title"},"company":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Company"},"phone":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Phone"}},"type":"object","title":"ProfileUpdateIn"},"PromptCreate":{"properties":{"text":{"type":"string","maxLength":500,"minLength":1,"title":"Text"},"intent":{"type":"string","title":"Intent","default":""}},"type":"object","required":["text"],"title":"PromptCreate"},"ProofEvent":{"properties":{"event":{"type":"string","maxLength":40,"title":"Event"},"elapsed_ms":{"type":"integer","maximum":86400000.0,"minimum":0.0,"title":"Elapsed Ms"}},"type":"object","required":["event","elapsed_ms"],"title":"ProofEvent"},"ProspectAuditIn":{"properties":{"domains":{"items":{"type":"string"},"type":"array","maxItems":500,"minItems":1,"title":"Domains"},"max_posts":{"type":"integer","maximum":100.0,"minimum":1.0,"title":"Max Posts","default":30},"crawl_budget":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Crawl Budget"},"webhook_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Webhook Url"},"src":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Src"}},"type":"object","required":["domains"],"title":"ProspectAuditIn"},"PublicScanIn":{"properties":{"content":{"type":"string","maxLength":100000,"title":"Content","default":""},"url":{"type":"string","maxLength":2000,"title":"Url","default":""},"content_type":{"type":"string","maxLength":40,"title":"Content Type","default":"blog"},"title":{"type":"string","maxLength":200,"title":"Title","default":""},"custom_checks":{"items":{"additionalProperties":true,"type":"object"},"type":"array","maxItems":10,"title":"Custom Checks"}},"type":"object","title":"PublicScanIn"},"PublishRequest":{"properties":{"destination":{"type":"string","pattern":"^(wordpress|google_docs|microsoft|webflow|contentful|sanity)$","title":"Destination"},"credentials":{"additionalProperties":true,"type":"object","title":"Credentials"},"fail_open":{"type":"boolean","title":"Fail Open","default":true}},"type":"object","required":["destination"],"title":"PublishRequest"},"ReadyResponse":{"properties":{"ready":{"type":"boolean","title":"Ready"},"checks":{"additionalProperties":{"type":"string"},"type":"object","title":"Checks"}},"type":"object","required":["ready","checks"],"title":"ReadyResponse"},"ReplayRequest":{"properties":{"content":{"type":"string","maxLength":500000,"minLength":1,"title":"Content","description":"The same text that was scanned"},"decision_hash":{"type":"string","pattern":"^sha256:[0-9a-f]{64}$","title":"Decision Hash","description":"report.evaluation.decision_hash from the earlier scan"}},"type":"object","required":["content","decision_hash"],"title":"ReplayRequest","description":"Re-run an earlier scan of this workspace and compare. The text is sent\nagain because Dokeo does not keep it."},"ReplayResponse":{"properties":{"match":{"type":"boolean","title":"Match","description":"Same inputs and same decision (identical decision hash)"},"decision_match":{"type":"boolean","title":"Decision Match","description":"Same verdict, score and findings, whatever else changed"},"differences":{"items":{"type":"string"},"type":"array","title":"Differences","description":"Inputs that differ from the recorded scan"},"explanation":{"type":"string","title":"Explanation"},"recorded":{"additionalProperties":true,"type":"object","title":"Recorded"},"replayed":{"additionalProperties":true,"type":"object","title":"Replayed"}},"type":"object","required":["match","decision_match","differences","explanation","recorded","replayed"],"title":"ReplayResponse"},"RequestApprovalRequest":{"properties":{"object_id":{"type":"string","title":"Object Id"},"object_version_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Object Version Id"},"stage":{"type":"string","title":"Stage","default":""},"approver_role":{"type":"string","title":"Approver Role","default":""}},"type":"object","required":["object_id"],"title":"RequestApprovalRequest"},"RequiredSection":{"properties":{"label":{"type":"string","title":"Label"},"min_words":{"type":"integer","title":"Min Words","default":30},"must_contain":{"type":"string","title":"Must Contain","default":""}},"type":"object","required":["label"],"title":"RequiredSection"},"ResetPasswordIn":{"properties":{"token":{"type":"string","minLength":20,"title":"Token"},"password":{"type":"string","minLength":8,"title":"Password"}},"type":"object","required":["token","password"],"title":"ResetPasswordIn"},"ResultIn":{"properties":{"run":{"type":"string","enum":["ready","done","error"],"title":"Run"},"verdict":{"type":"string","maxLength":20,"title":"Verdict","default":""},"score":{"anyOf":[{"type":"number","maximum":100.0,"minimum":0.0},{"type":"null"}],"title":"Score"},"error":{"type":"string","maxLength":300,"title":"Error","default":""},"findings":{"items":{"$ref":"#/components/schemas/FindingIn"},"type":"array","maxItems":60,"title":"Findings"},"cells":{"additionalProperties":{"type":"string"},"type":"object","maxProperties":60,"title":"Cells"}},"type":"object","required":["run"],"title":"ResultIn"},"ReviewDecision":{"properties":{"decision":{"type":"string","title":"Decision"},"note":{"type":"string","title":"Note","default":""},"decided_by":{"type":"string","title":"Decided By","default":""}},"type":"object","required":["decision"],"title":"ReviewDecision"},"ReviewSubmit":{"properties":{"title":{"type":"string","title":"Title"},"url":{"type":"string","title":"Url","default":""},"verdict":{"type":"string","title":"Verdict"},"scores":{"additionalProperties":true,"type":"object","title":"Scores"},"author_email":{"type":"string","title":"Author Email","default":""}},"type":"object","required":["title","verdict"],"title":"ReviewSubmit"},"RoleIn":{"properties":{"role":{"type":"string","title":"Role"}},"type":"object","required":["role"],"title":"RoleIn"},"RowIn":{"properties":{"label":{"type":"string","maxLength":200,"minLength":1,"title":"Label"},"kind":{"type":"string","enum":["url","content"],"title":"Kind"},"url":{"type":"string","maxLength":2000,"title":"Url","default":""},"title":{"type":"string","maxLength":300,"title":"Title","default":""},"content":{"type":"string","maxLength":200000,"title":"Content","default":""},"values":{"additionalProperties":{"type":"string"},"type":"object","maxProperties":40,"title":"Values"}},"type":"object","required":["label","kind"],"title":"RowIn"},"RowsIn":{"properties":{"rows":{"items":{"$ref":"#/components/schemas/RowIn"},"type":"array","maxItems":2000,"minItems":1,"title":"Rows"}},"type":"object","required":["rows"],"title":"RowsIn"},"Ruleset":{"properties":{"name":{"type":"string","title":"Name"},"description":{"type":"string","title":"Description","default":""},"rules":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Rules"}},"type":"object","required":["name"],"title":"Ruleset"},"RulesetIn":{"properties":{"ruleset_yaml":{"type":"string","maxLength":200000,"minLength":1,"title":"Ruleset Yaml"},"activate":{"type":"boolean","title":"Activate","default":true}},"type":"object","required":["ruleset_yaml"],"title":"RulesetIn"},"RunTestRequest":{"properties":{"object_id":{"type":"string","title":"Object Id"},"object_version_id":{"type":"string","title":"Object Version Id"},"test_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Test Id"},"source":{"type":"string","pattern":"^(interactive|automated)$","title":"Source","default":"interactive"}},"type":"object","required":["object_id","object_version_id"],"title":"RunTestRequest"},"SSOConfigUpdate":{"properties":{"provider":{"type":"string","title":"Provider","default":"saml"},"idp_entity_id":{"type":"string","title":"Idp Entity Id","default":""},"idp_sso_url":{"type":"string","title":"Idp Sso Url","default":""},"idp_certificate":{"type":"string","title":"Idp Certificate","default":""},"oidc_issuer":{"type":"string","title":"Oidc Issuer","default":""},"oidc_client_id":{"type":"string","title":"Oidc Client Id","default":""},"email_domain":{"type":"string","title":"Email Domain","default":""},"auto_provision":{"type":"boolean","title":"Auto Provision","default":true},"enabled":{"type":"boolean","title":"Enabled","default":false}},"type":"object","title":"SSOConfigUpdate"},"SSOInitiateRequest":{"properties":{"tenant":{"type":"string","title":"Tenant"},"redirect_to":{"type":"string","title":"Redirect To","default":""}},"type":"object","required":["tenant"],"title":"SSOInitiateRequest"},"ScanBlogRequest":{"properties":{"url":{"type":"string","pattern":"^https?://","title":"Url"},"limit":{"type":"integer","maximum":50.0,"minimum":1.0,"title":"Limit","default":5},"content_type":{"type":"string","title":"Content Type","default":"blog"},"urls":{"anyOf":[{"items":{"type":"string"},"type":"array","maxItems":50},{"type":"null"}],"title":"Urls","description":"Explicit URL list - when provided, scans these directly instead of discovering from url"}},"type":"object","required":["url"],"title":"ScanBlogRequest"},"ScanRequest":{"properties":{"content":{"type":"string","maxLength":500000,"minLength":1,"title":"Content","description":"The content body to evaluate"},"content_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Content Type","description":"One of the 17 registered types; omit to auto-detect"},"title":{"anyOf":[{"type":"string","maxLength":200},{"type":"null"}],"title":"Title"},"slug":{"anyOf":[{"type":"string","maxLength":200},{"type":"null"}],"title":"Slug"},"primary_keyword":{"type":"string","title":"Primary Keyword","default":""},"cluster_id":{"type":"string","title":"Cluster Id","default":""},"strictness":{"type":"string","pattern":"^(strict|balanced|permissive)$","title":"Strictness","default":"balanced"},"submit_for_review":{"type":"boolean","title":"Submit For Review","description":"Register this scan in the review queue for human approval before publish","default":false},"source":{"type":"string","pattern":"^(interactive|automated)$","title":"Source","description":"Credit bucket: interactive (UI/one-off) or automated (CI/MCP)","default":"interactive"}},"type":"object","required":["content"],"title":"ScanRequest"},"ScanResponse":{"properties":{"slug":{"type":"string","title":"Slug"},"verdict":{"type":"string","title":"Verdict"},"content_type":{"type":"string","title":"Content Type"},"detected_content_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Detected Content Type"},"detection_confidence":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Detection Confidence"},"word_count":{"type":"integer","title":"Word Count"},"report":{"additionalProperties":true,"type":"object","title":"Report"},"meta":{"additionalProperties":true,"type":"object","title":"Meta"}},"type":"object","required":["slug","verdict","content_type","word_count","report","meta"],"title":"ScanResponse","description":"Wraps the full report from report_generator, plus request metadata.\n\nThe `report` field is intentionally an untyped dict so Phase 0 ships\nwithout rewriting the (large) report_generator output. Phase 1 of the\nNext.js migration will tighten this with explicit Pydantic models."},"ScanUrlRequest":{"properties":{"url":{"type":"string","pattern":"^https?://","title":"Url"},"content_type":{"type":"string","title":"Content Type","default":"blog"}},"type":"object","required":["url"],"title":"ScanUrlRequest"},"ScheduleCreate":{"properties":{"url":{"type":"string","title":"Url"},"cadence":{"type":"string","title":"Cadence","default":"weekly"},"score_threshold":{"type":"integer","maximum":100.0,"minimum":0.0,"title":"Score Threshold","default":70},"alert_channels":{"items":{},"type":"array","title":"Alert Channels"},"title":{"type":"string","title":"Title","default":""},"content_type":{"type":"string","title":"Content Type","default":"blog"}},"type":"object","required":["url"],"title":"ScheduleCreate"},"ScheduleUpdate":{"properties":{"cadence":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Cadence"},"score_threshold":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Score Threshold"},"alert_channels":{"anyOf":[{"items":{},"type":"array"},{"type":"null"}],"title":"Alert Channels"},"enabled":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Enabled"},"title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Title"}},"type":"object","title":"ScheduleUpdate"},"SearchQuery":{"properties":{"query":{"type":"string","maxLength":500,"minLength":1,"title":"Query"},"node_types":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Node Types"},"limit":{"type":"integer","maximum":100.0,"minimum":1.0,"title":"Limit","default":30}},"type":"object","required":["query"],"title":"SearchQuery"},"SignInIn":{"properties":{"email":{"type":"string","format":"email","title":"Email"},"password":{"type":"string","title":"Password"}},"type":"object","required":["email","password"],"title":"SignInIn"},"SignUpIn":{"properties":{"email":{"type":"string","format":"email","title":"Email"},"password":{"type":"string","minLength":8,"title":"Password"},"phone":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Phone"},"accepted_terms":{"type":"boolean","title":"Accepted Terms","default":false},"accepted_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Accepted At"}},"type":"object","required":["email","password"],"title":"SignUpIn"},"SiteAuditRequest":{"properties":{"domain":{"type":"string","pattern":"^https?://","title":"Domain","description":"Domain or blog URL to audit"},"max_pages":{"type":"integer","maximum":100.0,"minimum":1.0,"title":"Max Pages","default":25},"content_type":{"type":"string","title":"Content Type","default":"blog"}},"type":"object","required":["domain"],"title":"SiteAuditRequest"},"SourceOptions":{"properties":{"collection_id":{"type":"string","maxLength":120,"title":"Collection Id","default":""},"space_id":{"type":"string","maxLength":120,"title":"Space Id","default":""},"environment":{"type":"string","maxLength":120,"title":"Environment","default":"master"},"project_id":{"type":"string","maxLength":80,"pattern":"^[a-z0-9-]*$","title":"Project Id","default":""},"dataset":{"type":"string","maxLength":80,"pattern":"^[a-zA-Z0-9_-]+$","title":"Dataset","default":"production"},"content_type":{"type":"string","maxLength":80,"pattern":"^[a-zA-Z][a-zA-Z0-9_]*$","title":"Content Type","default":"post"},"title_field":{"type":"string","maxLength":80,"pattern":"^[a-zA-Z][a-zA-Z0-9_-]*$","title":"Title Field","default":"title"},"body_field":{"type":"string","maxLength":80,"pattern":"^[a-zA-Z][a-zA-Z0-9_-]*$","title":"Body Field","default":"body"},"locale":{"type":"string","maxLength":40,"title":"Locale","default":"en-US"}},"type":"object","title":"SourceOptions"},"StyleGuideIn":{"properties":{"text":{"type":"string","maxLength":200000,"title":"Text","default":""},"url":{"type":"string","maxLength":2000,"title":"Url","default":""}},"type":"object","title":"StyleGuideIn"},"SubmitFixRequest":{"properties":{"issue_id":{"type":"string","title":"Issue Id"},"fix_type":{"type":"string","title":"Fix Type","default":""},"diff_summary":{"type":"string","title":"Diff Summary","default":""},"object_version_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Object Version Id"}},"type":"object","required":["issue_id"],"title":"SubmitFixRequest"},"SuppressionRequest":{"properties":{"target":{"type":"string","maxLength":254,"minLength":3,"title":"Target","description":"An address, or @domain.com for a whole domain"},"reason":{"type":"string","maxLength":200,"title":"Reason","default":""},"source_text":{"type":"string","maxLength":2000,"title":"Source Text","description":"What they wrote, kept as evidence. Never summarised.","default":""}},"type":"object","required":["target"],"title":"SuppressionRequest"},"TableIn":{"properties":{"name":{"type":"string","maxLength":200,"title":"Name","default":"Untitled table"},"content_type":{"type":"string","maxLength":40,"title":"Content Type","default":"blog"},"strictness":{"type":"string","enum":["strict","balanced","permissive"],"title":"Strictness","default":"balanced"}},"type":"object","title":"TableIn"},"TablePatch":{"properties":{"name":{"anyOf":[{"type":"string","maxLength":200},{"type":"null"}],"title":"Name"},"content_type":{"anyOf":[{"type":"string","maxLength":40},{"type":"null"}],"title":"Content Type"},"strictness":{"anyOf":[{"type":"string","enum":["strict","balanced","permissive"]},{"type":"null"}],"title":"Strictness"}},"type":"object","title":"TablePatch"},"TextDocUpload":{"properties":{"filename":{"type":"string","maxLength":500,"minLength":1,"title":"Filename"},"content":{"type":"string","maxLength":500000,"minLength":1,"title":"Content"},"title":{"type":"string","title":"Title","default":""},"description":{"type":"string","title":"Description","default":""},"category":{"type":"string","title":"Category","default":""},"tags":{"items":{"type":"string"},"type":"array","title":"Tags","default":[]}},"type":"object","required":["filename","content"],"title":"TextDocUpload"},"TierChangeRequest":{"properties":{"tenant":{"type":"string","title":"Tenant"},"tier":{"type":"string","title":"Tier"}},"type":"object","required":["tenant","tier"],"title":"TierChangeRequest"},"TierInfo":{"properties":{"tenant":{"type":"string","title":"Tenant"},"tier":{"type":"string","title":"Tier"},"tier_label":{"type":"string","title":"Tier Label"},"has_subscription":{"type":"boolean","title":"Has Subscription","default":false},"price_monthly_usd":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Price Monthly Usd"},"price_annual_usd":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Price Annual Usd"},"credits_monthly":{"type":"integer","title":"Credits Monthly"},"credits_balance":{"type":"integer","title":"Credits Balance"},"credits_used_this_period":{"type":"integer","title":"Credits Used This Period"},"carry_forward_cap":{"type":"integer","title":"Carry Forward Cap"},"users":{"type":"integer","title":"Users"},"rate_limit_per_min":{"type":"integer","title":"Rate Limit Per Min"},"features":{"additionalProperties":true,"type":"object","title":"Features"},"refills_at":{"type":"string","title":"Refills At"},"interactive_credits_monthly":{"type":"integer","title":"Interactive Credits Monthly","default":0},"automated_credits_monthly":{"type":"integer","title":"Automated Credits Monthly","default":0},"interactive_used_this_period":{"type":"integer","title":"Interactive Used This Period","default":0},"automated_used_this_period":{"type":"integer","title":"Automated Used This Period","default":0},"ai_rewrites_monthly":{"type":"integer","title":"Ai Rewrites Monthly","default":0},"rewrites_used_this_period":{"type":"integer","title":"Rewrites Used This Period","default":0},"grandfathered_until":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Grandfathered Until"},"is_grandfathered":{"type":"boolean","title":"Is Grandfathered","default":false},"deprecated_tier":{"type":"boolean","title":"Deprecated Tier","default":false},"active_features":{"additionalProperties":true,"type":"object","title":"Active Features"}},"type":"object","required":["tenant","tier","tier_label","price_monthly_usd","credits_monthly","credits_balance","credits_used_this_period","carry_forward_cap","users","rate_limit_per_min","features","refills_at"],"title":"TierInfo"},"TimingRules":{"properties":{"recipient_timezone":{"type":"string","maxLength":64,"title":"Recipient Timezone","description":"IANA name, e.g. Europe/Amsterdam","default":"UTC"},"quiet_start_hour":{"type":"integer","maximum":23.0,"minimum":0.0,"title":"Quiet Start Hour","default":20},"quiet_end_hour":{"type":"integer","maximum":23.0,"minimum":0.0,"title":"Quiet End Hour","default":7},"min_gap_hours":{"type":"number","maximum":1440.0,"minimum":0.0,"title":"Min Gap Hours","default":24}},"type":"object","title":"TimingRules"},"TokenIn":{"properties":{"token":{"type":"string","title":"Token"}},"type":"object","required":["token"],"title":"TokenIn"},"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"},"ValueIn":{"properties":{"value":{"type":"string","maxLength":10000,"title":"Value","default":""}},"type":"object","title":"ValueIn"},"VerifyEmailIn":{"properties":{"token":{"type":"string","minLength":10,"title":"Token"}},"type":"object","required":["token"],"title":"VerifyEmailIn"},"VerifyPaymentRequest":{"properties":{"razorpay_order_id":{"type":"string","minLength":1,"title":"Razorpay Order Id"},"razorpay_payment_id":{"type":"string","minLength":1,"title":"Razorpay Payment Id"},"razorpay_signature":{"type":"string","minLength":1,"title":"Razorpay Signature"}},"type":"object","required":["razorpay_order_id","razorpay_payment_id","razorpay_signature"],"title":"VerifyPaymentRequest"},"VerifyPaymentResponse":{"properties":{"ok":{"type":"boolean","title":"Ok"},"tier":{"type":"string","title":"Tier","default":""},"tenant":{"type":"string","title":"Tenant"},"kind":{"type":"string","title":"Kind","default":"subscription"},"credits_added":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Credits Added"},"pack_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Pack Id"}},"type":"object","required":["ok","tenant"],"title":"VerifyPaymentResponse"},"ViewIn":{"properties":{"name":{"type":"string","maxLength":200,"title":"Name"},"config":{"additionalProperties":true,"type":"object","title":"Config"}},"type":"object","required":["name"],"title":"ViewIn"},"ViewPatch":{"properties":{"name":{"anyOf":[{"type":"string","maxLength":200},{"type":"null"}],"title":"Name"},"config":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Config"}},"type":"object","title":"ViewPatch"},"WebhookIngestRequest":{"properties":{"payload":{"additionalProperties":true,"type":"object","title":"Payload","description":"The object's fields to evaluate against its Policy"},"title":{"type":"string","maxLength":200,"title":"Title","default":""},"external_ref":{"type":"string","maxLength":200,"title":"External Ref","default":""},"workspace_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Workspace Id"}},"type":"object","required":["payload"],"title":"WebhookIngestRequest","description":"Generic inbound connector: any tool (n8n, Zapier, Make, Clay, ...) POSTs\na record after a workflow run and gets a real PASS/FLAG/FAIL back. Used for\ndomains with no single dominant vendor API (gtm.*, revops.*), and works for\nany object type with no adapter."},"WordPressScanRequest":{"properties":{"post_id":{"type":"integer","title":"Post Id","default":0},"post_title":{"type":"string","title":"Post Title","default":""},"post_content":{"type":"string","maxLength":500000,"title":"Post Content","default":""},"post_type":{"type":"string","title":"Post Type","default":"post"},"block_publish_on_fail":{"type":"boolean","title":"Block Publish On Fail","default":false},"return_inline":{"type":"boolean","title":"Return Inline","default":false}},"type":"object","title":"WordPressScanRequest","description":"WordPress plugin sends the post content + post id."},"_RegAddIn":{"properties":{"url":{"type":"string","title":"Url"}},"type":"object","required":["url"],"title":"_RegAddIn"},"api__routes__campaign__ImportIn":{"properties":{"csv":{"type":"string","maxLength":1000000,"minLength":1,"title":"Csv","description":"A CSV or a plain list, one address or @domain per line. An optional header row can name the columns: email (or address, target, domain), reason, text."},"reason":{"type":"string","maxLength":200,"title":"Reason","description":"Used for rows that have no reason of their own","default":""}},"type":"object","required":["csv"],"title":"ImportIn"},"api__routes__composio__ConnectIn":{"properties":{"toolkit":{"type":"string","maxLength":64,"minLength":1,"title":"Toolkit"},"return_to":{"type":"string","maxLength":200,"title":"Return To","default":"/account/integrations"}},"type":"object","required":["toolkit"],"title":"ConnectIn"},"api__routes__composio__RunIn":{"properties":{"recipe":{"type":"string","maxLength":64,"minLength":1,"title":"Recipe"},"inputs":{"additionalProperties":true,"type":"object","title":"Inputs"},"connection_id":{"type":"string","maxLength":64,"title":"Connection Id","default":""}},"type":"object","required":["recipe"],"title":"RunIn"},"api__routes__grid__RunIn":{"properties":{"rows":{"anyOf":[{"items":{"type":"string"},"type":"array","maxItems":2000},{"type":"null"}],"title":"Rows"},"columns":{"anyOf":[{"items":{"type":"string"},"type":"array","maxItems":40},{"type":"null"}],"title":"Columns"},"mode":{"type":"string","enum":["missing","all"],"title":"Mode","default":"missing"},"credit_cap":{"anyOf":[{"type":"integer","maximum":100000.0,"minimum":0.0},{"type":"null"}],"title":"Credit Cap"}},"type":"object","title":"RunIn"},"api__routes__integrations__ConnectIn":{"properties":{"provider":{"type":"string","title":"Provider"},"url":{"type":"string","minLength":1,"title":"Url"},"events":{"items":{"type":"string"},"type":"array","title":"Events"},"label":{"type":"string","title":"Label","default":""},"extras":{"additionalProperties":true,"type":"object","title":"Extras"}},"type":"object","required":["provider","url"],"title":"ConnectIn"},"api__routes__oauth__ImportIn":{"properties":{"file_id":{"type":"string","title":"File Id"}},"type":"object","required":["file_id"],"title":"ImportIn"}},"securitySchemes":{"HTTPBearer":{"type":"http","scheme":"bearer"}}}}