openapi: 3.1.0
info:
  title: NinjaAPI
  version: 1.0.0
  description: 'Suno API'
paths:
  /api/render-status-check:
    get:
      operationId: studio_api_bots_api_get_status
      summary: Get Status
      parameters: []
      responses:
        '200':
          description: OK
  /api/billing/webhook/:
    post:
      operationId: studio_api_bots_api_handle_stripe_webhook
      summary: Handle Stripe Webhook
      parameters:
        - in: query
          name: auth
          schema:
            title: Auth
            type: string
          required: false
      responses:
        '200':
          description: OK
  /api/billing/create-session/:
    post:
      operationId: studio_api_bots_api_create_checkout_session
      summary: Create Checkout Session
      parameters: []
      responses:
        '200':
          description: OK
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PlanCreateSpec'
        required: true
      security:
        - AuthBearer: []
  /api/billing/create-portal/:
    post:
      operationId: studio_api_bots_api_create_portal_session
      summary: Create Portal Session
      parameters: []
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PortalRedirectSchema'
      security:
        - AuthBearer: []
  /api/billing/cancel-sub/:
    post:
      operationId: studio_api_bots_api_cancel_subscription
      summary: Cancel Subscription
      parameters: []
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SubscriptionCancelSchema'
      security:
        - AuthBearer: []
  /api/billing/cancel-sub/undo/:
    post:
      operationId: studio_api_bots_api_cancel_subscription_undo
      summary: Cancel Subscription Undo
      parameters: []
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SubscriptionCancelSchema'
      security:
        - AuthBearer: []
  /api/billing/purchase-credits/:
    post:
      operationId: studio_api_bots_api_purchase_credits
      summary: Purchase Credits
      parameters: []
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CreditPurchaseSchema'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PurchaseSpec'
        required: true
      security:
        - AuthBearer: []
  /api/billing/change-plan/preview/:
    post:
      operationId: studio_api_bots_api_change_plan_preview
      summary: Change Plan Preview
      parameters: []
      responses:
        '200':
          description: OK
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PlanChangeSpec'
        required: true
      security:
        - AuthBearer: []
  /api/billing/change-plan/:
    post:
      operationId: studio_api_bots_api_change_plan
      summary: Change Plan
      parameters: []
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PlanChangeSchema'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PlanChangeSpec'
        required: true
      security:
        - AuthBearer: []
  /api/billing/purchase-credits/{item_id}/:
    get:
      operationId: studio_api_bots_api_purchase_credits_status
      summary: Purchase Credits Status
      parameters:
        - in: path
          name: item_id
          schema:
            title: Item Id
            type: string
          required: true
      responses:
        '200':
          description: OK
      security:
        - AuthBearer: []
  /api/billing/info/:
    get:
      operationId: studio_api_bots_api_get_subscription_info
      summary: Get Subscription Info
      parameters: []
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SubscriptionInfoResponse'
      security:
        - AuthBearer: []
  /api/gen/{gen_id}/toggle_comments/:
    post:
      operationId: studio_api_bots_api_toggle_comment_ability
      summary: Post Comment To Clip
      parameters:
        - in: path
          name: gen_id
          required: true
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CommentsToggle'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CommentsToggle'
      security:
        - AuthBearer: []
  /api/gen/{clip_id}/comments/:
    get:
      operationId: studio_api_bots_api_clip_comments
      summary: Get Comments For Clip
      parameters:
        - in: path
          name: clip_id
          schema:
            title: Clip Id
            type: string
          required: true
        - in: query
          name: cursor
          schema:
            title: Cursor
            type: string
          required: false
        - in: query
          name: page_size
          schema:
            title: Page Size
            type: integer
          required: false
        - in: query
          name: order
          schema:
            title: Order
            type: string
          required: false
        - in: query
          name: id
          schema:
            title: Id
            type: string
          required: false
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CommentsPage'
      security:
        - AuthBearer: []
  /api/comment/{comment_id}/replies/:
    get:
      operationId: studio_api_bots_api_get_comment_replies
      summary: Get page of comment replies
      parameters:
        - in: path
          name: comment_id
          schema:
            title: Comment ID
            type: string
          required: true
        - in: query
          name: cursor
          schema:
            title: Cursor
            type: string
          required: false
        - in: query
          name: page_size
          schema:
            title: Page Size
            type: integer
          required: false
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CommentRepliesPage'
      security:
        - AuthBearer: []
  /api/gen/{gen_id}/comment/:
    post:
      operationId: studio_api_bots_api_post_comment
      summary: Post Comment To Clip
      parameters:
        - in: path
          name: gen_id
          required: true
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CommentPostRequest'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Comment'
      security:
        - AuthBearer: []
  /api/comment/{comment_id}/reaction/:
    post:
      operationId: studio_api_bots_api_update_comment_reaction
      summary: Update Comment Reaction
      parameters:
        - in: path
          name: comment_id
          required: true
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CommentReactionBody'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CommentReactionResponse'
      security:
        - AuthBearer: []
  /api/comment/{comment_id}/report/:
    post:
      operationId: studio_api_bots_api_report_comment
      summary: Report Comment
      parameters:
        - in: path
          name: comment_id
          required: true
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CommentReportingBody'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CommentReportingResponse'
      security:
        - AuthBearer: []
  /api/comment/{comment_id}/:
    delete:
      operationId: studio_api_bots_api_delete_comment
      summary: Delete Comment
      parameters:
        - in: path
          name: comment_id
          required: true
          schema:
            type: string
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CommentDeleteResponse'
      security:
        - AuthBearer: []
  /api/gen/{clip_id}/time-sync-comments:
    get:
      operationId: studio_api_bots_api_get_time_synced_comments
      summary: Get Time-Synced Comments
      parameters:
        - in: path
          name: clip_id
          required: true
          schema:
            type: string
          description: ID of the clip to get comments for
        - in: query
          name: search_time
          required: true
          schema:
            type: integer
          description: The time to search for comments around
        - in: query
          name: search_range
          required: false
          schema:
            type: integer
          description: The range of time to search around search_time
        - in: query
          name: margin
          required: false
          schema:
            type: integer
          description: The margin of time to include around search_time
        - in: query
          name: num_requested
          required: false
          schema:
            type: integer
          description: Number of comments to request
        - in: query
          name: end_time
          required: false
          schema:
            type: integer
          description: The end time of the search range
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/Comment'
      security:
        - AuthBearer: []
  /api/profiles/pinned-clips/:
    get:
      operationId: studio_api_bots_api_get_pinned_clips
      summary: Get Pinned Clips
      parameters:
        - in: query
          name: playlists_sort_by
          schema:
            title: Playlists Sort By
            type: string
          required: false
        - in: query
          name: clips_sort_by
          schema:
            title: Clips Sort By
            type: string
          required: false
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PinnedClipsContainer'
      security:
        - AuthBearer: []
  /api/profiles/pin-clip/{clip_id}:
    post:
      operationId: studio_api_bots_api_pin_clip_on_profile
      summary: Pin Clip to Profile
      parameters:
        - in: path
          name: clip_id
          required: true
          schema:
            type: string
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PinnedClipsContainer'
      security:
        - AuthBearer: []
  /api/gen/{gen_id}/comments/count:
    get:
      operationId: studio_api_bots_api_get_comment_count_for_clip
      summary: Get Total Comment Count For Clip
      parameters:
        - in: path
          name: gen_id
          required: true
          schema:
            type: string
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CommentCountResponse'
      security:
        - AuthBearer: []
  /api/feed/:
    get:
      operationId: studio_api_bots_api_get_feed
      summary: Get Feed
      parameters:
        - in: query
          name: page
          schema:
            default: 0
            title: Page
            type: integer
          required: false
        - in: query
          name: query
          schema:
            type: [string, 'null']
            title: Query
          required: false
        - in: query
          name: categories
          schema:
            items:
              type: string
            title: Categories
            type: array
          required: false
        - in: query
          name: ids
          schema:
            title: Ids
            type: string
          required: false
        - in: query
          name: status
          schema:
            type: [string, 'null']
            title: Status
          required: false
        - in: query
          name: is_liked
          schema:
            type: [boolean, 'null']
            default: false
            title: Is Liked
          required: false
        - in: query
          name: is_public
          schema:
            type: [boolean, 'null']
            title: Is Public
          required: false
        - in: query
          name: is_not_disliked
          schema:
            type: [boolean, 'null']
            default: false
            title: Is Not Disliked
          required: false
        - in: query
          name: is_trashed
          schema:
            type: [boolean, 'null']
            default: false
            title: Is Trashed
          required: false
        - in: query
          name: from_index
          schema:
            default: 0
            title: From Index
            type: integer
          required: false
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                items:
                  $ref: '#/components/schemas/GeneratedClipSchema'
                title: Response
                type: array
      security:
        - AuthBearer: []
  /api/feed/v2:
    get:
      operationId: studio_api_bots_api_get_feed_v2
      summary: Get Feed V2
      parameters:
        - in: query
          name: page
          schema:
            default: 0
            title: Page
            type: integer
          required: false
        - in: query
          name: query
          schema:
            type: [string, 'null']
            title: Query
          required: false
        - in: query
          name: categories
          schema:
            items:
              type: string
            title: Categories
            type: array
          required: false
        - in: query
          name: ids
          schema:
            title: Ids
            type: string
          required: false
        - in: query
          name: status
          schema:
            type: [string, 'null']
            title: Status
          required: false
        - in: query
          name: is_liked
          schema:
            type: [boolean, 'null']
            default: false
            title: Is Liked
          required: false
        - in: query
          name: is_public
          schema:
            type: [boolean, 'null']
            title: Is Public
          required: false
        - in: query
          name: is_not_disliked
          schema:
            type: [boolean, 'null']
            default: false
            title: Is Not Disliked
          required: false
        - in: query
          name: is_full_song
          schema:
            type: [boolean, 'null']
            default: false
            title: Is Full Song
          required: false
        - in: query
          name: is_video_to_song
          schema:
            type: [boolean, 'null']
            title: Is Video To Song
          required: false
        - in: query
          name: is_suno_short
          schema:
            type: [boolean, 'null']
            title: Is Suno Short
          required: false
        - in: query
          name: add_preset_clips
          schema:
            type: [boolean, 'null']
            default: false
            title: Add Preset Clips
          required: false
        - in: query
          name: is_trashed
          schema:
            type: [boolean, 'null']
            default: false
            title: Is Trashed
          required: false
        - in: query
          name: from_index
          schema:
            default: 0
            title: From Index
            type: integer
          required: false
        - in: query
          name: page_size
          schema:
            default: 20
            title: Page Size
            type: integer
          required: false
        - in: query
          name: is_uploaded_audio
          schema:
            default: false
            title: Is Uploaded Audio
            type: boolean
          required: false
        - in: query
          name: is_extend
          schema:
            default: false
            title: Is Extend
            type: boolean
          required: false
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/FeedSchema'
      security:
        - AuthBearer: []
  /api/session/:
    get:
      operationId: studio_api_bots_api_get_me
      summary: Get Me
      parameters: []
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                anyOf:
                  - $ref: '#/components/schemas/LoggedInSessionResponse'
                  - $ref: '#/components/schemas/UnauthenticatedSessionResponse'
                title: Response
  /api/gen/{gen_id}/like/:
    post:
      operationId: studio_api_bots_api_like_gen
      summary: Like Gen
      parameters:
        - in: path
          name: gen_id
          schema:
            title: Gen Id
            type: string
          required: true
      responses:
        '200':
          description: OK
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/LikeSpec'
        required: true
      security:
        - AuthBearer: []
  /api/gen/{gen_id}/update_reaction_type/:
    post:
      operationId: studio_api_bots_api_update_reaction_type
      summary: Update Reaction Type
      parameters:
        - in: path
          name: gen_id
          schema:
            title: Gen Id
            type: string
          required: true
      responses:
        '200':
          description: OK
      description: Update reaction type on UserReaction (and associated GeneratedClip).
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ReactionSpec'
        required: true
      security:
        - AuthBearer: []
  /api/gen/{gen_id}/increment_play_count/:
    post:
      operationId: studio_api_bots_api_increment_play_count
      summary: Increment Play Count
      parameters:
        - in: path
          name: gen_id
          schema:
            title: Gen Id
            type: string
          required: true
      responses:
        '200':
          description: OK
      description: Increment play count on UserReaction (and associated Generatedclip).
  /api/gen/{gen_id}/increment_play_count/v2:
    post:
      operationId: studio_api_bots_api_increment_play_count_with_spec
      summary: Increment Play Count With Spec
      parameters:
        - in: path
          name: gen_id
          schema:
            title: Gen Id
            type: string
          required: true
      responses:
        '200':
          description: OK
      description: Increment play count on UserReaction (and associated Generatedclip).
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PlayCountSpec'
        required: true
  /api/gen/{gen_id}/increment_skip_count/:
    post:
      operationId: studio_api_bots_api_increment_skip_count
      summary: Increment Skip Count
      parameters:
        - in: path
          name: gen_id
          schema:
            title: Gen Id
            type: string
          required: true
      responses:
        '200':
          description: OK
      description: Increment skip count on UserReaction (and associated Generatedclip).
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/TimeOfSkipSpec'
        required: true
      security:
        - AuthBearer: []
  /api/gen/{gen_id}/update_flag_state/:
    post:
      operationId: studio_api_bots_api_update_flag_state
      summary: Update Flag State
      parameters:
        - in: path
          name: gen_id
          schema:
            title: Gen Id
            type: string
          required: true
      responses:
        '200':
          description: OK
      description: Update flag state on UserReaction (and associated Generatedclip).
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/FlagSpec'
        required: true
      security:
        - AuthBearer: []
  /api/gen/{gen_id}/update_feedback_state/:
    post:
      operationId: studio_api_bots_api_update_feedback_state
      summary: Update Feedback State
      parameters:
        - in: path
          name: gen_id
          schema:
            title: Gen Id
            type: string
          required: true
      responses:
        '200':
          description: OK
      description: Update feedback state on UserReaction.
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/FeedbackSpec'
        required: true
      security:
        - AuthBearer: []
  /api/gen/{gen_id}/set_visibility/:
    post:
      operationId: studio_api_bots_api_set_visibility
      summary: Set Visibility
      parameters:
        - in: path
          name: gen_id
          schema:
            title: Gen Id
            type: string
          required: true
      responses:
        '200':
          description: OK
      description: Set is_public visibility on a GeneratedClip. User must own clip.
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ClipVisibilitySpec'
        required: true
      security:
        - AuthBearer: []
  /api/gen/prompt_image/:
    post:
      operationId: studio_api_bots_api_prompt_image
      summary: Prompt Image
      parameters: []
      responses:
        '200':
          description: OK
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ImagePromptSpec'
        required: true
      security:
        - AuthBearer: []
  /api/gen/{clip_id}/aligned_lyrics/:
    get:
      operationId: studio_api_bots_api_get_aligned_lyrics
      summary: Get Aligned Lyrics
      parameters:
        - in: path
          name: clip_id
          schema:
            title: Clip Id
            type: string
          required: true
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AlignedLyricsSchema'
      security:
        - AuthBearer: []
  /api/gen/{clip_id}/aligned_lyrics/v2:
    get:
      operationId: studio_api_bots_gen_api_get_aligned_lyrics_v2
      summary: Get Aligned Lyrics V2
      parameters:
        - in: path
          name: clip_id
          schema:
            title: Clip Id
            type: string
          required: true
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AlignedLyricsV2Schema'
      security:
        - AuthBearer: []
  /api/gen/{clip_id}/convert_wav/:
    post:
      operationId: studio_api_bots_api_generate_wav_file
      summary: Generate Wav File
      parameters:
        - in: path
          name: clip_id
          schema:
            title: Clip Id
            type: string
          required: true
      responses:
        '200':
          description: OK
      security:
        - AuthBearer: []
  /api/gen/{clip_id}/finish_wav/:
    post:
      operationId: studio_api_bots_api_finish_wav_file
      summary: Finish Wav File
      parameters:
        - in: path
          name: clip_id
          schema:
            title: Clip Id
            type: string
          required: true
      responses:
        '200':
          description: OK
  /api/gen/{clip_id}/wav_file/:
    get:
      operationId: studio_api_bots_api_get_clip_wav_file
      summary: Get Clip Wav File
      parameters:
        - in: path
          name: clip_id
          schema:
            title: Clip Id
            type: string
          required: true
      responses:
        '200':
          description: OK
      security:
        - AuthBearer: []
  /api/gen/{gen_id}/set_metadata/:
    post:
      operationId: studio_api_bots_api_set_metadata
      summary: Set Metadata
      parameters:
        - in: path
          name: gen_id
          schema:
            title: Gen Id
            type: string
          required: true
      responses:
        '200':
          description: OK
      description: Set the metadata of a GeneratedClip. User must own clip.
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ClipMetadataSpec'
        required: true
      security:
        - AuthBearer: []
  /api/trending/:
    get:
      operationId: studio_api_bots_api_get_trending_playlist_endpoint
      summary: Get Trending Playlist Endpoint
      parameters: []
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PlaylistSchema'
      description: >-
        api get request for Homepage

        Returns: PlaylistSchema of global trending playlist (id hardcoded in
        constants.py)
  /api/trending/v2/:
    get:
      operationId: studio_api_bots_api_get_trending_playlist_v2_endpoint
      summary: Get Trending Playlist V2 Endpoint
      parameters: []
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PlaylistSchema'
      description: 'Returns: PlaylistSchema of trending v2 ALL playlist'
  /api/trending/en/v2/:
    get:
      operationId: studio_api_bots_api_get_trending_playlist_en_v2_endpoint
      summary: Get Trending Playlist En V2 Endpoint
      parameters: []
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PlaylistSchema'
      description: 'Returns: PlaylistSchema of trending v2 EN playlist'
  /api/trending/metaplaylist/:
    get:
      operationId: studio_api_bots_api_get_trending_metaplaylist_endpoint
      summary: Get Trending Metaplaylist Endpoint
      parameters: []
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PlaylistsSchema'
      description: |-
        api get request for trending metaplaylist
        Returns: list of PlaylistSchemas of trending playlists
  /api/trending/en/:
    get:
      operationId: studio_api_bots_api_get_trending_en_playlist_endpoint
      summary: Get Trending En Playlist Endpoint
      parameters: []
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PlaylistSchema'
      description: >-
        api get request for English-language trending playlist

        Returns: PlaylistSchema of global EN trending playlist (id hardcoded in
        constants.py)
  /api/trending/new/:
    get:
      operationId: studio_api_bots_api_get_new_playlist_endpoint
      summary: Get New Playlist Endpoint
      parameters:
        - in: query
          name: page
          schema:
            default: 0
            title: Page
            type: integer
          required: false
        - in: query
          name: query
          schema:
            type: [string, 'null']
            title: Query
          required: false
        - in: query
          name: categories
          schema:
            items:
              type: string
            title: Categories
            type: array
          required: false
        - in: query
          name: ids
          schema:
            title: Ids
            type: string
          required: false
        - in: query
          name: status
          schema:
            type: [string, 'null']
            title: Status
          required: false
        - in: query
          name: is_liked
          schema:
            type: [boolean, 'null']
            default: false
            title: Is Liked
          required: false
        - in: query
          name: is_public
          schema:
            type: [boolean, 'null']
            title: Is Public
          required: false
        - in: query
          name: is_not_disliked
          schema:
            type: [boolean, 'null']
            default: false
            title: Is Not Disliked
          required: false
        - in: query
          name: is_trashed
          schema:
            type: [boolean, 'null']
            default: false
            title: Is Trashed
          required: false
        - in: query
          name: from_index
          schema:
            default: 0
            title: From Index
            type: integer
          required: false
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PlaylistSchema'
      description: >-
        api get request for New playlist

        Returns: PlaylistSchema of global New playlist (id hardcoded in
        constants.py)
  /api/trending/top/{period}/:
    get:
      operationId: studio_api_bots_api_get_top_playlist_endpoint
      summary: Get Top Playlist Endpoint
      parameters:
        - in: path
          name: period
          schema:
            title: Period
            type: string
          required: true
        - in: query
          name: page
          schema:
            default: 0
            title: Page
            type: integer
          required: false
        - in: query
          name: query
          schema:
            type: [string, 'null']
            title: Query
          required: false
        - in: query
          name: categories
          schema:
            items:
              type: string
            title: Categories
            type: array
          required: false
        - in: query
          name: ids
          schema:
            title: Ids
            type: string
          required: false
        - in: query
          name: status
          schema:
            type: [string, 'null']
            title: Status
          required: false
        - in: query
          name: is_liked
          schema:
            type: [boolean, 'null']
            default: false
            title: Is Liked
          required: false
        - in: query
          name: is_public
          schema:
            type: [boolean, 'null']
            title: Is Public
          required: false
        - in: query
          name: is_not_disliked
          schema:
            type: [boolean, 'null']
            default: false
            title: Is Not Disliked
          required: false
        - in: query
          name: is_trashed
          schema:
            type: [boolean, 'null']
            default: false
            title: Is Trashed
          required: false
        - in: query
          name: from_index
          schema:
            default: 0
            title: From Index
            type: integer
          required: false
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PlaylistSchema'
      description: >-
        api get request for Top playlist

        Returns: PlaylistSchema of a global Top playlist (weekly, monthly,
        yearly or alltime).
  /api/trending/leaderboard/:
    get:
      operationId: studio_api_bots_api_get_leaderboard_playlist_endpoint
      summary: Get Leaderboard Playlist Endpoint
      parameters: []
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PlaylistSchema'
      description: >-
        api get request for leaderboard

        Returns: PlaylistSchema of leaderboard playlist (id hardcoded in
        constants.py)
  /api/discover/:
    post:
      operationId: studio_api_bots_discover_api_discover_feed
      summary: Discover Feed
      parameters: []
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DiscoverResp'
      description: Get homepage sections
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/DiscoverReq'
        required: true
    get:
      operationId: studio_api_bots_discover_api_get_discover
      summary: Get Discover
      parameters: []
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                items:
                  $ref: '#/components/schemas/PlaylistSchema'
                title: Response
                type: array
      description: >-
        api get request for 'Discover' section of Homepage

        returns: list of PlaylistSchemas (can be empty) of each playlist to be
        displayed.
            playlists must be initialized in Playlist model to be pulled.
  /api/discover/sections/{section_name}/:
    get:
      operationId: studio_api_bots_discover_api_get_discover_sections
      summary: Get Discover Sections
      parameters:
        - in: path
          name: section_name
          schema:
            title: Section Name
            type: string
          required: true
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                anyOf:
                  - discriminator:
                      mapping:
                        playlist: '#/components/schemas/PlaylistSectionSchema'
                        playlist_list: '#/components/schemas/PlaylistListSectionSchema'
                        style_list: '#/components/schemas/StyleListSectionSchema'
                        user_list: '#/components/schemas/UserListSectionSchema'
                      propertyName: section_type
                    oneOf:
                      - $ref: '#/components/schemas/PlaylistSectionSchema'
                      - $ref: '#/components/schemas/PlaylistListSectionSchema'
                      - $ref: '#/components/schemas/StyleListSectionSchema'
                      - $ref: '#/components/schemas/UserListSectionSchema'
                    title: Response
                    type: object
                  - {}
      description: api get request for 'Discover' section of Homepage
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/DiscoverReq'
        required: false
  /api/radio/tags/:
    get:
      operationId: studio_api_bots_api_get_radio_tags
      summary: Get Radio Tags
      parameters: []
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RadioTagsSchema'
      security:
        - AuthBearer: []
  /api/radio/{tag}/:
    get:
      operationId: studio_api_bots_api_get_radio
      summary: Get Radio
      parameters:
        - in: path
          name: tag
          schema:
            title: Tag
            type: string
          required: true
        - in: query
          name: exclude_clip_ids
          schema:
            default: []
            items:
              type: string
            title: Exclude Clip Ids
            type: array
          required: false
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RadioSchema'
      security:
        - AuthBearer: []
  /api/generate/concat/:
    post:
      operationId: studio_api_bots_api_concat_generations
      summary: Concat Generations
      parameters: []
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GenerationRequestSimpleSchema'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/GenConcatSpec'
        required: true
  /api/generate/concat/v2/:
    post:
      operationId: studio_api_bots_api_concat_generations_v2
      summary: Concat Generations V2
      parameters: []
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GeneratedClipSchema'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/GenConcatSpec'
        required: true
  /api/external/generate/:
    post:
      operationId: studio_api_bots_api_run_generation_integration
      summary: Run Generation Integration
      parameters: []
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ExternalClipSchema'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ExternalGenerationSpec'
        required: true
  /api/generate/upsample/:
    post:
      operationId: studio_api_bots_api_run_upsample
      summary: Upsample Generation
      parameters: []
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GenerationRequestSchema'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UpsampleParamsSpec'
        required: true
  /api/external/clips/:
    get:
      operationId: studio_api_bots_api_get_clips_external
      summary: Get Clips External
      parameters:
        - in: query
          name: page
          schema:
            default: 0
            title: Page
            type: integer
          required: false
        - in: query
          name: ids
          schema:
            type: [string, 'null']
            title: Ids
          required: false
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                items:
                  $ref: '#/components/schemas/ExternalClipSchema'
                title: Response
                type: array
      security:
        - AuthBearer: []
  /api/external/generate/promotion/:
    post:
      operationId: studio_api_bots_api_run_generation_promotion
      summary: Run Generation Promotion
      parameters: []
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                items:
                  $ref: '#/components/schemas/ExternalClipSchema'
                title: Response
                type: array
      description: >-
        Temprorary promotion endpoint for events or partnerships like V-day or
        Alzheimers.
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ExternalGenerationSpec'
        required: true
  /api/generate/requests/:
    get:
      operationId: studio_api_bots_api_get_gen_requests
      summary: Get Gen Requests
      parameters:
        - in: query
          name: page
          schema:
            default: 0
            title: Page
            type: integer
          required: false
        - in: query
          name: query
          schema:
            type: [string, 'null']
            title: Query
          required: false
        - in: query
          name: categories
          schema:
            items:
              type: string
            title: Categories
            type: array
          required: false
        - in: query
          name: ids
          schema:
            title: Ids
            type: string
          required: false
        - in: query
          name: status
          schema:
            type: [string, 'null']
            title: Status
          required: false
        - in: query
          name: is_liked
          schema:
            type: [boolean, 'null']
            default: false
            title: Is Liked
          required: false
        - in: query
          name: is_public
          schema:
            type: [boolean, 'null']
            title: Is Public
          required: false
        - in: query
          name: is_not_disliked
          schema:
            type: [boolean, 'null']
            default: false
            title: Is Not Disliked
          required: false
        - in: query
          name: is_trashed
          schema:
            type: [boolean, 'null']
            default: false
            title: Is Trashed
          required: false
        - in: query
          name: from_index
          schema:
            default: 0
            title: From Index
            type: integer
          required: false
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                items:
                  $ref: '#/components/schemas/GenerationRequestSchema'
                title: Response
                type: array
      security:
        - AuthBearer: []
  /api/playlist/me:
    get:
      operationId: studio_api_bots_api_get_user_playlists
      summary: Get User Playlists
      parameters:
        - in: query
          name: page
          schema:
            default: 0
            title: Page
            type: integer
          required: false
        - in: query
          name: query
          schema:
            type: [string, 'null']
            title: Query
          required: false
        - in: query
          name: categories
          schema:
            items:
              type: string
            title: Categories
            type: array
          required: false
        - in: query
          name: ids
          schema:
            title: Ids
            type: string
          required: false
        - in: query
          name: status
          schema:
            type: [string, 'null']
            title: Status
          required: false
        - in: query
          name: is_liked
          schema:
            type: [boolean, 'null']
            default: false
            title: Is Liked
          required: false
        - in: query
          name: is_public
          schema:
            type: [boolean, 'null']
            title: Is Public
          required: false
        - in: query
          name: is_not_disliked
          schema:
            type: [boolean, 'null']
            default: false
            title: Is Not Disliked
          required: false
        - in: query
          name: is_trashed
          schema:
            type: [boolean, 'null']
            default: false
            title: Is Trashed
          required: false
        - in: query
          name: from_index
          schema:
            default: 0
            title: From Index
            type: integer
          required: false
        - in: query
          name: show_trashed
          schema:
            type: [boolean, 'null']
            default: false
            title: Show Trashed
          required: false
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PlaylistsSchema'
      description: Get user's library of owned playlists.
      security:
        - AuthBearer: []
  /api/playlist/create/:
    post:
      operationId: studio_api_bots_playlist_api_create_playlist
      summary: Create Playlist
      parameters: []
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PlaylistSchema'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PlaylistCreateSpec'
        required: true
      security:
        - AuthBearer: []
  /api/playlist/trash/:
    post:
      operationId: studio_api_bots_api_trash_playlist
      summary: Trash Playlist
      parameters: []
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PlaylistSchema'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PlaylistTrashSpec'
        required: true
      security:
        - AuthBearer: []
  /api/playlist/set_metadata/:
    post:
      operationId: studio_api_bots_api_set_playlist_metadata
      summary: Set Playlist Metadata
      parameters: []
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                anyOf:
                  - $ref: '#/components/schemas/PlaylistSchema'
                  - $ref: '#/components/schemas/GenericModerationErrorSchema'
                title: Response
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PlaylistUpdateMetadataSpec'
        required: true
      security:
        - AuthBearer: []
  /api/playlist/update_clips/:
    post:
      operationId: studio_api_bots_api_update_playlist_clips
      summary: Update Playlist Clips
      parameters: []
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PlaylistSchema'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PlaylistUpdateClipsSpec'
        required: true
      security:
        - AuthBearer: []
  /api/playlist/{playlist_id}:
    get:
      operationId: studio_api_bots_api_get_playlist
      summary: Get Playlist
      parameters:
        - in: path
          name: playlist_id
          schema:
            title: Playlist Id
            type: string
          required: true
        - in: query
          name: page
          schema:
            default: 0
            title: Page
            type: integer
          required: false
        - in: query
          name: query
          schema:
            type: [string, 'null']
            title: Query
          required: false
        - in: query
          name: categories
          schema:
            items:
              type: string
            title: Categories
            type: array
          required: false
        - in: query
          name: ids
          schema:
            title: Ids
            type: string
          required: false
        - in: query
          name: status
          schema:
            type: [string, 'null']
            title: Status
          required: false
        - in: query
          name: is_liked
          schema:
            type: [boolean, 'null']
            default: false
            title: Is Liked
          required: false
        - in: query
          name: is_public
          schema:
            type: [boolean, 'null']
            title: Is Public
          required: false
        - in: query
          name: is_not_disliked
          schema:
            type: [boolean, 'null']
            default: false
            title: Is Not Disliked
          required: false
        - in: query
          name: is_trashed
          schema:
            type: [boolean, 'null']
            default: false
            title: Is Trashed
          required: false
        - in: query
          name: from_index
          schema:
            default: 0
            title: From Index
            type: integer
          required: false
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PlaylistSchema'
      description: Get a playlist by ID.
  /api/playlist/{playlist_id}/:
    get:
      operationId: studio_api_bots_api_get_playlist1
      summary: Get Playlist
      parameters:
        - in: path
          name: playlist_id
          schema:
            title: Playlist Id
            type: string
          required: true
        - in: query
          name: page
          schema:
            default: 0
            title: Page
            type: integer
          required: false
        - in: query
          name: query
          schema:
            type: [string, 'null']
            title: Query
          required: false
        - in: query
          name: categories
          schema:
            items:
              type: string
            title: Categories
            type: array
          required: false
        - in: query
          name: ids
          schema:
            title: Ids
            type: string
          required: false
        - in: query
          name: status
          schema:
            type: [string, 'null']
            title: Status
          required: false
        - in: query
          name: is_liked
          schema:
            type: [boolean, 'null']
            default: false
            title: Is Liked
          required: false
        - in: query
          name: is_public
          schema:
            type: [boolean, 'null']
            title: Is Public
          required: false
        - in: query
          name: is_not_disliked
          schema:
            type: [boolean, 'null']
            default: false
            title: Is Not Disliked
          required: false
        - in: query
          name: is_trashed
          schema:
            type: [boolean, 'null']
            default: false
            title: Is Trashed
          required: false
        - in: query
          name: from_index
          schema:
            default: 0
            title: From Index
            type: integer
          required: false
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PlaylistSchema'
      description: Get a playlist by ID.
  /api/generate/clip/{clip_id}:
    get:
      operationId: studio_api_bots_api_get_clip
      summary: Get Clip
      parameters:
        - in: path
          name: clip_id
          schema:
            title: Clip Id
            type: string
          required: true
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GeneratedClipSchema'
      security:
        - AuthBearer: []
  /api/clip/{clip_id}:
    get:
      operationId: studio_api_bots_api_get_clip_2
      summary: Get Clip 2
      parameters:
        - in: path
          name: clip_id
          schema:
            title: Clip Id
            type: string
          required: true
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GeneratedClipSSRSchema'
  /api/clip/{clip_id}/:
    get:
      operationId: studio_api_bots_api_get_clip_21
      summary: Get Clip 2
      parameters:
        - in: path
          name: clip_id
          schema:
            title: Clip Id
            type: string
          required: true
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GeneratedClipSSRSchema'
  /api/generate/lyrics/:
    post:
      operationId: studio_api_bots_api_run_lyrics_generation
      summary: Run Lyrics Generation
      parameters: []
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GenLyricsRequestId'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/GenLyricsSpec'
        required: true
  /api/generate/lyrics/{request_id}:
    get:
      operationId: studio_api_bots_api_get_lyrics_generation
      summary: Get Lyrics Generation
      parameters:
        - in: path
          name: request_id
          schema:
            title: Request Id
            type: string
          required: true
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GenLyricsSchema'
  /api/generate/lyrics/{request_id}/:
    get:
      operationId: studio_api_bots_api_get_lyrics_generation1
      summary: Get Lyrics Generation
      parameters:
        - in: path
          name: request_id
          schema:
            title: Request Id
            type: string
          required: true
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GenLyricsSchema'
  /api/generate/finish/:
    post:
      operationId: studio_api_bots_api_finish_generation
      summary: Finish Generation
      parameters: []
      responses:
        '200':
          description: OK
  /api/generate/finish-clip/:
    post:
      operationId: studio_api_bots_api_finish_clip_v2
      summary: Finish Clip V2
      parameters: []
      responses:
        '200':
          description: OK
  /api/generate/v2/:
    post:
      operationId: studio_api_bots_api_run_generation_v2
      summary: Run Generation V2
      parameters: []
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GenerationRequestSchema'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/GenParamsSpec'
        required: true
  /api/clips/children/:
    get:
      operationId: studio_api_bots_clips_api_get_children
      summary: Get Children
      parameters:
        - in: query
          name: clip_id
          schema:
            title: Clip Id
            type: string
          required: true
        - in: query
          name: follow_concat_paths
          schema:
            default: false
            title: Follow Concat Paths
            type: boolean
          required: false
        - in: query
          name: descend_from_roots
          schema:
            default: false
            title: Descend From Roots
            type: boolean
          required: false
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ChildClipsSchema'
      description: find child clips for the given clip ID
      security:
        - AuthBearer: []
  /api/gen/trash/:
    post:
      operationId: studio_api_bots_api_trash_gen
      summary: Trash Gen
      parameters: []
      responses:
        '200':
          description: OK
      description: |-
        Move or remove a generated clip from trash.

        Args:
            request (HttpRequest): The HTTP request object.
            spec (TrashSpec): An object containing trash specifications.

        Returns:
            TrashSchema: An object indicating the trash (deleted) status of the clip.
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/TrashSpec'
        required: true
      security:
        - AuthBearer: []
  /api/clips/trashed/:
    get:
      operationId: studio_api_bots_api_get_trashed_clips
      summary: Get Trashed Clips
      parameters:
        - in: query
          name: is_liked
          schema:
            type: [boolean, 'null']
            title: Is Liked
          required: false
        - in: query
          name: is_public
          schema:
            type: [boolean, 'null']
            title: Is Public
          required: false
        - in: query
          name: page
          schema:
            type: [integer, 'null']
            default: 0
            title: Page
          required: false
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                items:
                  $ref: '#/components/schemas/GeneratedClipSchema'
                title: Response
                type: array
      security:
        - AuthBearer: []
  /api/clips/delete/:
    post:
      operationId: studio_api_bots_api_delete_clips
      summary: Delete Clips
      parameters: []
      responses:
        '200':
          description: OK
      description: >-
        Handle the deletion of clips specified by their IDs.


        This endpoint accepts a POST request with a JSON body containing a list

        of clip IDs. It will then move these clips to a designated 'deleted'
        folder

        on S3, effectively marking them as deleted in the system.


        Args:
            request (HttpRequest): The HTTP request object containing the JSON payload
            with a list of clip IDs under the key 'clip_ids'.

        Returns:
            HttpResponse: An HTTP response with status 204 (No Content) if the clips
            are successfully marked as deleted. This status indicates that the action
            was successful, but there is no content to return in the response body.
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/DeletedClipsSchema'
        required: true
      security:
        - AuthBearer: []
  /api/users/merge_accounts/:
    post:
      operationId: studio_api_bots_api_merge_accounts_view
      summary: Merge Accounts View
      parameters: []
      responses:
        '200':
          description: OK
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/MergeAccountsSpec'
        required: true
      security:
        - AuthBearer: []
  /api/gen/{gen_id}/increment_action_count/:
    post:
      operationId: studio_api_bots_api_increment_action_count
      summary: Increment Action Count
      parameters:
        - in: path
          name: gen_id
          schema:
            title: Gen Id
            type: string
          required: true
      responses:
        '200':
          description: OK
      description: Increment action count
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ActionSpec'
        required: true
  /api/uploads/video-output/{upload_id}/:
    post:
      operationId: studio_api_bots_uploads_api_process_video_output
      summary: Process Video Output
      parameters:
        - in: path
          name: upload_id
          schema:
            title: Upload Id
            type: string
          required: true
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GeneratedClipSSRSchema'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/VideoOutputSpec'
        required: true
      security:
        - AuthBearer: []
  /api/user/accept_custom_mode_tos/:
    post:
      operationId: studio_api_bots_api_accept_custom_mode_tos
      summary: Accept Custom Mode Tos
      parameters: []
      responses:
        '200':
          description: OK
      description: Accept TOS for custom mode lyrics.
      security:
        - AuthBearer: []
  /api/user/clip_listen_history/:
    get:
      operationId: studio_api_bots_api_get_user_play_history
      summary: Get User Play History
      parameters: []
      responses:
        '200':
          description: OK
      description: Get the logged-in user play history from Chopin Event Service
  /api/user/delete-account/:
    post:
      operationId: studio_api_bots_api_delete_user_account
      summary: Delete User Account
      parameters: []
      responses:
        '200':
          description: OK
      description: Delete the logged-in user's account.
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/DeleteAccountSpec'
        required: true
  /api/user/update_phone_number/:
    post:
      operationId: studio_api_bots_user_api_update_phone_number
      summary: Update Phone Number
      parameters: []
      responses:
        '200':
          description: OK
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UpdateUserPhoneReq'
        required: true
      security:
        - AuthBearer: []
  /api/user/delete_phone_number/:
    post:
      operationId: studio_api_bots_user_api_delete_phone_number
      summary: Delete Phone Number
      parameters: []
      responses:
        '200':
          description: OK
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UpdateUserPhoneReq'
        required: true
      security:
        - AuthBearer: []
  /api/user/find_existing_user_by_phone/:
    post:
      operationId: studio_api_bots_user_api_find_existing_user_by_phone
      summary: Find Existing User By Phone
      parameters: []
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/FindExistingUserByPhoneResp'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/FindExistingUserByPhoneReq'
        required: true
      security:
        - AuthBearer: []
  /api/user/create_session_id/:
    post:
      operationId: studio_api_bots_user_api_create_session_id
      summary: Create Session Id
      parameters: []
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CreateSessionIdSchema'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateSessionIdSpec'
        required: true
  /api/user/record_session_id/:
    post:
      operationId: studio_api_bots_user_api_record_session_id
      summary: Record Session Id
      parameters: []
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RecordSessionIdSchema'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/RecordSessionIdSpec'
        required: true
  /api/clips/get_similar/:
    get:
      operationId: studio_api_bots_api_get_similar
      summary: Get Similar
      parameters:
        - in: query
          name: id
          schema:
            title: Id
            type: string
          required: true
        - in: query
          name: count
          schema:
            default: -1
            title: Count
            type: integer
          required: false
        - in: query
          name: exact_match
          schema:
            default: false
            title: Exact Match
            type: boolean
          required: false
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SimilarClipsSchema'
      description: find simialr public songs to the given clip ids.
      security:
        - AuthBearer: []
  /api/clips/update_similar/:
    post:
      operationId: studio_api_bots_api_update_similar
      summary: Update Similar
      parameters: []
      responses:
        '200':
          description: OK
  /api/refresh_recommend_styles/:
    post:
      operationId: studio_api_bots_api_refresh_recommend_styles
      summary: Refresh Recommend Styles
      parameters: []
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RecommendStylesSchema'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/RecommendStylesSpec'
        required: true
      security:
        - AuthBearer: []
  /api/playlist_reaction/{playlist_id}/update_reaction_type/:
    post:
      operationId: studio_api_bots_playlist_reaction_api_update_reaction_type
      summary: Update Reaction Type
      parameters:
        - in: path
          name: playlist_id
          schema:
            title: Playlist Id
            type: string
          required: true
      responses:
        '200':
          description: OK
      description: Update reaction type on UserPlaylistReaction (and associated Playlist).
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ReactionSpec'
        required: true
      security:
        - AuthBearer: []
  /api/playlist_reaction/{playlist_id}/increment_play_count/:
    post:
      operationId: studio_api_bots_playlist_reaction_api_increment_play_count
      summary: Increment Play Count
      parameters:
        - in: path
          name: playlist_id
          schema:
            title: Playlist Id
            type: string
          required: true
      responses:
        '200':
          description: OK
      description: Increment play count on UserPlaylistReaction (and associated Playlist).
  /api/playlist_reaction/{playlist_id}/update_flag_state/:
    post:
      operationId: studio_api_bots_playlist_reaction_api_update_flag_state
      summary: Update Flag State
      parameters:
        - in: path
          name: playlist_id
          schema:
            title: Playlist Id
            type: string
          required: true
      responses:
        '200':
          description: OK
      description: >-
        Update flag state on UserReaction (and associated
        Playlisteratedplaylist).
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/FlagSpec'
        required: true
      security:
        - AuthBearer: []
  /api/playlist_reaction/{playlist_id}/set_visibility/:
    post:
      operationId: studio_api_bots_playlist_reaction_api_set_visibility
      summary: Set Visibility
      parameters:
        - in: path
          name: playlist_id
          schema:
            title: Playlist Id
            type: string
          required: true
      responses:
        '200':
          description: OK
      description: Set is_public visibility on a Playlist. User must own playlist.
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PlaylistVisibilitySpec'
        required: true
      security:
        - AuthBearer: []
  /api/profiles/:
    post:
      operationId: studio_api_bots_profiles_api_update_artist_profile
      summary: Update Artist Profile
      parameters: []
      responses:
        '200':
          description: OK
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UpdateArtistProfileSpec'
        required: true
      security:
        - AuthBearer: []
  /api/profiles/follow:
    post:
      operationId: studio_api_bots_profiles_api_follow_artist_profile
      summary: Follow Artist Profile
      parameters: []
      responses:
        '200':
          description: OK
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/FollowArtistProfileSpec'
        required: true
      security:
        - AuthBearer: []
  /api/profiles/flag:
    post:
      operationId: studio_api_bots_profiles_api_flag_artist_profile
      summary: Flag Artist Profile
      parameters: []
      responses:
        '200':
          description: OK
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/FlagArtistProfileSpec'
        required: true
      security:
        - AuthBearer: []
  /api/profiles/following:
    get:
      operationId: studio_api_bots_profiles_api_get_profiles_following
      summary: Get Profiles Following
      parameters:
        - in: query
          name: page
          schema:
            default: 0
            title: Page
            type: integer
          required: false
        - in: query
          name: query
          schema:
            type: [string, 'null']
            title: Query
          required: false
        - in: query
          name: categories
          schema:
            items:
              type: string
            title: Categories
            type: array
          required: false
        - in: query
          name: ids
          schema:
            title: Ids
            type: string
          required: false
        - in: query
          name: status
          schema:
            type: [string, 'null']
            title: Status
          required: false
        - in: query
          name: is_liked
          schema:
            type: [boolean, 'null']
            default: false
            title: Is Liked
          required: false
        - in: query
          name: is_public
          schema:
            type: [boolean, 'null']
            title: Is Public
          required: false
        - in: query
          name: is_not_disliked
          schema:
            type: [boolean, 'null']
            default: false
            title: Is Not Disliked
          required: false
        - in: query
          name: is_trashed
          schema:
            type: [boolean, 'null']
            default: false
            title: Is Trashed
          required: false
        - in: query
          name: from_index
          schema:
            default: 0
            title: From Index
            type: integer
          required: false
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/FollowListResponse'
      security:
        - AuthBearer: []
  /api/profiles/followers:
    get:
      operationId: studio_api_bots_profiles_api_get_profiles_followers
      summary: Get Profiles Followers
      parameters:
        - in: query
          name: page
          schema:
            default: 0
            title: Page
            type: integer
          required: false
        - in: query
          name: query
          schema:
            type: [string, 'null']
            title: Query
          required: false
        - in: query
          name: categories
          schema:
            items:
              type: string
            title: Categories
            type: array
          required: false
        - in: query
          name: ids
          schema:
            title: Ids
            type: string
          required: false
        - in: query
          name: status
          schema:
            type: [string, 'null']
            title: Status
          required: false
        - in: query
          name: is_liked
          schema:
            type: [boolean, 'null']
            default: false
            title: Is Liked
          required: false
        - in: query
          name: is_public
          schema:
            type: [boolean, 'null']
            title: Is Public
          required: false
        - in: query
          name: is_not_disliked
          schema:
            type: [boolean, 'null']
            default: false
            title: Is Not Disliked
          required: false
        - in: query
          name: is_trashed
          schema:
            type: [boolean, 'null']
            default: false
            title: Is Trashed
          required: false
        - in: query
          name: from_index
          schema:
            default: 0
            title: From Index
            type: integer
          required: false
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/FollowListResponse'
      security:
        - AuthBearer: []
  /api/notification/v2:
    get:
      operationId: studio_api_bots_notification_api_get_notifications_v2
      summary: Get Notifications V2
      parameters:
        - in: query
          name: before_datetime_utc
          schema:
            type: [string, 'null']
            format: date-time
            title: Before Datetime Utc
          required: false
        - in: query
          name: after_datetime_utc
          schema:
            type: [string, 'null']
            format: date-time
            title: After Datetime Utc
          required: false
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UserNotificationV2Schema'
      description: fetch the notifications.
      security:
        - AuthBearer: []
  /api/notification/v2/read/:
    post:
      operationId: studio_api_bots_notification_api_mark_notifications_as_read_v2
      summary: Mark Notifications As Read
      parameters: []
      responses:
        '200':
          description: OK
      description: Mark notifications as read.
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ReadNotificationsSpecV2'
        required: true
      security:
        - AuthBearer: []
  /api/notification/:
    get:
      operationId: studio_api_bots_notification_api_get_notifications
      summary: Get Notifications
      parameters:
        - in: query
          name: after_datetime_utc
          schema:
            type: [string, 'null']
            format: date-time
            title: After Datetime Utc
          required: false
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UserNotificationSchema'
      description: fetch the notifications.
      security:
        - AuthBearer: []
  /api/notification/read/:
    post:
      operationId: studio_api_bots_notification_api_mark_notifications_as_read
      summary: Mark Notifications As Read
      parameters: []
      responses:
        '200':
          description: OK
      description: Mark notifications as read.
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ReadNotificationsSpec'
        required: true
      security:
        - AuthBearer: []
  /api/notification/suppress/:
    post:
      operationId: studio_api_bots_notification_api_mark_notifications_as_not_interested
      summary: Mark Notifications As Not Interested
      parameters: []
      responses:
        '200':
          description: OK
      description: Mark notifications as not showing up any more.
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/SuppressNotificationsSpec'
        required: true
      security:
        - AuthBearer: []
  /api/playlist/liked_playlist/:
    get:
      operationId: studio_api_bots_playlist_api_get_user_liked_playlists
      summary: Get User Liked Playlists
      parameters:
        - in: query
          name: page
          schema:
            default: 0
            title: Page
            type: integer
          required: false
        - in: query
          name: query
          schema:
            type: [string, 'null']
            title: Query
          required: false
        - in: query
          name: categories
          schema:
            items:
              type: string
            title: Categories
            type: array
          required: false
        - in: query
          name: ids
          schema:
            title: Ids
            type: string
          required: false
        - in: query
          name: status
          schema:
            type: [string, 'null']
            title: Status
          required: false
        - in: query
          name: is_liked
          schema:
            type: [boolean, 'null']
            default: false
            title: Is Liked
          required: false
        - in: query
          name: is_public
          schema:
            type: [boolean, 'null']
            title: Is Public
          required: false
        - in: query
          name: is_not_disliked
          schema:
            type: [boolean, 'null']
            default: false
            title: Is Not Disliked
          required: false
        - in: query
          name: is_full_song
          schema:
            type: [boolean, 'null']
            default: false
            title: Is Full Song
          required: false
        - in: query
          name: is_video_to_song
          schema:
            type: [boolean, 'null']
            title: Is Video To Song
          required: false
        - in: query
          name: is_suno_short
          schema:
            type: [boolean, 'null']
            title: Is Suno Short
          required: false
        - in: query
          name: add_preset_clips
          schema:
            type: [boolean, 'null']
            default: false
            title: Add Preset Clips
          required: false
        - in: query
          name: is_trashed
          schema:
            type: [boolean, 'null']
            default: false
            title: Is Trashed
          required: false
        - in: query
          name: from_index
          schema:
            default: 0
            title: From Index
            type: integer
          required: false
        - in: query
          name: page_size
          schema:
            default: 20
            title: Page Size
            type: integer
          required: false
        - in: query
          name: is_cover
          schema:
            type: [boolean, 'null']
            default: false
            title: Is Cover
          required: false
        - in: query
          name: is_extend
          schema:
            type: [boolean, 'null']
            default: false
            title: Is Extend
          required: false
        - in: query
          name: is_infill
          schema:
            type: [boolean, 'null']
            default: false
            title: Is Infill
          required: false
        - in: query
          name: is_persona
          schema:
            type: [boolean, 'null']
            default: false
            title: Is Persona
          required: false
        - in: query
          name: is_scene
          schema:
            type: [boolean, 'null']
            default: false
            title: Is Scene
          required: false
        - in: query
          name: is_upsample
          schema:
            type: [boolean, 'null']
            default: false
            title: Is Upsample
          required: false
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PlaylistsSchema'
      security:
        - AuthBearer: []
  /api/profiles/{handle}:
    get:
      operationId: studio_api_bots_profiles_api_get_artist_profile
      summary: Get Artist Profile
      parameters:
        - in: path
          name: handle
          schema:
            title: Handle
            type: string
          required: true
        - in: query
          name: playlists_sort_by
          schema:
            title: Playlists Sort By
            type: string
          required: true
        - in: query
          name: clips_sort_by
          schema:
            title: Clips Sort By
            type: string
          required: true
        - in: query
          name: page
          schema:
            default: 0
            title: Page
            type: integer
          required: false
        - in: query
          name: query
          schema:
            type: [string, 'null']
            title: Query
          required: false
        - in: query
          name: categories
          schema:
            items:
              type: string
            title: Categories
            type: array
          required: false
        - in: query
          name: ids
          schema:
            title: Ids
            type: string
          required: false
        - in: query
          name: status
          schema:
            type: [string, 'null']
            title: Status
          required: false
        - in: query
          name: is_liked
          schema:
            type: [boolean, 'null']
            default: false
            title: Is Liked
          required: false
        - in: query
          name: is_public
          schema:
            type: [boolean, 'null']
            title: Is Public
          required: false
        - in: query
          name: is_not_disliked
          schema:
            type: [boolean, 'null']
            default: false
            title: Is Not Disliked
          required: false
        - in: query
          name: is_trashed
          schema:
            type: [boolean, 'null']
            default: false
            title: Is Trashed
          required: false
        - in: query
          name: from_index
          schema:
            default: 0
            title: From Index
            type: integer
          required: false
        - in: query
          name: is_suno_short
          schema:
            title: Is Suno Short
            type: boolean
          required: false
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ProfileInfoSchema'
  /api/profiles/{handle}/recent_clips:
    get:
      operationId: studio_api_bots_profiles_api_get_artist_recent_clips
      summary: Get Artist Recent Clips
      parameters:
        - in: path
          name: handle
          schema:
            title: Handle
            type: string
          required: true
      responses:
        '200':
          description: OK
  /api/profiles/{handle}/following:
    get:
      operationId: studio_api_bots_profiles_api_get_artist_following
      summary: Get Artist following
      parameters:
        - in: path
          name: handle
          schema:
            title: Handle
            type: string
          required: true
        - in: query
          name: page
          schema:
            default: 0
            title: Page
            type: integer
          required: false
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/FollowListResponse'
  /api/profiles/{handle}/followers:
    get:
      operationId: studio_api_bots_profiles_api_get_artist_followers
      summary: Get Artist following
      parameters:
        - in: path
          name: handle
          schema:
            title: Handle
            type: string
          required: true
        - in: query
          name: page
          schema:
            default: 0
            title: Page
            type: integer
          required: false
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/FollowListResponse'
  /api/profiles/{handle}/listen-history/:
    get:
      operationId: studio_api_bots_profiles_api_get_use_listen_history
      summary: Get Use Listen History
      parameters:
        - in: path
          name: handle
          schema:
            title: Handle
            type: string
          required: true
        - in: query
          name: cursor
          schema:
            type: [string, 'null']
            title: Cursor
          required: false
        - in: query
          name: limit
          schema:
            default: 10
            title: Limit
            type: integer
          required: false
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ListenHistoryResponse'
      description: >-
        Get the user's listen history.

        handle: str - the handle of the user

        cursor: str | None - the cursor to paginate the listen history, defaults
        to None

        limit: int - the number of clips to return
      security:
        - AuthBearer: []
  /api/mobile/v0/explore-sections/:
    get:
      operationId: studio_api_bots_mobile_api_get_mobile_v0_explore_sections
      summary: Get Mobile V0 Explore Sections
      parameters: []
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MobileExploreSectionsSchema'
      description: Get the explore sections for mobile.
  /api/mobile/v1/discover/:
    get:
      operationId: studio_api_bots_mobile_api_get_mobile_v1_discover
      summary: Get Mobile V1 Discover
      parameters: []
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MobileDiscoverSchema'
      description: Get the discover (homepage) sections for mobile.
  /api/mobile/v0/register-push/:
    post:
      operationId: studio_api_bots_mobile_api_register_push
      summary: Register Push
      parameters: []
      responses:
        '200':
          description: OK
      description: Register a token for a push notification.
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/RegisterPushSpec'
        required: true
  /api/search/:
    post:
      operationId: studio_api_bots_search_search_compound_search
      summary: Compound Search
      parameters: []
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SearchResult'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/SearchRequest'
        required: true
      security:
        - AuthBearer: []
  /api/uploads/image/:
    post:
      operationId: studio_api_bots_uploads_api_start_image_upload
      summary: Start Image Upload
      parameters: []
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UploadRequestSchema'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UploadRequestSpec'
        required: true
      security:
        - AuthBearer: []
  /api/uploads/audio/:
    post:
      operationId: studio_api_bots_uploads_api_start_audio_upload
      summary: Start Audio Upload
      parameters: []
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UploadRequestSchema'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UploadRequestSpec'
        required: true
      security:
        - AuthBearer: []
  /api/uploads/audio/{upload_id}/upload-finish/:
    post:
      operationId: studio_api_bots_uploads_api_finish_processing_audio_upload
      summary: Finish Processing Audio Upload
      parameters:
        - in: path
          name: upload_id
          schema:
            title: Upload Id
            type: string
          required: true
      responses:
        '200':
          description: OK
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/FinishUploadSpec'
        required: true
      security:
        - AuthBearer: []
  /api/uploads/audio/{upload_id}/:
    get:
      operationId: studio_api_bots_uploads_api_get_audio_upload_status
      summary: Get Audio Upload Status
      parameters:
        - in: path
          name: upload_id
          schema:
            title: Upload Id
            type: string
          required: true
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UploadRequestStatusSchema'
      security:
        - AuthBearer: []
  /api/uploads/webhook/finish/:
    post:
      operationId: studio_api_bots_uploads_api_finish_upload_modal
      summary: Finish Upload Modal
      parameters: []
      responses:
        '200':
          description: OK
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UploadCallbackSpec'
        required: true
  /api/uploads/audio/{upload_id}/initialize-clip/:
    post:
      operationId: studio_api_bots_uploads_api_initialize_upload_clip
      summary: Initialize Upload Clip
      parameters:
        - in: path
          name: upload_id
          schema:
            title: Upload Id
            type: string
          required: true
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UploadClipSchema'
      security:
        - AuthBearer: []
  /api/uploads/video/:
    post:
      operationId: studio_api_bots_uploads_api_start_video_upload
      summary: Start Video Upload
      parameters: []
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UploadRequestSchema'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UploadRequestSpec'
        required: true
      security:
        - AuthBearer: []
  /api/uploads/video/{upload_id}/upload-finish/:
    post:
      operationId: studio_api_bots_uploads_api_finish_processing_video_upload
      summary: Finish Processing Video Upload
      parameters:
        - in: path
          name: upload_id
          schema:
            title: Upload Id
            type: string
          required: true
      responses:
        '200':
          description: OK
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/FinishUploadSpec'
        required: true
      security:
        - AuthBearer: []
  /api/uploads/video/{upload_id}/:
    get:
      operationId: studio_api_bots_uploads_api_get_video_upload_status
      summary: Get Video Upload Status
      parameters:
        - in: path
          name: upload_id
          schema:
            title: Upload Id
            type: string
          required: true
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UploadRequestStatusSchema'
      security:
        - AuthBearer: []
  /api/invite/:
    post:
      operationId: studio_api_bots_invite_api_create_invite_session
      summary: Create Invite Session
      parameters: []
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/InviteSchema'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/InviteSpec'
        required: true
  /api/invite/summary/:
    get:
      operationId: studio_api_bots_invite_api_get_summary
      summary: Get Summary
      parameters: []
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/InviteHistorySchema'
      security:
        - AuthBearer: []
  /api/social/following-clip-feed/:
    post:
      operationId: studio_api_bots_social_api_folllowing_feed
      summary: Folllowing Feed
      parameters: []
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/FollowingFeedResponse'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/FollowingFeedRequest'
        required: true
      security:
        - AuthBearer: []
  /api/video/generate/finish/:
    post:
      operationId: studio_api_bots_videos_api_finish_video_generation
      summary: Finish Video Generation
      parameters: []
      responses:
        '200':
          description: OK
  /api/video/generate/{clip_id}/:
    post:
      operationId: studio_api_bots_videos_api_generate_video
      summary: Generate Video
      parameters:
        - in: path
          name: clip_id
          schema:
            title: Clip Id
            type: string
          required: true
      responses:
        '200':
          description: OK
      security:
        - AuthBearer: []
  /api/video/generate/{clip_id}/status/:
    get:
      operationId: studio_api_bots_videos_api_get_video_status
      summary: Get Video Status
      parameters:
        - in: path
          name: clip_id
          schema:
            title: Clip Id
            type: string
          required: true
      responses:
        '200':
          description: OK
      security:
        - AuthBearer: []
  /api/app_version_update/:
    post:
      operationId: studio_api_bots_app_version_update_api_get_version_updates
      summary: Get Version Updates
      parameters: []
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AppVersionUpdateResponse'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/AppVersionUpdateRequest'
        required: true
  /api/social/recommend-users/:
    post:
      operationId: studio_api_bots_social_api_recommend_users
      summary: Recommend Users
      parameters: []
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RecommendUserResp'
      description: >-
        api post request for 'Recommend Users' section of Homepage

        Post request have more controls on inputs with nested data structure.

        returns: list of SimpleProfileInfoSchemas (can be empty) of each user to
        be displayed.
            users must be initialized in User model to be pulled.
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/RecommendUserReq'
        required: true
      security:
        - AuthBearer: []
  /api/invite/ios/promo_code/{promo_code}:
    get:
      operationId: studio_api_bots_invite_ios_api_get_inviter_data_from_promo_code
      summary: Get Inviter Data From Promo Code
      parameters:
        - in: path
          name: promo_code
          schema:
            title: Promo Code
            type: string
          required: true
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/IosInviterDataResponse'
      description: >-
        Get the inviter handle and avatar image URL from the promo code
        We use lower case promo codes in the db.
  /api/invite/ios/promo_code_status:
    get:
      operationId: studio_api_bots_invite_ios_api_get_promo_code_status
      summary: Get Promo Code Status
      parameters: []
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PromoCodeStatusResponse'
      description: >-
        Get the number of redemptions left of the user's promo code.
        We use lower case promo codes in the db.
      security:
        - AuthBearer: []
  /api/invite/ios/promo_code:
    post:
      operationId: studio_api_bots_invite_ios_api_redeem_promo_code
      summary: Redeem Promo Code
      parameters: []
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UsePromoCodeResponse'
      description: >-
        Redeem the promo code for the request user.
        We use lower case promo codes in the db.
        If successful, the user can log in, whether or not the promo code was used.
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UsePromoCodeRequest'
        required: true
      security:
        - AuthBearer: []
  /api/invite/ios/waitlist:
    post:
      operationId: studio_api_bots_invite_ios_api_waitlist
      summary: Waitlist
      parameters: []
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/IosWaitlistResponse'
      description: >-
        Return True if the user is already on the waitlist or has just been added to the waitlist
        as a result of this call (ie. no promo code exists for them yet).
        Return False otherwise.
      security:
        - AuthBearer: []
  /api/analytics/user-event:
    get:
        operationId: studio_api_bots_analytics_api_get_user_analytics_data
        summary: Get User Analytics Data
        parameters: []
        responses:
          '200':
            description: OK
            content:
              application/json:
                schema:
                  $ref: '#/components/schemas/UserAnalyticsResponse'
        description: >-
          Get user tracking event data to determine whether to publish GA4 / Branch event
        security:
          - AuthBearer: []
