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/token are 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.