{"name":"FlowCast Backend API","version":"1.0.0","phase":"Phase 8 - Settings + Access Control","endpoints":{"health":"/health","auth":{"signup":"POST /auth/signup","login":"POST /auth/login","mfaVerify":"POST /auth/mfa/verify","mfaSetupTotp":"POST /auth/mfa/setup/totp","mfaSetupTotpVerify":"POST /auth/mfa/setup/totp/verify","mfaSetupSms":"POST /auth/mfa/setup/sms","mfaSetupSmsVerify":"POST /auth/mfa/setup/sms/verify","mfaDisable":"POST /auth/mfa/disable","me":"GET /auth/me","logout":"POST /auth/logout","sessions":"GET /auth/sessions","revokeSession":"DELETE /auth/sessions/:id","trustedDevice":"POST /auth/trusted-device","trustedDevices":"GET /auth/trusted-devices","revokeTrustedDevice":"DELETE /auth/trusted-devices/:id","qbo":{"connect":"GET /auth/qbo/connect","callback":"GET /auth/qbo/callback","refresh":"POST /auth/qbo/refresh","disconnect":"DELETE /auth/qbo/disconnect","status":"GET /auth/qbo/status"}},"sync":{"full":"POST /sync/full","incremental":"POST /sync/incremental","status":"GET /sync/status","log":"GET /sync/log"},"overview":"GET /api/org/:orgId/overview","forecast":{"rolling":"GET /api/org/:orgId/forecast?scenario=base","variance":"GET /api/org/:orgId/forecast/variance?period=YYYY-MM","scenarios":"GET /api/org/:orgId/scenarios","updateScenario":"PUT /api/org/:orgId/scenarios/:scenario","batchUpdateScenarios":"PUT /api/org/:orgId/scenarios","allScenarioForecasts":"GET /api/org/:orgId/scenarios/forecast","budget":"GET /api/org/:orgId/budget?year=YYYY","updateBudget":"PUT /api/org/:orgId/budget","cashBalance":"GET /api/org/:orgId/cash-balance","updateCashBalance":"PUT /api/org/:orgId/cash-balance","seedDemo":"POST /api/org/:orgId/seed-demo"},"overrides":{"list":"GET /api/org/:orgId/overrides","create":"POST /api/org/:orgId/overrides","remove":"DELETE /api/org/:orgId/overrides/:id"},"boardPackage":"GET /api/org/:orgId/board-package","cashflowFlags":{"registerStatus":"GET /api/org/:orgId/qbo/register-status?period=weekly|biweekly|monthly","confirmRegister":"POST /api/org/:orgId/qbo/confirm-register","clearanceSummary":"GET /api/org/:orgId/clearance-summary"},"assumptions":{"list":"GET /api/org/:orgId/assumptions?type=revenue|expense","detail":"GET /api/org/:orgId/assumptions/:id","history":"GET /api/org/:orgId/assumptions/:id/history","create":"POST /api/org/:orgId/assumptions","update":"PUT /api/org/:orgId/assumptions/:id","updateScenarios":"PUT /api/org/:orgId/assumptions/:id/scenarios","submit":"POST /api/org/:orgId/assumptions/:id/submit","approve":"POST /api/org/:orgId/assumptions/:id/approve","lock":"POST /api/org/:orgId/assumptions/:id/lock","reverse":"POST /api/org/:orgId/assumptions/:id/reverse"},"seasonality":{"get":"GET /api/org/:orgId/seasonality","updatePreference":"PUT /api/org/:orgId/seasonality/preference"},"onboarding":{"createOrg":"POST /api/onboarding/org"},"extraction":{"planCap":"GET /api/org/:orgId/extraction/plan-cap","upload":"POST /api/org/:orgId/extraction/upload (multipart: file, doc_type)","pending":"GET /api/org/:orgId/extraction/pending","history":"GET /api/org/:orgId/extraction/history","detail":"GET /api/org/:orgId/extraction/:id","confirm":"POST /api/org/:orgId/extraction/:id/confirm","discard":"POST /api/org/:orgId/extraction/:id/discard"},"staff":{"metrics":"GET /api/staff/metrics","orgs":"GET /api/staff/orgs","orgDetail":"GET /api/staff/orgs/:id","orgUsers":"GET /api/staff/orgs/:id/users","orgSyncLog":"GET /api/staff/orgs/:id/sync-log","orgExtractionUsage":"GET /api/staff/orgs/:id/extraction-usage","triggerSync":"POST /api/staff/orgs/:id/trigger-sync","extendGrace":"POST /api/staff/orgs/:id/extend-grace","resendWelcome":"POST /api/staff/orgs/:id/resend-welcome","compExtractions":"POST /api/staff/orgs/:id/comp-extractions","setAtRisk":"POST /api/staff/orgs/:id/at-risk","activity":"GET /api/staff/activity?org_id=&limit=","extractionQueue":"GET /api/staff/extractions"},"billing":{"createCheckout":"POST /api/billing/create-checkout","webhook":"POST /api/billing/webhook","status":"GET /api/billing/status/:orgId"},"settings":{"subscriptionState":"GET /api/org/:orgId/subscription-state","get":"GET /api/org/:orgId/settings","update":"PUT /api/org/:orgId/settings","users":"GET|POST /api/org/:orgId/users","removeUser":"DELETE /api/org/:orgId/users/:id","notifications":"GET|PUT /api/org/:orgId/notifications","extractionUsage":"GET /api/org/:orgId/extraction-usage","invoices":"GET /api/org/:orgId/invoices"},"budgetVsActual":{"summary":"GET /api/org/:orgId/budget-vs-actual?year=YYYY&as_of_month=M","monthly":"GET /api/org/:orgId/budget-vs-actual/monthly?year=YYYY","variance":"GET /api/org/:orgId/budget-vs-actual/variance?period=YYYY-MM","getNote":"GET /api/org/:orgId/budget-vs-actual/notes?period=YYYY-MM&account_id=X","saveNote":"PUT /api/org/:orgId/budget-vs-actual/notes","deleteNote":"DELETE /api/org/:orgId/budget-vs-actual/notes"}}}