Worker Endpoints — the full API surface

There is one Worker — fcr-dashboard-api (a monolith). It exposes 131 routes, all registered in worker/src/handlers/** via register(path, fn) and dispatched by worker/src/router.js. Every route is …workers.dev/<path> and (except the public ones) requires the x-api-key header.

Live route list: GET /health. Grouped below by domain. Verified 2026-05-20.

Naming: dashboard-* is the current convention; copysheet-* and a few bare names are older routes kept for compatibility. Composite endpoints fan out to several others internally.


Account, CRM & enrichment

Route Purpose
dashboard-check-account CRM + active lines + tickets for a subscriber (the most-called tool)
dashboard-check-enrichment Composite: CRM + GBP + keywords + ads + GSC + Ahrefs
dashboard-check-keywords Keyword intelligence + gaps
dashboard-check-tickets Flexible ticket search
dashboard-hubspot / -hubspot-deal-live / -hubspot-deals-search HubSpot deal lookups (live API; BQ is open-only)
dashboard-hubspot-deal-context Prior emails/notes/calls for a deal
dashboard-hubspot-properties / -hubspot-engagements-sync HubSpot property metadata / engagement ingest
dashboard-suspensions, dashboard-reconciliation, dashboard-data-freshness billing/ops state + freshness checks
dashboard-roam-users / -roam-users-backfill person ↔ Roam ↔ HubSpot identity
dashboard-usage-log, dashboard-track-engagement telemetry

Deal brief (precompute pipeline)

Route Purpose
dashboard-compose-deal-brief Fan-out composer → writes KV deal-brief:<id> + BQ audit
dashboard-get-deal-brief Hot KV read (lazy-compose + self-heal on miss)
dashboard-brief-refresh-cron Chunked staleness sweep → enqueues to BRIEF_QUEUE
dashboard-crawl-website Fetch + extract a site's services/CTA/CMS (shared by advisor + brief)

HubSpot card chat

Route Purpose
dashboard-hubspot-chat-start / -status / -complete async job: kick off / poll / finish a card turn
dashboard-hubspot-chat-prewarm seed session-facts + brief on card mount
dashboard-hubspot-chat-history / dashboard-chat-history restore visible chat

AI advisor & vector indexes

Route Purpose
dashboard-ai-advisor The advisor (Claude + ~40 tools). Roam + card both call this.
dashboard-vector-search / -vector-reindex fcr-site-portfolio (similar sites)
dashboard-deals-vector-search / -deals-vector-reindex fcr-deal-history (similar deals)
dashboard-company-knowledge-search / -reindex, dashboard-case-studies-reindex fcr-company-knowledge
dashboard-deal-patterns Mine recurring win/loss themes across a deal cohort

Ads & Merchant Centre

copysheet-ads-stats, dashboard-ads-spend, dashboard-ads-spend-all, dashboard-ads-quality, dashboard-ads-no-conversions, ads-performance-report, ads-aimax-audit (AI Max migration audit), dashboard-gmc-stats.

Ads spend is retail (what the client pays FCR) — never call it media spend.

GBP & reviews

copysheet-dashboard-gbp (cached GBP from BQ), dashboard-gbp-live (live SerpAPI+Pleper), dashboard-gbp-services, dashboard-reviews, dashboard-competitor-enrich.

Analytics (GA4 / GSC)

copysheet-ga4-stats, copysheet-ga4-traffic-sources, copysheet-gsc-stats.

Keywords & category intelligence

dashboard-keyword-intelligence, dashboard-keyword-gap, dashboard-keyword-planner, dashboard-category-keywords, dashboard-category-gaps, dashboard-prospect-categories, dashboard-saymore-keyword-matrix.

Prospecting, discovery & InSites

Route Purpose
dashboard-prospect-intel All-in-one category/prospect intelligence (similar clients, keywords, area)
dashboard-prospect-search Google Maps search (place_id, lat/lng) via SerpAPI
dashboard-prospect-audit / -listings / -categories prospect data lookups
dashboard-prospect-enrich / -pleper-refresh / -engagement / -engagements-refresh enrichment + steady-state refresh drains
dashboard-discovery-suggest / -insights / -df-compare Discovery (Alpha) map flow
dashboard-insites-bq-lookup / -poll / -report-summary / -settings / -share / -suggest InSites audits (DF / LRC)

SERP, grid maps & reports

dashboard-serp-grid, dashboard-serp-local (+-batch), dashboard-serp-screenshot (+-batch), dashboard-grid-map-build (+ the /r/:id shareable viewer), dashboard-area-map, dashboard-map-advisor, dashboard-lrc-methodology, dashboard-proposal-localities / -publish / -retest, dashboard-report-get / -list / -save / -resolve / -annotate, dashboard-meeting-brief-render.

Area, demographics & reach

dashboard-circle-demographics, dashboard-bbox-demographics, dashboard-meta-reach (+-batch).

Ahrefs / SEO

dashboard-ahrefs-seo, dashboard-ahrefs-by-url.

Portfolio, revenue & reporting

dashboard-am-portfolio, dashboard-am-bridge, dashboard-am-attributes, dashboard-am-email-templates, dashboard-am-team-email-templates, dashboard-solution-portfolio, dashboard-revenue-bridge, dashboard-sales-rep-bridge, dashboard-built-websites.

Call tracking (iovox)

dashboard-iovox, dashboard-iovox-all, dashboard-iovox-counts.

Teamwork (projects + tickets)

dashboard-tickets, dashboard-twd-deep-dive, dashboard-teamwork-desk-ticket (+-tickets), dashboard-teamwork-project (+-projects).

SitePro / Yext / build pipeline

dashboard-sitepro, dashboard-yext-listings, dashboard-yext-sync, dashboard-build-pipeline, dashboard-build-detail.

Voice (speech-to-text)

dashboard-stt, dashboard-stt-fetch (Whisper-backed dictation for the card).

Pre-warm & scheduled (also HTTP-exposed for manual runs)

dashboard-prewarm-am-portfolios, dashboard-prewarm-open-deal-subscribers, dashboard-brief-refresh-cron.

Admin / infrastructure

Route Purpose
dashboard-bq-execute Ad-hoc read-only BigQuery
dashboard-bq-admin DDL / writes — requires x-admin-key on top of x-api-key
dashboard-bq-create-table table creation helper
/health route list + status (no auth)
/voice-stt public HTML iframe for dictation

How a route is added

  1. Create worker/src/handlers/<name>.js with register("dashboard-<name>", async (params, env, ctx, request) => {…}).
  2. import "./handlers/<name>.js"; in worker/src/index.js.
  3. Deploy via scripts/deploy-worker.sh (see commit-and-deploy.md). The route is then live at …workers.dev/dashboard-<name> and appears in /health.

FCR Dashboard documentation · generated from docs/ · keep counts verified, not guessed.