components:
  schemas:
    PlanCreateSpec:
      properties:
        level:
          title: Level
          type: integer
        period:
          title: Period
          type: string
      title: PlanCreateSpec
      type: object
    PortalRedirectSchema:
      properties:
        url:
          title: Url
          type: string
      required:
        - url
      title: PortalRedirectSchema
      type: object
    SubscriptionCancelSchema:
      properties:
        ok:
          title: Ok
          type: boolean
      required:
        - ok
      title: SubscriptionCancelSchema
      type: object
    CreditPurchaseSchema:
      properties:
        ok:
          title: Ok
          type: boolean
        id:
          title: Id
          type: string
      required:
        - ok
        - id
      title: CreditPurchaseSchema
      type: object
    PurchaseSpec:
      properties:
        amount:
          title: Amount
          type: integer
        id:
          type: [string, 'null']
          title: Id
      required:
        - amount
        - id
      title: PurchaseSpec
      type: object
    PlanChangeSpec:
      properties:
        level:
          title: Level
          type: integer
        period:
          title: Period
          type: string
        immediate:
          title: Immediate
          type: boolean
      required:
        - level
        - period
      title: PlanChangeSpec
      type: object
    PlanChangeSchema:
      properties:
        ok:
          title: Ok
          type: boolean
        id:
          type: [string, 'null']
          title: Id
      required:
        - ok
        - id
      title: PlanChangeSchema
      type: object
    CreditPackSchema:
      properties:
        id:
          format: uuid
          title: Id
          type: string
        amount:
          title: Amount
          type: integer
        price_usd:
          title: Price Usd
          type: integer
      required:
        - amount
        - price_usd
      title: CreditPackSchema
      type: object
    SubscriptionInfoResponse:
      properties:
        is_active:
          title: Is Active
          type: boolean
        is_past_due:
          title: Is Past Due
          type: boolean
        credits:
          title: Credits
          type: integer
        subscription_type:
          title: Subscription Type
          type: boolean
        subscription_platform:
          title: Subscription Platform
          type: string
        period:
          type: [string, 'null']
          title: Period
        changing_to:
          type: [string, 'null']
          title: Changing To
        monthly_usage:
          title: Monthly Usage
          type: integer
        monthly_limit:
          title: Monthly Limit
          type: integer
        credit_packs:
          items:
            $ref: '#/components/schemas/CreditPackSchema'
          title: Credit Packs
          type: array
        plan:
          $ref: '#/components/schemas/UsagePlanSchema'
        plans:
          items:
            $ref: '#/components/schemas/UsagePlanSchema'
          title: Plans
          type: array
        total_credits_left:
          title: Total Credits Left
          type: integer
        free_mobile_v4_gens_remaining:
          title: Free Mobile V4 Gens Remaining
          type: integer
        free_mobile_remasters_remaining:
          title: Free Mobile Remasters Remaining
          type: integer
      required:
        - is_active
        - is_past_due
        - credits
        - subscription_type
        - period
        - changing_to
        - monthly_usage
        - monthly_limit
        - credit_packs
        - plans
        - total_credits_left
        - free_mobile_v4_gens_remaining
        - free_mobile_remasters_remaining
      title: SubscriptionInfoResponse
      type: object
    CommentReactionBody:
      type: object
      properties:
        reaction:
          type: [string, 'null']
    CommentsToggle:
      type: object
      properties:
        clip_id:
          type: [string, 'null']
        can_comment:
          type: boolean
    CommentReportingBody:
      type: object
      properties:
        reason:
          type: [string, 'null']
    CommentDeleteResponse:
      type: object
      properties:
        id:
          type: string
        status:
          type: string
    CommentCountResponse:
      type: object
      properties:
        count:
          type: integer
    CommentReportingResponse:
      type: object
      properties:
        id:
          type: string
        comment_id:
          type: string
        user_id:
          type: string
        reason:
          type: [string, 'null']
        reported_at:
          type: string
          format: date-time
    CommentReactionResponse:
      type: object
      properties:
        id:
          type: [string, 'null']
        num_likes:
          type: integer
        reaction_type:
          type: [string, 'null']
    CommentPostRequest:
      type: object
      properties:
        content:
          type: string
        parent_id:
          type: [string, 'null']
        track_timestamp:
          type: [number, 'null']
    Comment:
      type: object
      properties:
        id:
          type: string
          format: uuid
          title: Id
        clip_id:
          type: [string, 'null']
        user_id:
          type: string
        user_display_name:
          type: string
        user_handle:
          type: string
        user_avatar_url:
          type: string
        content:
          type: string
        created_at:
          type: string
          format: date-time
        num_likes:
          type: [integer, 'null']
          default: 0
        num_reports:
          type: [integer, 'null']
          default: 0
        parent_id:
          type: [string, 'null']
        track_timestamp:
          type: [number, 'null']
        reaction_type:
          type: [string, 'null']
        reply_continuation_token:
          type: [string, 'null']
        num_replies:
          type: [integer, 'null']
          default: 0
        replies:
          type: array
          items:
            $ref: '#/components/schemas/Comment'
        user_mentions:
          type: array
          items:
            $ref: '#/components/schemas/CommentUserMention'
      required:
        - id
        - user_id
        - content
        - created_at
    CommentUserMention:
      type: object
      properties:
        start:
          type: integer
        end:
          type: integer
        handle:
          type: string
        display_name:
          type: [string, 'null']
    CommentsPage:
      type: object
      properties:
        next_cursor:
          type: [string, 'null']
          title: Next Cursor
        results:
          type: array
          items:
            $ref: '#/components/schemas/Comment'
        allow_comment:
          type: boolean
        disable_reason:
          type: [string, 'null']
    CommentRepliesPage:
      type: object
      properties:
        reply_continuation_token:
          type: [string, 'null']
          title: Reply Page Cursor
        replies:
          type: array
          items:
            $ref: '#/components/schemas/Comment'
        allow_comment:
          type: boolean
        disable_reason:
          type: [string, 'null']
    UsagePlanSchema:
      properties:
        id:
          format: uuid
          title: Id
          type: string
        level:
          title: Level
          type: integer
        name:
          title: Name
          type: string
        features:
          default: ''
          title: Features
          type: string
        monthly_price_usd:
          title: Monthly Price Usd
          type: number
      required:
        - level
        - name
        - monthly_price_usd
      title: UsagePlanSchema
      type: object
    Filters:
      properties:
        page:
          default: 0
          title: Page
          type: integer
        query:
          type: [string, 'null']
          title: Query
        categories:
          items:
            type: string
          title: Categories
          type: array
        ids:
          title: Ids
          type: string
        status:
          type: [string, 'null']
          title: Status
        is_liked:
          type: [boolean, 'null']
          default: false
          title: Is Liked
        is_public:
          type: [boolean, 'null']
          title: Is Public
        is_not_disliked:
          type: [boolean, 'null']
          default: false
          title: Is Not Disliked
        is_trashed:
          type: [boolean, 'null']
          default: false
          title: Is Trashed
        from_index:
          default: 0
          title: From Index
          type: integer
      title: Filters
      type: object
    GenMetadataSchema:
      description: Selected fields from GeneratedClip.metadata.
      properties:
        tags:
          type: [string, 'null']
          title: Tags
        prompt:
          type: [string, 'null']
          title: Prompt
        gpt_description_prompt:
          type: [string, 'null']
          title: Gpt Description Prompt
        audio_prompt_id:
          type: [string, 'null']
          title: Audio Prompt Id
        type:
          default: gen
          title: Type
          type: string
        task:
          type: [string, 'null']
          title: Task
        duration:
          type: [number, 'null']
          title: Duration
        refund_credits:
          type: [boolean, 'null']
          title: Refund Credits
        stream:
          type: [boolean, 'null']
          title: Stream
        infill:
          type: [boolean, 'null']
          title: Infill
        has_vocal:
          type: [boolean, 'null']
          title: Has Vocal
        history:
          type: array
          title: History
          items:
            anyOf:
              - type: string
              - type: object
                properties:
                  id:
                    type: string
                    format: uuid
                    title: Id
                  continue_at:
                    type: number
                    title: Continue At
                required:
                  - id
        concat_history:
          items:
            anyOf:
              - type: string
              - type: object
                properties:
                  id:
                    type: string
                    title: Id
                  continue_at:
                    type: number
                    title: Continue At
                  type:
                    type: string
                    title: Type
                  source:
                    type: string
                    title: Source
                  infill:
                    type: boolean
                    title: Infill
          title: Concat History
          type: array
        is_audio_upload_tos_accepted:
          type: [boolean, 'null']
          title: Is Audio Upload Tos Accepted
        error_type:
          type: [string, 'null']
          title: Error Type
        error_message:
          type: [string, 'null']
          title: Error Message
        video_to_song_video_upload_id:
          type: [string, 'null']
          title: Video To Song Video Upload Id
        video_to_song_video_upload_url:
          type: [string, 'null']
          title: Video To Song Video Upload URL
        video_to_song_video_output_url:
          type: [string, 'null']
          title: Video To Song Video Output URL
        is_image_to_song:
          type: [boolean, 'null']
          title: Is Image-To-Song
        is_suno_short:
          type: [boolean, 'null']
          title: Is Suno Short
        image_to_song_image_ids:
          anyOf:
            - items:
                type: string
              type: [array, 'null']
          title: Image to song image IDs
        image_to_song_image_urls:
          anyOf:
            - items:
                type: string
              type: [array, 'null']
          title: Image to song image URLs
        cover_clip_id:
          type: [string, 'null']
          title: Continue clip ID
      title: GenMetadataSchema
      type: object
    GeneratedClipSchema:
      properties:
        id:
          format: uuid
          title: Id
          type: string
        video_url:
          type: [string, 'null']
          title: Video Url
        audio_url:
          type: [string, 'null']
          title: Audio Url
        image_url:
          type: [string, 'null']
          title: Image Url
        image_large_url:
          type: [string, 'null']
          title: Image Large Url
        is_video_pending:
          type: [boolean, 'null']
          title: Is Video Pending
        major_model_version:
          title: Major Model Version
          type: string
        model_name:
          title: Model Name
          type: string
        metadata:
          $ref: '#/components/schemas/GenMetadataSchema'
        caption:
          type: [string, 'null']
          title: Caption
        is_liked:
          title: Is Liked
          type: boolean
        is_pinned:
          title: Is Pinned
          type: boolean
        user_id:
          type: [string, 'null']
          title: User Id
        display_name:
          type: [string, 'null']
          title: Display Name
        handle:
          type: [string, 'null']
          title: Handle
        is_handle_updated:
          title: Is Handle Updated
          type: boolean
        comment_count:
          title: Comment Count
          type: integer
        avatar_image_url:
          type: [string, 'null']
          default: https://cdn1.suno.ai/placeholder-1.png
          title: Avatar Image Url
        is_trashed:
          title: Is Trashed
          type: boolean
        reaction:
          $ref: '#/components/schemas/UserReaction'
        created_at:
          format: date-time
          title: Created At
          type: string
        status:
          default: complete
          maxLength: 24
          title: Status
          type: string
        title:
          default: ''
          maxLength: 100
          title: Title
          type: string
        play_count:
          default: 0
          title: Play Count
          type: integer
        upvote_count:
          default: 0
          title: Upvote Count
          type: integer
        is_public:
          default: false
          title: Is Public
          type: boolean
      required:
        - id
        - video_url
        - audio_url
        - image_url
        - image_large_url
        - is_video_pending
        - major_model_version
        - model_name
        - metadata
        - is_liked
        - user_id
        - display_name
        - handle
        - is_handle_updated
        - avatar_image_url
        - is_trashed
        - created_at
      title: GeneratedClipSchema
      type: object
    UserReaction:
      properties:
        clip:
          type: [string, 'null']
          format: uuid
          title: Clip
        play_count:
          default: 0
          title: Play Count
          type: integer
        skip_count:
          default: 0
          title: Skip Count
          type: integer
        flagged:
          default: false
          title: Flagged
          type: boolean
        flagged_reason:
          type: [string, 'null']
          maxLength: 140
          title: Flagged Reason
        feedback_reason:
          type: [string, 'null']
          maxLength: 140
          title: Feedback Reason
        reaction_type:
          type: [string, 'null']
          maxLength: 1
          title: Reaction Type
        updated_at:
          format: date-time
          title: Updated At
          type: string
      required:
        - updated_at
      title: UserReaction
      type: object
    ExternalModelTypeSchema:
      properties:
        id:
          format: uuid
          title: Id
          type: string
        name:
          maxLength: 50
          title: Name
          type: string
        external_key:
          default: ''
          maxLength: 50
          title: External Key
          type: string
        major_version:
          title: Major Version
          type: integer
        description:
          default: ''
          title: Description
          type: string
      required:
        - name
        - major_version
      title: ExternalModelTypeSchema
      type: object
    LoggedInSessionResponse:
      properties:
        user:
          $ref: '#/components/schemas/LoggedInSessionUser'
        models:
          items:
            $ref: '#/components/schemas/ExternalModelTypeSchema'
          title: Models
          type: array
        roles:
          title: Roles
          type: object
        flags:
          title: Flags
          type: object
      required:
        - user
        - models
        - roles
        - flags
      title: LoggedInSessionResponse
      type: object
    LoggedInSessionUser:
      properties:
        email:
          title: Email
          type: string
        username:
          title: Username
          type: string
        id:
          type: [string, 'null']
          format: uuid
          title: Id
        display_name:
          type: [string, 'null']
          title: Display Name
        handle:
          type: [string, 'null']
          title: Handle
        avatar_image_url:
          type: [string, 'null']
          title: Avatar Image Url
        profile_description:
          type: [string, 'null']
          title: Profile Description
        is_handle_updated:
          type: [boolean, 'null']
          title: Is Handle Updated
        phone_number:
          type: [string, 'null']
          title: Phone Number
        ios_invite_data:
          $ref: '#/components/schemas/IosInviteDataResponse'
      required:
        - email
        - username
        - id
        - display_name
        - handle
        - avatar_image_url
        - profile_description
        - is_handle_updated
        - phone_number
        - ios_invite_data
      title: LoggedInSessionUser
      type: object
    UnauthenticatedSessionResponse:
      properties:
        user:
          title: User
          type: object
        models:
          items:
            $ref: '#/components/schemas/ExternalModelTypeSchema'
          title: Models
          type: array
        roles:
          title: Roles
          type: object
        flags:
          title: Flags
          type: object
      required:
        - models
        - roles
        - flags
      title: UnauthenticatedSessionResponse
      type: object
    LikeSpec:
      properties:
        like:
          title: Like
          type: boolean
      required:
        - like
      title: LikeSpec
      type: object
    ReactionSpec:
      description: >-
        Represent an update to a UserReaction.reaction_type, adding or removing
        a like / dislike.
      properties:
        reaction:
          type: [string, 'null']
          enum: [LIKE, DISLIKE]
          title: Reaction
        captcha_token:
          default: ''
          title: Captcha Token
          type: string
      title: ReactionSpec
      type: object
    PlayCountSpec:
      properties:
        sample_factor:
          default: 1
          title: Sample Factor
          type: integer
      title: PlayCountSpec
      type: object
    TimeOfSkipSpec:
      description: Represent the event of a user skipping a clip at a given time.
      properties:
        clip_id:
          format: uuid
          title: Clip Id
          type: string
        time_of_skip_s:
          title: Time Of Skip S
          type: integer
      required:
        - clip_id
        - time_of_skip_s
      title: TimeOfSkipSpec
      type: object
    FlagSpec:
      description: Represent an update to a UserReaction.flagged state
      properties:
        flagged:
          title: Flagged
          type: boolean
        flagged_reason:
          type: [string, 'null']
          title: Flagged Reason
      required:
        - flagged
        - flagged_reason
      title: FlagSpec
      type: object
    FeedbackSpec:
      properties:
        feedback_reason:
          type: [string, 'null']
          title: Feedback Reason
      required:
        - feedback_reason
      title: FeedbackSpec
      type: object
    ClipVisibilitySpec:
      properties:
        is_public:
          title: Is Public
          type: boolean
      required:
        - is_public
      title: ClipVisibilitySpec
      type: object
    ImagePromptSpec:
      properties:
        prompt:
          title: Prompt
          type: string
      required:
        - prompt
      title: ImagePromptSpec
      type: object
    ClipMetadataSpec:
      properties:
        title:
          type: [string, 'null']
          title: Title
        image_url:
          type: [string, 'null']
          title: Image Url
        is_audio_upload_tos_accepted:
          type: [boolean, 'null']
          title: Is Audio Upload Tos Accepted
      title: ClipMetadataSpec
      type: object
    PlaylistClipSchema:
      properties:
        clip:
          $ref: '#/components/schemas/GeneratedClipSchema'
        relative_index:
          title: Relative Index
          type: number
      required:
        - clip
        - relative_index
      title: PlaylistClipSchema
      type: object
    PlaylistSchema:
      properties:
        id:
          anyOf:
            - format: uuid
              type: string
            - type: string
          title: Id
        playlist_clips:
          items:
            $ref: '#/components/schemas/PlaylistClipSchema'
          title: Playlist Clips
          type: array
        image_url:
          type: [string, 'null']
          title: Image Url
        num_total_results:
          title: Num Total Results
          type: integer
        current_page:
          title: Current Page
          type: integer
        is_owned:
          title: Is Owned
          type: boolean
        is_trashed:
          title: Is Trashed
          type: boolean
        is_public:
          title: Is Public
          type: boolean
        user_display_name:
          type: [string, 'null']
          title: User Display Name
        user_handle:
          type: [string, 'null']
          title: User Handle
        user_avatar_image_url:
          type: [string, 'null']
          title: User Avatar Image Url
        reaction:
          type: [string, 'null']
          default: ''
          title: Reaction
        upvote_count:
          type: [integer, 'null']
          default: 0
          title: Upvote Count
        dislike_count:
          type: [integer, 'null']
          default: 0
          title: Dislike Count
        flag_count:
          type: [integer, 'null']
          default: 0
          title: Flag Count
        skip_count:
          type: [integer, 'null']
          default: 0
          title: Skip Count
        play_count:
          type: [integer, 'null']
          default: 0
          title: Play Count
        name:
          default: ''
          maxLength: 100
          title: Name
          type: string
        description:
          default: ''
          title: Description
          type: string
        is_discover_playlist:
          type: [boolean, 'null']
          title: Is Discover Playlist
      required:
        - id
        - playlist_clips
        - num_total_results
        - current_page
        - is_owned
        - is_trashed
        - is_public
        - user_display_name
        - user_handle
      title: PlaylistSchema
      type: object
    PlaylistMetadataSchema:
      properties:
        id:
          anyOf:
            - format: uuid
              type: string
            - type: string
          title: Id
        image_url:
          type: [string, 'null']
          title: Image Url
        num_total_results:
          title: Num Total Results
          type: integer
        is_owned:
          title: Is Owned
          type: boolean
        is_trashed:
          title: Is Trashed
          type: boolean
        is_public:
          title: Is Public
          type: boolean
        user_display_name:
          type: [string, 'null']
          title: User Display Name
        user_handle:
          type: [string, 'null']
          title: User Handle
        user_avatar_image_url:
          type: [string, 'null']
          title: User Avatar Image Url
        reaction:
          type: [string, 'null']
          default: ''
          title: Reaction
        upvote_count:
          type: [integer, 'null']
          default: 0
          title: Upvote Count
        dislike_count:
          type: [integer, 'null']
          default: 0
          title: Dislike Count
        flag_count:
          type: [integer, 'null']
          default: 0
          title: Flag Count
        skip_count:
          type: [integer, 'null']
          default: 0
          title: Skip Count
        play_count:
          type: [integer, 'null']
          default: 0
          title: Play Count
        name:
          default: ''
          maxLength: 100
          title: Name
          type: string
        description:
          default: ''
          title: Description
          type: string
        is_discover_playlist:
          type: [boolean, 'null']
          title: Is Discover Playlist
      required:
        - id
        - num_total_results
        - is_owned
        - is_trashed
        - is_public
        - user_display_name
        - user_handle
      title: PlaylistMetadataSchema
      type: object
    PlaylistsSchema:
      properties:
        num_total_results:
          title: Num Total Results
          type: integer
        current_page:
          title: Current Page
          type: integer
        playlists:
          items:
            $ref: '#/components/schemas/PlaylistSchema'
          title: Playlists
          type: array
      required:
        - num_total_results
        - current_page
        - playlists
      title: PlaylistsSchema
      type: object
    RadioTagsSchema:
      properties:
        tags:
          items:
            type: string
          title: Tags
          type: array
      required:
        - tags
      title: RadioTagsSchema
      type: object
    RadioFilters:
      properties:
        exclude_clip_ids:
          default: []
          items:
            type: string
          title: Exclude Clip Ids
          type: array
      title: RadioFilters
      type: object
    RadioSchema:
      properties:
        tag:
          title: Tag
          type: string
        clips:
          items:
            $ref: '#/components/schemas/GeneratedClipSchema'
          title: Clips
          type: array
      required:
        - tag
        - clips
      title: RadioSchema
      type: object
    GenerationRequestSimpleSchema:
      properties:
        id:
          format: uuid
          title: Id
          type: string
        metadata:
          $ref: '#/components/schemas/GenMetadataSchema'
        major_model_version:
          title: Major Model Version
          type: string
        status:
          default: complete
          maxLength: 24
          title: Status
          type: string
        created_at:
          format: date-time
          title: Created At
          type: string
        batch_size:
          default: 1
          title: Batch Size
          type: integer
      required:
        - id
        - metadata
        - major_model_version
        - created_at
      title: GenerationRequestSimpleSchema
      type: object
    GenConcatSpec:
      properties:
        clip_id:
          title: Clip Id
          type: string
        is_infill:
          type: [boolean, 'null']
          title: Is Infill
      required:
        - clip_id
      title: GenConcatSpec
      type: object
    UpsampleParamsSpec:
      properties:
        clip_id:
          title: Clip Id
          type: string
      required:
        - clip_id
      title: UpsampleParamsSpec
      type: object
    ExternalClipSchema:
      properties:
        id:
          format: uuid
          title: Id
          type: string
        video_url:
          type: [string, 'null']
          title: Video Url
        audio_url:
          type: [string, 'null']
          title: Audio Url
        image_url:
          type: [string, 'null']
          title: Image Url
        image_large_url:
          type: [string, 'null']
          title: Image Large Url
        created_at:
          type: [string, 'null']
          format: date-time
          title: Created At
        status:
          type: [string, 'null']
          title: Status
        title:
          type: [string, 'null']
          title: Title
        metadata:
          $ref: '#/components/schemas/ExternalGenMetadataSchema'
      required:
        - id
        - status
        - title
        - metadata
      title: ExternalClipSchema
      type: object
    ExternalGenMetadataSchema:
      description: Selected fields from GeneratedClip.metadata.
      properties:
        tags:
          type: [string, 'null']
          title: Tags
        prompt:
          type: [string, 'null']
          title: Prompt
        gpt_description_prompt:
          type: [string, 'null']
          title: Gpt Description Prompt
        type:
          default: gen
          title: Type
          type: string
        duration:
          type: [number, 'null']
          title: Duration
        error_type:
          type: [string, 'null']
          title: Error Type
        error_message:
          type: [string, 'null']
          title: Error Message
      title: ExternalGenMetadataSchema
      type: object
    ExternalGenerationSpec:
      properties:
        topic:
          title: Topic
          type: string
        tags:
          type: [string, 'null']
          title: Tags
        extra:
          type: [object, 'null']
          default: {}
          title: Extra
      required:
        - topic
      title: ExternalGenerationSpec
      type: object
    ExternalFilters:
      properties:
        page:
          default: 0
          title: Page
          type: integer
        ids:
          type: [string, 'null']
          title: Ids
      title: ExternalFilters
      type: object
    GenerationRequestSchema:
      properties:
        id:
          format: uuid
          title: Id
          type: string
        clips:
          items:
            $ref: '#/components/schemas/GeneratedClipSchema'
          title: Clips
          type: array
        metadata:
          $ref: '#/components/schemas/GenMetadataSchema'
        major_model_version:
          title: Major Model Version
          type: string
        status:
          default: complete
          maxLength: 24
          title: Status
          type: string
        created_at:
          format: date-time
          title: Created At
          type: string
        batch_size:
          default: 1
          title: Batch Size
          type: integer
      required:
        - id
        - clips
        - metadata
        - major_model_version
        - created_at
      title: GenerationRequestSchema
      type: object
    MiniProfileV2:
      type: object
      properties:
        type:
          type: [string, 'null']
          description: "Type of the profile, converted to enum in Swift"
        display_name:
          type: [string, 'null']
          description: "Display name of the profile"
        handle:
          type: [string, 'null']
          description: "Optional handle of the profile"
        avatar_image_url:
          type: [string, 'null']
          description: "Optional URL of the avatar image"
        is_following:
          type: boolean
          description: "Flag indicating if the current user is following this profile"
      required:
        - type
        - display_name
    NotificationItemV2:
      type: object
      properties:
        id:
          type: string
          description: "The ID of the notification."
        priority:
          type: integer
          description: "The priority of the notification."
        updated_at:
          type: [string, 'null']
          format: date-time
          description: "The timestamp of the notification."
        expires_at:
          type: [string, 'null']
          format: date-time
          description: "The timestamp of the notification that determines the expiration of the notification."
        is_read:
          type: boolean
          description: "Whether the notification has been read."
        notification_type:
          type: string
          description: "The type of this notification item."
        user_profiles:
          type: array
          items:
            $ref: '#/components/schemas/MiniProfileV2'
          description: "The profiles of the users that are mentioned in the notification."
        total_users:
          type: integer
          default: -1
          description: "The total number of users that are mentioned in the notification."
        content_id:
          type: [string, 'null']
          description: "The ID of the content that is mentioned in the notification."
        content_ancillary_id:
          type: [string, 'null']
          description: "The ancillary ID of the content (e.g., comment ID for comment mentions)."
        content_title:
          type: [string, 'null']
          description: "The title of the content that is mentioned in the notification."
        content_image_url:
          type: [string, 'null']
          description: "The image URL of the content that is mentioned in the notification."
        content_message:
          type: [string, 'null']
          description: "The message of the content that is mentioned in the notification."
        redirect_url:
          type: [string, 'null']
          description: "The URL to redirect to when the notification is clicked."
      required:
        - id
        - updatedAt
        - notificationType
    PlaylistTrashSpec:
      properties:
        playlist_id:
          title: Playlist Id
          type: string
        undo_trash:
          type: [boolean, 'null']
          default: false
          title: Undo Trash
      required:
        - playlist_id
      title: PlaylistTrashSpec
      type: object
    GenericModerationErrorSchema:
      properties:
        moderation_error_message:
          title: Moderation Error Message
          type: string
      required:
        - moderation_error_message
      title: GenericModerationErrorSchema
      type: object
    PlaylistUpdateMetadataSpec:
      properties:
        playlist_id:
          title: Playlist Id
          type: string
        name:
          title: Name
          type: string
        description:
          title: Description
          type: string
        image_url:
          type: [string, 'null']
          title: Image Url
      required:
        - playlist_id
        - name
        - description
      title: PlaylistUpdateMetadataSpec
      type: object
    PlaylistUpdateClipsSpec:
      properties:
        playlist_id:
          title: Playlist Id
          type: string
        update_type:
          title: Update Type
          type: string
        metadata:
          title: Metadata
      required:
        - playlist_id
        - update_type
        - metadata
      title: PlaylistUpdateClipsSpec
      type: object
    GeneratedClipSSRSchema:
      properties:
        id:
          format: uuid
          title: Id
          type: string
        video_url:
          type: [string, 'null']
          title: Video Url
        audio_url:
          type: [string, 'null']
          title: Audio Url
        image_url:
          type: [string, 'null']
          title: Image Url
        image_large_url:
          type: [string, 'null']
          title: Image Large Url
        is_video_pending:
          type: [boolean, 'null']
          title: Is Video Pending
        major_model_version:
          title: Major Model Version
          type: string
        model_name:
          title: Model Name
          type: string
        metadata:
          $ref: '#/components/schemas/GenMetadataSchema'
        reaction:
          $ref: '#/components/schemas/UserReaction'
        display_name:
          type: [string, 'null']
          title: Display Name
        handle:
          type: [string, 'null']
          title: Handle
        is_handle_updated:
          title: Is Handle Updated
          type: boolean
        is_pinned:
          title: Is Pinned
          type: boolean
        comment_count:
          title: Comment Count
          type: integer
        avatar_image_url:
          type: [string, 'null']
          title: Avatar Image Url
        user_id:
          type: [string, 'null']
          title: User Id
        created_at:
          format: date-time
          title: Created At
          type: string
        status:
          default: complete
          maxLength: 24
          title: Status
          type: string
        title:
          default: ''
          maxLength: 100
          title: Title
          type: string
        play_count:
          default: 0
          title: Play Count
          type: integer
        upvote_count:
          default: 0
          title: Upvote Count
          type: integer
        is_public:
          default: false
          title: Is Public
          type: boolean
        task:
          type: [string, 'null']
          title: Task
        history:
          type: array
          title: History
          items:
            title: Clip
            type: object
            properties:
              id:
                type: string
                format: uuid
                title: Id
              continue_at:
                type: number
                title: Continue At
            required:
              - id
      required:
        - id
        - video_url
        - audio_url
        - image_url
        - image_large_url
        - is_video_pending
        - major_model_version
        - model_name
        - metadata
        - display_name
        - handle
        - is_handle_updated
        - avatar_image_url
        - user_id
        - created_at
      title: GeneratedClipSSRSchema
      type: object
    GenLyricsRequestId:
      properties:
        id:
          title: Id
          type: string
      required:
        - id
      title: GenLyricsRequestId
      type: object
    GenLyricsSpec:
      properties:
        prompt:
          default: ''
          title: Prompt
          type: string
        gen_type:
          default: full
          title: Gen Type
          type: string
        tags:
          title: Tags
          type: string
        make_instrumental:
          default: false
          title: Make Instrumental
          type: boolean
      title: GenLyricsSpec
      type: object
    GenLyricsSchema:
      properties:
        text:
          title: Text
          type: string
        title:
          title: Title
          type: string
        status:
          title: Status
          type: string
        tags:
          items:
            type: string
          title: Tags
          type: array
        error_message:
          type: string
          title: Error Message
      required:
        - text
        - title
        - status
      title: GenLyricsSchema
      type: object
    GenParamsSpec:
      properties:
        prompt:
          title: Prompt
          type: string
        tags:
          type: [string, 'null']
          title: Tags
        title:
          default: ''
          title: Title
          type: string
        gpt_prompt:
          type: [string, 'null']
          title: Gpt Prompt
        gpt_description_prompt:
          type: [string, 'null']
          title: Gpt Description Prompt
        voice_id:
          type: [string, 'null']
          title: Voice Id
        voice:
          type: [string, 'null']
          title: Voice
        metadata:
          default: {}
          title: Metadata
        model_name:
          default: chirp-v1-xl
          title: Model Name
          type: string
        stream:
          default: false
          title: Stream
          type: boolean
        is_regenerate:
          default: false
          title: Is Regenerate
          type: boolean
        batch_size:
          default: 2
          title: Batch Size
          type: integer
        make_instrumental:
          default: false
          title: Make Instrumental
          type: boolean
        cover_clip_id:
          type: string
          title: Cover Clip Id
        continue_clip_id:
          type: string
          title: Continue Clip Id
        continue_at:
          type: number
          title: Continue At
        mv:
          type: string
          title: Mv
        infill_start_s:
          type: number
          title: Infill Start S
        infill_end_s:
          type: number
          title: Infill End S
        include_history:
          type: boolean
          title: Include History
        generation_type:
          default: TEXT
          enum:
            - TEXT
            - AUDIO
            - IMAGE
            - VIDEO
          title: Generation Type
          type: string
        user_uploaded_image_ids:
          anyOf:
            - items:
                type: string
              type: [array, 'null']
          title: User Uploaded Image Ids
        user_uploaded_images_b64:
          anyOf:
            - items:
                type: string
              type: [array, 'null']
          title: User Uploaded Images B64
        user_uploaded_video_id:
          title: User Uploaded Video Id
          type: string
        token:
          type: [string, 'null']
          title: Token
        task:
          enum:
            - extend
            - upload_extend
            - infill
            - infill_intro
            - infill_outro
            - artist_consistency
            - cover
            - image_to_song
            - video_to_song
            - concat
            - concat_infilling
            - upsample
            - twitter_to_song
          type: string
          title: Task
      required:
        - prompt
        - title
        - make_instrumental
      title: GenParamsSpec
      type: object
    TrashSpec:
      properties:
        clip_ids:
          items:
            type: string
          title: Clip Ids
          type: array
        trash:
          title: Trash
          type: boolean
      required:
        - clip_ids
        - trash
      title: TrashSpec
      type: object
    DeletedClipsSchema:
      properties:
        ids:
          items:
            type: string
          title: Ids
          type: array
      required:
        - ids
      title: DeletedClipsSchema
      type: object
    MergeAccountsSpec:
      properties:
        source_user_id:
          title: Source User Id
          type: integer
        target_user_id:
          title: Target User Id
          type: integer
      required:
        - source_user_id
        - target_user_id
      title: MergeAccountsSpec
      type: object
    ActionSpec:
      properties:
        action:
          title: Action
          type: string
      required:
        - action
      title: ActionSpec
      type: object
    DeleteAccountSpec:
      properties:
        confirm_delete:
          title: Confirm Delete
          type: string
      required:
        - confirm_delete
      title: DeleteAccountSpec
      type: object
    UpdateUserPhoneReq:
      properties:
        phone:
          title: Phone
          type: string
      required:
      - phone
      title: UpdateUserPhoneReq
      type: object
    FindExistingUserByPhoneResp:
      properties:
        user_profiles:
          default: []
          items:
            $ref: '#/components/schemas/UserMobileProfileSchema'
          title: User Profiles
          type: array
      required:
        - user_profiles
      title: FindExistingUserByPhoneResp
      type: object
    CreateSessionIdSchema:
      properties:
        session_id:
          format: uuid
          title: Session Id
          type: string
        session_length:
          title: Session Length
          type: integer
      required:
        - session_id
        - session_length
      title: CreateSessionIdSchema
      type: object
    CreateSessionIdSpec:
      properties:
        session_properties:
          title: Session Properties
          type: string
        session_type:
          $ref: '#/components/schemas/SessionType'
      required:
        - session_properties
        - session_type
      title: CreateSessionIdSpec
      type: object
    SessionType:
      const: 1
      enum:
        - 1
      title: SessionType
      type: integer
    RecordSessionIdSchema:
      properties:
        is_success:
          title: Is Success
          type: boolean
      required:
        - is_success
      title: RecordSessionIdSchema
      type: object
    RecordSessionIdSpec:
      properties:
        session_id:
          format: uuid
          title: Session Id
          type: string
        session_length:
          title: Session Length
          type: integer
        client_creation_time:
          format: date-time
          type: string
          title: Client Creation Time
        client_expire_time:
          format: date-time
          type: string
          title: Client Expire Time
      required:
        - session_id
        - session_length
      title: RecordSessionIdSpec
      type: object
    UserMobileProfileSchema:
      properties:
        phone:
          type: string
          title: Phone
        profile:
          $ref: '#/components/schemas/SimpleProfileInfoSchema'
      required:
        - phone
        - profile
      title: UserMobileProfileSchema
      type: object
    FindExistingUserByPhoneReq:
      properties:
        phones:
          default: []
          items:
            type: string
          title: Phones
          type: array
        not_following:
          default: true
          title: Not Following
          type: boolean
      required:
        - phones
      title: FindExistingUserByPhoneReq
      type: object
    SimilarClipsSpec:
      properties:
        id:
          title: Id
          type: string
        count:
          default: -1
          title: Count
          type: integer
        exact_match:
          default: false
          title: Exact Match
          type: boolean
      required:
        - id
      title: SimilarClipsSpec
      type: object
    SimilarClipsSchema:
      properties:
        similar_clips:
          items:
            $ref: '#/components/schemas/GeneratedClipSchema'
          title: Similar Clips
          type: array
      required:
        - similar_clips
      title: SimilarClipsSchema
      type: object
    ChildClipSchema:
      properties:
        parent_ids:
          items:
            type: string
          title: Parent Ids
          type: array
        clip:
          $ref: '#/components/schemas/GeneratedClipSchema'
        relationship:
          title: Relationship
          type: string
        extend_offset:
          title: Extend Offset
          type: number
        total_duration:
          title: Infill Offset
          type: number
        index:
          title: Index
          type: integer
      required:
        - parent_ids
        - clip
        - relationship
      title: ChildClipSchema
      type: object
    ChildClipsSchema:
      properties:
        child_clips:
          items:
            $ref: '#/components/schemas/ChildClipSchema'
          title: Child Clips
          type: array
        root_clips:
          items:
            $ref: '#/components/schemas/GeneratedClipSchema'
          title: Root Clips
          type: array
      required:
        - child_clips
        - root_clips
      title: ChildClipsSchema
      type: object
    RecommendStylesSchema:
      properties:
        recommend_styles:
          items:
            type: string
          title: Recommend Styles
          type: array
        random_styles:
          items:
            type: string
          title: Random Styles
          type: array
      title: RecommendStylesSchema
      type: object
    RecommendStylesSpec:
      properties:
        random_styles_counts:
          default: 0
          title: Random Styles Counts
          type: integer
        is_random:
          default: false
          title: Is Random
          type: boolean
        excluded_styles:
          items:
            type: string
          title: Excluded Styles
          type: array
      title: RecommendStylesSpec
      type: object
    MiniClipOrPlaylistSchema:
      properties:
        id:
          format: uuid
          title: Id
          type: string
        title:
          title: Title
          type: string
        image_url:
          type: [string, 'null']
          title: Image Url
      required:
        - id
        - title
        - image_url
      title: MiniClipOrPlaylistSchema
      type: object
    MiniProfileSchema:
      properties:
        display_name:
          title: Display Name
          type: string
        handle:
          title: Handle
          type: string
        avatar_image_url:
          type: [string, 'null']
          title: Avatar Image Url
        is_following:
          default: false
          title: Is Following
          type: boolean
      required:
        - display_name
        - handle
        - avatar_image_url
      title: MiniProfileSchema
      type: object
    NotificationAnnouncementSchema:
      properties:
        id:
          format: uuid
          title: Id
          type: string
        created_at:
          format: date-time
          title: Created At
          type: string
        is_read:
          default: false
          title: Is Read
          type: boolean
        notification_type:
          const: announcement
          default: announcement
          enum:
            - announcement
          title: Notification Type
          type: string
        message:
          title: Message
          type: string
        clip:
          $ref: '#/components/schemas/MiniClipOrPlaylistSchema'
      required:
        - id
        - created_at
        - message
      title: NotificationAnnouncementSchema
      type: object
    NotificationFollowSchema:
      properties:
        id:
          format: uuid
          title: Id
          type: string
        created_at:
          format: date-time
          title: Created At
          type: string
        is_read:
          default: false
          title: Is Read
          type: boolean
        notification_type:
          default: follow
          enum:
            - follow
            - unfollow
          title: Notification Type
          type: string
        user_profiles:
          items:
            $ref: '#/components/schemas/MiniProfileSchema'
          title: User Profiles
          type: array
        total_users:
          default: -1
          title: Total Users
          type: integer
      required:
        - id
        - created_at
        - user_profiles
      title: NotificationFollowSchema
      type: object
    NotificationReactSchema:
      properties:
        id:
          format: uuid
          title: Id
          type: string
        created_at:
          format: date-time
          title: Created At
          type: string
        is_read:
          default: false
          title: Is Read
          type: boolean
        notification_type:
          default: clip_like
          enum:
            - clip_like
            - clip_unlike
            - scene_like
            - scene_unlike
            - playlist_like
            - playlist_unlike
          title: Notification Type
          type: string
        user_profiles:
          items:
            $ref: '#/components/schemas/MiniProfileSchema'
          title: User Profiles
          type: array
        total_users:
          default: -1
          title: Total Users
          type: integer
        react_content:
          $ref: '#/components/schemas/MiniClipOrPlaylistSchema'
      required:
        - id
        - created_at
        - user_profiles
        - react_content
      title: NotificationReactSchema
      type: object
    UserNotificationV2Schema:
      properties:
        notified_at:
          format: date-time
          title: Notified At
          type: string
        notifications:
          items:
            $ref: '#/components/schemas/NotificationItemV2'
          title: Notifications
          type: array
      required:
        - notified_at
      title: UserNotificationV2Schema
      type: object
    UserNotificationSchema:
      properties:
        notified_at:
          format: date-time
          title: Notified At
          type: string
        notifications:
          default: []
          items:
            anyOf:
              - discriminator:
                  mapping:
                    announcement: '#/components/schemas/NotificationAnnouncementSchema'
                    clip_like: '#/components/schemas/NotificationReactSchema'
                    clip_unlike: '#/components/schemas/NotificationReactSchema'
                    follow: '#/components/schemas/NotificationFollowSchema'
                    playlist_like: '#/components/schemas/NotificationReactSchema'
                    playlist_unlike: '#/components/schemas/NotificationReactSchema'
                    scene_like: '#/components/schemas/NotificationReactSchema'
                    scene_unlike: '#/components/schemas/NotificationReactSchema'
                    unfollow: '#/components/schemas/NotificationFollowSchema'
                  propertyName: notification_type
                oneOf:
                  - $ref: '#/components/schemas/NotificationReactSchema'
                  - $ref: '#/components/schemas/NotificationFollowSchema'
                  - $ref: '#/components/schemas/NotificationAnnouncementSchema'
              - {}
          title: Notifications
          type: array
      required:
        - notified_at
      title: UserNotificationSchema
      type: object
    ReadNotificationsSpec:
      properties:
        ids:
          default: []
          items:
            type: string
          title: Ids
          type: array
        all:
          default: false
          title: All
          type: boolean
        before_datetime_utc:
          type: [string, 'null']
          format: date-time
          title: Before Datetime Utc
      title: ReadNotificationsSpec
      type: object
    ReadNotificationsSpecV2:
      properties:
        ids:
          default: []
          items:
            type: string
          title: Ids
          type: array
        all:
          default: false
          title: All
          type: boolean
        before_datetime_utc:
          type: [string, 'null']
          format: date-time
          title: Before Datetime Utc
        after_datetime_utc:
          type: [string, 'null']
          format: date-time
          title: After Datetime Utc
      title: ReadNotificationsSpec
      type: object
    SuppressNotificationsSpec:
      properties:
        ids:
          default: []
          items:
            type: string
          title: Ids
          type: array
      title: SuppressNotificationsSpec
      type: object
    PlaylistCreateSpec:
      properties:
        name:
          type: [string, 'null']
          title: Name
        description:
          type: [string, 'null']
          title: Description
        image_url:
          type: [string, 'null']
          title: Image Url
      title: PlaylistCreateSpec
      type: object
    PlaylistVisibilitySpec:
      properties:
        is_public:
          title: Is Public
          type: boolean
      required:
        - is_public
      title: PlaylistVisibilitySpec
      type: object
    UpdateArtistProfileSpec:
      properties:
        display_name:
          title: Display Name
          type: string
        handle:
          title: Handle
          type: string
        profile_description:
          title: Profile Description
          type: string
        avatar_image_url:
          type: [string, 'null']
          title: Avatar Image Url
      required:
        - display_name
        - handle
        - profile_description
      title: UpdateArtistProfileSpec
      type: object
    FollowArtistProfileSpec:
      properties:
        handle:
          title: Handle
          type: string
        unfollow:
          type: [boolean, 'null']
          title: Unfollow
      required:
        - handle
        - unfollow
      title: FollowArtistProfileSpec
      type: object
    FlagArtistProfileSpec:
      properties:
        handle:
          title: Handle
          type: string
        unflag:
          type: [boolean, 'null']
          title: Unflag
      required:
        - handle
        - unflag
      title: FlagArtistProfileSpec
      type: object
    FollowListResponse:
      properties:
        profiles:
          items:
            $ref: '#/components/schemas/SimpleProfileInfoSchema'
          title: Profiles
          type: array
      required:
        - profiles
    ProfileInfoSchema:
      properties:
        user_id:
          title: User Id
          type: string
        display_name:
          type: [string, 'null']
          title: Display Name
        handle:
          type: [string, 'null']
          title: Handle
        profile_description:
          type: [string, 'null']
          title: Profile Description
        clips:
          items:
            $ref: '#/components/schemas/GeneratedClipSchema'
          title: Clips
          type: array
        stats:
          $ref: '#/components/schemas/ProfileStatsSchema'
        is_flagged:
          title: Is Flagged
          type: boolean
        is_following:
          title: Is Following
          type: boolean
        num_total_clips:
          title: Num Total Clips
          type: integer
        current_page:
          title: Current Page
          type: integer
        playlists:
          items:
            $ref: '#/components/schemas/PlaylistMetadataSchema'
          title: Playlists
          type: array
        avatar_image_url:
          type: [string, 'null']
          title: Avatar Image Url
      required:
        - user_id
        - display_name
        - handle
        - profile_description
        - clips
        - stats
        - is_flagged
        - is_following
        - num_total_clips
        - current_page
        - playlists
        - avatar_image_url
      title: ProfileInfoSchema
      type: object
    ProfileStatsSchema:
      properties:
        play_count__sum:
          type: [integer, 'null']
          title: Play Count  Sum
        upvote_count__sum:
          type: [integer, 'null']
          title: Upvote Count  Sum
        followers_count:
          type: [integer, 'null']
          title: Followers Count
        following_count:
          type: [integer, 'null']
          title: Followers Count
        last_login:
          type: [string, 'null']
          title: Last Login
      required:
        - play_count__sum
        - upvote_count__sum
        - followers_count
        - following_count
      title: ProfileStatsSchema
      type: object
    MobileExploreSectionSchema:
      properties:
        playlist_id:
          title: Playlist Id
          type: string
        name:
          title: Name
          type: string
        description:
          default: ''
          title: Description
          type: string
      required:
        - playlist_id
        - name
      title: MobileExploreSectionSchema
      type: object
    MobileExploreSectionsSchema:
      properties:
        sections:
          items:
            $ref: '#/components/schemas/MobileExploreSectionSchema'
          title: Sections
          type: array
      required:
        - sections
      title: MobileExploreSectionsSchema
      type: object
    MobileDiscoverSchema:
      properties:
        sections:
          items:
            anyOf:
              - discriminator:
                  mapping:
                    playlist: '#/components/schemas/PlaylistSectionSchema'
                    playlist_list: '#/components/schemas/PlaylistListSectionSchema'
                    style_list: '#/components/schemas/StyleListSectionSchema'
                  propertyName: section_type
                oneOf:
                  - $ref: '#/components/schemas/PlaylistSectionSchema'
                  - $ref: '#/components/schemas/PlaylistListSectionSchema'
                  - $ref: '#/components/schemas/StyleListSectionSchema'
              - {}
          title: Sections
          type: array
        page:
          title: Page
          type: integer
      required:
        - sections
        - page
      title: MobileDiscoverSchema
      type: object
    AuraColorSet:
      enum:
        - 1
        - 2
        - 3
        - 4
        - 5
        - 6
        - 7
        - 8
        - 9
        - 10
        - 11
      title: AuraColorSet
      type: integer
    AuraSettings:
      properties:
        color_set:
          $ref: '#/components/schemas/AuraColorSet'
        style:
          $ref: '#/components/schemas/AuraStyle'
        mask_style:
          $ref: '#/components/schemas/MaskStyle'
        text_placement:
          $ref: '#/components/schemas/TextPlacement'
        frame_shape:
          $ref: '#/components/schemas/FrameShape'
        overlay_color:
          $ref: '#/components/schemas/OverlayColor'
      required:
        - color_set
        - style
        - mask_style
        - text_placement
        - frame_shape
        - overlay_color
      title: AuraSettings
      type: object
    AuraStyle:
      enum:
        - 1
        - 2
        - 3
        - 4
        - 5
        - 6
        - 7
        - 8
        - 9
        - 10
        - 11
        - 12
        - 13
        - 14
      title: AuraStyle
      type: integer
    DiscoverResp:
      properties:
        sections:
          default: []
          items:
            anyOf:
              - discriminator:
                  mapping:
                    playlist: '#/components/schemas/PlaylistSectionSchema'
                    playlist_list: '#/components/schemas/PlaylistListSectionSchema'
                    style_list: '#/components/schemas/StyleListSectionSchema'
                    user_list: '#/components/schemas/UserListSectionSchema'
                  propertyName: section_type
                oneOf:
                  - $ref: '#/components/schemas/PlaylistSectionSchema'
                  - $ref: '#/components/schemas/PlaylistListSectionSchema'
                  - $ref: '#/components/schemas/StyleListSectionSchema'
                  - $ref: '#/components/schemas/UserListSectionSchema'
              - {}
          title: Sections
          type: array
        page:
          title: Page
          type: integer
        total_sections:
          title: Total Sections
          type: integer
        page_size:
          title: Page Size
          type: integer
        start_index:
          title: Start Index
          type: integer
      required:
        - page
        - total_sections
        - page_size
        - start_index
      title: DiscoverResp
      type: object
    FrameShape:
      enum:
        - 1
        - 2
      title: FrameShape
      type: integer
    MaskStyle:
      enum:
        - 1
        - 2
        - 3
        - 4
      title: MaskStyle
      type: integer
    OverlayColor:
      enum:
        - 0
        - 1
        - 2
        - 3
        - 4
        - 5
        - 6
        - 7
        - 8
        - 9
        - 10
        - 11
        - 12
        - 13
        - 14
        - 15
        - 16
        - 17
        - 18
      title: OverlayColor
      type: integer
    PlaylistItemSchema:
      properties:
        id:
          anyOf:
            - format: uuid
              type: string
            - type: string
          title: Id
        playlist_clips:
          items:
            $ref: '#/components/schemas/PlaylistClipSchema'
          title: Playlist Clips
          type: array
        image_url:
          type: [string, 'null']
          title: Image Url
        num_total_results:
          title: Num Total Results
          type: integer
        current_page:
          title: Current Page
          type: integer
        is_owned:
          default: false
          title: Is Owned
          type: boolean
        is_trashed:
          title: Is Trashed
          type: boolean
        is_public:
          title: Is Public
          type: boolean
        user_display_name:
          type: [string, 'null']
          title: User Display Name
        user_handle:
          type: [string, 'null']
          title: User Handle
        user_avatar_image_url:
          type: [string, 'null']
          title: User Avatar Image Url
        reaction:
          type: [string, 'null']
          default: ''
          title: Reaction
        upvote_count:
          type: [integer, 'null']
          default: 0
          title: Upvote Count
        dislike_count:
          type: [integer, 'null']
          default: 0
          title: Dislike Count
        flag_count:
          type: [integer, 'null']
          default: 0
          title: Flag Count
        skip_count:
          type: [integer, 'null']
          default: 0
          title: Skip Count
        play_count:
          type: [integer, 'null']
          default: 0
          title: Play Count
        name:
          default: ''
          maxLength: 100
          title: Name
          type: string
        description:
          default: ''
          title: Description
          type: string
        is_discover_playlist:
          type: [boolean, 'null']
          title: Is Discover Playlist
        aura_settings:
          $ref: '#/components/schemas/AuraSettings'
        task:
          type: [string, 'null']
          title: Task
      required:
        - id
        - playlist_clips
        - num_total_results
        - current_page
        - is_trashed
        - is_public
        - user_display_name
        - user_handle
        - user_avatar_image_url
      title: PlaylistItemSchema
      type: object
    PlaylistListSectionSchema:
      properties:
        title:
          title: Title
          type: string
        id:
          title: Id
          type: string
        description:
          type: [string, 'null']
          title: Description
        link:
          type: [string, 'null']
          title: Link
        options:
          anyOf:
            - items:
                type: string
              type: [array, 'null']
          title: Options
        selected_option:
          type: [string, 'null']
          title: Selected Option
        secondary_options:
          anyOf:
            - items:
                type: string
              type: [array, 'null']
          title: Secondary Options
        secondary_selected_option:
          type: [string, 'null']
          title: Secondary Selected Option
        section_name:
          type: [string, 'null']
          title: Section Name
        section_type:
          const: playlist_list
          default: playlist_list
          enum:
            - playlist_list
          title: Section Type
          type: string
        items:
          items:
            $ref: '#/components/schemas/PlaylistItemSchema'
          title: Items
          type: array
      required:
        - title
        - id
        - items
      title: PlaylistListSectionSchema
      type: object
    PlaylistSectionSchema:
      properties:
        title:
          title: Title
          type: string
        id:
          title: Id
          type: string
        description:
          type: [string, 'null']
          title: Description
        link:
          type: [string, 'null']
          title: Link
        options:
          anyOf:
            - items:
                type: string
              type: [array, 'null']
          title: Options
        selected_option:
          type: [string, 'null']
          title: Selected Option
        secondary_options:
          anyOf:
            - items:
                type: string
              type: [array, 'null']
          title: Secondary Options
        secondary_selected_option:
          type: [string, 'null']
          title: Secondary Selected Option
        section_name:
          type: [string, 'null']
          title: Section Name
        section_type:
          const: playlist
          default: playlist
          enum:
            - playlist
          title: Section Type
          type: string
        style_type:
          default: normal
          enum:
            - normal
            - contest
          title: Style Type
          type: string
        items:
          items:
            $ref: '#/components/schemas/GeneratedClipSchema'
          title: Items
          type: array
        preview_items_count:
          default: 2
          title: Preview Items Count
          type: integer
      required:
        - title
        - id
        - items
      title: PlaylistSectionSchema
      type: object
    StyleItemSchema:
      properties:
        id:
          title: Id
          type: string
        name:
          title: Name
          type: string
        image_url:
          title: Image Url
          type: string
        aura_settings:
          $ref: '#/components/schemas/AuraSettings'
        redirect_url:
          type: [string, 'null']
          title: Redirect Url
      required:
        - id
        - name
        - image_url
      title: StyleItemSchema
      type: object
    StyleListSectionSchema:
      properties:
        title:
          title: Title
          type: string
        id:
          title: Id
          type: string
        description:
          type: [string, 'null']
          title: Description
        link:
          type: [string, 'null']
          title: Link
        options:
          anyOf:
            - items:
                type: string
              type: [array, 'null']
          title: Options
        selected_option:
          type: [string, 'null']
          title: Selected Option
        secondary_options:
          anyOf:
            - items:
                type: string
              type: [array, 'null']
          title: Secondary Options
        secondary_selected_option:
          type: [string, 'null']
          title: Secondary Selected Option
        section_name:
          type: [string, 'null']
          title: Section Name
        section_type:
          const: style_list
          default: style_list
          enum:
            - style_list
          title: Section Type
          type: string
        items:
          items:
            $ref: '#/components/schemas/StyleItemSchema'
          title: Items
          type: array
      required:
        - title
        - id
        - items
      title: StyleListSectionSchema
      type: object
    TextPlacement:
      enum:
        - 1
        - 2
        - 3
      title: TextPlacement
      type: integer
    UserListSectionSchema:
      properties:
        title:
          title: Title
          type: string
        id:
          title: Id
          type: string
        description:
          type: [string, 'null']
          title: Description
        link:
          type: [string, 'null']
          title: Link
        options:
          anyOf:
            - items:
                type: string
              type: [array, 'null']
          title: Options
        selected_option:
          type: [string, 'null']
          title: Selected Option
        secondary_options:
          anyOf:
            - items:
                type: string
              type: [array, 'null']
          title: Secondary Options
        secondary_selected_option:
          type: [string, 'null']
          title: Secondary Selected Option
        section_name:
          type: [string, 'null']
          title: Section Name
        section_type:
          const: user_list
          default: user_list
          enum:
            - user_list
          title: Section Type
          type: string
        items:
          items:
            $ref: '#/components/schemas/SimpleProfileInfoSchema'
          title: Items
          type: array
      required:
        - title
        - id
        - items
      title: UserListSectionSchema
      type: object
    DiscoverReq:
      description: >-
        DiscoverReq is a schema for the request body of the discover endpoint.

        The schema is used to get the sections for the mobile/web homepage.

        You specify the start index and the page size to get the sections.

        If you need to get a specific section, then you set section_name which
        is the name of the section.

        and set start_index to 0 and page_size to 1.
      properties:
        language:
          default: en
          title: Language
          type: string
        start_index:
          default: 0
          title: Start Index
          type: integer
        page_size:
          default: 3
          title: Page Size
          type: integer
        section_name:
          type: [string, 'null']
          title: Section Name
        section_content:
          type: [string, 'null']
          title: Section Content
        secondary_section_content:
          type: [string, 'null']
          title: Secondary Section Content
        page:
          default: 0
          title: Page
          type: integer
        platform:
          default: web
          enum:
            - mobile
            - web
          title: Platform
          type: string
      title: DiscoverReq
      type: object
    RegisterPushSpec:
      properties:
        token:
          title: Token
          type: string
      required:
        - token
      title: RegisterPushSpec
      type: object
    ListenHistoryResponse:
      properties:
        history:
          items:
            $ref: '#/components/schemas/ListenHistorySchema'
          title: History
          type: array
        next_cursor:
          type: [string, 'null']
          title: Next Cursor
      required:
        - history
      title: ListenHistoryResponse
      type: object
    ListenHistorySchema:
      properties:
        content:
          anyOf:
            - $ref: '#/components/schemas/GeneratedClipSchema'
            - $ref: '#/components/schemas/PlaylistSchema'
          title: Content
        listened_at:
          format: date-time
          title: Listened At
          type: string
      required:
        - content
        - listened_at
      title: ListenHistorySchema
      type: object
    BaseSearchResult:
      description: The BaseSearchResult is the interface for the search result
      properties:
        total_hits:
          default: 0
          title: Total Hits
          type: integer
        result:
          items:
            anyOf:
              - $ref: '#/components/schemas/GeneratedClipSchema'
              - $ref: '#/components/schemas/PlaylistSchema'
              - $ref: '#/components/schemas/SimpleProfileInfoSchema'
          title: Result
          type: array
        from_index:
          default: 0
          title: From Index
          type: integer
        page_size:
          default: 0
          title: Page Size
          type: integer
      required:
        - result
      title: BaseSearchResult
      type: object
    SearchResult:
      description: |-
        The Search result class returns the search result, which is a key val
        pair that key is the plan name and the search result is the value
      properties:
        result:
          additionalProperties:
            $ref: '#/components/schemas/BaseSearchResult'
          title: Result
          type: object
      required:
        - result
      title: SearchResult
      type: object
    ItemTypeEnum:
      enum:
        - clip
        - playlist
      title: ItemTypeEnum
      type: string
    SearchOrderEnum:
      enum:
        - asc
        - desc
      title: SearchOrderEnum
      type: string
    SearchQuerySchema:
      properties:
        name:
          default: ''
          title: Name
          type: string
        search_type:
          $ref: '#/components/schemas/SearchTypeEnum'
        item_type:
          allOf:
            - $ref: '#/components/schemas/ItemTypeEnum'
          default: clip
        term:
          default: ''
          title: Term
          type: string
        user_id:
          type: [integer, 'null']
          title: User Id
        is_public:
          type: [boolean, 'null']
          title: Is Public
        is_liked:
          type: [boolean, 'null']
          title: Is Liked
        rank_by:
          $ref: '#/components/schemas/SearchRankingEnum'
        order:
          $ref: '#/components/schemas/SearchOrderEnum'
        user_ids:
          default: []
          items:
            type: integer
          title: User Ids
          type: array
        from_index:
          default: 0
          title: From Index
          type: integer
        size:
          default: 20
          title: Size
          type: integer
      required:
        - search_type
      title: SearchQuerySchema
      type: object
    SearchRankingEnum:
      enum:
        - upvote_count
        - play_count
        - dislike_count
        - trending
        - most_recent
        - most_relevant
        - by_day
        - by_week
        - by_month
        - all_time
        - default
      title: SearchRankingEnum
      type: string
    SearchRequest:
      properties:
        search_queries:
          items:
            $ref: '#/components/schemas/SearchQuerySchema'
          title: Search Queries
          type: array
      title: SearchRequest
      type: object
    SearchTypeEnum:
      enum:
        - public_song
        - library_song
        - tag_song
        - playlist
        - following_clip_feed
        - user
      title: SearchTypeEnum
      type: string
    UploadRequestSchema:
      properties:
        id:
          title: Id
          type: string
        url:
          title: Url
          type: string
        fields:
          title: Fields
          type: object
      required:
        - id
        - url
        - fields
      title: UploadRequestSchema
      type: object
    UploadRequestSpec:
      properties:
        extension:
          type: [string, 'null']
          default: mp3
          title: Extension
      title: UploadRequestSpec
      type: object
    FinishUploadSpec:
      properties:
        upload_type:
          title: Upload Type
          type: string
        upload_filename:
          title: Upload Filename
          type: string
      required:
        - upload_type
        - upload_filename
      title: FinishUploadSpec
      type: object
    UploadRequestStatusSchema:
      properties:
        id:
          title: Id
          type: string
        status:
          title: Status
          type: string
        error_message:
          type: [string, 'null']
          title: Error Message
        s3_id:
          type: [string, 'null']
          title: S3 Id
        title:
          type: [string, 'null']
          title: Title
        image_url:
          type: [string, 'null']
          title: Image Url
      required:
        - id
        - status
      title: UploadRequestStatusSchema
      type: object
    UploadCallbackSpec:
      properties:
        request_id:
          title: Request Id
          type: string
        id:
          title: Id
          type: string
        type:
          title: Type
          type: string
        s3_id:
          type: [string, 'null']
          title: S3 Id
        image_s3:
          type: [string, 'null']
          title: Image S3
        title:
          type: [string, 'null']
          title: Title
        duration:
          type: [number, 'null']
          title: Duration
        error_type:
          type: [string, 'null']
          title: Error Type
        error_message:
          type: [string, 'null']
          title: Error Message
        has_vocal:
          default: false
          title: Has Vocal
          type: boolean
        ok:
          type: [integer, 'null']
          title: Ok
        status:
          type: [string, 'null']
          title: Status
      required:
        - request_id
        - id
        - type
      title: UploadCallbackSpec
      type: object
    UploadClipSchema:
      properties:
        clip_id:
          type: [string, 'null']
          title: Clip Id
      title: UploadClipSchema
      type: object
    VideoOutputSpec:
      properties:
        audio_id:
          title: Audio Id
          type: string
        image_s3_id:
          type: [string, 'null']
          title: Image S3 Id
        title:
          type: [string, 'null']
          title: Title
        description:
          type: [string, 'null']
          title: Description
        duration:
          default: 30
          title: Duration
          type: number
        visibility:
          allOf:
            - $ref: '#/components/schemas/Visibility'
          default: private
      required:
        - audio_id
      title: VideoOutputSpec
      type: object
    Visibility:
      enum:
        - private
        - link-only
        - public
      title: Visibility
      type: string
    InviteSchema:
      properties:
        potential_reward:
          default: false
          title: Potential Reward
          type: boolean
        potential_reward_amount:
          default: 0
          title: Potential Reward Amount
          type: integer
        error_msg:
          type: [string, 'null']
          title: Error Msg
      title: InviteSchema
      type: object
    InviteSpec:
      properties:
        inviter_handle:
          title: Inviter Handle
          type: string
      required:
        - inviter_handle
      title: InviteSpec
      type: object
    InviteHistorySchema:
      properties:
        monthly_referral_limit:
          default: 5
          title: Monthly Referral Limit
          type: integer
        referral_count_current_month:
          default: 0
          title: Referral Count Current Month
          type: integer
        total_reward_current_month:
          default: 0
          title: Total Reward Current Month
          type: integer
        profiles:
          default: []
          items:
            $ref: '#/components/schemas/SimpleProfileInfoSchema'
          title: Profiles
          type: array
      title: InviteHistorySchema
      type: object
    SimpleProfileStatsSchema:
      properties:
        followers_count:
          default: 0
          title: Followers Count
          type: integer
        likes_count:
          default: 0
          title: Likes Count
          type: integer
        clips_count:
          default: 0
          title: Clips Count
          type: integer
        last_login:
          default: ''
          title: Last Login
          type: string
      title: SimpleProfileStatsSchema
      type: object
    SimpleProfileInfoSchema:
      properties:
        user_id:
          title: User Id
          type: integer
        display_name:
          type: [string, 'null']
          default: ''
          title: Display Name
        handle:
          type: [string, 'null']
          default: ''
          title: Handle
        avatar_image_url:
          type: [string, 'null']
          default: ''
          title: Avatar Image Url
        is_following:
          default: false
          title: Is Following
          type: boolean
        stats:
          $ref: '#/components/schemas/SimpleProfileStatsSchema'
      required:
        - user_id
        - stats
      title: SimpleProfileInfoSchema
      type: object
    FeedTypeEnum:
      const: default
      enum:
        - default
      title: FeedTypeEnum
      type: string
    FollowingFeedResponse:
      properties:
        feed_type:
          $ref: '#/components/schemas/FeedTypeEnum'
        item_type:
          $ref: '#/components/schemas/ItemTypeEnum'
        user_handle:
          default: ''
          title: User Handle
          type: string
        items:
          default: []
          items:
            $ref: '#/components/schemas/GeneratedClipSchema'
          title: Items
          type: array
        start_index:
          default: 0
          title: Start Index
          type: integer
        page_size:
          default: 0
          title: Page Size
          type: integer
      required:
        - feed_type
        - item_type
      title: FollowingFeedResponse
      type: object
    FollowingFeedRequest:
      properties:
        feed_type:
          $ref: ['#/components/schemas/FeedTypeEnum', 'null']
          default: default
        item_type:
          $ref: ['#/components/schemas/ItemTypeEnum', 'null']
          default: clip
        start_index:
          type: [integer, 'null']
          default: 0
          title: Start Index
        page_size:
          type: [integer, 'null']
          default: 20
          title: Page Size
      title: FollowingFeedRequest
      type: object
    RecommendUser:
      properties:
        user:
          $ref: '#/components/schemas/SimpleProfileInfoSchema'
        reason:
          enum:
            - popular
            - following_you
            - you_might_know
            - from_your_contacts
          title: Reason
          type: string
      required:
        - user
        - reason
      title: RecommendUser
      type: object
    RecommendUserResp:
      properties:
        result:
          items:
            $ref: '#/components/schemas/RecommendUser'
          title: Result
          type: array
      required:
        - result
      title: RecommendUserResp
      type: object
    RecommendUserReq:
      properties:
        phones:
          default: []
          items:
            type: string
          title: Phones
          type: array
      required:
        - phones
      title: RecommendUserReq
      type: object
    AppVersionUpdateResponse:
      properties:
        app_name:
          title: App Name
          type: string
        platform:
          title: Platform
          type: string
        version:
          type: [string, 'null']
          title: Version
        latest_version:
          type: [string, 'null']
          title: Latest Version
        warn_version:
          type: [string, 'null']
          title: Warn Version
        force_version:
          type: [string, 'null']
          title: Force Version
      title: AppVersionUpdateResponse
      type: object
    AppVersionUpdateRequest:
      properties:
        app_name:
          title: App Name
          type: string
        platform:
          title: Platform
          type: string
        current_version:
          default: ''
          title: Current Version
          type: string
      required:
        - app_name
        - platform
      title: AppVersionUpdateRequest
      type: object
    FeedSchema:
      properties:
        clips:
          items:
            $ref: '#/components/schemas/GeneratedClipSchema'
          title: Clips
          type: array
        num_total_results:
          title: Num Total Results
          type: integer
        current_page:
          title: Current Page
          type: integer
      required:
        - clips
        - num_total_results
        - current_page
      title: FeedSchema
      type: object
    AlignedLyric:
      properties:
        word:
          title: Word
          type: string
        success:
          title: Success
          type: boolean
        start_s:
          title: Starts at (in seconds)
          type: number
        end_s:
          title: Ends at (in seconds)
          type: number
        p_align:
          title: p_align
          type: number
      title: AlignedLyric
      type: object
    PinnedClipsContainer:
      properties:
        pinned_clips:
          items:
            $ref: '#/components/schemas/GeneratedClipSchema'
          title: Array of pinned clips
          type: array
      title: PinnedClipsContainer
      type: object
    AlignedLyricsSchema:
      properties:
        data:
          items:
            anyOf:
              - $ref: '#/components/schemas/AlignedLyric'
          title: Data
          type: array
      required:
        - data
      title: AlignedLyricsSchema
      type: object
    AlignedLyricsV2Schema:
      properties:
        aligned_words:
          items:
            $ref: '#/components/schemas/AlignedWordSchema'
          title: Aligned Words
          type: array
        is_streamed:
          title: Is Streamed
          type: boolean
        waveform_data:
          type: array
          items:
            type: number
          title: Waveform Data
        aligned_lyrics:
          type: [array, 'null']
          items:
            $ref: '#/components/schemas/AlignedLyricSchema'
          title: Aligned Lyrics
      required:
        - aligned_words
        - is_streamed
      title: AlignedLyricsV2Schema
      type: object
    AlignedLyricSchema:
      properties:
        text:
          title: Text
          type: string
        start_s:
          title: Start S
          type: number
        end_s:
          title: End S
          type: number
        section:
          title: Section
          type: string
        words:
          title: Words
          type: array
          items:
            $ref: '#/components/schemas/WordOutputSchema'
      required:
        - text
        - start_s
        - end_s
        - section
        - words
      title: AlignedLyricSchema
      type: object
    WordOutputSchema:
      properties:
        text:
          title: Text
          type: string
        start_s:
          title: Start S
          type: number
        end_s:
          title: End S
          type: number
      required:
        - text
        - start_s
        - end_s
      title: WordOutputSchema
      type: object
    AlignedWordSchema:
      properties:
        word:
          title: Word
          type: string
        success:
          title: Success
          type: boolean
        start_s:
          title: Start S
          type: number
        end_s:
          title: End S
          type: number
        p_align:
          title: P Align
          type: number
      required:
        - word
        - success
        - start_s
        - end_s
        - p_align
      title: AlignedWordSchema
      type: object
    IosInviterDataResponse:
      properties:
        handle:
          title: Handle
          type: string
        avatar_image_url:
          title: Avatar Image Url
          type: string
        error_msg:
          title: Error Msg
          type: string
      title: IosInviterDataResponse
      type: object
    PromoCodeStatusResponse:
      properties:
        promo_code_url:
          title: Promo Code Url
          type: string
        redemptions_left:
          title: Redemptions Left
          type: integer
        inviter_handle:
          title: Inviter Handle
          type: string
        error_msg:
          title: Error Msg
          type: string
      title: PromoCodeStatusResponse
      type: object
    IosInviteDataResponse:
      properties:
        can_log_in_to_ios:
          title: Can Log In To iOS
          type: boolean
        promo_code_url:
          title: Promo Code Url
          type: string
        redemptions_left:
          title: Redemptions Left
          type: integer
        inviter_handle:
          title: Inviter Handle
          type: string
        error_msg:
          title: Error Msg
          type: string
      required:
        - can_log_in_to_ios
      title: IosInviteDataResponse
      type: object
    UsePromoCodeResponse:
      properties:
        promo_code:
          title: Promo Code
          type: string
        promo_code_url:
          title: Promo code Url
          type: string
        error_msg:
          title: Error Msg
          type: string
      title: UsePromoCodeResponse
      type: object
    UsePromoCodeRequest:
      properties:
        promo_code:
          title: Promo Code
          type: string
      required:
        - promo_code
      title: UsePromoCodeRequest
      type: object
    IosWaitlistResponse:
      properties:
        is_waitlisted:
          title: Is Waitlisted
          type: boolean
      required:
        - is_waitlisted
      title: IosWaitlistResponse
      type: object
    UserAnalyticsResponse:
      properties:
        has_created_song:
          title: Has created song
          type: boolean
      required:
        - has_created_song
      title: UserAnalyticsResponse
      type: object
  securitySchemes:
    AuthBearer:
      type: http
      scheme: bearer
servers: []
