Audiomack Data API

The Audiomack Data API provides programmatic access to Audiomack's music catalog and social graph: songs, albums, artists, playlists, charts by genre and timeframe (daily/weekly/monthly/yearly/total), full-text search and autosuggest, streaming URL issuance (short-lived, ~10 second TTL), favorites, reposts, follows, ad and view/play stats reporting, and the authenticated user's feed, uploads, playlists, favorites, and notifications. Requests are signed with OAuth 1.0a; access tokens are valid for one year. List endpoints support page-based pagination, the `fields` parameter for sparse fieldsets, and a configurable `limit`.

OpenAPI Specification

audiomack-data-api-openapi.yml Raw ↑
openapi: 3.0.3
info:
  title: Audiomack Data API
  version: '1.0'
  description: >-
    The Audiomack Data API provides programmatic access to Audiomack's music
    streaming catalog, artists, playlists, charts, search, and authenticated
    user resources. All requests use HTTPS against https://api.audiomack.com/v1
    and authenticated requests are signed with OAuth 1.0a. Response payloads
    are JSON and most list endpoints support page-based pagination, the
    `fields` parameter for sparse fieldsets, and a `limit` parameter.
  contact:
    name: Audiomack Business
    url: https://creators.audiomack.com/contact-us
  license:
    name: Audiomack Terms of Service
    url: https://audiomack.com/about/terms-of-service
servers:
  - url: https://api.audiomack.com/v1
    description: Production
security:
  - oauth1: []
tags:
  - name: Music
    description: Songs, albums, streaming, favorites, reposts, and metrics.
  - name: Artist
    description: Artist profiles, uploads, favorites, followers, and pinned items.
  - name: Playlist
    description: Playlist creation, editing, favoriting, and discovery.
  - name: Chart
    description: Aggregate song, album, and playlist charts across timeframes and genres.
  - name: Search
    description: Free-text search and autosuggest across music, albums, and artists.
  - name: Stats
    description: Tokenised view and play event reporting.
  - name: User
    description: Authenticated user profile, feed, uploads, playlists, and notifications.
  - name: OAuth
    description: OAuth 1.0a request-token and access-token exchanges.
