Rate Limits
SoundCloud enforces API rate limits per registered application (client_id). Exceeding a limit returns HTTP 429 Too Many Requests. Limits are subject to change; use the X-Ratelimit-* headers on responses for the quotas that apply to your application.
Constraints:
- A general per-application request budget applies to most of
https://api.soundcloud.com, plus additional, stricter caps on selected endpoints to reduce abuse. - OAuth token requests at
https://secure.soundcloud.com/oauth/tokenare limited separately — see Client Credentials constraints in the API Guide.
General API traffic
Nearly all API calls share a per-application request budget over a short rolling window (one minute). The default budget is on the order of 100 requests per minute unless a stricter rule below applies.
Stricter endpoint groups
These routes have additional caps on top of the general per-minute budget. Typical default limits:
| Area | What it covers | Window | Typical limit |
|---|---|---|---|
| Playback / streaming | GET /tracks/:id/stream(s) |
24 hours | 1,500 requests |
| Search | GET /search and related search endpoints |
1 hour | 3,000 requests |
| Downloads | GET /tracks/:id/download |
1 minute | 10 requests |
| Reposts | Creating and removing reposts (POST / DELETE on repost resources) |
24 hours | 500 actions |
| Likes | Liking, unliking, and listing likes (GET, POST, and DELETE on like resources and user like lists) |
24 hours | 500 requests |
Some applications that SoundCloud has approved for higher production access may receive up to 10× these limits on the same endpoint groups (including the general per-minute budget).
429 responses and rate-limit headers
API responses include rate-limit headers for the limit that applied to that request (for example, the stream quota on GET /tracks/:id/stream(s), or the general per-minute budget on other routes). Header names are case-insensitive; SoundCloud sends:
| Header | Meaning |
|---|---|
X-Ratelimit-Limit |
Maximum requests allowed in the current window for the limit that applied. |
X-Ratelimit-Remaining |
Requests remaining in the current window. |
X-Ratelimit-Reset |
Unix time (seconds since epoch) when the current window resets. |
Example (playback / stream limit):
X-Ratelimit-Limit: 1500
X-Ratelimit-Remaining: 1362
X-Ratelimit-Reset: 1792074648
X-Ratelimit-Limit reflects whichever cap governed the request — stricter endpoint limits and the general API budget use separate windows, so values differ by route.
When a limit is exceeded, the status is 429 Too Many Requests. Check Retry-After (seconds until retry is appropriate) when present. Rate-limit headers may still appear on 429 responses when applicable.
The response body is a generic API error payload. An older JSON shape with errors[].meta.rate_limit (including fields such as group, remaining_requests, and reset_time) is not returned for current rate-limit responses.