arazzo: 1.0.1
info:
title: Last.fm User Taste Profile
summary: Read a user's profile, find their top artist for a period, and surface that artist's top tracks.
description: >-
Builds a snapshot of a listener's taste. It loads the user profile, pulls
their top artists for a chosen time period, selects the most-played artist,
and then fetches that artist's most popular tracks so a recommendation
surface can lead with a familiar name. Each step writes its request inline,
including the required api_key and the format=json selector, so the flow is
self-describing without the OpenAPI source.
version: 1.0.0
sourceDescriptions:
- name: artistApi
url: ../openapi/lastfm-artist-api-openapi.yml
type: openapi
- name: userApi
url: ../openapi/lastfm-user-api-openapi.yml
type: openapi
workflows:
- workflowId: user-taste-profile
summary: Profile a user, find their top artist for a period, and pull that artist's top tracks.
description: >-
Resolves a user's profile, ranks their top artists over a time window, and
chains the leading artist into a top tracks lookup.
inputs:
type: object
required:
- apiKey
- user
properties:
apiKey:
type: string
description: Your Last.fm API key.
user:
type: string
description: The Last.fm username to profile.
period:
type: string
description: Aggregation window for the user's top artists.
default: 6month
limit:
type: integer
description: Max items per page for the top artists and top tracks lists.
default: 10
steps:
- stepId: userInfo
description: >-
Load the user's public profile, including play count and country.
operationId: userGetInfo
parameters:
- name: api_key
in: query
value: $inputs.apiKey
- name: format
in: query
value: json
- name: user
in: query
value: $inputs.user
successCriteria:
- condition: $statusCode == 200
outputs:
userName: $response.body#/user/name
playcount: $response.body#/user/playcount
country: $response.body#/user/country
- stepId: userTopArtists
description: >-
Rank the user's most-played artists over the requested time period.
operationId: userGetTopArtists
parameters:
- name: api_key
in: query
value: $inputs.apiKey
- name: format
in: query
value: json
- name: user
in: query
value: $steps.userInfo.outputs.userName
- name: period
in: query
value: $inputs.period
- name: limit
in: query
value: $inputs.limit
successCriteria:
- condition: $statusCode == 200
outputs:
topArtistName: $response.body#/topartists/artist/0/name
topArtists: $response.body#/topartists/artist
- stepId: artistTopTracks
description: >-
Fetch the most popular tracks for the user's top artist.
operationId: artistGetTopTracks
parameters:
- name: api_key
in: query
value: $inputs.apiKey
- name: format
in: query
value: json
- name: artist
in: query
value: $steps.userTopArtists.outputs.topArtistName
- name: limit
in: query
value: $inputs.limit
- name: autocorrect
in: query
value: 1
successCriteria:
- condition: $statusCode == 200
outputs:
topTracks: $response.body#/toptracks/track
outputs:
userName: $steps.userInfo.outputs.userName
playcount: $steps.userInfo.outputs.playcount
topArtistName: $steps.userTopArtists.outputs.topArtistName
topArtists: $steps.userTopArtists.outputs.topArtists
topArtistTopTracks: $steps.artistTopTracks.outputs.topTracks
Calls without X-API-Key need no key. Calls with it need a paid plan — get a key.
Get an API key
Free tier, no form to fill in. Signing in shares your email address with us — we
store it to create your key and to recognise you if you sign in with another
provider. See our Privacy Policy and
Terms.