{"message":"Welcome to the Call Me Sensei Admin Console API","status":"operational","documentation":"See README-MAGIC-LINK-AUTH.md for detailed documentation","endpoints":{"health":"GET /health","auth":{"sendMagicLink":"POST /api/v1/auth/magic-link (Team members only)","verifyToken":"POST /api/v1/auth/verify","refreshToken":"POST /api/v1/auth/refresh","getCurrentUser":"GET /api/v1/auth/me (Auth required)","logout":"POST /api/v1/auth/logout (Auth required)"},"scenarios":{"search":"GET /api/v1/scenarios/search (Auth required)","getDetails":"GET /api/v1/scenarios/:scenario_id (Auth required)","uploadSingle":"POST /api/v1/scenarios (Auth required)","uploadBulk":"POST /api/v1/scenarios/bulk (Auth required, multipart/form-data)","delete":"DELETE /api/v1/scenarios/:scenario_id (Auth required)","bulkDelete":"POST /api/v1/scenarios/bulk-delete (Auth required)"},"sensei":{"search":"GET /api/v1/sensei/search (Auth required)","getDetails":"GET /api/v1/sensei/:id (Auth required)","updateMetadata":"PATCH /api/v1/sensei/:id/metadata (Auth required)","updateProfile":"PATCH /api/v1/sensei/:id/profile (Auth required)","updateMedia":"PATCH /api/v1/sensei/:id/media (Auth required)","uploadFile":"POST /api/v1/sensei/storage/upload (Auth required, multipart/form-data)","getAllLocalizations":"GET /api/v1/sensei/:senseiId/localizations (Auth required)","getLocalization":"GET /api/v1/sensei/:senseiId/localizations/:languageCode (Auth required)","saveLocalization":"PUT /api/v1/sensei/:senseiId/localizations/:languageCode (Auth required)","deleteLocalization":"DELETE /api/v1/sensei/:senseiId/localizations/:languageCode (Auth required)","bulkUploadLocalizations":"POST /api/v1/sensei/:senseiId/localizations/upload (Auth required, multipart/form-data)"},"emotionVideos":{"getTree":"GET /api/v1/sensei/:senseiId/emotion-videos (Auth required)","createNodes":"POST /api/v1/sensei/:senseiId/emotion-videos (Auth required)","updateNode":"PATCH /api/v1/sensei/:senseiId/emotion-videos/:nodeId (Auth required)","deleteNode":"DELETE /api/v1/sensei/:senseiId/emotion-videos/:nodeId (Auth required)","approveNode":"POST /api/v1/sensei/:senseiId/emotion-videos/:nodeId/approve (Auth required)","rejectNode":"POST /api/v1/sensei/:senseiId/emotion-videos/:nodeId/reject (Auth required)","uploadMedia":"POST /api/v1/sensei/:senseiId/emotion-videos/:nodeId/upload (Auth required, multipart/form-data)","generatePrompt":"POST /api/v1/sensei/:senseiId/emotion-videos/generate-prompt (Auth required)","generateImage":"POST /api/v1/sensei/:senseiId/emotion-videos/:nodeId/generate-image (Auth required)","generateVideo":"POST /api/v1/sensei/:senseiId/emotion-videos/:nodeId/generate-video (Auth required)","generationStatus":"GET /api/v1/sensei/:senseiId/emotion-videos/:nodeId/generation-status (Auth required)","seedanceTasks":"GET /api/v1/sensei/seedance/tasks?page_size=20&status=succeeded (Auth required)","getHeartPrompt":"GET /api/v1/sensei/:senseiId/heart-prompt (Auth required)","saveHeartPrompt":"PUT /api/v1/sensei/:senseiId/heart-prompt (Auth required)","syncHeartPrompt":"POST /api/v1/sensei/:senseiId/heart-prompt/sync (Auth required, X-Hub-Authorization header)"},"dashboard":{"getAll":"GET /api/v1/dashboard/all?gender={all|male|female}&characterFilter={all|top5|top10|top20} (Auth required, Admin only)","getLive":"GET /api/v1/dashboard/live?windowSeconds={30-3600} (Auth required, Admin only)","getTrends":"GET /api/v1/dashboard/trends?gender={all|male|female}&characterFilter={all|top5|top10|top20} (Auth required, Admin only)","compareGender":"GET /api/v1/dashboard/compare-gender (Auth required, Admin only)","getCharacterDashboard":"GET /api/v1/dashboard/character/:id/all (Auth required, Admin only)","getCharacterTrends":"GET /api/v1/dashboard/character/:id/trends (Auth required, Admin only)","getScenarioDashboard":"GET /api/v1/dashboard/scenario/:id/all (Auth required, Admin only)","getScenarioTrends":"GET /api/v1/dashboard/scenario/:id/trends (Auth required, Admin only)"},"analytics":{"charactersList":"GET /api/v1/analytics/characters/list?period={period}&gender={gender}&language={language} (Auth required, Admin only)","charactersCompare":"GET /api/v1/analytics/characters/compare?period={period}&preset={top5|top10|top20}&characterIds={ids} (Auth required, Admin only)","retentionCohort":"GET /api/v1/analytics/retention/cohort?period={period}&granularity={daily|weekly|monthly}&maxOffset={n}&gender={gender} (Auth required, Admin only)"},"search":{"universal":"GET /api/v1/search?q={query}&types={character,scenario,location}&limit={5} (Auth required, Admin only)"},"mcp":{"endpoint":"POST /api/v1/mcp (Auth required, JSON-RPC MCP endpoint, read-only sensei basic info tools)","protectedResourceMetadata":"GET /.well-known/oauth-protected-resource","authorizationServerMetadata":"GET /api/v1/mcp/oauth or GET /.well-known/oauth-authorization-server/api/v1/mcp/oauth","registerClient":"POST /api/v1/mcp/oauth/register","authorize":"GET/POST /api/v1/mcp/oauth/authorize","token":"POST /api/v1/mcp/oauth/token"},"locations":{"search":"GET /api/v1/locations/search?keyword={keyword}&sort_by={id|name|created_at|updated_at}&sort_order={asc|desc}&limit={50}&offset={0} (Auth required)","getDetails":"GET /api/v1/locations/:locationId (Auth required)","create":"POST /api/v1/locations (Auth required)","update":"PATCH /api/v1/locations/:locationId (Auth required)","delete":"DELETE /api/v1/locations/:locationId (Auth required)","uploadFile":"POST /api/v1/locations/storage/upload (Auth required, multipart/form-data)"},"localizations":{"getLocalizations":"GET /api/v1/scenarios/:scenarioId/localizations (Auth required)","saveLocalization":"PUT /api/v1/scenarios/:scenarioId/localizations/:languageCode (Auth required)","deleteLocalization":"DELETE /api/v1/scenarios/:scenarioId/localizations/:languageCode (Auth required)","uploadSingle":"POST /api/v1/scenarios/:scenarioId/localizations/upload (Auth required, multipart/form-data)","bulkUpload":"POST /api/v1/scenarios/localizations/bulk-upload (Auth required, multipart/form-data)"},"agentConfigs":{"updateSystemPrompts":"POST /api/v1/agent-configs/update-system-prompts (Auth required, multipart/form-data, Saakuru JWT in X-Hub-Authorization header)","updateMemoryConfigs":"POST /api/v1/agent-configs/update-memory-configs (Auth required, multipart/form-data, Saakuru JWT in X-Hub-Authorization header)","saakuruAuth":{"loginSignup":"POST /api/v1/agent-configs/auth/login-signup (Public, sends OTP)","verifyOtp":"POST /api/v1/agent-configs/auth/verify-otp (Public, returns Saakuru JWT)"}},"feedback":{"search":"GET /api/v1/feedback/search?keyword={keyword}&status={status}&priority={priority}&category={category}&platform={platform}&limit={20}&offset={0} (Auth required)","getDetails":"GET /api/v1/feedback/:id (Auth required)","updateStatus":"PATCH /api/v1/feedback/:id/status (Auth required)","updatePriority":"PATCH /api/v1/feedback/:id/priority (Auth required)","respond":"POST /api/v1/feedback/:id/respond (Auth required)","assign":"PATCH /api/v1/feedback/:id/assign (Auth required)","update":"PATCH /api/v1/feedback/:id (Auth required)","stats":"GET /api/v1/feedback/stats/summary (Auth required)"}},"timestamp":"2026-06-22T11:07:52.468Z"}