{"openapi":"3.1.0","info":{"title":"Beckett Platform","description":"Multi-tenant AI platform","version":"0.1.0"},"paths":{"/health":{"get":{"summary":"Health Check","description":"Health check endpoint. Returns 503 when database is unhealthy.","operationId":"health_check_health_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HealthResponse"}}}}}}},"/health/detailed":{"get":{"summary":"Health Check Detailed","description":"Detailed health check with per-service status and response time.","operationId":"health_check_detailed_health_detailed_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DetailedHealthResponse"}}}}}}},"/api/waitlist/signup":{"post":{"summary":"Waitlist Signup","description":"The pre-launch waitlist is closed; historical records remain available.","operationId":"waitlist_signup_api_waitlist_signup_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/_WaitlistSignupRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/waitlist/status/{referral_code}":{"get":{"summary":"Waitlist Status","description":"Public: check waitlist position and referral count by referral code.","operationId":"waitlist_status_api_waitlist_status__referral_code__get","parameters":[{"name":"referral_code","in":"path","required":true,"schema":{"type":"string","title":"Referral Code"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/waitlist/count":{"get":{"summary":"Waitlist Count","description":"Public: total waitlist signups for social proof.","operationId":"waitlist_count_api_waitlist_count_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/email/unsubscribe":{"get":{"summary":"Email Unsubscribe Get","description":"Public: unsubscribe from marketing or digest emails via signed token link.","operationId":"email_unsubscribe_get_api_email_unsubscribe_get","parameters":[{"name":"token","in":"query","required":true,"schema":{"type":"string","title":"Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"summary":"Email Unsubscribe Post","description":"Public: RFC 8058 one-click unsubscribe (called by email clients).","operationId":"email_unsubscribe_post_api_email_unsubscribe_post","parameters":[{"name":"token","in":"query","required":true,"schema":{"type":"string","title":"Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/email/tips":{"post":{"summary":"Email Tips Opt In","description":"Public: turn on tips and product updates from the welcome-email link.\n\nPOST-only, triggered by an explicit button on the landing confirmation\npage, so link scanners that prefetch email URLs can't opt anyone in.","operationId":"email_tips_opt_in_api_email_tips_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EmailTipsOptInRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/survey/options":{"get":{"summary":"Survey Options","description":"Public: shared whitelists for the beta survey with labels.","operationId":"survey_options_api_survey_options_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/survey/beta":{"get":{"summary":"Get Survey Beta","description":"Public: validate token + return prefill state for the survey form.","operationId":"get_survey_beta_api_survey_beta_get","parameters":[{"name":"token","in":"query","required":true,"schema":{"type":"string","description":"HMAC-signed survey token","title":"Token"},"description":"HMAC-signed survey token"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"summary":"Post Survey Beta","description":"Public: submit (or upsert within 24h) the beta qualifier survey.","operationId":"post_survey_beta_api_survey_beta_post","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SurveySubmitRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/auth/config":{"get":{"summary":"Get Auth Config","description":"Public endpoint returning auth configuration for frontend.","operationId":"get_auth_config_api_auth_config_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/auth/login":{"post":{"summary":"Request Magic Link","description":"Request a magic link for login.\n\nAlways returns {\"status\": \"sent\"} to prevent email enumeration.","operationId":"request_magic_link_api_auth_login_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LoginRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/auth/verify":{"post":{"summary":"Verify Magic Link Endpoint","description":"Verify magic link and issue JWT token.\n\nReturns cookies for web/admin clients, tokens in body for iOS.","operationId":"verify_magic_link_endpoint_api_auth_verify_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/VerifyRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/auth/verify-code":{"post":{"summary":"Verify Sign In Code","description":"Sign in with the 6-digit code sent with a web sign-in link.\n\nThe code stands for its link, so this finishes exactly like the link: the\nsame account creation, session, and cookies.","operationId":"verify_sign_in_code_api_auth_verify_code_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CodeVerifyRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/auth/password-login":{"post":{"summary":"Password Login","description":"Login with email + password. Used by Apple review accounts and any user with a password set.","operationId":"password_login_api_auth_password_login_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PasswordLoginRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TokenResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/auth/password":{"post":{"summary":"Set Or Change Password","description":"Set the first password or change an existing password for the current user.","operationId":"set_or_change_password_api_auth_password_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PasswordSetRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/auth/apple":{"post":{"summary":"Apple Sign In","description":"Authenticate via Apple Sign In identity token.\n\nDecodes the Apple identity token (JWT), verifies the RS256 signature\nagainst Apple's public JWKS, validates iss/aud/exp claims, then\nfinds or creates the user and issues a session JWT.","operationId":"apple_sign_in_api_auth_apple_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppleAuthRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TokenResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/auth/apple/link":{"post":{"summary":"Link Apple Sign In","description":"Link the current account to an Apple identity.","operationId":"link_apple_sign_in_api_auth_apple_link_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppleAuthRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/auth/phone/send-code":{"post":{"summary":"Phone Send Code","description":"Phone OTP login is retired and intentionally unavailable.","operationId":"phone_send_code_api_auth_phone_send_code_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PhoneSendCodeRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/auth/phone/verify":{"post":{"summary":"Phone Verify","description":"Phone OTP login is retired and intentionally unavailable.","operationId":"phone_verify_api_auth_phone_verify_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PhoneVerifyRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TokenResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/auth/logout":{"post":{"summary":"Logout","description":"Logout and revoke the current product or admin session.","operationId":"logout_api_auth_logout_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/auth/refresh":{"post":{"summary":"Refresh Token Endpoint","description":"Refresh access token using a refresh token.\n\nAccepts refresh token from httpOnly cookie (web/admin) or request body (iOS).\nImplements single-use rotation with theft detection via token families.\nDropped-response recovery: if the replacement session was never used\n(auth_used=False), reissue in place instead of revoking the family (#1427).","operationId":"refresh_token_endpoint_api_auth_refresh_post","requestBody":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/RefreshRequest"},{"type":"null"}],"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/auth/exchange":{"post":{"summary":"Exchange Session Endpoint","description":"One-time migration: exchange a Bearer token for httpOnly cookies.\n\nUsed by web/admin frontends to silently migrate from localStorage tokens.\nTemporary endpoint — remove after all old sessions expire (~7 days).","operationId":"exchange_session_endpoint_api_auth_exchange_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/auth/extension":{"post":{"summary":"Create Extension Session","description":"Explicitly connect the first-party clipper using its own revocable session.","operationId":"create_extension_session_api_auth_extension_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TokenResponse"}}}}}}},"/api/user/me":{"get":{"summary":"Get Current User Info","description":"Get current user info.","operationId":"get_current_user_info_api_user_me_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}},"patch":{"summary":"Update User","description":"Update current user info.","operationId":"update_user_api_user_me_patch","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateUserRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/imessage/link-code":{"post":{"summary":"Issue Imessage Link Code","description":"Create a short-lived code the user sends to Beckett over Messages.","operationId":"issue_imessage_link_code_api_imessage_link_code_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/open-links/{token}":{"get":{"summary":"Resolve Open Link","description":"Resolve an opaque Universal Link token after authentication.","operationId":"resolve_open_link_api_open_links__token__get","parameters":[{"name":"token","in":"path","required":true,"schema":{"type":"string","title":"Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/user/communication-preferences":{"get":{"summary":"Get Communication Preferences","description":"Get user-facing communication preferences.","operationId":"get_communication_preferences_api_user_communication_preferences_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CommunicationPreferencesResponse"}}}}}},"patch":{"summary":"Update Communication Preferences","description":"Update user-facing communication preferences and the bounded injected profile.","operationId":"update_communication_preferences_api_user_communication_preferences_patch","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateCommunicationPreferencesRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CommunicationPreferencesResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/user/complete-onboarding":{"post":{"summary":"Complete Onboarding","description":"Mark onboarding as complete.","operationId":"complete_onboarding_api_user_complete_onboarding_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/user/early-supporter-offer/redeem":{"post":{"summary":"Redeem Early Supporter Offer","description":"Grant the early-supporter thank-you and, if setup never finished, skip the rest of it.","operationId":"redeem_early_supporter_offer_api_user_early_supporter_offer_redeem_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/user/account":{"delete":{"summary":"Delete User Account","description":"Permanently delete the user's account and all associated data.","operationId":"delete_user_account_api_user_account_delete","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/user/export":{"post":{"summary":"Request User Data Export","description":"Queue a privacy-scrubbed markdown export to the user's email.\n\nRate-limited to 1/day per user (domain-prefixed limiter key, #1564).\nBoth success and rate-limit denials are logged to `EventLog` as\n`ActionType.DATA_EXPORT` so the admin dashboard surfaces abuse patterns\n(repeated 429s from one user).","operationId":"request_user_data_export_api_user_export_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/admin/exports":{"get":{"summary":"List Export Events","description":"Admin view of all data export requests — success + denied — for\nabuse monitoring (#1564).","operationId":"list_export_events_api_admin_exports_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":100,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/user/engagement":{"get":{"summary":"Get Engagement","description":"Get user's engagement state including stage, streak, and unlocks.","operationId":"get_engagement_api_user_engagement_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/user/engagement/celebration-shown":{"post":{"summary":"Mark Celebration Shown","description":"Mark a celebration as shown to prevent repeats.","operationId":"mark_celebration_shown_api_user_engagement_celebration_shown_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CelebrationShownRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/user/engagement/levels":{"get":{"summary":"Get Engagement Levels","description":"Get detailed stage progression data for the levels page.","operationId":"get_engagement_levels_api_user_engagement_levels_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/dashboard/config":{"get":{"summary":"Get Dashboard Config","description":"Return user's dashboard widget config, merging any new defaults.","operationId":"get_dashboard_config_api_dashboard_config_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}},"put":{"summary":"Update Dashboard Config","description":"Save user's dashboard widget config.","operationId":"update_dashboard_config_api_dashboard_config_put","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DashboardConfigRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/home/briefing":{"get":{"summary":"Get Home Briefing","description":"Return structured briefing data for the Home page.","operationId":"get_home_briefing_api_home_briefing_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/insights/topic-trends":{"get":{"summary":"Get Topic Trends","description":"Get topic trends chart data over time.","operationId":"get_topic_trends_api_insights_topic_trends_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/insights/recommendations":{"get":{"summary":"Get Recommendations","description":"Get AI-powered movie or book recommendations.","operationId":"get_recommendations_api_insights_recommendations_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/insights/recommendations/dismiss":{"post":{"summary":"Dismiss Recommendation","description":"Dismiss a recommendation and blacklist it from future suggestions.","operationId":"dismiss_recommendation_api_insights_recommendations_dismiss_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DismissRecommendationRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/insights/monthly":{"get":{"summary":"Get Monthly Insights","description":"Get AI-generated monthly insights narrative.","operationId":"get_monthly_insights_api_insights_monthly_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/insights/this-time-last-month":{"get":{"summary":"Get This Time Last Month","description":"Get AI summary of what user was focused on ~30 days ago.","operationId":"get_this_time_last_month_api_insights_this_time_last_month_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/admin/help-analytics":{"get":{"summary":"Get Help Analytics","description":"Get help analytics for admin dashboard.","operationId":"get_help_analytics_api_admin_help_analytics_get","parameters":[{"name":"period","in":"query","required":false,"schema":{"type":"string","default":"30d","title":"Period"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/conversation-starters/usage":{"get":{"summary":"Get Conversation Starter Usage","description":"Admin: aggregate conversation starter usage without opener text.","operationId":"get_conversation_starter_usage_api_admin_conversation_starters_usage_get","parameters":[{"name":"period","in":"query","required":false,"schema":{"type":"string","default":"30d","title":"Period"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/guide":{"get":{"summary":"Get Guide","description":"The education catalog for this platform, with this account's progress, answers,\nand Things to try.","operationId":"get_guide_api_guide_get","parameters":[{"name":"platform","in":"query","required":false,"schema":{"enum":["ios","web"],"type":"string","default":"web","title":"Platform"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/guide/things-to-try/hide":{"post":{"summary":"Hide Guide Things To Try","description":"Hide for today: back tomorrow, with the three it showed moved to the back.","operationId":"hide_guide_things_to_try_api_guide_things_to_try_hide_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/guide/things-to-try/dismiss":{"post":{"summary":"Dismiss Guide Things To Try","operationId":"dismiss_guide_things_to_try_api_guide_things_to_try_dismiss_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/onboarding/answers":{"put":{"summary":"Put Onboarding Answers","description":"Store the answers and set up the schedules the rhythms ask for. Idempotent.","operationId":"put_onboarding_answers_api_onboarding_answers_put","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/OnboardingAnswersRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/chat/turns/{client_turn_id}/backgrounded":{"post":{"summary":"Mark Chat Turn Backgrounded","description":"Mark a client chat turn as backgrounded without touching generation.","operationId":"mark_chat_turn_backgrounded_api_chat_turns__client_turn_id__backgrounded_post","parameters":[{"name":"client_turn_id","in":"path","required":true,"schema":{"type":"string","title":"Client Turn Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/chat":{"post":{"summary":"Chat","description":"Validate a turn, acquire its per-user lease, and build the response.","operationId":"chat_api_chat_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChatRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/onboarding/chat":{"post":{"summary":"Onboarding Chat","description":"Run one turn of onboarding's conversation before the trial.\n\nRequires AI consent. Accounts without full access are held to the pre-trial\nmessages (see app/services/onboarding_first_action.py); a turn rejected before\nany model work is refunded.","operationId":"onboarding_chat_api_onboarding_chat_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChatRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/chat/history":{"get":{"summary":"Get Chat History","description":"Get recent chat history, optionally scoped to a project or channel.","operationId":"get_chat_history_api_chat_history_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":50,"title":"Limit"}},{"name":"project_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Project Id"}},{"name":"channel","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Channel"}},{"name":"before_timestamp","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Before Timestamp"}},{"name":"before_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Before Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/integrations/status":{"get":{"summary":"Get Integration Status","description":"Get status of user's connected integrations.","operationId":"get_integration_status_api_integrations_status_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/integrations/{integration}":{"delete":{"summary":"Disconnect Integration","description":"Disconnect an integration.","operationId":"disconnect_integration_api_integrations__integration__delete","parameters":[{"name":"integration","in":"path","required":true,"schema":{"type":"string","title":"Integration"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/desktop/enroll":{"post":{"summary":"Enroll Admin Desktop","description":"Enroll this native Admin installation after an ordinary admin login.","operationId":"enroll_admin_desktop_api_admin_desktop_enroll_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdminDesktopEnrollRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/desktop/exchange":{"post":{"summary":"Exchange Admin Desktop Credential","description":"Exchange a Keychain-held device credential for normal rotating tokens.","operationId":"exchange_admin_desktop_credential_api_admin_desktop_exchange_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdminDesktopCredentialRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/desktop/revoke":{"post":{"summary":"Revoke Admin Desktop Credential","description":"Revoke the current installation's persistent device credential.","operationId":"revoke_admin_desktop_credential_api_admin_desktop_revoke_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdminDesktopCredentialRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/login":{"post":{"summary":"Admin Login","description":"Admin login with email + password. Issues JWT same as magic link flow.","operationId":"admin_login_api_admin_login_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdminLoginRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/billing/browser-trial":{"get":{"summary":"Get Browser Trial Status","operationId":"get_browser_trial_status_api_billing_browser_trial_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BrowserTrialStatus"}}}}}}},"/api/billing/browser-trial/start":{"post":{"summary":"Start Browser Trial","operationId":"start_browser_trial_api_billing_browser_trial_start_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BrowserTrialStatus"}}}}}}},"/api/billing/status":{"get":{"summary":"Get Billing Status","description":"Get backend subscription entitlement status.","operationId":"get_billing_status_api_billing_status_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/billing/web-checkout/config":{"get":{"summary":"Get Web Checkout Config","operationId":"get_web_checkout_config_api_billing_web_checkout_config_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebCheckoutConfig"}}}}}}},"/api/billing/revenuecat/sync":{"post":{"summary":"Sync Revenuecat Entitlement","description":"Refetch RevenueCat subscriber state for the authenticated Beckett user.","operationId":"sync_revenuecat_entitlement_api_billing_revenuecat_sync_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/webhooks/revenuecat":{"post":{"summary":"Revenuecat Webhook","description":"Handle RevenueCat webhooks.","operationId":"revenuecat_webhook_api_webhooks_revenuecat_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/webhooks/resend":{"post":{"summary":"Resend Webhook","description":"Handle Resend webhook events (bounces, complaints). No auth — verified via svix signature.","operationId":"resend_webhook_api_webhooks_resend_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/analytics/event":{"post":{"summary":"Track Analytics Event","description":"Track an analytics event (public, no auth, rate limited).","operationId":"track_analytics_event_api_analytics_event_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AnalyticsEventRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/analytics/events":{"post":{"summary":"Track Client Analytics Events","description":"Track aggregate analytics and bounded account-linked onboarding diagnostics.","operationId":"track_client_analytics_events_api_analytics_events_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ClientAnalyticsBatchRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IngestionCountsResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/onboarding/milestones":{"post":{"summary":"Ingest Onboarding Milestones","description":"Accept privacy-safe pre-account onboarding milestones with idempotency.","operationId":"ingest_onboarding_milestones_api_onboarding_milestones_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/OnboardingMilestoneBatchRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IngestionCountsResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/onboarding/journeys/claim":{"post":{"summary":"Claim Onboarding Journey","description":"Bind an anonymous onboarding flow to the authenticated account exactly once.","operationId":"claim_onboarding_journey_api_onboarding_journeys_claim_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/OnboardingJourneyClaimRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OnboardingClaimResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/onboarding":{"get":{"summary":"Get Admin Onboarding","operationId":"get_admin_onboarding_api_admin_onboarding_get","parameters":[{"name":"timezone","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Timezone"}},{"name":"window","in":"query","required":false,"schema":{"type":"string","pattern":"^(24h|today|7d|30d)$","default":"30d","title":"Window"}},{"name":"flow_version","in":"query","required":false,"schema":{"type":"integer","minimum":1,"default":2,"title":"Flow Version"}},{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"type":"string","pattern":"^(NOT_STARTED|IN_PROGRESS|STALLED|COMPLETED)$"},{"type":"null"}],"title":"Status"}},{"name":"milestone","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Milestone"}},{"name":"search","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Search"}},{"name":"sort","in":"query","required":false,"schema":{"type":"string","pattern":"^(last_progress|started|email|status)$","default":"last_progress","title":"Sort"}},{"name":"direction","in":"query","required":false,"schema":{"type":"string","pattern":"^(asc|desc)$","default":"desc","title":"Direction"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":500,"minimum":1,"default":50,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OnboardingReportResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/onboarding/users/{user_id}":{"get":{"summary":"Get Admin Onboarding User","operationId":"get_admin_onboarding_user_api_admin_onboarding_users__user_id__get","parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"User Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OnboardingJourneyDetailResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/weather":{"get":{"summary":"Get Weather","description":"Get current weather for the user's location. Populates weather cache.","operationId":"get_weather_api_weather_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/home/insights":{"get":{"summary":"Get Home Insights","description":"Return today's proactive insights for the home page.\n\nReturns the most recent pending/delivered insights for the user,\nfiltered to today's date. Used by the home page to display briefing\ncards and meeting prep.","operationId":"get_home_insights_api_home_insights_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/home/insights/{insight_id}/dismiss":{"post":{"summary":"Dismiss Insight","description":"Dismiss a proactive insight.","operationId":"dismiss_insight_api_home_insights__insight_id__dismiss_post","parameters":[{"name":"insight_id","in":"path","required":true,"schema":{"type":"string","title":"Insight Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/activity":{"get":{"summary":"Get Admin Activity","description":"Return the canonical admin activity dashboard.","operationId":"get_admin_activity_api_admin_activity_get","parameters":[{"name":"timezone","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Timezone"}},{"name":"window","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"default":"24h","title":"Window"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":500,"minimum":1,"default":50,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Offset"}},{"name":"search","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Search"}},{"name":"sort","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"default":"last_active","title":"Sort"}},{"name":"direction","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"default":"desc","title":"Direction"}},{"name":"include_internal","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Include Internal"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/overview":{"get":{"summary":"Get Admin Overview","description":"Return the founder command-center summary from canonical operational sources.","operationId":"get_admin_overview_api_admin_overview_get","parameters":[{"name":"timezone","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Timezone"}},{"name":"window","in":"query","required":false,"schema":{"type":"string","pattern":"^(24h|today|7d|30d)$","default":"24h","title":"Window"}},{"name":"include_internal","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Include Internal"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdminOverviewResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/promotions":{"get":{"summary":"Get Admin Promotions","description":"Return aggregate RevenueCat metrics for the shared monthly offer.","operationId":"get_admin_promotions_api_admin_promotions_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdminPromotionReportResponse"}}}}}}},"/api/admin/users/{user_id}/activity":{"get":{"summary":"Get Admin User Activity","description":"Return canonical admin activity for one user.","operationId":"get_admin_user_activity_api_admin_users__user_id__activity_get","parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"User Id"}},{"name":"timezone","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Timezone"}},{"name":"window","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"default":"24h","title":"Window"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/users/{user_id}":{"patch":{"summary":"Update User Status","description":"Update user status (admin only). Used for kill switch and cap management.","operationId":"update_user_status_api_admin_users__user_id__patch","parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"User Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdminUserUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/users/{user_id}/subscription":{"get":{"summary":"Get Admin User Subscription","description":"Inspect a user's subscription entitlement state (admin only).","operationId":"get_admin_user_subscription_api_admin_users__user_id__subscription_get","parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"User Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"patch":{"summary":"Update Admin User Subscription","description":"Apply admin subscription cohort/comp overrides (admin only).","operationId":"update_admin_user_subscription_api_admin_users__user_id__subscription_patch","parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"User Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdminSubscriptionUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/users/{user_id}/subscription/sync":{"post":{"summary":"Sync Admin User Subscription","description":"Force a RevenueCat subscriber refetch for a user (admin only).","operationId":"sync_admin_user_subscription_api_admin_users__user_id__subscription_sync_post","parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"User Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/users/{user_id}/subscription/support-notes":{"get":{"summary":"List Admin Subscription Support Notes","description":"List subscription support notes/action history for a user (admin only).","operationId":"list_admin_subscription_support_notes_api_admin_users__user_id__subscription_support_notes_get","parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"User Id"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":25,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"summary":"Create Admin Subscription Support Note","description":"Create a manual subscription support note for a user (admin only).","operationId":"create_admin_subscription_support_note_api_admin_users__user_id__subscription_support_notes_post","parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"User Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdminSubscriptionSupportNoteCreate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/usage":{"get":{"summary":"Get Usage Metrics","description":"Get usage metrics (admin only). No content, just counts.","operationId":"get_usage_metrics_api_admin_usage_get","parameters":[{"name":"timezone","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Timezone"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/monitoring":{"get":{"summary":"Get Admin Monitoring","description":"Return operational health metrics for memory retrieval and AI efficiency.","operationId":"get_admin_monitoring_api_admin_monitoring_get","parameters":[{"name":"timezone","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Timezone"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/errors":{"get":{"summary":"Get Admin Errors","description":"Return recent backend 4xx/5xx/rate-limit events for admin visibility.","operationId":"get_admin_errors_api_admin_errors_get","parameters":[{"name":"period","in":"query","required":false,"schema":{"type":"string","default":"24h","title":"Period"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":500,"minimum":1,"default":100,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/ai-events":{"get":{"summary":"Get Admin Ai Events","description":"Return AI fallback and integrity events for admin visibility.","operationId":"get_admin_ai_events_api_admin_ai_events_get","parameters":[{"name":"period","in":"query","required":false,"schema":{"type":"string","default":"24h","title":"Period"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":500,"minimum":1,"default":100,"title":"Limit"}},{"name":"event_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Event Type"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/usage/tokens":{"get":{"summary":"Get Token Usage","description":"Platform-wide token usage summary (admin only).","operationId":"get_token_usage_api_admin_usage_tokens_get","parameters":[{"name":"period","in":"query","required":false,"schema":{"type":"string","default":"30d","title":"Period"}},{"name":"timezone","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Timezone"}},{"name":"avg_cost_start","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"ISO date for avg cost calculation start (default: 2026-02-22)","title":"Avg Cost Start"},"description":"ISO date for avg cost calculation start (default: 2026-02-22)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/usage/tokens/users":{"get":{"summary":"Get Token Usage By User","description":"Per-user token usage breakdown (admin only).","operationId":"get_token_usage_by_user_api_admin_usage_tokens_users_get","parameters":[{"name":"period","in":"query","required":false,"schema":{"type":"string","default":"30d","title":"Period"}},{"name":"sort_by","in":"query","required":false,"schema":{"type":"string","default":"cost","title":"Sort By"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":50,"title":"Limit"}},{"name":"timezone","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Timezone"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/usage/tokens/users/{user_id}":{"get":{"summary":"Get User Token Detail","description":"Single user token usage detail (admin only).","operationId":"get_user_token_detail_api_admin_usage_tokens_users__user_id__get","parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"User Id"}},{"name":"period","in":"query","required":false,"schema":{"type":"string","default":"30d","title":"Period"}},{"name":"timezone","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Timezone"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/usage/caps":{"get":{"summary":"Get Usage Caps","description":"Per-user usage cap status (admin only).","operationId":"get_usage_caps_api_admin_usage_caps_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":500,"minimum":1,"default":200,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Offset"}},{"name":"search","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Search"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/usage/caps/history":{"get":{"summary":"Get Cap Override History","description":"Cap override audit log (admin only).","operationId":"get_cap_override_history_api_admin_usage_caps_history_get","parameters":[{"name":"user_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"User Id"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":500,"minimum":1,"default":100,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/backfill-coordinates":{"post":{"summary":"Admin Backfill Coordinates","description":"Geocode users who have home_city but missing coordinates (admin only).\n\nOne-time backfill for users whose client-side geocoding failed silently.\nSafe to re-run — skips users who already have coordinates.","operationId":"admin_backfill_coordinates_api_admin_backfill_coordinates_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/admin/morning-briefs/recover-today":{"post":{"summary":"Admin Recover Today Morning Briefs","description":"One-shot admin recovery for today's missing morning briefs.","operationId":"admin_recover_today_morning_briefs_api_admin_morning_briefs_recover_today_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/auth/request-access":{"post":{"summary":"Request Access","description":"The invite-request funnel is closed; acquisition now begins on iPhone.","operationId":"request_access_api_auth_request_access_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AccessRequestInput"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/explore/stats":{"get":{"summary":"Get Explore Stats","description":"Get dashboard stats for Brain Explorer.","operationId":"get_explore_stats_api_explore_stats_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/people/{person_id}/context":{"get":{"summary":"Read Person Context","operationId":"read_person_context_api_people__person_id__context_get","parameters":[{"name":"person_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Person Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PersonContextResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/people/{person_id}/notes":{"post":{"summary":"Create Person Note","operationId":"create_person_note_api_people__person_id__notes_post","parameters":[{"name":"person_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Person Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateNoteRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PersonContextNote"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/entities/{entity_id}/notes":{"post":{"summary":"Create Entity Note","description":"Add a note about a place or thing from its detail page.","operationId":"create_entity_note_api_entities__entity_id__notes_post","parameters":[{"name":"entity_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Entity Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateNoteRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PersonContextNote"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/explore/notes":{"post":{"summary":"Create Explore Note","description":"Create a note with source_type=MANUAL and queue async pipeline processing.","operationId":"create_explore_note_api_explore_notes_post","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateNoteRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"summary":"Get Explore Notes","description":"Get notes and their filtered total. Category IDs match any selected category.\n\nIDs take precedence over the legacy single category name; text search is\nintersected with the category selection. Pagination never changes total.","operationId":"get_explore_notes_api_explore_notes_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":100,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Offset"}},{"name":"category","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Category"}},{"name":"search","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Search"}},{"name":"sort","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Sort"}},{"name":"category_ids","in":"query","required":false,"schema":{"anyOf":[{"type":"array","items":{"type":"string","format":"uuid"},"maxItems":50},{"type":"null"}],"title":"Category Ids"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExploreNotesResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/explore/notes/references":{"get":{"summary":"Resolve Explore Note References","description":"Where each persisted note reference lives now (active, merged, captured, or gone).","operationId":"resolve_explore_note_references_api_explore_notes_references_get","parameters":[{"name":"ids","in":"query","required":true,"schema":{"type":"array","items":{"type":"string","format":"uuid"},"minItems":1,"maxItems":100,"title":"Ids"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NoteReferencesResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/explore/notes/{note_id}":{"get":{"summary":"Get Explore Note","description":"Get a single note with its entities and categories.","operationId":"get_explore_note_api_explore_notes__note_id__get","parameters":[{"name":"note_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Note Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"patch":{"summary":"Patch Note","description":"Update note content and/or tags.","operationId":"patch_note_api_explore_notes__note_id__patch","parameters":[{"name":"note_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Note Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PatchNoteRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"summary":"Delete Note","description":"Hard delete a note.","operationId":"delete_note_api_explore_notes__note_id__delete","parameters":[{"name":"note_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Note Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/explore/entities":{"get":{"summary":"Get Explore Entities","description":"Get paginated list of entities with note counts.","operationId":"get_explore_entities_api_explore_entities_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":100,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Offset"}},{"name":"subtype","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Subtype"}},{"name":"search","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Search"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/explore/entities/{entity_id}":{"get":{"summary":"Get Explore Entity","description":"Get a single entity with its linked notes.","operationId":"get_explore_entity_api_explore_entities__entity_id__get","parameters":[{"name":"entity_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Entity Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"patch":{"summary":"Patch Entity","description":"Update entity with optimistic locking.","operationId":"patch_entity_api_explore_entities__entity_id__patch","parameters":[{"name":"entity_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Entity Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PatchEntityRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/people/{person_id}/birthday":{"put":{"summary":"Update Person Birthday","description":"Link or create a person's annual birthday event.","operationId":"update_person_birthday_api_people__person_id__birthday_put","parameters":[{"name":"person_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Person Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/explore/categories":{"get":{"summary":"Get Explore Categories","description":"Get active categories with note and file usage counts.","operationId":"get_explore_categories_api_explore_categories_get","parameters":[{"name":"usage","in":"query","required":false,"schema":{"type":"string","default":"all","title":"Usage"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/explore/graph":{"get":{"summary":"Get Explore Graph","description":"Get graph data for D3 visualization.","operationId":"get_explore_graph_api_explore_graph_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":200,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/import/summaries":{"post":{"summary":"Import Summaries","description":"Bulk import knowledge from other AI assistants.\n\nRequest body: {\"entries\": [\"text1\", \"text2\", ...]}\nMax 20 entries, 8000 chars each, 200 notes total.","operationId":"import_summaries_api_import_summaries_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/imports/{import_id}":{"get":{"summary":"Get Import Status","operationId":"get_import_status_api_imports__import_id__get","parameters":[{"name":"import_id","in":"path","required":true,"schema":{"type":"string","title":"Import Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/journal":{"post":{"summary":"Submit Journal Entry","description":"Submit a journal entry for processing. Returns SSE stream with stage events.","operationId":"submit_journal_entry_api_journal_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/journal/entries":{"get":{"summary":"Get Journal Entries","description":"List past journal entries with previews.","operationId":"get_journal_entries_api_journal_entries_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":20,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/journal/entries/{entry_id}":{"get":{"summary":"Get Journal Entry Detail","description":"Get full journal entry with linked notes.","operationId":"get_journal_entry_detail_api_journal_entries__entry_id__get","parameters":[{"name":"entry_id","in":"path","required":true,"schema":{"type":"string","title":"Entry Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"patch":{"summary":"Update Journal Entry","description":"Update a journal entry's raw text.","operationId":"update_journal_entry_api_journal_entries__entry_id__patch","parameters":[{"name":"entry_id","in":"path","required":true,"schema":{"type":"string","title":"Entry Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"summary":"Delete Journal Entry","description":"Delete a journal entry. Linked notes/tasks/events are kept but unlinked.","operationId":"delete_journal_entry_api_journal_entries__entry_id__delete","parameters":[{"name":"entry_id","in":"path","required":true,"schema":{"type":"string","title":"Entry Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/journal/prompts":{"get":{"summary":"Get Journal Prompts","description":"Get AI-generated journaling prompts.","operationId":"get_journal_prompts_api_journal_prompts_get","parameters":[{"name":"count","in":"query","required":false,"schema":{"type":"integer","maximum":4,"minimum":1,"default":1,"title":"Count"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/clips":{"post":{"summary":"Create Clip","description":"Create a web clip and process it asynchronously.","operationId":"create_clip_api_clips_post","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateClipRequest"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"summary":"List Clips","description":"List user's clips with optional status filter.","operationId":"list_clips_api_clips_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":20,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Offset"}},{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/clips/{clip_id}":{"get":{"summary":"Get Clip","description":"Get a single clip with its linked notes.","operationId":"get_clip_api_clips__clip_id__get","parameters":[{"name":"clip_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Clip Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"summary":"Delete Clip","description":"Delete a clip (keeps generated notes).","operationId":"delete_clip_api_clips__clip_id__delete","parameters":[{"name":"clip_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Clip Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/clips/{clip_id}/retry":{"post":{"summary":"Retry Clip","description":"Retry processing a failed clip.","operationId":"retry_clip_api_clips__clip_id__retry_post","parameters":[{"name":"clip_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Clip Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/clips/{clip_id}/remember":{"post":{"summary":"Remember Clip","description":"Add a bookmark's facts to the user's notes.\n\nSynchronous so FastAPI runs it in a worker thread: classification makes\nmodel calls and uses its own tenant session.","operationId":"remember_clip_api_clips__clip_id__remember_post","parameters":[{"name":"clip_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Clip Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/reports/preview":{"post":{"summary":"Preview Report Endpoint","description":"Preview source counts and evidence samples before creating a report.","operationId":"preview_report_endpoint_api_reports_preview_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReportPreviewRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/reports":{"post":{"summary":"Create Report Endpoint","description":"Create a durable native report generation job.","operationId":"create_report_endpoint_api_reports_post","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReportCreateRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"summary":"List Reports Endpoint","description":"List native reports for the current user.","operationId":"list_reports_endpoint_api_reports_get","parameters":[{"name":"report_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Report Type"}},{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status"}},{"name":"include_archived","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Include Archived"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":20,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/reports/{report_id}/content":{"patch":{"summary":"Update Report Content Endpoint","description":"Persist user edits to the native report body.","operationId":"update_report_content_endpoint_api_reports__report_id__content_patch","parameters":[{"name":"report_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Report Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReportContentUpdateRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/reports/{report_id}/retry":{"post":{"summary":"Retry Report Endpoint","description":"Retry a failed report generation job.","operationId":"retry_report_endpoint_api_reports__report_id__retry_post","parameters":[{"name":"report_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Report Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/reports/{report_id}/cancel":{"post":{"summary":"Cancel Report Endpoint","description":"Cancel an active report generation job.","operationId":"cancel_report_endpoint_api_reports__report_id__cancel_post","parameters":[{"name":"report_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Report Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/reports/{report_id}/regenerate":{"post":{"summary":"Regenerate Report Endpoint","description":"Create a new linked report from the existing report criteria.","operationId":"regenerate_report_endpoint_api_reports__report_id__regenerate_post","parameters":[{"name":"report_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Report Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/reports/{report_id}/archive":{"patch":{"summary":"Archive Report Endpoint","description":"Archive a report without deleting any explicit PDF export.","operationId":"archive_report_endpoint_api_reports__report_id__archive_patch","parameters":[{"name":"report_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Report Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/reports/{report_id}/export":{"post":{"summary":"Export Report Endpoint","description":"Render the current saved native report state to a PDF file.","operationId":"export_report_endpoint_api_reports__report_id__export_post","parameters":[{"name":"report_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Report Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/reports/{report_id}/download":{"get":{"summary":"Download Report Export Endpoint","description":"Download the latest explicit PDF export for a report.","operationId":"download_report_export_endpoint_api_reports__report_id__download_get","parameters":[{"name":"report_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Report Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/reports/{report_id}":{"get":{"summary":"Get Report Endpoint","description":"Get full native report content/status.","operationId":"get_report_endpoint_api_reports__report_id__get","parameters":[{"name":"report_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Report Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/explore/subtypes":{"get":{"summary":"Get Entity Subtypes","description":"Get distinct entity subtypes with counts.","operationId":"get_entity_subtypes_api_explore_subtypes_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/explore/people":{"get":{"summary":"Get Explore People","description":"Get people entities, optionally filtered by contact info availability.","operationId":"get_explore_people_api_explore_people_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":100,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Offset"}},{"name":"search","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Search"}},{"name":"has_contact_info","in":"query","required":false,"schema":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Has Contact Info"}},{"name":"sort","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Sort"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/explore/library":{"get":{"summary":"Get Explore Library","description":"Get library entities (books, movies, music, podcasts).","operationId":"get_explore_library_api_explore_library_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":100,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Offset"}},{"name":"search","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Search"}},{"name":"subtype","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Subtype"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/explore/places":{"get":{"summary":"Get Explore Places","description":"Get places entities.","operationId":"get_explore_places_api_explore_places_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":100,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Offset"}},{"name":"search","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Search"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/explore/things":{"get":{"summary":"Get Explore Things","description":"Get everything else (tools, projects, companies, etc.).","operationId":"get_explore_things_api_explore_things_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":100,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Offset"}},{"name":"search","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Search"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/explore/section-counts":{"get":{"summary":"Get Explore Section Counts","description":"Get counts for each explore section.","operationId":"get_explore_section_counts_api_explore_section_counts_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/explore/notes/{note_id}/archive":{"post":{"summary":"Archive Note","description":"Archive a note.","operationId":"archive_note_api_explore_notes__note_id__archive_post","parameters":[{"name":"note_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Note Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ArchiveNoteRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/explore/notes/{note_id}/categories":{"post":{"summary":"Assign Note Category","description":"Add a category to a note.","operationId":"assign_note_category_api_explore_notes__note_id__categories_post","parameters":[{"name":"note_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Note Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AssignCategoryRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/explore/notes/{note_id}/categories/{category_id}":{"delete":{"summary":"Remove Note Category","description":"Remove a category from a note.","operationId":"remove_note_category_api_explore_notes__note_id__categories__category_id__delete","parameters":[{"name":"note_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Note Id"}},{"name":"category_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Category Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/explore/notes/{note_id}/entities/{entity_id}":{"delete":{"summary":"Unlink Note Entity","description":"Remove entity link from a note.","operationId":"unlink_note_entity_api_explore_notes__note_id__entities__entity_id__delete","parameters":[{"name":"note_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Note Id"}},{"name":"entity_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Entity Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/explore/notes/{note_id}/entities":{"post":{"summary":"Link Note Entity","description":"Manually link an entity to a note.","operationId":"link_note_entity_api_explore_notes__note_id__entities_post","parameters":[{"name":"note_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Note Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LinkEntityRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/explore/entities/{entity_id}/archive":{"post":{"summary":"Archive Entity","description":"Archive an entity.","operationId":"archive_entity_api_explore_entities__entity_id__archive_post","parameters":[{"name":"entity_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Entity Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/explore/entities/{entity_id}/merge":{"post":{"summary":"Merge Entities","description":"Merge source entity into target entity.","operationId":"merge_entities_api_explore_entities__entity_id__merge_post","parameters":[{"name":"entity_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Entity Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MergeEntityRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/entities/{entity_id}/relationships":{"get":{"summary":"Get Entity Relationships","description":"Get all relationships for an entity.","operationId":"get_entity_relationships_api_entities__entity_id__relationships_get","parameters":[{"name":"entity_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Entity Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"summary":"Create Entity Relationship","description":"Create a relationship between two entities.","operationId":"create_entity_relationship_api_entities__entity_id__relationships_post","parameters":[{"name":"entity_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Entity Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateEntityRelationshipRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/explore/entities/{entity_id}/relationships":{"get":{"summary":"Get Entity Relationships","description":"Get all relationships for an entity.","operationId":"get_entity_relationships_api_explore_entities__entity_id__relationships_get","parameters":[{"name":"entity_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Entity Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"summary":"Create Entity Relationship","description":"Create a relationship between two entities.","operationId":"create_entity_relationship_api_explore_entities__entity_id__relationships_post","parameters":[{"name":"entity_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Entity Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateEntityRelationshipRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/entity-relationships/{relationship_id}":{"delete":{"summary":"Delete Entity Relationship","description":"Delete an entity relationship.","operationId":"delete_entity_relationship_api_entity_relationships__relationship_id__delete","parameters":[{"name":"relationship_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Relationship Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/explore/relationships/{relationship_id}":{"delete":{"summary":"Delete Entity Relationship","description":"Delete an entity relationship.","operationId":"delete_entity_relationship_api_explore_relationships__relationship_id__delete","parameters":[{"name":"relationship_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Relationship Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/entities":{"post":{"summary":"Create Entity","description":"Create a new entity (person, place, etc.) manually from the UI.","operationId":"create_entity_api_entities_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateEntityRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/explore/categories/{category_id}":{"patch":{"summary":"Patch Category","description":"Update category name and/or description.","operationId":"patch_category_api_explore_categories__category_id__patch","parameters":[{"name":"category_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Category Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PatchCategoryRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/explore/categories/{category_id}/archive":{"post":{"summary":"Archive Category","description":"Archive a category (keeps existing note assignments).","operationId":"archive_category_api_explore_categories__category_id__archive_post","parameters":[{"name":"category_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Category Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/explore/categories/merge":{"post":{"summary":"Merge Categories","description":"Merge source category into target. Reassigns all notes, archives source.","operationId":"merge_categories_api_explore_categories_merge_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MergeCategoryRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/explore/search":{"get":{"summary":"Search Explore","description":"Semantic search across notes and entities.","operationId":"search_explore_api_explore_search_get","parameters":[{"name":"q","in":"query","required":true,"schema":{"type":"string","title":"Q"}},{"name":"type","in":"query","required":false,"schema":{"type":"string","default":"all","title":"Type"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":20,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/messages/search":{"get":{"summary":"Search Messages Endpoint","description":"Search conversation history via semantic + keyword search. Used by iOS search.","operationId":"search_messages_endpoint_api_messages_search_get","parameters":[{"name":"q","in":"query","required":true,"schema":{"type":"string","title":"Q"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":10,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/messages/{message_id}/context":{"get":{"summary":"Get Message Context","description":"Get a message with surrounding conversation context. Used by iOS search result tap.","operationId":"get_message_context_api_messages__message_id__context_get","parameters":[{"name":"message_id","in":"path","required":true,"schema":{"type":"string","title":"Message Id"}},{"name":"before","in":"query","required":false,"schema":{"type":"integer","default":5,"title":"Before"}},{"name":"after","in":"query","required":false,"schema":{"type":"integer","default":5,"title":"After"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/cleanup/chat":{"post":{"summary":"Cleanup Chat","description":"Conversational cleanup agent through the LLM gateway.","operationId":"cleanup_chat_api_cleanup_chat_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CleanupChatRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/explore/files":{"get":{"summary":"List Files","description":"List uploaded files and images. Use source=generated for AI-generated images.","operationId":"list_files_api_explore_files_get","parameters":[{"name":"search","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Search"}},{"name":"entity_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Entity Id"}},{"name":"category","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Category"}},{"name":"source","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Source"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"default":50,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/files/upload":{"post":{"summary":"Upload File","description":"Upload a file and return its ExternalLink ID.\n\nstatus param: 'pending' (default, for chat uploads - hidden from files page until\nreferenced in a chat message) or 'active' (for direct uploads via files page).","operationId":"upload_file_api_files_upload_post","parameters":[{"name":"status","in":"query","required":false,"schema":{"type":"string","default":"pending","title":"Status"}}],"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_upload_file_api_files_upload_post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/explore/files/{file_id}":{"delete":{"summary":"Delete File","description":"Delete a file/image and its S3 object.","operationId":"delete_file_api_explore_files__file_id__delete","parameters":[{"name":"file_id","in":"path","required":true,"schema":{"type":"string","title":"File Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"patch":{"summary":"Update File Title","description":"Update a user-facing file title without changing the stored filename.","operationId":"update_file_title_api_explore_files__file_id__patch","parameters":[{"name":"file_id","in":"path","required":true,"schema":{"type":"string","title":"File Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FileTitleUpdateRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"summary":"Get File Detail","description":"Get file detail with categories and entities.","operationId":"get_file_detail_api_explore_files__file_id__get","parameters":[{"name":"file_id","in":"path","required":true,"schema":{"type":"string","title":"File Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/files/{file_id}/save":{"patch":{"summary":"Save Generated Image","description":"Save a generated image to the user's Files library.","operationId":"save_generated_image_api_files__file_id__save_patch","parameters":[{"name":"file_id","in":"path","required":true,"schema":{"type":"string","title":"File Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/files/{file_id}/content":{"get":{"summary":"Stream File Content","description":"Proxy file content from S3 - more reliable than presigned URLs on Railway.","operationId":"stream_file_content_api_files__file_id__content_get","parameters":[{"name":"file_id","in":"path","required":true,"schema":{"type":"string","title":"File Id"}},{"name":"max_dimension","in":"query","required":false,"schema":{"anyOf":[{"type":"integer","maximum":1600,"minimum":32},{"type":"null"}],"title":"Max Dimension"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/documents/{doc_id}/download":{"get":{"summary":"Download Document","description":"Download a generated document as a PDF.","operationId":"download_document_api_documents__doc_id__download_get","parameters":[{"name":"doc_id","in":"path","required":true,"schema":{"type":"string","title":"Doc Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/documents/{doc_id}/info":{"get":{"summary":"Get Document Info","description":"Check if a generated document has been saved to Files.","operationId":"get_document_info_api_documents__doc_id__info_get","parameters":[{"name":"doc_id","in":"path","required":true,"schema":{"type":"string","title":"Doc Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/explore/files/{file_id}/categories":{"post":{"summary":"Link File Category","description":"Link a category to a file.","operationId":"link_file_category_api_explore_files__file_id__categories_post","parameters":[{"name":"file_id","in":"path","required":true,"schema":{"type":"string","title":"File Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FileCategoryRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/explore/files/{file_id}/categories/{category_id}":{"delete":{"summary":"Unlink File Category","description":"Unlink a category from a file.","operationId":"unlink_file_category_api_explore_files__file_id__categories__category_id__delete","parameters":[{"name":"file_id","in":"path","required":true,"schema":{"type":"string","title":"File Id"}},{"name":"category_id","in":"path","required":true,"schema":{"type":"string","title":"Category Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/explore/files/{file_id}/entities":{"post":{"summary":"Link File Entity","description":"Link an entity to a file.","operationId":"link_file_entity_api_explore_files__file_id__entities_post","parameters":[{"name":"file_id","in":"path","required":true,"schema":{"type":"string","title":"File Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FileEntityRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/explore/files/{file_id}/entities/{entity_id}":{"delete":{"summary":"Unlink File Entity","description":"Unlink an entity from a file.","operationId":"unlink_file_entity_api_explore_files__file_id__entities__entity_id__delete","parameters":[{"name":"file_id","in":"path","required":true,"schema":{"type":"string","title":"File Id"}},{"name":"entity_id","in":"path","required":true,"schema":{"type":"string","title":"Entity Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/library/summary":{"get":{"summary":"Get Library Summary","description":"Dashboard data for the library page.","operationId":"get_library_summary_api_library_summary_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/library/movies":{"get":{"summary":"Get Library Movies","description":"Paginated movie grid.","operationId":"get_library_movies_api_library_movies_get","parameters":[{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status"}},{"name":"genre","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Genre"}},{"name":"genres","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Genres"}},{"name":"creators","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Creators"}},{"name":"providers","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Providers"}},{"name":"loved","in":"query","required":false,"schema":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Loved"}},{"name":"sort","in":"query","required":false,"schema":{"type":"string","default":"date","title":"Sort"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":30,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Offset"}},{"name":"search","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Search"}},{"name":"list_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"List Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/library/books":{"get":{"summary":"Get Library Books","description":"Paginated book grid.\n\n`subject=` is retained for backward-compat and maps to the same JSONB\nsubjects array as the plural `genres=`. `author=` maps to `creators=`.","operationId":"get_library_books_api_library_books_get","parameters":[{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status"}},{"name":"subject","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Subject"}},{"name":"author","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Author"}},{"name":"genres","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Genres"}},{"name":"creators","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Creators"}},{"name":"loved","in":"query","required":false,"schema":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Loved"}},{"name":"sort","in":"query","required":false,"schema":{"type":"string","default":"date","title":"Sort"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":30,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Offset"}},{"name":"search","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Search"}},{"name":"list_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"List Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/library/shows":{"get":{"summary":"Get Library Shows","description":"Paginated TV show grid.","operationId":"get_library_shows_api_library_shows_get","parameters":[{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status"}},{"name":"genre","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Genre"}},{"name":"genres","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Genres"}},{"name":"creators","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Creators"}},{"name":"providers","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Providers"}},{"name":"loved","in":"query","required":false,"schema":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Loved"}},{"name":"sort","in":"query","required":false,"schema":{"type":"string","default":"date","title":"Sort"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":30,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Offset"}},{"name":"search","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Search"}},{"name":"list_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"List Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/library/{media_type}/facets":{"get":{"summary":"Get Library Facets","description":"Genre + creator facet counts for the iOS Library filter sheet.\n\nSemantics:\n  - Genre facets honor status + loved + search + creators (ignore `genres`).\n  - Creator facets honor status + loved + search + genres (ignore `creators`).\n  - Grouping is case-insensitive (LOWER()). Display name is the dominant\n    stored casing (MODE() WITHIN GROUP) — preserves \"Flannery O'Connor\"\n    and \"Martin Scorsese\" rather than title-casing them.\n  - Order: count desc, then alpha asc.\n  - Defense-in-depth `user_id` filter stays on every query.","operationId":"get_library_facets_api_library__media_type__facets_get","parameters":[{"name":"media_type","in":"path","required":true,"schema":{"type":"string","title":"Media Type"}},{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status"}},{"name":"genres","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Genres"}},{"name":"creators","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Creators"}},{"name":"providers","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Providers"}},{"name":"loved","in":"query","required":false,"schema":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Loved"}},{"name":"search","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Search"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/library/recipes/tags":{"get":{"summary":"Get Recipe Tags","description":"Get available recipe tags with counts.","operationId":"get_recipe_tags_api_library_recipes_tags_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}},"post":{"summary":"Create Recipe Tag","description":"Apply a new (or existing) tag to one or more user recipes.\n\nTags only exist when applied — there is no orphaned-tag table. The \"+ New Tag\"\nUX in iOS / web routes through here with a tag name + recipe picker selection.","operationId":"create_recipe_tag_api_library_recipes_tags_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateRecipeTagRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/library/recipes/tags/{tag_name}":{"put":{"summary":"Rename Recipe Tag","description":"Rename a tag across all user's recipes.","operationId":"rename_recipe_tag_api_library_recipes_tags__tag_name__put","parameters":[{"name":"tag_name","in":"path","required":true,"schema":{"type":"string","title":"Tag Name"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RenameTagRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"summary":"Delete Recipe Tag","description":"Remove a tag from all user's recipes.","operationId":"delete_recipe_tag_api_library_recipes_tags__tag_name__delete","parameters":[{"name":"tag_name","in":"path","required":true,"schema":{"type":"string","title":"Tag Name"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/library/recipes/tags/merge":{"post":{"summary":"Merge Recipe Tags","description":"Merge multiple tags into a single target tag.","operationId":"merge_recipe_tags_api_library_recipes_tags_merge_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MergeTagsRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/library/recipes":{"get":{"summary":"Get Library Recipes","description":"Paginated recipe grid with tag and ingredient filtering.\n\nsource: 'mine' | 'shared' | 'shared:<user_id>' | 'all' (default)","operationId":"get_library_recipes_api_library_recipes_get","parameters":[{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status"}},{"name":"cuisine","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Cuisine"}},{"name":"loved","in":"query","required":false,"schema":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Loved"}},{"name":"sort","in":"query","required":false,"schema":{"type":"string","default":"date","title":"Sort"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":30,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Offset"}},{"name":"search","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Search"}},{"name":"tags","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tags"}},{"name":"primary_category","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Primary Category"}},{"name":"ingredients","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Ingredients"}},{"name":"source","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Source"}},{"name":"quick","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Quick"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/library/{entity_id}":{"get":{"summary":"Get Library Detail","description":"Full library item detail.","operationId":"get_library_detail_api_library__entity_id__get","parameters":[{"name":"entity_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Entity Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"patch":{"summary":"Patch Library Item","description":"Update rating/loved/status with optimistic locking.","operationId":"patch_library_item_api_library__entity_id__patch","parameters":[{"name":"entity_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Entity Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PatchLibraryItemRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/library/{entity_id}/streaming-availability/refresh":{"post":{"summary":"Refresh Library Streaming Availability","description":"Refresh stale TMDB streaming availability for one user-visible title.","operationId":"refresh_library_streaming_availability_api_library__entity_id__streaming_availability_refresh_post","parameters":[{"name":"entity_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Entity Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/library/{entity_id}/photo":{"post":{"summary":"Upload Recipe Photo","description":"Upload a cover photo for a recipe.","operationId":"upload_recipe_photo_api_library__entity_id__photo_post","parameters":[{"name":"entity_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Entity Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"summary":"Get Recipe Photo","description":"Get image URL for a recipe's photo.","operationId":"get_recipe_photo_api_library__entity_id__photo_get","parameters":[{"name":"entity_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Entity Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/library/{entity_id}/image":{"get":{"summary":"Proxy Recipe Image","description":"Proxy recipe image from S3 — avoids TLS issues with presigned URLs on Railway.\n\nAuthorization: owner OR recipient of an active RecipeLibraryShare from the\nowner. RecipeLibraryShare rows are hard-deleted on revoke, so row existence\nis equivalent to \"active share.\" Any other caller → 404.\n\nAuth transport: same-origin web <img> requests attach the httpOnly\nbeckett_access cookie (path=/api); iOS CachedAsyncImage attaches Bearer.\nBoth resolve via get_current_user → extract_token_from_request.\n\nCache-Control trade-off: 24h browser cache means a recipient who loses\naccess via share revocation can still see the image from their local cache\nuntil it expires. Acceptable vs. the previous bug (any UUID-holder forever)\nand vs. the round-trip cost of shorter TTLs. Shorten if tighter revocation\nis needed.","operationId":"proxy_recipe_image_api_library__entity_id__image_get","parameters":[{"name":"entity_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Entity Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/library/{entity_id}/generate-image":{"post":{"summary":"Generate Recipe Image","description":"Generate an AI image for a recipe using Gemini.","operationId":"generate_recipe_image_api_library__entity_id__generate_image_post","parameters":[{"name":"entity_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Entity Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/meal-plans":{"get":{"summary":"List Meal Plans","description":"List active meal plans (owned + shared).","operationId":"list_meal_plans_api_meal_plans_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}},"post":{"summary":"Create Meal Plan Api","description":"Create a meal plan via API.","operationId":"create_meal_plan_api_api_meal_plans_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/meal-plans/{plan_id}":{"get":{"summary":"Get Meal Plan","description":"Get meal plan with entries and recipe info.","operationId":"get_meal_plan_api_meal_plans__plan_id__get","parameters":[{"name":"plan_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Plan Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"patch":{"summary":"Update Meal Plan Api","description":"Update meal plan metadata.","operationId":"update_meal_plan_api_api_meal_plans__plan_id__patch","parameters":[{"name":"plan_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Plan Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"summary":"Archive Meal Plan Api","description":"Archive a meal plan.","operationId":"archive_meal_plan_api_api_meal_plans__plan_id__delete","parameters":[{"name":"plan_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Plan Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/meal-plans/{plan_id}/entries":{"post":{"summary":"Add Meal Plan Entry","description":"Add an entry to a meal plan (owner or collaborator).","operationId":"add_meal_plan_entry_api_meal_plans__plan_id__entries_post","parameters":[{"name":"plan_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Plan Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/meal-plans/{plan_id}/entries/{entry_id}":{"patch":{"summary":"Update Meal Plan Entry","description":"Update a meal plan entry (owner or collaborator).","operationId":"update_meal_plan_entry_api_meal_plans__plan_id__entries__entry_id__patch","parameters":[{"name":"plan_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Plan Id"}},{"name":"entry_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Entry Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"summary":"Delete Meal Plan Entry","description":"Remove an entry from a meal plan (owner or collaborator).","operationId":"delete_meal_plan_entry_api_meal_plans__plan_id__entries__entry_id__delete","parameters":[{"name":"plan_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Plan Id"}},{"name":"entry_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Entry Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/meal-plans/{plan_id}/grocery-list":{"post":{"summary":"Generate Grocery List From Plan","description":"Generate a grocery list from a meal plan.","operationId":"generate_grocery_list_from_plan_api_meal_plans__plan_id__grocery_list_post","parameters":[{"name":"plan_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Plan Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/meal-plans/generate":{"post":{"summary":"Generate Meal Plan","description":"AI-generate a meal plan from the user's recipe library.","operationId":"generate_meal_plan_api_meal_plans_generate_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/meal-plans/from-recipes":{"post":{"summary":"Create Meal Plan From Recipes","description":"Create a meal plan from recipe IDs, placing each recipe in its category-fit slot.","operationId":"create_meal_plan_from_recipes_api_meal_plans_from_recipes_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateMealPlanFromRecipesRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/meal-plans/{plan_id}/share":{"post":{"summary":"Share Meal Plan","description":"Share meal plan with a connected user (owner only).","operationId":"share_meal_plan_api_meal_plans__plan_id__share_post","parameters":[{"name":"plan_id","in":"path","required":true,"schema":{"type":"string","title":"Plan Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ShareMealPlanRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/meal-plans/{plan_id}/share/{collaborator_id}":{"delete":{"summary":"Unshare Meal Plan","description":"Remove collaborator from meal plan (owner only).","operationId":"unshare_meal_plan_api_meal_plans__plan_id__share__collaborator_id__delete","parameters":[{"name":"plan_id","in":"path","required":true,"schema":{"type":"string","title":"Plan Id"}},{"name":"collaborator_id","in":"path","required":true,"schema":{"type":"string","title":"Collaborator Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/meal-plans/{plan_id}/leave":{"post":{"summary":"Leave Meal Plan","description":"Leave a shared meal plan (collaborator only).","operationId":"leave_meal_plan_api_meal_plans__plan_id__leave_post","parameters":[{"name":"plan_id","in":"path","required":true,"schema":{"type":"string","title":"Plan Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/meal-plans/{plan_id}/collaborators":{"get":{"summary":"Get Meal Plan Collaborators","description":"List collaborators (owner or collaborator).","operationId":"get_meal_plan_collaborators_api_meal_plans__plan_id__collaborators_get","parameters":[{"name":"plan_id","in":"path","required":true,"schema":{"type":"string","title":"Plan Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/pantry-staples":{"get":{"summary":"Get Pantry Staples","description":"List user's pantry staples.","operationId":"get_pantry_staples_api_pantry_staples_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}},"put":{"summary":"Update Pantry Staples","description":"Replace all pantry staples with a new list.","operationId":"update_pantry_staples_api_pantry_staples_put","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/grocery-lists/{list_id}/share":{"post":{"summary":"Share Grocery List","description":"Share grocery list with a connected user (owner only).","operationId":"share_grocery_list_api_grocery_lists__list_id__share_post","parameters":[{"name":"list_id","in":"path","required":true,"schema":{"type":"string","title":"List Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ShareGroceryListRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/grocery-lists/{list_id}/share/{collaborator_id}":{"delete":{"summary":"Unshare Grocery List","description":"Remove collaborator from grocery list (owner only).","operationId":"unshare_grocery_list_api_grocery_lists__list_id__share__collaborator_id__delete","parameters":[{"name":"list_id","in":"path","required":true,"schema":{"type":"string","title":"List Id"}},{"name":"collaborator_id","in":"path","required":true,"schema":{"type":"string","title":"Collaborator Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/grocery-lists/{list_id}/leave":{"post":{"summary":"Leave Grocery List","description":"Leave a shared grocery list (collaborator only).","operationId":"leave_grocery_list_api_grocery_lists__list_id__leave_post","parameters":[{"name":"list_id","in":"path","required":true,"schema":{"type":"string","title":"List Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/grocery-lists":{"get":{"summary":"List Grocery Lists","description":"List grocery lists with progress, including shared lists.","operationId":"list_grocery_lists_api_grocery_lists_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}},"post":{"summary":"Create Grocery List Api","description":"Create a grocery list.","operationId":"create_grocery_list_api_api_grocery_lists_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/grocery-lists/{list_id}":{"get":{"summary":"Get Grocery List","description":"Get grocery list with items grouped by section. Supports collaborators.","operationId":"get_grocery_list_api_grocery_lists__list_id__get","parameters":[{"name":"list_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"List Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"patch":{"summary":"Update Grocery List Api","description":"Update grocery list metadata.","operationId":"update_grocery_list_api_api_grocery_lists__list_id__patch","parameters":[{"name":"list_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"List Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"summary":"Delete Grocery List Api","description":"Delete a grocery list.","operationId":"delete_grocery_list_api_api_grocery_lists__list_id__delete","parameters":[{"name":"list_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"List Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/grocery-lists/from-recipes":{"post":{"summary":"Create Grocery List From Recipes","description":"Create a grocery list by aggregating ingredients across a set of recipes.","operationId":"create_grocery_list_from_recipes_api_grocery_lists_from_recipes_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateGroceryFromRecipesRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/grocery-lists/{list_id}/items":{"post":{"summary":"Add Grocery Items","description":"Add items to a grocery list. Supports collaborators.","operationId":"add_grocery_items_api_grocery_lists__list_id__items_post","parameters":[{"name":"list_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"List Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/grocery-lists/{list_id}/items/{item_id}":{"patch":{"summary":"Update Grocery Item","description":"Update a grocery list item (check/uncheck/edit). Supports collaborators.","operationId":"update_grocery_item_api_grocery_lists__list_id__items__item_id__patch","parameters":[{"name":"list_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"List Id"}},{"name":"item_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Item Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"summary":"Delete Grocery Item","description":"Remove an item from a grocery list. Supports collaborators.","operationId":"delete_grocery_item_api_grocery_lists__list_id__items__item_id__delete","parameters":[{"name":"list_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"List Id"}},{"name":"item_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Item Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/grocery-lists/{list_id}/clear-checked":{"post":{"summary":"Clear Checked Items","description":"Clear checked items from a grocery list. Supports collaborators.","operationId":"clear_checked_items_api_grocery_lists__list_id__clear_checked_post","parameters":[{"name":"list_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"List Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/grocery-lists/{list_id}/import-recipe":{"post":{"summary":"Import Recipe To Grocery List","description":"Import ingredients from a recipe entity into a grocery list. Supports collaborators.","operationId":"import_recipe_to_grocery_list_api_grocery_lists__list_id__import_recipe_post","parameters":[{"name":"list_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"List Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/grocery-lists/{list_id}/import-recipes":{"post":{"summary":"Import Recipes To Grocery List","description":"Import ingredients from multiple recipes into an existing grocery list.","operationId":"import_recipes_to_grocery_list_api_grocery_lists__list_id__import_recipes_post","parameters":[{"name":"list_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"List Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ImportRecipesToGroceryListRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/grocery-lists/{list_id}/consolidate":{"post":{"summary":"Consolidate Grocery List","description":"Deprecated compatibility endpoint.\n\nShopping-list assembly now runs on write. This endpoint intentionally does\nnot rewrite rows so source provenance remains intact.","operationId":"consolidate_grocery_list_api_grocery_lists__list_id__consolidate_post","parameters":[{"name":"list_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"List Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/library/{entity_id}/search-tmdb":{"post":{"summary":"Search Tmdb For Entity","description":"Search TMDB for potential matches for an entity.","operationId":"search_tmdb_for_entity_api_library__entity_id__search_tmdb_post","parameters":[{"name":"entity_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Entity Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SearchTmdbRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/media/search":{"post":{"summary":"Search Media","description":"Entity-less media search for the Library add flow.\n\nProxies TMDB (movie/tv) or Google Books (book) and returns enriched\ncandidates matching the shape of /library/{id}/search-tmdb and\n/library/{id}/search-google-books so iOS/web can reuse existing\nCodable/TS types. No tenant data is touched — auth gate only.\nUnderlying services use sync httpx.get(), so every call is wrapped in\nasyncio.to_thread() per app/CLAUDE.md \"Async Endpoints — NEVER Block\nthe Event Loop.\"","operationId":"search_media_api_media_search_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MediaSearchRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/library/{entity_id}/apply-tmdb-match":{"post":{"summary":"Apply Tmdb Match","description":"Apply a specific TMDB match to an entity.","operationId":"apply_tmdb_match_api_library__entity_id__apply_tmdb_match_post","parameters":[{"name":"entity_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Entity Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApplyTmdbMatchRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/library/{entity_id}/search-google-books":{"post":{"summary":"Search Google Books For Entity","description":"Search Google Books for potential matches for a book entity.","operationId":"search_google_books_for_entity_api_library__entity_id__search_google_books_post","parameters":[{"name":"entity_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Entity Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SearchGoogleBooksRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/library/{entity_id}/apply-google-books-match":{"post":{"summary":"Apply Google Books Match","description":"Apply a specific Google Books match to an entity.","operationId":"apply_google_books_match_api_library__entity_id__apply_google_books_match_post","parameters":[{"name":"entity_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Entity Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApplyGoogleBooksMatchRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/library/{entity_id}/link-creator":{"post":{"summary":"Link Creator","description":"Link or create a person entity for the creator of a media item.","operationId":"link_creator_api_library__entity_id__link_creator_post","parameters":[{"name":"entity_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Entity Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LinkCreatorRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/library/quick-add":{"post":{"summary":"Quick Add To Library","description":"Quick-add a movie/book/TV show to the library from an AI recommendation.","operationId":"quick_add_to_library_api_library_quick_add_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/QuickAddRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/notifications":{"post":{"summary":"Create Notification","description":"Create a broadcast notification (admin only).","operationId":"create_notification_api_admin_notifications_post","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateNotificationRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"summary":"List Admin Notifications","description":"List notifications (admin only).","operationId":"list_admin_notifications_api_admin_notifications_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":20,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/notifications/{notification_id}":{"delete":{"summary":"Delete Notification","description":"Delete a notification and its read records (admin only).","operationId":"delete_notification_api_admin_notifications__notification_id__delete","parameters":[{"name":"notification_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Notification Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/feedback":{"get":{"summary":"List Admin Feedback","description":"List all user feedback (admin only). No RLS — admin sees everything.","operationId":"list_admin_feedback_api_admin_feedback_get","parameters":[{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":500,"minimum":1,"default":100,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Offset"}},{"name":"search","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Search"}},{"name":"window","in":"query","required":false,"schema":{"anyOf":[{"type":"string","pattern":"^(24h|today|7d|30d)$"},{"type":"null"}],"title":"Window"}},{"name":"timezone","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Timezone"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdminFeedbackListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"summary":"Create Admin Feedback","description":"Create feedback entry (admin only).","operationId":"create_admin_feedback_api_admin_feedback_post","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateFeedbackRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdminFeedbackResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/feedback/{feedback_id}":{"patch":{"summary":"Update Feedback Status","description":"Update feedback status (admin only).","operationId":"update_feedback_status_api_admin_feedback__feedback_id__patch","parameters":[{"name":"feedback_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Feedback Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateFeedbackRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/feedback/{feedback_id}/messages":{"get":{"summary":"Get Admin Feedback Thread","description":"Load the thread for a feedback item (admin only).","operationId":"get_admin_feedback_thread_api_admin_feedback__feedback_id__messages_get","parameters":[{"name":"feedback_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Feedback Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdminFeedbackThreadResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"summary":"Send Admin Feedback Message","description":"Append an admin message to a feedback thread.","operationId":"send_admin_feedback_message_api_admin_feedback__feedback_id__messages_post","parameters":[{"name":"feedback_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Feedback Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FeedbackMessageRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/analytics/web-search-provenance/{message_id}":{"get":{"summary":"Admin Web Search Provenance","description":"Inspect bounded search evidence without returning private message text.","operationId":"admin_web_search_provenance_api_admin_analytics_web_search_provenance__message_id__get","parameters":[{"name":"message_id","in":"path","required":true,"schema":{"type":"string","title":"Message Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/analytics/engagement":{"get":{"summary":"Admin Analytics Engagement","description":"Admin: per-user engagement metrics — features explored, data depth, consistency.","operationId":"admin_analytics_engagement_api_admin_analytics_engagement_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/admin/analytics/ios-usage":{"get":{"summary":"Admin Analytics Ios Usage","description":"iOS or web product usage analytics: aggregate-only, no user-level rows.","operationId":"admin_analytics_ios_usage_api_admin_analytics_ios_usage_get","parameters":[{"name":"period","in":"query","required":false,"schema":{"type":"string","pattern":"^(7d|30d|90d)$","default":"30d","title":"Period"}},{"name":"platform","in":"query","required":false,"schema":{"type":"string","pattern":"^(ios|web)$","default":"ios","title":"Platform"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/analytics/activation":{"get":{"summary":"Admin Analytics Activation","description":"New-account activation, first value and retention (admin only).","operationId":"admin_analytics_activation_api_admin_analytics_activation_get","parameters":[{"name":"period","in":"query","required":false,"schema":{"type":"string","pattern":"^(7d|30d|90d)$","default":"30d","title":"Period"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/analytics/funnel":{"get":{"summary":"Admin Analytics Funnel","description":"Get conversion funnel analytics (admin only).","operationId":"admin_analytics_funnel_api_admin_analytics_funnel_get","parameters":[{"name":"period","in":"query","required":false,"schema":{"type":"string","pattern":"^(7d|30d|90d)$","default":"30d","title":"Period"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/connectors":{"get":{"summary":"Admin Connectors","description":"Connector funnel per provider for the window, plus every connection (admin only).","operationId":"admin_connectors_api_admin_connectors_get","parameters":[{"name":"period","in":"query","required":false,"schema":{"type":"string","pattern":"^(7d|30d|90d)$","default":"30d","title":"Period"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"default":50,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Offset"}},{"name":"include_internal","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Include Internal"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdminConnectorReportResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/analytics/attribution":{"get":{"summary":"Admin Analytics Attribution","description":"Get UTM source attribution analytics (admin only).","operationId":"admin_analytics_attribution_api_admin_analytics_attribution_get","parameters":[{"name":"period","in":"query","required":false,"schema":{"type":"string","pattern":"^(7d|30d|90d)$","default":"30d","title":"Period"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/analytics/short-circuit":{"get":{"summary":"Admin Analytics Short Circuit","description":"Short-circuit analytics: fire rate, skip reasons, per-user, daily trend.","operationId":"admin_analytics_short_circuit_api_admin_analytics_short_circuit_get","parameters":[{"name":"period","in":"query","required":false,"schema":{"type":"string","pattern":"^(7d|30d|90d)$","default":"30d","title":"Period"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/analytics/tools":{"get":{"summary":"Admin Analytics Tools","description":"Tool usage analytics: per-tool call counts, per-user breakdown, daily trend.","operationId":"admin_analytics_tools_api_admin_analytics_tools_get","parameters":[{"name":"period","in":"query","required":false,"schema":{"type":"string","pattern":"^(7d|30d|90d)$","default":"30d","title":"Period"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/analytics/tool-misroutes":{"get":{"summary":"Admin Analytics Tool Misroutes","description":"Tool misroute analytics: detect when the model calls the wrong tool first.","operationId":"admin_analytics_tool_misroutes_api_admin_analytics_tool_misroutes_get","parameters":[{"name":"period","in":"query","required":false,"schema":{"type":"string","pattern":"^(7d|30d|90d)$","default":"30d","title":"Period"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/notifications":{"get":{"summary":"Get Notifications","description":"Get notifications with read status for current user.","operationId":"get_notifications_api_notifications_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/notifications/unread-count":{"get":{"summary":"Get Unread Count","description":"Get count of unread notifications.","operationId":"get_unread_count_api_notifications_unread_count_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/notifications/{notification_id}/read":{"post":{"summary":"Mark Notification Read","description":"Mark a notification as read (idempotent).","operationId":"mark_notification_read_api_notifications__notification_id__read_post","parameters":[{"name":"notification_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Notification Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/notifications/mark-all-read":{"post":{"summary":"Mark All Notifications Read","description":"Mark all notifications as read.","operationId":"mark_all_notifications_read_api_notifications_mark_all_read_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/review-requests/{request_id}/storekit-requested":{"post":{"summary":"Mark Review Request Storekit Requested","description":"Mark a native app review request as handed to StoreKit.","operationId":"mark_review_request_storekit_requested_api_review_requests__request_id__storekit_requested_post","parameters":[{"name":"request_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Request Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/feedback":{"get":{"summary":"List Feedback Threads","description":"List the current user's feedback reports with thread summary metadata.","operationId":"list_feedback_threads_api_feedback_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}},"post":{"summary":"Submit Feedback","description":"Submit bug report or feature request.","operationId":"submit_feedback_api_feedback_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SubmitFeedbackRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/feedback/{feedback_id}":{"get":{"summary":"Get Feedback Thread","description":"Load the current user's feedback thread.","operationId":"get_feedback_thread_api_feedback__feedback_id__get","parameters":[{"name":"feedback_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Feedback Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/feedback/{feedback_id}/messages":{"post":{"summary":"Send Feedback Message","description":"Append a user reply to an existing feedback thread.","operationId":"send_feedback_message_api_feedback__feedback_id__messages_post","parameters":[{"name":"feedback_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Feedback Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FeedbackMessageRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/projects":{"get":{"summary":"List Projects","description":"List user's projects with note counts (owned + shared via RLS).","operationId":"list_projects_api_projects_get","parameters":[{"name":"include_archived","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Include Archived"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"summary":"Create Project","description":"Create a new project. Auto-pins semantically matched notes when description is provided.","operationId":"create_project_api_projects_post","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateProjectRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/projects/starred":{"get":{"summary":"List Starred Projects","description":"List starred projects (owned + shared).","operationId":"list_starred_projects_api_projects_starred_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/projects/{project_id}":{"get":{"summary":"Get Project","description":"Get project with filtered notes and entities. Works for owner and collaborators.","operationId":"get_project_api_projects__project_id__get","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Project Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"summary":"Update Project","description":"Update a project.","operationId":"update_project_api_projects__project_id__put","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Project Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateProjectRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"patch":{"summary":"Update Project","description":"Update a project.","operationId":"update_project_api_projects__project_id__patch","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Project Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateProjectRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"summary":"Delete Project","description":"Delete a project.","operationId":"delete_project_api_projects__project_id__delete","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Project Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/projects/suggest":{"post":{"summary":"Suggest Project","description":"Use semantic search + AI to suggest project name, icon, and matching notes.","operationId":"suggest_project_api_projects_suggest_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuggestProjectRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/projects/scaffold":{"post":{"summary":"Scaffold Project","description":"AI-scaffold a project: name, icon, blocks (checklists/tables), matched notes.","operationId":"scaffold_project_api_projects_scaffold_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuggestProjectRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/projects/{project_id}/auto-summarize":{"post":{"summary":"Auto Summarize Project","description":"Auto-generate project summary through the LLM gateway (lightweight, non-streaming).\n\nCalled by the frontend on page load when summary is stale. Returns the new\nsummary text directly instead of SSE streaming.","operationId":"auto_summarize_project_api_projects__project_id__auto_summarize_post","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Project Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/projects/{project_id}/summarize":{"post":{"summary":"Summarize Project","description":"Generate a summary for a project via SSE streaming.","operationId":"summarize_project_api_projects__project_id__summarize_post","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Project Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/projects/{project_id}/blocks":{"post":{"summary":"Create Block","description":"Create a new block on a project (owner or collaborator).","operationId":"create_block_api_projects__project_id__blocks_post","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Project Id"}},{"name":"block_type","in":"query","required":false,"schema":{"type":"string","default":"checklist","title":"Block Type"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateBlockRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/projects/{project_id}/blocks/reorder":{"patch":{"summary":"Reorder Project Blocks","description":"Reorder project blocks by exact block ID list. Owner or collaborator.","operationId":"reorder_project_blocks_api_projects__project_id__blocks_reorder_patch","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Project Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReorderProjectBlocksRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/projects/{project_id}/blocks/from-csv":{"post":{"summary":"Create Block From Csv","description":"Create a table block from a CSV file upload.","operationId":"create_block_from_csv_api_projects__project_id__blocks_from_csv_post","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Project Id"}}],"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_create_block_from_csv_api_projects__project_id__blocks_from_csv_post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/projects/{project_id}/blocks/{block_id}":{"put":{"summary":"Update Block","description":"Replace full block state (title, items array). Owner or collaborator.","operationId":"update_block_api_projects__project_id__blocks__block_id__put","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Project Id"}},{"name":"block_id","in":"path","required":true,"schema":{"type":"string","title":"Block Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateBlockRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"summary":"Delete Block","description":"Delete a block from a project. Owner or collaborator.","operationId":"delete_block_api_projects__project_id__blocks__block_id__delete","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Project Id"}},{"name":"block_id","in":"path","required":true,"schema":{"type":"string","title":"Block Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/projects/{project_id}/blocks/generate":{"post":{"summary":"Generate Block","description":"AI-generate a checklist block through the LLM gateway.","operationId":"generate_block_api_projects__project_id__blocks_generate_post","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Project Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/projects/{project_id}/attachments":{"post":{"summary":"Add Attachment","description":"Add a file or link attachment to a project.","operationId":"add_attachment_api_projects__project_id__attachments_post","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Project Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AddAttachmentRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/projects/{project_id}/attachments/{attachment_id}":{"delete":{"summary":"Remove Attachment","description":"Remove an attachment from a project.","operationId":"remove_attachment_api_projects__project_id__attachments__attachment_id__delete","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Project Id"}},{"name":"attachment_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Attachment Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/projects/{project_id}/pin/{note_id}":{"post":{"summary":"Pin Note To Project","description":"Pin a note to a project.","operationId":"pin_note_to_project_api_projects__project_id__pin__note_id__post","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Project Id"}},{"name":"note_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Note Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/projects/{project_id}/exclude/{note_id}":{"post":{"summary":"Exclude Note From Project","description":"Exclude a note from a project.","operationId":"exclude_note_from_project_api_projects__project_id__exclude__note_id__post","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Project Id"}},{"name":"note_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Note Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/projects/{project_id}/restore/{note_id}":{"post":{"summary":"Restore Note To Project","description":"Restore an excluded note.","operationId":"restore_note_to_project_api_projects__project_id__restore__note_id__post","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Project Id"}},{"name":"note_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Note Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/projects/{project_id}/notes":{"post":{"summary":"Create Project Note","description":"Create a new note and pin it to a project.","operationId":"create_project_note_api_projects__project_id__notes_post","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Project Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/projects/{project_id}/related":{"get":{"summary":"Get Related Notes","description":"Find semantically related notes for a project (lazy, on-demand).","operationId":"get_related_notes_api_projects__project_id__related_get","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Project Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/projects/{project_id}/star":{"patch":{"summary":"Toggle Project Star","description":"Toggle star on a project (owner uses Project.is_starred, collaborator uses ProjectShare.starred).","operationId":"toggle_project_star_api_projects__project_id__star_patch","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Project Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/projects/{project_id}/archive":{"patch":{"summary":"Toggle Project Archive","description":"Toggle is_archived on a project. Archiving also unstars.","operationId":"toggle_project_archive_api_projects__project_id__archive_patch","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Project Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/user/notifications":{"get":{"summary":"Get User Notifications","description":"List user notifications, most recent first.","operationId":"get_user_notifications_api_user_notifications_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":20,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/user/notifications/unread-count":{"get":{"summary":"Get User Notification Unread Count","description":"Get unread notification count.","operationId":"get_user_notification_unread_count_api_user_notifications_unread_count_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/user/notifications/{notification_id}/read":{"patch":{"summary":"Mark User Notification Read","description":"Mark a single notification as read.","operationId":"mark_user_notification_read_api_user_notifications__notification_id__read_patch","parameters":[{"name":"notification_id","in":"path","required":true,"schema":{"type":"string","title":"Notification Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/user/notifications/mark-all-read":{"post":{"summary":"Mark All User Notifications Read","description":"Mark all notifications as read.","operationId":"mark_all_user_notifications_read_api_user_notifications_mark_all_read_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/user/notifications/{notification_id}":{"delete":{"summary":"Clear User Notification","description":"Remove one notification from the user's list.","operationId":"clear_user_notification_api_user_notifications__notification_id__delete","parameters":[{"name":"notification_id","in":"path","required":true,"schema":{"type":"string","title":"Notification Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/user/notifications/clear":{"post":{"summary":"Clear User Notifications","description":"Remove every notification from the user's list.","operationId":"clear_user_notifications_api_user_notifications_clear_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/user/notification-settings":{"get":{"summary":"Get Notification Settings","description":"Get notification preferences and all check-in schedules.","operationId":"get_notification_settings_api_user_notification_settings_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}},"put":{"summary":"Update Notification Settings","description":"Update notification preferences (paused, quiet hours, categories, email tips).","operationId":"update_notification_settings_api_user_notification_settings_put","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotificationSettingsUpdate"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/user/check-in-schedules/{schedule_id}":{"put":{"summary":"Update Check In Schedule","description":"Update a check-in schedule (toggle active, change time, etc.).","operationId":"update_check_in_schedule_api_user_check_in_schedules__schedule_id__put","parameters":[{"name":"schedule_id","in":"path","required":true,"schema":{"type":"string","title":"Schedule Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CheckInScheduleUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"summary":"Delete Check In Schedule","description":"Delete a check-in schedule.","operationId":"delete_check_in_schedule_api_user_check_in_schedules__schedule_id__delete","parameters":[{"name":"schedule_id","in":"path","required":true,"schema":{"type":"string","title":"Schedule Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/devices/register":{"post":{"summary":"Register Device","description":"Register or update a device token for push notifications.","operationId":"register_device_api_devices_register_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeviceRegisterRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/devices/{token}":{"delete":{"summary":"Unregister Device","description":"Unregister a device token (on logout).","operationId":"unregister_device_api_devices__token__delete","parameters":[{"name":"token","in":"path","required":true,"schema":{"type":"string","title":"Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/device-tokens/coverage":{"get":{"summary":"Admin Device Token Coverage","description":"Admin-only: device token coverage across active users.\n\nTells us how many users can actually receive push notifications. This is\nthe single metric that determines whether the notification pipeline reaches\nreal devices — a large users_without_token value means the iOS permission\nflow needs attention.","operationId":"admin_device_token_coverage_api_admin_device_tokens_coverage_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/people-groups":{"get":{"summary":"List People Groups","description":"List all people groups.","operationId":"list_people_groups_api_people_groups_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}},"post":{"summary":"Create People Group","description":"Create a new people group.","operationId":"create_people_group_api_people_groups_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreatePeopleGroupRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/people-groups/{group_id}":{"get":{"summary":"Get People Group","description":"Get a people group with resolved member details.","operationId":"get_people_group_api_people_groups__group_id__get","parameters":[{"name":"group_id","in":"path","required":true,"schema":{"type":"string","title":"Group Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"summary":"Update People Group","description":"Update a people group.","operationId":"update_people_group_api_people_groups__group_id__put","parameters":[{"name":"group_id","in":"path","required":true,"schema":{"type":"string","title":"Group Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdatePeopleGroupRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"summary":"Delete People Group","description":"Delete a people group.","operationId":"delete_people_group_api_people_groups__group_id__delete","parameters":[{"name":"group_id","in":"path","required":true,"schema":{"type":"string","title":"Group Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/people-groups/{group_id}/suggestions":{"get":{"summary":"Get People Group Suggestions","description":"Suggest people to add to a group based on co-occurrence or search.","operationId":"get_people_group_suggestions_api_people_groups__group_id__suggestions_get","parameters":[{"name":"group_id","in":"path","required":true,"schema":{"type":"string","title":"Group Id"}},{"name":"search","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Search"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/connections/invite":{"post":{"summary":"Invite Connection","description":"Send a connection request. Always returns 202 (no email enumeration).","operationId":"invite_connection_api_connections_invite_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConnectionInviteRequest"}}},"required":true},"responses":{"202":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/connections":{"get":{"summary":"List Connections","description":"List all connections (accepted + pending sent/received).","operationId":"list_connections_api_connections_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/connections/{connection_id}/accept":{"post":{"summary":"Accept Connection","description":"Accept a connection request (recipient only).","operationId":"accept_connection_api_connections__connection_id__accept_post","parameters":[{"name":"connection_id","in":"path","required":true,"schema":{"type":"string","title":"Connection Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/connections/{connection_id}/reject":{"post":{"summary":"Reject Connection","description":"Reject a connection request (recipient only).","operationId":"reject_connection_api_connections__connection_id__reject_post","parameters":[{"name":"connection_id","in":"path","required":true,"schema":{"type":"string","title":"Connection Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/connections/{connection_id}":{"delete":{"summary":"Remove Connection","description":"Remove a connection (either party).","operationId":"remove_connection_api_connections__connection_id__delete","parameters":[{"name":"connection_id","in":"path","required":true,"schema":{"type":"string","title":"Connection Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/connections/{connection_id}/block":{"post":{"summary":"Block Connection User","description":"Block the other user on a connection and remove the connection.","operationId":"block_connection_user_api_connections__connection_id__block_post","parameters":[{"name":"connection_id","in":"path","required":true,"schema":{"type":"string","title":"Connection Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/users/{target_user_id}/block":{"post":{"summary":"Block User","description":"Block a user and remove any existing connection.","operationId":"block_user_api_users__target_user_id__block_post","parameters":[{"name":"target_user_id","in":"path","required":true,"schema":{"type":"string","title":"Target User Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"summary":"Unblock User","description":"Remove a directional user block.","operationId":"unblock_user_api_users__target_user_id__block_delete","parameters":[{"name":"target_user_id","in":"path","required":true,"schema":{"type":"string","title":"Target User Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/content-reports":{"post":{"summary":"Create Content Report","description":"Record a report for collaborative/user-generated content.","operationId":"create_content_report_api_content_reports_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ContentReportRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/connections/{connection_id}/link":{"post":{"summary":"Link Connection To Entity","description":"Link a connection to a person entity via ExternalLink.","operationId":"link_connection_to_entity_api_connections__connection_id__link_post","parameters":[{"name":"connection_id","in":"path","required":true,"schema":{"type":"string","title":"Connection Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/game/scores":{"post":{"summary":"Submit Game Score","description":"Submit a game score after a run.","operationId":"submit_game_score_api_game_scores_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GameScoreSubmitRequest"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/game/leaderboard":{"get":{"summary":"Get Game Leaderboard","description":"Get leaderboard data for connected users.","operationId":"get_game_leaderboard_api_game_leaderboard_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/game/scores/me":{"get":{"summary":"Get My Game Scores","description":"Get own game score history.","operationId":"get_my_game_scores_api_game_scores_me_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":50,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/recipe-library/share":{"post":{"summary":"Share Recipe Library","description":"Grant a connected user read-only access to your recipe library.","operationId":"share_recipe_library_api_recipe_library_share_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ShareRecipeLibraryRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/recipe-library/share/{recipient_id}":{"delete":{"summary":"Revoke Recipe Library Share","description":"Owner revokes a recipient's access to their recipe library.","operationId":"revoke_recipe_library_share_api_recipe_library_share__recipient_id__delete","parameters":[{"name":"recipient_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Recipient Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/recipe-library/share/leave/{owner_id}":{"post":{"summary":"Leave Recipe Library Share","description":"Recipient removes themselves from a shared recipe library.","operationId":"leave_recipe_library_share_api_recipe_library_share_leave__owner_id__post","parameters":[{"name":"owner_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Owner Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/recipe-library/shares":{"get":{"summary":"List Recipe Library Shares","description":"List libraries I'm sharing and libraries shared with me.","operationId":"list_recipe_library_shares_api_recipe_library_shares_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/projects/{project_id}/share":{"post":{"summary":"Share Project","description":"Share project with a connected user (owner only).","operationId":"share_project_api_projects__project_id__share_post","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Project Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ShareProjectRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/projects/{project_id}/share/{collaborator_id}":{"delete":{"summary":"Unshare Project","description":"Remove collaborator from project (owner only).","operationId":"unshare_project_api_projects__project_id__share__collaborator_id__delete","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Project Id"}},{"name":"collaborator_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Collaborator Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/projects/{project_id}/leave":{"post":{"summary":"Leave Project","description":"Leave a shared project (collaborator only).","operationId":"leave_project_api_projects__project_id__leave_post","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Project Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/projects/{project_id}/collaborators":{"get":{"summary":"Get Project Collaborators","description":"List collaborators (owner or collaborator).","operationId":"get_project_collaborators_api_projects__project_id__collaborators_get","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Project Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/projects/{project_id}/share-link":{"post":{"summary":"Create Share Link","description":"Generate public share link (owner only).\n\nAccepts optional ttl_days (1..365). Default None → link never expires,\nmatching prior behavior. Out-of-range values rejected by Pydantic (422).","operationId":"create_share_link_api_projects__project_id__share_link_post","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Project Id"}}],"requestBody":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/CreateShareLinkRequest"},{"type":"null"}],"title":"Request"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"summary":"Revoke Share Link","description":"Revoke public share link (owner only).","operationId":"revoke_share_link_api_projects__project_id__share_link_delete","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Project Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"summary":"Get Share Link","description":"Get active share link for a project (owner only).","operationId":"get_share_link_api_projects__project_id__share_link_get","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Project Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/shared/{token}":{"get":{"summary":"Get Shared Project","description":"Get project data via public share token (no auth, rate-limited).","operationId":"get_shared_project_api_shared__token__get","parameters":[{"name":"token","in":"path","required":true,"schema":{"type":"string","title":"Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/projects/{project_id}/entities/{entity_id}":{"post":{"summary":"Link Entity To Project","description":"Link an entity to a project.","operationId":"link_entity_to_project_api_projects__project_id__entities__entity_id__post","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Project Id"}},{"name":"entity_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Entity Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"summary":"Unlink Entity From Project","description":"Unlink an entity from a project.","operationId":"unlink_entity_from_project_api_projects__project_id__entities__entity_id__delete","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Project Id"}},{"name":"entity_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Entity Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/projects/{project_id}/shared-chat/stream":{"get":{"summary":"Shared Chat Stream","description":"SSE stream for shared project chat with 30s heartbeat auth re-check.","operationId":"shared_chat_stream_api_projects__project_id__shared_chat_stream_get","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Project Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/projects/{project_id}/shared-chat":{"post":{"summary":"Send Shared Chat Message","description":"Send a message in shared project chat.","operationId":"send_shared_chat_message_api_projects__project_id__shared_chat_post","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Project Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SharedChatMessageRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/projects/{project_id}/shared-chat/read":{"post":{"summary":"Mark Shared Chat Read","description":"Mark project chat as read for the current user.","operationId":"mark_shared_chat_read_api_projects__project_id__shared_chat_read_post","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Project Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/recommendations":{"post":{"summary":"Send Recommendation","description":"Send a media recommendation to a connected user.","operationId":"send_recommendation_api_recommendations_post","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RecommendMediaRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"summary":"List Recommendations","description":"List received media recommendations.","operationId":"list_recommendations_api_recommendations_get","parameters":[{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/recommendations/recipients":{"get":{"summary":"Get Recommendation Recipient Ids","description":"Return distinct recipients this sender has already shared a media item to.","operationId":"get_recommendation_recipient_ids_api_recommendations_recipients_get","parameters":[{"name":"media_type","in":"query","required":true,"schema":{"type":"string","title":"Media Type"}},{"name":"media_external_id","in":"query","required":true,"schema":{"type":"string","title":"Media External Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/recommendations/{rec_id}/image":{"get":{"summary":"Get Recommendation Image","description":"Proxy a shared image for the recommendation sender or recipient.","operationId":"get_recommendation_image_api_recommendations__rec_id__image_get","parameters":[{"name":"rec_id","in":"path","required":true,"schema":{"type":"string","title":"Rec Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/recommendations/{rec_id}/read":{"post":{"summary":"Mark Recommendation Read","description":"Mark recommendation as read.","operationId":"mark_recommendation_read_api_recommendations__rec_id__read_post","parameters":[{"name":"rec_id","in":"path","required":true,"schema":{"type":"string","title":"Rec Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/recommendations/{rec_id}/accept":{"post":{"summary":"Accept Recommendation","description":"Accept recommendation — creates entity in recipient's library via fresh TMDB/OL lookup.","operationId":"accept_recommendation_api_recommendations__rec_id__accept_post","parameters":[{"name":"rec_id","in":"path","required":true,"schema":{"type":"string","title":"Rec Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/recommendations/{rec_id}/dismiss":{"post":{"summary":"Dismiss Recommendation","description":"Dismiss a recommendation.","operationId":"dismiss_recommendation_api_recommendations__rec_id__dismiss_post","parameters":[{"name":"rec_id","in":"path","required":true,"schema":{"type":"string","title":"Rec Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/media-lists":{"get":{"summary":"Get Media Lists","description":"Get user's media lists with item counts per media type.","operationId":"get_media_lists_api_media_lists_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}},"post":{"summary":"Create Media List","description":"Create a new media list.","operationId":"create_media_list_api_media_lists_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateMediaListRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/media-lists/received":{"get":{"summary":"Get Received Media Lists","description":"Get lists shared with me.","operationId":"get_received_media_lists_api_media_lists_received_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/media-lists/{list_id}":{"get":{"summary":"Get Media List Detail","description":"Get media list detail with items.","operationId":"get_media_list_detail_api_media_lists__list_id__get","parameters":[{"name":"list_id","in":"path","required":true,"schema":{"type":"string","title":"List Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"patch":{"summary":"Update Media List","description":"Update a media list.","operationId":"update_media_list_api_media_lists__list_id__patch","parameters":[{"name":"list_id","in":"path","required":true,"schema":{"type":"string","title":"List Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateMediaListRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"summary":"Delete Media List","description":"Delete a media list (cascade removes items + shares).","operationId":"delete_media_list_api_media_lists__list_id__delete","parameters":[{"name":"list_id","in":"path","required":true,"schema":{"type":"string","title":"List Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/media-lists/{list_id}/items":{"post":{"summary":"Add Media List Items","description":"Add entities to a media list.","operationId":"add_media_list_items_api_media_lists__list_id__items_post","parameters":[{"name":"list_id","in":"path","required":true,"schema":{"type":"string","title":"List Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AddMediaListItemsRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/media-lists/{list_id}/items/{entity_id}":{"delete":{"summary":"Remove Media List Item","description":"Remove an entity from a media list.","operationId":"remove_media_list_item_api_media_lists__list_id__items__entity_id__delete","parameters":[{"name":"list_id","in":"path","required":true,"schema":{"type":"string","title":"List Id"}},{"name":"entity_id","in":"path","required":true,"schema":{"type":"string","title":"Entity Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/media-lists/entity/{entity_id}":{"get":{"summary":"Get Entity List Memberships","description":"Get which lists an entity belongs to.","operationId":"get_entity_list_memberships_api_media_lists_entity__entity_id__get","parameters":[{"name":"entity_id","in":"path","required":true,"schema":{"type":"string","title":"Entity Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/media-lists/{list_id}/share":{"post":{"summary":"Share Media List","description":"Share a media list with a connected user (snapshot push).","operationId":"share_media_list_api_media_lists__list_id__share_post","parameters":[{"name":"list_id","in":"path","required":true,"schema":{"type":"string","title":"List Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ShareMediaListRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/media-lists/received/{share_id}/accept-all":{"post":{"summary":"Accept All List Items","description":"Batch accept all items in a shared list.","operationId":"accept_all_list_items_api_media_lists_received__share_id__accept_all_post","parameters":[{"name":"share_id","in":"path","required":true,"schema":{"type":"string","title":"Share Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/media-lists/received/{share_id}/items/{item_id}/accept":{"post":{"summary":"Accept Single List Item","description":"Accept a single item from a shared list.","operationId":"accept_single_list_item_api_media_lists_received__share_id__items__item_id__accept_post","parameters":[{"name":"share_id","in":"path","required":true,"schema":{"type":"string","title":"Share Id"}},{"name":"item_id","in":"path","required":true,"schema":{"type":"string","title":"Item Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/media-lists/received/{share_id}/dismiss":{"post":{"summary":"Dismiss Received List","description":"Dismiss an entire shared list.","operationId":"dismiss_received_list_api_media_lists_received__share_id__dismiss_post","parameters":[{"name":"share_id","in":"path","required":true,"schema":{"type":"string","title":"Share Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/media-lists/{list_id}/share/{recipient_id}":{"delete":{"summary":"Revoke Media List Share","description":"Owner revokes a shared list.","operationId":"revoke_media_list_share_api_media_lists__list_id__share__recipient_id__delete","parameters":[{"name":"list_id","in":"path","required":true,"schema":{"type":"string","title":"List Id"}},{"name":"recipient_id","in":"path","required":true,"schema":{"type":"string","title":"Recipient Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/inbox":{"get":{"summary":"Get Inbox","description":"Get unified social inbox — connection requests + media recommendations.","operationId":"get_inbox_api_inbox_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/inbox/count":{"get":{"summary":"Get Inbox Count","description":"Get unread social inbox count.","operationId":"get_inbox_count_api_inbox_count_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/agents":{"get":{"tags":["agents"],"summary":"List Agents","operationId":"list_agents_api_agents_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentsResponse"}}}}}}},"/api/agents/{provider}/changes":{"get":{"tags":["agents"],"summary":"List Agent Changes","operationId":"list_agent_changes_api_agents__provider__changes_get","parameters":[{"name":"provider","in":"path","required":true,"schema":{"type":"string","title":"Provider"}},{"name":"before","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Before"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentChangesResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/agents/{provider}/changes/seen":{"post":{"tags":["agents"],"summary":"Mark Agent Changes Seen","operationId":"mark_agent_changes_seen_api_agents__provider__changes_seen_post","parameters":[{"name":"provider","in":"path","required":true,"schema":{"type":"string","title":"Provider"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentChangesSeenRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentChangesSeenResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/agent-changes/objects/{object_id}":{"get":{"tags":["agents"],"summary":"Get Object Attribution","operationId":"get_object_attribution_api_agent_changes_objects__object_id__get","parameters":[{"name":"object_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Object Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ObjectAttributionResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/events":{"get":{"summary":"List Events","description":"List user's calendar events.","operationId":"list_events_api_events_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":50,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Offset"}},{"name":"upcoming","in":"query","required":false,"schema":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Upcoming"}},{"name":"date_from","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Date From"}},{"name":"date_to","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Date To"}},{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status"}},{"name":"calendar_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Calendar Id"}},{"name":"calendar_tag","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Calendar Tag"}},{"name":"include_eventkit_tombstones","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Include Eventkit Tombstones"}},{"name":"project_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Project Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"summary":"Create Event","description":"Create a new calendar event, optionally with recurrence.","operationId":"create_event_api_events_post","responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/events/{event_id}":{"get":{"summary":"Get Event","description":"Get a single event by ID.","operationId":"get_event_api_events__event_id__get","parameters":[{"name":"event_id","in":"path","required":true,"schema":{"type":"string","title":"Event Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"patch":{"summary":"Update Event","description":"Update an existing event.","operationId":"update_event_api_events__event_id__patch","parameters":[{"name":"event_id","in":"path","required":true,"schema":{"type":"string","title":"Event Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"summary":"Delete Event","description":"Delete an event.","operationId":"delete_event_api_events__event_id__delete","parameters":[{"name":"event_id","in":"path","required":true,"schema":{"type":"string","title":"Event Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/events/{event_id}/eventkit-link":{"patch":{"summary":"Set Eventkit Link","description":"Link or clear the dedicated Apple Calendar record for a Beckett-managed event.","operationId":"set_eventkit_link_api_events__event_id__eventkit_link_patch","parameters":[{"name":"event_id","in":"path","required":true,"schema":{"type":"string","title":"Event Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SetEventKitLinkRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/calendar/import":{"post":{"summary":"Import Calendar","description":"Import events from an .ics file.","operationId":"import_calendar_api_calendar_import_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/calendar/eventkit/import":{"post":{"summary":"Import Eventkit","description":"Import Apple Calendar context into Beckett via upsert semantics.","operationId":"import_eventkit_api_calendar_eventkit_import_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/calendar/tags":{"get":{"summary":"List Calendar Tags","description":"List calendar tags with counts and colors.","operationId":"list_calendar_tags_api_calendar_tags_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/calendar/calendars":{"post":{"summary":"Create Calendar","description":"Create an owned calendar.","operationId":"create_calendar_api_calendar_calendars_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}},"patch":{"summary":"Update Calendar","description":"Rename and/or recolor an owned calendar tag.","operationId":"update_calendar_api_calendar_calendars_patch","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/calendar/tag-color":{"patch":{"summary":"Set Calendar Tag Color","description":"Set the color index for a calendar tag.","operationId":"set_calendar_tag_color_api_calendar_tag_color_patch","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/calendar/shares":{"get":{"summary":"List Calendar Shares","description":"List calendar shares — who I've shared with and who has shared with me.","operationId":"list_calendar_shares_api_calendar_shares_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/calendar/share":{"post":{"summary":"Share Calendar","description":"Share my calendar with another user by email.","operationId":"share_calendar_api_calendar_share_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/calendar/share/{share_id}":{"delete":{"summary":"Delete Calendar Share","description":"Remove a calendar share.","operationId":"delete_calendar_share_api_calendar_share__share_id__delete","parameters":[{"name":"share_id","in":"path","required":true,"schema":{"type":"string","title":"Share Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/calendar/writable-calendars":{"get":{"summary":"Get Writable Calendars","description":"Return calendars the user can create events on.","operationId":"get_writable_calendars_api_calendar_writable_calendars_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/calendar/share-link":{"post":{"summary":"Create Calendar Share Link","description":"Create a public share link for my calendar.","operationId":"create_calendar_share_link_api_calendar_share_link_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/calendar/share-link/{token}/accept":{"post":{"summary":"Accept Calendar Share Link","description":"Accept a calendar share link to gain access to the sharer's calendar.","operationId":"accept_calendar_share_link_api_calendar_share_link__token__accept_post","parameters":[{"name":"token","in":"path","required":true,"schema":{"type":"string","title":"Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/calendar/shared-events":{"get":{"summary":"Get Shared Events","description":"Get events from calendars shared with me.","operationId":"get_shared_events_api_calendar_shared_events_get","parameters":[{"name":"date_from","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Date From"}},{"name":"date_to","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Date To"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/tasks":{"get":{"tags":["tasks"],"summary":"List Tasks","description":"List user's tasks.","operationId":"list_tasks_api_tasks_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"default":50,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Offset"}},{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status"}},{"name":"scope","in":"query","required":false,"schema":{"anyOf":[{"type":"string","pattern":"^(all|created|assigned)$"},{"type":"null"}],"default":"created","title":"Scope"}},{"name":"priority","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Priority"}},{"name":"due_before","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Due Before"}},{"name":"due_after","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Due After"}},{"name":"due_filter","in":"query","required":false,"schema":{"anyOf":[{"type":"string","pattern":"^(no_due_date|due_today|overdue)$"},{"type":"null"}],"title":"Due Filter"}},{"name":"project_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Project Id"}},{"name":"parent_task_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Parent Task Id"}},{"name":"top_level_only","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Top Level Only"}},{"name":"include_subtasks","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Include Subtasks"}},{"name":"order_by","in":"query","required":false,"schema":{"anyOf":[{"type":"string","pattern":"^(manual|due_date|created_at|priority)$"},{"type":"null"}],"title":"Order By"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["tasks"],"summary":"Create Task","description":"Create a new task.","operationId":"create_task_api_tasks_post","responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/tasks/today":{"get":{"tags":["tasks"],"summary":"Get Tasks Today","description":"Return grouped Today task sections for the user's local date.","operationId":"get_tasks_today_api_tasks_today_get","parameters":[{"name":"date","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Date"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/tasks/priorities":{"patch":{"tags":["tasks"],"summary":"Replace Tasks Priorities","description":"Replace the user's ordered priority list for a local date.","operationId":"replace_tasks_priorities_api_tasks_priorities_patch","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/tasks/top-three":{"patch":{"tags":["tasks"],"summary":"Replace Tasks Top Three Compat","description":"Compatibility alias for older clients; use /api/tasks/priorities.","operationId":"replace_tasks_top_three_compat_api_tasks_top_three_patch","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/tasks/priorities/pick":{"post":{"tags":["tasks"],"summary":"Pick Tasks Priorities","description":"Deterministically pick a small priority set from overdue, due-today, and high-priority tasks.","operationId":"pick_tasks_priorities_api_tasks_priorities_pick_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/tasks/top-three/pick":{"post":{"tags":["tasks"],"summary":"Pick Tasks Top Three Compat","description":"Compatibility alias for older clients; use /api/tasks/priorities/pick.","operationId":"pick_tasks_top_three_compat_api_tasks_top_three_pick_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/tasks/reorder":{"patch":{"tags":["tasks"],"summary":"Reorder Tasks","description":"Persist manual All Tasks order for owned open top-level tasks.","operationId":"reorder_tasks_api_tasks_reorder_patch","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/tasks/assignable-users":{"get":{"tags":["tasks"],"summary":"Get Task Assignable Users","description":"Return users who can be assigned tasks for the selected shared projects.","operationId":"get_task_assignable_users_api_tasks_assignable_users_get","parameters":[{"name":"project_ids","in":"query","required":false,"schema":{"type":"string","default":"","title":"Project Ids"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/tasks/{task_id}":{"get":{"tags":["tasks"],"summary":"Get Task","description":"Get a single task by ID.","operationId":"get_task_api_tasks__task_id__get","parameters":[{"name":"task_id","in":"path","required":true,"schema":{"type":"string","title":"Task Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"patch":{"tags":["tasks"],"summary":"Update Task","description":"Update an existing task.","operationId":"update_task_api_tasks__task_id__patch","parameters":[{"name":"task_id","in":"path","required":true,"schema":{"type":"string","title":"Task Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["tasks"],"summary":"Delete Task","description":"Delete a task.","operationId":"delete_task_api_tasks__task_id__delete","parameters":[{"name":"task_id","in":"path","required":true,"schema":{"type":"string","title":"Task Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/tasks/{task_id}/complete":{"patch":{"tags":["tasks"],"summary":"Complete Task","description":"Set completion when specified; retain toggle semantics for older clients.","operationId":"complete_task_api_tasks__task_id__complete_patch","parameters":[{"name":"task_id","in":"path","required":true,"schema":{"type":"string","title":"Task Id"}},{"name":"completed","in":"query","required":false,"schema":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Completed"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/trackers":{"get":{"tags":["trackers"],"summary":"List Trackers V2","description":"List Trackers V2 landing data.","operationId":"list_trackers_v2_api_trackers_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"default":100,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Offset"}},{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"default":"active","title":"Status"}},{"name":"search","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Search"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["trackers"],"summary":"Create Tracker V2","description":"Create a Trackers V2 tracker.","operationId":"create_tracker_v2_api_trackers_post","responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/trackers/summary":{"get":{"tags":["trackers"],"summary":"Trackers V2 Summary","description":"Return compact Trackers V2 summary data.","operationId":"trackers_v2_summary_api_trackers_summary_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/trackers/goals":{"get":{"tags":["trackers"],"summary":"List Tracker Goals V2","description":"List Trackers-owned goals.","operationId":"list_tracker_goals_v2_api_trackers_goals_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"default":100,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Offset"}},{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"default":"active","title":"Status"}},{"name":"search","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Search"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["trackers"],"summary":"Create Tracker Goal V2","description":"Create a Trackers-owned goal.","operationId":"create_tracker_goal_v2_api_trackers_goals_post","responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/trackers/goals/{goal_id}":{"patch":{"tags":["trackers"],"summary":"Update Tracker Goal V2","description":"Update a Trackers-owned goal.","operationId":"update_tracker_goal_v2_api_trackers_goals__goal_id__patch","parameters":[{"name":"goal_id","in":"path","required":true,"schema":{"type":"string","title":"Goal Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["trackers"],"summary":"Archive Tracker Goal V2","description":"Archive a Trackers-owned goal.","operationId":"archive_tracker_goal_v2_api_trackers_goals__goal_id__delete","parameters":[{"name":"goal_id","in":"path","required":true,"schema":{"type":"string","title":"Goal Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/trackers/goals/{goal_id}/complete":{"post":{"tags":["trackers"],"summary":"Complete Tracker Goal V2","description":"Complete a Trackers-owned goal.","operationId":"complete_tracker_goal_v2_api_trackers_goals__goal_id__complete_post","parameters":[{"name":"goal_id","in":"path","required":true,"schema":{"type":"string","title":"Goal Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/trackers/{tracker_id}":{"get":{"tags":["trackers"],"summary":"Get Tracker V2","description":"Get a Trackers V2 detail payload.","operationId":"get_tracker_v2_api_trackers__tracker_id__get","parameters":[{"name":"tracker_id","in":"path","required":true,"schema":{"type":"string","title":"Tracker Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"patch":{"tags":["trackers"],"summary":"Update Tracker V2","description":"Update a Trackers V2 tracker.","operationId":"update_tracker_v2_api_trackers__tracker_id__patch","parameters":[{"name":"tracker_id","in":"path","required":true,"schema":{"type":"string","title":"Tracker Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["trackers"],"summary":"Archive Tracker V2","description":"Archive a Trackers V2 tracker.","operationId":"archive_tracker_v2_api_trackers__tracker_id__delete","parameters":[{"name":"tracker_id","in":"path","required":true,"schema":{"type":"string","title":"Tracker Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/trackers/{tracker_id}/entries":{"get":{"tags":["trackers"],"summary":"List Tracker Entries V2","description":"List entries for a Trackers V2 tracker.","operationId":"list_tracker_entries_v2_api_trackers__tracker_id__entries_get","parameters":[{"name":"tracker_id","in":"path","required":true,"schema":{"type":"string","title":"Tracker Id"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"default":100,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Offset"}},{"name":"date_from","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Date From"}},{"name":"date_to","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Date To"}},{"name":"include_deleted","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Include Deleted"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["trackers"],"summary":"Create Tracker Entry V2","description":"Create a Trackers V2 entry.","operationId":"create_tracker_entry_v2_api_trackers__tracker_id__entries_post","parameters":[{"name":"tracker_id","in":"path","required":true,"schema":{"type":"string","title":"Tracker Id"}}],"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/trackers/{tracker_id}/entries/{entry_id}":{"patch":{"tags":["trackers"],"summary":"Update Tracker Entry V2","description":"Update a Trackers V2 entry.","operationId":"update_tracker_entry_v2_api_trackers__tracker_id__entries__entry_id__patch","parameters":[{"name":"tracker_id","in":"path","required":true,"schema":{"type":"string","title":"Tracker Id"}},{"name":"entry_id","in":"path","required":true,"schema":{"type":"string","title":"Entry Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["trackers"],"summary":"Delete Tracker Entry V2","description":"Soft-delete a Trackers V2 entry.","operationId":"delete_tracker_entry_v2_api_trackers__tracker_id__entries__entry_id__delete","parameters":[{"name":"tracker_id","in":"path","required":true,"schema":{"type":"string","title":"Tracker Id"}},{"name":"entry_id","in":"path","required":true,"schema":{"type":"string","title":"Entry Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/trackers/{tracker_id}/entries/{entry_id}/restore":{"post":{"tags":["trackers"],"summary":"Restore Tracker Entry V2","description":"Restore a soft-deleted Trackers V2 entry.","operationId":"restore_tracker_entry_v2_api_trackers__tracker_id__entries__entry_id__restore_post","parameters":[{"name":"tracker_id","in":"path","required":true,"schema":{"type":"string","title":"Tracker Id"}},{"name":"entry_id","in":"path","required":true,"schema":{"type":"string","title":"Entry Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/trackers/{tracker_id}/field-tags":{"get":{"tags":["trackers"],"summary":"Get Tracker Field Tags V2","description":"Return derived tags for one tracker field.","operationId":"get_tracker_field_tags_v2_api_trackers__tracker_id__field_tags_get","parameters":[{"name":"tracker_id","in":"path","required":true,"schema":{"type":"string","title":"Tracker Id"}},{"name":"field_id","in":"query","required":true,"schema":{"type":"string","title":"Field Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/trackers/{tracker_id}/field-tags/{field_id}":{"patch":{"tags":["trackers"],"summary":"Update Tracker Field Tags V2","description":"Rename, merge, or delete derived tags for one tracker field.","operationId":"update_tracker_field_tags_v2_api_trackers__tracker_id__field_tags__field_id__patch","parameters":[{"name":"tracker_id","in":"path","required":true,"schema":{"type":"string","title":"Tracker Id"}},{"name":"field_id","in":"path","required":true,"schema":{"type":"string","title":"Field Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/trackers/{tracker_id}/export.csv":{"get":{"tags":["trackers"],"summary":"Export Tracker Csv V2","description":"Export a symptom tracker as CSV.","operationId":"export_tracker_csv_v2_api_trackers__tracker_id__export_csv_get","parameters":[{"name":"tracker_id","in":"path","required":true,"schema":{"type":"string","title":"Tracker Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/shortcuts":{"get":{"tags":["shortcuts"],"summary":"List Shortcuts","description":"List all user's shortcuts, ordered by sort_order.","operationId":"list_shortcuts_api_shortcuts_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}},"post":{"tags":["shortcuts"],"summary":"Create Shortcut","description":"Star an item by creating a shortcut.","operationId":"create_shortcut_api_shortcuts_post","responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/shortcuts/{item_type}/{item_id}":{"delete":{"tags":["shortcuts"],"summary":"Delete Shortcut","description":"Unstar an item by deleting its shortcut.","operationId":"delete_shortcut_api_shortcuts__item_type___item_id__delete","parameters":[{"name":"item_type","in":"path","required":true,"schema":{"type":"string","title":"Item Type"}},{"name":"item_id","in":"path","required":true,"schema":{"type":"string","title":"Item Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/shortcuts/reorder":{"patch":{"tags":["shortcuts"],"summary":"Reorder Shortcuts","description":"Update sort_order for shortcuts.","operationId":"reorder_shortcuts_api_shortcuts_reorder_patch","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/widget/daily-brief":{"get":{"tags":["widget"],"summary":"Get Daily Brief","description":"Lightweight endpoint for iOS widget data.","operationId":"get_daily_brief_api_widget_daily_brief_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DailyBriefResponse"}}}}}}},"/api/sim/execute-tool":{"post":{"tags":["sim"],"summary":"Sim Execute Tool","description":"Execute a single tool handler against the real database for sim testing.","operationId":"sim_execute_tool_api_sim_execute_tool_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/sim/preflight":{"post":{"tags":["sim"],"summary":"Sim Preflight","description":"Run the real preflight pipeline for a user message.","operationId":"sim_preflight_api_sim_preflight_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/test/imessage-send":{"post":{"summary":"Test Imessage Send","description":"Send a test iMessage via the active provider. Admin-only.","operationId":"test_imessage_send_api_test_imessage_send_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/test/imessage-status":{"post":{"summary":"Test Imessage Status","description":"Check Sendblue account status — lines, webhooks, and rot detection. Admin-only.\n\nReturns lines, all registered webhooks (dict-of-lists keyed by type),\nconfigured from_number, whether the webhook auth secret is set, whether\nour canonical receive webhook is registered in Sendblue's config, and\nwhether any legacy tokenized receive URLs are still present. Webhook URLs\nare masked for safe screenshotting.","operationId":"test_imessage_status_api_test_imessage_status_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/test/imessage-webhook-setup":{"post":{"summary":"Test Imessage Webhook Setup","description":"Register Beckett's inbound webhook with Sendblue (idempotent). Admin-only.\n\nBody: {\"base_url\": \"https://beckett-api.up.railway.app\"}\n\nUses PUT to replace Sendblue's webhook config rather than POST-to-add,\nso running this twice leaves exactly one canonical receive webhook —\nnever stale duplicates.\n\nPreserves any non-receive webhook types that are already registered\n(call_log, contact_created, etc.) by reading current state first and\nmerging in the new `receive` entry.","operationId":"test_imessage_webhook_setup_api_test_imessage_webhook_setup_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/test/imessage-link":{"post":{"summary":"Test Imessage Link","description":"Link a phone number to a user account. Admin-only.\n\nBody: {\"phone_number\": \"+13035024378\"}\nOptional: {\"user_id\": \"uuid\"} to link a different user (default: current user).\n\nPhone number is normalized to E.164 via `normalize_phone` on input,\neliminating format-drift bugs between OTP linking, admin linking, and\nthe Sendblue inbound handler's lookup.","operationId":"test_imessage_link_api_test_imessage_link_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/webhooks/sendblue/{token}":{"post":{"summary":"Sendblue Webhook","description":"Inbound Sendblue webhook — receives iMessage events from beta users.\n\nAuth: shared-secret auth is preferred and, when `SENDBLUE_GLOBAL_SECRET`\nis configured, is the ONLY accepted mechanism — the legacy tokenized URL\nbecomes inert (401). The legacy URL-path token on\n`/api/webhooks/sendblue/{token}` is only honored when the shared secret is\nunconfigured, giving operators a transitional auth path while Sendblue is\nrotated to the canonical URL. Shared-secret auth accepts either a direct\nsecret echo or an HMAC-over-raw-body signature (provider docs / #1523\ndiscovery).\n\nSendblue returns 5xx-retry on non-2xx; we always return 200 on valid auth\nso Sendblue doesn't retry after a processing crash.\n\nFilters:\n  1. Shared-secret auth (when configured) OR legacy path-token auth\n     (only when shared secret is unset) must verify (401 otherwise)\n  2. is_outbound=true → ignore (echo)\n  3. message_type != \"message\" → ignore (call_log, contact_created, etc.)\n  4. group_id set → ignore (no group chat support)\n  5. status present and != \"RECEIVED\" → ignore (QUEUED/SENT/DELIVERED)\n  6. Duplicate message_handle → ignore (Sendblue retry)\n  7. Missing from_number → ignore\n  8. Empty content with no media_url → purge Sendblue copy + ignore\n\nOn success, spawns `_handle_imessage_inbound` background task and\nreturns 200 immediately so Sendblue marks the delivery done.","operationId":"sendblue_webhook_api_webhooks_sendblue__token__post","parameters":[{"name":"token","in":"path","required":true,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/webhooks/sendblue":{"post":{"summary":"Sendblue Webhook","description":"Inbound Sendblue webhook — receives iMessage events from beta users.\n\nAuth: shared-secret auth is preferred and, when `SENDBLUE_GLOBAL_SECRET`\nis configured, is the ONLY accepted mechanism — the legacy tokenized URL\nbecomes inert (401). The legacy URL-path token on\n`/api/webhooks/sendblue/{token}` is only honored when the shared secret is\nunconfigured, giving operators a transitional auth path while Sendblue is\nrotated to the canonical URL. Shared-secret auth accepts either a direct\nsecret echo or an HMAC-over-raw-body signature (provider docs / #1523\ndiscovery).\n\nSendblue returns 5xx-retry on non-2xx; we always return 200 on valid auth\nso Sendblue doesn't retry after a processing crash.\n\nFilters:\n  1. Shared-secret auth (when configured) OR legacy path-token auth\n     (only when shared secret is unset) must verify (401 otherwise)\n  2. is_outbound=true → ignore (echo)\n  3. message_type != \"message\" → ignore (call_log, contact_created, etc.)\n  4. group_id set → ignore (no group chat support)\n  5. status present and != \"RECEIVED\" → ignore (QUEUED/SENT/DELIVERED)\n  6. Duplicate message_handle → ignore (Sendblue retry)\n  7. Missing from_number → ignore\n  8. Empty content with no media_url → purge Sendblue copy + ignore\n\nOn success, spawns `_handle_imessage_inbound` background task and\nreturns 200 immediately so Sendblue marks the delivery done.","operationId":"sendblue_webhook_api_webhooks_sendblue_post","parameters":[{"name":"token","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/client-diagnostics/stall":{"post":{"summary":"Report Client Stall","description":"Record a main-thread stall reported by the iOS client.\n\nFire-and-forget from the client. No response body, no short-circuit, no\nLLM hop. Used for post-hoc triage of watchdog freezes that don't\nsymbolicate (see #1483).","operationId":"report_client_stall_api_client_diagnostics_stall_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ClientStallPayload"}}},"required":true},"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/client-diagnostics/metrickit":{"post":{"summary":"Report Metrickit Diagnostic","description":"Record a MetricKit diagnostic delivered to the iOS client.\n\nMetricKit payloads are delivered asynchronously by iOS (typically on\nthe next launch after a hang/crash/CPU-exception). They survive\nwatchdog and jetsam kills, which is exactly the class of Claudia's\nfreezes that never produce symbolicated Xcode crash logs — see #1483.","operationId":"report_metrickit_diagnostic_api_client_diagnostics_metrickit_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MetricKitReportPayload"}}},"required":true},"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/connect/muse":{"get":{"tags":["Muse setup"],"summary":"Muse Setup","operationId":"muse_setup_connect_muse_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/connect/muse/setup.md":{"get":{"tags":["Muse setup"],"summary":"Muse Setup Guide","operationId":"muse_setup_guide_connect_muse_setup_md_get","responses":{"200":{"description":"Successful Response"}}}},"/connect/muse/manifest.json":{"get":{"tags":["Muse setup"],"summary":"Muse Setup Manifest","operationId":"muse_setup_manifest_connect_muse_manifest_json_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/connect/muse/releases/{version}/{filename}":{"get":{"tags":["Muse setup"],"summary":"Muse Setup Asset","operationId":"muse_setup_asset_connect_muse_releases__version___filename__get","parameters":[{"name":"version","in":"path","required":true,"schema":{"type":"string","title":"Version"}},{"name":"filename","in":"path","required":true,"schema":{"type":"string","title":"Filename"}}],"responses":{"200":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/connector/oauth/consent/start":{"post":{"summary":"Connector Consent Start","operationId":"connector_consent_start_api_connector_oauth_consent_start_post","requestBody":{"content":{"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/Body_connector_consent_start_api_connector_oauth_consent_start_post"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/connector/oauth/consent":{"post":{"summary":"Connector Consent Decision","operationId":"connector_consent_decision_api_connector_oauth_consent_post","requestBody":{"content":{"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/Body_connector_consent_decision_api_connector_oauth_consent_post"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/connector/oauth/android-beta":{"post":{"summary":"Connector Android Beta Request","operationId":"connector_android_beta_request_api_connector_oauth_android_beta_post","requestBody":{"content":{"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/Body_connector_android_beta_request_api_connector_oauth_android_beta_post"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"AccessRequestInput":{"properties":{"email":{"type":"string","format":"email","title":"Email"},"name":{"type":"string","title":"Name"},"message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Message"}},"type":"object","required":["email","name"],"title":"AccessRequestInput"},"AddAttachmentRequest":{"properties":{"type":{"type":"string","title":"Type"},"file_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"File Id"},"url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Url"},"title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Title"}},"type":"object","required":["type"],"title":"AddAttachmentRequest"},"AddMediaListItemsRequest":{"properties":{"entity_ids":{"items":{"type":"string"},"type":"array","title":"Entity Ids"}},"type":"object","required":["entity_ids"],"title":"AddMediaListItemsRequest"},"AdminAndroidBetaRequestResponse":{"properties":{"user_id":{"type":"string","title":"User Id"},"email":{"type":"string","title":"Email"},"display_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Display Name"},"provider":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Provider"},"requested_at":{"type":"string","format":"date-time","title":"Requested At"},"is_internal":{"type":"boolean","title":"Is Internal"}},"type":"object","required":["user_id","email","requested_at","is_internal"],"title":"AdminAndroidBetaRequestResponse"},"AdminConnectorConnectionResponse":{"properties":{"tool_calls":{"type":"integer","title":"Tool Calls"},"successful_calls":{"type":"integer","title":"Successful Calls"},"failed_calls":{"type":"integer","title":"Failed Calls"},"last_call_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Call At"},"grant_id":{"type":"string","title":"Grant Id"},"user_id":{"type":"string","title":"User Id"},"email":{"type":"string","title":"Email"},"display_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Display Name"},"provider":{"type":"string","title":"Provider"},"first_connected_at":{"type":"string","format":"date-time","title":"First Connected At"},"connected_at":{"type":"string","format":"date-time","title":"Connected At"},"last_success_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Success At"},"authenticated_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Authenticated At"},"tools_discovered_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Tools Discovered At"},"status":{"type":"string","title":"Status"},"revoked_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Revoked At"},"memory_mode":{"type":"string","title":"Memory Mode"},"signup_source":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Signup Source"},"access_state":{"type":"string","title":"Access State"},"connection_count":{"type":"integer","title":"Connection Count"},"is_internal":{"type":"boolean","title":"Is Internal"}},"type":"object","required":["tool_calls","successful_calls","failed_calls","grant_id","user_id","email","provider","first_connected_at","connected_at","status","memory_mode","access_state","connection_count","is_internal"],"title":"AdminConnectorConnectionResponse"},"AdminConnectorProviderFunnelResponse":{"properties":{"tool_calls":{"type":"integer","title":"Tool Calls"},"successful_calls":{"type":"integer","title":"Successful Calls"},"failed_calls":{"type":"integer","title":"Failed Calls"},"last_call_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Call At"},"provider":{"type":"string","title":"Provider"},"display_name":{"type":"string","title":"Display Name"},"authorize_started":{"type":"integer","title":"Authorize Started"},"consent_viewed":{"type":"integer","title":"Consent Viewed"},"consent_blocked":{"type":"integer","title":"Consent Blocked"},"consent_canceled":{"type":"integer","title":"Consent Canceled"},"connected":{"type":"integer","title":"Connected"},"authenticated":{"type":"integer","title":"Authenticated"},"tools_discovered":{"type":"integer","title":"Tools Discovered"},"first_tool_call":{"type":"integer","title":"First Tool Call"},"connector_signups":{"type":"integer","title":"Connector Signups"},"active_connections":{"type":"integer","title":"Active Connections"}},"type":"object","required":["tool_calls","successful_calls","failed_calls","provider","display_name","authorize_started","consent_viewed","consent_blocked","consent_canceled","connected","authenticated","tools_discovered","first_tool_call","connector_signups","active_connections"],"title":"AdminConnectorProviderFunnelResponse"},"AdminConnectorReportResponse":{"properties":{"generated_at":{"type":"string","format":"date-time","title":"Generated At"},"period":{"type":"string","title":"Period"},"window_start":{"type":"string","format":"date-time","title":"Window Start"},"include_internal":{"type":"boolean","title":"Include Internal"},"providers":{"items":{"$ref":"#/components/schemas/AdminConnectorProviderFunnelResponse"},"type":"array","title":"Providers"},"connections":{"items":{"$ref":"#/components/schemas/AdminConnectorConnectionResponse"},"type":"array","title":"Connections"},"android_beta_requests":{"items":{"$ref":"#/components/schemas/AdminAndroidBetaRequestResponse"},"type":"array","title":"Android Beta Requests"},"total":{"type":"integer","title":"Total"},"limit":{"type":"integer","title":"Limit"},"offset":{"type":"integer","title":"Offset"},"has_more":{"type":"boolean","title":"Has More"}},"type":"object","required":["generated_at","period","window_start","include_internal","providers","connections","android_beta_requests","total","limit","offset","has_more"],"title":"AdminConnectorReportResponse"},"AdminDesktopCredentialRequest":{"properties":{"credential":{"type":"string","maxLength":512,"minLength":32,"title":"Credential"}},"type":"object","required":["credential"],"title":"AdminDesktopCredentialRequest"},"AdminDesktopEnrollRequest":{"properties":{"device_label":{"type":"string","maxLength":120,"minLength":1,"title":"Device Label","default":"Beckett Admin Desktop"}},"type":"object","title":"AdminDesktopEnrollRequest"},"AdminFeedbackListResponse":{"properties":{"feedback":{"items":{"$ref":"#/components/schemas/AdminFeedbackResponse"},"type":"array","title":"Feedback"},"total":{"type":"integer","title":"Total"},"limit":{"type":"integer","title":"Limit"},"offset":{"type":"integer","title":"Offset"},"has_more":{"type":"boolean","title":"Has More"},"status_counts":{"additionalProperties":{"type":"integer"},"type":"object","title":"Status Counts"}},"type":"object","required":["feedback","total","limit","offset","has_more","status_counts"],"title":"AdminFeedbackListResponse"},"AdminFeedbackResponse":{"properties":{"id":{"type":"string","title":"Id"},"user_id":{"type":"string","title":"User Id"},"user_email":{"type":"string","title":"User Email"},"feedback_type":{"type":"string","title":"Feedback Type"},"title":{"type":"string","title":"Title"},"description":{"type":"string","title":"Description"},"context_snapshot":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Context Snapshot"},"status":{"type":"string","title":"Status"},"created_at":{"type":"string","title":"Created At"},"notified_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Notified At"},"message_count":{"type":"integer","title":"Message Count"},"last_message_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Last Message At"},"last_message_sender_role":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Last Message Sender Role"},"last_message_preview":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Last Message Preview"}},"type":"object","required":["id","user_id","user_email","feedback_type","title","description","status","created_at","message_count"],"title":"AdminFeedbackResponse"},"AdminFeedbackThreadResponse":{"properties":{"feedback":{"$ref":"#/components/schemas/AdminFeedbackResponse"},"messages":{"items":{"$ref":"#/components/schemas/FeedbackMessageResponse"},"type":"array","title":"Messages"}},"type":"object","required":["feedback","messages"],"title":"AdminFeedbackThreadResponse"},"AdminLoginRequest":{"properties":{"email":{"type":"string","format":"email","title":"Email"},"password":{"type":"string","title":"Password"},"totp_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Totp Code"},"mfa_setup_token":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Mfa Setup Token"},"remember_device":{"type":"boolean","title":"Remember Device","default":true}},"type":"object","required":["email","password"],"title":"AdminLoginRequest"},"AdminOverviewResponse":{"properties":{"generated_at":{"type":"string","format":"date-time","title":"Generated At"},"window":{"additionalProperties":true,"type":"object","title":"Window"},"telemetry_health":{"$ref":"#/components/schemas/TelemetryHealthResponse"},"activity":{"additionalProperties":true,"type":"object","title":"Activity"},"previews":{"$ref":"#/components/schemas/OverviewPreviewsResponse"}},"type":"object","required":["generated_at","window","telemetry_health","activity","previews"],"title":"AdminOverviewResponse"},"AdminPromotionReportResponse":{"properties":{"generated_at":{"type":"string","format":"date-time","title":"Generated At"},"partial_data":{"type":"boolean","title":"Partial Data"},"partial_reason":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Partial Reason"},"monthly_offer":{"$ref":"#/components/schemas/PromotionOfferMetricsResponse"},"winback_redemptions":{"type":"integer","title":"Winback Redemptions"},"latest_winback_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Latest Winback At"}},"type":"object","required":["generated_at","partial_data","monthly_offer","winback_redemptions"],"title":"AdminPromotionReportResponse"},"AdminSubscriptionSupportNoteCreate":{"properties":{"body":{"type":"string","maxLength":5000,"minLength":1,"title":"Body"},"note_type":{"type":"string","maxLength":60,"title":"Note Type","default":"note"}},"type":"object","required":["body"],"title":"AdminSubscriptionSupportNoteCreate"},"AdminSubscriptionUpdate":{"properties":{"has_lifetime_access":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Has Lifetime Access"},"is_beta_discount_eligible":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Beta Discount Eligible"},"admin_override_reason":{"anyOf":[{"type":"string","maxLength":1000},{"type":"null"}],"title":"Admin Override Reason"},"support_note":{"anyOf":[{"type":"string","maxLength":5000},{"type":"null"}],"title":"Support Note"}},"type":"object","title":"AdminSubscriptionUpdate"},"AdminUserUpdate":{"properties":{"is_active":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Active"},"is_admin":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Admin"},"monthly_spend_limit_usd":{"anyOf":[{"type":"number","minimum":-1.0},{"type":"null"}],"title":"Monthly Spend Limit Usd"},"cap_override_reason":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Cap Override Reason"},"chat_model_override":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Chat Model Override"}},"type":"object","title":"AdminUserUpdate"},"AgentAttribution":{"properties":{"provider":{"type":"string","title":"Provider"},"name":{"type":"string","title":"Name"},"at":{"type":"string","format":"date-time","title":"At"}},"type":"object","required":["provider","name","at"],"title":"AgentAttribution"},"AgentChangeGroup":{"properties":{"occurred_at":{"type":"string","format":"date-time","title":"Occurred At"},"changes":{"items":{"$ref":"#/components/schemas/AgentChangeItem"},"type":"array","title":"Changes"}},"type":"object","required":["occurred_at","changes"],"title":"AgentChangeGroup"},"AgentChangeItem":{"properties":{"kind":{"type":"string","title":"Kind"},"id":{"type":"string","title":"Id"},"title":{"type":"string","title":"Title"},"change":{"type":"string","enum":["CREATED","UPDATED","COMPLETED","ARCHIVED","DELETED"],"title":"Change"},"summary":{"type":"string","title":"Summary"},"detail_target":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Detail Target"},"href":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Href"},"available":{"type":"boolean","title":"Available"}},"type":"object","required":["kind","id","title","change","summary","available"],"title":"AgentChangeItem"},"AgentChangesResponse":{"properties":{"provider":{"type":"string","title":"Provider"},"name":{"type":"string","title":"Name"},"groups":{"items":{"$ref":"#/components/schemas/AgentChangeGroup"},"type":"array","title":"Groups"},"next_before":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Next Before"}},"type":"object","required":["provider","name","groups"],"title":"AgentChangesResponse"},"AgentChangesSeenRequest":{"properties":{"through":{"type":"string","format":"date-time","title":"Through"}},"type":"object","required":["through"],"title":"AgentChangesSeenRequest"},"AgentChangesSeenResponse":{"properties":{"unseen_count":{"type":"integer","title":"Unseen Count"}},"type":"object","required":["unseen_count"],"title":"AgentChangesSeenResponse"},"AgentSummary":{"properties":{"provider":{"type":"string","title":"Provider"},"name":{"type":"string","title":"Name"},"connected":{"type":"boolean","title":"Connected"},"last_change_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Change At"},"unseen_count":{"type":"integer","title":"Unseen Count"},"unseen_titles":{"items":{"type":"string"},"type":"array","title":"Unseen Titles"}},"type":"object","required":["provider","name","connected","unseen_count","unseen_titles"],"title":"AgentSummary"},"AgentsResponse":{"properties":{"agents":{"items":{"$ref":"#/components/schemas/AgentSummary"},"type":"array","title":"Agents"}},"type":"object","required":["agents"],"title":"AgentsResponse"},"AnalyticsEventRequest":{"properties":{"event_type":{"type":"string","title":"Event Type"},"anonymous_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Anonymous Id"},"utm_source":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Utm Source"},"utm_medium":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Utm Medium"},"utm_campaign":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Utm Campaign"},"utm_content":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Utm Content"},"utm_term":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Utm Term"},"referrer":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Referrer"},"properties":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Properties"}},"type":"object","required":["event_type"],"title":"AnalyticsEventRequest"},"AppleAuthRequest":{"properties":{"identity_token":{"type":"string","title":"Identity Token"},"full_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Full Name"},"authorization_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization Code"},"platform":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Platform"}},"type":"object","required":["identity_token"],"title":"AppleAuthRequest"},"ApplyGoogleBooksMatchRequest":{"properties":{"google_books_id":{"type":"string","title":"Google Books Id"}},"type":"object","required":["google_books_id"],"title":"ApplyGoogleBooksMatchRequest"},"ApplyTmdbMatchRequest":{"properties":{"tmdb_id":{"type":"integer","title":"Tmdb Id"}},"type":"object","required":["tmdb_id"],"title":"ApplyTmdbMatchRequest"},"ArchiveNoteRequest":{"properties":{"reason":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Reason"}},"type":"object","title":"ArchiveNoteRequest"},"AssignCategoryRequest":{"properties":{"category_id":{"type":"string","title":"Category Id"}},"type":"object","required":["category_id"],"title":"AssignCategoryRequest"},"Body_connector_android_beta_request_api_connector_oauth_android_beta_post":{"properties":{"csrf_token":{"type":"string","maxLength":256,"minLength":16,"title":"Csrf Token"},"redirect_uri":{"type":"string","maxLength":4096,"minLength":1,"title":"Redirect Uri"},"agent":{"type":"string","maxLength":32,"minLength":1,"title":"Agent"},"agent_name":{"type":"string","maxLength":200,"minLength":1,"title":"Agent Name"},"signature":{"type":"string","maxLength":64,"minLength":64,"title":"Signature"}},"type":"object","required":["csrf_token","redirect_uri","agent","agent_name","signature"],"title":"Body_connector_android_beta_request_api_connector_oauth_android_beta_post"},"Body_connector_consent_decision_api_connector_oauth_consent_post":{"properties":{"request_token":{"type":"string","maxLength":256,"minLength":16,"title":"Request Token"},"csrf_token":{"type":"string","maxLength":256,"minLength":16,"title":"Csrf Token"},"decision":{"type":"string","enum":["approve","deny"],"title":"Decision"},"sensitive_context_enabled":{"type":"boolean","title":"Sensitive Context Enabled","default":false}},"type":"object","required":["request_token","csrf_token","decision"],"title":"Body_connector_consent_decision_api_connector_oauth_consent_post"},"Body_connector_consent_start_api_connector_oauth_consent_start_post":{"properties":{"request_token":{"type":"string","maxLength":256,"minLength":16,"title":"Request Token"}},"type":"object","required":["request_token"],"title":"Body_connector_consent_start_api_connector_oauth_consent_start_post"},"Body_create_block_from_csv_api_projects__project_id__blocks_from_csv_post":{"properties":{"file":{"type":"string","contentMediaType":"application/octet-stream","title":"File"}},"type":"object","required":["file"],"title":"Body_create_block_from_csv_api_projects__project_id__blocks_from_csv_post"},"Body_upload_file_api_files_upload_post":{"properties":{"file":{"type":"string","contentMediaType":"application/octet-stream","title":"File"}},"type":"object","required":["file"],"title":"Body_upload_file_api_files_upload_post"},"BrowserTrialStatus":{"properties":{"enabled":{"type":"boolean","title":"Enabled"},"eligible":{"type":"boolean","title":"Eligible"},"status":{"type":"string","enum":["available","unavailable","pending","active","expired","consumed"],"title":"Status"},"reason":{"anyOf":[{"type":"string","enum":["disabled","setup_required","existing_access","previous_subscription"]},{"type":"null"}],"title":"Reason"},"duration_days":{"type":"integer","title":"Duration Days"},"started_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Started At"},"expires_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Expires At"}},"type":"object","required":["enabled","eligible","status","duration_days"],"title":"BrowserTrialStatus"},"CelebrationShownRequest":{"properties":{"celebration":{"type":"string","title":"Celebration"}},"type":"object","required":["celebration"],"title":"CelebrationShownRequest"},"ChatRequest":{"properties":{"message":{"type":"string","title":"Message"},"client_turn_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Client Turn Id"},"project_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Project Id"},"meal_plan_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Meal Plan Id"},"notes_context":{"type":"boolean","title":"Notes Context","default":false},"section_scope":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Section Scope"},"attachment":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Attachment"},"attachment_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Attachment Name"},"attachment_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Attachment Type"},"attachment_ids":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Attachment Ids"},"onboarding":{"anyOf":[{"$ref":"#/components/schemas/OnboardingChatRequest"},{"type":"null"}]},"shared_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Shared Url"},"conversation_starter":{"anyOf":[{"$ref":"#/components/schemas/ConversationStarterRequest"},{"type":"null"}]},"selected_generated_image_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Selected Generated Image Id"},"original_request_message_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Original Request Message Id"}},"type":"object","required":["message"],"title":"ChatRequest"},"CheckInScheduleUpdate":{"properties":{"preferred_time":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Preferred Time"},"frequency":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Frequency"},"custom_days":{"anyOf":[{"items":{},"type":"array"},{"type":"null"}],"title":"Custom Days"},"interval_days":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Interval Days"},"interval_anchor_date":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Interval Anchor Date"},"lead_time_minutes":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Lead Time Minutes"},"label":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Label"},"prompt_template":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Prompt Template"},"is_active":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Active"}},"type":"object","title":"CheckInScheduleUpdate"},"CleanupChatRequest":{"properties":{"message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Message"},"conversation_history":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Conversation History","default":[]}},"type":"object","title":"CleanupChatRequest"},"ClientAnalyticsBatchRequest":{"properties":{"schema_version":{"type":"integer","title":"Schema Version","default":1},"platform":{"type":"string","maxLength":20,"title":"Platform","default":"ios"},"surface":{"type":"string","maxLength":60,"title":"Surface","default":"consumer_app"},"app_version":{"anyOf":[{"type":"string","maxLength":40},{"type":"null"}],"title":"App Version"},"app_build":{"anyOf":[{"type":"string","maxLength":40},{"type":"null"}],"title":"App Build"},"anonymous_id":{"type":"string","title":"Anonymous Id"},"events":{"items":{"$ref":"#/components/schemas/ClientAnalyticsEvent"},"type":"array","title":"Events"}},"type":"object","required":["anonymous_id","events"],"title":"ClientAnalyticsBatchRequest"},"ClientAnalyticsEvent":{"properties":{"event_id":{"type":"string","format":"uuid","title":"Event Id"},"event_type":{"type":"string","title":"Event Type"},"occurred_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Occurred At"},"session_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Session Id"},"properties":{"additionalProperties":{"type":"string"},"type":"object","title":"Properties"}},"type":"object","required":["event_type"],"title":"ClientAnalyticsEvent"},"ClientStallPayload":{"properties":{"duration_ms":{"type":"integer","minimum":0.0,"title":"Duration Ms"},"occurred_at":{"type":"string","format":"date-time","title":"Occurred At"},"view_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"View Name"},"device_model":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Device Model"},"os_version":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Os Version"},"app_version":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"App Version"},"app_build":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"App Build"},"dynamic_type_size":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Dynamic Type Size"},"reduce_motion":{"type":"boolean","title":"Reduce Motion","default":false},"event_count":{"type":"integer","minimum":1.0,"title":"Event Count","default":1}},"type":"object","required":["duration_ms","occurred_at"],"title":"ClientStallPayload","description":"Payload from iOS `StallReporter` when MainThreadWatchdog fires."},"CodeVerifyRequest":{"properties":{"email":{"type":"string","format":"email","title":"Email"},"code":{"type":"string","maxLength":20,"title":"Code"},"utm_source":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Utm Source"},"utm_medium":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Utm Medium"},"utm_campaign":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Utm Campaign"},"utm_content":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Utm Content"},"utm_term":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Utm Term"}},"type":"object","required":["email","code"],"title":"CodeVerifyRequest","description":"The 6-digit code from a web sign-in email, entered where sign-in started."},"CommunicationPreferencesResponse":{"properties":{"tone":{"type":"string","title":"Tone"},"note":{"type":"string","title":"Note"},"compiled":{"type":"string","title":"Compiled"},"updated_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Updated At"}},"type":"object","required":["tone","note","compiled"],"title":"CommunicationPreferencesResponse"},"ConnectionInviteRequest":{"properties":{"email":{"type":"string","format":"email","title":"Email"}},"type":"object","required":["email"],"title":"ConnectionInviteRequest"},"ContentReportRequest":{"properties":{"reported_user_id":{"type":"string","title":"Reported User Id"},"source_type":{"type":"string","title":"Source Type"},"source_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Source Id"},"project_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Project Id"},"reason":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Reason"},"content_snapshot":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Content Snapshot"},"metadata":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Metadata"}},"type":"object","required":["reported_user_id","source_type"],"title":"ContentReportRequest"},"ConversationStarterRequest":{"properties":{"mode":{"type":"string","title":"Mode"}},"type":"object","required":["mode"],"title":"ConversationStarterRequest"},"CreateBlockRequest":{"properties":{"title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Title"},"items":{"items":{"type":"string"},"type":"array","title":"Items"},"type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Type"},"block_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Block Type"}},"type":"object","title":"CreateBlockRequest"},"CreateClipRequest":{"properties":{"url":{"type":"string","title":"Url"},"title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Title"},"selected_text":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Selected Text"},"page_content":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Page Content"},"site_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Site Name"},"favicon_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Favicon Url"}},"type":"object","required":["url"],"title":"CreateClipRequest"},"CreateEntityRelationshipRequest":{"properties":{"target_entity_id":{"type":"string","title":"Target Entity Id"},"relationship_type":{"type":"string","title":"Relationship Type"},"context":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Context"}},"type":"object","required":["target_entity_id","relationship_type"],"title":"CreateEntityRelationshipRequest"},"CreateEntityRequest":{"properties":{"name":{"type":"string","title":"Name"},"subtype":{"type":"string","title":"Subtype","default":"person"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"aliases":{"anyOf":[{"items":{},"type":"array"},{"type":"null"}],"title":"Aliases"},"context":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Context"}},"type":"object","required":["name"],"title":"CreateEntityRequest"},"CreateFeedbackRequest":{"properties":{"feedback_type":{"type":"string","title":"Feedback Type"},"title":{"type":"string","title":"Title"},"description":{"type":"string","title":"Description"}},"type":"object","required":["feedback_type","title","description"],"title":"CreateFeedbackRequest"},"CreateGroceryFromRecipesRequest":{"properties":{"recipe_ids":{"items":{"type":"string"},"type":"array","title":"Recipe Ids"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"}},"type":"object","required":["recipe_ids"],"title":"CreateGroceryFromRecipesRequest"},"CreateMealPlanFromRecipesRequest":{"properties":{"recipe_ids":{"items":{"type":"string"},"type":"array","title":"Recipe Ids"},"start_date":{"type":"string","title":"Start Date"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"}},"type":"object","required":["recipe_ids","start_date"],"title":"CreateMealPlanFromRecipesRequest"},"CreateMediaListRequest":{"properties":{"name":{"type":"string","maxLength":255,"title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"icon":{"anyOf":[{"type":"string","maxLength":50},{"type":"null"}],"title":"Icon"}},"type":"object","required":["name"],"title":"CreateMediaListRequest"},"CreateNoteRequest":{"properties":{"content":{"type":"string","title":"Content"}},"type":"object","required":["content"],"title":"CreateNoteRequest"},"CreateNotificationRequest":{"properties":{"title":{"type":"string","title":"Title"},"body":{"type":"string","title":"Body"},"notification_type":{"type":"string","title":"Notification Type"}},"type":"object","required":["title","body","notification_type"],"title":"CreateNotificationRequest"},"CreatePeopleGroupRequest":{"properties":{"name":{"type":"string","title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"icon":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Icon"},"member_ids":{"items":{"type":"string"},"type":"array","title":"Member Ids","default":[]}},"type":"object","required":["name"],"title":"CreatePeopleGroupRequest"},"CreateProjectRequest":{"properties":{"name":{"type":"string","title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"icon":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Icon"},"pinned_note_ids":{"items":{"type":"string"},"type":"array","title":"Pinned Note Ids","default":[]},"blocks":{"anyOf":[{"items":{"$ref":"#/components/schemas/ScaffoldBlockRequest"},"type":"array"},{"type":"null"}],"title":"Blocks"}},"type":"object","required":["name"],"title":"CreateProjectRequest"},"CreateRecipeTagRequest":{"properties":{"name":{"type":"string","title":"Name"},"recipe_ids":{"items":{"type":"string"},"type":"array","title":"Recipe Ids"}},"type":"object","required":["name","recipe_ids"],"title":"CreateRecipeTagRequest"},"CreateShareLinkRequest":{"properties":{"ttl_days":{"anyOf":[{"type":"integer","maximum":365.0,"minimum":1.0},{"type":"null"}],"title":"Ttl Days"}},"type":"object","title":"CreateShareLinkRequest","description":"Optional body for POST /api/projects/{project_id}/share-link.\n\nttl_days: if set, the new link expires at NOW() + ttl_days. Default\nNone = never expires. Bounds 1..365 prevent nonsensical or\nindefinite-but-slightly-less-than-permanent values."},"DailyBriefResponse":{"properties":{"greeting":{"type":"string","title":"Greeting"},"events":{"items":{"$ref":"#/components/schemas/WidgetEvent"},"type":"array","title":"Events"},"notes":{"items":{"$ref":"#/components/schemas/WidgetNote"},"type":"array","title":"Notes"},"projects":{"items":{"$ref":"#/components/schemas/WidgetProject"},"type":"array","title":"Projects"},"tasks":{"items":{"$ref":"#/components/schemas/WidgetTask"},"type":"array","title":"Tasks"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"}},"type":"object","required":["greeting","events","notes","projects","tasks","updated_at"],"title":"DailyBriefResponse"},"DashboardConfigRequest":{"properties":{"widgets":{"items":{},"type":"array","title":"Widgets"}},"type":"object","required":["widgets"],"title":"DashboardConfigRequest"},"DetailedHealthResponse":{"properties":{"status":{"type":"string","title":"Status"},"services":{"additionalProperties":true,"type":"object","title":"Services"},"response_time_ms":{"type":"number","title":"Response Time Ms"},"timestamp":{"type":"string","title":"Timestamp"},"pool":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Pool"}},"type":"object","required":["status","services","response_time_ms","timestamp"],"title":"DetailedHealthResponse"},"DeviceRegisterRequest":{"properties":{"token":{"type":"string","maxLength":500,"minLength":32,"title":"Token"},"platform":{"type":"string","title":"Platform"},"app_version":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"App Version"},"os_version":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Os Version"},"device_model":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Device Model"}},"type":"object","required":["token","platform"],"title":"DeviceRegisterRequest"},"DismissRecommendationRequest":{"properties":{"title":{"type":"string","title":"Title"},"media_type":{"type":"string","title":"Media Type"}},"type":"object","required":["title","media_type"],"title":"DismissRecommendationRequest"},"EmailTipsOptInRequest":{"properties":{"token":{"type":"string","title":"Token"}},"type":"object","required":["token"],"title":"EmailTipsOptInRequest"},"ExploreNoteItem":{"properties":{"id":{"type":"string","title":"Id"},"content":{"type":"string","title":"Content"},"created_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Created At"},"status":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status"},"confidence":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Confidence"},"tags":{"items":{"type":"string"},"type":"array","title":"Tags"},"categories":{"items":{"type":"string"},"type":"array","title":"Categories"},"linked_entities":{"items":{"type":"string"},"type":"array","title":"Linked Entities"}},"type":"object","required":["id","content","created_at","status","confidence","tags","categories","linked_entities"],"title":"ExploreNoteItem"},"ExploreNotesResponse":{"properties":{"notes":{"items":{"$ref":"#/components/schemas/ExploreNoteItem"},"type":"array","title":"Notes"},"total":{"type":"integer","title":"Total"}},"type":"object","required":["notes","total"],"title":"ExploreNotesResponse"},"FeedbackMessageRequest":{"properties":{"body":{"type":"string","title":"Body"}},"type":"object","required":["body"],"title":"FeedbackMessageRequest"},"FeedbackMessageResponse":{"properties":{"id":{"type":"string","title":"Id"},"feedback_id":{"type":"string","title":"Feedback Id"},"sender_role":{"type":"string","title":"Sender Role"},"sender_user_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Sender User Id"},"sender_name":{"type":"string","title":"Sender Name"},"body":{"type":"string","title":"Body"},"created_at":{"type":"string","title":"Created At"}},"type":"object","required":["id","feedback_id","sender_role","sender_name","body","created_at"],"title":"FeedbackMessageResponse"},"FileCategoryRequest":{"properties":{"category_id":{"type":"string","title":"Category Id"}},"type":"object","required":["category_id"],"title":"FileCategoryRequest"},"FileEntityRequest":{"properties":{"entity_id":{"type":"string","title":"Entity Id"}},"type":"object","required":["entity_id"],"title":"FileEntityRequest"},"FileTitleUpdateRequest":{"properties":{"title":{"type":"string","maxLength":120,"minLength":1,"title":"Title"}},"type":"object","required":["title"],"title":"FileTitleUpdateRequest"},"GameScoreSubmitRequest":{"properties":{"score":{"type":"number","title":"Score"},"character":{"type":"string","title":"Character"}},"type":"object","required":["score","character"],"title":"GameScoreSubmitRequest"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"HealthResponse":{"properties":{"status":{"type":"string","title":"Status"},"database":{"type":"boolean","title":"Database"}},"type":"object","required":["status","database"],"title":"HealthResponse"},"ImportRecipesToGroceryListRequest":{"properties":{"recipe_ids":{"items":{"type":"string"},"type":"array","title":"Recipe Ids"}},"type":"object","required":["recipe_ids"],"title":"ImportRecipesToGroceryListRequest"},"IngestionCountsResponse":{"properties":{"accepted":{"type":"integer","title":"Accepted"},"duplicate":{"type":"integer","title":"Duplicate"},"rejected":{"type":"integer","title":"Rejected"}},"type":"object","required":["accepted","duplicate","rejected"],"title":"IngestionCountsResponse"},"LinkCreatorRequest":{"properties":{"creator_name":{"type":"string","title":"Creator Name"}},"type":"object","required":["creator_name"],"title":"LinkCreatorRequest"},"LinkEntityRequest":{"properties":{"entity_id":{"type":"string","format":"uuid","title":"Entity Id"}},"type":"object","required":["entity_id"],"title":"LinkEntityRequest"},"LoginRequest":{"properties":{"email":{"type":"string","format":"email","title":"Email"},"platform":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Platform"},"connector":{"anyOf":[{"type":"string","enum":["claude","chatgpt","muse"]},{"type":"null"}],"title":"Connector"}},"type":"object","required":["email"],"title":"LoginRequest"},"MediaSearchRequest":{"properties":{"media_type":{"type":"string","pattern":"^(movie|tv|book)$","title":"Media Type"},"query":{"type":"string","maxLength":200,"minLength":1,"title":"Query"},"year":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Year"}},"type":"object","required":["media_type","query"],"title":"MediaSearchRequest"},"MergeCategoryRequest":{"properties":{"source_id":{"type":"string","title":"Source Id"},"target_id":{"type":"string","title":"Target Id"}},"type":"object","required":["source_id","target_id"],"title":"MergeCategoryRequest"},"MergeEntityRequest":{"properties":{"target_entity_id":{"type":"string","title":"Target Entity Id"}},"type":"object","required":["target_entity_id"],"title":"MergeEntityRequest"},"MergeTagsRequest":{"properties":{"source_tags":{"items":{"type":"string"},"type":"array","title":"Source Tags"},"target_tag":{"type":"string","title":"Target Tag"}},"type":"object","required":["source_tags","target_tag"],"title":"MergeTagsRequest"},"MetricKitReportPayload":{"properties":{"kind":{"type":"string","maxLength":50,"minLength":1,"title":"Kind"},"app_version":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"App Version"},"app_build":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"App Build"},"os_version":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Os Version"},"device_model":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Device Model"},"view_name":{"anyOf":[{"type":"string","maxLength":100},{"type":"null"}],"title":"View Name"},"breadcrumb_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Breadcrumb At"},"breadcrumb_metadata":{"additionalProperties":{"type":"string"},"type":"object","title":"Breadcrumb Metadata"},"dynamic_type_size":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Dynamic Type Size"},"reduce_motion":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Reduce Motion"},"payload":{"additionalProperties":true,"type":"object","title":"Payload"}},"type":"object","required":["kind"],"title":"MetricKitReportPayload","description":"One row from iOS `MetricKitReporter`. iOS unpacks each\n`MXDiagnosticPayload` into per-sub-diagnostic rows so queries can filter\nby `kind` cleanly (one hang report per row, not one envelope per row)."},"NoteReference":{"properties":{"id":{"type":"string","title":"Id"},"state":{"type":"string","enum":["active","pending","merged","captured","gone"],"title":"State"},"note_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Note Id"}},"type":"object","required":["id","state"],"title":"NoteReference"},"NoteReferencesResponse":{"properties":{"references":{"items":{"$ref":"#/components/schemas/NoteReference"},"type":"array","title":"References"}},"type":"object","required":["references"],"title":"NoteReferencesResponse"},"NotificationSettingsUpdate":{"properties":{"notifications_paused":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Notifications Paused"},"quiet_hours_start":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Quiet Hours Start"},"quiet_hours_end":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Quiet Hours End"},"notify_briefings":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Notify Briefings"},"notify_calendar":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Notify Calendar"},"notify_social":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Notify Social"},"notify_reminders":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Notify Reminders"},"notify_system":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Notify System"},"billing_renewal_reminder_enabled":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Billing Renewal Reminder Enabled"},"email_tips_enabled":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Email Tips Enabled"}},"type":"object","title":"NotificationSettingsUpdate"},"ObjectAttributionResponse":{"properties":{"created_by":{"anyOf":[{"$ref":"#/components/schemas/AgentAttribution"},{"type":"null"}]},"updated_by":{"anyOf":[{"$ref":"#/components/schemas/AgentAttribution"},{"type":"null"}]}},"type":"object","title":"ObjectAttributionResponse"},"OnboardingAnswersRequest":{"properties":{"help_with":{"items":{"type":"string"},"type":"array","maxItems":8,"title":"Help With"},"rhythms":{"anyOf":[{"items":{"type":"string"},"type":"array","maxItems":4},{"type":"null"}],"title":"Rhythms"},"rhythm_times":{"additionalProperties":{"type":"string"},"type":"object","title":"Rhythm Times"},"platform":{"type":"string","enum":["ios","web"],"title":"Platform"}},"type":"object","required":["platform"],"title":"OnboardingAnswersRequest","description":"What the onboarding questions collected. Empty lists mean the question was skipped;\nomitting `rhythms` (web, which doesn't ask) leaves the stored rhythms alone."},"OnboardingChatRequest":{"properties":{"contract_version":{"anyOf":[{"type":"integer","maximum":10.0,"minimum":1.0},{"type":"null"}],"title":"Contract Version"},"session_id":{"anyOf":[{"type":"string","maxLength":100},{"type":"null"}],"title":"Session Id"},"phase":{"anyOf":[{"type":"string","maxLength":100},{"type":"null"}],"title":"Phase"},"source":{"anyOf":[{"type":"string","maxLength":100},{"type":"null"}],"title":"Source"},"timezone":{"anyOf":[{"type":"string","maxLength":100},{"type":"null"}],"title":"Timezone"}},"type":"object","title":"OnboardingChatRequest","description":"Onboarding turn data. Only the first action (phase \"first_action\") is served;\nother keys clients send are ignored."},"OnboardingClaimResponse":{"properties":{"flow_id":{"type":"string","title":"Flow Id"},"user_id":{"type":"string","title":"User Id"},"authenticated_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Authenticated At"}},"type":"object","required":["flow_id","user_id"],"title":"OnboardingClaimResponse"},"OnboardingJourneyClaimRequest":{"properties":{"flow_id":{"type":"string","format":"uuid","title":"Flow Id"}},"type":"object","required":["flow_id"],"title":"OnboardingJourneyClaimRequest"},"OnboardingJourneyDetailResponse":{"properties":{"flow_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Flow Id"},"user_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"User Id"},"email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"},"display_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Display Name"},"status":{"type":"string","title":"Status"},"current_milestone":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Current Milestone"},"furthest_milestone":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Furthest Milestone"},"started_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Started At"},"last_progress_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Progress At"},"authenticated_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Authenticated At"},"completed_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Completed At"},"elapsed_seconds":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Elapsed Seconds"},"app_version":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"App Version"},"app_build":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"App Build"},"flow_version":{"type":"integer","title":"Flow Version"},"platform":{"type":"string","title":"Platform"},"milestones":{"items":{"$ref":"#/components/schemas/ReachedMilestoneResponse"},"type":"array","title":"Milestones"}},"type":"object","required":["status","flow_version","platform","milestones"],"title":"OnboardingJourneyDetailResponse"},"OnboardingJourneyResponse":{"properties":{"flow_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Flow Id"},"user_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"User Id"},"email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"},"display_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Display Name"},"status":{"type":"string","title":"Status"},"current_milestone":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Current Milestone"},"furthest_milestone":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Furthest Milestone"},"started_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Started At"},"last_progress_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Progress At"},"authenticated_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Authenticated At"},"completed_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Completed At"},"elapsed_seconds":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Elapsed Seconds"},"app_version":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"App Version"},"app_build":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"App Build"}},"type":"object","required":["status"],"title":"OnboardingJourneyResponse"},"OnboardingMilestoneBatchRequest":{"properties":{"schema_version":{"type":"integer","title":"Schema Version","default":1},"flow_id":{"type":"string","format":"uuid","title":"Flow Id"},"flow_version":{"type":"integer","maximum":1000.0,"minimum":1.0,"title":"Flow Version"},"platform":{"type":"string","pattern":"^(ios|web)$","title":"Platform","default":"ios"},"app_version":{"anyOf":[{"type":"string","maxLength":40},{"type":"null"}],"title":"App Version"},"app_build":{"anyOf":[{"type":"string","maxLength":40},{"type":"null"}],"title":"App Build"},"events":{"items":{"$ref":"#/components/schemas/OnboardingMilestoneEventRequest"},"type":"array","title":"Events"}},"type":"object","required":["flow_id","flow_version","events"],"title":"OnboardingMilestoneBatchRequest"},"OnboardingMilestoneEventRequest":{"properties":{"event_id":{"type":"string","format":"uuid","title":"Event Id"},"milestone":{"type":"string","title":"Milestone"},"occurred_at":{"type":"string","format":"date-time","title":"Occurred At"}},"type":"object","required":["event_id","milestone","occurred_at"],"title":"OnboardingMilestoneEventRequest"},"OnboardingMilestoneReportResponse":{"properties":{"key":{"type":"string","title":"Key"},"group":{"type":"string","title":"Group"},"label":{"type":"string","title":"Label"},"ordinal":{"type":"integer","title":"Ordinal"},"reached":{"type":"integer","title":"Reached"},"reached_pct":{"type":"number","title":"Reached Pct"},"active":{"type":"integer","title":"Active"},"stalled":{"type":"integer","title":"Stalled"},"progression_pct":{"type":"number","title":"Progression Pct"}},"type":"object","required":["key","group","label","ordinal","reached","reached_pct","active","stalled","progression_pct"],"title":"OnboardingMilestoneReportResponse"},"OnboardingReportResponse":{"properties":{"generated_at":{"type":"string","format":"date-time","title":"Generated At"},"window":{"additionalProperties":{"type":"string","format":"date-time"},"type":"object","title":"Window"},"flow_version":{"type":"integer","title":"Flow Version"},"coverage_started_at":{"type":"string","format":"date-time","title":"Coverage Started At"},"telemetry_health":{"$ref":"#/components/schemas/TelemetryHealthResponse"},"denominator":{"additionalProperties":true,"type":"object","title":"Denominator"},"milestones":{"items":{"$ref":"#/components/schemas/OnboardingMilestoneReportResponse"},"type":"array","title":"Milestones"},"status_counts":{"additionalProperties":{"type":"integer"},"type":"object","title":"Status Counts"},"journeys":{"items":{"$ref":"#/components/schemas/OnboardingJourneyResponse"},"type":"array","title":"Journeys"},"total":{"type":"integer","title":"Total"},"limit":{"type":"integer","title":"Limit"},"offset":{"type":"integer","title":"Offset"},"has_more":{"type":"boolean","title":"Has More"}},"type":"object","required":["generated_at","window","flow_version","coverage_started_at","telemetry_health","denominator","milestones","status_counts","journeys","total","limit","offset","has_more"],"title":"OnboardingReportResponse"},"OverviewFeedbackPreviewResponse":{"properties":{"total":{"type":"integer","title":"Total"},"rows":{"items":{"$ref":"#/components/schemas/OverviewFeedbackResponse"},"type":"array","title":"Rows"}},"type":"object","required":["total","rows"],"title":"OverviewFeedbackPreviewResponse"},"OverviewFeedbackResponse":{"properties":{"feedback_id":{"type":"string","title":"Feedback Id"},"status":{"type":"string","title":"Status"},"title":{"type":"string","title":"Title"},"user_id":{"type":"string","title":"User Id"},"user_email":{"type":"string","title":"User Email"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"message_count":{"type":"integer","title":"Message Count"}},"type":"object","required":["feedback_id","status","title","user_id","user_email","created_at","message_count"],"title":"OverviewFeedbackResponse"},"OverviewNewUserResponse":{"properties":{"user_id":{"type":"string","title":"User Id"},"email":{"type":"string","title":"Email"},"display_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Display Name"},"created_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Created At"},"last_active_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Active At"},"onboarding_status":{"type":"string","title":"Onboarding Status"}},"type":"object","required":["user_id","email","onboarding_status"],"title":"OverviewNewUserResponse"},"OverviewNewUsersPreviewResponse":{"properties":{"total":{"type":"integer","title":"Total"},"rows":{"items":{"$ref":"#/components/schemas/OverviewNewUserResponse"},"type":"array","title":"Rows"}},"type":"object","required":["total","rows"],"title":"OverviewNewUsersPreviewResponse"},"OverviewPreviewsResponse":{"properties":{"new_users":{"$ref":"#/components/schemas/OverviewNewUsersPreviewResponse"},"feedback":{"$ref":"#/components/schemas/OverviewFeedbackPreviewResponse"}},"type":"object","required":["new_users","feedback"],"title":"OverviewPreviewsResponse"},"PasswordLoginRequest":{"properties":{"email":{"type":"string","format":"email","title":"Email"},"password":{"type":"string","title":"Password"}},"type":"object","required":["email","password"],"title":"PasswordLoginRequest"},"PasswordSetRequest":{"properties":{"current_password":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Current Password"},"new_password":{"type":"string","maxLength":128,"minLength":8,"title":"New Password"}},"type":"object","required":["new_password"],"title":"PasswordSetRequest"},"PatchCategoryRequest":{"properties":{"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"}},"type":"object","title":"PatchCategoryRequest"},"PatchEntityRequest":{"properties":{"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"context":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Context"},"aliases":{"anyOf":[{"items":{},"type":"array"},{"type":"null"}],"title":"Aliases"},"version":{"type":"integer","title":"Version"}},"type":"object","required":["version"],"title":"PatchEntityRequest"},"PatchLibraryItemRequest":{"properties":{"rating":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Rating"},"loved":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Loved"},"media_status":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Media Status"},"archived":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Archived"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"ingredients":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Ingredients"},"instructions":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Instructions"},"prep_time":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Prep Time"},"cook_time":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Cook Time"},"total_time":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Total Time"},"servings":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Servings"},"cuisine":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Cuisine"},"source_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Source Url"},"tags":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Tags"},"primary_category":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Primary Category"},"has_leftovers":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Has Leftovers"},"remove_cover":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Remove Cover"},"version":{"type":"integer","title":"Version"}},"type":"object","required":["version"],"title":"PatchLibraryItemRequest"},"PatchNoteRequest":{"properties":{"content":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Content"},"tags":{"anyOf":[{"items":{},"type":"array"},{"type":"null"}],"title":"Tags"}},"type":"object","title":"PatchNoteRequest"},"PersonContextConnection":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"entity_id":{"type":"string","format":"uuid","title":"Entity Id"},"name":{"type":"string","title":"Name"},"is_person":{"type":"boolean","title":"Is Person"},"source_name":{"type":"string","title":"Source Name"},"target_name":{"type":"string","title":"Target Name"},"relationship_type":{"type":"string","title":"Relationship Type"},"context":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Context"}},"type":"object","required":["id","entity_id","name","is_person","source_name","target_name","relationship_type","context"],"title":"PersonContextConnection"},"PersonContextEvent":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"title":{"type":"string","title":"Title"},"event_date":{"type":"string","format":"date-time","title":"Event Date"},"date":{"type":"string","title":"Date"},"is_all_day":{"type":"boolean","title":"Is All Day"}},"type":"object","required":["id","title","event_date","date","is_all_day"],"title":"PersonContextEvent"},"PersonContextNote":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"content":{"type":"string","title":"Content"},"created_at":{"type":"string","format":"date-time","title":"Created At"}},"type":"object","required":["id","content","created_at"],"title":"PersonContextNote"},"PersonContextProject":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"name":{"type":"string","title":"Name"}},"type":"object","required":["id","name"],"title":"PersonContextProject"},"PersonContextResponse":{"properties":{"notes":{"items":{"$ref":"#/components/schemas/PersonContextNote"},"type":"array","title":"Notes"},"tasks":{"items":{"$ref":"#/components/schemas/PersonContextTask"},"type":"array","title":"Tasks"},"events":{"items":{"$ref":"#/components/schemas/PersonContextEvent"},"type":"array","title":"Events"},"projects":{"items":{"$ref":"#/components/schemas/PersonContextProject"},"type":"array","title":"Projects"},"connections":{"items":{"$ref":"#/components/schemas/PersonContextConnection"},"type":"array","title":"Connections"}},"type":"object","required":["notes","tasks","events","projects","connections"],"title":"PersonContextResponse"},"PersonContextTask":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"title":{"type":"string","title":"Title"},"due_date":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Due Date"}},"type":"object","required":["id","title","due_date"],"title":"PersonContextTask"},"PhoneSendCodeRequest":{"properties":{"phone_number":{"type":"string","title":"Phone Number"}},"type":"object","required":["phone_number"],"title":"PhoneSendCodeRequest"},"PhoneVerifyRequest":{"properties":{"phone_number":{"type":"string","title":"Phone Number"},"code":{"type":"string","title":"Code"}},"type":"object","required":["phone_number","code"],"title":"PhoneVerifyRequest"},"ProjectWorkspaceItemRef":{"properties":{"kind":{"type":"string","enum":["block","note","attachment"],"title":"Kind"},"id":{"type":"string","maxLength":100,"minLength":1,"title":"Id"},"display":{"type":"string","enum":["compact","expanded"],"title":"Display","default":"expanded"}},"type":"object","required":["kind","id"],"title":"ProjectWorkspaceItemRef"},"ProjectWorkspaceLayout":{"properties":{"sections":{"items":{"$ref":"#/components/schemas/ProjectWorkspaceSection"},"type":"array","maxItems":20,"title":"Sections"}},"type":"object","title":"ProjectWorkspaceLayout"},"ProjectWorkspaceSection":{"properties":{"id":{"type":"string","maxLength":100,"minLength":1,"title":"Id"},"name":{"type":"string","maxLength":100,"minLength":1,"title":"Name"},"items":{"items":{"$ref":"#/components/schemas/ProjectWorkspaceItemRef"},"type":"array","maxItems":200,"title":"Items"}},"type":"object","required":["id","name"],"title":"ProjectWorkspaceSection"},"PromotionOfferMetricsResponse":{"properties":{"offer_reference":{"type":"string","title":"Offer Reference"},"product_ids":{"items":{"type":"string"},"type":"array","title":"Product Ids"},"redemptions":{"type":"integer","title":"Redemptions"},"production_redemptions":{"type":"integer","title":"Production Redemptions"},"sandbox_redemptions":{"type":"integer","title":"Sandbox Redemptions"},"latest_redeemed_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Latest Redeemed At"}},"type":"object","required":["offer_reference","product_ids","redemptions","production_redemptions","sandbox_redemptions"],"title":"PromotionOfferMetricsResponse"},"QuickAddRequest":{"properties":{"title":{"type":"string","title":"Title"},"media_type":{"type":"string","title":"Media Type"},"year":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Year"},"tmdb_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tmdb Id"},"google_books_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Google Books Id"}},"type":"object","required":["title","media_type"],"title":"QuickAddRequest"},"ReachedMilestoneResponse":{"properties":{"key":{"type":"string","title":"Key"},"ordinal":{"type":"integer","title":"Ordinal"},"first_reached_at":{"type":"string","format":"date-time","title":"First Reached At"}},"type":"object","required":["key","ordinal","first_reached_at"],"title":"ReachedMilestoneResponse"},"RecommendMediaRequest":{"properties":{"recipient_id":{"type":"string","title":"Recipient Id"},"media_type":{"type":"string","title":"Media Type"},"media_external_id":{"type":"string","title":"Media External Id"},"media_title":{"type":"string","title":"Media Title"},"media_poster_path":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Media Poster Path"},"message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Message"}},"type":"object","required":["recipient_id","media_type","media_external_id","media_title"],"title":"RecommendMediaRequest"},"RefreshRequest":{"properties":{"refresh_token":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Refresh Token"}},"type":"object","title":"RefreshRequest"},"RenameTagRequest":{"properties":{"new_name":{"type":"string","title":"New Name"}},"type":"object","required":["new_name"],"title":"RenameTagRequest"},"ReorderProjectBlocksRequest":{"properties":{"block_ids":{"items":{"type":"string"},"type":"array","title":"Block Ids"}},"type":"object","required":["block_ids"],"title":"ReorderProjectBlocksRequest"},"ReportContentUpdateRequest":{"properties":{"content_markdown":{"type":"string","minLength":1,"title":"Content Markdown"},"content_blocks":{"anyOf":[{"items":{"additionalProperties":true,"type":"object"},"type":"array"},{"type":"null"}],"title":"Content Blocks"},"content_revision":{"anyOf":[{"type":"integer","minimum":1.0},{"type":"null"}],"title":"Content Revision"}},"type":"object","required":["content_markdown"],"title":"ReportContentUpdateRequest"},"ReportCreateRequest":{"properties":{"criteria":{"additionalProperties":true,"type":"object","title":"Criteria"}},"type":"object","title":"ReportCreateRequest"},"ReportPreviewRequest":{"properties":{"criteria":{"additionalProperties":true,"type":"object","title":"Criteria"}},"type":"object","title":"ReportPreviewRequest"},"ScaffoldBlockRequest":{"properties":{"type":{"type":"string","title":"Type"},"title":{"type":"string","title":"Title"},"items":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Items"},"columns":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Columns"},"rows":{"anyOf":[{"items":{"items":{"type":"string"},"type":"array"},"type":"array"},{"type":"null"}],"title":"Rows"}},"type":"object","required":["type","title"],"title":"ScaffoldBlockRequest"},"SearchGoogleBooksRequest":{"properties":{"query":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Query"}},"type":"object","title":"SearchGoogleBooksRequest"},"SearchTmdbRequest":{"properties":{"query":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Query"},"year":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Year"}},"type":"object","title":"SearchTmdbRequest"},"SetEventKitLinkRequest":{"properties":{"external_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"External Id"},"external_source":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"External Source","default":"eventkit_beckett"},"clear_link":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Clear Link","default":false}},"type":"object","title":"SetEventKitLinkRequest"},"ShareGroceryListRequest":{"properties":{"user_id":{"type":"string","title":"User Id"}},"type":"object","required":["user_id"],"title":"ShareGroceryListRequest"},"ShareMealPlanRequest":{"properties":{"user_id":{"type":"string","title":"User Id"}},"type":"object","required":["user_id"],"title":"ShareMealPlanRequest"},"ShareMediaListRequest":{"properties":{"recipient_id":{"type":"string","title":"Recipient Id"},"message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Message"}},"type":"object","required":["recipient_id"],"title":"ShareMediaListRequest"},"ShareProjectRequest":{"properties":{"user_id":{"type":"string","title":"User Id"}},"type":"object","required":["user_id"],"title":"ShareProjectRequest"},"ShareRecipeLibraryRequest":{"properties":{"recipient_id":{"type":"string","title":"Recipient Id"}},"type":"object","required":["recipient_id"],"title":"ShareRecipeLibraryRequest"},"SharedChatMessageRequest":{"properties":{"content":{"type":"string","title":"Content"}},"type":"object","required":["content"],"title":"SharedChatMessageRequest"},"SubmitFeedbackRequest":{"properties":{"feedback_type":{"type":"string","title":"Feedback Type"},"title":{"type":"string","title":"Title"},"description":{"type":"string","title":"Description"},"context_snapshot":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Context Snapshot"}},"type":"object","required":["feedback_type","title","description"],"title":"SubmitFeedbackRequest"},"SuggestProjectRequest":{"properties":{"description":{"type":"string","title":"Description"}},"type":"object","required":["description"],"title":"SuggestProjectRequest"},"SurveySubmitRequest":{"properties":{"token":{"type":"string","title":"Token"},"first_name":{"type":"string","title":"First Name"},"last_name":{"type":"string","title":"Last Name"},"how_heard":{"type":"string","title":"How Heard"},"who_recommended":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Who Recommended"},"platform_preference":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Platform Preference"},"interests":{"items":{"type":"string"},"type":"array","title":"Interests","default":[]}},"type":"object","required":["token","first_name","last_name","how_heard"],"title":"SurveySubmitRequest"},"TelemetryHealthResponse":{"properties":{"status":{"type":"string","title":"Status"},"accepted_24h":{"type":"integer","title":"Accepted 24H"},"duplicate_24h":{"type":"integer","title":"Duplicate 24H"},"rejected_24h":{"type":"integer","title":"Rejected 24H"},"rejection_rate":{"type":"number","title":"Rejection Rate"},"last_accepted_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Accepted At"},"coverage_started_at":{"type":"string","format":"date-time","title":"Coverage Started At"}},"type":"object","required":["status","accepted_24h","duplicate_24h","rejected_24h","rejection_rate","coverage_started_at"],"title":"TelemetryHealthResponse"},"TokenResponse":{"properties":{"access_token":{"type":"string","title":"Access Token"},"refresh_token":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Refresh Token"},"token_type":{"type":"string","title":"Token Type","default":"bearer"},"expires_at":{"type":"string","title":"Expires At"},"user_id":{"type":"string","title":"User Id"},"email":{"type":"string","title":"Email"}},"type":"object","required":["access_token","expires_at","user_id","email"],"title":"TokenResponse"},"UpdateBlockRequest":{"properties":{"title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Title"},"items":{"anyOf":[{"items":{"additionalProperties":true,"type":"object"},"type":"array"},{"type":"null"}],"title":"Items"},"columns":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Columns"},"rows":{"anyOf":[{"items":{"additionalProperties":true,"type":"object"},"type":"array"},{"type":"null"}],"title":"Rows"},"note_ids":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Note Ids"},"content":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Content"}},"type":"object","title":"UpdateBlockRequest"},"UpdateCommunicationPreferencesRequest":{"properties":{"tone":{"type":"string","title":"Tone","default":"balanced"},"note":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Note"}},"type":"object","title":"UpdateCommunicationPreferencesRequest"},"UpdateFeedbackRequest":{"properties":{"status":{"type":"string","title":"Status"}},"type":"object","required":["status"],"title":"UpdateFeedbackRequest"},"UpdateMediaListRequest":{"properties":{"name":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"icon":{"anyOf":[{"type":"string","maxLength":50},{"type":"null"}],"title":"Icon"}},"type":"object","title":"UpdateMediaListRequest"},"UpdatePeopleGroupRequest":{"properties":{"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"icon":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Icon"},"member_ids":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Member Ids"}},"type":"object","title":"UpdatePeopleGroupRequest"},"UpdateProjectRequest":{"properties":{"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"icon":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Icon"},"blocks":{"anyOf":[{"items":{},"type":"array"},{"type":"null"}],"title":"Blocks"},"starred":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Starred"},"workspace_layout":{"anyOf":[{"$ref":"#/components/schemas/ProjectWorkspaceLayout"},{"type":"null"}]}},"type":"object","title":"UpdateProjectRequest"},"UpdateUserRequest":{"properties":{"display_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Display Name"},"timezone":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Timezone"},"locale":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Locale"},"onboarding_completed":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Onboarding Completed"},"onboarding_step":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Onboarding Step"},"persona":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Persona"},"theme_preference":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Theme Preference"},"has_seen_reintroduction":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Has Seen Reintroduction"},"quick_access_views":{"anyOf":[{"items":{},"type":"array"},{"type":"null"}],"title":"Quick Access Views"},"custom_theme":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Custom Theme"},"home_city":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Home City"},"home_latitude":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Home Latitude"},"home_longitude":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Home Longitude"},"home_country_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Home Country Code"},"latitude":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Latitude"},"longitude":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Longitude"},"current_city":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Current City"},"holidays_enabled":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Holidays Enabled"},"apple_calendar_sync_enabled":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Apple Calendar Sync Enabled"},"mood_tracking_enabled":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Mood Tracking Enabled"},"ai_consent_given":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Ai Consent Given"}},"type":"object","title":"UpdateUserRequest"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"},"input":{"title":"Input"},"ctx":{"type":"object","title":"Context"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"},"VerifyRequest":{"properties":{"token":{"type":"string","title":"Token"},"utm_source":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Utm Source"},"utm_medium":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Utm Medium"},"utm_campaign":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Utm Campaign"},"utm_content":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Utm Content"},"utm_term":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Utm Term"}},"type":"object","required":["token"],"title":"VerifyRequest"},"WebCheckoutConfig":{"properties":{"environment":{"type":"string","enum":["sandbox","production"],"title":"Environment","default":"sandbox"},"user_id":{"type":"string","title":"User Id"},"app_user_id":{"type":"string","title":"App User Id"},"public_api_key":{"type":"string","title":"Public Api Key"},"offering_id":{"type":"string","title":"Offering Id","default":"default"},"entitlement_id":{"type":"string","title":"Entitlement Id"},"can_purchase":{"type":"boolean","title":"Can Purchase"},"reason":{"anyOf":[{"type":"string","enum":["setup_required","existing_access"]},{"type":"null"}],"title":"Reason"}},"type":"object","required":["user_id","app_user_id","public_api_key","entitlement_id","can_purchase"],"title":"WebCheckoutConfig"},"WidgetEvent":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"title":{"type":"string","title":"Title"},"event_date":{"type":"string","format":"date-time","title":"Event Date"},"is_all_day":{"type":"boolean","title":"Is All Day"},"linked_people":{"items":{"type":"string"},"type":"array","title":"Linked People","default":[]}},"type":"object","required":["id","title","event_date","is_all_day"],"title":"WidgetEvent"},"WidgetNote":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"content":{"type":"string","title":"Content"},"created_at":{"type":"string","format":"date-time","title":"Created At"}},"type":"object","required":["id","content","created_at"],"title":"WidgetNote"},"WidgetProject":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"name":{"type":"string","title":"Name"},"icon":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Icon"},"starred":{"type":"boolean","title":"Starred"}},"type":"object","required":["id","name","icon","starred"],"title":"WidgetProject"},"WidgetTask":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"title":{"type":"string","title":"Title"},"priority":{"type":"string","title":"Priority"},"due_date":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Due Date"}},"type":"object","required":["id","title","priority","due_date"],"title":"WidgetTask"},"_WaitlistSignupRequest":{"properties":{"email":{"type":"string","format":"email","title":"Email"},"ref":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Ref"},"utm_source":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Utm Source"},"utm_medium":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Utm Medium"},"utm_campaign":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Utm Campaign"},"utm_content":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Utm Content"},"utm_term":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Utm Term"},"landing_path":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Landing Path"}},"type":"object","required":["email"],"title":"_WaitlistSignupRequest"}}}}