Skip to content

Source OpenAPI: https://api.visyble.ai/openapi.json

  • Total operations discovered: 273
MethodPathSummaryOperationIdParamsBodyResponsesFrontend Usage
GET/api/actionsList Actionslist_actions_api_actions_get5No200, 422frontend/src/hooks/useApi.ts
POST/api/actionsCreate Actioncreate_action_api_actions_post3Yes200, 422frontend/src/pages/Actions.tsx
POST/api/actions/generateGenerate Actionsgenerate_actions_api_actions_generate_post3No200, 422Not discovered
GET/api/actions/timelineGet Timelineget_timeline_api_actions_timeline_get3No200, 422Not discovered
DELETE/api/actions/{action_id}Delete Actiondelete_action_api_actions__action_id__delete4No200, 422frontend/src/pages/Actions.tsx
PUT/api/actions/{action_id}Update Actionupdate_action_api_actions__action_id__put4Yes200, 422Not discovered
POST/api/actions/{action_id}/completeComplete Actioncomplete_action_api_actions__action_id__complete_post4Yes200, 422Not discovered
POST/api/actions/{action_id}/planAdd To Planadd_to_plan_api_actions__action_id__plan_post4Yes200, 422Not discovered
POST/api/actions/{action_id}/postponePostpone Actionpostpone_action_api_actions__action_id__postpone_post4Yes200, 422Not discovered
POST/api/actions/{action_id}/startStart Actionstart_action_api_actions__action_id__start_post4No200, 422Not discovered
POST/api/actions/{action_id}/verifyVerify Actionverify_action_api_actions__action_id__verify_post4Yes200, 422Not discovered
GET/api/active-sessionsGet active scraping sessionsget_active_sessions_api_active_sessions_get0No200Not discovered
POST/api/admin/assign-brands-to-orgAssign brands to an organization by clerk org IDadmin_assign_brands_to_org_api_admin_assign_brands_to_org_post3Yes200, 422Not discovered
POST/api/admin/assign-templates-to-orgAssign templates to an organization by clerk org IDadmin_assign_templates_to_org_api_admin_assign_templates_to_org_post3Yes200, 422Not discovered
GET/api/admin/docsAdmin Dashboard Documentationget_admin_documentation_api_admin_docs_get0No200Not discovered
POST/api/admin/importBulk import scraped resultsadmin_bulk_import_api_admin_import_post0Yes200, 422Not discovered
GET/api/agent-analytics/botsList Bot Visitslist_bot_visits_api_agent_analytics_bots_get9No200, 422frontend/src/pages/AgentAnalytics.tsx
POST/api/agent-analytics/cloudflare/enrollEnroll Cloudflare Workerenroll_cloudflare_worker_api_agent_analytics_cloudflare_enroll_post3Yes200, 422frontend/src/pages/AgentAnalytics.tsx
POST/api/agent-analytics/cloudflare/logsIngest Cloudflare Worker Logsingest_cloudflare_worker_logs_api_agent_analytics_cloudflare_logs_post1Yes200, 422Not discovered
POST/api/agent-analytics/cloudflare/network/configureConfigure Cloudflare Networkconfigure_cloudflare_network_api_agent_analytics_cloudflare_network_configure_post3Yes200, 422Not discovered
POST/api/agent-analytics/cloudflare/network/profile/selectSelect Cloudflare Network Profileselect_cloudflare_network_profile_api_agent_analytics_cloudflare_network_profile_select_post3Yes200, 422Not discovered
GET/api/agent-analytics/cloudflare/network/profilesCloudflare Network Profilescloudflare_network_profiles_api_agent_analytics_cloudflare_network_profiles_get3No200, 422Not discovered
GET/api/agent-analytics/cloudflare/network/statusCloudflare Network Statuscloudflare_network_status_api_agent_analytics_cloudflare_network_status_get3No200, 422frontend/src/pages/AgentAnalytics.tsx
GET/api/agent-analytics/cloudflare/statusCloudflare Worker Statuscloudflare_worker_status_api_agent_analytics_cloudflare_status_get3No200, 422frontend/src/pages/AgentAnalytics.tsx
GET/api/agent-analytics/heatmapHeatmap Reportheatmap_report_api_agent_analytics_heatmap_get4No200, 422frontend/src/hooks/useApi.ts
POST/api/agent-analytics/ingestIngest Logsingest_logs_api_agent_analytics_ingest_post3Yes200, 422Not discovered
GET/api/agent-analytics/overviewOverviewoverview_api_agent_analytics_overview_get3No200, 422Not discovered
GET/api/agent-analytics/pagesPages Reportpages_report_api_agent_analytics_pages_get5No200, 422frontend/src/hooks/useApi.ts
GET/api/agent-analytics/pages/detailPages Detail Reportpages_detail_report_api_agent_analytics_pages_detail_get7No200, 422frontend/src/hooks/useApi.ts
GET/api/agent-analytics/pages/indexPages Index Reportpages_index_report_api_agent_analytics_pages_index_get6No200, 422frontend/src/hooks/useApi.ts
GET/api/agent-analytics/referralsList Referral Visitslist_referral_visits_api_agent_analytics_referrals_get8No200, 422frontend/src/pages/AgentAnalytics.tsx
GET/api/agent-analytics/reports/botsReport Bots Dailyreport_bots_daily_api_agent_analytics_reports_bots_get3No200, 422Not discovered
GET/api/agent-analytics/reports/referralsReport Referrals Dailyreport_referrals_daily_api_agent_analytics_reports_referrals_get3No200, 422Not discovered
GET/api/agent-analytics/xyops/statusXyops Statusxyops_status_api_agent_analytics_xyops_status_get3No200, 422frontend/src/pages/CostManagement.tsx
GET/api/agents/providers/statusGet Agent Provider Statusget_agent_provider_status_api_agents_providers_status_get3No200, 422Not discovered
GET/api/agents/runsList Agent Runslist_agent_runs_api_agents_runs_get5No200, 422frontend/src/hooks/useApi.ts
POST/api/agents/runsCreate Agent Runcreate_agent_run_api_agents_runs_post3Yes201, 422frontend/src/pages/Agents.tsx
GET/api/agents/runs/{run_id}Get Agent Runget_agent_run_api_agents_runs__run_id__get4No200, 422Not discovered
GET/api/agents/templatesList Agent Templateslist_agent_templates_api_agents_templates_get3No200, 422Not discovered
GET/api/analytics/citations/categoriesCitation Categoriescitation_categories_api_analytics_citations_categories_get3No200, 422Not discovered
GET/api/analytics/citations/graphCitation Graphcitation_graph_api_analytics_citations_graph_get4No200, 422frontend/src/components/insights/CitationsTab.tsx
GET/api/analytics/citations/watched-pagesList Watched Pageslist_watched_pages_api_analytics_citations_watched_pages_get3No200, 422Not discovered
POST/api/analytics/citations/watched-pagesAdd Watched Pageadd_watched_page_api_analytics_citations_watched_pages_post3Yes201, 422Not discovered
DELETE/api/analytics/citations/watched-pages/{page_id}Remove Watched Pageremove_watched_page_api_analytics_citations_watched_pages__page_id__delete4No200, 422Not discovered
GET/api/analytics/extraction-quality/latestExtraction Quality Latestextraction_quality_latest_api_analytics_extraction_quality_latest_get4No200, 422frontend/src/pages/CostManagement.tsx
GET/api/analytics/network/distributionNetwork Distributionnetwork_distribution_api_analytics_network_distribution_get5No200, 422frontend/src/hooks/useApi.ts, frontend/src/pages/CostManagement.tsx
GET/api/analytics/network/latencyNetwork Latencynetwork_latency_api_analytics_network_latency_get4No200, 422frontend/src/hooks/useApi.ts
GET/api/analytics/platformsPlatform Breakdownplatform_breakdown_api_analytics_platforms_get5No200, 422frontend/src/components/insights/PlatformsTab.tsx, frontend/src/components/insights/VisibilityTab.tsx
GET/api/analytics/platforms/analysisPlatform Analysisplatform_analysis_api_analytics_platforms_analysis_get6No200, 422frontend/src/hooks/useApi.ts
GET/api/analytics/query-fanoutsQuery Fanoutsquery_fanouts_api_analytics_query_fanouts_get3No200, 422Not discovered
GET/api/analytics/query-fanouts/analyzeQuery Fanout Analyzequery_fanout_analyze_api_analytics_query_fanouts_analyze_get4No200, 422frontend/src/hooks/useApi.ts
GET/api/analytics/regionsRegion Breakdownregion_breakdown_api_analytics_regions_get5No200, 422Not discovered
GET/api/analytics/scrape-quality/latestLatest Scrape Qualitylatest_scrape_quality_api_analytics_scrape_quality_latest_get6No200, 422Not discovered
GET/api/analytics/sentimentSentiment Analysissentiment_analysis_api_analytics_sentiment_get5No200, 422Not discovered
POST/api/analytics/sentiment/generateGenerate Sentimentgenerate_sentiment_api_analytics_sentiment_generate_post4No200, 422Not discovered
GET/api/analytics/sentiment/statusSentiment Statussentiment_status_api_analytics_sentiment_status_get3No200, 422Not discovered
GET/api/analytics/share-of-voiceShare Of Voiceshare_of_voice_api_analytics_share_of_voice_get7No200, 422Not discovered
GET/api/analytics/topic-performanceTopic Performancetopic_performance_api_analytics_topic_performance_get11No200, 422frontend/src/hooks/useApi.ts
GET/api/analytics/visibility-settingsGet Visibility Settingsget_visibility_settings_api_analytics_visibility_settings_get3No200, 422Not discovered
PUT/api/analytics/visibility-settingsUpdate Visibility Settingsupdate_visibility_settings_api_analytics_visibility_settings_put3Yes200, 422Not discovered
GET/api/analytics/visibility/drilldownVisibility Drilldownvisibility_drilldown_api_analytics_visibility_drilldown_get11No200, 422frontend/src/components/insights/VisibilityTab.tsx
GET/api/annotationsList Annotationslist_annotations_api_annotations_get5No200, 422Not discovered
POST/api/annotationsCreate Annotationcreate_annotation_api_annotations_post3Yes200, 422Not discovered
DELETE/api/annotations/{annotation_id}Delete Annotationdelete_annotation_api_annotations__annotation_id__delete4No200, 422Not discovered
GET/api/annotations/{annotation_id}Get Annotationget_annotation_api_annotations__annotation_id__get4No200, 422Not discovered
PUT/api/annotations/{annotation_id}Update Annotationupdate_annotation_api_annotations__annotation_id__put4Yes200, 422Not discovered
GET/api/api-keysList API keyslist_api_keys_api_api_keys_get3No200, 422frontend/src/pages/CostManagement.tsx
POST/api/api-keysCreate API keycreate_api_key_api_api_keys_post3Yes201, 422frontend/src/pages/Settings.tsx
DELETE/api/api-keys/{key_id}Revoke API keyrevoke_api_key_api_api_keys__key_id__delete4No200, 422Not discovered
GET/api/audit-logsList audit logslist_audit_logs_api_audit_logs_get6No200, 422frontend/src/hooks/useApi.ts
GET/api/auth/meGet current user infoget_me_api_auth_me_get3No200, 422Not discovered
GET/api/auth/provider/statusGet auth provider readinessget_auth_provider_status_api_auth_provider_status_get3No200, 422Not discovered
POST/api/auth/provider/switchSwitch active auth provider at runtimeswitch_auth_provider_api_auth_provider_switch_post3Yes200, 422Not discovered
GET/api/benchmark/leaderboardProvider leaderboardget_leaderboard_api_benchmark_leaderboard_get4No200, 422Not discovered
POST/api/benchmark/runStart a benchmark runstart_benchmark_api_benchmark_run_post3Yes201, 422Not discovered
GET/api/benchmark/runsList benchmark runslist_benchmark_runs_api_benchmark_runs_get5No200, 422Not discovered
GET/api/benchmark/runs/{run_id}Get benchmark run detailsget_benchmark_run_api_benchmark_runs__run_id__get4No200, 422Not discovered
POST/api/billing/admin/account-statusAdmin Billing Account Statusadmin_billing_account_status_api_billing_admin_account_status_post3Yes200, 422Not discovered
POST/api/billing/admin/unlock-accountAdmin Unlock Account Billingadmin_unlock_account_billing_api_billing_admin_unlock_account_post3Yes200, 422Not discovered
POST/api/billing/change-planChange Planchange_plan_api_billing_change_plan_post3Yes200, 422frontend/src/pages/CostManagement.tsx
POST/api/billing/create-checkout-sessionCreate Checkout Sessioncreate_checkout_session_api_billing_create_checkout_session_post3Yes200, 422frontend/src/pages/CostManagement.tsx, frontend/src/pages/onboarding/TrialPricingStep.tsx
POST/api/billing/create-portal-sessionCreate Portal Sessioncreate_portal_session_api_billing_create_portal_session_post3No200, 422Not discovered
GET/api/billing/plansList Planslist_plans_api_billing_plans_get0No200Not discovered
GET/api/billing/statusGet Billing Statusget_billing_status_api_billing_status_get3No200, 422frontend/src/pages/CostManagement.tsx, frontend/src/pages/Settings.tsx
GET/api/brandsList all brandsget_brands_api_brands_get9No200, 422frontend/src/pages/Suggestions.tsx
POST/api/brandsCreate a new brandcreate_brand_api_brands_post3Yes201, 400, 422frontend/src/pages/Brands.tsx
GET/api/brands/detailsGet detailed brand analyticsget_brands_details_api_brands_details_get3No200, 422Not discovered
GET/api/brands/suggestedGet suggested brands from recent chatsget_suggested_brands_api_brands_suggested_get3No200, 422Not discovered
DELETE/api/brands/{brand_id}Delete a branddelete_brand_api_brands__brand_id__delete4No200, 400, 404, 422Not discovered
PATCH/api/brands/{brand_id}Update brand advanced settingsupdate_brand_advanced_api_brands__brand_id__patch4Yes200, 422frontend/src/pages/Brands.tsx
GET/api/brands/{brand_id}/domainsGet domains for a brandget_brand_domains_api_brands__brand_id__domains_get4No200, 422Not discovered
POST/api/brands/{brand_id}/domainsAdd domain to a brandadd_brand_domain_api_brands__brand_id__domains_post4Yes200, 422Not discovered
DELETE/api/brands/{brand_id}/domains/{domain_id}Remove domain from a branddelete_brand_domain_api_brands__brand_id__domains__domain_id__delete5No200, 422Not discovered
GET/api/brands/{brand_id}/link-destinationsGet link destinations for a brandget_link_destinations_api_brands__brand_id__link_destinations_get6No200, 422frontend/src/hooks/useApi.ts
PUT/api/brands/{brand_id}/set-primarySet a brand as primaryset_brand_primary_api_brands__brand_id__set_primary_put4No200, 422Not discovered
GET/api/chatsList Chatslist_chats_api_chats_get7No200, 422frontend/src/hooks/useApi.ts
GET/api/chats/{chat_id}Get Chat Detailget_chat_detail_api_chats__chat_id__get4No200, 422frontend/src/hooks/useApi.ts
GET/api/citationsGet citation statisticsget_citation_stats_api_citations_get6No200, 422Not discovered
GET/api/citations/mismatchesGet mismatch alertsget_mismatch_alerts_api_citations_mismatches_get7No200, 422frontend/src/hooks/useApi.ts
GET/api/compareCompare two periodscompare_periods_api_compare_get9No200, 400, 422frontend/src/hooks/useApi.ts
GET/api/configGet system configurationget_system_config_api_config_get0No200Not discovered
GET/api/content-cms/articlesList Articleslist_articles_api_content_cms_articles_get3No200, 422Not discovered
POST/api/content-cms/articlesCreate Articlecreate_article_api_content_cms_articles_post3Yes200, 422Not discovered
DELETE/api/content-cms/articles/{article_id}Delete Articledelete_article_api_content_cms_articles__article_id__delete4No200, 422Not discovered
GET/api/content-cms/articles/{article_id}Get Articleget_article_api_content_cms_articles__article_id__get4No200, 422Not discovered
PUT/api/content-cms/articles/{article_id}Update Articleupdate_article_api_content_cms_articles__article_id__put4Yes200, 422Not discovered
POST/api/content-cms/articles/{article_id}/generate-draftGenerate Draftgenerate_draft_api_content_cms_articles__article_id__generate_draft_post4No200, 422Not discovered
GET/api/content-cms/articles/{article_id}/workflow-statusGet Workflow Statusget_workflow_status_api_content_cms_articles__article_id__workflow_status_get4No200, 422Not discovered
GET/api/content-cms/connectors/statusConnectors Statusconnectors_status_api_content_cms_connectors_status_get0No200Not discovered
POST/api/content-cms/generate-briefGenerate Briefgenerate_brief_api_content_cms_generate_brief_post3Yes200, 422Not discovered
POST/api/content-cms/publishPublish Articlepublish_article_api_content_cms_publish_post3Yes200, 422Not discovered
GET/api/content-cms/publish/targetsList Publish Targetslist_publish_targets_api_content_cms_publish_targets_get3No200, 422Not discovered
GET/api/content-cms/templatesList Templateslist_templates_api_content_cms_templates_get0No200Not discovered
POST/api/content/analyzeAnalyze Contentanalyze_content_api_content_analyze_post3Yes200, 422frontend/src/pages/ContentOptimization.tsx
GET/api/content/optimizationsList Optimizationslist_optimizations_api_content_optimizations_get5No200, 422frontend/src/hooks/useApi.ts
DELETE/api/content/optimizations/{optimization_id}Delete Optimizationdelete_optimization_api_content_optimizations__optimization_id__delete4No200, 422frontend/src/pages/ContentOptimization.tsx
GET/api/content/optimizations/{optimization_id}Get Optimization Detailget_optimization_detail_api_content_optimizations__optimization_id__get4No200, 422frontend/src/hooks/useApi.ts
GET/api/cost-estimateEstimate daily costsestimate_costs_api_cost_estimate_get4No200, 422Not discovered
GET/api/countriesList Countrieslist_countries_api_countries_get3No200, 422Not discovered
PUT/api/daily-quotaUpdate daily quotaupdate_daily_quota_api_daily_quota_put1No200, 422Not discovered
GET/api/daily-statsGet daily statisticsget_daily_stats_api_daily_stats_get1No200, 422frontend/src/pages/CostManagement.tsx, frontend/src/pages/Settings.tsx
GET/api/docker/containersList Docker containerslist_docker_containers_api_docker_containers_get0No200Not discovered
GET/api/docker/logs/{container}Get Docker container logsget_docker_logs_api_docker_logs__container__get3No200, 422Not discovered
POST/api/embeddings/syncSync Embeddingssync_embeddings_api_embeddings_sync_post4No200, 422Not discovered
GET/api/export/citations.csvExport citations domain breakdown as CSVexport_citations_csv_api_export_citations_csv_get6No200, 422frontend/src/components/insights/CitationsTab.tsx
GET/api/export/{section}.csvExport analytics section as CSVexport_csv_api_export__section__csv_get7No200, 422Not discovered
POST/api/geo/competitor-gapsGenerate Competitor Gapsgenerate_competitor_gaps_api_geo_competitor_gaps_post5No200, 422Not discovered
POST/api/geo/content-opportunitiesGenerate Content Opportunitiesgenerate_content_opportunities_api_geo_content_opportunities_post5No200, 422Not discovered
POST/api/geo/outreach-targetsGenerate Outreach Targetsgenerate_outreach_targets_api_geo_outreach_targets_post5No200, 422Not discovered
POST/api/geo/quick-winsGenerate Quick Winsgenerate_quick_wins_api_geo_quick_wins_post5No200, 422Not discovered
POST/api/geo/recommendationsGenerate Recommendations Endpointgenerate_recommendations_endpoint_api_geo_recommendations_post5No200, 422frontend/src/components/geo/KanbanBoard.tsx
GET/api/geo/recommendations/{brand_id}Get Recommendations Endpointget_recommendations_endpoint_api_geo_recommendations__brand_id__get4No200, 422frontend/src/components/geo/KanbanBoard.tsx
PATCH/api/geo/recommendations/{recommendation_id}/statusUpdate Recommendation Statusupdate_recommendation_status_api_geo_recommendations__recommendation_id__status_patch4Yes200, 422Not discovered
POST/api/geo/strategic-summaryGenerate Strategic Summarygenerate_strategic_summary_api_geo_strategic_summary_post5No200, 422Not discovered
POST/api/geo/technical-checklistGenerate Technical Checklistgenerate_technical_checklist_api_geo_technical_checklist_post5No200, 422Not discovered
GET/api/healthHealth checkhealth_check_api_health_get0No200Not discovered
GET/api/integrationsList integration connectionslist_integrations_api_integrations_get3No200, 422frontend/src/pages/CostManagement.tsx, frontend/src/pages/Settings.tsx
POST/api/integrationsCreate integration connectioncreate_integration_api_integrations_post3Yes201, 422frontend/src/pages/CostManagement.tsx, frontend/src/pages/Settings.tsx
GET/api/integrations/catalogList supported integration providersintegrations_catalog_api_integrations_catalog_get3No200, 422frontend/src/pages/CostManagement.tsx, frontend/src/pages/Settings.tsx
DELETE/api/integrations/{integration_id}Delete integration connectiondelete_integration_api_integrations__integration_id__delete4No200, 422Not discovered
POST/api/integrations/{integration_id}/testTest integration connectivitytest_integration_api_integrations__integration_id__test_post4No200, 422frontend/src/pages/Settings.tsx
GET/api/job-historyGet job execution historyget_job_history_api_job_history_get4No200, 422Not discovered
GET/api/jobsList scraping jobslist_jobs_api_jobs_get6No200, 422frontend/src/pages/CostManagement.tsx, frontend/src/pages/Settings.tsx
POST/api/jobs/scrapeCreate scraping jobcreate_scrape_job_api_jobs_scrape_post3Yes201, 422, 500Not discovered
GET/api/jobs/{job_id}Get job detailsget_job_api_jobs__job_id__get1No200, 422Not discovered
GET/api/jobs/{job_id}/detailsGet detailed job informationget_job_details_api_jobs__job_id__details_get1No200, 422frontend/src/pages/CostManagement.tsx
GET/api/jobs/{job_id}/htmlGet job HTML snapshotget_job_html_api_jobs__job_id__html_get1No200, 422Not discovered
GET/api/knowledge-basesList Knowledge Baseslist_knowledge_bases_api_knowledge_bases_get3No200, 422Not discovered
POST/api/knowledge-basesCreate Knowledge Basecreate_knowledge_base_api_knowledge_bases_post3Yes201, 422frontend/src/pages/KnowledgeBases.tsx
GET/api/knowledge-bases/statusKnowledge Base Statusknowledge_base_status_api_knowledge_bases_status_get3No200, 422Not discovered
DELETE/api/knowledge-bases/{kb_id}Delete Knowledge Basedelete_knowledge_base_api_knowledge_bases__kb_id__delete4No200, 422Not discovered
PATCH/api/knowledge-bases/{kb_id}Update Knowledge Baseupdate_knowledge_base_api_knowledge_bases__kb_id__patch4Yes200, 422Not discovered
GET/api/knowledge-bases/{kb_id}/documentsList Documentslist_documents_api_knowledge_bases__kb_id__documents_get4No200, 422Not discovered
DELETE/api/knowledge-bases/{kb_id}/documents/{document_id}Delete Documentdelete_document_api_knowledge_bases__kb_id__documents__document_id__delete5No200, 422Not discovered
POST/api/knowledge-bases/{kb_id}/documents/{document_id}/reindexReindex Documentreindex_document_api_knowledge_bases__kb_id__documents__document_id__reindex_post5No200, 422Not discovered
POST/api/knowledge-bases/{kb_id}/import-urlImport Urlimport_url_api_knowledge_bases__kb_id__import_url_post4Yes201, 422Not discovered
POST/api/knowledge-bases/{kb_id}/searchSearch Knowledge Basesearch_knowledge_base_api_knowledge_bases__kb_id__search_post4Yes200, 422Not discovered
POST/api/knowledge-bases/{kb_id}/uploadUpload Documentupload_document_api_knowledge_bases__kb_id__upload_post4Yes201, 422Not discovered
GET/api/metricsGet dashboard metricsget_metrics_api_metrics_get9No200, 422frontend/src/hooks/useApi.ts
GET/api/modelsList Ai Modelslist_ai_models_api_models_get3No200, 422Not discovered
POST/api/onboarding/account-typeSave Account Typesave_account_type_api_onboarding_account_type_post3Yes200, 422Not discovered
POST/api/onboarding/admin/account-statusAdmin Onboarding Account Statusadmin_onboarding_account_status_api_onboarding_admin_account_status_post3Yes200, 422Not discovered
POST/api/onboarding/admin/sync-accountAdmin Onboarding Sync Accountadmin_onboarding_sync_account_api_onboarding_admin_sync_account_post3Yes200, 422Not discovered
POST/api/onboarding/admin/unlock-accountAdmin Onboarding Unlock Accountadmin_onboarding_unlock_account_api_onboarding_admin_unlock_account_post3Yes200, 422Not discovered
POST/api/onboarding/agency-waitlistJoin Agency Waitlistjoin_agency_waitlist_api_onboarding_agency_waitlist_post3Yes200, 422Not discovered
POST/api/onboarding/completeComplete Onboardingcomplete_onboarding_api_onboarding_complete_post3No200, 422Not discovered
POST/api/onboarding/discover-competitorsDiscover Competitorsdiscover_competitors_api_onboarding_discover_competitors_post3No200, 422Not discovered
POST/api/onboarding/generate-promptsGenerate Ai Promptsgenerate_ai_prompts_api_onboarding_generate_prompts_post3No200, 422frontend/src/pages/onboarding/OnboardingWizard.tsx
GET/api/onboarding/promptsGet Prompts For Reviewget_prompts_for_review_api_onboarding_prompts_get3No200, 422frontend/src/pages/onboarding/OnboardingWizard.tsx
POST/api/onboarding/promptsSave Promptssave_prompts_api_onboarding_prompts_post3Yes200, 422Not discovered
GET/api/onboarding/statusGet Onboarding Statusget_onboarding_status_api_onboarding_status_get3No200, 422frontend/src/components/layout/Sidebar.tsx, frontend/src/pages/onboarding/OnboardingWizard.tsx
GET/api/onboarding/topicsGet Available Topicsget_available_topics_api_onboarding_topics_get3No200, 422frontend/src/pages/onboarding/OnboardingWizard.tsx
POST/api/onboarding/topicsSave Topicssave_topics_api_onboarding_topics_post3Yes200, 422Not discovered
GET/api/personasList Personaslist_personas_api_personas_get3No200, 422frontend/src/pages/Settings.tsx
POST/api/personasCreate Personacreate_persona_api_personas_post3Yes200, 422frontend/src/components/insights/PersonasTab.tsx, frontend/src/pages/Settings.tsx
DELETE/api/personas/{persona_id}Delete Personadelete_persona_api_personas__persona_id__delete4No200, 422frontend/src/components/insights/PersonasTab.tsx, frontend/src/pages/Settings.tsx
GET/api/personas/{persona_id}Get Personaget_persona_api_personas__persona_id__get4No200, 422Not discovered
PUT/api/personas/{persona_id}Update Personaupdate_persona_api_personas__persona_id__put4Yes200, 422frontend/src/components/insights/PersonasTab.tsx
GET/api/prompt-templatesList prompt templateslist_prompt_templates_api_prompt_templates_get6No200, 422frontend/src/hooks/useApi.ts
POST/api/prompt-templatesCreate prompt templatecreate_prompt_template_api_prompt_templates_post3Yes201, 422frontend/src/pages/PromptManagement.tsx
DELETE/api/prompt-templates/{template_id}Delete prompt templatedelete_prompt_template_api_prompt_templates__template_id__delete4No200, 422frontend/src/pages/PromptManagement.tsx
PUT/api/prompt-templates/{template_id}Update prompt templateupdate_prompt_template_api_prompt_templates__template_id__put4Yes200, 422frontend/src/pages/PromptManagement.tsx
POST/api/prompt-templates/{template_id}/acceptAccept suggested templateaccept_template_api_prompt_templates__template_id__accept_post4No200, 422frontend/src/pages/PromptManagement.tsx
POST/api/prompt-templates/{template_id}/rejectReject and delete suggested templatereject_template_api_prompt_templates__template_id__reject_post4No200, 422frontend/src/pages/PromptManagement.tsx
GET/api/prompt-volumesGet Prompt Volumesget_prompt_volumes_api_prompt_volumes_get7No200, 422frontend/src/hooks/useApi.ts, frontend/src/pages/AnswerEngineInsights.tsx
GET/api/promptsList all promptsget_prompts_api_prompts_get6No200, 422frontend/src/hooks/useApi.ts
POST/api/prompts/batchBatch action on templatesbatch_action_api_prompts_batch_post3Yes200, 422Not discovered
POST/api/prompts/estimate-volumeEstimate search volumeestimate_volume_api_prompts_estimate_volume_post3Yes200, 422Not discovered
POST/api/prompts/suggestAI-powered prompt suggestionssuggest_prompts_api_prompts_suggest_post3Yes200, 422Not discovered
POST/api/prompts/upload-csvUpload CSV of promptsupload_csv_api_prompts_upload_csv_post3Yes200, 422Not discovered
GET/api/prompts/{query_id}Get prompt detailsget_prompt_detail_api_prompts__query_id__get4No200, 400, 404, 422frontend/src/hooks/useApi.ts, frontend/src/hooks/useApi.ts
GET/api/prompts/{query_id}/analysisGet full prompt analysisget_prompt_analysis_api_prompts__query_id__analysis_get7No200, 422frontend/src/hooks/useApi.ts
GET/api/prompts/{query_id}/historyGet prompt history (audit trail)get_prompt_history_api_prompts__query_id__history_get7No200, 404, 422frontend/src/hooks/useApi.ts, frontend/src/pages/Prompts.tsx
GET/api/proxy-providersList all proxy providers and their statuslist_proxy_providers_api_proxy_providers_get0No200Not discovered
GET/api/referenceAPI Referenceget_api_reference_api_reference_get0No200Not discovered
POST/api/schedule-batchSchedule batch of promptsschedule_batch_api_schedule_batch_post3Yes200, 422Not discovered
GET/api/scheduled-jobsList scheduled/recurring jobslist_scheduled_jobs_api_scheduled_jobs_get3No200, 422frontend/src/pages/Settings.tsx
DELETE/api/scheduled-jobs/{job_id}Delete a scheduled jobdelete_scheduled_job_api_scheduled_jobs__job_id__delete4No200, 422Not discovered
GET/api/scheduled-jobs/{job_id}Get scheduled job detailsget_scheduled_job_api_scheduled_jobs__job_id__get1No200, 422Not discovered
PUT/api/scheduled-jobs/{job_id}/pausePause a scheduled jobpause_scheduled_job_api_scheduled_jobs__job_id__pause_put4No200, 422Not discovered
PUT/api/scheduled-jobs/{job_id}/resumeResume a paused jobresume_scheduled_job_api_scheduled_jobs__job_id__resume_put4No200, 422Not discovered
GET/api/scheduler-statusGet scheduler statusget_scheduler_status_api_scheduler_status_get0No200frontend/src/pages/Settings.tsx
GET/api/screenshotsList all screenshotslist_screenshots_api_screenshots_get2No200, 422Not discovered
GET/api/screenshots/{filename}Get screenshot imageget_screenshot_api_screenshots__filename__get1No200, 422Not discovered
GET/api/settingsGet workspace settingsget_settings_api_settings_get3No200, 422Not discovered
PUT/api/settingsUpdate workspace settingsupdate_settings_api_settings_put3Yes200, 422frontend/src/pages/Settings.tsx
GET/api/settings/exportExport workspace data snapshotexport_workspace_data_api_settings_export_get3No200, 422frontend/src/pages/Settings.tsx
POST/api/settings/ga/connectConnect Gaconnect_ga_api_settings_ga_connect_post3Yes200, 422Not discovered
POST/api/settings/ga/deep-analysisTrigger Deep Analysistrigger_deep_analysis_api_settings_ga_deep_analysis_post3No200, 422Not discovered
POST/api/settings/ga/disconnectDisconnect Gadisconnect_ga_api_settings_ga_disconnect_post3No200, 422Not discovered
GET/api/settings/ga/oauth/callbackOauth Callbackoauth_callback_api_settings_ga_oauth_callback_get2No200, 422Not discovered
POST/api/settings/ga/oauth/connectOauth Connectoauth_connect_api_settings_ga_oauth_connect_post3Yes200, 422Not discovered
GET/api/settings/ga/oauth/propertiesOauth Propertiesoauth_properties_api_settings_ga_oauth_properties_get4No200, 422Not discovered
POST/api/settings/ga/oauth/startOauth Startoauth_start_api_settings_ga_oauth_start_post3No200, 422Not discovered
GET/api/settings/ga/statusGa Statusga_status_api_settings_ga_status_get3No200, 422frontend/src/pages/AgentAnalytics.tsx, frontend/src/pages/Settings.tsx
GET/api/settings/ga/summaryGa Summaryga_summary_api_settings_ga_summary_get4No200, 422Not discovered
GET/api/settings/metric-formulasList all metric formulas and explanationslist_metric_formulas_api_settings_metric_formulas_get3No200, 422frontend/src/pages/MetricFormulas.tsx
PUT/api/settings/metric-formulas/{metric_key}Update or reset a metric formula overrideupdate_metric_formula_api_settings_metric_formulas__metric_key__put4Yes200, 422frontend/src/pages/MetricFormulas.tsx
POST/api/settings/request-account-deletionCreate account deletion requestrequest_account_deletion_api_settings_request_account_deletion_post3Yes200, 422Not discovered
GET/api/settings/support-ticket-instructionsGet support ticket instructionsget_support_ticket_instructions_api_settings_support_ticket_instructions_get3No200, 422Not discovered
GET/api/settings/support-ticketsList support ticketslist_support_tickets_api_settings_support_tickets_get4No200, 422Not discovered
POST/api/settings/support-ticketsCreate support ticketcreate_support_ticket_api_settings_support_tickets_post3Yes201, 422Not discovered
GET/api/sourcesList all sourcesget_sources_api_sources_get3No200, 422Not discovered
GET/api/sources/analyticsGet source analyticsget_sources_analytics_api_sources_analytics_get6No200, 422Not discovered
POST/api/sources/classifyClassify Sourcesclassify_sources_api_sources_classify_post3No200, 422Not discovered
GET/api/sources/domainsGet Domain Analyticsget_domain_analytics_api_sources_domains_get4No200, 422frontend/src/hooks/useApi.ts
GET/api/sources/gap-analysisGet Gap Analysisget_gap_analysis_api_sources_gap_analysis_get4No200, 422frontend/src/hooks/useApi.ts
GET/api/sources/urlsGet Url Analyticsget_url_analytics_api_sources_urls_get4No200, 422frontend/src/pages/Sources.tsx
GET/api/stats/databaseGet database statisticsget_database_stats_api_stats_database_get3No200, 422frontend/src/pages/Settings.tsx
GET/api/suggestionsGet SEO suggestionsget_suggestions_api_suggestions_get3No200, 422Not discovered
POST/api/suggestions/generateGenerate Ai Suggestionsgenerate_ai_suggestions_api_suggestions_generate_post5Yes200, 422Not discovered
POST/api/suggestions/generate/v2Generate Ai Suggestions V2generate_ai_suggestions_v2_api_suggestions_generate_v2_post5Yes200, 422Not discovered
GET/api/suggestions/statusGet Suggestions Statusget_suggestions_status_api_suggestions_status_get3No200, 422Not discovered
GET/api/support/ticket-instructionsGet support ticket instructionsget_support_ticket_instructions_api_support_ticket_instructions_get3No200, 422frontend/src/pages/Support.tsx
GET/api/support/ticketsList support ticketslist_support_tickets_api_support_tickets_get4No200, 422frontend/src/pages/Support.tsx
POST/api/support/ticketsCreate support ticketcreate_support_ticket_api_support_tickets_post3Yes201, 422frontend/src/pages/Support.tsx
GET/api/tagsList tags for orglist_tags_api_tags_get3No200, 422frontend/src/components/filters/DashboardFilters.tsx
POST/api/tagsCreate tagcreate_tag_api_tags_post3Yes201, 422frontend/src/pages/PromptManagement.tsx
DELETE/api/tags/{tag_id}Delete tagdelete_tag_api_tags__tag_id__delete4No200, 422frontend/src/pages/PromptManagement.tsx
PUT/api/tags/{tag_id}Update tag nameupdate_tag_api_tags__tag_id__put4Yes200, 422frontend/src/pages/PromptManagement.tsx
GET/api/templatesList prompt templateslist_templates_api_templates_get4No200, 422Not discovered
POST/api/templatesCreate prompt templatecreate_template_api_templates_post3Yes200, 422Not discovered
DELETE/api/templates/{template_id}Delete templatedelete_template_api_templates__template_id__delete4No200, 422Not discovered
GET/api/templates/{template_id}Get template by IDget_template_api_templates__template_id__get4No200, 422Not discovered
PUT/api/templates/{template_id}Update templateupdate_template_api_templates__template_id__put4Yes200, 422Not discovered
GET/api/topicsList topics for orglist_topics_api_topics_get3No200, 422frontend/src/components/filters/DashboardFilters.tsx
POST/api/topicsCreate topiccreate_topic_api_topics_post3Yes201, 422frontend/src/pages/PromptManagement.tsx
DELETE/api/topics/{topic_id}Delete topicdelete_topic_api_topics__topic_id__delete4No200, 422frontend/src/pages/PromptManagement.tsx
PUT/api/topics/{topic_id}Update topic nameupdate_topic_api_topics__topic_id__put4Yes200, 422frontend/src/pages/PromptManagement.tsx
GET/api/visibilityGet visibility dataget_visibility_data_api_visibility_get8No200, 422frontend/src/hooks/useApi.ts
GET/api/vpn/ip/{country}Get VPN container IPget_vpn_ip_api_vpn_ip__country__get1No200, 422Not discovered
POST/api/vpn/rotate/{country}Rotate VPN IProtate_vpn_ip_api_vpn_rotate__country__post1No200, 422Not discovered
GET/api/vpn/serversGet VPN serversget_vpn_servers_api_vpn_servers_get0No200, 503Not discovered
GET/api/vpn/statusGet all VPN statusget_all_vpn_status_api_vpn_status_get0No200Not discovered
GET/api/webhooksList webhook endpointslist_webhooks_api_webhooks_get3No200, 422Not discovered
POST/api/webhooksCreate webhook endpointcreate_webhook_api_webhooks_post3Yes201, 422frontend/src/pages/Settings.tsx
POST/api/webhooks/clerkHandle Clerk Webhookhandle_clerk_webhook_api_webhooks_clerk_post0No200Not discovered
POST/api/webhooks/stripeHandle Stripe Webhookhandle_stripe_webhook_api_webhooks_stripe_post0No200Not discovered
DELETE/api/webhooks/{webhook_id}Delete webhook endpointdelete_webhook_api_webhooks__webhook_id__delete4No200, 422Not discovered
PATCH/api/webhooks/{webhook_id}/toggleToggle webhook active statetoggle_webhook_api_webhooks__webhook_id__toggle_patch4No200, 422Not discovered
POST/api/xyops/control/dispatch-dueDispatch due recurring jobs (xyOps controlled)xyops_dispatch_due_jobs_api_xyops_control_dispatch_due_post1Yes200, 422Not discovered
POST/api/xyops/control/run-job/{job_id}Run a specific job/template (xyOps controlled)xyops_run_specific_job_api_xyops_control_run_job__job_id__post2No200, 422Not discovered
GET/api/xyops/control/statusGet xyOps control-plane statusxyops_control_status_api_xyops_control_status_get1No200, 422Not discovered
GET/api/xyops/control/templatesGet production xyOps event templatesxyops_control_templates_api_xyops_control_templates_get1No200, 422Not discovered
GET/v1/brandsList Brandslist_brands_v1_brands_get1No200, 422Not discovered
GET/v1/chatsList Chatslist_chats_v1_chats_get3No200, 422Not discovered
GET/v1/chats/{chat_id}Get Chat Detailget_chat_detail_v1_chats__chat_id__get2No200, 422Not discovered
GET/v1/modelsList Modelslist_models_v1_models_get1No200, 422Not discovered
GET/v1/promptsList Promptslist_prompts_v1_prompts_get1No200, 422Not discovered
POST/v1/reports/brandsReport Brandsreport_brands_v1_reports_brands_post1Yes200, 422Not discovered
POST/v1/reports/domainsReport Domainsreport_domains_v1_reports_domains_post1Yes200, 422Not discovered
GET/v1/tagsList Tagslist_tags_v1_tags_get1No200, 422Not discovered
GET/v1/topicsList Topicslist_topics_v1_topics_get1No200, 422Not discovered

