{"message":"EaseGrow Cloudflare Worker API","version":"1.0.0","endpoints":{"health":"/health","privacyPolicy":"/privacy-policy","accountDeletion":"/account-deletion (Google Play account deletion request page)","debug":{"users":"/debug/users","config":"/debug/config","triggerScheduled":"POST /debug/trigger-scheduled (manual cron trigger for local testing)"},"api":{"saveCard":"POST /api/save-card","auditTags":"POST /api/audit-tags","deleteCard":"DELETE /api/cards/:id","batchDeleteCards":"POST /api/cards/batch-delete","optimizeCard":"POST /api/cards/optimize","chat":"POST /api/chat","chatStream":"POST /api/chat/stream","writing":"POST /api/writing","writingStream":"POST /api/writing/stream","conversations":"GET /api/chat/conversations","conversation":"GET /api/chat/conversations/:id","tts":"POST /api/tts","stt":"POST /api/stt","upload":"POST /upload","files":"GET /files/:key","billing":{"summary":"GET /api/billing/summary","records":"GET /api/billing/records","dailyCosts":"GET /api/billing/daily-costs"},"embeddings":{"search":"POST /api/cards/search-similar","stats":"GET /api/embeddings/stats","process":"POST /api/embeddings/process","health":"GET /api/embeddings/health"},"notifications":{"settings":"GET /api/notifications/settings","updateSettings":"PUT /api/notifications/settings","registerToken":"POST /api/notifications/register-token","unregisterToken":"POST /api/notifications/unregister-token","logs":"GET /api/notifications/logs"},"insights":{"analyzeCasualCards":"POST /api/insights/casual-cards"},"userProfile":{"get":"GET /api/user-profile","analyze":"POST /api/user-profile/analyze"},"dailyQuestion":{"getDailyQuestion":"GET /api/daily-question","answerQuestion":"POST /api/daily-question/answer","getHistory":"GET /api/daily-question/history"},"sync":{"pull":"POST /api/sync/pull (delta sync - get changes since last sync)","push":"POST /api/sync/push (batch push local changes)","status":"GET /api/sync/status (get sync metadata)","full":"POST /api/sync/full (combined push + pull for efficiency)"},"flowPacks":{"list":"GET /api/flow-packs","detail":"GET /api/flow-packs/:id","download":"GET /api/flow-packs/:id/download","checkUpdates":"POST /api/flow-packs/check-updates"},"dailyInspiration":{"get":"GET /api/daily-inspiration","refresh":"POST /api/daily-inspiration/refresh","save":"POST /api/daily-inspiration/save","history":"GET /api/daily-inspiration/history"},"flow":{"summary":"GET /api/flow/summary (balance, streak, redemptions)","balance":"GET /api/flow/balance","claimDaily":"POST /api/flow/claim-daily","rewardReview":"POST /api/flow/reward/review","rewardCardCreate":"POST /api/flow/reward/card-create","rewardCardShare":"POST /api/flow/reward/card-share","redeemProTrial":"POST /api/flow/redeem/pro-trial","redeemQuota":"POST /api/flow/redeem/quota","history":"GET /api/flow/history","redemptions":"GET /api/flow/redemptions","redemptionConfig":"GET /api/flow/config/redemptions","earningRules":"GET /api/flow/config/earning-rules","streak":"GET /api/flow/streak","inviteGenerate":"POST /api/flow/invite/generate","inviteUse":"POST /api/flow/invite/use","invitations":"GET /api/flow/invitations"},"admin":{"console":"GET /admin (Management Console UI)","flowPacksConsole":"GET /admin/flow-packs (Card Pack Management UI)","users":"GET /api/admin/users (requires x-admin-token header)","stats":"GET /api/admin/stats (requires x-admin-token header)","userBilling":"GET /api/admin/users/:userId/billing (requires x-admin-token header)","userCards":"GET /api/admin/users/:userId/cards (requires x-admin-token header)","duplicates":{"report":"GET /api/admin/duplicates/report (get duplicate cards report)","preview":"GET /api/admin/duplicates/preview (preview cleanup - dry run)","cleanup":"POST /api/admin/duplicates/cleanup (execute cleanup - requires confirmation)"},"vectors":{"stats":"GET /api/admin/vectors/stats (get vector statistics)","userVectors":"GET /api/admin/vectors/users/:userId (list user vectors)","testSimilarity":"POST /api/admin/vectors/test-similarity (test text similarity)","search":"POST /api/admin/vectors/search (search similar cards)","cardEmbedding":"GET /api/admin/vectors/cards/:cardId (get card embedding details)","regenerate":"POST /api/admin/vectors/cards/:cardId/regenerate (regenerate card embedding)"},"flowPacks":{"list":"GET /api/admin/flow-packs","create":"POST /api/admin/flow-packs","get":"GET /api/admin/flow-packs/:id","getFull":"GET /api/admin/flow-packs/:id/full","update":"PUT /api/admin/flow-packs/:id","delete":"DELETE /api/admin/flow-packs/:id","getCards":"GET /api/admin/flow-packs/:id/cards","createCard":"POST /api/admin/flow-packs/:id/cards","updateCard":"PUT /api/admin/flow-packs/:id/cards/:cardId","deleteCard":"DELETE /api/admin/flow-packs/:id/cards/:cardId","uploadImage":"POST /api/admin/upload-to-r2","batchImport":"POST /api/admin/flow-packs/:id/batch-import","clone":"POST /api/admin/flow-packs/:id/clone","export":"GET /api/admin/flow-packs/:id/export","import":"POST /api/admin/flow-packs/import","quickCreate":"POST /api/admin/flow-packs/quick-create","generateCover":"POST /api/admin/flow-packs/:id/generate-cover","updateStatus":"PATCH /api/admin/flow-packs/:id/status","batchStatus":"POST /api/admin/flow-packs/batch-status","stats":"GET /api/admin/flow-packs-stats"}}},"auth":{"googleStart":"/auth/google/start","googleCallback":"/auth/google/callback","googleLogin":"POST /api/v1/auth/googleLogin"},"user":"/me"}}