paths:
  /request_token:
    post:
      tags: [OAuth]
      summary: Obtain Request Token
      description: Issue an unauthorised OAuth 1.0a request token. Supply an `oauth_callback` parameter. Request tokens are valid for one hour.
      operationId: postRequestToken
      responses:
        '200':
          description: Request token issued.
  /access_token:
    post:
      tags: [OAuth]
      summary: Exchange Access Token
      description: Exchange an authorised OAuth request token for a long-lived access token. Access tokens expire one year after issuance.
      operationId: postAccessToken
      responses:
        '200':
          description: Access token issued.
  /music/{id}:
    get:
      tags: [Music]
      summary: Get Music By Id
      description: Retrieve song or album metadata by Audiomack music ID.
      operationId: getMusicById
      parameters:
        - $ref: '#/components/parameters/MusicId'
        - $ref: '#/components/parameters/Key'
      responses:
        '200':
          description: Music object.
  /music/{type}/{artist}/{slug}:
    get:
      tags: [Music]
      summary: Get Music By Slug
      description: Retrieve a song or album by artist slug and music slug.
      operationId: getMusicBySlug
      parameters:
        - in: path
          name: type
          required: true
          schema:
            type: string
            enum: [song, album]
        - $ref: '#/components/parameters/ArtistSlug'
        - in: path
          name: slug
          required: true
          schema:
            type: string
        - $ref: '#/components/parameters/Key'
      responses:
        '200':
          description: Music object.
    patch:
      tags: [Music]
      summary: Flag Music Unplayable
      description: Report a song or album as unplayable.
      operationId: patchMusicBySlug
      parameters:
        - in: path
          name: type
          required: true
          schema:
            type: string
            enum: [song, album]
        - $ref: '#/components/parameters/ArtistSlug'
        - in: path
          name: slug
          required: true
          schema:
            type: string
      requestBody:
        content:
          application/x-www-form-urlencoded:
            schema:
              type: object
              properties:
                status:
                  type: string
                  enum: [unplayable]
      responses:
        '200':
          description: Status updated.
  /music/preview/{id}:
    get:
      tags: [Music]
      summary: Get Music Preview
      description: Fetch the preview audio resource for a given music ID.
      operationId: getMusicPreview
      parameters:
        - $ref: '#/components/parameters/MusicId'
      responses:
        '200':
          description: Preview metadata.
  /music/recent:
    get:
      tags: [Music]
      summary: List Recent Music
      description: List most recently uploaded music.
      operationId: getRecentMusic
      parameters:
        - $ref: '#/components/parameters/Fields'
        - $ref: '#/components/parameters/Limit'
      responses:
        '200':
          description: Music collection.
  /music/{genre}/recent:
    get:
      tags: [Music]
      summary: List Recent Music By Genre
      description: List most recently uploaded music for a specific genre (e.g. `hip-hop-rap`, `afrobeats`).
      operationId: getRecentMusicByGenre
      parameters:
        - $ref: '#/components/parameters/Genre'
        - $ref: '#/components/parameters/Fields'
        - $ref: '#/components/parameters/Limit'
      responses:
        '200':
          description: Music collection.
  /music/trending:
    get:
      tags: [Music]
      summary: List Trending Music
      description: List trending music across all genres.
      operationId: getTrendingMusic
      parameters:
        - $ref: '#/components/parameters/Fields'
        - $ref: '#/components/parameters/Limit'
      responses:
        '200':
          description: Music collection.
  /music/{genre}/trending:
    get:
      tags: [Music]
      summary: List Trending Music By Genre
      description: List trending music for a specific genre.
      operationId: getTrendingMusicByGenre
      parameters:
        - $ref: '#/components/parameters/Genre'
        - $ref: '#/components/parameters/Fields'
        - $ref: '#/components/parameters/Limit'
      responses:
        '200':
          description: Music collection.
  /music/{id}/play:
    post:
      tags: [Music]
      summary: Get Music Stream Url
      description: Request a streaming URL for a music resource. The returned URL is valid for approximately 10 seconds.
      operationId: postMusicPlay
      parameters:
        - $ref: '#/components/parameters/MusicId'
      requestBody:
        content:
          application/x-www-form-urlencoded:
            schema:
              type: object
              properties:
                session:
                  type: string
                album_id:
                  type: string
                playlist_id:
                  type: string
                hq:
                  type: boolean
                key:
                  type: string
      responses:
        '200':
          description: Stream URL response.
  /music/{id}/ads:
    post:
      tags: [Music]
      summary: Record Music Ad Event
      description: Track an advertisement event for a music resource.
      operationId: postMusicAd
      parameters:
        - $ref: '#/components/parameters/MusicId'
      requestBody:
        content:
          application/x-www-form-urlencoded:
            schema:
              type: object
              properties:
                status:
                  type: string
      responses:
        '200':
          description: Ad event recorded.
  /music/{id}/favorite:
    put:
      tags: [Music]
      summary: Favorite Music
      operationId: favoriteMusic
      parameters:
        - $ref: '#/components/parameters/MusicId'
      responses:
        '200':
          description: Favorited.
    delete:
      tags: [Music]
      summary: Unfavorite Music
      operationId: unfavoriteMusic
      parameters:
        - $ref: '#/components/parameters/MusicId'
      responses:
        '200':
          description: Unfavorited.
  /music/{id}/repost:
    put:
      tags: [Music]
      summary: Repost Music
      operationId: repostMusic
      parameters:
        - $ref: '#/components/parameters/MusicId'
      responses:
        '200':
          description: Reposted.
    delete:
      tags: [Music]
      summary: Remove Music Repost
      operationId: deleteMusicRepost
      parameters:
        - $ref: '#/components/parameters/MusicId'
      responses:
        '200':
          description: Repost removed.
  /music/{id}/metrics:
    get:
      tags: [Music]
      summary: Get Music Metrics
      description: Retrieve play and engagement metrics for a music resource.
      operationId: getMusicMetrics
      parameters:
        - $ref: '#/components/parameters/MusicId'
      responses:
        '200':
          description: Metrics response.
  /artist/{slug}:
    get:
      tags: [Artist]
      summary: Get Artist
      description: Retrieve artist profile and aggregate statistics.
      operationId: getArtist
      parameters:
        - $ref: '#/components/parameters/ArtistSlug'
      responses:
        '200':
          description: Artist object.
  /artist/{slug}/uploads:
    get:
      tags: [Artist]
      summary: List Artist Uploads
      operationId: getArtistUploads
      parameters:
        - $ref: '#/components/parameters/ArtistSlug'
        - $ref: '#/components/parameters/Fields'
        - $ref: '#/components/parameters/Limit'
      responses:
        '200':
          description: Uploads collection.
  /artist/{slug}/favorites:
    get:
      tags: [Artist]
      summary: List Artist Favorites
      operationId: getArtistFavorites
      parameters:
        - $ref: '#/components/parameters/ArtistSlug'
        - in: query
          name: show
          schema:
            type: string
        - $ref: '#/components/parameters/Fields'
        - $ref: '#/components/parameters/Limit'
      responses:
        '200':
          description: Favorites collection.
  /artist/{slug}/favorites/search:
    get:
      tags: [Artist]
      summary: Search Artist Favorites
      operationId: searchArtistFavorites
      parameters:
        - $ref: '#/components/parameters/ArtistSlug'
        - in: query
          name: q
          required: true
          schema:
            type: string
      responses:
        '200':
          description: Favorites matching query.
  /artist/{slug}/playlists:
    get:
      tags: [Artist]
      summary: List Artist Playlists
      operationId: getArtistPlaylists
      parameters:
        - $ref: '#/components/parameters/ArtistSlug'
        - in: query
          name: genre
          schema:
            type: string
        - $ref: '#/components/parameters/Fields'
        - $ref: '#/components/parameters/Limit'
      responses:
        '200':
          description: Playlists collection.
  /artist/{slug}/follow:
    put:
      tags: [Artist]
      summary: Follow Artist
      operationId: followArtist
      parameters:
        - $ref: '#/components/parameters/ArtistSlug'
      responses:
        '200':
          description: Followed.
    delete:
      tags: [Artist]
      summary: Unfollow Artist
      operationId: unfollowArtist
      parameters:
        - $ref: '#/components/parameters/ArtistSlug'
      responses:
        '200':
          description: Unfollowed.
  /artist/{slug}/following:
    get:
      tags: [Artist]
      summary: List Artist Following
      operationId: getArtistFollowing
      parameters:
        - $ref: '#/components/parameters/ArtistSlug'
        - $ref: '#/components/parameters/Fields'
        - $ref: '#/components/parameters/Limit'
      responses:
        '200':
          description: Artists this artist follows.
  /artist/{slug}/follows:
    get:
      tags: [Artist]
      summary: List Artist Followers
      operationId: getArtistFollowers
      parameters:
        - $ref: '#/components/parameters/ArtistSlug'
        - $ref: '#/components/parameters/Fields'
        - $ref: '#/components/parameters/Limit'
      responses:
        '200':
          description: Followers collection.
  /artist/{slug}/feed:
    get:
      tags: [Artist]
      summary: Get Artist Feed
      operationId: getArtistFeed
      parameters:
        - $ref: '#/components/parameters/ArtistSlug'
        - $ref: '#/components/parameters/Fields'
        - $ref: '#/components/parameters/Limit'
      responses:
        '200':
          description: Activity feed.
  /artist/{id}/metrics:
    get:
      tags: [Artist]
      summary: Get Artist Metrics
      description: Retrieve artist-level metrics plus top 10 tracks metrics.
      operationId: getArtistMetrics
      parameters:
        - in: path
          name: id
          required: true
          schema:
            type: string
      responses:
        '200':
          description: Metrics response.
  /artist/{slug}/pinned:
    get:
      tags: [Artist]
      summary: Get Artist Pinned
      operationId: getArtistPinned
      parameters:
        - $ref: '#/components/parameters/ArtistSlug'
      responses:
        '200':
          description: Pinned items.
    post:
      tags: [Artist]
      summary: Add Artist Pinned
      operationId: addArtistPinned
      parameters:
        - $ref: '#/components/parameters/ArtistSlug'
      responses:
        '200':
          description: Pinned items added.
    put:
      tags: [Artist]
      summary: Update Artist Pinned
      operationId: updateArtistPinned
      parameters:
        - $ref: '#/components/parameters/ArtistSlug'
      responses:
        '200':
          description: Pinned items updated.
    delete:
      tags: [Artist]
      summary: Remove Artist Pinned
      operationId: removeArtistPinned
      parameters:
        - $ref: '#/components/parameters/ArtistSlug'
      responses:
        '200':
          description: Pinned items removed.
  /chart/{kind}/{type}:
    get:
      tags: [Chart]
      summary: Get Chart
      description: Retrieve songs, albums, or playlists chart for a given timeframe (total, daily, weekly, monthly, yearly).
      operationId: getChart
      parameters:
        - in: path
          name: kind
          required: true
          schema:
            type: string
            enum: [songs, albums, playlists]
        - in: path
          name: type
          required: true
          schema:
            type: string
            enum: [total, daily, weekly, monthly, yearly]
        - $ref: '#/components/parameters/Fields'
        - $ref: '#/components/parameters/Limit'
      responses:
        '200':
          description: Chart entries.
  /{genre}/chart/{kind}/{type}:
    get:
      tags: [Chart]
      summary: Get Chart By Genre
      description: Retrieve a chart restricted to a genre such as `hip-hop-rap` or `afrobeats`.
      operationId: getChartByGenre
      parameters:
        - $ref: '#/components/parameters/Genre'
        - in: path
          name: kind
          required: true
          schema:
            type: string
            enum: [songs, albums, playlists]
        - in: path
          name: type
          required: true
          schema:
            type: string
            enum: [total, daily, weekly, monthly, yearly]
        - $ref: '#/components/parameters/Fields'
        - $ref: '#/components/parameters/Limit'
      responses:
        '200':
          description: Chart entries.
  /playlist/{genre}/trending:
    get:
      tags: [Playlist]
      summary: List Trending Playlists By Genre
      operationId: getTrendingPlaylistsByGenre
      parameters:
        - $ref: '#/components/parameters/Genre'
        - $ref: '#/components/parameters/Fields'
        - $ref: '#/components/parameters/Limit'
      responses:
        '200':
          description: Playlist collection.
  /playlist:
    post:
      tags: [Playlist]
      summary: Create Playlist
      operationId: createPlaylist
      requestBody:
        content:
          application/x-www-form-urlencoded:
            schema:
              type: object
              required: [title, genre]
              properties:
                title:
                  type: string
                genre:
                  type: string
                private:
                  type: boolean
                music_id:
                  type: string
                image:
                  type: string
                  format: binary
      responses:
        '201':
          description: Playlist created.
  /playlist/{id}:
    get:
      tags: [Playlist]
      summary: Get Playlist
      operationId: getPlaylist
      parameters:
        - $ref: '#/components/parameters/PlaylistId'
        - $ref: '#/components/parameters/Fields'
      responses:
        '200':
          description: Playlist object.
    put:
      tags: [Playlist]
      summary: Update Playlist
      operationId: updatePlaylist
      parameters:
        - $ref: '#/components/parameters/PlaylistId'
      requestBody:
        content:
          application/x-www-form-urlencoded:
            schema:
              type: object
              properties:
                title:
                  type: string
                genre:
                  type: string
                music_id:
                  type: string
                private:
                  type: boolean
                image:
                  type: string
                  format: binary
      responses:
        '200':
          description: Playlist updated.
    delete:
      tags: [Playlist]
      summary: Delete Playlist
      operationId: deletePlaylist
      parameters:
        - $ref: '#/components/parameters/PlaylistId'
      responses:
        '204':
          description: Playlist deleted.
  /playlist/{id}/track:
    post:
      tags: [Playlist]
      summary: Add Track To Playlist
      operationId: addPlaylistTrack
      parameters:
        - $ref: '#/components/parameters/PlaylistId'
      requestBody:
        content:
          application/x-www-form-urlencoded:
            schema:
              type: object
              required: [music_id]
              properties:
                music_id:
                  type: string
      responses:
        '200':
          description: Track added.
  /playlist/{id}/{music_id}:
    delete:
      tags: [Playlist]
      summary: Remove Track From Playlist
      operationId: deletePlaylistTrack
      parameters:
        - $ref: '#/components/parameters/PlaylistId'
        - in: path
          name: music_id
          required: true
          schema:
            type: string
      responses:
        '204':
          description: Track removed.
  /playlist/{artistSlug}/{playlistSlug}:
    get:
      tags: [Playlist]
      summary: Get Playlist By Slug
      operationId: getPlaylistBySlug
      parameters:
        - in: path
          name: artistSlug
          required: true
          schema:
            type: string
        - in: path
          name: playlistSlug
          required: true
          schema:
            type: string
        - $ref: '#/components/parameters/Fields'
      responses:
        '200':
          description: Playlist object.
  /playlist/{id}/favorite:
    put:
      tags: [Playlist]
      summary: Favorite Playlist
      operationId: favoritePlaylist
      parameters:
        - $ref: '#/components/parameters/PlaylistId'
      responses:
        '200':
          description: Favorited.
    delete:
      tags: [Playlist]
      summary: Unfavorite Playlist
      operationId: unfavoritePlaylist
      parameters:
        - $ref: '#/components/parameters/PlaylistId'
      responses:
        '200':
          description: Unfavorited.
  /playlist/{id}/metrics:
    get:
      tags: [Playlist]
      summary: Get Playlist Metrics
      operationId: getPlaylistMetrics
      parameters:
        - $ref: '#/components/parameters/PlaylistId'
      responses:
        '200':
          description: Metrics response.
  /search:
    get:
      tags: [Search]
      summary: Search Audiomack
      description: Search across music, albums, and artists with optional genre and verified filters.
      operationId: search
      parameters:
        - in: query
          name: q
          required: true
          schema:
            type: string
        - in: query
          name: show
          schema:
            type: string
        - in: query
          name: sort
          schema:
            type: string
        - in: query
          name: page
          schema:
            type: integer
        - in: query
          name: limit
          schema:
            type: integer
        - in: query
          name: genre
          schema:
            type: string
        - in: query
          name: verified
          schema:
            type: boolean
      responses:
        '200':
          description: Search results.
  /search_autosuggest:
    get:
      tags: [Search]
      summary: Autosuggest Search
      operationId: searchAutosuggest
      parameters:
        - in: query
          name: q
          required: true
          schema:
            type: string
      responses:
        '200':
          description: Autosuggest results.
  /music/stats/token:
    get:
      tags: [Stats]
      summary: Get Stats Token
      description: Request a one-shot token used to authorise a subsequent stats event.
      operationId: getStatsToken
      parameters:
        - in: query
          name: device
          schema:
            type: string
        - in: query
          name: music_id
          schema:
            type: string
      responses:
        '200':
          description: Stats token issued.
  /music/stats/{music_id}:
    post:
      tags: [Stats]
      summary: Record Stats Event
      description: Record a view or play event using a previously issued stats token.
      operationId: postStatsEvent
      parameters:
        - in: path
          name: music_id
          required: true
          schema:
            type: string
      requestBody:
        content:
          application/x-www-form-urlencoded:
            schema:
              type: object
              required: [token, type]
              properties:
                token:
                  type: string
                type:
                  type: string
                  enum: [view, play]
      responses:
        '200':
          description: Event recorded.
  /user:
    get:
      tags: [User]
      summary: Get Authenticated User
      operationId: getUser
      responses:
        '200':
          description: Current user.
  /user/register:
    post:
      tags: [User]
      summary: Register User
      operationId: registerUser
      requestBody:
        content:
          application/x-www-form-urlencoded:
            schema:
              type: object
              required: [email, artist_name, password, password2]
              properties:
                email:
                  type: string
                  format: email
                artist_name:
                  type: string
                password:
                  type: string
                  format: password
                password2:
                  type: string
                  format: password
      responses:
        '201':
          description: User registered.
  /user/forgot-password:
    post:
      tags: [User]
      summary: Forgot Password
      operationId: forgotPassword
      requestBody:
        content:
          application/x-www-form-urlencoded:
            schema:
              type: object
              required: [email]
              properties:
                email:
                  type: string
                  format: email
      responses:
        '200':
          description: Password reset email sent.
  /user/playlists:
    get:
      tags: [User]
      summary: List User Playlists
      description: List authenticated user's playlists including private ones.
      operationId: getUserPlaylists
      parameters:
        - $ref: '#/components/parameters/Fields'
        - $ref: '#/components/parameters/Limit'
      responses:
        '200':
          description: Playlists collection.
  /user/favorites:
    get:
      tags: [User]
      summary: List User Favorites
      operationId: getUserFavorites
      parameters:
        - $ref: '#/components/parameters/Fields'
        - $ref: '#/components/parameters/Limit'
      responses:
        '200':
          description: Favorites collection.
  /user/feed:
    get:
      tags: [User]
      summary: Get User Feed
      operationId: getUserFeed
      parameters:
        - $ref: '#/components/parameters/Fields'
        - $ref: '#/components/parameters/Limit'
      responses:
        '200':
          description: Activity feed.
  /user/uploads:
    get:
      tags: [User]
      summary: List User Uploads
      operationId: getUserUploads
      parameters:
        - $ref: '#/components/parameters/Fields'
        - $ref: '#/components/parameters/Limit'
      responses:
        '200':
          description: Uploads collection.
  /user/native-notifications:
    get:
      tags: [User]
      summary: List User Notifications
      operationId: getUserNotifications
      parameters:
        - in: query
          name: only_unseen
          schema:
            type: boolean
        - in: query
          name: limit
          schema:
            type: integer
        - in: query
          name: paging_token
          schema:
            type: string
      responses:
        '200':
          description: Notifications collection.
  /user/native-notifications/seen:
    post:
      tags: [User]
      summary: Mark Notifications Seen
      operationId: markNotificationsSeen
      requestBody:
        content:
          application/x-www-form-urlencoded:
            schema:
              type: object
              properties:
                for_all:
                  type: boolean
      responses:
        '200':
          description: Notifications updated.
