{"templateId":"markdown","sharedDataIds":{"sidebar":"sidebar-api-docs/sidebars.yaml"},"props":{"metadata":{"markdoc":{"tagList":[]},"type":"markdown"},"seo":{"title":"Rate limits"},"dynamicMarkdocComponents":[],"compilationErrors":[],"ast":{"$$mdtype":"Tag","name":"article","attributes":{},"children":[{"$$mdtype":"Tag","name":"Heading","attributes":{"level":1,"id":"rate-limits","__idx":0},"children":["Rate limits"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Rate limits protect the platform from overload and are applied ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["per OAuth"," ","client"]},", not per user or per account."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Two windows apply simultaneously. Exceeding either returns ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["429 Too Many Requests"]},"."]},{"$$mdtype":"Tag","name":"div","attributes":{"className":"md-table-wrapper"},"children":[{"$$mdtype":"Tag","name":"table","attributes":{"className":"md"},"children":[{"$$mdtype":"Tag","name":"thead","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"Window"},"children":["Window"]},{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"Limit"},"children":["Limit"]}]}]},{"$$mdtype":"Tag","name":"tbody","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Per minute"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["60 requests"]}]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Per day"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["10,000 requests"]}]}]}]}]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"checking-your-remaining-quota","__idx":1},"children":["Checking your remaining quota"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Every successful response includes your remaining allowance for both windows:"]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"http","header":{"controls":{"copy":{}}},"source":"HTTP/1.1 200 OK\nremaining_requests_minute: 57\nremaining_requests_day: 9863\n","lang":"http"},"children":[]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Poll these rather than counting requests yourself — they are authoritative."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"when-you-exceed-a-limit","__idx":2},"children":["When you exceed a limit"]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"http","header":{"controls":{"copy":{}}},"source":"HTTP/1.1 429 Too Many Requests\nretry-after: 43\nContent-Type: application/json\n","lang":"http"},"children":[]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"json","header":{"controls":{"copy":{}}},"source":"{\n  \"message\": \"Too many requests\",\n  \"available_in_seconds\": 43\n}\n","lang":"json"},"children":[]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["retry-after"]}," and ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["available_in_seconds"]}," carry the same value: the number of"," ","seconds until the exceeded window resets. Wait that long before retrying."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Both fields are computed from the window you actually breached, so a daily-limit"," ","breach will return a much larger value than a per-minute one. Do not assume a"," ","fixed retry delay."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"what-counts-toward-the-limit","__idx":3},"children":["What counts toward the limit"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Limits apply to requests authenticated with an OAuth ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["client-credentials"]}," ","token. Requests made by Rosterfy's own first-party applications — the admin"," ","console and the mobile app — are excluded and do not consume your quota."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"handling-limits-well","__idx":4},"children":["Handling limits well"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Read ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["remaining_requests_minute"]}," and back off before you hit zero, rather than"," ","treating ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["429"]}," as your signal."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["On ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["429"]},", honour ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["retry-after"]}," exactly. Retrying sooner consumes another"," ","attempt against the window and extends the lockout."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Use bulk endpoints where they exist. One ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["mass-create"]}," call costs a single"," ","request; a loop of individual creates costs one each."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Prefer webhooks over polling. Subscribing to an event costs nothing against"," ","your quota; polling a list endpoint every minute costs 1,440 requests a day."]}]}]},"headings":[{"value":"Rate limits","id":"rate-limits","depth":1},{"value":"Checking your remaining quota","id":"checking-your-remaining-quota","depth":2},{"value":"When you exceed a limit","id":"when-you-exceed-a-limit","depth":2},{"value":"What counts toward the limit","id":"what-counts-toward-the-limit","depth":2},{"value":"Handling limits well","id":"handling-limits-well","depth":2}],"frontmatter":{"seo":{"title":"Rate limits"}},"lastModified":"2026-08-18T06:10:52.000Z","pagePropGetterError":{"message":"","name":""}},"slug":"/api-docs/guides/rate-limits","userData":{"isAuthenticated":false,"teams":["anonymous"]},"isPublic":true}