Spotify

Spotify

Playlist

per_call

Resolves any public Spotify playlist into its metadata and contents: owner, description, follower count, artwork, total track count and each track with artist, album, duration and added-at date. Results are paginated with a cursor so large editorial playlists can be walked end to end. Made for playlist research and pitching workflows.

What you get

Each call returns up to 50 playlist tracks, plus a cursor for the next 50.

Endpoint

GET /v1/spotify/playlist

Price

$1.50

per 1,000 calls · $0.0015 per call

Cost per call

1 credit

Failed calls never charged

Parameters

id
optional
string

The Spotify playlist ID. Required unless `url` is supplied.

url
optional
string

The public Spotify playlist URL. Required unless `id` is supplied.

cursor
optional
string

Pagination cursor returned by a previous response.

fresh
optional
enum

Bypass cached data and force a live fetch for this one call. Use it for daily monitoring or any figure you are tracking over time. Accepts `true`, `1`, `false` or `0`; anything else returns 400 `invalid_fresh`. Defaults to false and costs exactly the same as a cached call.

One of: true, 1, false, 0

Example request

Live call. Successful calls are charged; failed and empty results are not.

curl
curl "https://fastfetchz.com/v1/spotify/playlist?id=37i9dQZF1DXcBWIGoYBM5M" \
  -H "X-API-Key: $FASTFETCHZ_KEY"

Example response

200 application/json
{
  "success": true,
  "service": {
    "platform": "Spotify",
    "name": "Playlist",
    "slug": "playlist"
  },
  "credits_charged": 1,
  "credits_remaining": 99,
  "latency_ms": 214,
  "data": {
    "id": "37i9dQZF1DXcBWIGoYBM5M",
    "uri": "spotify:playlist:37i9dQZF1DXcBWIGoYBM5M",
    "__typename": "Playlist",
    "description": "The hottest 50. Cover: ADÉLA​",
    "followers": 33852683,
    "images": [
      {
        "sources": [
          {
            "height": null,
            "url": "https://i.scdn.co/image/ab67706f00000002810d3464499e998c3faf8b9e",
            "width": null
          }
        ]
      }
    ],
    "name": "Today’s Top Hits",
    "ownerV2": {
      "__typename": "User",
      "avatar": {
        "sources": [
          {
            "height": 64,
            "url": "https://i.scdn.co/image/ab67757000003b8255c25988a6ac314394d3fbf5",
            "width": 64
          },
          {
            "height": 300,
            "url": "https://i.scdn.co/image/ab6775700000ee8555c25988a6ac314394d3fbf5",
            "width": 300
          }
        ]
      },
      "name": "Spotify",
      "uri": "spotify:user:spotify",
      "username": "spotify"
    },
    "tracks": [
      {
        "id": "02HyFYmpzt02VJ8k0CqxKj",
        "__typename": "Track",
        "albumOfTrack": {
          "coverArt": {
            "sources": [
              {
                "height": 300,
                "url": "https://i.scdn.co/image/ab67616d00001e02b176fc721e1faba78b1ef35b",
                "width": 300
              },
              {
                "height": 64,
                "url": "https://i.scdn.co/image/ab67616d00004851b176fc721e1faba78b1ef35b",
                "width": 64
              }
            ]
          },
          "name": "Ain't In LA",
          "uri": "spotify:album:3qGInqGfOePTekb0y7AZ4s"
        },
        "artists": [
          {
            "profile": {
              "name": "ADÉLA"
            },
            "uri": "spotify:artist:2qanRMyA5bNuTvz1dK45OP"
          }
        ],
        "availableMarkets": [
          {
            "countryCode": "AR"
          },
          {
            "countryCode": "AU"
          }
        ],
        "contentRating": {
          "label": "EXPLICIT"
        },
        "discNumber": 1,
        "duration": {
          "totalMilliseconds": 184927
        },
        "name": "Ain't In LA",
        "playability": {
          "playable": true
        },
        "playcount": 89159221,
        "previews": {
          "audioPreviews": [
            {
              "url": "https://p.scdn.co/mp3-preview/a3d0119e3182fbb19636c2a44737fa3e0b71f939"
            }
          ]
        },
        "trackNumber": 1,
        "uri": "spotify:track:02HyFYmpzt02VJ8k0CqxKj"
      },
      {
        "id": "3h5T5JypYU7huFiVYhv1dr",
        "__typename": "Track",
        "albumOfTrack": {
          "coverArt": {
            "sources": [
              {
                "height": 300,
                "url": "https://i.scdn.co/image/ab67616d00001e0221deb742375f88edfb2e7368",
                "width": 300
              },
              {
                "height": 64,
                "url": "https://i.scdn.co/image/ab67616d0000485121deb742375f88edfb2e7368",
                "width": 64
              }
            ]
          },
          "name": "NO ME ARREPIENTO DE SENTIR TANTO",
          "uri": "spotify:album:7a0lnWtCz0eW15WsWu3dHQ"
        },
        "artists": [
          {
            "profile": {
              "name": "KAROL G"
            },
            "uri": "spotify:artist:790FomKkXshlbRYZFtlgla"
          },
          {
            "profile": {
              "name": "Judeline"
            },
            "uri": "spotify:artist:1H6X7yhnXZg73f9bssaj1Q"
          }
        ],
        "availableMarkets": [
          {
            "countryCode": "AR"
          },
          {
            "countryCode": "AU"
          }
        ],
        "contentRating": {
          "label": "NONE"
        },
        "discNumber": 1,
        "duration": {
          "totalMilliseconds": 225834
        },
        "name": "BbY WOW",
        "playability": {
          "playable": true
        },
        "playcount": 103015038,
        "previews": {
          "audioPreviews": [
            {
              "url": "https://p.scdn.co/mp3-preview/f6ab45a8375c5bcf6f03161edd9f44c1fad501c8"
            }
          ]
        },
        "trackNumber": 11,
        "uri": "spotify:track:3h5T5JypYU7huFiVYhv1dr"
      }
    ],
    "cursor": null,
    "totalCount": 50
  }
}

