{"templateId":"markdown","sharedDataIds":{"sidebar":"sidebar-sidebars.yaml"},"props":{"metadata":{"markdoc":{"tagList":[]},"type":"markdown"},"seo":{"title":"Rate limits","llmstxt":{"hide":false,"sections":[{"title":"Table of contents","includeFiles":["**/*"],"excludeFiles":[]}],"excludeFiles":[]}},"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":["We apply rate limits to keep the Rho API available and responsive for all integrations."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"limits","__idx":1},"children":["Limits"]},{"$$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":"Limit"},"children":["Limit"]},{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"Threshold"},"children":["Threshold"]}]}]},{"$$mdtype":"Tag","name":"tbody","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Per API Access Token"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Approximately 60 requests per minute"]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Per source IP"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Approximately 600 requests per minute"]}]}]}]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["These limits apply uniformly across all public Rho API endpoints. The source-IP limit covers the combined traffic from every integration sharing that IP address, including integrations using different API Access Tokens."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["We enforce rate limits across a distributed edge network, so the limits are approximate rather than an exact concurrency allowance. Clients must not assume that exactly 60 simultaneous requests will succeed."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"avoid-bursts","__idx":2},"children":["Avoid bursts"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Pace traffic steadily below one request per second instead of sending the full minute's allowance in a burst. Queueing requests and limiting concurrency reduces the chance of crossing a distributed counter while other requests are still in flight."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"handle-rate-limit-responses","__idx":3},"children":["Handle rate-limit responses"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["When a limit is exceeded, we return ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["429 Too Many Requests"]},". Handle the ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["Retry-After"]}," header as follows:"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":["If it is a positive integer, wait at least that many seconds before retrying."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["If it is ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["0"]},", we have not applied a fixed cooldown. This does not guarantee that an immediate retry will succeed, so use exponential backoff with jitter instead of retrying in a tight loop."]}]}]},"headings":[{"value":"Rate limits","id":"rate-limits","depth":1},{"value":"Limits","id":"limits","depth":2},{"value":"Avoid bursts","id":"avoid-bursts","depth":2},{"value":"Handle rate-limit responses","id":"handle-rate-limit-responses","depth":2}],"frontmatter":{"seo":{"title":"Rate limits"}},"lastModified":"2026-07-15T16:44:31.000Z","pagePropGetterError":{"message":"","name":""}},"slug":"/docs/v1/rate-limits","userData":{"isAuthenticated":false,"teams":["anonymous"]},"isPublic":true}