Skip to content

User Management API Reference

Base URL: /api/v1Last Updated: 2026-02-04


Users (/api/v1/users)

Search for users by name (for game invites, social features).

  • Auth: Required
  • Query Params: name (2-100 chars), limit (1-50)
  • Response: UserSearchResponse

GET /api/v1/users/{user_id}

Get public info about a specific user.

  • Auth: Required
  • Response: PublicUserInfo (id, name, avatar)

GET /api/v1/users/me/preferences

Get current user's preferences.

  • Auth: Required

PATCH /api/v1/users/me/preferences

Update current user's preferences.

  • Auth: Required
  • Request Body: UpdatePreferencesRequest

Profiles (/api/v1/profiles)

GET /api/v1/profiles

Get all profiles for current user. Auto-creates default if none exist.

  • Auth: Required
  • Response: List[ProfileResponse]

POST /api/v1/profiles

Create a new profile. Enforces subscription tier limits.

  • Auth: Required
  • Request Body: ProfileCreate

GET /api/v1/profiles/{profile_id}

Get a specific profile.

  • Auth: Required

PUT /api/v1/profiles/{profile_id}

Update a profile (name, avatar, PIN, preferences).

  • Auth: Required
  • Request Body: ProfileUpdate

DELETE /api/v1/profiles/{profile_id}

Delete a profile. Cannot delete last profile.

  • Auth: Required

POST /api/v1/profiles/{profile_id}/select

Select a profile as active. Verifies PIN if set.

  • Auth: Required
  • Request Body: ProfileSelect

POST /api/v1/profiles/{profile_id}/verify-pin

Verify a profile's PIN.

  • Auth: Required
  • Request Body: PinVerify

GET /api/v1/profiles/{profile_id}/recommendations

Get AI-powered recommendations for profile based on watch history.

  • Auth: Required

POST /api/v1/profiles/kids-pin/set

Set or update the master kids PIN for account.

  • Auth: Required

POST /api/v1/profiles/kids-pin/verify

Verify the master kids PIN to exit kids mode.

  • Auth: Required

GET /api/v1/profiles/preferences/ai

Get AI preferences for current user.

  • Auth: Required

PUT /api/v1/profiles/preferences/ai

Update AI preferences.

  • Auth: Required
  • Request Body: AIPreferences

GET /api/v1/profiles/preferences/voice

Get voice and accessibility preferences. Returns defaults if not authenticated.

  • Auth: Optional

PUT /api/v1/profiles/preferences/voice

Update voice and accessibility preferences.

  • Auth: Required
  • Request Body: VoicePreferences

GET /api/v1/profiles/preferences/home_page

Get home page section configuration preferences.

  • Auth: Required

PUT /api/v1/profiles/preferences/home_page

Update home page section configuration.

  • Auth: Required
  • Request Body: HomePagePreferences

POST /api/v1/profiles/avatar/upload

Upload a profile avatar image (JPEG, PNG, WebP, GIF - max 5MB).

  • Auth: Required
  • Content-Type: multipart/form-data

GET /api/v1/profile/stats

Get current user's profile statistics (watchlist, favorites, downloads, watch time).

  • Auth: Required
  • Response: ProfileStatsResponse

Subscriptions (/api/v1/subscriptions)

GET /api/v1/subscriptions/plans

Get available subscription plans.

  • Auth: None

GET /api/v1/subscriptions/current

Get current user's subscription.

  • Auth: Required

POST /api/v1/subscriptions/checkout

Create a Stripe checkout session. Requires user verification, admins blocked.

  • Auth: Required
  • Request Body: CheckoutRequest
  • Response:
    json
    { "checkoutUrl": "string" }

POST /api/v1/subscriptions/cancel

Cancel subscription at end of billing period.

  • Auth: Required

POST /api/v1/subscriptions/webhook

Handle Stripe webhooks with idempotency protection.

  • Auth: None (Stripe signature verified)

Watchlist (/api/v1/watchlist)

GET /api/v1/watchlist

Get user's watchlist.

  • Auth: Required

POST /api/v1/watchlist

Add content to watchlist.

  • Auth: Required
  • Request Body: WatchlistAdd