Getting more results

Each response includes a cursor. Pass it back as cursor to fetch the next 50 playlist tracks. Repeat until no cursor is returned.

two calls
# Call 1 — first 50 playlist tracks
curl "https://fastfetchz.com/v1/spotify/playlist?id=37i9dQZF1DXcBWIGoYBM5M" \
  -H "X-API-Key: $FASTFETCHZ_KEY"
# -> { "data": { ... }, "cursor": "eyJwYWdlIjoyfQ" }

# Call 2 — next 50 playlist tracks
curl "https://fastfetchz.com/v1/spotify/playlist?id=37i9dQZF1DXcBWIGoYBM5M&cursor=eyJwYWdlIjoyfQ" \
  -H "X-API-Key: $FASTFETCHZ_KEY"

Limits

  • Maximum per call: 50 playlist tracks.
  • Minimum per call: 1 playlist track — a target with less data returns fewer playlist tracks, and an empty result is still a successful call.
  • Each call fetches a full page of up to 50 and costs the same either way. Pass limit to receive fewer than that in the response.
  • Larger jobs are paginated with a cursor; there is no cap on how many pages you fetch.

What this costs in practice

500,000 playlist tracks = 10,000 calls × 1 credits per call = 10,000 credits = $0.00

Priced at the Custom pack rate: 1,000,000 credits for $0.00.

Open in the pricing calculator

Error codes

401invalid_api_keyMissing or unrecognized X-API-Key header. No credits are charged.
402insufficient_creditsYour balance is below the cost of the call. Top up to continue.
403account_suspended / key_revokedThe account is suspended or the key was revoked.
429rate_limitedOver your account's requests-per-second limit. Retrying helps: the body carries retry_after_seconds and the response carries a Retry-After header. Not charged.
429monthly_cap_reachedThis key used the monthly call cap you set for it. Retrying will not help — raise the cap, use another key, or wait for the next calendar month. No Retry-After header is sent. Not charged.
500upstream_errorUnexpected failure while fulfilling the request. Not charged.