openapi: 3.0.1
info:
  title: API
  description: Audius V1 API
  version: "1.0"
servers:
- url: /v1
tags:
- name: users
  description: User related operations
- name: playlists
  description: Playlist related operations
- name: tracks
  description: Track related operations
- name: challenges
  description: Challenge related operations
- name: tips
  description: Tip related operations
- name: developer_apps
  description: Developer app related operations
- name: dashboard_wallet_users
  description: Protocol dashboard wallet users related operations
- name: resolve
  description: Audius Cannonical URL resolver
- name: comments
  description: Comment related operations
- name: events
  description: Events related operations
- name: explore
  description: Explore related operations
- name: rewards
  description: Rewards related operations
paths:
  /challenges/undisbursed:
    get:
      tags:
      - challenges
      description: Get all undisbursed challenges
      operationId: Get Undisbursed Challenges
      parameters:
      - name: offset
        in: query
        description: The number of items to skip. Useful for pagination (page number
          * limit)
        schema:
          type: integer
      - name: limit
        in: query
        description: The number of items to fetch
        schema:
          type: integer
      - name: user_id
        in: query
        description: A User ID to filter the undisbursed challenges to a particular
          user
        schema:
          type: string
      - name: completed_blocknumber
        in: query
        description: Starting blocknumber to retrieve completed undisbursed challenges
        schema:
          type: integer
      - name: challenge_id
        in: query
        description: A challenge ID to filter the undisbursed challenges to a particular
          challenge
        schema:
          type: string
      responses:
        "200":
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/undisbursed_challenges'
        "400":
          description: Bad request
          content: {}
        "500":
          description: Server error
          content: {}
  /challenges/undisbursed/{user_id}:
    get:
      tags:
      - challenges
      description: Get all undisbursed challenges for a user
      operationId: Get Undisbursed Challenges For User
      parameters:
      - name: user_id
        in: path
        description: A User ID to filter the undisbursed challenges to a particular
          user
        required: true
        schema:
          type: string
      - name: offset
        in: query
        description: The number of items to skip. Useful for pagination (page number
          * limit)
        schema:
          type: integer
      - name: limit
        in: query
        description: The number of items to fetch
        schema:
          type: integer
      - name: completed_blocknumber
        in: query
        description: Starting blocknumber to retrieve completed undisbursed challenges
        schema:
          type: integer
      - name: challenge_id
        in: query
        description: A challenge ID to filter the undisbursed challenges to a particular
          challenge
        schema:
          type: string
      responses:
        "200":
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/undisbursed_challenges'
        "400":
          description: Bad request
          content: {}
        "500":
          description: Server error
          content: {}
  /comments/unclaimed_id:
    get:
      tags:
      - comments
      description: Gets an unclaimed blockchain comment ID
      operationId: Get unclaimed comment ID
      responses:
        "200":
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/unclaimed_id_response'
        "500":
          description: Server error
          content: {}
  /comments/{comment_id}:
    get:
      tags:
      - comments
      description: Gets a comment by ID
      operationId: Get Comment
      parameters:
      - name: comment_id
        in: path
        description: A Comment ID
        required: true
        schema:
          type: string
      responses:
        "200":
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/comment_response'
        "500":
          description: Server error
          content: {}
  /comments/{comment_id}/replies:
    get:
      tags:
      - comments
      description: Gets replies to a parent comment
      operationId: Get Comment Replies
      parameters:
      - name: comment_id
        in: path
        description: A Comment ID
        required: true
        schema:
          type: string
      - name: offset
        in: query
        description: The number of items to skip. Useful for pagination (page number
          * limit)
        schema:
          type: integer
      - name: limit
        in: query
        description: The number of items to fetch
        schema:
          type: integer
      - name: user_id
        in: query
        description: The user ID of the user making the request
        schema:
          type: string
      responses:
        "200":
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/comment_replies_response'
        "400":
          description: Bad request
          content: {}
        "500":
          description: Server error
          content: {}
  /dashboard_wallet_users:
    get:
      tags:
      - dashboard_wallet_users
      description: Gets Audius user profiles connected to given dashboard wallet addresses
      operationId: Bulk get dashboard wallet users
      parameters:
      - name: wallets
        in: query
        description: The wallets for which to fetch connected Audius user profiles.
        required: true
        style: form
        explode: false
        schema:
          type: array
          items:
            type: string
      responses:
        "200":
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/dashboard_wallet_users_response'
        "400":
          description: Bad request
          content: {}
        "404":
          description: No such dashboard wallets
          content: {}
        "500":
          description: Server error
          content: {}
  /developer_apps/{address}:
    get:
      tags:
      - developer_apps
      description: Gets developer app matching given address (API key)
      operationId: Get Developer App
      parameters:
      - name: address
        in: path
        description: A developer app address (API Key)
        required: true
        schema:
          type: string
      responses:
        "200":
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/developer_app_response'
        "400":
          description: Bad request
          content: {}
        "404":
          description: Not found
          content: {}
        "500":
          description: Server error
          content: {}
  /events:
    get:
      tags:
      - events
      description: Get a list of events by ID
      operationId: Get Bulk Events
      parameters:
      - name: user_id
        in: query
        description: The user ID of the user making the request
        schema:
          type: string
      - name: id
        in: query
        description: The ID of the event(s) to retrieve
        style: form
        explode: true
        schema:
          type: array
          items:
            type: string
      - name: event_type
        in: query
        description: The type of event to filter by
        schema:
          type: string
          enum:
          - remix_contest
          - live_event
          - new_release
      responses:
        "200":
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/events_response'
        "400":
          description: Bad request
          content: {}
        "500":
          description: Server error
          content: {}
  /events/all:
    get:
      tags:
      - events
      summary: Get all events
      description: Get all events
      operationId: Get All Events
      parameters:
      - name: offset
        in: query
        description: The number of items to skip. Useful for pagination (page number
          * limit)
        schema:
          type: integer
      - name: limit
        in: query
        description: The number of items to fetch
        schema:
          type: integer
      - name: user_id
        in: query
        description: The user ID of the user making the request
        schema:
          type: string
      - name: sort_method
        in: query
        description: The sort method
        schema:
          type: string
          default: newest
          enum:
          - newest
          - timestamp
      - name: event_type
        in: query
        description: The type of event to filter by
        schema:
          type: string
          enum:
          - remix_contest
          - live_event
          - new_release
      responses:
        "200":
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/events_response'
        "400":
          description: Bad request
          content: {}
        "500":
          description: Server error
          content: {}
  /events/entity:
    get:
      tags:
      - events
      summary: Get events for a specific entity
      description: Get events for a specific entity
      operationId: Get Entity Events
      parameters:
      - name: offset
        in: query
        description: The number of items to skip. Useful for pagination (page number
          * limit)
        schema:
          type: integer
      - name: limit
        in: query
        description: The number of items to fetch
        schema:
          type: integer
      - name: user_id
        in: query
        description: The user ID of the user making the request
        schema:
          type: string
      - name: entity_id
        in: query
        description: The ID of the entity to get events for
        required: true
        style: form
        explode: true
        schema:
          type: array
          items:
            type: string
      - name: entity_type
        in: query
        description: The type of entity to get events for
        schema:
          type: string
          enum:
          - track
          - collection
          - user
      - name: filter_deleted
        in: query
        description: Whether to filter deleted events
        schema:
          type: boolean
          default: true
      responses:
        "200":
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/events_response'
        "400":
          description: Bad request
          content: {}
        "500":
          description: Server error
          content: {}
  /events/unclaimed_id:
    get:
      tags:
      - events
      description: Gets an unclaimed blockchain event ID
      operationId: Get unclaimed event ID
      responses:
        "200":
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/unclaimed_id_response'
        "500":
          description: Server error
          content: {}
  /explore/best-selling:
    get:
      tags:
      - explore
      summary: Get best selling tracks and/or albums
      description: Get best selling tracks and playlists
      operationId: Get Best Selling
      parameters:
      - name: offset
        in: query
        description: The number of items to skip. Useful for pagination (page number
          * limit)
        schema:
          type: integer
      - name: limit
        in: query
        description: The number of items to fetch
        schema:
          type: integer
      - name: user_id
        in: query
        description: The user ID of the user making the request
        schema:
          type: string
      - name: type
        in: query
        description: The type of content to filter by
        schema:
          type: string
          default: all
          enum:
          - all
          - track
          - album
      responses:
        "200":
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/best_selling_response'
        "400":
          description: Bad request
          content: {}
        "500":
          description: Server error
          content: {}
  /playlists:
    get:
      tags:
      - playlists
      description: Gets a list of playlists by ID
      operationId: Get Bulk Playlists
      parameters:
      - name: user_id
        in: query
        description: The user ID of the user making the request
        schema:
          type: string
      - name: id
        in: query
        description: The ID of the playlist(s)
        style: form
        explode: true
        schema:
          type: array
          items:
            type: string
      - name: upc
        in: query
        description: The UPC of the playlist(s)
        style: form
        explode: true
        schema:
          type: array
          items:
            type: string
      responses:
        "200":
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/playlist_response'
        "400":
          description: Bad request
          content: {}
        "500":
          description: Server error
          content: {}
  /playlists/by_permalink/{handle}/{slug}:
    get:
      tags:
      - playlists
      description: Get a playlist by handle and slug
      operationId: Get Playlist By Handle and Slug
      parameters:
      - name: handle
        in: path
        description: playlist owner handle
        required: true
        schema:
          type: string
      - name: slug
        in: path
        description: playlist slug
        required: true
        schema:
          type: string
      - name: user_id
        in: query
        description: The user ID of the user making the request
        schema:
          type: string
      responses:
        "200":
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/playlist_response'
  /playlists/search:
    get:
      tags:
      - playlists
      description: Search for a playlist
      operationId: Search Playlists
      parameters:
      - name: offset
        in: query
        description: The number of items to skip. Useful for pagination (page number
          * limit)
        schema:
          type: integer
      - name: limit
        in: query
        description: The number of items to fetch
        schema:
          type: integer
      - name: query
        in: query
        description: The search query
        schema:
          type: string
      - name: genre
        in: query
        description: The genres to filter by
        style: form
        explode: true
        schema:
          type: array
          items:
            type: string
      - name: sort_method
        in: query
        description: The sort method
        schema:
          type: string
          enum:
          - relevant
          - popular
          - recent
      - name: mood
        in: query
        description: The moods to filter by
        style: form
        explode: true
        schema:
          type: array
          items:
            type: string
      - name: includePurchaseable
        in: query
        description: Whether or not to include purchaseable content
        schema:
          type: string
      - name: has_downloads
        in: query
        description: Only include tracks that have downloads in the track results
        schema:
          type: string
      responses:
        "200":
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/playlist_search_result'
        "400":
          description: Bad request
          content: {}
        "500":
          description: Server error
          content: {}
  /playlists/trending:
    get:
      tags:
      - playlists
      description: Gets trending playlists for a time period
      operationId: Get Trending Playlists
      parameters:
      - name: offset
        in: query
        description: The number of items to skip. Useful for pagination (page number
          * limit)
        schema:
          type: integer
      - name: limit
        in: query
        description: The number of items to fetch
        schema:
          type: integer
      - name: time
        in: query
        description: Calculate trending over a specified time range
        schema:
          type: string
          enum:
          - week
          - month
          - year
          - allTime
      - name: type
        in: query
        description: The type of content to filter by
        schema:
          type: string
          default: playlist
          enum:
          - playlist
          - album
      - name: omit_tracks
        in: query
        description: Whether to omit tracks from the response
        schema:
          type: boolean
          default: false
      responses:
        "200":
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/trending_playlists_response'
        "400":
          description: Bad request
          content: {}
        "500":
          description: Server error
          content: {}
  /playlists/{playlist_id}:
    get:
      tags:
      - playlists
      description: Get a playlist by ID
      operationId: Get Playlist
      parameters:
      - name: playlist_id
        in: path
        description: A Playlist ID
        required: true
        schema:
          type: string
      - name: user_id
        in: query
        description: The user ID of the user making the request
        schema:
          type: string
      responses:
        "200":
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/playlist_response'
        "400":
          description: Bad request
          content: {}
        "500":
          description: Server error
          content: {}
  /playlists/{playlist_id}/access-info:
    get:
      tags:
      - playlists
      description: Gets the information necessary to access the playlist and what
        access the given user has.
      operationId: Get Playlist Access Info
      parameters:
      - name: playlist_id
        in: path
        description: A Playlist ID
        required: true
        schema:
          type: string
      - name: user_id
        in: query
        description: The user ID of the user making the request
        schema:
          type: string
      responses:
        "200":
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/access_info_response'
  /playlists/{playlist_id}/tracks:
    get:
      tags:
      - playlists
      description: Fetch tracks within a playlist.
      operationId: Get Playlist Tracks
      parameters:
      - name: playlist_id
        in: path
        description: A Playlist ID
        required: true
        schema:
          type: string
      responses:
        "200":
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/playlist_tracks_response'
        "400":
          description: Bad request
          content: {}
        "500":
          description: Server error
          content: {}
  /resolve:
    get:
      tags:
      - resolve
      summary: Resolves and redirects a provided Audius app URL to the API resource
        URL it represents
      description: |-
        This endpoint allows you to lookup and access API resources when you only know the
        audius.co URL.
        Tracks, Playlists, and Users are supported.
      operationId: Resolve
      parameters:
      - name: url
        in: query
        description: URL to resolve. Either fully formed URL (https://audius.co) or
          just the absolute path
        required: true
        schema:
          type: string
      responses:
        "302":
          description: Internal redirect
          content: {}
  /tips:
    get:
      tags:
      - tips
      description: Gets the most recent tips on the network
      operationId: Get Tips
      parameters:
      - name: offset
        in: query
        description: The number of items to skip. Useful for pagination (page number
          * limit)
        schema:
          type: integer
      - name: limit
        in: query
        description: The number of items to fetch
        schema:
          type: integer
      - name: user_id
        in: query
        description: The user ID of the user making the request
        schema:
          type: string
      - name: receiver_min_followers
        in: query
        description: Only include tips to recipients that have this many followers
        schema:
          type: integer
          default: 0
      - name: receiver_is_verified
        in: query
        description: Only include tips to recipients that are verified
        schema:
          type: boolean
          default: false
      - name: current_user_follows
        in: query
        description: Only include tips involving the user's followers in the given
          capacity. Requires user_id to be set.
        schema:
          type: string
          enum:
          - sender
          - receiver
          - sender_or_receiver
      - name: unique_by
        in: query
        description: "Only include the most recent tip for a user was involved in\
          \ the given capacity.\n\nEg. 'sender' will ensure that each tip returned\
          \ has a unique sender, using the most recent tip sent by a user if that\
          \ user has sent multiple tips.\n    "
        schema:
          type: string
          enum:
          - sender
          - receiver
      - name: min_slot
        in: query
        description: The minimum Solana slot to pull tips from
        schema:
          type: integer
          default: 0
      - name: max_slot
        in: query
        description: The maximum Solana slot to pull tips from
        schema:
          type: integer
          default: 0
      - name: tx_signatures
        in: query
        description: A list of transaction signatures of tips to fetch
        style: form
        explode: false
        schema:
          type: array
          items:
            type: string
      responses:
        "200":
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/get_tips_response'
  /tracks:
    get:
      tags:
      - tracks
      description: Gets a list of tracks using their IDs or permalinks
      operationId: Get Bulk Tracks
      parameters:
      - name: permalink
        in: query
        description: The permalink of the track(s)
        style: form
        explode: true
        schema:
          type: array
          items:
            type: string
      - name: id
        in: query
        description: The ID of the track(s)
        style: form
        explode: true
        schema:
          type: array
          items:
            type: string
      - name: isrc
        in: query
        description: The ISRC of the track(s)
        style: form
        explode: true
        schema:
          type: array
          items:
            type: string
      responses:
        "200":
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/tracks_response'
        "400":
          description: Bad request
          content: {}
        "500":
          description: Server error
          content: {}
  /tracks/inspect:
    get:
      tags:
      - tracks
      summary: Inspects the details of the files for multiple tracks
      description: Inspect multiple tracks
      operationId: Inspect Tracks
      parameters:
      - name: id
        in: query
        description: List of track IDs to inspect
        required: true
        style: form
        explode: true
        schema:
          type: array
          items:
            type: string
      - name: original
        in: query
        description: Optional - if set to true inspects the original file quality
        schema:
          type: boolean
          default: false
      responses:
        "200":
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/track_inspect_list'
        "400":
          description: Bad request
          content: {}
        "500":
          description: Server error
          content: {}
  /tracks/recent-premium:
    get:
      tags:
      - tracks
      description: Gets the most recently listed premium tracks
      operationId: Get Recent Premium Tracks
      parameters:
      - name: offset
        in: query
        description: The number of items to skip. Useful for pagination (page number
          * limit)
        schema:
          type: integer
      - name: limit
        in: query
        description: The number of items to fetch
        schema:
          type: integer
      - name: user_id
        in: query
        description: The user ID of the user making the request
        schema:
          type: string
      responses:
        "200":
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/tracks_response'
  /tracks/feeling-lucky:
    get:
      tags:
      - tracks
      description: Gets random tracks found on the "Feeling Lucky" smart playlist
      operationId: Get Feeling Lucky Tracks
      parameters:
      - name: user_id
        in: query
        description: The user ID of the user making the request
        schema:
          type: string
      - name: limit
        in: query
        description: Number of tracks to fetch
        schema:
          type: integer
          default: 10
          minimum: 1
          maximum: 100
      - name: min_followers
        in: query
        description: Fetch tracks from users with at least this number of followers
        schema:
          type: integer
          minimum: 1
      responses:
        "200":
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/tracks_response'
        "400":
          description: Bad request
          content: {}

  /tracks/recent-comments:
    get:
      tags:
      - tracks
      description: Gets the most recent tracks with active discussion
      operationId: Get Tracks With Recent Comments
      parameters:
      - name: user_id
        in: query
        description: The user ID of the user making the request
        schema:
          type: string
      - name: limit
        in: query
        description: Number of tracks to fetch
        schema:
          type: integer
          default: 10
          minimum: 1
          maximum: 100
      - name: offset
        in: query
        description: The number of items to skip. Useful for pagination (page number
          * limit)
        schema:
          type: integer
          default: 0
          minimum: 0
      responses:
        "200":
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/tracks_response'
        "400":
          description: Bad request
          content: {}
  /tracks/most-shared:
    get:
      tags:
      - tracks
      description: Gets the most shared tracks for a given time range
      operationId: Get Most Shared Tracks
      parameters:
      - name: user_id
        in: query
        description: The user ID of the user making the request
        schema:
          type: string
      - name: limit
        in: query
        description: Number of tracks to fetch
        schema:
          type: integer
          default: 10
          minimum: 1
          maximum: 100
      - name: offset
        in: query
        description: The number of items to skip. Useful for pagination (page number
          * limit)
        schema:
          type: integer
          default: 0
          minimum: 0
      - name: time_range
        in: query
        description: The time range to consider
        schema:
          type: string
          default: week
          enum:
          - week
          - month
          - allTime
      responses:
        "200":
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/tracks_response'
        "400":
          description: Bad request
          content: {}
        "500":
          description: Server error
          content: {}
  /tracks/search:
    get:
      tags:
      - tracks
      description: Search for a track or tracks
      operationId: Search Tracks
      parameters:
      - name: offset
        in: query
        description: The number of items to skip. Useful for pagination (page number
          * limit)
        schema:
          type: integer
      - name: limit
        in: query
        description: The number of items to fetch
        schema:
          type: integer
      - name: query
        in: query
        description: The search query
        schema:
          type: string
      - name: genre
        in: query
        description: The genres to filter by
        style: form
        explode: true
        schema:
          type: array
          items:
            type: string
      - name: sort_method
        in: query
        description: The sort method
        schema:
          type: string
          enum:
          - relevant
          - popular
          - recent
      - name: mood
        in: query
        description: The moods to filter by
        style: form
        explode: true
        schema:
          type: array
          items:
            type: string
      - name: only_downloadable
        in: query
        description: Return only downloadable tracks
        schema:
          type: string
          default: "false"
      - name: includePurchaseable
        in: query
        description: Whether or not to include purchaseable content
        schema:
          type: string
      - name: is_purchaseable
        in: query
        description: Only include purchaseable tracks and albums in the track and
          album results
        schema:
          type: string
      - name: has_downloads
        in: query
        description: Only include tracks that have downloads in the track results
        schema:
          type: string
      - name: key
        in: query
        description: Only include tracks that match the musical key
        style: form
        explode: true
        schema:
          type: array
          items:
            type: string
      - name: bpm_min
        in: query
        description: Only include tracks that have a bpm greater than or equal to
        schema:
          type: string
      - name: bpm_max
        in: query
        description: Only include tracks that have a bpm less than or equal to
        schema:
          type: string
      responses:
        "200":
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/track_search'
        "400":
          description: Bad request
          content: {}
        "500":
          description: Server error
          content: {}
  /tracks/trending:
    get:
      tags:
      - tracks
      description: Gets the top 100 trending (most popular) tracks on Audius
      operationId: Get Trending Tracks
      parameters:
      - name: offset
        in: query
        description: The number of items to skip. Useful for pagination (page number
          * limit)
        schema:
          type: integer
      - name: limit
        in: query
        description: The number of items to fetch
        schema:
          type: integer
      - name: genre
        in: query
        description: Filter trending to a specified genre
        schema:
          type: string
      - name: time
        in: query
        description: Calculate trending over a specified time range
        schema:
          type: string
          enum:
          - week
          - month
          - year
          - allTime
      responses:
        "200":
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/tracks_response'
        "400":
          description: Bad request
          content: {}
        "500":
          description: Server error
          content: {}
  /tracks/trending/underground:
    get:
      tags:
      - tracks
      description: Gets the top 100 trending underground tracks on Audius
      operationId: Get Underground Trending Tracks
      parameters:
      - name: offset
        in: query
        description: The number of items to skip. Useful for pagination (page number
          * limit)
        schema:
          type: integer
      - name: limit
        in: query
        description: The number of items to fetch
        schema:
          type: integer
      responses:
        "200":
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/tracks_response'
  /tracks/{track_id}:
    get:
      tags:
      - tracks
      description: Gets a track by ID
      operationId: Get Track
      parameters:
      - name: track_id
        in: path
        description: A Track ID
        required: true
        schema:
          type: string
      responses:
        "200":
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/track_response'
        "400":
          description: Bad request
          content: {}
        "500":
          description: Server error
          content: {}
  /tracks/{track_id}/access-info:
    get:
      tags:
      - tracks
      description: Gets the information necessary to access the track and what access
        the given user has.
      operationId: Get Track Access Info
      parameters:
      - name: track_id
        in: path
        description: A Track ID
        required: true
        schema:
          type: string
      - name: user_id
        in: query
        description: The user ID of the user making the request
        schema:
          type: string
      responses:
        "200":
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/access_info_response'
  /tracks/{track_id}/comment_count:
    get:
      tags:
      - tracks
      description: Get the comment count for a track
      operationId: Get Track Comment Count
      parameters:
      - name: track_id
        in: path
        description: A Track ID
        required: true
        schema:
          type: string
      - name: user_id
        in: query
        description: The user ID of the user making the request
        schema:
          type: string
      responses:
        "200":
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/track_comment_count_response'
        "400":
          description: Bad request
          content: {}
        "500":
          description: Server error
          content: {}
  /tracks/{track_id}/comment_notification_setting:
    get:
      tags:
      - tracks
      description: Get the comment notification setting for a track
      operationId: Get Track Comment Notification Setting
      parameters:
      - name: track_id
        in: path
        description: A Track ID
        required: true
        schema:
          type: string
      - name: user_id
        in: query
        description: The user ID of the user making the request
        schema:
          type: string
      responses:
        "200":
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/track_comment_notification_response'
        "400":
          description: Bad request
          content: {}
        "500":
          description: Server error
          content: {}
  /tracks/{track_id}/comments:
    get:
      tags:
      - tracks
      description: Get a list of comments for a track
      operationId: Get Track Comments
      parameters:
      - name: track_id
        in: path
        description: A Track ID
        required: true
        schema:
          type: string
      - name: offset
        in: query
        description: The number of items to skip. Useful for pagination (page number
          * limit)
        schema:
          type: integer
      - name: limit
        in: query
        description: The number of items to fetch
        schema:
          type: integer
      - name: user_id
        in: query
        description: The user ID of the user making the request
        schema:
          type: string
      - name: sort_method
        in: query
        description: The sort method
        schema:
          type: string
          default: top
          enum:
          - top
          - newest
          - timestamp
      responses:
        "200":
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/track_comments_response'
        "400":
          description: Bad request
          content: {}
        "500":
          description: Server error
          content: {}
  /tracks/{track_id}/download:
    get:
      tags:
      - tracks
      summary: Download the original or MP3 file of a track
      description: Download an original or mp3 track
      operationId: Download Track
      parameters:
      - name: track_id
        in: path
        description: A Track ID
        required: true
        schema:
          type: string
      - name: user_id
        in: query
        description: The user ID of the user making the request
        schema:
          type: string
      - name: user_signature
        in: query
        description: |-
          Optional - signature from the requesting user's wallet.
                  This is needed to authenticate the user and verify access in case the track is gated.
        schema:
          type: string
      - name: user_data
        in: query
        description: Optional - data which was used to generate the optional signature
          argument.
        schema:
          type: string
      - name: nft_access_signature
        in: query
        description: |-
          Optional - nft access signature for this track which was previously generated by a registered DN.
                  We perform checks on it and pass it through to CN.
        schema:
          type: string
      - name: filename
        in: query
        description: "Optional - name of file to download. If not provided, defaults\
          \ to track original filename or title."
        schema:
          type: string
      responses:
        "200":
          description: Success
          content: {}
        "216":
          description: Partial content
          content: {}
        "400":
          description: Bad request
          content: {}
        "416":
          description: Content range invalid
          content: {}
        "500":
          description: Server error
          content: {}
  /tracks/{track_id}/inspect:
    get:
      tags:
      - tracks
      summary: Inspects the details of the file for a track
      description: Inspect a track
      operationId: Inspect Track
      parameters:
      - name: track_id
        in: path
        description: A Track ID
        required: true
        schema:
          type: string
      - name: original
        in: query
        description: Optional - if set to true inspects the original file quality
        schema:
          type: boolean
          default: false
      responses:
        "200":
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/track_inspect'
        "400":
          description: Bad request
          content: {}
        "500":
          description: Server error
          content: {}
  /tracks/{track_id}/stems:
    get:
      tags:
      - tracks
      description: Get the remixable stems of a track
      operationId: Get Track Stems
      parameters:
      - name: track_id
        in: path
        description: A Track ID
        required: true
        schema:
          type: string
      responses:
        "200":
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/stems_response'
  /tracks/{track_id}/stream:
    get:
      tags:
      - tracks
      summary: Get the streamable MP3 file of a track
      description: |-
        Stream an mp3 track
        This endpoint accepts the Range header for streaming.
        https://developer.mozilla.org/en-US/docs/Web/HTTP/Range_requests
      operationId: Stream Track
      parameters:
      - name: track_id
        in: path
        description: A Track ID
        required: true
        schema:
          type: string
      - name: user_id
        in: query
        description: The user ID of the user making the request
        schema:
          type: string
      - name: preview
        in: query
        description: Optional - true if streaming track preview
        schema:
          type: boolean
          default: false
      - name: user_signature
        in: query
        description: |-
          Optional - signature from the requesting user's wallet.
                  This is needed to authenticate the user and verify access in case the track is gated.
        schema:
          type: string
      - name: user_data
        in: query
        description: Optional - data which was used to generate the optional signature
          argument.
        schema:
          type: string
      - name: nft_access_signature
        in: query
        description: |-
          Optional - gated content signature for this track which was previously generated by a registered DN.
                  We perform checks on it and pass it through to CN.
        schema:
          type: string
      - name: skip_play_count
        in: query
        description: Optional - boolean that disables tracking of play counts.
        schema:
          type: boolean
          default: false
      - name: api_key
        in: query
        description: Optional - API key for third party apps. This is required for
          tracks that only allow specific API keys.
        schema:
          type: string
      - name: skip_check
        in: query
        description: Optional - POC to skip node 'double dip' health check
        schema:
          type: boolean
      - name: no_redirect
        in: query
        description: Optional - If true will not return a 302 and instead will return
          the stream url in JSON
        schema:
          type: boolean
      responses:
        "200":
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/stream_url_response'
        "216":
          description: Partial content
          content: {}
        "400":
          description: Bad request
          content: {}
        "416":
          description: Content range invalid
          content: {}
        "500":
          description: Server error
          content: {}
  /tracks/{track_id}/top_listeners:
    get:
      tags:
      - tracks
      description: Get the users that have listened to a track the most
      operationId: Get Track Top Listeners
      parameters:
      - name: track_id
        in: path
        description: A Track ID
        required: true
        schema:
          type: string
      - name: offset
        in: query
        description: The number of items to skip. Useful for pagination (page number
          * limit)
        schema:
          type: integer
      - name: limit
        in: query
        description: The number of items to fetch
        schema:
          type: integer
      - name: user_id
        in: query
        description: The user ID of the user making the request
        schema:
          type: string
      responses:
        "200":
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/top_listener'
        "400":
          description: Bad request
          content: {}
        "500":
          description: Server error
          content: {}
  /users:
    get:
      tags:
      - users
      description: Gets a list of users by ID
      operationId: Get Bulk Users
      parameters:
      - name: user_id
        in: query
        description: The user ID of the user making the request
        schema:
          type: string
      - name: id
        in: query
        description: The ID of the user(s)
        style: form
        explode: true
        schema:
          type: array
          items:
            type: string
      responses:
        "200":
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/users_response'
        "400":
          description: Bad request
          content: {}
        "500":
          description: Server error
          content: {}
  /users/address:
    get:
      tags:
      - users
      description: Gets User IDs from any Ethereum wallet address or Solana account address associated with their Audius account.
      operationId: Get User IDs by Addresses
      parameters:
      - name: address
        in: query
        description: Wallet address
        required: true
        style: form
        explode: true
        example:
          - "0x1234567890abcdef1234567890abcdef12345678"
          - "E2LCbKdo2L3ikt1gK6pwp1pDLuhAfHBNf6fEQXpAqrf9"
        schema:
          type: array
          items:
            type: string
      responses:
        "200":
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/user_ids_addresses_response'
  /users/handle/{handle}:
    get:
      tags:
      - users
      description: Gets a single user by their handle
      operationId: Get User by Handle
      parameters:
      - name: handle
        in: path
        description: A User handle
        required: true
        schema:
          type: string
      - name: user_id
        in: query
        description: The user ID of the user making the request
        schema:
          type: string
      responses:
        "200":
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/user_response'
        "400":
          description: Bad request
          content: {}
        "500":
          description: Server error
          content: {}
  /users/handle/{handle}/tracks/ai_attributed:
    get:
      tags:
      - users
      description: Gets the AI generated tracks attributed to a user using the user's
        handle
      operationId: Get AI Attributed Tracks by User Handle
      parameters:
      - name: handle
        in: path
        description: A User handle
        required: true
        schema:
          type: string
      - name: offset
        in: query
        description: The number of items to skip. Useful for pagination (page number
          * limit)
        schema:
          type: integer
      - name: limit
        in: query
        description: The number of items to fetch
        schema:
          type: integer
      - name: user_id
        in: query
        description: The user ID of the user making the request
        schema:
          type: string
      - name: sort
        in: query
        description: "[Deprecated] Field to sort by"
        schema:
          type: string
          default: date
          enum:
          - date
          - plays
      - name: query
        in: query
        description: The filter query
        schema:
          type: string
      - name: sort_method
        in: query
        description: The sort method
        schema:
          type: string
          enum:
          - title
          - artist_name
          - release_date
          - last_listen_date
          - added_date
          - plays
          - reposts
          - saves
          - most_listens_by_user
      - name: sort_direction
        in: query
        description: The sort direction
        schema:
          type: string
          enum:
          - asc
          - desc
      - name: filter_tracks
        in: query
        description: Filter by public tracks
        schema:
          type: string
          default: all
          enum:
          - all
          - public
      - name: Encoded-Data-Message
        in: header
        description: The data that was signed by the user for signature recovery
        schema:
          type: string
      - name: Encoded-Data-Signature
        in: header
        description: "The signature of data, used for signature recovery"
        schema:
          type: string
      responses:
        "200":
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/tracks_response'
        "400":
          description: Bad request
          content: {}
        "500":
          description: Server error
          content: {}
  /users/search:
    get:
      tags:
      - users
      description: Search for users that match the given query
      operationId: Search Users
      parameters:
      - name: offset
        in: query
        description: The number of items to skip. Useful for pagination (page number
          * limit)
        schema:
          type: integer
      - name: limit
        in: query
        description: The number of items to fetch
        schema:
          type: integer
      - name: query
        in: query
        description: The search query
        schema:
          type: string
      - name: genre
        in: query
        description: The genres to filter by
        style: form
        explode: true
        schema:
          type: array
          items:
            type: string
      - name: sort_method
        in: query
        description: The sort method
        schema:
          type: string
          enum:
          - relevant
          - popular
          - recent
      - name: is_verified
        in: query
        description: Only include verified users in the user results
        schema:
          type: string
      responses:
        "200":
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/user_search'
        "400":
          description: Bad request
          content: {}
        "500":
          description: Server error
          content: {}
  /users/verify_token:
    get:
      tags:
      - users
      description: Verify if the given jwt ID token was signed by the subject (user)
        in the payload
      operationId: Verify ID Token
      parameters:
      - name: token
        in: query
        description: JWT to verify
        required: true
        schema:
          type: string
      responses:
        "200":
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/verify_token'
        "400":
          description: Bad input
          content: {}
        "404":
          description: ID token not valid
          content: {}
        "500":
          description: Server error
          content: {}
  /users/{id}:
    get:
      tags:
      - users
      description: Gets a single user by their user ID
      operationId: Get User
      parameters:
      - name: id
        in: path
        description: A User ID
        required: true
        schema:
          type: string
      responses:
        "200":
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/user_response'
        "400":
          description: Bad request
          content: {}
        "500":
          description: Server error
          content: {}
  /users/{id}/albums:
    get:
      tags:
      - users
      description: Gets the albums created by a user using their user ID
      operationId: Get Albums by User
      parameters:
      - name: id
        in: path
        description: A User ID
        required: true
        schema:
          type: string
      - name: offset
        in: query
        description: The number of items to skip. Useful for pagination (page number
          * limit)
        schema:
          type: integer
      - name: limit
        in: query
        description: The number of items to fetch
        schema:
          type: integer
      - name: user_id
        in: query
        description: The user ID of the user making the request
        schema:
          type: string
      - name: sort_method
        in: query
        description: The sort method
        schema:
          type: string
          default: recent
          enum:
          - recent
          - popular
      - name: query
        in: query
        description: Filter albums by name
        schema:
          type: string
      - name: Encoded-Data-Message
        in: header
        description: The data that was signed by the user for signature recovery
        schema:
          type: string
      - name: Encoded-Data-Signature
        in: header
        description: "The signature of data, used for signature recovery"
        schema:
          type: string
      responses:
        "200":
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/albums_response'
        "400":
          description: Bad request
          content: {}
        "500":
          description: Server error
          content: {}
  /users/{id}/authorized_apps:
    get:
      tags:
      - users
      description: Get the apps that user has authorized to write to their account
      operationId: Get Authorized Apps
      parameters:
      - name: id
        in: path
        description: A User ID
        required: true
        schema:
          type: string
      responses:
        "200":
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/authorized_apps'
        "400":
          description: Bad request
          content: {}
        "500":
          description: Server error
          content: {}
  /users/{id}/balance/history:
    get:
      tags:
      - users
      description: Get the user's historical portfolio balance data
      operationId: Get User Balance History
      parameters:
      - name: id
        in: path
        description: A User ID
        required: true
        schema:
          type: string
      - name: start_time
        in: query
        description: Start time for the balance history query (ISO 8601 format). Defaults to 7 days ago.
        required: false
        schema:
          type: string
          format: date-time
      - name: end_time
        in: query
        description: End time for the balance history query (ISO 8601 format). Defaults to now.
        required: false
        schema:
          type: string
          format: date-time
      - name: granularity
        in: query
        description: Data granularity. 'hourly' returns hourly data points, 'daily' returns daily aggregated data. Defaults to 'hourly'.
        required: false
        schema:
          type: string
          enum:
          - hourly
          - daily
          default: hourly
      - name: user_id
        in: query
        description: The user ID of the user making the request
        schema:
          type: string
      - name: Encoded-Data-Message
        in: header
        description: The data that was signed by the user for signature recovery
        schema:
          type: string
      - name: Encoded-Data-Signature
        in: header
        description: "The signature of data, used for signature recovery"
        schema:
          type: string
      responses:
        "200":
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/balance_history_response'
        "400":
          description: Bad request
          content: {}
        "401":
          description: Unauthorized
          content: {}
        "403":
          description: Forbidden
          content: {}
        "500":
          description: Server error
          content: {}
  /users/{id}/challenges:
    get:
      tags:
      - users
      description: Gets all challenges for the given user
      operationId: Get User Challenges
      parameters:
      - name: id
        in: path
        description: A User ID
        required: true
        schema:
          type: string
      - name: show_historical
        in: query
        description: Whether to show challenges that are inactive but completed
        schema:
          type: boolean
          default: false
      responses:
        "200":
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/get_challenges'
        "400":
          description: Bad request
          content: {}
        "500":
          description: Server error
          content: {}

  /users/{id}/coins:
    get:
      tags:
      - users
      description: 'Gets a list of the coins owned by the user and their balances'
      parameters:
      - name: id
        in: path
        description: A User ID
        required: true
        schema:
          type: string
      - name: offset
        in: query
        description: The number of items to skip. Useful for pagination (page number
          * limit)
        schema:
          type: integer
          default: 0
          minimum: 0
      - name: limit
        in: query
        description: The number of items to fetch
        schema:
          type: integer
          default: 50
          minimum: 1
          maximum: 100
      operationId: Get User Coins
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/user_coins_response'
  /users/{id}/coins/{mint}:
    get:
      tags:
      - users
      description: 'Gets information about a specific coin owned by the user and their wallets'
      parameters:
      - name: id
        in: path
        description: A User ID
        required: true
        schema:
          type: string
      - name: mint
        in: path
        description: The mint address of the coin
        required: true
        schema:
          type: string
          example: "Dez1g5f3h4j5k6l7m8n9o0p1q2r3s4t5u6v7w8x9y0z"
      operationId: Get User Coin
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/user_coin_response'
  /wallet/{walletId}/coins:
    get:
      tags:
      - wallet
      description: 'Gets a list of the coins held by a wallet address and their balances'
      parameters:
      - name: walletId
        in: path
        description: A Solana wallet address
        required: true
        schema:
          type: string
          example: "Dez1g5f3h4j5k6l7m8n9o0p1q2r3s4t5u6v7w8x9y0z"
      - name: offset
        in: query
        description: The number of items to skip. Useful for pagination (page number
          * limit)
        schema:
          type: integer
          default: 0
          minimum: 0
      - name: limit
        in: query
        description: The number of items to fetch
        schema:
          type: integer
          default: 50
          minimum: 1
          maximum: 100
      operationId: Get Wallet Coins
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/user_coins_response'
  /users/{id}/collectibles:
    get:
      tags:
      - users
      description: Get the User's indexed collectibles data
      operationId: Get User Collectibles
      parameters:
      - name: id
        in: path
        description: A User ID
        required: true
        schema:
          type: string
      responses:
        "200":
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/collectibles_response'
        "400":
          description: Bad request
          content: {}
        "500":
          description: Server error
          content: {}
  /users/{id}/comments:
    get:
      tags:
      - users
      description: Get user comment history
      operationId: Get User Comments
      parameters:
      - name: id
        in: path
        description: A User ID
        required: true
        schema:
          type: string
      - name: offset
        in: query
        description: The number of items to skip. Useful for pagination (page number
          * limit)
        schema:
          type: integer
      - name: limit
        in: query
        description: The number of items to fetch
        schema:
          type: integer
      - name: user_id
        in: query
        description: The user ID of the user making the request
        schema:
          type: string
      responses:
        "200":
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/user_comments_response'
        "400":
          description: Bad request
          content: {}
        "500":
          description: Server error
          content: {}
  /users/{id}/connected_wallets:
    get:
      tags:
      - users
      description: Get the User's ERC and SPL connected wallets
      operationId: Get connected wallets
      parameters:
      - name: id
        in: path
        description: A User ID
        required: true
        schema:
          type: string
      responses:
        "200":
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/connected_wallets_response'
        "400":
          description: Bad request
          content: {}
        "500":
          description: Server error
          content: {}
  /users/{id}/developer_apps:
    get:
      tags:
      - users
      description: Gets the developer apps that the user owns
      operationId: Get Developer Apps
      parameters:
      - name: id
        in: path
        description: A User ID
        required: true
        schema:
          type: string
      responses:
        "200":
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/developer_apps'
        "400":
          description: Bad request
          content: {}
        "500":
          description: Server error
          content: {}
  /users/{id}/favorites:
    get:
      tags:
      - users
      description: Gets a user's favorite tracks
      operationId: Get Favorites
      parameters:
      - name: id
        in: path
        description: A User ID
        required: true
        schema:
          type: string
      responses:
        "200":
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/favorites_response'
        "400":
          description: Bad request
          content: {}
        "500":
          description: Server error
          content: {}
  /users/{id}/followers:
    get:
      tags:
      - users
      description: All users that follow the provided user
      operationId: Get Followers
      parameters:
      - name: id
        in: path
        description: A User ID
        required: true
        schema:
          type: string
      - name: offset
        in: query
        description: The number of items to skip. Useful for pagination (page number
          * limit)
        schema:
          type: integer
      - name: limit
        in: query
        description: The number of items to fetch
        schema:
          type: integer
      - name: user_id
        in: query
        description: The user ID of the user making the request
        schema:
          type: string
      responses:
        "200":
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/followers_response'
        "400":
          description: Bad request
          content: {}
        "500":
          description: Server error
          content: {}
  /users/{id}/following:
    get:
      tags:
      - users
      description: All users that the provided user follows
      operationId: Get Following
      parameters:
      - name: id
        in: path
        description: A User ID
        required: true
        schema:
          type: string
      - name: offset
        in: query
        description: The number of items to skip. Useful for pagination (page number
          * limit)
        schema:
          type: integer
      - name: limit
        in: query
        description: The number of items to fetch
        schema:
          type: integer
      - name: user_id
        in: query
        description: The user ID of the user making the request
        schema:
          type: string
      responses:
        "200":
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/following_response'
        "400":
          description: Bad request
          content: {}
        "500":
          description: Server error
          content: {}
  /users/{id}/history/tracks:
    get:
      tags:
      - users
      description: Get the tracks the user recently listened to.
      operationId: Get User's Track History
      parameters:
      - name: id
        in: path
        description: A User ID
        required: true
        schema:
          type: string
      - name: offset
        in: query
        description: The number of items to skip. Useful for pagination (page number
          * limit)
        schema:
          type: integer
      - name: limit
        in: query
        description: The number of items to fetch
        schema:
          type: integer
      - name: query
        in: query
        description: The filter query
        schema:
          type: string
      - name: sort_method
        in: query
        description: The sort method
        schema:
          type: string
          enum:
          - title
          - artist_name
          - release_date
          - last_listen_date
          - added_date
          - plays
          - reposts
          - saves
          - most_listens_by_user
      - name: sort_direction
        in: query
        description: The sort direction
        schema:
          type: string
          enum:
          - asc
          - desc
      - name: user_id
        in: query
        description: The user ID of the user making the request
        schema:
          type: string
      - name: Encoded-Data-Message
        in: header
        description: The data that was signed by the user for signature recovery
        schema:
          type: string
      - name: Encoded-Data-Signature
        in: header
        description: "The signature of data, used for signature recovery"
        schema:
          type: string
      responses:
        "200":
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/history_response'
        "400":
          description: Bad request
          content: {}
        "401":
          description: Unauthorized
          content: {}
        "403":
          description: Forbidden
          content: {}
        "500":
          description: Server error
          content: {}
  /users/{id}/listen_counts_monthly:
    get:
      tags:
      - users
      description: Gets the listen data for a user by month and track within a given
        time frame.
      operationId: Get User Monthly Track Listens
      parameters:
      - name: id
        in: path
        description: A User ID
        required: true
        schema:
          type: string
      - name: start_time
        in: query
        description: Start time from which to start results for user listen count
          data (inclusive).
        required: true
        schema:
          type: string
      - name: end_time
        in: query
        description: End time until which to cut off results of listen count data
          (not inclusive).
        required: true
        schema:
          type: string
      responses:
        "200":
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/user_track_listen_counts_response'
        "400":
          description: Bad request
          content: {}
        "500":
          description: Server error
          content: {}
  /users/{id}/muted:
    get:
      tags:
      - users
      description: Gets users muted by the given user
      operationId: Get Muted Users
      parameters:
      - name: id
        in: path
        description: A User ID
        required: true
        schema:
          type: string
      - name: Encoded-Data-Message
        in: header
        description: The data that was signed by the user for signature recovery
        schema:
          type: string
      - name: Encoded-Data-Signature
        in: header
        description: "The signature of data, used for signature recovery"
        schema:
          type: string
      responses:
        "200":
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/users_response'
  /users/{id}/mutuals:
    get:
      tags:
      - users
      description: Get intersection of users that follow followeeUserId and users
        that are followed by followerUserId
      operationId: Get Mutual Followers
      parameters:
      - name: id
        in: path
        description: A User ID
        required: true
        schema:
          type: string
      - name: offset
        in: query
        description: The number of items to skip. Useful for pagination (page number
          * limit)
        schema:
          type: integer
      - name: limit
        in: query
        description: The number of items to fetch
        schema:
          type: integer
      - name: user_id
        in: query
        description: The user ID of the user making the request
        schema:
          type: string
      responses:
        "200":
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/mutual_followers_response'
        "400":
          description: Bad request
          content: {}
        "500":
          description: Server error
          content: {}
  /users/{id}/playlists:
    get:
      tags:
      - users
      description: Gets the playlists created by a user using their user ID
      operationId: Get Playlists by User
      parameters:
      - name: id
        in: path
        description: A User ID
        required: true
        schema:
          type: string
      - name: offset
        in: query
        description: The number of items to skip. Useful for pagination (page number
          * limit)
        schema:
          type: integer
      - name: limit
        in: query
        description: The number of items to fetch
        schema:
          type: integer
      - name: user_id
        in: query
        description: The user ID of the user making the request
        schema:
          type: string
      - name: sort_method
        in: query
        description: The sort method
        schema:
          type: string
          default: recent
          enum:
          - recent
          - popular
      - name: query
        in: query
        description: Filter playlists by name
        schema:
          type: string
      - name: Encoded-Data-Message
        in: header
        description: The data that was signed by the user for signature recovery
        schema:
          type: string
      - name: Encoded-Data-Signature
        in: header
        description: "The signature of data, used for signature recovery"
        schema:
          type: string
      responses:
        "200":
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/playlists_response'
        "400":
          description: Bad request
          content: {}
        "500":
          description: Server error
          content: {}
  /users/{id}/purchasers:
    get:
      tags:
      - users
      description: Gets the list of unique users who have purchased content by the
        given user
      operationId: Get purchasers
      parameters:
      - name: id
        in: path
        description: A User ID
        required: true
        schema:
          type: string
      - name: offset
        in: query
        description: The number of items to skip. Useful for pagination (page number
          * limit)
        schema:
          type: integer
      - name: limit
        in: query
        description: The number of items to fetch
        schema:
          type: integer
      - name: user_id
        in: query
        description: The user ID of the user making the request
        schema:
          type: string
      - name: content_type
        in: query
        description: Type of content to filter by (track or album)
        schema:
          type: string
      - name: content_id
        in: query
        description: Filters for users who have purchased the given track or album
          ID
        schema:
          type: string
      responses:
        "200":
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/purchasers_response'
        "400":
          description: Bad request
          content: {}
        "500":
          description: Server error
          content: {}
  /users/{id}/purchases/download:
    get:
      tags:
      - users
      description: Downloads the purchases the user has made as a CSV file
      operationId: Download Purchases as CSV
      parameters:
      - name: id
        in: path
        description: A User ID
        required: true
        schema:
          type: string
      - name: user_id
        in: query
        description: The user ID of the user making the request
        schema:
          type: string
      - name: Encoded-Data-Message
        in: header
        description: The data that was signed by the user for signature recovery
        schema:
          type: string
      - name: Encoded-Data-Signature
        in: header
        description: "The signature of data, used for signature recovery"
        schema:
          type: string
      responses:
        "200":
          description: Success
          content: {}
  /users/{id}/recommended-tracks:
    get:
      tags:
      - users
      description: Gets the recommended tracks for the user
      operationId: Get User Recommended Tracks
      parameters:
      - name: id
        in: path
        description: A User ID
        required: true
        schema:
          type: string
      - name: offset
        in: query
        description: The number of items to skip. Useful for pagination (page number
          * limit)
        schema:
          type: integer
      - name: limit
        in: query
        description: The number of items to fetch
        schema:
          type: integer
      - name: user_id
        in: query
        description: The user ID of the user making the request
        schema:
          type: string
      - name: time_range
        in: query
        description: The time range for the recommended tracks
        schema:
          type: string
          default: week
          enum:
          - week
          - month
          - allTime
      responses:
        "200":
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/tracks_response'
        "400":
          description: Bad request
          content: {}
        "500":
          description: Server error
          content: {}
  /users/{id}/related:
    get:
      tags:
      - users
      description: Gets a list of users that might be of interest to followers of
        this user.
      operationId: Get Related Users
      parameters:
      - name: id
        in: path
        description: A User ID
        required: true
        schema:
          type: string
      - name: offset
        in: query
        description: The number of items to skip. Useful for pagination (page number
          * limit)
        schema:
          type: integer
      - name: limit
        in: query
        description: The number of items to fetch
        schema:
          type: integer
      - name: user_id
        in: query
        description: The user ID of the user making the request
        schema:
          type: string
      - name: filter_followed
        in: query
        description: "If true, filters out artists that the current user already follows"
        schema:
          type: boolean
          default: false
      responses:
        "200":
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/related_artist_response'
        "400":
          description: Bad request
          content: {}
        "500":
          description: Server error
          content: {}
  /users/{id}/remixers:
    get:
      tags:
      - users
      description: "Gets the list of unique users who have remixed tracks by the given\
        \ user, or a specific track by that user if provided"
      operationId: Get remixers
      parameters:
      - name: id
        in: path
        description: A User ID
        required: true
        schema:
          type: string
      - name: offset
        in: query
        description: The number of items to skip. Useful for pagination (page number
          * limit)
        schema:
          type: integer
      - name: limit
        in: query
        description: The number of items to fetch
        schema:
          type: integer
      - name: user_id
        in: query
        description: The user ID of the user making the request
        schema:
          type: string
      - name: track_id
        in: query
        description: Filters for remixers who have remixed the given track ID
        schema:
          type: string
      responses:
        "200":
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/remixers_response'
        "400":
          description: Bad request
          content: {}
        "500":
          description: Server error
          content: {}
  /users/{id}/reposts:
    get:
      tags:
      - users
      description: Gets the given user's reposts
      operationId: Get Reposts
      parameters:
      - name: id
        in: path
        description: A User ID
        required: true
        schema:
          type: string
      - name: offset
        in: query
        description: The number of items to skip. Useful for pagination (page number
          * limit)
        schema:
          type: integer
      - name: limit
        in: query
        description: The number of items to fetch
        schema:
          type: integer
      - name: user_id
        in: query
        description: The user ID of the user making the request
        schema:
          type: string
      responses:
        "200":
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/reposts'
        "400":
          description: Bad request
          content: {}
        "500":
          description: Server error
          content: {}
  /users/{id}/sales/aggregate:
    get:
      tags:
      - users
      description: Gets the aggregated sales data for the user
      operationId: Get Sales Aggregate
      parameters:
      - name: id
        in: path
        description: A User ID
        required: true
        schema:
          type: string
      - name: offset
        in: query
        description: The number of items to skip. Useful for pagination (page number
          * limit)
        schema:
          type: integer
      - name: limit
        in: query
        description: The number of items to fetch
        schema:
          type: integer
      - name: user_id
        in: query
        description: The user ID of the user making the request
        schema:
          type: string
      - name: Encoded-Data-Message
        in: header
        description: The data that was signed by the user for signature recovery
        schema:
          type: string
      - name: Encoded-Data-Signature
        in: header
        description: "The signature of data, used for signature recovery"
        schema:
          type: string
      responses:
        "200":
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/sales_aggregate_response'
  /users/{id}/sales/download:
    get:
      tags:
      - users
      description: Downloads the sales the user has made as a CSV file
      operationId: Download Sales as CSV
      parameters:
      - name: id
        in: path
        description: A User ID
        required: true
        schema:
          type: string
      - name: user_id
        in: query
        description: The user ID of the user making the request
        schema:
          type: string
      - name: Encoded-Data-Message
        in: header
        description: The data that was signed by the user for signature recovery
        schema:
          type: string
      - name: Encoded-Data-Signature
        in: header
        description: "The signature of data, used for signature recovery"
        schema:
          type: string
      responses:
        "200":
          description: Success
          content: {}
  /users/{id}/sales/download/json:
    get:
      tags:
      - users
      description: Gets the sales data for the user in JSON format
      operationId: Download Sales as JSON
      parameters:
      - name: id
        in: path
        description: A User ID
        required: true
        schema:
          type: string
      - name: user_id
        in: query
        description: The user ID of the user making the request
        schema:
          type: string
      - name: grantee_user_id
        in: query
        description: Optional receiving user ID for email decryption
        schema:
          type: string
      - name: Encoded-Data-Message
        in: header
        description: The data that was signed by the user for signature recovery
        schema:
          type: string
      - name: Encoded-Data-Signature
        in: header
        description: "The signature of data, used for signature recovery"
        schema:
          type: string
      responses:
        "200":
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/sales_json_response'
  /users/{id}/subscribers:
    get:
      tags:
      - users
      description: All users that subscribe to the provided user
      operationId: Get Subscribers
      parameters:
      - name: id
        in: path
        description: A User ID
        required: true
        schema:
          type: string
      - name: offset
        in: query
        description: The number of items to skip. Useful for pagination (page number
          * limit)
        schema:
          type: integer
      - name: limit
        in: query
        description: The number of items to fetch
        schema:
          type: integer
      - name: user_id
        in: query
        description: The user ID of the user making the request
        schema:
          type: string
      responses:
        "200":
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/subscribers_response'
        "400":
          description: Bad request
          content: {}
        "500":
          description: Server error
          content: {}
  /users/{id}/supporters:
    get:
      tags:
      - users
      description: Gets the supporters of the given user
      operationId: Get Supporters
      parameters:
      - name: id
        in: path
        description: A User ID
        required: true
        schema:
          type: string
      - name: offset
        in: query
        description: The number of items to skip. Useful for pagination (page number
          * limit)
        schema:
          type: integer
      - name: limit
        in: query
        description: The number of items to fetch
        schema:
          type: integer
      responses:
        "200":
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/get_supporters'
  /users/{id}/supporting:
    get:
      tags:
      - users
      description: Gets the users that the given user supports
      operationId: Get Supported Users
      parameters:
      - name: id
        in: path
        description: A User ID
        required: true
        schema:
          type: string
      - name: offset
        in: query
        description: The number of items to skip. Useful for pagination (page number
          * limit)
        schema:
          type: integer
      - name: limit
        in: query
        description: The number of items to fetch
        schema:
          type: integer
      responses:
        "200":
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/get_supported_users'
  /users/{id}/tags:
    get:
      tags:
      - users
      summary: Fetch most used tags in a user's tracks
      description: Gets the most used track tags by a user.
      operationId: Get Top Track Tags
      parameters:
      - name: id
        in: path
        description: A User ID
        required: true
        schema:
          type: string
      - name: limit
        in: query
        description: The number of items to fetch
        schema:
          type: integer
      - name: user_id
        in: query
        description: The user ID of the user making the request
        schema:
          type: string
      responses:
        "200":
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/tags_response'
        "400":
          description: Bad request
          content: {}
        "500":
          description: Server error
          content: {}
  /users/{id}/tracks:
    get:
      tags:
      - users
      description: Gets the tracks created by a user using their user ID
      operationId: Get Tracks by User
      parameters:
      - name: id
        in: path
        description: A User ID
        required: true
        schema:
          type: string
      - name: offset
        in: query
        description: The number of items to skip. Useful for pagination (page number
          * limit)
        schema:
          type: integer
      - name: limit
        in: query
        description: The number of items to fetch
        schema:
          type: integer
      - name: user_id
        in: query
        description: The user ID of the user making the request
        schema:
          type: string
      - name: sort
        in: query
        description: "[Deprecated] Field to sort by"
        schema:
          type: string
          default: date
          enum:
          - date
          - plays
      - name: query
        in: query
        description: The filter query
        schema:
          type: string
      - name: sort_method
        in: query
        description: The sort method
        schema:
          type: string
          enum:
          - title
          - artist_name
          - release_date
          - last_listen_date
          - added_date
          - plays
          - reposts
          - saves
          - most_listens_by_user
      - name: sort_direction
        in: query
        description: The sort direction
        schema:
          type: string
          enum:
          - asc
          - desc
      - name: filter_tracks
        in: query
        description: Filter by public tracks
        schema:
          type: string
          default: all
          enum:
          - all
          - public
      - name: gate_condition
        in: query
        description: Filter tracks by gate condition type. Multiple values can be provided to filter by multiple gate types (OR logic)
        style: form
        explode: true
        schema:
          type: array
          items:
            type: string
            enum:
            - ungated
            - usdc_purchase
            - follow
            - tip
            - nft
            - token
      - name: Encoded-Data-Message
        in: header
        description: The data that was signed by the user for signature recovery
        schema:
          type: string
      - name: Encoded-Data-Signature
        in: header
        description: "The signature of data, used for signature recovery"
        schema:
          type: string
      responses:
        "200":
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/tracks_response'
        "400":
          description: Bad request
          content: {}
        "500":
          description: Server error
          content: {}
  /users/{id}/tracks/remixed:
    get:
      tags:
      - users
      description: Gets tracks owned by the user which have been remixed by another
        track
      operationId: Get User Tracks Remixed
      parameters:
      - name: id
        in: path
        description: A User ID
        required: true
        schema:
          type: string
      - name: offset
        in: query
        description: The number of items to skip. Useful for pagination (page number
          * limit)
        schema:
          default: 0
          type: integer
          minimum: 0
      - name: limit
        in: query
        description: The number of items to fetch
        schema:
          type: integer
          default: 10
          minimum: 1
          maximum: 100
      - name: user_id
        in: query
        description: The user ID of the user making the request
        schema:
          type: string
      responses:
        "200":
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/user_tracks_remixed_response'
        "400":
          description: Bad request
          content: {}
        "500":
          description: Server error
          content: {}
  /users/{id}/withdrawals/download:
    get:
      tags:
      - users
      description: Downloads the USDC withdrawals the user has made as a CSV file
      operationId: Download USDC Withdrawals as CSV
      parameters:
      - name: id
        in: path
        description: A User ID
        required: true
        schema:
          type: string
      - name: user_id
        in: query
        description: The user ID of the user making the request
        schema:
          type: string
      - name: Encoded-Data-Message
        in: header
        description: The data that was signed by the user for signature recovery
        schema:
          type: string
      - name: Encoded-Data-Signature
        in: header
        description: "The signature of data, used for signature recovery"
        schema:
          type: string
      responses:
        "200":
          description: Success
          content: {}
  /users/{receiving_user_id}/emails/{grantor_user_id}/key:
    get:
      tags:
      - users
      description: Gets the encrypted key for email access between the receiving user
        and granting user.
      operationId: Get User Email Key
      parameters:
      - name: receiving_user_id
        in: path
        description: ID of user receiving email access
        required: true
        schema:
          type: string
      - name: grantor_user_id
        in: path
        description: ID of user granting email access
        required: true
        schema:
          type: string
      responses:
        "200":
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/email_access_response'
        "400":
          description: Bad request
          content: {}
        "500":
          description: Server error
          content: {}
  /coins:
    get:
      tags:
        - coins
      operationId: Get Coins
      description: 'Gets information about coins'
      parameters:
      - name: mint
        in: query
        description: The mint addresses of the coins
        style: form
        explode: true
        schema:
          type: array
          items:
            type: string
      - name: owner_id
        in: query
        description: The user IDs of artists with minted coins
        style: form
        explode: true
        schema:
          type: array
          items:
            type: string
      - name: ticker
        in: query
        description: The tickers of the coins
        style: form
        explode: true
        schema:
          type: array
          items:
            type: string
      - name: query
        in: query
        description: Search by the coin name or ticker
        schema:
          type: string
      - name: offset
        in: query
        description: The number of items to skip. Useful for pagination (page number
          * limit)
        schema:
          type: integer
          default: 0
          minimum: 0
      - name: limit
        in: query
        description: The number of items to fetch
        schema:
          type: integer
          default: 50
          minimum: 1
          maximum: 100
      - name: sort_method
        in: query
        description: Field to use for sorting the results
        schema:
          type: string
          default: market_cap
          enum:
          - market_cap
          - volume
          - price
          - created_at
          - holder
      - name: sort_direction
        in: query
        description: The sort direction
        schema:
          type: string
          default: desc
          enum:
          - asc
          - desc
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/coins_response'
    post:
      tags:
        - coins
      operationId: Create Coin
      description: 'Creates a new artist coin'
      parameters:
      - name: user_id
        in: query
        description: The user ID to create a coin
        required: true
        schema:
          type: string
          example: "7eP5n"
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/create_coin_request'
      responses:
        '201':
          description: Success - Coin created
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/create_coin_response'
        '400':
          description: Bad request - Invalid parameters
          content: {}
        '401':
          description: Unauthorized - User not authenticated
          content: {}
        '500':
          description: Server error
          content: {}
  /coins/{mint}:
    get:
      tags:
        - coins
      operationId: Get Coin
      description: 'Gets information about a specific coin by its mint address'
      parameters:
      - name: mint
        in: path
        description: The mint address of the coin
        required: true
        schema:
          type: string
          example: 9LzCMqDgTKYz9Drzqnpgee3SGa89up3a247ypMj2xrqM
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/coin_response'
    post:
      tags:
        - coins
      operationId: Update Coin
      description: 'Updates information about a specific coin by its mint address'
      parameters:
      - name: mint
        in: path
        description: The mint address of the coin
        required: true
        schema:
          type: string
          example: bearR26zyyB3fNQm5wWv1ZfN8MPQDUMwaAuoG79b1Yj
      - name: user_id
        in: query
        description: The user ID making the update (must be the coin owner)
        required: true
        schema:
          type: string
          example: "7eP5n"
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/update_coin_request'
      responses:
        '200':
          description: Success - Coin updated
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/update_coin_response'
        '400':
          description: Bad request - Invalid parameters or no fields provided
          content: {}
        '403':
          description: Forbidden - User does not own the coin
          content: {}
        '404':
          description: Not found - Coin does not exist
          content: {}
        '500':
          description: Server error
          content: {}
  /coins/ticker/{ticker}:
    get:
      tags:
        - coins
      operationId: Get Coin By Ticker
      description: 'Gets information about a specific coin by its ticker'
      parameters:
      - name: ticker
        in: path
        description: The ticker of the coin
        required: true
        schema:
          type: string
          example: $AUDIO
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/coin_response'
        '400':
          description: Bad request
          content: {}
        '500':
          description: Server error
          content: {}
  /coins/{mint}/insights:
    get:
      tags:
        - coins
      operationId: Get Coin Insights
      description: 'Gets insights about a specific coin by its mint address'
      parameters:
      - name: mint
        in: path
        description: The mint address of the coin
        required: true
        schema:
          type: string
          example: 9LzCMqDgTKYz9Drzqnpgee3SGa89up3a247ypMj2xrqM
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/coin_insights_response'
  /coins/{mint}/members:
    get:
      tags:
        - coins
      operationId: Get Coin Members
      description: 'Gets a list of Audius users with a non-zero balance of a specific coin'
      parameters:
      - name: mint
        in: path
        description: The mint address of the coin
        required: true
        schema:
          type: string
          example: 9LzCMqDgTKYz9Drzqnpgee3SGa89up3a247ypMj2xrqM
      - name: offset
        in: query
        description: The number of items to skip. Useful for pagination (page number
          * limit)
        schema:
          type: integer
          default: 0
          minimum: 0
      - name: limit
        in: query
        description: The number of items to fetch
        schema:
          type: integer
          default: 10
          minimum: 1
          maximum: 100
      - name: sort_direction
        in: query
        description: The sort direction for the results
        schema:
          type: string
          enum:
          - asc
          - desc
          default: desc
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/coin_members_response'
  /coins/{mint}/members/count:
    get:
      tags:
        - coins
      operationId: Get Coin Members Count
      description: 'Gets the total number of Audius users with a non-zero balance of a specific coin'
      parameters:
      - name: mint
        in: path
        description: The mint address of the coin
        required: true
        schema:
          type: string
          example: 9LzCMqDgTKYz9Drzqnpgee3SGa89up3a247ypMj2xrqM
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/coin_members_count_response'
  /coins/volume-leaders:
    get:
      tags:
        - coins
      operationId: Get Volume Leaders
      description: 'Gets top coin<>AUDIO trading addresses by volume'
      parameters:
      - name: from
        in: query
        description: Beginning of time range to query over (RFC3339 format)
        schema:
          type: string
          example: '2006-01-02T15:04:05Z'
          default: '(most recent midnight UTC)'
      - name: to
        in: query
        description: End of time range to query over (RFC3339 format)
        schema:
          type: string
          example: '2006-01-02T15:04:05Z'
          default: '(most recent midnight UTC + 24hrs)'
      - name: offset
        in: query
        description: The number of items to skip. Useful for pagination (page number
          * limit)
        schema:
          type: integer
          default: 0
          minimum: 0
          maximum: 500
      - name: limit
        in: query
        description: The number of items to fetch
        schema:
          type: integer
          default: 20
          minimum: 1
          maximum: 100
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/coins_volume_leaders_response'
        '400':
          description: Bad Request
  /coins/{mint}/redeem:
    get:
      tags:
        - coins
      operationId: Get Coin Redeem Amount
      description: 'Gets the availability indicator for reward codes for a specific coin'
      parameters:
      - name: mint
        in: path
        description: The mint address of the coin
        required: true
        schema:
          type: string
          example: 9LzCMqDgTKYz9Drzqnpgee3SGa89up3a247ypMj2xrqM
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/redeem_amount_response'
    post:
      tags:
        - coins
      operationId: Claim Coin Reward
      description: 'Claims a coin reward for a given mint'
      parameters:
      - name: mint
        in: path
        description: The mint address of the coin
        required: true
        schema:
          type: string
          example: 9LzCMqDgTKYz9Drzqnpgee3SGa89up3a247ypMj2xrqM
      - name: user_id
        in: query
        description: The user ID of the user making the request
        required: true
        schema:
          type: string
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/claim_rewards_response'
        '400':
          description: Bad request - No coin reward available or already claimed
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/reward_code_error_response'
        '500':
          description: Server error
          content: {}
  /coins/{mint}/redeem/{code}:
    get:
      tags:
        - coins
      operationId: Get Reward Code
      description: 'Gets information about a specific reward code for a coin'
      parameters:
      - name: mint
        in: path
        description: The mint address of the coin
        required: true
        schema:
          type: string
          example: 9LzCMqDgTKYz9Drzqnpgee3SGa89up3a247ypMj2xrqM
      - name: code
        in: path
        description: The reward code to retrieve
        required: true
        schema:
          type: string
          example: XYZ123
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/reward_code_response'
        '400':
          description: Bad request - Code is invalid or already used
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/reward_code_error_response'
    post:
      tags:
        - coins
      operationId: Claim Coin Reward Code
      description: 'Claims a coin reward using a given code'
      parameters:
      - name: mint
        in: path
        description: The mint address of the coin
        required: true
        schema:
          type: string
          example: 9LzCMqDgTKYz9Drzqnpgee3SGa89up3a247ypMj2xrqM
      - name: code
        in: path
        description: The reward code to claim
        required: true
        schema:
          type: string
          example: XYZ123
      - name: user_id
        in: query
        description: The user ID of the user making the request
        required: true
        schema:
          type: string
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
               $ref: '#/components/schemas/claim_rewards_response'
        '400':
          description: Bad request - Code is invalid or already used
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/reward_code_error_response'
        '500':
          description: Server error
          content: {}
  /rewards/claim:
    post:
      tags:
      - rewards
      description: Claims all the filtered undisbursed rewards for a user
      operationId: Claim Rewards
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/claim_rewards_request'
      responses:
        "200":
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/claim_rewards_response'
        "400":
          description: Bad request - No rewards to claim or invalid parameters
          content: {}
        "500":
          description: Server error
          content: {}
  /rewards/code:
    post:
      tags:
      - rewards
      description: Creates a new reward code with Solana signature verification
      operationId: Create Reward Code
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/create_reward_code_request'
      responses:
        "201":
          description: Created - Reward code successfully created
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/create_reward_code_response'
        "400":
          description: Bad request - Invalid signature format or missing required fields
          content: {}
        "403":
          description: Forbidden - Signature verification failed
          content: {}
        "500":
          description: Server error
          content: {}

components:
  schemas:
    user_response:
      type: object
      properties:
        data:
          $ref: '#/components/schemas/user'
    user:
      required:
      - album_count
      - erc_wallet
      - followee_count
      - follower_count
      - handle
      - id
      - is_available
      - is_deactivated
      - is_verified
      - name
      - playlist_count
      - repost_count
      - spl_wallet
      - spl_usdc_wallet
      - supporter_count
      - supporting_count
      - total_audio_balance
      - track_count
      - verified_with_instagram
      - verified_with_tiktok
      - verified_with_twitter
      - wallet
      type: object
      properties:
        album_count:
          type: integer
        artist_pick_track_id:
          type: string
        bio:
          type: string
        cover_photo:
          $ref: '#/components/schemas/cover_photo'
        followee_count:
          type: integer
        follower_count:
          type: integer
        handle:
          type: string
        id:
          type: string
        is_verified:
          type: boolean
        twitter_handle:
          type: string
        instagram_handle:
          type: string
        tiktok_handle:
          type: string
        verified_with_twitter:
          type: boolean
        verified_with_instagram:
          type: boolean
        verified_with_tiktok:
          type: boolean
        website:
          type: string
        donation:
          type: string
        location:
          type: string
        name:
          type: string
        playlist_count:
          type: integer
        profile_picture:
          $ref: '#/components/schemas/profile_picture'
        repost_count:
          type: integer
        track_count:
          type: integer
        is_deactivated:
          type: boolean
        is_available:
          type: boolean
        erc_wallet:
          type: string
        spl_wallet:
          type: string
        spl_usdc_wallet:
          type: string
        spl_usdc_payout_wallet:
          type: string
        supporter_count:
          type: integer
        supporting_count:
          type: integer
        total_audio_balance:
          type: integer
        wallet:
          type: string
          description: The user's Ethereum wallet address for their account
    cover_photo:
      type: object
      properties:
        "640x":
          type: string
        "2000x":
          type: string
    profile_picture:
      type: object
      properties:
        "150x150":
          type: string
        "480x480":
          type: string
        "1000x1000":
          type: string
    users_response:
      type: object
      properties:
        data:
          type: array
          items:
            $ref: '#/components/schemas/user'
    user_track_listen_counts_response:
      type: object
      properties:
        data:
          $ref: '#/components/schemas/wild_month_model'
    wild_month_model:
      type: object
      additionalProperties:
        $ref: '#/components/schemas/monthly_aggregate_play'
    monthly_aggregate_play:
      type: object
      properties:
        totalListens:
          type: integer
        trackIds:
          type: array
          items:
            type: integer
        listenCounts:
          type: array
          items:
            $ref: '#/components/schemas/listen_count'
    listen_count:
      type: object
      properties:
        trackId:
          type: integer
        date:
          type: string
        listens:
          type: integer
    tracks_response:
      type: object
      properties:
        data:
          type: array
          items:
            $ref: '#/components/schemas/Track'
    Track:
      required:
      - artwork
      - comment_count
      - duration
      - favorite_count
      - genre
      - id
      - is_downloadable
      - is_original_available
      - permalink
      - play_count
      - repost_count
      - title
      - user
      type: object
      properties:
        artwork:
          $ref: '#/components/schemas/track_artwork'
        description:
          type: string
        genre:
          type: string
        id:
          type: string
        track_cid:
          type: string
        preview_cid:
          type: string
        orig_file_cid:
          type: string
        orig_filename:
          type: string
        is_original_available:
          type: boolean
        mood:
          type: string
        release_date:
          type: string
        isrc:
          type: string
        remix_of:
          $ref: '#/components/schemas/remix_parent'
        repost_count:
          type: integer
        favorite_count:
          type: integer
        comment_count:
          type: integer
        tags:
          type: string
        title:
          type: string
        user:
          $ref: '#/components/schemas/user'
        duration:
          type: integer
        is_downloadable:
          type: boolean
        play_count:
          type: integer
        permalink:
          type: string
        is_streamable:
          type: boolean
        ddex_app:
          type: string
        playlists_containing_track:
          type: array
          items:
            type: integer
        pinned_comment_id:
          type: integer
        album_backlink:
          $ref: '#/components/schemas/album_backlink'
    track_artwork:
      type: object
      properties:
        "150x150":
          type: string
        "480x480":
          type: string
        "1000x1000":
          type: string
    remix_parent:
      type: object
      properties:
        tracks:
          type: array
          items:
            $ref: '#/components/schemas/track_element'
    track_element:
      required:
      - parent_track_id
      type: object
      properties:
        parent_track_id:
          type: string
    album_backlink:
      required:
      - permalink
      - playlist_id
      - playlist_name
      type: object
      properties:
        playlist_id:
          type: integer
        playlist_name:
          type: string
        permalink:
          type: string
    reposts:
      type: object
      properties:
        data:
          type: array
          items:
            $ref: '#/components/schemas/activity'
    track_activity:
      allOf:
      - $ref: '#/components/schemas/activity'
      - required:
        - item
        - item_type
        type: object
        properties:
          item_type:
            type: string
            example: track
            enum:
            - track
          item:
            $ref: '#/components/schemas/Track'
    activity:
      required:
      - class
      - item
      - item_type
      - timestamp
      type: object
      properties:
        timestamp:
          type: string
        item_type:
          type: string
          example: track
          enum:
          - track
          - playlist
        item:
          type: object
          properties: {}
        class:
          type: string
      discriminator:
        propertyName: class
    collection_activity:
      allOf:
      - $ref: '#/components/schemas/activity'
      - required:
        - item
        - item_type
        type: object
        properties:
          timestamp:
            type: string
          item_type:
            type: string
            example: playlist
            enum:
            - playlist
          item:
            $ref: '#/components/schemas/playlist'
    playlist:
      required:
      - access
      - favorite_count
      - id
      - is_album
      - is_image_autogenerated
      - permalink
      - playlist_contents
      - playlist_name
      - repost_count
      - total_play_count
      - track_count
      - user
      type: object
      properties:
        artwork:
          $ref: '#/components/schemas/playlist_artwork'
        description:
          type: string
        permalink:
          type: string
        id:
          type: string
        is_album:
          type: boolean
        is_image_autogenerated:
          type: boolean
        playlist_name:
          type: string
        playlist_contents:
          type: array
          items:
            $ref: '#/components/schemas/playlist_added_timestamp'
        repost_count:
          type: integer
        favorite_count:
          type: integer
        total_play_count:
          type: integer
        user:
          $ref: '#/components/schemas/user'
        ddex_app:
          type: string
        access:
          $ref: '#/components/schemas/access'
        upc:
          type: string
        track_count:
          type: integer
    playlist_artwork:
      type: object
      properties:
        "150x150":
          type: string
        "480x480":
          type: string
        "1000x1000":
          type: string
    playlist_added_timestamp:
      required:
      - metadata_timestamp
      - timestamp
      - track_id
      type: object
      properties:
        metadata_timestamp:
          type: integer
        timestamp:
          type: integer
        track_id:
          type: string
    access:
      required:
      - download
      - stream
      type: object
      properties:
        stream:
          type: boolean
        download:
          type: boolean
    tags_response:
      type: object
      properties:
        data:
          type: array
          items:
            type: string
    favorites_response:
      type: object
      properties:
        data:
          type: array
          items:
            $ref: '#/components/schemas/favorite'
    favorite:
      required:
      - created_at
      - favorite_item_id
      - favorite_type
      - user_id
      type: object
      properties:
        favorite_item_id:
          type: string
        favorite_type:
          type: string
        user_id:
          type: string
        created_at:
          type: string
    playlists_response:
      type: object
      properties:
        data:
          type: array
          items:
            $ref: '#/components/schemas/playlist'
    albums_response:
      type: object
      properties:
        data:
          type: array
          items:
            $ref: '#/components/schemas/playlist'
    user_search:
      type: object
      properties:
        data:
          type: array
          items:
            $ref: '#/components/schemas/user'
    history_response:
      type: object
      properties:
        data:
          type: array
          items:
            $ref: '#/components/schemas/track_activity'
    subscribers_response:
      type: object
      properties:
        data:
          type: array
          items:
            $ref: '#/components/schemas/user'
    followers_response:
      type: object
      properties:
        data:
          type: array
          items:
            $ref: '#/components/schemas/user'
    following_response:
      type: object
      properties:
        data:
          type: array
          items:
            $ref: '#/components/schemas/user'
    mutual_followers_response:
      type: object
      properties:
        data:
          type: array
          items:
            $ref: '#/components/schemas/user'
    related_artist_response:
      type: object
      properties:
        data:
          type: array
          items:
            $ref: '#/components/schemas/user'
    user_ids_addresses_response:
      type: object
      properties:
        data:
          type: array
          items:
            $ref: '#/components/schemas/user_id_address'
    user_id_address:
      type: object
      required:
      - user_id
      - address
      properties:
        user_id:
          type: string
        address:
          type: string
    connected_wallets_response:
      type: object
      properties:
        data:
          $ref: '#/components/schemas/connected_wallets'
    connected_wallets:
      required:
      - erc_wallets
      - spl_wallets
      type: object
      properties:
        erc_wallets:
          type: array
          items:
            type: string
        spl_wallets:
          type: array
          items:
            type: string
    collectibles_response:
      type: object
      properties:
        data:
          $ref: '#/components/schemas/collectibles'
    collectibles:
      type: object
      properties:
        data:
          type: object
          properties: {}
          description: Raw collectibles JSON structure generated by client
    get_challenges:
      type: object
      properties:
        data:
          type: array
          items:
            $ref: '#/components/schemas/challenge_response'
    challenge_response:
      required:
      - amount
      - challenge_id
      - challenge_type
      - disbursed_amount
      - is_active
      - is_complete
      - is_disbursed
      - metadata
      - user_id
      type: object
      properties:
        challenge_id:
          type: string
        user_id:
          type: string
        specifier:
          type: string
        is_complete:
          type: boolean
        is_active:
          type: boolean
        is_disbursed:
          type: boolean
        current_step_count:
          type: integer
        max_steps:
          type: integer
        challenge_type:
          type: string
        amount:
          type: string
        disbursed_amount:
          type: integer
        cooldown_days:
          type: integer
        metadata:
          type: object
          properties: {}
    get_supporters:
      type: object
      properties:
        data:
          type: array
          items:
            $ref: '#/components/schemas/supporter'
    supporter:
      required:
      - amount
      - rank
      - sender
      type: object
      properties:
        rank:
          type: integer
        amount:
          type: string
        sender:
          $ref: '#/components/schemas/user'
    get_supported_users:
      type: object
      properties:
        data:
          type: array
          items:
            $ref: '#/components/schemas/supporting'
    supporting:
      required:
      - amount
      - rank
      - receiver
      type: object
      properties:
        rank:
          type: integer
        amount:
          type: string
        receiver:
          $ref: '#/components/schemas/user'
    verify_token:
      type: object
      properties:
        data:
          $ref: '#/components/schemas/decoded_user_token'
    decoded_user_token:
      required:
      - apiKey
      - email
      - handle
      - iat
      - name
      - sub
      - userId
      - verified
      type: object
      properties:
        apiKey:
          type: string
        userId:
          type: string
        email:
          type: string
        name:
          type: string
        handle:
          type: string
        verified:
          type: boolean
        profilePicture:
          $ref: '#/components/schemas/profilePicture'
        sub:
          type: string
        iat:
          type: string
    profilePicture:
      type: object
      properties:
        "150x150":
          type: string
        "480x480":
          type: string
        "1000x1000":
          type: string
    developer_apps:
      type: object
      properties:
        data:
          type: array
          items:
            $ref: '#/components/schemas/developer_app'
    developer_app:
      required:
      - address
      - name
      - user_id
      type: object
      properties:
        address:
          type: string
        user_id:
          type: string
        name:
          type: string
        description:
          type: string
        image_url:
          type: string
    authorized_apps:
      type: object
      properties:
        data:
          type: array
          items:
            $ref: '#/components/schemas/authorized_app'
    authorized_app:
      required:
      - address
      - grant_created_at
      - grant_updated_at
      - grantor_user_id
      - name
      type: object
      properties:
        address:
          type: string
        name:
          type: string
        description:
          type: string
        image_url:
          type: string
        grantor_user_id:
          type: string
        grant_created_at:
          type: string
        grant_updated_at:
          type: string
    sales_aggregate_response:
      type: object
      properties:
        data:
          type: array
          items:
            $ref: '#/components/schemas/sales_aggregate'
    sales_aggregate:
      required:
      - content_id
      - content_type
      - purchase_count
      type: object
      properties:
        content_type:
          type: string
        content_id:
          type: string
        purchase_count:
          type: integer
    sales_json_response:
      type: object
      properties:
        data:
          $ref: '#/components/schemas/sales_json_content'
    sales_json_content:
      type: object
      properties:
        sales:
          type: array
          items:
            $ref: '#/components/schemas/sale_json'
    sale_json:
      type: object
      properties:
        title:
          type: string
          description: Title of the content (track/album/playlist)
        link:
          type: string
          description: Full URL link to the content
        purchased_by:
          type: string
          description: Name of the buyer
        buyer_user_id:
          type: integer
          description: User ID of the buyer
        date:
          type: string
          description: ISO format date string of when the sale occurred
        sale_price:
          type: number
          description: Base sale price in USDC
        network_fee:
          type: number
          description: Network fee deducted from sale in USDC
        pay_extra:
          type: number
          description: Extra amount paid by buyer in USDC
        total:
          type: number
          description: Total amount received by seller in USDC
        country:
          type: string
          description: Country code where purchase was made
        encrypted_email:
          type: string
          description: Encrypted email of buyer if available
        encrypted_key:
          type: string
          description: Encrypted key for decrypting the buyer's email
        is_initial:
          type: boolean
          description: Whether this is an initial encryption from the backfill
        pubkey_base64:
          type: string
          description: Base64 encoded public key of the buyer
    remixers_response:
      type: object
      properties:
        data:
          type: array
          items:
            $ref: '#/components/schemas/user'
    purchasers_response:
      type: object
      properties:
        data:
          type: array
          items:
            $ref: '#/components/schemas/user'
    user_tracks_remixed_response:
      type: object
      properties:
        data:
          type: array
          items:
            $ref: '#/components/schemas/remixed_track_aggregate'
    remixed_track_aggregate:
      required:
      - remix_count
      - title
      - track_id
      type: object
      properties:
        track_id:
          type: string
        title:
          type: string
        remix_count:
          type: integer
    email_access_response:
      type: object
      properties:
        data:
          $ref: '#/components/schemas/email_access'
    email_access:
      required:
      - created_at
      - email_owner_user_id
      - encrypted_key
      - grantor_user_id
      - id
      - is_initial
      - receiving_user_id
      - updated_at
      type: object
      properties:
        id:
          type: integer
        email_owner_user_id:
          type: integer
        receiving_user_id:
          type: integer
        grantor_user_id:
          type: integer
        encrypted_key:
          type: string
        is_initial:
          type: boolean
        created_at:
          type: string
        updated_at:
          type: string
    user_comments_response:
      type: object
      properties:
        data:
          type: array
          items:
            $ref: '#/components/schemas/comment'
    comment:
      required:
      - created_at
      - entity_id
      - entity_type
      - id
      - is_edited
      - message
      - react_count
      - reply_count
      type: object
      properties:
        id:
          type: string
        entity_id:
          type: string
        entity_type:
          type: string
        user_id:
          type: string
        message:
          type: string
        mentions:
          type: array
          items:
            $ref: '#/components/schemas/comment_mention'
        track_timestamp_s:
          type: integer
        react_count:
          type: integer
        reply_count:
          type: integer
        is_edited:
          type: boolean
        is_current_user_reacted:
          type: boolean
        is_artist_reacted:
          type: boolean
        is_tombstone:
          type: boolean
        is_muted:
          type: boolean
        created_at:
          type: string
        updated_at:
          type: string
        replies:
          type: array
          items:
            $ref: '#/components/schemas/reply_comment'
        parent_comment_id:
          type: integer
    comment_mention:
      required:
      - handle
      - user_id
      type: object
      properties:
        user_id:
          type: integer
        handle:
          type: string
    reply_comment:
      required:
      - created_at
      - entity_id
      - entity_type
      - id
      - is_edited
      - message
      - react_count
      - user_id
      type: object
      properties:
        id:
          type: string
        entity_id:
          type: string
        entity_type:
          type: string
        user_id:
          type: string
        message:
          type: string
        mentions:
          type: array
          items:
            $ref: '#/components/schemas/comment_mention'
        track_timestamp_s:
          type: integer
        react_count:
          type: integer
        is_edited:
          type: boolean
        is_current_user_reacted:
          type: boolean
        is_artist_reacted:
          type: boolean
        created_at:
          type: string
        updated_at:
          type: string
        parent_comment_id:
          type: integer
    playlist_response:
      type: object
      properties:
        data:
          type: array
          items:
            $ref: '#/components/schemas/playlist'
    playlist_tracks_response:
      type: object
      properties:
        data:
          type: array
          items:
            $ref: '#/components/schemas/Track'
    playlist_search_result:
      type: object
      properties:
        data:
          type: array
          items:
            $ref: '#/components/schemas/playlist'
    trending_playlists_response:
      type: object
      properties:
        data:
          type: array
          items:
            $ref: '#/components/schemas/playlist'
    access_info_response:
      type: object
      properties:
        data:
          $ref: '#/components/schemas/track_access_info'
    track_access_info:
      required:
      - blocknumber
      - user_id
      type: object
      properties:
        access:
          type: object
          description: Describes what access the given user has
          allOf:
          - $ref: '#/components/schemas/access'
        user_id:
          type: string
          description: The user ID of the owner of this track
        blocknumber:
          type: integer
          description: The blocknumber this track was last updated
        is_stream_gated:
          type: boolean
          description: Whether or not the owner has restricted streaming behind an
            access gate
        stream_conditions:
          type: object
          description: How to unlock stream access to the track
          allOf:
          - $ref: '#/components/schemas/extended_access_gate'
        is_download_gated:
          type: boolean
          description: Whether or not the owner has restricted downloading behind
            an access gate
        download_conditions:
          type: object
          description: How to unlock the track download
          allOf:
          - $ref: '#/components/schemas/extended_access_gate'
    extended_access_gate:
      oneOf:
      - $ref: '#/components/schemas/tip_gate'
      - $ref: '#/components/schemas/follow_gate'
      - $ref: '#/components/schemas/extended_purchase_gate'
      - $ref: '#/components/schemas/nft_gate'
      - $ref: '#/components/schemas/token_gate'
    tip_gate:
      required:
      - tip_user_id
      type: object
      properties:
        tip_user_id:
          type: integer
          description: Must tip the given user ID to unlock
    follow_gate:
      required:
      - follow_user_id
      type: object
      properties:
        follow_user_id:
          type: integer
          description: Must follow the given user ID to unlock
    token_gate:
      required:
      - token_gate
      type: object
      properties:
        token_gate:
          type: object
          description: Must hold an NFT of the given collection to unlock
          allOf:
          - $ref: '#/components/schemas/extended_token_gate'
    extended_token_gate:
      required:
      - token_mint
      - token_amount
      type: object
      properties:
        token_mint:
          type: string
          description: The mint of the token needed to unlock
        token_amount:
          type: integer
          description: The amount of the token needed to unlock
    extended_purchase_gate:
      required:
      - usdc_purchase
      type: object
      properties:
        usdc_purchase:
          type: object
          description: Must pay the total price and split to the given addresses to
            unlock
          allOf:
          - $ref: '#/components/schemas/extended_usdc_gate'
    extended_usdc_gate:
      required:
      - price
      - splits
      type: object
      properties:
        price:
          type: integer
        splits:
          type: array
          items:
            $ref: '#/components/schemas/extended_payment_split'
    extended_payment_split:
      required:
      - amount
      - payout_wallet
      - percentage
      type: object
      properties:
        user_id:
          type: integer
        percentage:
          type: number
        eth_wallet:
          type: string
        payout_wallet:
          type: string
        amount:
          type: integer
    nft_gate:
      required:
      - nft_collection
      type: object
      properties:
        nft_collection:
          type: object
          description: Must hold an NFT of the given collection to unlock
          allOf:
          - $ref: '#/components/schemas/nft_collection'
    nft_collection:
      required:
      - address
      - chain
      - name
      type: object
      properties:
        chain:
          type: string
          example: eth
          enum:
          - eth
          - sol
        standard:
          type: string
          example: ERC721
          enum:
          - ERC721
          - ERC1155
        address:
          type: string
        name:
          type: string
        imageUrl:
          type: string
        externalLink:
          type: string
    track_response:
      type: object
      properties:
        data:
          $ref: '#/components/schemas/Track'
    track_inspect:
      type: object
      properties:
        data:
          $ref: '#/components/schemas/blob_info'
    blob_info:
      required:
      - content_type
      - size
      type: object
      properties:
        size:
          type: integer
        content_type:
          type: string
    track_inspect_list:
      type: object
      properties:
        data:
          type: array
          items:
            $ref: '#/components/schemas/blob_info'
    track_comments_response:
      type: object
      properties:
        data:
          type: array
          items:
            $ref: '#/components/schemas/comment'
    track_comment_count_response:
      type: object
      properties:
        data:
          type: integer
    track_comment_notification_response:
      type: object
      properties:
        data:
          $ref: '#/components/schemas/comment_notification_setting'
    comment_notification_setting:
      required:
      - is_muted
      type: object
      properties:
        is_muted:
          type: boolean
    stream_url_response:
      required:
      - data
      type: object
      properties:
        data:
          type: string
    track_search:
      type: object
      properties:
        data:
          type: array
          items:
            $ref: '#/components/schemas/Track'
    top_listener:
      type: object
      properties:
        data:
          type: array
          items:
            $ref: '#/components/schemas/top_listener'
    stems_response:
      type: object
      properties:
        data:
          type: array
          items:
            $ref: '#/components/schemas/stem'
    stem:
      required:
      - blocknumber
      - category
      - cid
      - id
      - orig_filename
      - parent_id
      - user_id
      type: object
      properties:
        id:
          type: string
        parent_id:
          type: string
        category:
          type: string
        cid:
          type: string
        user_id:
          type: string
        blocknumber:
          type: integer
        orig_filename:
          type: string
    undisbursed_challenges:
      type: object
      properties:
        data:
          type: array
          items:
            $ref: '#/components/schemas/undisbursed_challenge'
    undisbursed_challenge:
      required:
      - amount
      - challenge_id
      - completed_at
      - completed_blocknumber
      - created_at
      - handle
      - specifier
      - user_id
      - wallet
      type: object
      properties:
        challenge_id:
          type: string
        user_id:
          type: string
        specifier:
          type: string
        amount:
          type: string
        completed_blocknumber:
          type: integer
        handle:
          type: string
        wallet:
          type: string
        created_at:
          type: string
        completed_at:
          type: string
        cooldown_days:
          type: integer
    get_tips_response:
      type: object
      properties:
        data:
          type: array
          items:
            $ref: '#/components/schemas/tip'
    tip:
      required:
      - amount
      - created_at
      type: object
      properties:
        amount:
          type: string
        sender:
          $ref: '#/components/schemas/user'
        receiver:
          $ref: '#/components/schemas/user'
        created_at:
          type: string
    developer_app_response:
      type: object
      properties:
        data:
          $ref: '#/components/schemas/developer_app'
    dashboard_wallet_users_response:
      type: object
      properties:
        data:
          type: array
          items:
            $ref: '#/components/schemas/dashboard_wallet_user'
    dashboard_wallet_user:
      required:
      - user
      - wallet
      type: object
      properties:
        wallet:
          type: string
        user:
          $ref: '#/components/schemas/user'
    comment_response:
      type: object
      properties:
        data:
          type: array
          items:
            $ref: '#/components/schemas/comment'
    comment_replies_response:
      type: object
      properties:
        data:
          type: array
          items:
            $ref: '#/components/schemas/reply_comment'
    unclaimed_id_response:
      type: object
      properties:
        data:
          type: string
    events_response:
      type: object
      properties:
        data:
          type: array
          items:
            $ref: '#/components/schemas/event'
    event:
      required:
      - created_at
      - event_data
      - event_id
      - event_type
      - updated_at
      - user_id
      type: object
      properties:
        event_id:
          type: string
        event_type:
          type: string
          example: remix_contest
          enum:
          - remix_contest
          - live_event
          - new_release
        user_id:
          type: string
        entity_type:
          type: string
          example: track
          enum:
          - track
          - collection
          - user
        entity_id:
          type: string
        end_date:
          type: string
        is_deleted:
          type: boolean
        created_at:
          type: string
        updated_at:
          type: string
        event_data:
          type: object
          properties: {}
    best_selling_response:
      type: object
      properties:
        data:
          type: array
          items:
            $ref: '#/components/schemas/best_selling_item'
    best_selling_item:
      required:
      - content_id
      - owner_id
      - title
      type: object
      properties:
        content_id:
          type: string
        content_type:
          type: string
          example: track
          enum:
          - track
          - album
        title:
          type: string
        owner_id:
          type: string
    coin:
      type: object
      required:
        - name
        - mint
        - decimals
        - owner_id
        - has_discord
        - created_at
        - marketCap
        - fdv
        - liquidity
        - lastTradeUnixTime
        - lastTradeHumanTime
        - price
        - history24hPrice
        - priceChange24hPercent
        - uniqueWallet24h
        - uniqueWalletHistory24h
        - uniqueWallet24hChangePercent
        - totalSupply
        - circulatingSupply
        - holder
        - trade24h
        - tradeHistory24h
        - trade24hChangePercent
        - sell24h
        - sellHistory24h
        - sell24hChangePercent
        - buy24h
        - buyHistory24h
        - buy24hChangePercent
        - v24h
        - v24hUSD
        - vHistory24h
        - totalVolume
        - totalVolumeUSD
        - volumeBuy
        - volumeBuyUSD
        - volumeSell
        - volumeSellUSD
        - totalTrade
        - buy
        - sell
        - dynamicBondingCurve
      properties:
        name:
          type: string
          description: The coin name
          example: "Bonk Inu"
        ticker:
          type: string
          description: The coin symbol
          example: "$BONK"
        mint:
          type: string
          description: The coin mint address
          example: "DezXAZ8z7PnrnRJjz3wXBoRgixCa6xjnB7YaB1pPB263"
        decimals:
          type: integer
          description: The number of decimals for the coin
          example: 5
        owner_id:
          type: string
          description: The ID of the user associated with the coin
          example: "7eP5n"
        escrow_recipient:
          type: string
          description: The escrow recipient address for custom-created coins without DBCs
          example: "DezXAZ8z7PnrnRJjz3wXBoRgixCa6xjnB7YaB1pPB263"
        logo_uri:
          type: string
          description: URL to the coin's logo image
          example: "https://arweave.net/hQiPZOsRZXGXBJd_82PhVdlM_hACsT_q6wqwf5cSY7I"
        banner_image_url:
          type: string
          description: URL to the coin's banner image
          example: "https://example.com/banner.png"
        description:
          type: string
          description: A longform description about the coin
          example: "The Official Bonk Inu token\nLorem ipsum dolor sit amet, consectetur adipiscing elit."
        website:
          type: string
          description: The official website for the coin
          example: "https://www.bonkcoin.com/"
        link_1:
          type: string
          description: Generic link URL for the coin
          example: "https://x.com/bear_token"
        link_2:
          type: string
          description: Generic link URL for the coin
          example: "https://instagram.com/bear_token"
        link_3:
          type: string
          description: Generic link URL for the coin
          example: "https://tiktok.com/@bear_token"
        link_4:
          type: string
          description: Generic link URL for the coin
          example: "https://bear-token.com"
        has_discord:
          type: boolean
          description: Whether the coin has a Discord server
          example: true
        created_at:
          type: string
          description: The date and time when the coin was added to Audius.
          example: "2023-10-01T12:00:00Z"
        address:
          type: string
          description: The SPL token mint address
          example: "DezXAZ8z7PnrnRJjz3wXBoRgixCa6xjnB7YaB1pPB263"
        symbol:
          type: string
          description: The token symbol
          example: "BONK"
        marketCap:
          type: number
          description: Market capitalization in USD
          example: 2625779824.994664
        fdv:
          type: number
          description: Fully diluted valuation in USD
          example: 2625779824.994664
        extensions:
          type: object
          description: Token metadata and links
          properties:
            coingeckoId:
              type: string
              description: CoinGecko ID
              example: "bonk"
            description:
              type: string
              description: Token description
              example: "The Official Bonk Inu token"
            twitter:
              type: string
              description: Twitter URL
              example: "https://twitter.com/bonk_inu"
            website:
              type: string
              description: Website URL
              example: "https://www.bonkcoin.com/"
            discord:
              type: string
              description: Discord invite URL
              example: "https://discord.gg/ubqvDDFUhf"
        liquidity:
          type: number
          description: Current liquidity in USD
          example: 18977326.389274083
        lastTradeUnixTime:
          type: integer
          description: Unix timestamp of the last trade
          example: 1752620592
        lastTradeHumanTime:
          type: string
          description: ISO8601 time of the last trade
          example: "2025-07-15T23:03:12"
        price:
          type: number
          description: Current price in USD
          example: 0.000029571022098881748
        history24hPrice:
          type: number
          description: Price 24 hours ago in USD
          example: 0.000027195701160436288
        priceChange24hPercent:
          type: number
          description: 24h price change in percent
          example: 8.73417796596848
        uniqueWallet24h:
          type: integer
          description: Unique wallets traded in last 24h
          example: 20242
        uniqueWalletHistory24h:
          type: integer
          description: Unique wallets traded in previous 24h
          example: 21155
        uniqueWallet24hChangePercent:
          type: number
          description: 24h change in unique wallets (percent)
          example: -4.315764594658473
        totalSupply:
          type: number
          description: Total supply of the token
          example: 88795707372386.03
        circulatingSupply:
          type: number
          description: Circulating supply of the token
          example: 88795707372386.03
        holder:
          type: integer
          description: Number of holders
          example: 957291
        trade24h:
          type: integer
          description: Number of trades in last 24h
          example: 449987
        tradeHistory24h:
          type: integer
          description: Number of trades in previous 24h
          example: 390400
        trade24hChangePercent:
          type: number
          description: 24h change in trade count (percent)
          example: 15.263063524590164
        sell24h:
          type: integer
          description: Number of sell trades in last 24h
          example: 223845
        sellHistory24h:
          type: integer
          description: Number of sell trades in previous 24h
          example: 191979
        sell24hChangePercent:
          type: number
          description: 24h change in sell trades (percent)
          example: 16.598690481771445
        buy24h:
          type: integer
          description: Number of buy trades in last 24h
          example: 226142
        buyHistory24h:
          type: integer
          description: Number of buy trades in previous 24h
          example: 198421
        buy24hChangePercent:
          type: number
          description: 24h change in buy trades (percent)
          example: 13.970799461750522
        v24h:
          type: number
          description: 24h trading volume (token units)
          example: 2456470915352.043
        v24hUSD:
          type: number
          description: 24h trading volume in USD
          example: 69961943.60091284
        vHistory24h:
          type: number
          description: Previous 24h trading volume (token units)
          example: 1849367819551.6223
        vHistory24hUSD:
          type: number
          description: Previous 24h trading volume in USD
          example: 49529721.91224754
        v24hChangePercent:
          type: number
          description: 24h change in volume (percent)
          example: 32.82760137718911
        vBuy24h:
          type: number
          description: 24h buy volume (token units)
          example: 1267704208631.2197
        vBuy24hUSD:
          type: number
          description: 24h buy volume in USD
          example: 35985775.23314727
        vBuyHistory24h:
          type: number
          description: Previous 24h buy volume (token units)
          example: 926415751610.5529
        vBuyHistory24hUSD:
          type: number
          description: Previous 24h buy volume in USD
          example: 24916558.31987226
        vBuy24hChangePercent:
          type: number
          description: 24h change in buy volume (percent)
          example: 36.83966474310746
        vSell24h:
          type: number
          description: 24h sell volume (token units)
          example: 1188766706720.8232
        vSell24hUSD:
          type: number
          description: 24h sell volume in USD
          example: 33976168.367765576
        vSellHistory24h:
          type: number
          description: Previous 24h sell volume (token units)
          example: 922952067941.0695
        vSellHistory24hUSD:
          type: number
          description: Previous 24h sell volume in USD
          example: 24613163.592375275
        vSell24hChangePercent:
          type: number
          description: 24h change in sell volume (percent)
          example: 28.800481413161105
        numberMarkets:
          type: integer
          description: Number of markets the token is traded on
          example: 317
        totalVolume:
          type: number
          description: Total volume of coin traded (all time)
          example: 158766463.26959822
        totalVolumeUSD:
          type: number
          description: Total volume of coin traded in USD (all time)
          example: 20188521260.405678
        volumeBuy:
          type: number
          description: Total volume bought (all time)
          example: 78227859.16098201
        volumeBuyUSD:
          type: number
          description: Total volume bought in USD (all time)
          example: 20188521260.405678
        volumeSell:
          type: number
          description: Total volume sold (all time)
          example: 80538604.1086162
        volumeSellUSD:
          type: number
          description: Total volume sold in USD (all time)
          example: 20188521260.405678
        totalTrade:
          type: integer
          description: Total number of trades (all time)
          example: 258522892
        buy:
          type: integer
          description: Total number of buys (all time)
          example: 87829497
        sell:
          type: integer
          description: Total number of sells (all time)
          example: 170693395
        dynamicBondingCurve:
          type: object
          description: Information about the dynamic bonding curve if one exists for the Coin
          required:
            - address
            - price
            - priceUSD
            - curveProgress
            - creatorQuoteFee
            - totalTradingQuoteFee
            - creatorWalletAddress
          properties:
            address:
              type: string
              description: Address of the bonding curve pool
              example: "2AAsAwNPTNBk5N466xyPiwqdgbc5WLbDTdnn9gVuDKaN"
            price:
              type: number
              description: Current price in the pool's quote token (e.g., AUDIO)
              example: 0.0028402095736478586927
            priceUSD:
              type: number
              description: Current price in USD
              example: 0.000029571022098881748
            curveProgress:
              type: number
              description: Progress along the bonding curve (0.0 - 1.0)
              example: 0.75
            isMigrated:
              type: boolean
              description: Whether the bonding curve has been migrated
              example: false
            creatorQuoteFee:
              type: number
              description: Creator quote fee for the bonding curve
              example: 0.05
            totalTradingQuoteFee:
              type: number
              description: Total trading quote fee accumulated
              example: 0.001
            creatorWalletAddress:
              type: string
              description: Address of the pool creator's wallet
              example: "2AAsAwNPTNBk5N466xyPiwqdgbc5WLbDTdnn9gVuDKaN"
        artist_fees:
          type: object
          description: Information about the fees earned by the artist on the coin's trading.
          properties:
            unclaimed_fees:
              type: number
              description: Total unclaimed fees from all sources, in $AUDIO.
              example: 2000000000
            total_fees:
              type: number
              description: Total fees earned from all sources, in $AUDIO.
              example: 4000000000
        artist_locker:
          type: object
          description: Information about the artist locker associated with the coin.
          properties:
            address:
              type: string
              description: The address of the artist locker.
              example: "9bC8rd4qy4EQTHjvCoKFttk5W5km4tUFcVfASCDGro84"
            locked:
              type: number
              description: The amount currently locked in the artist locker.
              example: 499178082191780800
            unlocked:
              type: number
              description: The amount currently unlocked in the artist locker.
              example: 821917808219178
            claimable:
              type: number
              description: The amount claimable from the artist locker. Eg. the amount unlocked that hasn't already been claimed.
              example: 821917808219178
        reward_pool:
          type: object
          description: Information about the reward pool associated with the coin.
          properties:
            address:
              type: string
              description: The address of the reward pool.
              example: "6qUSoiMbTEZ4hpN3kuk5bjCRgcTJgUfXftVfTH1CSvZE"
            balance:
              type: number
              description: The current balance of the reward pool.
              example: 1000000000
    coin_response:
      type: object
      properties:
        data:
          $ref: '#/components/schemas/coin'
    coins_response:
      type: object
      required:
        - data
      properties:
        data:
          type: array
          items:
            $ref: '#/components/schemas/coin'
    create_coin_request:
      type: object
      required:
        - mint
        - ticker
        - decimals
        - name
      properties:
        mint:
          type: string
          description: The mint address of the coin
          example: "bearR26zyyB3fNQm5wWv1ZfN8MPQDUMwaAuoG79b1Yj"
        ticker:
          type: string
          description: The coin symbol/ticker
          example: "BEAR"
        decimals:
          type: integer
          description: The number of decimals for the coin (0-18)
          minimum: 0
          maximum: 18
          example: 9
        name:
          type: string
          description: The coin name
          example: "BEAR"
        logo_uri:
          type: string
          description: The URI for the coin's logo image
          example: "https://example.com/logo.png"
        banner_image_url:
          type: string
          description: The URI for the coin's banner image
          example: "https://example.com/banner.png"
          format: uri
        description:
          type: string
          description: The description of the coin
          example: "A majestic bear token for wildlife conservation"
        link_1:
          type: string
          description: Generic link URL for the coin
          example: "https://x.com/bear_token"
          format: uri
        link_2:
          type: string
          description: Generic link URL for the coin
          example: "https://instagram.com/bear_token"
          format: uri
        link_3:
          type: string
          description: Generic link URL for the coin
          example: "https://tiktok.com/@bear_token"
          format: uri
        link_4:
          type: string
          description: Generic link URL for the coin
          example: "https://bear-token.com"
          format: uri
    create_coin_response:
      type: object
      properties:
        data:
          type: object
          required:
            - mint
            - ticker
            - user_id
            - decimals
            - name
            - created_at
          properties:
            mint:
              type: string
              description: The mint address of the coin
              example: "bearR26zyyB3fNQm5wWv1ZfN8MPQDUMwaAuoG79b1Yj"
            ticker:
              type: string
              description: The coin symbol/ticker
              example: "BEAR"
            user_id:
              type: integer
              description: The user ID who created the coin
              example: 1
            decimals:
              type: integer
              description: The number of decimals for the coin
              example: 9
            name:
              type: string
              description: The coin name
              example: "BEAR"
            logo_uri:
              type: string
              description: The URI for the coin's logo image
              example: "https://example.com/logo.png"
            banner_image_url:
              type: string
              description: The URI for the coin's banner image
              example: "https://example.com/banner.png"
            description:
              type: string
              description: The description of the coin
              example: "A majestic bear token for wildlife conservation"
            link_1:
              type: string
              description: Generic link URL for the coin
              example: "https://x.com/bear_token"
            link_2:
              type: string
              description: Generic link URL for the coin
              example: "https://instagram.com/bear_token"
            link_3:
              type: string
              description: Generic link URL for the coin
              example: "https://tiktok.com/@bear_token"
            link_4:
              type: string
              description: Generic link URL for the coin
              example: "https://bear-token.com"
            created_at:
              type: string
              format: date-time
              description: The date and time when the coin was created
              example: "2024-01-15T10:30:00Z"
    update_coin_request:
      type: object
      description: Request body for updating coin information
      properties:
        description:
          type: string
          description: The description of the coin (max 2500 characters)
          example: "Updated description for the bear token"
          maxLength: 2500
        banner_image_url:
          type: string
          description: URL for the coin's banner image
          example: "https://example.com/banner.png"
          format: uri
        link_1:
          type: string
          description: Generic link URL for the coin
          example: "https://x.com/bear_token"
          format: uri
        link_2:
          type: string
          description: Generic link URL for the coin
          example: "https://instagram.com/bear_token"
          format: uri
        link_3:
          type: string
          description: Generic link URL for the coin
          example: "https://tiktok.com/@bear_token"
          format: uri
        link_4:
          type: string
          description: Generic link URL for the coin
          example: "https://bear-token.com"
          format: uri
    update_coin_response:
      type: object
      properties:
        success:
          type: boolean
          description: Indicates if the update was successful
          example: true
    coin_insights:
      type: object
      description: |
        Additional token information from Birdeye's defi token overview API.
        Includes price, volume, supply, market cap, and other on-chain and market data.
      required:
        - mint
        - marketCap
        - fdv
        - liquidity
        - lastTradeUnixTime
        - lastTradeHumanTime
        - price
        - history24hPrice
        - priceChange24hPercent
        - uniqueWallet24h
        - uniqueWalletHistory24h
        - uniqueWallet24hChangePercent
        - totalSupply
        - circulatingSupply
        - holder
        - trade24h
        - tradeHistory24h
        - trade24hChangePercent
        - sell24h
        - sellHistory24h
        - sell24hChangePercent
        - buy24h
        - buyHistory24h
        - buy24hChangePercent
        - v24h
        - v24hUSD
        - vHistory24h
        - totalVolume
        - totalVolumeUSD
        - volumeBuy
        - volumeBuyUSD
        - volumeSell
        - volumeSellUSD
        - totalTrade
        - buy
        - sell
        - dynamicBondingCurve
      properties:
        address:
          type: string
          description: The SPL token mint address
          example: "DezXAZ8z7PnrnRJjz3wXBoRgixCa6xjnB7YaB1pPB263"
        decimals:
          type: integer
          description: Number of decimals for the token
          example: 5
        symbol:
          type: string
          description: The token symbol
          example: "BONK"
        name:
          type: string
          description: The token name
          example: "Bonk"
        marketCap:
          type: number
          description: Market capitalization in USD
          example: 2625779824.994664
        fdv:
          type: number
          description: Fully diluted valuation in USD
          example: 2625779824.994664
        extensions:
          type: object
          description: Token metadata and links
          properties:
            coingeckoId:
              type: string
              description: CoinGecko ID
              example: "bonk"
            description:
              type: string
              description: Token description
              example: "The Official Bonk Inu token"
            twitter:
              type: string
              description: Twitter URL
              example: "https://twitter.com/bonk_inu"
            website:
              type: string
              description: Website URL
              example: "https://www.bonkcoin.com/"
            discord:
              type: string
              description: Discord invite URL
              example: "https://discord.gg/ubqvDDFUhf"
        liquidity:
          type: number
          description: Current liquidity in USD
          example: 18977326.389274083
        lastTradeUnixTime:
          type: integer
          description: Unix timestamp of the last trade
          example: 1752620592
        lastTradeHumanTime:
          type: string
          description: ISO8601 time of the last trade
          example: "2025-07-15T23:03:12"
        price:
          type: number
          description: Current price in USD
          example: 0.000029571022098881748
        history24hPrice:
          type: number
          description: Price 24 hours ago in USD
          example: 0.000027195701160436288
        priceChange24hPercent:
          type: number
          description: 24h price change in percent
          example: 8.73417796596848
        uniqueWallet24h:
          type: integer
          description: Unique wallets traded in last 24h
          example: 20242
        uniqueWalletHistory24h:
          type: integer
          description: Unique wallets traded in previous 24h
          example: 21155
        uniqueWallet24hChangePercent:
          type: number
          description: 24h change in unique wallets (percent)
          example: -4.315764594658473
        totalSupply:
          type: number
          description: Total supply of the token
          example: 88795707372386.03
        circulatingSupply:
          type: number
          description: Circulating supply of the token
          example: 88795707372386.03
        holder:
          type: integer
          description: Number of holders
          example: 957291
        trade24h:
          type: integer
          description: Number of trades in last 24h
          example: 449987
        tradeHistory24h:
          type: integer
          description: Number of trades in previous 24h
          example: 390400
        trade24hChangePercent:
          type: number
          description: 24h change in trade count (percent)
          example: 15.263063524590164
        sell24h:
          type: integer
          description: Number of sell trades in last 24h
          example: 223845
        sellHistory24h:
          type: integer
          description: Number of sell trades in previous 24h
          example: 191979
        sell24hChangePercent:
          type: number
          description: 24h change in sell trades (percent)
          example: 16.598690481771445
        buy24h:
          type: integer
          description: Number of buy trades in last 24h
          example: 226142
        buyHistory24h:
          type: integer
          description: Number of buy trades in previous 24h
          example: 198421
        buy24hChangePercent:
          type: number
          description: 24h change in buy trades (percent)
          example: 13.970799461750522
        v24h:
          type: number
          description: 24h trading volume (token units)
          example: 2456470915352.043
        v24hUSD:
          type: number
          description: 24h trading volume in USD
          example: 69961943.60091284
        vHistory24h:
          type: number
          description: Previous 24h trading volume (token units)
          example: 1849367819551.6223
        vHistory24hUSD:
          type: number
          description: Previous 24h trading volume in USD
          example: 49529721.91224754
        v24hChangePercent:
          type: number
          description: 24h change in volume (percent)
          example: 32.82760137718911
        vBuy24h:
          type: number
          description: 24h buy volume (token units)
          example: 1267704208631.2197
        vBuy24hUSD:
          type: number
          description: 24h buy volume in USD
          example: 35985775.23314727
        vBuyHistory24h:
          type: number
          description: Previous 24h buy volume (token units)
          example: 926415751610.5529
        vBuyHistory24hUSD:
          type: number
          description: Previous 24h buy volume in USD
          example: 24916558.31987226
        vBuy24hChangePercent:
          type: number
          description: 24h change in buy volume (percent)
          example: 36.83966474310746
        vSell24h:
          type: number
          description: 24h sell volume (token units)
          example: 1188766706720.8232
        vSell24hUSD:
          type: number
          description: 24h sell volume in USD
          example: 33976168.367765576
        vSellHistory24h:
          type: number
          description: Previous 24h sell volume (token units)
          example: 922952067941.0695
        vSellHistory24hUSD:
          type: number
          description: Previous 24h sell volume in USD
          example: 24613163.592375275
        vSell24hChangePercent:
          type: number
          description: 24h change in sell volume (percent)
          example: 28.800481413161105
        numberMarkets:
          type: integer
          description: Number of markets the token is traded on
          example: 317
        totalVolume:
          type: number
          description: Total volume of coin traded (all time)
          example: 158766463.26959822
        totalVolumeUSD:
          type: number
          description: Total volume of coin traded in USD (all time)
          example: 20188521260.405678
        volumeBuy:
          type: number
          description: Total volume bought (all time)
          example: 78227859.16098201
        volumeBuyUSD:
          type: number
          description: Total volume bought in USD (all time)
          example: 20188521260.405678
        volumeSell:
          type: number
          description: Total volume sold (all time)
          example: 80538604.1086162
        volumeSellUSD:
          type: number
          description: Total volume sold in USD (all time)
          example: 20188521260.405678
        totalTrade:
          type: integer
          description: Total number of trades (all time)
          example: 258522892
        buy:
          type: integer
          description: Total number of buys (all time)
          example: 87829497
        sell:
          type: integer
          description: Total number of sells (all time)
          example: 170693395
        dynamicBondingCurve:
          type: object
          description: Information about the dynamic bonding curve if one exists for the Coin
          required:
            - address
            - price
            - priceUSD
            - curveProgress
            - creatorQuoteFee
            - totalTradingQuoteFee
            - creatorWalletAddress
          properties:
            address:
              type: string
              description: Address of the bonding curve pool
              example: "2AAsAwNPTNBk5N466xyPiwqdgbc5WLbDTdnn9gVuDKaN"
            price:
              type: number
              description: Current price in the pool's quote token (e.g., AUDIO)
              example: 0.0028402095736478586927
            priceUSD:
              type: number
              description: Current price in USD
              example: 0.000029571022098881748
            curveProgress:
              type: number
              description: Progress along the bonding curve (0.0 - 1.0)
              example: 0.75
            isMigrated:
              type: boolean
              description: Whether the bonding curve has been migrated
              example: false
            creatorQuoteFee:
              type: number
              description: Creator quote fee for the bonding curve
              example: 0.05
            totalTradingQuoteFee:
              type: number
              description: Total trading quote fee accumulated
              example: 0.001
            creatorWalletAddress:
              type: string
              description: Address of the pool creator's wallet
              example: "2AAsAwNPTNBk5N466xyPiwqdgbc5WLbDTdnn9gVuDKaN"
    coin_insights_response:
      type: object
      properties:
        data:
          $ref: '#/components/schemas/coin_insights'
    coin_member:
      type: object
      required:
        - balance
        - user_id
      properties:
        balance:
          type: integer
          description: The user's balance of the specific coin (in wei)
          example: 100000
        user_id:
          type: string
          description: The ID of the user with a non-zero balance
          example: "7eP5n"
    coin_members_response:
      type: object
      required:
        - data
      properties:
        data:
          type: array
          items:
            $ref: '#/components/schemas/coin_member'
    coin_members_count_response:
      type: object
      required:
        - data
      properties:
        data:
          type: integer
          description: The total number of users with a non-zero balance of the specific coin
          example: 42
    coins_volume_leaders_response:
      type: object
      required:
        - data
      properties:
        data:
          type: array
          items:
            type: object
            required:
              - address
              - volume
            properties:
              address:
                type: string
              volume:
                type: number
              user:
                $ref: '#/components/schemas/user'
    user_coin:
      required:
        - mint
        - ticker
        - decimals
        - owner_id
        - balance
        - has_discord
        - balance_usd
      type: object
      properties:
        mint:
          type: string
          description: The coin mint address
          example: "9LzCMqDgTKYz9Drzqnpgee3SGa89up3a247ypMj2xrqM"
        ticker:
          type: string
          description: The coin symbol
          example: "$AUDIO"
        decimals:
          type: integer
          description: The number of decimals for the coin
          example: 8
        owner_id:
          type: string
          description: The ID of the user associated with the coin
          example: "7eP5n"
        logo_uri:
          type: string
          nullable: true
          description: URL to the coin's logo image
          example: "https://example.com/logo.png"
        banner_image_url:
          type: string
          nullable: true
          description: URL to the coin's banner image
          example: "https://example.com/banner.png"
        has_discord:
          type: boolean
          description: Whether the coin has a Discord server
          example: true
        balance:
          type: integer
          description: The balance of the coin in the user's account (in wei)
          example: 1000000000
        balance_usd:
          type: number
          description: The balance of the coin in the user's account in USD
          example: 1.23
    user_coins_response:
      type: object
      required:
        - data
      properties:
        data:
          type: array
          items:
            $ref: '#/components/schemas/user_coin'
    user_coin_with_accounts:
      type: object
      required:
        - mint
        - ticker
        - decimals
        - balance
        - balance_usd
        - accounts
      properties:
        mint:
          type: string
          description: The coin mint address
          example: "9LzCMqDgTKYz9Drzqnpgee3SGa89up3a247ypMj2xrqM"
        ticker:
          type: string
          description: The coin symbol
          example: "$AUDIO"
        decimals:
          type: integer
          description: The number of decimals for the coin
          example: 8
        logo_uri:
          type: string
          nullable: true
          description: URL to the coin's logo image
          example: "https://example.com/logo.png"
        balance:
          type: integer
          description: The total balance of the coin in the user's account (in wei)
          example: 1000000000
        balance_usd:
          type: number
          description: The total balance of the coin in the user's account in USD
          example: 1.23
        accounts:
          type: array
          items:
            $ref: '#/components/schemas/user_coin_account'
    user_coin_account:
      type: object
      required:
        - account
        - owner
        - balance
        - balance_usd
        - is_in_app_wallet
      properties:
        account:
          type: string
          description: The token account address
          example: "CTyFguG69kwYrzk24P3UuBvY1rR5atu9kf2S6XEwAU8X"
        owner:
          type: string
          description: The owner wallet of the token account
          example: "HzZ3EKACbH6XEHs59Rt1adVzUKv5cTDE9o9YWFaMhwpF"
        balance:
          type: integer
          description: The balance of the coin in the user's account (in wei)
          example: 1000000000
        balance_usd:
          type: number
          description: The balance of the coin in the user's account in USD
          example: 1.23
        is_in_app_wallet:
          type: boolean
          description: Whether the account is in the user's in-app wallet
          example: true
    user_coin_response:
      type: object
      properties:
        data:
          $ref: '#/components/schemas/user_coin_with_accounts'
    balance_history_response:
      type: object
      required:
        - data
      properties:
        data:
          type: array
          items:
            $ref: '#/components/schemas/balance_history_data_point'
    balance_history_data_point:
      type: object
      required:
        - timestamp
        - balance_usd
      properties:
        timestamp:
          type: integer
          format: int64
          description: Unix timestamp in seconds
          example: 1704067200
        balance_usd:
          type: number
          format: double
          description: Total portfolio balance in USD at this timestamp
          example: 1234.56
    claim_rewards_response:
      type: object
      required:
        - data
      properties:
        data:
          type: array
          items:
            type: object
            required:
              - challengeId
              - specifier
            properties:
              challengeId:
                type: string
                description: The challenge ID
                example: "u"
              specifier:
                type: string
                description: The challenge specifier
                example: "7eP5n"
              amount:
                type: string
                description: The reward amount
                example: "1000000000"
              signatures:
                type: array
                items:
                  type: string
                description: Transaction signatures
                example: ["5j7s1QjmRKFuDbCWMRVRNibSV2VAAEcNKP6HWU7GwPdXkBZvhz8n4vQl7bBq8tN4Rz9x1Kj3mP5wQ8rT2Y6zA"]
              error:
                type: string
                description: Error message if claim failed
                example: "Insufficient balance"
    claim_rewards_request:
      type: object
      required:
        - userId
      properties:
        challengeId:
          type: string
          description: The challenge ID to filter rewards (optional)
          example: "u"
        specifier:
          type: string
          description: The specifier to filter rewards (optional)
          example: "7eP5n"
        userId:
          type: string
          description: The user ID to claim rewards for
          example: "7eP5n"
    redeem_amount_response:
      type: object
      required:
        - amount
      properties:
        amount:
          type: integer
          description: Static amount indicator (always 1)
          example: 1
    reward_code_response:
      type: object
      required:
        - code
        - amount
      properties:
        code:
          type: string
          description: The reward code
          example: "XYZ123"
        amount:
          type: integer
          description: The amount of coins rewarded by this code
          example: 100
    reward_code_error_response:
      type: object
      properties:
        error:
          type: string
          description: Error message indicating why the code cannot be redeemed
          example: "used"
          enum:
            - used
            - invalid
    create_reward_code_request:
      type: object
      required:
        - signature
        - mint
        - amount
      properties:
        signature:
          type: string
          description: Base64-encoded Solana Ed25519 signature of the string "code"
          example: "3fG7xQh2L8vK9pN4mR5sT6uW7vX8yZ1aB2cD3eF4gH5iJ6kL7mN8oP9qR0sT1uV2wX3yZ4aB5cD6eF7gH8iJ9k="
        mint:
          type: string
          description: The coin mint address
          example: "9LzCMqDgTKYz9Drzqnpgee3SGa89up3a247ypMj2xrqM"
        amount:
          type: integer
          description: The reward amount (must be greater than 0)
          minimum: 1
          example: 100
    create_reward_code_response:
      type: object
      required:
        - code
        - mint
        - reward_address
        - amount
      properties:
        code:
          type: string
          description: The generated 6-character alphanumeric reward code
          example: "aB3d5F"
        mint:
          type: string
          description: The coin mint address
          example: "9LzCMqDgTKYz9Drzqnpgee3SGa89up3a247ypMj2xrqM"
        reward_address:
          type: string
          description: The reward address (authorized public key)
          example: "9XeZbswbSSUU4AHVArQbTQjAEjAPhVweGU5cogBVkvh4"
        amount:
          type: integer
          description: The reward amount
          example: 100
  responses:
    ParseError:
      description: When a mask can't be parsed
      content: {}
    MaskError:
      description: When any error occurs on mask
      content: {}
x-original-swagger-version: "2.0"
