Last.fm Web Services 2.0

The AudioScrobbler / Last.fm Web Services 2.0 API. A single method-dispatched endpoint (`https://ws.audioscrobbler.com/2.0/`) serves all read operations as GET requests and all authenticated write operations as POST requests. Methods are organized by package: album, artist, auth, chart, geo, library, tag, track, user. Default response format is XML; pass `format=json` for JSON.

Documentation

Specifications

Examples

Schemas & Data

Other Resources

🔗
SignUp
https://www.last.fm/api/account/create
🔗
TermsOfService
https://www.last.fm/api/tos
🔗
Errors
https://www.last.fm/api/errorcodes
🔗
JSONLD
https://raw.githubusercontent.com/api-evangelist/lastfm/refs/heads/main/json-ld/lastfm-context.jsonld
🔗
NaftikoCapability
https://raw.githubusercontent.com/api-evangelist/lastfm/refs/heads/main/capabilities/lastfm-album.yaml
🔗
NaftikoCapability
https://raw.githubusercontent.com/api-evangelist/lastfm/refs/heads/main/capabilities/lastfm-artist.yaml
🔗
NaftikoCapability
https://raw.githubusercontent.com/api-evangelist/lastfm/refs/heads/main/capabilities/lastfm-auth.yaml
🔗
NaftikoCapability
https://raw.githubusercontent.com/api-evangelist/lastfm/refs/heads/main/capabilities/lastfm-chart.yaml
🔗
NaftikoCapability
https://raw.githubusercontent.com/api-evangelist/lastfm/refs/heads/main/capabilities/lastfm-geo.yaml
🔗
NaftikoCapability
https://raw.githubusercontent.com/api-evangelist/lastfm/refs/heads/main/capabilities/lastfm-library.yaml
🔗
NaftikoCapability
https://raw.githubusercontent.com/api-evangelist/lastfm/refs/heads/main/capabilities/lastfm-tag.yaml
🔗
NaftikoCapability
https://raw.githubusercontent.com/api-evangelist/lastfm/refs/heads/main/capabilities/lastfm-track.yaml
🔗
NaftikoCapability
https://raw.githubusercontent.com/api-evangelist/lastfm/refs/heads/main/capabilities/lastfm-user.yaml
🔗
NaftikoCapability
https://raw.githubusercontent.com/api-evangelist/lastfm/refs/heads/main/capabilities/music-discovery.yaml
🔗
NaftikoCapability
https://raw.githubusercontent.com/api-evangelist/lastfm/refs/heads/main/capabilities/music-scrobbling.yaml

OpenAPI Specification

lastfm-openapi-original.yml Raw ↑
openapi: 3.0.3
info:
  title: Last.fm Web Services API (2.0)
  version: '2.0'
  description: |
    The Last.fm (AudioScrobbler) Web Services 2.0 API provides programmatic access to
    music metadata, charts, geo-listening data, tags, user listening history, and
    scrobbling. The API is method-dispatched: every request targets the single endpoint
    `https://ws.audioscrobbler.com/2.0/` and identifies the operation via the `method`
    query/body parameter (e.g. `method=track.getInfo`).

    Read methods accept `GET`; write methods (scrobbling, tagging, love/unlove, session
    management) require `POST` with an authenticated session key and a signed
    `api_sig` parameter (MD5 of sorted params + shared secret).

    Responses default to XML; pass `format=json` for JSON.
  termsOfService: https://www.last.fm/api/tos
  contact:
    name: Last.fm API Support
    url: https://www.last.fm/api
    email: [email protected]
  license:
    name: Last.fm API Terms of Service
    url: https://www.last.fm/api/tos
servers:
  - url: https://ws.audioscrobbler.com/2.0
    description: Production AudioScrobbler endpoint
  - url: http://ws.audioscrobbler.com/2.0
    description: Non-TLS endpoint (legacy)
