Spotify Search API: Query Syntax, Limits and 2026 Changes
How the Spotify Web API search endpoint works in 2026: query filters, the new 10-result limit, client credentials auth, 22-character IDs and the dev-mode rules.
The Spotify search API is GET https://api.spotify.com/v1/search with a q query and a type (track, artist, album, playlist, show, episode or audiobook). A client credentials token is enough. Since 11 February 2026, development-mode apps get at most 10 results per page (default 5), need a Premium account and can have 5 users. Field filters such as artist:, year: and isrc: narrow the query, and offset goes up to 1,000.
The Spotify search API is one endpoint, GET https://api.spotify.com/v1/search, that takes a text query and returns matching tracks, artists, albums, playlists, shows, episodes or audiobooks. It still works the way most tutorials describe, but 2026 changed the numbers: development-mode apps now get at most 10 results per page, need a Premium account and can have only 5 users. This guide covers the query syntax, authentication, IDs, limits and the changes that break older code.
How does the Spotify search endpoint work?
Two parameters are required: q, the search text, and type, a comma-separated list of what to search. The rest are optional. Per the search reference:
| Parameter | What it does | Values |
|---|---|---|
q | The search text, with optional field filters | Any string |
type | What to search for | album, artist, playlist, track, show, episode, audiobook |
market | Only return content playable in this country | ISO 3166-1 alpha-2 code, such as GB |
limit | Results per type, per page | 0–10, default 5 (development mode, since February 2026) |
offset | Where to start | 0–1,000 |
include_external | Mark externally hosted audio as playable | audio |
The response has one paging object per type you asked for (tracks, artists and so on), each with items, next, limit, offset and total.
How do you write a Spotify search query?
Plain words match anywhere. To narrow a search, add field filters to q. Each filter only applies to some types:
| Filter | Works for | Example |
|---|---|---|
artist: | Albums, artists, tracks | artist:Radiohead |
album: | Albums, tracks | album:"OK Computer" |
track: | Tracks | track:Airbag |
year: | Albums, artists, tracks | year:1997 or year:1990-1999 |
genre: | Artists, tracks | genre:"trip hop" |
isrc: | Tracks | isrc:GBAYE9700135 |
upc: | Albums | upc:724385522925 |
tag:new | Albums released in the last two weeks | tag:new |
tag:hipster | Albums in the lowest 10% of popularity | tag:hipster |
Filters combine with plain text: q=airbag artist:radiohead year:1997 with type=track finds that one song. Searching by isrc: is the most reliable way to match a track you already know from another source, because the ISRC identifies the recording itself.
How do you authenticate?
Search reads no user data, so the client credentials flow is enough: exchange your app's client id and secret for a token, then send it as a bearer token. Tokens last 3,600 seconds, so cache one and reuse it.
TOKEN=$(curl -s -X POST "https://accounts.spotify.com/api/token" \
-u "$SPOTIFY_CLIENT_ID:$SPOTIFY_CLIENT_SECRET" \
-d "grant_type=client_credentials" | jq -r .access_token)
curl -G "https://api.spotify.com/v1/search" \
-H "Authorization: Bearer $TOKEN" \
--data-urlencode "q=airbag artist:radiohead" \
--data-urlencode "type=track" \
--data-urlencode "market=GB" \
--data-urlencode "limit=10"The same call in Python:
import os
import requests
token = requests.post(
"https://accounts.spotify.com/api/token",
auth=(os.environ["SPOTIFY_CLIENT_ID"], os.environ["SPOTIFY_CLIENT_SECRET"]),
data={"grant_type": "client_credentials"},
).json()["access_token"]
res = requests.get(
"https://api.spotify.com/v1/search",
headers={"Authorization": f"Bearer {token}"},
params={"q": "airbag artist:radiohead", "type": "track", "market": "GB", "limit": 10},
)
for track in res.json()["tracks"]["items"]:
print(track["id"], track["name"], track["artists"][0]["name"])What is a Spotify ID, URI and URL?
Every result carries an id. Spotify's IDs and URIs page defines the ID as the base-62 identifier at the end of a Spotify URI. Track, artist, album and playlist IDs are typically 22 characters long. The same item appears in three forms:
| Form | Example |
|---|---|
| ID | 6rqhFgbbKwnb9MLmUQDhG6 |
| URI | spotify:track:6rqhFgbbKwnb9MLmUQDhG6 |
| URL | https://open.spotify.com/track/6rqhFgbbKwnb9MLmUQDhG6 |
To turn a pasted link into an ID, take the path segment after /track/, /artist/ or /album/ and drop any ?si= query string. Not every Spotify identifier is 22 characters: user IDs and category IDs are ordinary strings, so do not validate on length alone.
What are the Spotify search API limits?
Spotify counts requests over a rolling 30-second window and does not publish the numbers. When you go over, you get HTTP 429 with a Retry-After header in seconds; wait that long before retrying. Since July 2026, development-mode quota is counted per developer account instead of per app, and a quota error carries "reason": "QUOTA_EXCEEDED".
The bigger limits are on who can use the API at all:
- Development mode is now for learning, experiments and non-commercial personal projects. Since February 2026 the app owner needs Spotify Premium, and each app can have 5 authorised users.
- Extended quota mode, for production, has only been open to organisations since May 2025: a registered business with a launched service and at least 250,000 monthly active users, with review taking up to six weeks.
What changed in the Spotify Web API in 2024–2026?
If a tutorial's code fails, it was probably written before one of these:
| Date | Change |
|---|---|
| 27 November 2024 | New apps lost Recommendations, Related Artists, Audio Features, Audio Analysis and Spotify's editorial playlists |
| 15 May 2025 | Extended quota limited to organisations with 250,000+ monthly active users |
| 11 February 2026 | Development mode: Premium required, 5 users, search limit cut to 10, several endpoints and fields removed |
| March 2026 | external_ids (ISRC, UPC) restored on tracks and albums |
| July 2026 | Quota counted per developer account |
The February 2026 migration guide also removed batch lookups such as GET /tracks?ids=, artist top tracks and the browse endpoints, and deprecated fields including popularity, genres and followers. Code that sorts search results by popularity needs another signal.
Searching Spotify alongside other platforms
If Spotify is one of several sources you search, for example finding an artist on Spotify, SoundCloud and Apple Music together, crawlfeed exposes Spotify search and lookups with the same API key and response shape as its other 26 platforms:
| Operation | Endpoint | Needs | Credits |
|---|---|---|---|
| Profile | /v1/spotify/profile | handle | 1 |
| Posts | /v1/spotify/posts | handle | 1 |
| Post | /v1/spotify/post | id | 1 |
| Search | /v1/spotify/search | q | 1 |
| Collection | /v1/spotify/collection | id | 1 |
| Collection posts | /v1/spotify/collection/posts | id | 1 |
| Collection tracks | /v1/spotify/collection/tracks | id | 1 |
| Track | /v1/spotify/track | id | 1 |
| Tracks | /v1/spotify/tracks | handle | 1 |
A search costs 1 credit, and artists come back as Profile objects, the same type as a SoundCloud or Apple Music artist. Spotify's Developer Terms apply to Spotify content whichever way you fetch it: they forbid feeding it into AI models and building databases beyond what your app needs, so crawlfeed excludes Spotify from its AI enrichment and raw archive. See the Spotify reference for the parameters, or the SoundCloud API guide for the other big music source.
The short answer
Call GET https://api.spotify.com/v1/search with q, type and a client credentials token. Narrow results with filters such as artist:, year: and isrc:, and page with offset up to 1,000. In development mode you get at most 10 results per page, need Premium and can have 5 users; production access is limited to businesses with 250,000 monthly users. IDs are base-62 strings, typically 22 characters, found at the end of every Spotify URI and URL.
Questions
Is there a Spotify search API?
Yes. The Spotify Web API has a search endpoint, GET https://api.spotify.com/v1/search, that finds albums, artists, playlists, tracks, shows, episodes and audiobooks. You call it with an access token, and the client credentials flow is enough because search reads no user data.
How many results does the Spotify search API return?
For development-mode apps, at most 10 per page since 11 February 2026, with a default of 5. Before that the maximum was 50 and the default 20; apps with extended quota keep the higher limit. You can page with offset up to 1,000.
How long is a Spotify track ID?
Spotify IDs are base-62 strings, typically 22 characters long, such as 6rqhFgbbKwnb9MLmUQDhG6. Spotify's docs define the ID as the identifier at the end of a Spotify URI (spotify:track:6rqhFgbbKwnb9MLmUQDhG6) or URL (open.spotify.com/track/6rqhFgbbKwnb9MLmUQDhG6) but do not state the length.
Is the Spotify Web API free?
Spotify charges no per-call fee, but since February 2026 a development-mode app needs its owner to have Spotify Premium, and it is limited to 5 users. Extended quota, for production apps, is only open to registered businesses with at least 250,000 monthly active users.
What are the Spotify API rate limits?
Spotify counts calls over a rolling 30-second window and does not publish the numbers. Over the limit you get HTTP 429 with a Retry-After header. Since July 2026, development-mode quota is counted per developer account rather than per app.
Try it on your own data
Every example above runs as written. New accounts get 100 free credits, no card needed.
Get an API key