Undocumented 100 requests/minute limit since Oct 19, 2026: 429 on all endpoints, including `/me` right after login

Aperta
#606 6 commenti 0 reazioni 0 assegnatari Vedi su GitHub

Nessuno ha ancora preso questa issue.

Valutazione

Difficoltà
4/5
Tempo stimato
3-5 giorni
Idoneità per principianti
44/100
Tipo di issue
Bug
Chiarezza
Abbastanza chiara
Stato di attività
Attiva
Stack tecnologico
javascript

Direzione di ricerca

Start by checking the API rate limits documentation linked in the issue and the request handling entry points for the affected endpoints: /me, /users/{id}/tracks, /users/{id}/favorites, and /users/{id}/followings. Compare the documented limits with the reported headers and behavior, then determine whether the 100 requests per minute limit is intentional and how it is applied. Done means the limit and headers are explained and the documentation reflects confirmed behavior.

Scritto dal modello di indicizzazione a partire dal testo della issue.

Descrizione

Summary

Since 2026-10-19, ~11:17 UTC, every API request from our app has been rejected with 429 Too Many Requests once we pass about 100 requests per minute. This includes GET /me called with a freshly issued user token right after the OAuth code exchange, so user logins fail. Our request volume had been stable for months and did not change around that date (no deploy, no new users or subscriptions).

The responses don't match the rate limits documentation. The docs say limits are calculated per client_id, that only plays are limited, that windows are 24 hours, and that a 429 body names the bucket and its reset_time.

What we see
HTTP/1.1 429 Too Many Requests
x-ratelimit-limit: 100
x-ratelimit-remaining: 0
x-ratelimit-reset: 1793186890

{
    "error": "Rate Limit Exceeded"
}
  • Endpoints affected: GET /users/{id}/tracks, GET /users/{id}/favorites, GET /users/{id}/followings and GET /me. It happens with the app's own OAuth token and with end-user tokens alike.
  • x-ratelimit-reset looks like a sliding window of roughly 60 seconds. Under continuous traffic it keeps moving forward: two probes 20 seconds apart both reported a reset about 38 seconds in the future.
  • Rejected requests seem to count against the window too. A client that keeps polling while rate-limited never gets out of it.
  • Our load before the change: about 75 requests per minute on average (an hourly poll of public tracks, likes and followings of about 1,400 artists, 3 requests each). It ran for months without problems; our logs show no 429 at all in the 11 days before the change.
Questions
  1. Is the 100 requests/minute limit intentional and permanent?
  2. What is it counted against: client_id, access token, source IP, or something else?
  3. Is it a fixed or a sliding window, and do rejected requests count toward it?
  4. Can a registered app request a higher limit, and if so, how?
  5. Could the rate limits documentation be updated to describe this limit and the x-ratelimit-* headers?
What we changed on our side (for others hitting this)
  • Background jobs are paced to 70 requests/minute, which leaves headroom for user-facing requests such as logins.
  • After any 429, all background requests pause until x-ratelimit-reset instead of retrying right away.
  • Login retries /me once after the reset before it gives up.

With this in place, requests succeed again. A probe one minute after the deploy got 200 with x-ratelimit-remaining: 35.

We can share our client_id and request timestamps privately if that helps.

Lingua principale
JavaScript
Stelle
262
Fork
52
Metriche di merge delle PR
Nessuna PR unita negli ultimi 30g

Preparare l'ambiente

Questo progetto non fornisce container di sviluppo, Dockerfile né guida per i contributori, quindi l'ambiente è a tuo carico: parti dal suo README e consulta la nostra guida al primo contributo per i passaggi generali.

Come iniziare

  1. Leggi tutta la issue e poi la guida ai contributi del progetto.
  2. Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
  3. Fai un fork del repository e lavora su un branch.
  4. Apri una pull request che faccia riferimento al numero della issue.

Altre issue di soundcloud/api

Tutte le issue di soundcloud/api

Issue simili

Altre issue su JavaScript

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.