components:
  securitySchemes:
    oauth1:
      type: http
      scheme: OAuth
      description: OAuth 1.0a signed request. Obtain a request token via `POST /v1/request_token`, redirect the user to `https://audiomack.com/oauth/authenticate?oauth_token=...`, then exchange for an access token via `POST /v1/access_token`. Access tokens are valid for one year.
  parameters:
    MusicId:
      in: path
      name: id
      required: true
      schema:
        type: string
      description: Audiomack music identifier.
    PlaylistId:
      in: path
      name: id
      required: true
      schema:
        type: string
      description: Audiomack playlist identifier.
    ArtistSlug:
      in: path
      name: slug
      required: true
      schema:
        type: string
      description: Artist slug (e.g. `drake`).
    Genre:
      in: path
      name: genre
      required: true
      schema:
        type: string
      description: Audiomack genre slug (e.g. `hip-hop-rap`, `afrobeats`, `reggae`, `electronic`).
    Fields:
      in: query
      name: fields
      schema:
        type: string
      description: Comma-separated list of fields to include (sparse fieldsets), e.g. `id,title,artist:name`.
    Limit:
      in: query
      name: limit
      schema:
        type: integer
        default: 20
      description: Maximum results to return. Pass `0` to return all results.
    Key:
      in: query
      name: key
      schema:
        type: string
      description: Optional consumer key for unauthenticated read access.