DELETE /api/v1/watchlist/{content_id}

Remove content from watchlist.

  • Auth: Required

GET /api/v1/watchlist/check/{content_id}

Check if content is in watchlist.

  • Auth: Required

POST /api/v1/watchlist/toggle/{content_id}

Toggle watchlist status for content.

  • Auth: Required
  • Query Params: content_type

Favorites (/api/v1/favorites)

GET /api/v1/favorites

Get user's favorite items.

  • Auth: Required

POST /api/v1/favorites

Add content to favorites.

  • Auth: Required
  • Request Body: FavoriteAdd

DELETE /api/v1/favorites/{content_id}

Remove content from favorites.

  • Auth: Required

GET /api/v1/favorites/check/{content_id}

Check if content is in favorites.

  • Auth: Required

POST /api/v1/favorites/toggle/{content_id}

Toggle favorite status for content.

  • Auth: Required
  • Query Params: content_type

Downloads (/api/v1/downloads)

GET /api/v1/downloads

Get user's downloaded items.

  • Auth: Required

POST /api/v1/downloads

Start a new download.

  • Auth: Required
  • Request Body: DownloadAdd

DELETE /api/v1/downloads/{download_id}

Delete a downloaded item.

  • Auth: Required

GET /api/v1/downloads/check/{content_id}

Check if content is downloaded.

  • Auth: Required

Devices (/api/v1/devices)

GET /api/v1/devices

Get all registered devices for current user.

  • Auth: Required
  • Response: DeviceListResponse

POST /api/v1/devices/register

Register or update a device.

  • Auth: Required
  • Request Body: DeviceRegisterRequest

DELETE /api/v1/devices/{device_id}

Unregister a device and terminate all active sessions.

  • Auth: Required

POST /api/v1/devices/heartbeat

Update device activity heartbeat.

  • Auth: Required
  • Request Body: HeartbeatRequest

Notifications (/api/v1/notifications)

POST /api/v1/notifications/events

Log a notification lifecycle event (shown, dismissed, action_clicked).

  • Auth: Optional
  • Request Body: NotificationEventCreate

GET /api/v1/notifications/history

Get user's notification history (paginated).

  • Auth: Required
  • Query Params: limit, skip

GET /api/v1/notifications/admin/analytics

Get notification analytics for admin dashboard.

  • Auth: Required (Admin)
  • Query Params: start_date, end_date, platform

DELETE /api/v1/notifications/admin/cleanup

Delete notification events older than N days.

  • Auth: Required (Admin)
  • Query Params: days

Onboarding (/api/v1/onboarding/ai)

POST /api/v1/onboarding/ai/start

Start a new AI-powered onboarding conversation.

  • Auth: None
  • Request Body: StartOnboardingRequest

POST /api/v1/onboarding/ai/message

Send a message in the onboarding conversation.

  • Auth: None
  • Request Body: SendMessageRequest

POST /api/v1/onboarding/ai/complete

Complete onboarding and create user account.

  • Auth: None
  • Request Body: CompleteOnboardingRequest

GET /api/v1/onboarding/ai/session/{conversation_id}

Get the current state of an onboarding session.

  • Auth: None

DELETE /api/v1/onboarding/ai/session/{conversation_id}

Cancel an onboarding session.

  • Auth: None

Extension Subscriptions (/api/v1/extension/subscriptions)

GET /api/v1/extension/subscriptions/status

Get Chrome extension subscription status (free/premium).

  • Auth: Required

POST /api/v1/extension/subscriptions/checkout

Create Stripe checkout session for $5/month premium.

  • Auth: Required

POST /api/v1/extension/subscriptions/cancel

Cancel premium subscription (active until period end).

  • Auth: Required

POST /api/v1/extension/subscriptions/webhook

Handle Stripe webhooks for extension subscription events.

  • Auth: None (Stripe signature verified)

GDPR (/api/v1/gdpr)

DELETE /api/v1/gdpr/users/me/data

Delete all user data (right to erasure).

  • Auth: Required

GET /api/v1/gdpr/users/me/data-summary

Get user data summary.

  • Auth: Required

Document Status: Complete Last Updated: 2026-02-04 Maintained by: Backend Team

Released under the MIT License.