tags:
  - name: Album
    description: Album metadata, tagging, and search.
  - name: Artist
    description: Artist metadata, similarity, tagging, top albums/tracks, and search.
  - name: Auth
    description: Token, session, and mobile session acquisition for authenticated calls.
  - name: Chart
    description: Global top artists, tags, and tracks.
  - name: Geo
    description: Country-level top artists and tracks.
  - name: Library
    description: A user's scrobbled artist library.
  - name: Tag
    description: Tag metadata, similar tags, top albums/artists/tracks, and chart history.
  - name: Track
    description: Track metadata, scrobbling, love/unlove, tagging, search.
  - name: User
    description: User profile, friends, listening history, top entities, and weekly charts.
security:
  - ApiKeyAuth: []
  - SignedAuth: []
paths:
  /:
    get:
      operationId: invokeReadMethod
      summary: Invoke A Read Method
      description: |
        Single read-side dispatch endpoint. The `method` parameter selects the
        operation (e.g. `album.getInfo`, `artist.getTopTracks`, `chart.getTopArtists`).
        Use `format=json` for JSON responses.
      tags: [Album, Artist, Chart, Geo, Library, Tag, Track, User]
      parameters:
        - $ref: '#/components/parameters/MethodParam'
        - $ref: '#/components/parameters/ApiKeyParam'
        - $ref: '#/components/parameters/FormatParam'
        - $ref: '#/components/parameters/CallbackParam'
        - name: artist
          in: query
          schema: { type: string }
          description: Artist name (used by album.*, artist.*, track.* read methods).
        - name: album
          in: query
          schema: { type: string }
          description: Album name (used by album.* methods).
        - name: track
          in: query
          schema: { type: string }
          description: Track name (used by track.* methods).
        - name: mbid
          in: query
          schema: { type: string }
          description: MusicBrainz identifier; takes precedence over artist/album/track names.
        - name: user
          in: query
          schema: { type: string }
          description: Last.fm username (used by user.* methods).
        - name: tag
          in: query
          schema: { type: string }
          description: Tag name (used by tag.* methods).
        - name: country
          in: query
          schema: { type: string }
          description: ISO 3166-1 country name (used by geo.* methods).
        - name: limit
          in: query
          schema: { type: integer, default: 50, maximum: 1000 }
          description: Max items per page.
        - name: page
          in: query
          schema: { type: integer, default: 1 }
          description: Page number for paginated results.
        - name: period
          in: query
          schema:
            type: string
            enum: [overall, 7day, 1month, 3month, 6month, 12month]
          description: Aggregation window for user.getTop* methods.
        - name: autocorrect
          in: query
          schema: { type: integer, enum: [0, 1], default: 0 }
          description: Auto-correct misspelled artist/track names when set to 1.
        - name: username
          in: query
          schema: { type: string }
          description: Username context for personalized fields (playcount, userplaycount).
      responses:
        '200':
          description: Successful response in XML (default) or JSON (`format=json`).
          content:
            application/json:
              schema:
                oneOf:
                  - $ref: '#/components/schemas/AlbumInfoResponse'
                  - $ref: '#/components/schemas/ArtistInfoResponse'
                  - $ref: '#/components/schemas/TrackInfoResponse'
                  - $ref: '#/components/schemas/TagInfoResponse'
                  - $ref: '#/components/schemas/UserInfoResponse'
                  - $ref: '#/components/schemas/ChartResponse'
                  - $ref: '#/components/schemas/GeoResponse'
                  - $ref: '#/components/schemas/SearchResponse'
            application/xml:
              schema:
                type: string
                description: XML payload wrapped in `<lfm status="ok">…</lfm>`.
        '400':
          $ref: '#/components/responses/ErrorResponse'
        '403':
          $ref: '#/components/responses/ErrorResponse'
        '429':
          $ref: '#/components/responses/ErrorResponse'
    post:
      operationId: invokeWriteMethod
      summary: Invoke A Write Method
      description: |
        Single write-side dispatch endpoint. Used for authenticated write actions:
        `track.scrobble`, `track.updateNowPlaying`, `track.love`, `track.unlove`,
        `album.addTags`, `album.removeTag`, `artist.addTags`, `artist.removeTag`,
        `track.addTags`, `track.removeTag`. POST body parameters are
        `application/x-www-form-urlencoded` UTF-8 encoded and must include
        `api_key`, `sk` (session key), and `api_sig`.
      tags: [Album, Artist, Track, Auth]
      requestBody:
        required: true
        content:
          application/x-www-form-urlencoded:
            schema:
              $ref: '#/components/schemas/WriteRequestBody'
      responses:
        '200':
          description: Successful write response with status wrapper.
          content:
            application/json:
              schema: { $ref: '#/components/schemas/WriteResponse' }
        '400':
          $ref: '#/components/responses/ErrorResponse'
        '403':
          $ref: '#/components/responses/ErrorResponse'
        '429':
          $ref: '#/components/responses/ErrorResponse'

  # --- Convenience method-as-path operations (logical alias of the dispatch endpoint) ---

  # ALBUM
  /?method=album.addTags:
    post:
      operationId: albumAddTags
      summary: Add Album Tags
      tags: [Album]
      description: Tag an album using a list of user supplied tags. Requires authentication.
      requestBody: { $ref: '#/components/requestBodies/AlbumTagWrite' }
      responses:
        '200': { description: OK, content: { application/json: { schema: { $ref: '#/components/schemas/WriteResponse' } } } }

  /?method=album.getInfo:
    get:
      operationId: albumGetInfo
      summary: Get Album Info
      tags: [Album]
      description: Get the metadata and tracklist for an album on Last.fm using the album name or a musicbrainz id.
      parameters:
        - { $ref: '#/components/parameters/ApiKeyParam' }
        - { $ref: '#/components/parameters/FormatParam' }
        - name: artist
          in: query
          schema: { type: string }
        - name: album
          in: query
          schema: { type: string }
        - name: mbid
          in: query
          schema: { type: string }
        - name: lang
          in: query
          schema: { type: string, example: en }
        - name: autocorrect
          in: query
          schema: { type: integer, enum: [0, 1] }
        - name: username
          in: query
          schema: { type: string }
      responses:
        '200':
          description: Album info envelope.
          content:
            application/json:
              schema: { $ref: '#/components/schemas/AlbumInfoResponse' }

  /?method=album.getTags:
    get:
      operationId: albumGetTags
      summary: Get Album Tags
      tags: [Album]
      description: Get the tags applied by an individual user to an album on Last.fm.
      parameters:
        - { $ref: '#/components/parameters/ApiKeyParam' }
        - { $ref: '#/components/parameters/FormatParam' }
        - name: artist
          in: query
          schema: { type: string }
        - name: album
          in: query
          schema: { type: string }
        - name: mbid
          in: query
          schema: { type: string }
        - name: user
          in: query
          required: true
          schema: { type: string }
      responses:
        '200':
          description: User tags applied to the album.
          content:
            application/json:
              schema: { $ref: '#/components/schemas/TagListResponse' }

  /?method=album.getTopTags:
    get:
      operationId: albumGetTopTags
      summary: Get Top Album Tags
      tags: [Album]
      description: Get the top tags for an album on Last.fm, ordered by popularity.
      parameters:
        - { $ref: '#/components/parameters/ApiKeyParam' }
        - { $ref: '#/components/parameters/FormatParam' }
        - name: artist
          in: query
          schema: { type: string }
        - name: album
          in: query
          schema: { type: string }
        - name: mbid
          in: query
          schema: { type: string }
        - name: autocorrect
          in: query
          schema: { type: integer, enum: [0, 1] }
      responses:
        '200':
          description: Top tags for the album.
          content:
            application/json:
              schema: { $ref: '#/components/schemas/TopTagsResponse' }

  /?method=album.removeTag:
    post:
      operationId: albumRemoveTag
      summary: Remove Album Tag
      tags: [Album]
      description: Remove a user's tag from an album.
      requestBody: { $ref: '#/components/requestBodies/AlbumTagWrite' }
      responses:
        '200': { description: OK, content: { application/json: { schema: { $ref: '#/components/schemas/WriteResponse' } } } }

  /?method=album.search:
    get:
      operationId: albumSearch
      summary: Search Albums
      tags: [Album]
      description: Search for an album by name. Returns album matches sorted by relevance.
      parameters:
        - { $ref: '#/components/parameters/ApiKeyParam' }
        - { $ref: '#/components/parameters/FormatParam' }
        - name: album
          in: query
          required: true
          schema: { type: string }
        - name: limit
          in: query
          schema: { type: integer, default: 30 }
        - name: page
          in: query
          schema: { type: integer, default: 1 }
      responses:
        '200':
          description: Search results for albums.
          content:
            application/json:
              schema: { $ref: '#/components/schemas/SearchResponse' }

  # ARTIST
  /?method=artist.addTags:
    post:
      operationId: artistAddTags
      summary: Add Artist Tags
      tags: [Artist]
      description: Tag an artist with one or more user supplied tags.
      requestBody: { $ref: '#/components/requestBodies/ArtistTagWrite' }
      responses:
        '200': { description: OK, content: { application/json: { schema: { $ref: '#/components/schemas/WriteResponse' } } } }

  /?method=artist.getCorrection:
    get:
      operationId: artistGetCorrection
      summary: Get Artist Correction
      tags: [Artist]
      description: Use the last.fm corrections data to check whether the supplied artist has a correction to a canonical artist.
      parameters:
        - { $ref: '#/components/parameters/ApiKeyParam' }
        - { $ref: '#/components/parameters/FormatParam' }
        - name: artist
          in: query
          required: true
          schema: { type: string }
      responses:
        '200':
          description: Suggested artist correction, if any.
          content:
            application/json:
              schema: { type: object, additionalProperties: true }

  /?method=artist.getInfo:
    get:
      operationId: artistGetInfo
      summary: Get Artist Info
      tags: [Artist]
      description: Get the metadata for an artist. Includes biography, listener counts, similar artists, tags.
      parameters:
        - { $ref: '#/components/parameters/ApiKeyParam' }
        - { $ref: '#/components/parameters/FormatParam' }
        - name: artist
          in: query
          schema: { type: string }
        - name: mbid
          in: query
          schema: { type: string }
        - name: lang
          in: query
          schema: { type: string }
        - name: autocorrect
          in: query
          schema: { type: integer, enum: [0, 1] }
        - name: username
          in: query
          schema: { type: string }
      responses:
        '200':
          description: Artist info envelope.
          content:
            application/json:
              schema: { $ref: '#/components/schemas/ArtistInfoResponse' }

  /?method=artist.getSimilar:
    get:
      operationId: artistGetSimilar
      summary: Get Similar Artists
      tags: [Artist]
      description: Get all the artists similar to this artist.
      parameters:
        - { $ref: '#/components/parameters/ApiKeyParam' }
        - { $ref: '#/components/parameters/FormatParam' }
        - name: artist
          in: query
          schema: { type: string }
        - name: mbid
          in: query
          schema: { type: string }
        - name: limit
          in: query
          schema: { type: integer, default: 100 }
        - name: autocorrect
          in: query
          schema: { type: integer, enum: [0, 1] }
      responses:
        '200':
          description: Similar artists list.
          content:
            application/json:
              schema: { type: object, additionalProperties: true }

  /?method=artist.getTags:
    get:
      operationId: artistGetTags
      summary: Get Artist Tags
      tags: [Artist]
      description: Get the tags applied by an individual user to an artist on Last.fm.
      parameters:
        - { $ref: '#/components/parameters/ApiKeyParam' }
        - { $ref: '#/components/parameters/FormatParam' }
        - name: artist
          in: query
          schema: { type: string }
        - name: mbid
          in: query
          schema: { type: string }
        - name: user
          in: query
          required: true
          schema: { type: string }
      responses:
        '200':
          description: User tags for the artist.
          content:
            application/json:
              schema: { $ref: '#/components/schemas/TagListResponse' }

  /?method=artist.getTopAlbums:
    get:
      operationId: artistGetTopAlbums
      summary: Get Top Albums For Artist
      tags: [Artist]
      description: Get the top albums for an artist on Last.fm, ordered by popularity.
      parameters:
        - { $ref: '#/components/parameters/ApiKeyParam' }
        - { $ref: '#/components/parameters/FormatParam' }
        - name: artist
          in: query
          schema: { type: string }
        - name: mbid
          in: query
          schema: { type: string }
        - name: limit
          in: query
          schema: { type: integer, default: 50 }
        - name: page
          in: query
          schema: { type: integer, default: 1 }
        - name: autocorrect
          in: query
          schema: { type: integer, enum: [0, 1] }
      responses:
        '200':
          description: Top albums for the artist.
          content:
            application/json:
              schema: { $ref: '#/components/schemas/TopAlbumsResponse' }

  /?method=artist.getTopTags:
    get:
      operationId: artistGetTopTags
      summary: Get Top Artist Tags
      tags: [Artist]
      description: Get the top tags for an artist on Last.fm, ordered by popularity.
      parameters:
        - { $ref: '#/components/parameters/ApiKeyParam' }
        - { $ref: '#/components/parameters/FormatParam' }
        - name: artist
          in: query
          schema: { type: string }
        - name: mbid
          in: query
          schema: { type: string }
        - name: autocorrect
          in: query
          schema: { type: integer, enum: [0, 1] }
      responses:
        '200':
          description: Top tags for the artist.
          content:
            application/json:
              schema: { $ref: '#/components/schemas/TopTagsResponse' }

  /?method=artist.getTopTracks:
    get:
      operationId: artistGetTopTracks
      summary: Get Top Tracks For Artist
      tags: [Artist]
      description: Get the top tracks by an artist on Last.fm, ordered by popularity.
      parameters:
        - { $ref: '#/components/parameters/ApiKeyParam' }
        - { $ref: '#/components/parameters/FormatParam' }
        - name: artist
          in: query
          schema: { type: string }
        - name: mbid
          in: query
          schema: { type: string }
        - name: limit
          in: query
          schema: { type: integer, default: 50 }
        - name: page
          in: query
          schema: { type: integer, default: 1 }
        - name: autocorrect
          in: query
          schema: { type: integer, enum: [0, 1] }
      responses:
        '200':
          description: Top tracks for the artist.
          content:
            application/json:
              schema: { $ref: '#/components/schemas/TopTracksResponse' }

  /?method=artist.removeTag:
    post:
      operationId: artistRemoveTag
      summary: Remove Artist Tag
      tags: [Artist]
      description: Remove a user's tag from an artist.
      requestBody: { $ref: '#/components/requestBodies/ArtistTagWrite' }
      responses:
        '200': { description: OK, content: { application/json: { schema: { $ref: '#/components/schemas/WriteResponse' } } } }

  /?method=artist.search:
    get:
      operationId: artistSearch
      summary: Search Artists
      tags: [Artist]
      description: Search for an artist by name. Returns artist matches sorted by relevance.
      parameters:
        - { $ref: '#/components/parameters/ApiKeyParam' }
        - { $ref: '#/components/parameters/FormatParam' }
        - name: artist
          in: query
          required: true
          schema: { type: string }
        - name: limit
          in: query
          schema: { type: integer, default: 30 }
        - name: page
          in: query
          schema: { type: integer, default: 1 }
      responses:
        '200':
          description: Search results for artists.
          content:
            application/json:
              schema: { $ref: '#/components/schemas/SearchResponse' }

  # AUTH
  /?method=auth.getMobileSession:
    post:
      operationId: authGetMobileSession
      summary: Get Mobile Session
      tags: [Auth]
      description: Create a Last.fm web service session for a user. Used by mobile devices. Requires signed POST.
      requestBody:
        required: true
        content:
          application/x-www-form-urlencoded:
            schema:
              type: object
              required: [method, api_key, username, password, api_sig]
              properties:
                method: { type: string, enum: [auth.getMobileSession] }
                api_key: { type: string }
                username: { type: string }
                password: { type: string }
                api_sig: { type: string, description: MD5 signature of sorted params + secret. }
      responses:
        '200':
          description: Session response with session key, name, and subscriber flag.
          content:
            application/json:
              schema: { $ref: '#/components/schemas/SessionResponse' }

  /?method=auth.getSession:
    get:
      operationId: authGetSession
      summary: Get Web Session
      tags: [Auth]
      description: Fetch a session key for a user using a previously authorized token.
      parameters:
        - { $ref: '#/components/parameters/ApiKeyParam' }
        - { $ref: '#/components/parameters/FormatParam' }
        - name: token
          in: query
          required: true
          schema: { type: string }
        - name: api_sig
          in: query
          required: true
          schema: { type: string }
      responses:
        '200':
          description: Session response.
          content:
            application/json:
              schema: { $ref: '#/components/schemas/SessionResponse' }

  /?method=auth.getToken:
    get:
      operationId: authGetToken
      summary: Get Auth Token
      tags: [Auth]
      description: Fetch an unauthorized request token for an API account. Returns a token to be authorized by the user.
      parameters:
        - { $ref: '#/components/parameters/ApiKeyParam' }
        - { $ref: '#/components/parameters/FormatParam' }
      responses:
        '200':
          description: Unauthorized token.
          content:
            application/json:
              schema:
                type: object
                properties:
                  token: { type: string }

  # CHART
  /?method=chart.getTopArtists:
    get:
      operationId: chartGetTopArtists
      summary: Get Top Artists Chart
      tags: [Chart]
      description: Get the top artists chart on Last.fm.
      parameters:
        - { $ref: '#/components/parameters/ApiKeyParam' }
        - { $ref: '#/components/parameters/FormatParam' }
        - name: limit
          in: query
          schema: { type: integer, default: 50 }
        - name: page
          in: query
          schema: { type: integer, default: 1 }
      responses:
        '200':
          description: Top artists chart.
          content:
            application/json:
              schema: { $ref: '#/components/schemas/ChartResponse' }

  /?method=chart.getTopTags:
    get:
      operationId: chartGetTopTags
      summary: Get Top Tags Chart
      tags: [Chart]
      description: Get the top tags chart on Last.fm.
      parameters:
        - { $ref: '#/components/parameters/ApiKeyParam' }
        - { $ref: '#/components/parameters/FormatParam' }
        - name: limit
          in: query
          schema: { type: integer, default: 50 }
        - name: page
          in: query
          schema: { type: integer, default: 1 }
      responses:
        '200':
          description: Top tags chart.
          content:
            application/json:
              schema: { $ref: '#/components/schemas/TopTagsResponse' }

  /?method=chart.getTopTracks:
    get:
      operationId: chartGetTopTracks
      summary: Get Top Tracks Chart
      tags: [Chart]
      description: Get the top tracks chart on Last.fm.
      parameters:
        - { $ref: '#/components/parameters/ApiKeyParam' }
        - { $ref: '#/components/parameters/FormatParam' }
        - name: limit
          in: query
          schema: { type: integer, default: 50 }
        - name: page
          in: query
          schema: { type: integer, default: 1 }
      responses:
        '200':
          description: Top tracks chart.
          content:
            application/json:
              schema: { $ref: '#/components/schemas/TopTracksResponse' }

  # GEO
  /?method=geo.getTopArtists:
    get:
      operationId: geoGetTopArtists
      summary: Get Top Artists By Country
      tags: [Geo]
      description: Get the most popular artists on Last.fm by country.
      parameters:
        - { $ref: '#/components/parameters/ApiKeyParam' }
        - { $ref: '#/components/parameters/FormatParam' }
        - name: country
          in: query
          required: true
          schema: { type: string, example: United States }
        - name: limit
          in: query
          schema: { type: integer, default: 50 }
        - name: page
          in: query
          schema: { type: integer, default: 1 }
      responses:
        '200':
          description: Country top artists.
          content:
            application/json:
              schema: { $ref: '#/components/schemas/GeoResponse' }

  /?method=geo.getTopTracks:
    get:
      operationId: geoGetTopTracks
      summary: Get Top Tracks By Country
      tags: [Geo]
      description: Get the most popular tracks on Last.fm last week by country.
      parameters:
        - { $ref: '#/components/parameters/ApiKeyParam' }
        - { $ref: '#/components/parameters/FormatParam' }
        - name: country
          in: query
          required: true
          schema: { type: string }
        - name: location
          in: query
          schema: { type: string }
        - name: limit
          in: query
          schema: { type: integer, default: 50 }
        - name: page
          in: query
          schema: { type: integer, default: 1 }
      responses:
        '200':
          description: Country top tracks.
          content:
            application/json:
              schema: { $ref: '#/components/schemas/GeoResponse' }

  # LIBRARY
  /?method=library.getArtists:
    get:
      operationId: libraryGetArtists
      summary: Get Library Artists
      tags: [Library]
      description: A paginated list of all the artists in a user's library, with play counts and tag counts.
      parameters:
        - { $ref: '#/components/parameters/ApiKeyParam' }
        - { $ref: '#/components/parameters/FormatParam' }
        - name: user
          in: query
          required: true
          schema: { type: string }
        - name: limit
          in: query
          schema: { type: integer, default: 50 }
        - name: page
          in: query
          schema: { type: integer, default: 1 }
      responses:
        '200':
          description: Library artists for the user.
          content:
            application/json:
              schema:
                type: object
                additionalProperties: true

  # TAG
  /?method=tag.getInfo:
    get:
      operationId: tagGetInfo
      summary: Get Tag Info
      tags: [Tag]
      description: Get the metadata for a tag.
      parameters:
        - { $ref: '#/components/parameters/ApiKeyParam' }
        - { $ref: '#/components/parameters/FormatParam' }
        - name: tag
          in: query
          required: true
          schema: { type: string }
        - name: lang
          in: query
          schema: { type: string }
      responses:
        '200':
          description: Tag metadata.
          content:
            application/json:
              schema: { $ref: '#/components/schemas/TagInfoResponse' }

  /?method=tag.getSimilar:
    get:
      operationId: tagGetSimilar
      summary: Get Similar Tags
      tags: [Tag]
      description: Search for tags similar to this one. Returns tags ranked by similarity, based on listening data.
      parameters:
        - { $ref: '#/components/parameters/ApiKeyParam' }
        - { $ref: '#/components/parameters/FormatParam' }
        - name: tag
          in: query
          required: true
          schema: { type: string }
      responses:
        '200':
          description: Similar tags.
          content:
            application/json:
              schema: { $ref: '#/components/schemas/TopTagsResponse' }

  /?method=tag.getTopAlbums:
    get:
      operationId: tagGetTopAlbums
      summary: Get Top Albums For Tag
      tags: [Tag]
      description: Get the top albums tagged by this tag, ordered by tag count.
      parameters:
        - { $ref: '#/components/parameters/ApiKeyParam' }
        - { $ref: '#/components/parameters/FormatParam' }
        - name: tag
          in: query
          required: true
          schema: { type: string }
        - name: limit
          in: query
          schema: { type: integer, default: 50 }
        - name: page
          in: query
          schema: { type: integer, default: 1 }
      responses:
        '200':
          description: Top albums tagged with this tag.
          content:
            application/json:
              schema: { $ref: '#/components/schemas/TopAlbumsResponse' }

  /?method=tag.getTopArtists:
    get:
      operationId: tagGetTopArtists
      summary: Get Top Artists For Tag
      tags: [Tag]
      description: Get the top artists tagged by this tag, ordered by tag count.
      parameters:
        - { $ref: '#/components/parameters/ApiKeyParam' }
        - { $ref: '#/components/parameters/FormatParam' }
        - name: tag
          in: query
          required: true
          schema: { type: string }
        - name: limit
          in: query
          schema: { type: integer, default: 50 }
        - name: page
          in: query
          schema: { type: integer, default: 1 }
      responses:
        '200':
          description: Top artists for the tag.
          content:
            application/json:
              schema: { $ref: '#/components/schemas/ChartResponse' }

  /?method=tag.getTopTags:
    get:
      operationId: tagGetTopTags
      summary: Get Top Tags Overall
      tags: [Tag]
      description: Fetches the top global tags on Last.fm, sorted by popularity (number of times used).
      parameters:
        - { $ref: '#/components/parameters/ApiKeyParam' }
        - { $ref: '#/components/parameters/FormatParam' }
      responses:
        '200':
          description: Top global tags.
          content:
            application/json:
              schema: { $ref: '#/components/schemas/TopTagsResponse' }

  /?method=tag.getTopTracks:
    get:
      operationId: tagGetTopTracks
      summary: Get Top Tracks For Tag
      tags: [Tag]
      description: Get the top tracks tagged by this tag, ordered by tag count.
      parameters:
        - { $ref: '#/components/parameters/ApiKeyParam' }
        - { $ref: '#/components/parameters/FormatParam' }
        - name: tag
          in: query
          required: true
          schema: { type: string }
        - name: limit
          in: query
          schema: { type: integer, default: 50 }
        - name: page
          in: query
          schema: { type: integer, default: 1 }
      responses:
        '200':
          description: Top tracks for the tag.
          content:
            application/json:
              schema: { $ref: '#/components/schemas/TopTracksResponse' }

  /?method=tag.getWeeklyChartList:
    get:
      operationId: tagGetWeeklyChartList
      summary: Get Weekly Tag Chart List
      tags: [Tag]
      description: Get a list of available charts for this tag, expressed as date ranges.
      parameters:
        - { $ref: '#/components/parameters/ApiKeyParam' }
        - { $ref: '#/components/parameters/FormatParam' }
        - name: tag
          in: query
          required: true
          schema: { type: string }
      responses:
        '200':
          description: Available weekly chart ranges.
          content:
            application/json:
              schema:
                type: object
                additionalProperties: true

  # TRACK
  /?method=track.addTags:
    post:
      operationId: trackAddTags
      summary: Add Track Tags
      tags: [Track]
      description: Tag a track using a list of user supplied tags.
      requestBody: { $ref: '#/components/requestBodies/TrackTagWrite' }
      responses:
        '200': { description: OK, content: { application/json: { schema: { $ref: '#/components/schemas/WriteResponse' } } } }

  /?method=track.getCorrection:
    get:
      operationId: trackGetCorrection
      summary: Get Track Correction
      tags: [Track]
      description: Use the last.fm corrections data to check whether the supplied track has a correction to a canonical track.
      parameters:
        - { $ref: '#/components/parameters/ApiKeyParam' }
        - { $ref: '#/components/parameters/FormatParam' }
        - name: artist
          in: query
          required: true
          schema: { type: string }
        - name: track
          in: query
          required: true
          schema: { type: string }
      responses:
        '200':
          description: Suggested track correction.
          content:
            application/json:
              schema: { type: object, additionalProperties: true }

  /?method=track.getInfo:
    get:
      operationId: trackGetInfo
      

# --- truncated at 32 KB (65 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/lastfm/refs/heads/main/openapi/lastfm-openapi-original.yml