Endpoint contract details

MethodPathTagsParametersRequest Body TypesDescription
GET/api/actionsactionsquery:status, query:category, header:authorization, header:x-admin-key, header:x-organization-id-List all suggestion actions for the current organization. Automatically un-postpones actions whose postpone period has expired.
POST/api/actionsactionsheader:authorization, header:x-admin-key, header:x-organization-idapplication/jsonCreate a new suggestion action (from AI suggestion or manual).
POST/api/actions/generateactionsheader:authorization, header:x-admin-key, header:x-organization-id-Auto-generate actions from sources with gap_score > 0.3. Uses Gemini for intelligent recommendations, falls back to heuristics.
GET/api/actions/timelineactionsheader:authorization, header:x-admin-key, header:x-organization-id-Get a timeline view of all planned/in-progress/done actions, grouped by time period (overdue, today, this week, this month, future, completed).
DELETE/api/actions/{action_id}actionspath:action_id!<integer>, header:authorization, header:x-admin-key, header:x-organization-id-Delete a suggestion action.
PUT/api/actions/{action_id}actionspath:action_id!<integer>, header:authorization, header:x-admin-key, header:x-organization-idapplication/jsonUpdate an existing action's details.
POST/api/actions/{action_id}/completeactionspath:action_id!<integer>, header:authorization, header:x-admin-key, header:x-organization-idapplication/jsonMark an action as done. Still needs verification.
POST/api/actions/{action_id}/planactionspath:action_id!<integer>, header:authorization, header:x-admin-key, header:x-organization-idapplication/jsonAdd a suggestion to the marketing plan timeline with a target date.
POST/api/actions/{action_id}/postponeactionspath:action_id!<integer>, header:authorization, header:x-admin-key, header:x-organization-idapplication/jsonPostpone a suggestion so it's hidden for a number of days.
POST/api/actions/{action_id}/startactionspath:action_id!<integer>, header:authorization, header:x-admin-key, header:x-organization-id-Move an action to in_progress status.
POST/api/actions/{action_id}/verifyactionspath:action_id!<integer>, header:authorization, header:x-admin-key, header:x-organization-idapplication/jsonVerify a completed action. Only verifiable when status is 'done'.
GET/api/active-sessionsanalytics--Get all currently running scraping sessions with real-time status.
POST/api/admin/assign-brands-to-orgadminheader:authorization, header:x-admin-key, header:x-organization-idapplication/jsonAssign a list of brand IDs to a specific organization. Body:
POST/api/admin/assign-templates-to-orgadminheader:authorization, header:x-admin-key, header:x-organization-idapplication/jsonAssign templates to a specific organization. Body:
GET/api/admin/docssystem--Complete documentation for the admin dashboard interface.
POST/api/admin/importadmin-application/jsonImport pre-scraped results into the database. Requires admin API key.
GET/api/agent-analytics/botsagent-analyticsquery:limit<integer>, query:offset<integer>, query:bot_name, query:bot_provider, query:start_date, query:end_date, header:authorization, header:x-admin-key, header:x-organization-id-List bot visits with optional filters.
POST/api/agent-analytics/cloudflare/enrollagent-analyticsheader:x-admin-key, header:authorization, header:x-organization-idapplication/jsonEnroll Cloudflare Worker ingestion for the active Visyble organization. Generates a dedicated write API key and setup payload.
POST/api/agent-analytics/cloudflare/logsagent-analyticsheader:X-API-Keyapplication/jsonPublic ingestion endpoint for Cloudflare Worker middleware. Authenticates with an API key generated during enrollment.
POST/api/agent-analytics/cloudflare/network/configureagent-analyticsheader:x-admin-key, header:authorization, header:x-organization-idapplication/json-
POST/api/agent-analytics/cloudflare/network/profile/selectagent-analyticsheader:x-admin-key, header:authorization, header:x-organization-idapplication/json-
GET/api/agent-analytics/cloudflare/network/profilesagent-analyticsheader:authorization, header:x-admin-key, header:x-organization-id--
GET/api/agent-analytics/cloudflare/network/statusagent-analyticsheader:authorization, header:x-admin-key, header:x-organization-id--
GET/api/agent-analytics/cloudflare/statusagent-analyticsheader:authorization, header:x-admin-key, header:x-organization-id--
GET/api/agent-analytics/heatmapagent-analyticsquery:days<integer>, header:authorization, header:x-admin-key, header:x-organization-id-Return day/hour hit cells for traffic heatmap.
POST/api/agent-analytics/ingestagent-analyticsheader:authorization, header:x-admin-key, header:x-organization-idapplication/jsonIngest server log entries. Classifies bots via user-agent and creates BotVisit records. Creates ReferralVisit when referer matches AI sources.
GET/api/agent-analytics/overviewagent-analyticsheader:authorization, header:x-admin-key, header:x-organization-id-Dashboard overview: totals, top bots, top referrers, last 30 days daily counts.
GET/api/agent-analytics/pagesagent-analyticsquery:limit<integer>, query:bot_provider, header:authorization, header:x-admin-key, header:x-organization-id-Aggregate crawl hits by URL/path for pages table.
GET/api/agent-analytics/pages/detailagent-analyticsquery:path<string>, query:bot_provider, query:limit_related<integer>, query:limit_recent<integer>, header:authorization, header:x-admin-key, header:x-organization-id-Return detail data for one selected page path.
GET/api/agent-analytics/pages/indexagent-analyticsquery:limit<integer>, query:bot_provider, query:search, header:authorization, header:x-admin-key, header:x-organization-id-Aggregate crawl hits by path for the dedicated Pages tab.
GET/api/agent-analytics/referralsagent-analyticsquery:limit<integer>, query:offset<integer>, query:start_date, query:end_date, query:referral_source, header:authorization, header:x-admin-key, header:x-organization-id-List referral visits with optional filters.
GET/api/agent-analytics/reports/botsagent-analyticsheader:authorization, header:x-admin-key, header:x-organization-id-Pre-aggregated daily bot report: group by date + bot_name.
GET/api/agent-analytics/reports/referralsagent-analyticsheader:authorization, header:x-admin-key, header:x-organization-id-Pre-aggregated daily referral report: group by date + referral_source.
GET/api/agent-analytics/xyops/statusagent-analyticsheader:authorization, header:x-admin-key, header:x-organization-id--
GET/api/agents/providers/statusagentsheader:authorization, header:x-admin-key, header:x-organization-id-Return configured primary/fallback providers and runtime gateway status.
GET/api/agents/runsagentsquery:status, query:limit<integer>, header:authorization, header:x-admin-key, header:x-organization-id--
POST/api/agents/runsagentsheader:authorization, header:x-admin-key, header:x-organization-idapplication/json-
GET/api/agents/runs/{run_id}agentspath:run_id!<integer>, header:authorization, header:x-admin-key, header:x-organization-id--
GET/api/agents/templatesagentsheader:authorization, header:x-admin-key, header:x-organization-id--
GET/api/analytics/citations/categoriesanalytics-insightsheader:authorization, header:x-admin-key, header:x-organization-id-Return citation source classification rules: user overrides + default heuristics.
GET/api/analytics/citations/graphanalytics-insightsquery:limit<integer>, header:authorization, header:x-admin-key, header:x-organization-id-Return materialized citation graph for 2D/3D network views. Falls back to on-the-fly derivation from prompts/sources when no materialized edges are available.
GET/api/analytics/citations/watched-pagesanalytics-insightsheader:authorization, header:x-admin-key, header:x-organization-id-List all watched pages for the organization.
POST/api/analytics/citations/watched-pagesanalytics-insightsheader:authorization, header:x-admin-key, header:x-organization-idapplication/jsonAdd a new URL to the watched pages list.
DELETE/api/analytics/citations/watched-pages/{page_id}analytics-insightspath:page_id!<integer>, header:authorization, header:x-admin-key, header:x-organization-id-Remove a watched page by ID.
GET/api/analytics/extraction-quality/latestanalytics-insightsquery:limit_per_provider<integer>, header:authorization, header:x-admin-key, header:x-organization-id-Latest successful extraction quality metrics by provider. Designed for resilient telemetry in Cost Management and Insights.
GET/api/analytics/network/distributionanalytics-insightsquery:days<integer>, query:map_limit<integer>, header:authorization, header:x-admin-key, header:x-organization-id-Cloudflare + proxy network location distribution for mapcn-style UI.
GET/api/analytics/network/latencyanalytics-insightsquery:days<integer>, header:authorization, header:x-admin-key, header:x-organization-id-Periodic and route latency analytics for optimization.
GET/api/analytics/platformsanalytics-insightsquery:metric<string>, query:persona_id, header:authorization, header:x-admin-key, header:x-organization-id-Pivot visibility/citation data by AI platform (ChatGPT, Perplexity, Google AI). Returns matrix data for the Platforms tab.
GET/api/analytics/platforms/analysisanalytics-insightsquery:start_date, query:end_date, query:persona_id, header:authorization, header:x-admin-key, header:x-organization-id-Full platform analytics view for the Platforms tab: - Summary KPIs for primary brand - Per-platform metrics and trends - Recent execution rows (prompt runs)
GET/api/analytics/query-fanoutsanalytics-insightsheader:authorization, header:x-admin-key, header:x-organization-id-Return stored query fanout patterns from LLM search behavior. Groups individual fanout records by original query.
GET/api/analytics/query-fanouts/analyzeanalytics-insightsquery:original_query!<string>, header:authorization, header:x-admin-key, header:x-organization-id-Analyze query fanout variations for a single original prompt query. Returns both unique variations and per-execution fanout runs.
GET/api/analytics/regionsanalytics-insightsquery:brand_id, query:persona_id, header:authorization, header:x-admin-key, header:x-organization-id-Aggregate visibility + proxy connection intelligence by region.
GET/api/analytics/scrape-quality/latestanalytics-insightsquery:providers<string>, query:limit<integer>, query:persona_id, header:authorization, header:x-admin-key, header:x-organization-id-Latest successful scrape extraction quality, resilient to provider UI changes. Returns per-job quality metrics and provider aggregates.
GET/api/analytics/sentimentanalytics-insightsquery:brand_id, query:days<integer>, header:authorization, header:x-admin-key, header:x-organization-id-Return cached sentiment analysis results for the organization. Data is populated by background Gemini analysis jobs.
POST/api/analytics/sentiment/generateanalytics-insightsquery:brand_id, header:authorization, header:x-admin-key, header:x-organization-id-Trigger sentiment analysis generation via Gemini for org brands. Runs in the background and caches results in the SentimentAnalysis table.
GET/api/analytics/sentiment/statusanalytics-insightsheader:authorization, header:x-admin-key, header:x-organization-id--
GET/api/analytics/share-of-voiceanalytics-insightsquery:brand_id, query:platform, query:persona_id, query:days<integer>, header:authorization, header:x-admin-key, header:x-organization-id-Aggregate brand mention percentages across scraped prompts. Optional platform filter: chatgpt, perplexity, google_ai.
GET/api/analytics/topic-performanceanalytics-insightsquery:start_date, query:end_date, query:model, query:country, query:topic_id, query:tag_id, query:brand_id, query:persona_id, header:authorization, header:x-admin-key, header:x-organization-id-Compute topic performance using REAL org data. - Topic source of truth: PromptTopic + PromptTemplate(topic_id) - Visibility: brand mentions / prompt runs in each topic - Citation share: direct-link mentions / total mentions in each topic
GET/api/analytics/visibility-settingsanalytics-insightsheader:authorization, header:x-admin-key, header:x-organization-id--
PUT/api/analytics/visibility-settingsanalytics-insightsheader:authorization, header:x-admin-key, header:x-organization-idapplication/json-
GET/api/analytics/visibility/drilldownanalytics-insightsquery:dimension!<string>, query:entity_id!<string>, query:start_date, query:end_date, query:brand_id, query:persona_id, query:model, query:limit<integer>, header:authorization, header:x-admin-key, header:x-organization-id-Detailed drilldown for visibility interactions. Supports dimensions: - daily: entity_id is YYYY-MM-DD - topic: entity_id is topic_id - platform: entity_id is ai_model (chatgpt|perplexity|google_ai|...) - brand: entity_id is brand_id
GET/api/annotationsannotationsquery:start_date, query:end_date, header:authorization, header:x-admin-key, header:x-organization-id-List all chart annotations for the current organization. Optionally filter by date range.
POST/api/annotationsannotationsheader:authorization, header:x-admin-key, header:x-organization-idapplication/jsonCreate a new chart annotation.
DELETE/api/annotations/{annotation_id}annotationspath:annotation_id!<integer>, header:authorization, header:x-admin-key, header:x-organization-id-Delete an annotation.
GET/api/annotations/{annotation_id}annotationspath:annotation_id!<integer>, header:authorization, header:x-admin-key, header:x-organization-id-Get a specific annotation by ID.
PUT/api/annotations/{annotation_id}annotationspath:annotation_id!<integer>, header:authorization, header:x-admin-key, header:x-organization-idapplication/jsonUpdate an existing annotation.
GET/api/api-keyssettingsheader:authorization, header:x-admin-key, header:x-organization-id--
POST/api/api-keyssettingsheader:x-admin-key, header:authorization, header:x-organization-idapplication/json-
DELETE/api/api-keys/{key_id}settingspath:key_id!<integer>, header:x-admin-key, header:authorization, header:x-organization-id--
GET/api/audit-logssettingsquery:limit<integer>, query:offset<integer>, query:action, header:x-admin-key, header:authorization, header:x-organization-id--
GET/api/auth/meauthheader:authorization, header:x-admin-key, header:x-organization-id-Return the authenticated user's profile and active organization. Used by the frontend to verify authentication state.
GET/api/auth/provider/statusauthheader:x-admin-key, header:authorization, header:x-organization-id-Return login provider configuration readiness for production operations. Designed for Cost Management -> Login & Identity tab.
POST/api/auth/provider/switchauthheader:x-admin-key, header:authorization, header:x-organization-idapplication/jsonRuntime switch for login provider to support rapid rollback/cutover. Guarded behind AUTH_PROVIDER_RUNTIME_SWITCH_ENABLED=true. Note: applies per running process and is not persisted across restarts.
GET/api/benchmark/leaderboardbenchmarkquery:limit<integer>, header:authorization, header:x-admin-key, header:x-organization-id-Aggregates results across all completed benchmark runs into a ranked leaderboard. Composite score = success_rate0.4 + fingerprint_score0.3 + cost_efficiency0.15 + speed0.15
POST/api/benchmark/runbenchmarkheader:authorization, header:x-admin-key, header:x-organization-idapplication/jsonFire parallel scrape jobs across providers x targets x countries.
GET/api/benchmark/runsbenchmarkquery:limit<integer>, query:offset<integer>, header:authorization, header:x-admin-key, header:x-organization-id-Returns all benchmark runs ordered by creation date.
GET/api/benchmark/runs/{run_id}benchmarkpath:run_id!<integer>, header:authorization, header:x-admin-key, header:x-organization-id-Returns all results for a run, grouped by provider.
POST/api/billing/admin/account-statusbillingheader:x-admin-key, header:authorization, header:x-organization-idapplication/jsonAdmin-only: inspect target account billing state.
POST/api/billing/admin/unlock-accountbillingheader:x-admin-key, header:authorization, header:x-organization-idapplication/jsonAdmin-only: unlock/activate account billing bypass for a target account.
POST/api/billing/change-planbillingheader:x-admin-key, header:authorization, header:x-organization-idapplication/jsonImmediate proration plan change (upgrade or downgrade). Swaps the subscription item to the new price, prorated automatically.
POST/api/billing/create-checkout-sessionbillingheader:x-admin-key, header:authorization, header:x-organization-idapplication/jsonCreate a Stripe Checkout session with a free trial.
POST/api/billing/create-portal-sessionbillingheader:authorization, header:x-admin-key, header:x-organization-id-Create a Stripe Customer Portal session for self-service management.
GET/api/billing/plansbilling--Return the full plan catalog with feature matrix.
GET/api/billing/statusbillingheader:authorization, header:x-admin-key, header:x-organization-id-Return subscription status, plan limits, and resource usage.
GET/api/brandsbrandsquery:start_date, query:end_date, query:compare_start, query:compare_end, query:model, query:country, header:authorization, header:x-admin-key, header:x-organization-id-Get all brands with computed visibility metrics for a specified date range. Parameters: - start_date / end_date: Primary period (defaults to last 30 days) - compare_start / compare_end: Comparison period for trend (defaults to previous 30 days) Metrics include: - Visibility: Percentage of prompts mentioning the brand - Average Position: Average position when mentioned - Trend: Period-over-period trend (up/down/stable) - Sentiment: Most common sentiment Brands are sorted with primary brand first, then by visibility descending.
POST/api/brandsbrandsheader:authorization, header:x-admin-key, header:x-organization-idapplication/jsonCreate a new brand and automatically sync mentions from all existing prompts. The system will: 1. Create the brand record 2. Scan all existing prompts for brand mentions 3. Create mention records with position and sentiment 4. Return the created brand with analytics Brand ID Format: - Lowercase, no spaces - Use hyphens for multi-word names - Example: "adobe-commerce", "shopify-plus" Brand Types: - primary: Your main brand (only one allowed) - competitor: Competitor brands
GET/api/brands/detailsbrandsheader:authorization, header:x-admin-key, header:x-organization-id-Get comprehensive brand analytics with monthly breakdown. Includes: - Current month metrics (January 2026) - Monthly visibility trends (Sep 2025 - Jan 2026) - Top prompts where brand is mentioned - Total mentions across all time - Brand variations and search terms
GET/api/brands/suggestedbrandsheader:authorization, header:x-admin-key, header:x-organization-id--
DELETE/api/brands/{brand_id}brandspath:brand_id!<string>, header:authorization, header:x-admin-key, header:x-organization-id-Delete a brand and all its mention records. Warning: This operation cannot be undone. Restrictions: - Cannot delete primary brand (type='primary') - All mention records will be permanently deleted
PATCH/api/brands/{brand_id}brandspath:brand_id!<string>, header:authorization, header:x-admin-key, header:x-organization-idapplication/json-
GET/api/brands/{brand_id}/domainsbrandspath:brand_id!<string>, header:authorization, header:x-admin-key, header:x-organization-id-Get all domains registered for a brand.
POST/api/brands/{brand_id}/domainsbrandspath:brand_id!<string>, header:authorization, header:x-admin-key, header:x-organization-idapplication/jsonAdd a domain to a brand for citation matching.
DELETE/api/brands/{brand_id}/domains/{domain_id}brandspath:brand_id!<string>, path:domain_id!<integer>, header:authorization, header:x-admin-key, header:x-organization-id-Remove a domain from a brand.
GET/api/brands/{brand_id}/link-destinationsbrandspath:brand_id!<string>, query:start_date<string>, query:end_date<string>, header:authorization, header:x-admin-key, header:x-organization-id-Get where traffic goes when a brand is mentioned. Shows breakdown of domains that get cited when AI mentions this brand.
PUT/api/brands/{brand_id}/set-primarybrandspath:brand_id!<string>, header:authorization, header:x-admin-key, header:x-organization-id-Sets the specified brand as the primary brand. Only one brand can be primary at a time.
GET/api/chatschatsquery:limit<integer>, query:offset<integer>, query:model, query:brand_id, header:authorization, header:x-admin-key, header:x-organization-id-List recent chats (prompts) for the org. Query params: limit, offset, model (filter by ai_model), brand_id (filter to prompts mentioning this brand).
GET/api/chats/{chat_id}chatspath:chat_id!<integer>, header:authorization, header:x-admin-key, header:x-organization-id-Full chat detail with response text, brand mentions, and sources.
GET/api/citationsanalyticsquery:start_date<string>, query:end_date<string>, query:brand_id<string>, header:authorization, header:x-admin-key, header:x-organization-id-Get aggregated citation statistics. Shows how often brands are mentioned vs directly linked.
GET/api/citations/mismatchesanalyticsquery:start_date<string>, query:end_date<string>, query:brand_id<string>, query:limit<integer>, header:authorization, header:x-admin-key, header:x-organization-id-Get detailed mismatch alerts. Shows prompts where a brand was mentioned but the links went to third-party sites.
GET/api/compareanalyticsquery:start_a!<string>, query:end_a!<string>, query:start_b!<string>, query:end_b!<string>, query:brand_id, query:granularity<string>, header:authorization, header:x-admin-key, header:x-organization-id-Compare visibility metrics between two date periods side-by-side. Required Parameters: - start_a / end_a: Period A date range - start_b / end_b: Period B date range Optional Parameters: - brand_id: Brand to analyze (defaults to primary brand) - granularity: 'day', 'week', or 'month' for daily_data breakdown Returns: - Period A statistics - Period B statistics - Delta/change between periods - Daily data for each period (for charts)
GET/api/configsystem--Get system configuration including available scrapers and proxies. Returns: - Available scraper types - Configured proxy countries - Default scraper selection This endpoint proxies the scraper service config endpoint.
GET/api/content-cms/articlescontent-cmsheader:authorization, header:x-admin-key, header:x-organization-id-List all articles for the current organization.
POST/api/content-cms/articlescontent-cmsheader:authorization, header:x-admin-key, header:x-organization-idapplication/jsonCreate a new content article.
DELETE/api/content-cms/articles/{article_id}content-cmspath:article_id!<integer>, header:authorization, header:x-admin-key, header:x-organization-id-Delete an article.
GET/api/content-cms/articles/{article_id}content-cmspath:article_id!<integer>, header:authorization, header:x-admin-key, header:x-organization-id-Get a single article by ID.
PUT/api/content-cms/articles/{article_id}content-cmspath:article_id!<integer>, header:authorization, header:x-admin-key, header:x-organization-idapplication/jsonUpdate an article's content or status.
POST/api/content-cms/articles/{article_id}/generate-draftcontent-cmspath:article_id!<integer>, header:authorization, header:x-admin-key, header:x-organization-id-Generate a final draft from the content brief.
GET/api/content-cms/articles/{article_id}/workflow-statuscontent-cmspath:article_id!<integer>, header:authorization, header:x-admin-key, header:x-organization-id-Get the current workflow progress for an article.
GET/api/content-cms/connectors/statuscontent-cms--Expose enabled publishing connectors and basic health flags.
POST/api/content-cms/generate-briefcontent-cmsheader:authorization, header:x-admin-key, header:x-organization-idapplication/jsonCreate an article and start brief generation in the background.
POST/api/content-cms/publishcontent-cmsheader:authorization, header:x-admin-key, header:x-organization-idapplication/jsonPublish an article to an external CMS connector. Supports WordPress today; other connectors return staged status.
GET/api/content-cms/publish/targetscontent-cmsheader:authorization, header:x-admin-key, header:x-organization-id--
GET/api/content-cms/templatescontent-cms--Return available content generation templates.
POST/api/content/analyzecontent-optimizationheader:authorization, header:x-admin-key, header:x-organization-idapplication/jsonSubmit content for AEO analysis. Creates a ContentOptimization record with status=completed and mock analysis.
GET/api/content/optimizationscontent-optimizationquery:limit<integer>, query:offset<integer>, header:authorization, header:x-admin-key, header:x-organization-id-List past AEO analyses for the organization.
DELETE/api/content/optimizations/{optimization_id}content-optimizationpath:optimization_id!<integer>, header:authorization, header:x-admin-key, header:x-organization-id-Delete an AEO analysis record.
GET/api/content/optimizations/{optimization_id}content-optimizationpath:optimization_id!<integer>, header:authorization, header:x-admin-key, header:x-organization-id-Get full analysis detail for a single optimization record. Returns the record with analysis_json and recommendations_json parsed.
GET/api/cost-estimateanalyticsquery:prompts<integer>, query:countries<integer>, query:runs_per_prompt<integer>, query:scraper_type<string>-Estimate costs for running prompts with different configurations. Cost breakdown by provider: - VPN Direct: Free (after VPN subscription) - BrightData Residential: ~$0.004/req - BrightData Unlocker: ~$0.008/req - BrightData Browser: ~$0.025/req - Oxylabs Residential: ~$0.005/req - Oxylabs Mobile: ~$0.012/req - ScrapFly: ~$0.003/req - Scrape.do: ~$0.002/req - Zyte API: ~$0.004/req
GET/api/countriesdashboard-filters, dashboard-filtersheader:authorization, header:x-admin-key, header:x-organization-id-List countries with prompt-template counts.
PUT/api/daily-quotaanalyticsquery:quota<integer>-Update the daily prompt quota.
GET/api/daily-statsanalyticsquery:date<string>-Get statistics for today or a specific date. Includes: - Prompt counts (scheduled, completed, failed) - Jobs by scraper type - Cost breakdown by proxy layer - Performance metrics - Quota status
GET/api/docker/containerssystem--List all running Docker containers with their status.
GET/api/docker/logs/{container}systempath:container!<string>, query:lines<integer>, query:since<string>-Fetch logs from a Docker container. Useful for debugging and monitoring.
POST/api/embeddings/sync-query:limit<integer>, header:authorization, header:x-admin-key, header:x-organization-id-Backfill embeddings for existing prompts (requires PostgreSQL + pgvector).
GET/api/export/citations.csvanalyticsquery:start_date, query:end_date, query:brand_id, header:authorization, header:x-admin-key, header:x-organization-id--
GET/api/export/{section}.csvanalyticspath:section!<string>, query:start_date, query:end_date, query:brand_id, header:authorization, header:x-admin-key, header:x-organization-id-Generic CSV export endpoint for analytics sections. Supported sections: - citations: domain-level citation breakdown with authority score
POST/api/geo/competitor-gaps-query:brand_id, query:force_refresh<boolean>, header:authorization, header:x-admin-key, header:x-organization-id-Generate competitor gaps section. Returns cached version unless force_refresh=True.
POST/api/geo/content-opportunities-query:brand_id, query:force_refresh<boolean>, header:authorization, header:x-admin-key, header:x-organization-id-Generate content opportunities section. Returns cached version unless force_refresh=True.
POST/api/geo/outreach-targets-query:brand_id, query:force_refresh<boolean>, header:authorization, header:x-admin-key, header:x-organization-id-Generate outreach targets section. Returns cached version unless force_refresh=True.
POST/api/geo/quick-wins-query:brand_id, query:force_refresh<boolean>, header:authorization, header:x-admin-key, header:x-organization-id-Generate quick wins section. Returns cached version unless force_refresh=True.
POST/api/geo/recommendationsrecommendationsquery:brand_id, query:force_refresh<boolean>, header:authorization, header:x-admin-key, header:x-organization-id-Generate AI-powered GEO recommendations using Gemini. Returns existing recommendations if available, or generates new ones.
GET/api/geo/recommendations/{brand_id}recommendationspath:brand_id!<string>, header:authorization, header:x-admin-key, header:x-organization-id-Get existing recommendations for a brand.
PATCH/api/geo/recommendations/{recommendation_id}/statusrecommendationspath:recommendation_id!<integer>, header:authorization, header:x-admin-key, header:x-organization-idapplication/jsonUpdate a recommendation's status (for Kanban drag-and-drop).
POST/api/geo/strategic-summary-query:brand_id, query:force_refresh<boolean>, header:authorization, header:x-admin-key, header:x-organization-id-Generate strategic summary section. Returns cached version unless force_refresh=True.
POST/api/geo/technical-checklist-query:brand_id, query:force_refresh<boolean>, header:authorization, header:x-admin-key, header:x-organization-id-Generate technical GEO checklist section. Returns cached version unless force_refresh=True.
GET/api/healthhealth--Check if the backend API service is running and healthy.
GET/api/integrationssettingsheader:authorization, header:x-admin-key, header:x-organization-id--
POST/api/integrationssettingsheader:x-admin-key, header:authorization, header:x-organization-idapplication/json-
GET/api/integrations/catalogsettingsheader:authorization, header:x-admin-key, header:x-organization-id--
DELETE/api/integrations/{integration_id}settingspath:integration_id!<integer>, header:x-admin-key, header:authorization, header:x-organization-id--
POST/api/integrations/{integration_id}/testsettingspath:integration_id!<integer>, header:x-admin-key, header:authorization, header:x-organization-id--
GET/api/job-historyanalyticsquery:limit<integer>, query:status<string>, query:scraper_type<string>, query:country<string>-Get recent job history with timing and performance data.
GET/api/jobsjobsquery:status, query:limit<integer>, query:exclude_templates<boolean>, header:authorization, header:x-admin-key, header:x-organization-id-List all scraping jobs with optional status filter. Status Values: - pending: Job is queued but not started - running: Job is currently executing - completed: Job finished successfully - failed: Job encountered an error - scheduled: Recurring job waiting for next run Query Parameters: - status: Filter jobs by status (optional) Returns list of jobs with: - Job ID, query, status, country - Scraper type, frequency (if scheduled) - Creation time, next run time (if scheduled)
POST/api/jobs/scrapejobsheader:authorization, header:x-admin-key, header:x-organization-idapplication/jsonCreate a new scraping job that executes immediately or on a schedule. ## Job Types ### One-time Job - Set frequency to null or omit it - Executes immediately - Returns job_id and prompt_id when complete ### Scheduled Job - Set frequency to daily, weekly, or hourly - Optionally set start_date (defaults to now) - Returns job_id and next_run_at - Scheduler automatically creates new runs ## Scraper Types - google_ai: Google AI Overview (default) - perplexity: Perplexity AI - brightdata: BrightData residential proxy ## Proxy Options - Datacenter VPN: Standard VPN proxy (use_residential_proxy=false) - Residential Proxy: Residential IP proxy (use_residential_proxy=true, requires sidecar) ## Anti-Detection Configure browser fingerprinting via device_type, os_type, browser_type, and human_behavior settings.
GET/api/jobs/{job_id}jobspath:job_id!<integer>-Get detailed information about a specific scrape job including HTML snapshot.
GET/api/jobs/{job_id}/detailsjobspath:job_id!<integer>-Get comprehensive job details including config, logs, screenshots, and error info.
GET/api/jobs/{job_id}/htmljobspath:job_id!<integer>-Get the raw HTML content captured during the scrape.
GET/api/knowledge-basesknowledge-basesheader:authorization, header:x-admin-key, header:x-organization-id--
POST/api/knowledge-basesknowledge-basesheader:authorization, header:x-admin-key, header:x-organization-idapplication/json-
GET/api/knowledge-bases/statusknowledge-basesheader:authorization, header:x-admin-key, header:x-organization-id-Operational status for KB integrations and runtime providers.
DELETE/api/knowledge-bases/{kb_id}knowledge-basespath:kb_id!<integer>, header:authorization, header:x-admin-key, header:x-organization-id--
PATCH/api/knowledge-bases/{kb_id}knowledge-basespath:kb_id!<integer>, header:authorization, header:x-admin-key, header:x-organization-idapplication/json-
GET/api/knowledge-bases/{kb_id}/documentsknowledge-basespath:kb_id!<integer>, header:authorization, header:x-admin-key, header:x-organization-id--
DELETE/api/knowledge-bases/{kb_id}/documents/{document_id}knowledge-basespath:kb_id!<integer>, path:document_id!<integer>, header:authorization, header:x-admin-key, header:x-organization-id-Delete a document and its chunks from a knowledge base.
POST/api/knowledge-bases/{kb_id}/documents/{document_id}/reindexknowledge-basespath:kb_id!<integer>, path:document_id!<integer>, header:authorization, header:x-admin-key, header:x-organization-id-Queue re-indexing for a document.
POST/api/knowledge-bases/{kb_id}/import-urlknowledge-basespath:kb_id!<integer>, header:authorization, header:x-admin-key, header:x-organization-idapplication/json-
POST/api/knowledge-bases/{kb_id}/searchknowledge-basespath:kb_id!<integer>, header:authorization, header:x-admin-key, header:x-organization-idapplication/json-
POST/api/knowledge-bases/{kb_id}/uploadknowledge-basespath:kb_id!<integer>, header:authorization, header:x-admin-key, header:x-organization-idmultipart/form-data-
GET/api/metricsanalyticsquery:start_date, query:end_date, query:compare_start, query:compare_end, query:model, query:country, header:authorization, header:x-admin-key, header:x-organization-id-Get dashboard KPIs with period-over-period changes. Supports dynamic date ranges via query parameters: - start_date / end_date: Define the primary period (defaults to last 30 days) - compare_start / compare_end: Define comparison period (defaults to previous 30 days) Metrics include: - Visibility: Primary brand visibility percentage - Total Prompts: Total unique queries tracked - Total Sources: Total source citations - Average Position: Average position when mentioned
GET/api/modelsdashboard-filters, dashboard-filtersheader:authorization, header:x-admin-key, header:x-organization-id-List distinct AI model values from scrape results.
POST/api/onboarding/account-typeonboardingheader:authorization, header:x-admin-key, header:x-organization-idapplication/jsonStep 1: Save account type and brand details.
POST/api/onboarding/admin/account-statusonboardingheader:x-admin-key, header:authorization, header:x-organization-idapplication/json-
POST/api/onboarding/admin/sync-accountonboardingheader:x-admin-key, header:authorization, header:x-organization-idapplication/json-
POST/api/onboarding/admin/unlock-accountonboardingheader:x-admin-key, header:authorization, header:x-organization-idapplication/json-
POST/api/onboarding/agency-waitlistonboardingheader:authorization, header:x-admin-key, header:x-organization-idapplication/jsonSave agency interest and mark user as waitlisted. The user picks "agency" on step 1, fills in agency name / URL, and we record them but don't advance through the wizard.
POST/api/onboarding/completeonboardingheader:authorization, header:x-admin-key, header:x-organization-id-Finalize onboarding: create the Brand and PromptTemplate records, then mark user as onboarded.
POST/api/onboarding/discover-competitorsonboardingheader:authorization, header:x-admin-key, header:x-organization-id-Discover competitors using Gemini + Google Search grounding. Called in parallel after Step 1 to provide context for topic/prompt selection. Results are stored in UserOnboarding for use during onboarding completion (auto-creating competitor Brand records).
POST/api/onboarding/generate-promptsonboardingheader:authorization, header:x-admin-key, header:x-organization-id-Generate AI-powered prompts using Gemini with Google Search grounding. Falls back to static templates on any failure. The prompts are generated in the appropriate language based on the user's selected location (e.g., Italy -> Italian, Germany -> German).
GET/api/onboarding/promptsonboardingheader:authorization, header:x-admin-key, header:x-organization-id-Step 3: Return generated prompts for selected topics (5 per topic, 3 pre-selected).
POST/api/onboarding/promptsonboardingheader:authorization, header:x-admin-key, header:x-organization-idapplication/jsonStep 3: Save selected prompts.
GET/api/onboarding/statusonboardingheader:authorization, header:x-admin-key, header:x-organization-id-Return the current onboarding state for the authenticated user.
GET/api/onboarding/topicsonboardingheader:authorization, header:x-admin-key, header:x-organization-id-Return the available topic categories for step 2.
POST/api/onboarding/topicsonboardingheader:authorization, header:x-admin-key, header:x-organization-idapplication/jsonStep 2: Save selected topics.
GET/api/personasdashboard-filters, personasheader:authorization, header:x-admin-key, header:x-organization-id--
POST/api/personasdashboard-filters, personasheader:authorization, header:x-admin-key, header:x-organization-idapplication/json-
DELETE/api/personas/{persona_id}dashboard-filters, personaspath:persona_id!<integer>, header:authorization, header:x-admin-key, header:x-organization-id--
GET/api/personas/{persona_id}dashboard-filters, personaspath:persona_id!<integer>, header:authorization, header:x-admin-key, header:x-organization-id--
PUT/api/personas/{persona_id}dashboard-filters, personaspath:persona_id!<integer>, header:authorization, header:x-admin-key, header:x-organization-idapplication/json-
GET/api/prompt-templatesprompt-managementquery:topic_id, query:tag_id, query:state, header:authorization, header:x-admin-key, header:x-organization-id--
POST/api/prompt-templatesprompt-managementheader:authorization, header:x-admin-key, header:x-organization-idapplication/json-
DELETE/api/prompt-templates/{template_id}prompt-managementpath:template_id!<integer>, header:authorization, header:x-admin-key, header:x-organization-id--
PUT/api/prompt-templates/{template_id}prompt-managementpath:template_id!<integer>, header:authorization, header:x-admin-key, header:x-organization-idapplication/json-
POST/api/prompt-templates/{template_id}/acceptprompt-managementpath:template_id!<integer>, header:authorization, header:x-admin-key, header:x-organization-id--
POST/api/prompt-templates/{template_id}/rejectprompt-managementpath:template_id!<integer>, header:authorization, header:x-admin-key, header:x-organization-id--
GET/api/prompt-volumesprompt-volumesquery:start_date, query:end_date, query:platform, query:persona_id, header:authorization, header:x-admin-key, header:x-organization-id-Return per-day prompt volume rows and totals.
GET/api/promptspromptsquery:start_date, query:end_date, query:model, header:authorization, header:x-admin-key, header:x-organization-id-Get all unique queries with aggregated statistics across all runs. For each query, returns: - Average visibility across all runs - Average position across all runs - Total number of runs - Aggregated brand mentions (mentioned if mentioned in ANY run) Results are grouped by query, with metrics averaged across all runs.
POST/api/prompts/batchprompt-managementheader:authorization, header:x-admin-key, header:x-organization-idapplication/json-
POST/api/prompts/estimate-volumeprompt-managementheader:authorization, header:x-admin-key, header:x-organization-idapplication/json-
POST/api/prompts/suggestprompt-managementheader:authorization, header:x-admin-key, header:x-organization-idapplication/json-
POST/api/prompts/upload-csvprompt-managementheader:authorization, header:x-admin-key, header:x-organization-idmultipart/form-data-
GET/api/prompts/{query_id}promptspath:query_id!<string>, header:authorization, header:x-admin-key, header:x-organization-id-Get detailed information for a specific prompt query with all runs. Query ID Format: - Use format: query-1, query-2, etc. - Number corresponds to order from list prompts endpoint - Example: First query = query-1, second = query-2 Returns: - Query text - Aggregated metrics across all runs - Individual run details with sources and brand mentions - Full response text for each run
GET/api/prompts/{query_id}/analysispromptspath:query_id!<string>, query:start_date, query:end_date, query:days<integer>, header:authorization, header:x-admin-key, header:x-organization-id-Full prompt analysis view used by the Answer Engine Insights Prompts tab. Includes: - Prompt-level metrics (visibility, average position, citation shares) - Daily trend points - Citation share by platform - Full execution rows (response, mentions, citations, search fanouts, platform, region)
GET/api/prompts/{query_id}/historypromptspath:query_id!<string>, query:start_date, query:end_date, query:brand_id, header:authorization, header:x-admin-key, header:x-organization-id-Get detailed run history for a specific prompt query within a date range. Parameters: - query_id: Query ID (e.g., "query-1") or URL-encoded query text - start_date / end_date: Date range to filter runs - brand_id: Optional brand to focus on (defaults to primary brand) Returns: - All runs within the date range - Daily aggregated statistics - Per-brand visibility summary
GET/api/proxy-providerssystem--Returns every registered proxy provider with configuration status, cost, success rate, and whether credentials are set.
GET/api/referencedocumentation--Complete API reference with all options and examples.
POST/api/schedule-batchschedulingheader:authorization, header:x-admin-key, header:x-organization-idapplication/jsonSchedule a batch of prompts from templates across multiple countries. Optimizes scheduling to: - Spread jobs throughout the day - Respect daily quota - Balance across countries - Minimize costs For 100 prompts/day across 3 countries with 3 runs each: - 100 prompts ÷ 3 countries = ~33 prompts per country - 33 prompts × 3 runs = ~11 unique queries per country
GET/api/scheduled-jobsjobsheader:authorization, header:x-admin-key, header:x-organization-id-List all active scheduled jobs that will run periodically. Supported Frequencies: - hourly: Every hour - 2_per_day: Every 12 hours - 1_per_day / daily: Every 24 hours - 2_per_week: Every 3.5 days - weekly: Every 7 days - monthly: Every 30 days
DELETE/api/scheduled-jobs/{job_id}jobspath:job_id!<integer>, header:authorization, header:x-admin-key, header:x-organization-id-Delete a recurring job. This will stop all future runs.
GET/api/scheduled-jobs/{job_id}jobspath:job_id!<integer>-Get details of a specific scheduled job.
PUT/api/scheduled-jobs/{job_id}/pausejobspath:job_id!<integer>, header:authorization, header:x-admin-key, header:x-organization-id-Pause a recurring job. It will not run until resumed.
PUT/api/scheduled-jobs/{job_id}/resumejobspath:job_id!<integer>, header:authorization, header:x-admin-key, header:x-organization-id-Resume a paused recurring job.
GET/api/scheduler-statussystem--Check if the background scheduler is running and view upcoming jobs.
GET/api/screenshotssystemquery:job_id<integer>, query:limit<integer>-List all available screenshots with metadata.
GET/api/screenshots/{filename}systempath:filename!<string>-Serve a screenshot file by filename.
GET/api/settingssettingsheader:authorization, header:x-admin-key, header:x-organization-id--
PUT/api/settingssettingsheader:authorization, header:x-admin-key, header:x-organization-idapplication/json-
GET/api/settings/exportsettingsheader:x-admin-key, header:authorization, header:x-organization-id-Export a lightweight workspace snapshot for operator use.
POST/api/settings/ga/connectgoogle-analyticsheader:authorization, header:x-admin-key, header:x-organization-idapplication/jsonSave GA4 property ID and service account credentials. Validates the connection before persisting.
POST/api/settings/ga/deep-analysisgoogle-analyticsheader:authorization, header:x-admin-key, header:x-organization-id-Trigger a deep competitor analysis using GA data + Gemini. Runs as a background task so the response returns immediately. Auto-creates competitor Brand records and suggested prompt templates.
POST/api/settings/ga/disconnectgoogle-analyticsheader:authorization, header:x-admin-key, header:x-organization-id-Deactivate the GA connection (credentials are retained but marked inactive).
GET/api/settings/ga/oauth/callbackgoogle-analyticsquery:code, query:state--
POST/api/settings/ga/oauth/connectgoogle-analyticsheader:authorization, header:x-admin-key, header:x-organization-idapplication/json-
GET/api/settings/ga/oauth/propertiesgoogle-analyticsquery:token_id!<string>, header:authorization, header:x-admin-key, header:x-organization-id--
POST/api/settings/ga/oauth/startgoogle-analyticsheader:authorization, header:x-admin-key, header:x-organization-id--
GET/api/settings/ga/statusgoogle-analyticsheader:authorization, header:x-admin-key, header:x-organization-id-Return the current GA connection status for the organization.
GET/api/settings/ga/summarygoogle-analyticsquery:days<integer>, header:authorization, header:x-admin-key, header:x-organization-id-Quick traffic summary from GA4 — top sources, pages, countries, referrals. Used by the dashboard and the enriched generation pipeline.
GET/api/settings/metric-formulassettingsheader:authorization, header:x-admin-key, header:x-organization-id--
PUT/api/settings/metric-formulas/{metric_key}settingspath:metric_key!<string>, header:x-admin-key, header:authorization, header:x-organization-idapplication/json-
POST/api/settings/request-account-deletionsettingsheader:x-admin-key, header:authorization, header:x-organization-idapplication/jsonRecord deletion request in audit trail for support/compliance handling.
GET/api/settings/support-ticket-instructionssettingsheader:authorization, header:x-admin-key, header:x-organization-id--
GET/api/settings/support-ticketssettingsquery:limit<integer>, header:authorization, header:x-admin-key, header:x-organization-id--
POST/api/settings/support-ticketssettingsheader:authorization, header:x-admin-key, header:x-organization-idapplication/json-
GET/api/sourcessourcesheader:authorization, header:x-admin-key, header:x-organization-id-Get all citation sources with usage metrics. Metrics include: - Usage: Percentage of unique queries citing this source - Average Citations: Average citation position across all prompts Results are sorted by usage percentage descending.
GET/api/sources/analyticssourcesquery:start_date, query:end_date, query:brand_id, header:authorization, header:x-admin-key, header:x-organization-id-Get comprehensive analytics for citation sources. Includes: - Summary: Total sources, domains, citations, averages - Domain Breakdown: Top 20 domains by citation count - Source Types: Breakdown by type (blog, news, community, review, brand, other) - Top Sources: Top 50 sources by citation count with example prompts Source types are automatically classified based on domain patterns.
POST/api/sources/classifysource-analysisheader:authorization, header:x-admin-key, header:x-organization-id-Auto-classify unclassified sources for the org. For each Source where domain_type is None (and cited by org prompts), apply heuristic classification for domain_type and url_type.
GET/api/sources/domainssource-analysisquery:domain_type, header:authorization, header:x-admin-key, header:x-organization-id-Domain-level analytics. Group sources by domain, compute total citations, used_percentage (citations / total prompts * 100), include domain_type.
GET/api/sources/gap-analysissource-analysisquery:limit<integer>, header:authorization, header:x-admin-key, header:x-organization-id-Gap analysis scoring. For each source, compute gap_score as: competitor_mentions / max(1, your_mentions) normalized to 0-1. your_mentions = primary brand mentions, competitor_mentions = competitor brand mentions. Update gap_score in DB and return sorted by gap_score desc.
GET/api/sources/urlssource-analysisquery:url_type, header:authorization, header:x-admin-key, header:x-organization-id-URL-level analytics. List sources with url_type, citation_count, brands_mentioned (from PromptBrandMention via shared Prompt).
GET/api/stats/databasesystemheader:authorization, header:x-admin-key, header:x-organization-id-Get comprehensive statistics about jobs, prompts, and sources in the database.
GET/api/suggestionsanalyticsheader:authorization, header:x-admin-key, header:x-organization-id-Get AI-powered SEO improvement suggestions based on source data analysis. Analyzes citation sources to provide actionable recommendations: - Content strategy (blog posts, guides) - Community engagement (Reddit, forums) - PR and authority building (news sites) - Technical optimization (comparison pages) - Review collection (G2, Capterra) Includes overall AI SEO score and prioritized suggestions with examples.
POST/api/suggestions/generate-query:brand_id, query:force_refresh<boolean>, header:authorization, header:x-admin-key, header:x-organization-idapplication/jsonGenerate AI-powered SEO suggestions using RAG and LLM. 1. Checks for cached suggestions (unless force_refresh=True) 2. Uses pgvector for semantic similarity search (if available) 3. Calls Claude/GPT with structured output for recommendations 4. Caches the result for future requests
POST/api/suggestions/generate/v2-query:brand_id, query:force_refresh<boolean>, header:authorization, header:x-admin-key, header:x-organization-idapplication/jsonGenerate V2 AI-powered SEO suggestions for professional dashboard.
GET/api/suggestions/status-header:authorization, header:x-admin-key, header:x-organization-id-Get status of AI suggestions feature.
GET/api/support/ticket-instructionssettingsheader:authorization, header:x-admin-key, header:x-organization-id--
GET/api/support/ticketssettingsquery:limit<integer>, header:authorization, header:x-admin-key, header:x-organization-id--
POST/api/support/ticketssettingsheader:authorization, header:x-admin-key, header:x-organization-idapplication/json-
GET/api/tagsprompt-managementheader:authorization, header:x-admin-key, header:x-organization-id--
POST/api/tagsprompt-managementheader:authorization, header:x-admin-key, header:x-organization-idapplication/json-
DELETE/api/tags/{tag_id}prompt-managementpath:tag_id!<integer>, header:authorization, header:x-admin-key, header:x-organization-id--
PUT/api/tags/{tag_id}prompt-managementpath:tag_id!<integer>, header:authorization, header:x-admin-key, header:x-organization-idapplication/json-
GET/api/templatesschedulingquery:active_only<boolean>, header:x-organization-id, header:x-admin-key, header:authorization-Get all prompt templates with routing information. Each template shows: - Which countries the query will run in - The VPN container used for each country - Estimated daily jobs and costs
POST/api/templatesschedulingheader:authorization, header:x-admin-key, header:x-organization-idapplication/jsonCreate a reusable prompt template for scheduled scraping. ## How Country Routing Works Each query is executed separately in EACH specified country: Template: "best seo tools" with countries="it,ch,uk" Creates 3 jobs: 1. Job IT: Client → VPN-IT (Italy IP) → Layer2 → Google 2. Job CH: Client → VPN-CH (Swiss IP) → Layer2 → Google 3. Job UK: Client → VPN-UK (UK IP) → Layer2 → Google ## Tracking Each job tracks: - country: Target country code - origin_ip: Actual IP used (verified) - origin_country: Actual country of IP - origin_verified: True if IP matches target country - layer2_mode: Which proxy layer was used - duration_seconds: Execution time - estimated_cost_usd: Cost estimate ## Example Request json { "name": "SEO Competition", "query": "best e-commerce platform comparison", "countries": "it,ch,uk", "scraper_type": "google_ai", "frequency": "1_per_day", "preferred_layer2": "unlocker" } This creates a template that will: - Run the query once per day - Execute in Italy, Switzerland, and UK (3 jobs) - Use Web Unlocker for reliable Google scraping - Track origin IPs to verify geo-targeting
DELETE/api/templates/{template_id}schedulingpath:template_id!<integer>, header:x-organization-id, header:x-admin-key, header:authorization-Delete a template. This will NOT delete any scheduled jobs created from this template.
GET/api/templates/{template_id}schedulingpath:template_id!<integer>, header:x-organization-id, header:x-admin-key, header:authorization-Get a single template by its ID with full details.
PUT/api/templates/{template_id}schedulingpath:template_id!<integer>, header:authorization, header:x-admin-key, header:x-organization-idapplication/jsonUpdate an existing template. Only provided fields will be updated.
GET/api/topicsprompt-managementheader:authorization, header:x-admin-key, header:x-organization-id--
POST/api/topicsprompt-managementheader:authorization, header:x-admin-key, header:x-organization-idapplication/json-
DELETE/api/topics/{topic_id}prompt-managementpath:topic_id!<integer>, header:authorization, header:x-admin-key, header:x-organization-id--
PUT/api/topics/{topic_id}prompt-managementpath:topic_id!<integer>, header:authorization, header:x-admin-key, header:x-organization-idapplication/json-
GET/api/visibilityanalyticsquery:start_date, query:end_date, query:granularity<string>, query:model, query:country, header:authorization, header:x-admin-key, header:x-organization-id-Get visibility data for charts with flexible date ranges. Parameters: - start_date / end_date: Date range (defaults to last 90 days) - granularity: 'day', 'week', or 'month' (default: 'month') Returns visibility percentages for each brand aggregated by the specified granularity.
GET/api/vpn/ip/{country}vpnpath:country!<string>-Get the current public IP address of a VPN container.
POST/api/vpn/rotate/{country}vpnpath:country!<string>-Trigger IP rotation for a VPN container by restarting it.
GET/api/vpn/serverssystem--Fetch available ProtonVPN servers from the official Gluetun repository. Returns: - VPN provider name - List of available countries - Total server count - Active proxy countries configured in this system Used to see which VPN locations are available for scraping.
GET/api/vpn/statusvpn--Get status of all VPN containers including health and uptime.
GET/api/webhookssettingsheader:authorization, header:x-admin-key, header:x-organization-id--
POST/api/webhookssettingsheader:x-admin-key, header:authorization, header:x-organization-idapplication/json-
POST/api/webhooks/clerkwebhooks--Handle Clerk webhook events. This endpoint receives events from Clerk when users, organizations, or memberships are created, updated, or deleted.
POST/api/webhooks/stripewebhooks--Handle Stripe webhook events for the full subscription lifecycle: - checkout.session.completed - customer.subscription.created - customer.subscription.updated - customer.subscription.deleted - customer.subscription.trial_will_end - invoice.payment_succeeded - invoice.payment_failed - invoice.finalization_failed
DELETE/api/webhooks/{webhook_id}settingspath:webhook_id!<integer>, header:x-admin-key, header:authorization, header:x-organization-id--
PATCH/api/webhooks/{webhook_id}/togglesettingspath:webhook_id!<integer>, header:x-admin-key, header:authorization, header:x-organization-id--
POST/api/xyops/control/dispatch-duexyopsheader:X-XYOPS-API-Keyapplication/jsonTrigger all due recurring scrape templates. Intended for xyOps HTTP Request events/workflows.
POST/api/xyops/control/run-job/{job_id}xyopspath:job_id!<integer>, header:X-XYOPS-API-Key-Run a one-time job immediately, or dispatch a recurring template as a new run.
GET/api/xyops/control/statusxyopsheader:X-XYOPS-API-Key-Returns scheduler control mode, due recurring job counts, and last-hour execution signal for xyOps orchestration.
GET/api/xyops/control/templatesxyopsheader:X-XYOPS-API-Key-Returns production-ready event templates for recurring scrape dispatch and health checks.
GET/v1/brandscustomer-apiheader:X-API-Key!<string>-List brands for the organization.
GET/v1/chatscustomer-apiquery:limit<integer>, query:offset<integer>, header:X-API-Key!<string>-List recent prompts (chats).
GET/v1/chats/{chat_id}customer-apipath:chat_id!<integer>, header:X-API-Key!<string>-Chat detail with response_text.
GET/v1/modelscustomer-apiheader:X-API-Key!<string>-List distinct ai_model values from Prompt table.
GET/v1/promptscustomer-apiheader:X-API-Key!<string>-List prompt templates.
POST/v1/reports/brandscustomer-apiheader:X-API-Key!<string>application/jsonBrands report: aggregate brand mentions in date range.
POST/v1/reports/domainscustomer-apiheader:X-API-Key!<string>application/jsonDomains report: citation counts by domain in date range.
GET/v1/tagscustomer-apiheader:X-API-Key!<string>-List tags.
GET/v1/topicscustomer-apiheader:X-API-Key!<string>-List topics.

Notes

  • Frontend Usage is derived from static analysis of imports and call-sites in frontend/src.
  • Missing usage may indicate admin/internal endpoints, dynamic runtime calls, or currently unused endpoints.
  • Parameters marked with ! are required by OpenAPI.

Unified product and engineering documentation.