openapi: 3.0.3 info: title: Last.fm Web Services API (2.0) Album Chart API 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: partners@last.fm 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) security: - ApiKeyAuth: [] - SignedAuth: [] tags: - name: Chart description: Global top artists, tags, and tracks. 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: - Chart 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 ``. '400': $ref: '#/components/responses/ErrorResponse' '403': $ref: '#/components/responses/ErrorResponse' '429': $ref: '#/components/responses/ErrorResponse' /?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' components: schemas: TopTracksResponse: type: object properties: toptracks: type: object properties: track: type: array items: $ref: '#/components/schemas/Track' Artist: type: object properties: name: type: string mbid: type: string url: type: string format: uri image: type: array items: $ref: '#/components/schemas/Image' streamable: type: string ontour: type: string stats: type: object properties: listeners: type: string playcount: type: string similar: type: object properties: artist: type: array items: $ref: '#/components/schemas/Artist' tags: type: object properties: tag: type: array items: $ref: '#/components/schemas/Tag' bio: $ref: '#/components/schemas/Wiki' SearchResponse: type: object properties: results: type: object properties: opensearch:Query: type: object additionalProperties: true opensearch:totalResults: type: string opensearch:startIndex: type: string opensearch:itemsPerPage: type: string albummatches: type: object properties: album: type: array items: $ref: '#/components/schemas/Album' artistmatches: type: object properties: artist: type: array items: $ref: '#/components/schemas/Artist' trackmatches: type: object properties: track: type: array items: $ref: '#/components/schemas/Track' Image: type: object properties: size: type: string enum: - small - medium - large - extralarge - mega '#text': type: string format: uri ChartResponse: type: object properties: artists: type: object properties: artist: type: array items: $ref: '#/components/schemas/Artist' AlbumInfoResponse: type: object properties: album: $ref: '#/components/schemas/Album' ArtistInfoResponse: type: object properties: artist: $ref: '#/components/schemas/Artist' TopTagsResponse: type: object properties: toptags: type: object properties: tag: type: array items: $ref: '#/components/schemas/Tag' Track: type: object properties: name: type: string mbid: type: string url: type: string format: uri duration: type: string artist: $ref: '#/components/schemas/Artist' album: type: object properties: artist: type: string title: type: string mbid: type: string url: type: string format: uri listeners: type: string playcount: type: string userplaycount: type: string userloved: type: string enum: - '0' - '1' toptags: type: object properties: tag: type: array items: $ref: '#/components/schemas/Tag' wiki: $ref: '#/components/schemas/Wiki' '@attr': type: object properties: nowplaying: type: string date: type: object properties: uts: type: string '#text': type: string TrackInfoResponse: type: object properties: track: $ref: '#/components/schemas/Track' Tag: type: object properties: name: type: string url: type: string format: uri count: type: integer UserProfile: type: object properties: name: type: string realname: type: string url: type: string format: uri country: type: string age: type: string gender: type: string subscriber: type: string playcount: type: string playlists: type: string bootstrap: type: string registered: type: object properties: unixtime: type: string '#text': type: string image: type: array items: $ref: '#/components/schemas/Image' Wiki: type: object properties: published: type: string summary: type: string content: type: string GeoResponse: type: object properties: topartists: type: object properties: artist: type: array items: $ref: '#/components/schemas/Artist' Album: type: object properties: artist: type: string name: type: string mbid: type: string url: type: string format: uri image: type: array items: $ref: '#/components/schemas/Image' listeners: type: string playcount: type: string tracks: type: object properties: track: type: array items: $ref: '#/components/schemas/Track' tags: type: object properties: tag: type: array items: $ref: '#/components/schemas/Tag' wiki: $ref: '#/components/schemas/Wiki' UserInfoResponse: type: object properties: user: $ref: '#/components/schemas/UserProfile' ErrorPayload: type: object properties: error: type: integer description: 'Numeric Last.fm error code. Common: 2 invalid service, 3 invalid method, 4 authentication failed, 5 invalid format, 6 invalid parameters, 7 invalid resource, 8 operation failed, 9 invalid session key, 10 invalid api key, 11 service offline, 13 invalid method signature, 16 service temporarily unavailable, 26 suspended api key, 29 rate limit exceeded. ' message: type: string TagInfoResponse: type: object properties: tag: type: object properties: name: type: string total: type: integer reach: type: integer wiki: $ref: '#/components/schemas/Wiki' responses: ErrorResponse: description: Error response (status='failed'). content: application/json: schema: $ref: '#/components/schemas/ErrorPayload' application/xml: schema: type: string description: '`message`' parameters: MethodParam: name: method in: query required: true schema: type: string description: 'Method name in `package.method` format (e.g. `track.getInfo`, `chart.getTopArtists`, `user.getRecentTracks`). ' FormatParam: name: format in: query schema: type: string enum: - xml - json default: xml description: Response format. Defaults to XML. ApiKeyParam: name: api_key in: query required: true schema: type: string description: Your Last.fm API key. CallbackParam: name: callback in: query schema: type: string description: Optional JSONP callback function name when `format=json`. securitySchemes: ApiKeyAuth: type: apiKey in: query name: api_key description: Required on all calls. Obtain from https://www.last.fm/api/account/create. SignedAuth: type: apiKey in: query name: api_sig description: 'MD5 signature of all request parameters (excluding format and callback) sorted alphabetically by name, concatenated as name+value pairs, with the shared secret appended. Required for all write/auth methods. '