Guide
Spotify API rate limits: the official rolling window, and what each plan here allows
Spotify does not publish a number. This API does: 5 requests per second on RapidAPI, 10 on the direct portal, and a monthly quota per plan. This page puts the two side by side, shows what a 429 looks like on each, and gives the client code that stays under the limit without thinking about it.
By Eduardo Airaudo, maintainer of the API · Updated 15 September 2026
How Spotify's own limit works
The Web API's rate limit is computed over a rolling 30-second window of calls made by your app, and Spotify states no figure for it. Development-mode apps get a lower allowance than apps in extended quota mode, and the only way to learn where the line is, is to cross it: a 429 Too Many Requests with a Retry-After header giving the seconds to wait.
Two things follow. A limit you cannot read cannot be planned for, so every Spotify client needs backoff code from day one. And because the window is per app, not per key, a single busy customer can push every other user of your app into 429s.
The limits here, per plan
Per-second limits are per key and do not change between plans; the plans differ in monthly volume. Prices as listed on each platform on 15 September 2026 — the pricing page has the per-request cost at four volumes.
| Route | Plan | Per second | Per month | Price |
|---|---|---|---|---|
| RapidAPI | Basic | 5 req/s | 1,000 requests | $0/mo |
| RapidAPI | Pro | 5 req/s | 20,000 requests | $10/mo |
| RapidAPI | Ultra | 5 req/s | 200,000 requests | $30/mo |
| RapidAPI | Mega | 5 req/s | Unlimited requests | $200/mo |
| Direct portal | 20K requests | 10 req/s | 20K requests | $9/mo |
| Direct portal | 50K requests | 10 req/s | 50K requests | $13.50/mo |
| Direct portal | 100K requests | 10 req/s | 100K requests | $18/mo |
| Direct portal | 200K requests | 10 req/s | 200K requests | $27/mo |
| Direct portal | 500K requests | 10 req/s | 500K requests | $67.50/mo |
| Direct portal | 1M requests | 10 req/s | 1M requests | $135/mo |
| Direct portal | 5M requests | 10 req/s | 5M requests | $675/mo |
Apify runs are throttled per run rather than per second, and billed per result rather than per month — see the scraper guide. The live demo on this site allows 100 requests per 15 minutes and 500 a day per visitor, inside a budget every visitor shares; it is a demo, not a free tier.
Fewer calls: the batch endpoints
The cheapest request is the one you do not send. These accept a comma-separated ids list, so a playlist's worth of lookups is one call against the per-second limit and one against the monthly quota.
- Artist overview (batch)GET /artist_overview_batch
- Album metadata (batch)GET /album_metadata_batch
- Track credits (batch)GET /track_credits_batch
- Track lyrics (batch)GET /track_lyrics_batch
- Track popularity (batch)GET /track_popularity_batch
- Get tracksGET /tracks
- Get artistsGET /artists
- Get albumsGET /albums
- Audio featuresGET /audio_features
The three *_batch endpoints cap at 25 ids per call. /tracks, /artists and /albums take lists too. Chart endpoints answer with the whole chart in one response, and the demo caches every GET, charts for an hour.
Client code that stays under the limit
Two mechanisms, both small: a token bucket that spaces requests to the plan's per-second rate, and a retry on 429 that honours Retry-After when present and backs off exponentially when it is not. The official SDKs on the Node and Python pages wrap the same endpoints if you would rather not write this yourself.
| // Paces calls to 5/s and retries 429s, honouring Retry-After. |
| const BASE = "https://spotify-proxy.checkleaked.cc"; |
| const RATE = 5; // requests per second on your plan |
| let nextSlot = 0; |
| async function paced(path, params = {}, attempt = 0) { |
| const now = Date.now(); |
| nextSlot = Math.max(nextSlot, now) + 1000 / RATE; |
| await new Promise((r) => setTimeout(r, nextSlot - now - 1000 / RATE)); |
| const url = new URL(path, BASE); |
| url.search = new URLSearchParams(params).toString(); |
| const res = await fetch(url, { headers: { "x-api-key": process.env.SPOTIFY_KEY } }); |
| if (res.status === 429 && attempt < 5) { |
| const retryAfter = Number(res.headers.get("retry-after")); |
| const wait = retryAfter > 0 ? retryAfter * 1000 : 500 * 2 ** attempt; |
| await new Promise((r) => setTimeout(r, wait)); |
| return paced(path, params, attempt + 1); |
| } |
| if (!res.ok) throw new Error(`${res.status} ${path}`); |
| return res.json(); |
| } |
| // 25 ids per call: one request instead of twenty-five. |
| const overview = await paced("/artist_overview_batch", { ids: ids.slice(0, 25).join(",") }); |
Questions
What is the Spotify Web API rate limit?
Spotify does not publish a figure. The limit is calculated over a rolling 30-second window of your app's calls, is lower for development-mode apps than for extended-quota apps, and is reported only by a 429 response carrying a Retry-After header.
What are the rate limits on this API?
5 requests per second on every RapidAPI plan and 10 per second on every direct-portal plan, per key. Plans differ by monthly volume: RapidAPI from 1,000 requests a month free to unlimited, the direct portal from 20K to 5M a month.
What happens when I exceed it?
A 429 response. Wait for the Retry-After value when the response carries one, otherwise back off exponentially and retry; the snippets above do both. Monthly quota overruns on RapidAPI are governed by the plan's own overage terms on its pricing page.
Are the limits per key or per app?
Per key. Spotify's window is per registered app, which is why one heavy user of your app can rate-limit everyone; here each key you issue to a customer or a job has its own allowance.
How do I cut the number of requests?
Use the batch endpoints (25 ids per call), request lists with /tracks?ids=, /artists?ids= and /albums?ids=, and cache responses that change slowly — charts refresh daily, catalogue metadata rarely.
Is the demo on this site a free tier?
No. It is a demo: 100 requests per 15 minutes and 500 a day per visitor, from a budget every visitor shares, and only from a browser on this site. Scripts get a 403 pointing at the real API, where RapidAPI's Basic plan is free for 1,000 requests a month.
Sources
- Rate Limits — Spotify for Developers — the rolling 30-second window, 429 and Retry-After, development mode versus extended quota.
- Spotify81 pricing on RapidAPI — the four plans and their monthly quotas, as listed by the marketplace.
- Direct portal — the seven volume tiers at 10 requests per second.
More guides
- Spotify Web API alternativeEndpoint-by-endpoint mapping from the official API, including everything Spotify removed on 27 November 2024.
- Spotify API without OAuthOne header instead of the client-credentials flow — and the things a key genuinely cannot do.
- Spotify lyrics APIWhy the Web API has no lyrics endpoint, and how to get line-synced lyrics as JSON, LRC or SRT.
- Spotify charts APIDaily Top 200 and viral charts as JSON: rank movement, stream counts, credits, and how to backfill.
- Spotify monthly listeners APIMonthly listeners, follower counts, world rank and top cities per artist — numbers the Web API never returned.
- Spotify audio features API after the 2024 deprecationTempo, energy, danceability, recommendations and related artists after Spotify removed them for new apps.
- Spotify scraper on ApifyPlay counts, charts, lyrics and credits as a scheduled run with no API key — and when an API key is the better tool.
Pick the plan that fits your volume
5 requests a second from $0 on RapidAPI, 10 a second from $9 on the direct portal, or pay per result on Apify.