Metrics API Host Configuration Fix
Date: 2026-01-18Issue: Dashboards broken -
NEXT_PUBLIC_API_URL incorrectly points to payroll-backend-prod, causing metrics endpoints to fail with OPTIONS 404.
Root Cause Analysis
Current (BROKEN) Configuration
NEXT_PUBLIC_API_URL=https://payroll-backend-prod-238826317621.us-central1.run.app❌- Problem: Metrics endpoints (
/api/v1/ceo-metrics,/api/v1/commissions,/api/v1/top-agents, etc.) are NOT implemented onpayroll-backend-prod - Result: OPTIONS preflight requests return 404, breaking all dashboard functionality
Historical Service Architecture
Two Production Cloud Run Services (by design):-
payroll-pipeline-cbs (Config Plane + Metrics)
- Service URL:
https://payroll-pipeline-cbs-238826317621.us-central1.run.app - Purpose: Rate Plans, admin config, AND metrics/CEO dashboards
- Endpoints:
/api/v1/ceo-metrics/api/v1/commissions/api/v1/top-agents/api/v1/top-businesses/api/v1/growth-loss*/api/v1/admin/rate-plans/*/api/v1/admin/*(other admin endpoints)
- Service URL:
-
payroll-backend-prod (System of Record)
- Service URL:
https://payroll-backend-prod-238826317621.us-central1.run.app - Purpose: Agent identities, assignments, hierarchy, audit-grade logic
- Endpoints:
/api/v1/admin/hierarchy/*/api/v1/admin/agents/resolver/api/v1/admin/agent-profiles/*/api/v1/ai/*
- Service URL:
Evidence from Codebase
Metrics routers are included inapi/main.py:
- Line 2240:
app.include_router(ceo_metrics_router, prefix="/api/v1", tags=["CEO Metrics"]) - Line 2276:
app.include_router(dashboard_router, prefix="/api/v1", tags=["Dashboard"]) - Line 2181:
app.include_router(agents_router, prefix="/api/v1", tags=["Agents"])
api/routes/ceo_metrics.py-/api/v1/ceo-metricsapi/routes/commissions.py-/api/v1/commissionsapi/routes/dashboard.py-/api/v1/top-businesses,/api/v1/top-agents,/api/v1/growth-loss*api/routes/agents.py-/api/v1/leaderboard
payroll-pipeline-cbs serves metrics:
BACKEND_VALIDATION_SUMMARY.md: “payroll-pipeline-cbs (Main Backend)” serves CEO metricsDEPLOYMENT_GUIDE.md: Test commands usepayroll-pipeline-cbs-238826317621.us-central1.run.appfor CEO metricsPHASE2D_CHECKPOINT.md: Servicepayroll-pipeline-cbs-00093-lwlserves/api/v1/commissions,/api/v1/leaderboard,/api/v1/growth-loss
Corrected Vercel PROD Configuration
Required Environment Variables
Routing Logic (from dashboard/src/lib/apiClient.ts)
-
Hierarchy endpoints (
/api/v1/admin/hierarchy/*,/api/v1/admin/agents/resolver): → UsesNEXT_PUBLIC_HIERARCHY_API_URL→payroll-backend-prod -
Other admin endpoints (
/api/v1/admin/*): → UsesNEXT_PUBLIC_PIPELINE_API_URL→payroll-pipeline-cbs -
Metrics/CEO endpoints (
/api/v1/ceo-metrics,/api/v1/commissions,/api/v1/top-*, etc.): → UsesNEXT_PUBLIC_API_URL→payroll-pipeline-cbs
Smoke Test Commands
1. Metrics Endpoint (CEO Dashboard)
2. Admin Rate Plans Endpoint
3. Hierarchy Resolver Endpoint
Browser DevTools Verification
After updating Vercel env vars and redeploying:-
Open Dashboard:
https://payroll-pipeline-cbs.vercel.app/ceo - Open DevTools → Network tab
-
Verify requests:
CEO Metrics call:
- URL:
https://payroll-pipeline-cbs-238826317621.us-central1.run.app/api/v1/ceo-metrics?period_label=2025-12-01 - Status:
200 OK - CORS headers present:
Access-Control-Allow-Origin: https://payroll-pipeline-cbs.vercel.app
- URL:
https://payroll-pipeline-cbs-238826317621.us-central1.run.app/api/v1/admin/rate-plans - Status:
200 OK
- URL:
https://payroll-backend-prod-238826317621.us-central1.run.app/api/v1/admin/agents/resolver - Status:
200 OK
- URL:
Action Items
-
✅ Update Vercel Production Environment Variables:
- Set
NEXT_PUBLIC_API_URL=https://payroll-pipeline-cbs-238826317621.us-central1.run.app - Keep
NEXT_PUBLIC_PIPELINE_API_URL=https://payroll-pipeline-cbs-238826317621.us-central1.run.app - Keep
NEXT_PUBLIC_HIERARCHY_API_URL=https://payroll-backend-prod-238826317621.us-central1.run.app
- Set
-
✅ Trigger Vercel Redeploy:
- Push a no-op commit OR manually trigger redeploy in Vercel dashboard
-
✅ Verify Dashboard Functionality:
- CEO Dashboard loads metrics
- No CORS errors in console
- All API calls return 200 OK
Summary
Correct Metrics API Host:https://payroll-pipeline-cbs-238826317621.us-central1.run.app
Why: This service implements all metrics endpoints (ceo-metrics, commissions, top-agents, top-businesses, growth-loss) as confirmed by:
- Router inclusion in
api/main.py - Historical deployment validation documents
- Test commands in deployment guides
NEXT_PUBLIC_API_URL in Vercel to point to payroll-pipeline-cbs, not payroll-backend-prod.