{"templateId":"markdown","sharedDataIds":{"sidebar":"sidebar-products/customer-api/sidebars.yaml"},"props":{"metadata":{"markdoc":{"tagList":[]},"type":"markdown"},"seo":{"title":"Rate Limits","description":"Jiko Technologies' external APIs for integrators.","lang":"en-US","siteUrl":"https://docs.jiko.io","projectTitle":"Jiko Technologies API Documentation","jsonLd":{"@context":"https://schema.org","@type":"Organization","name":"Jiko Technologies","url":"https://docs.jiko.io","logo":"https://docs.jiko.io/static/jiko-logo-blue.svg"},"llmstxt":{"hide":false,"title":"Jiko Technologies API Documentation","description":"External APIs for integrators","sections":[{"title":"Customer API","includeFiles":["products/customer-api/**/*.md"],"excludeFiles":[]},{"title":"Partner API","includeFiles":["products/partner-api/**/*.md"],"excludeFiles":[]}],"excludeFiles":[]},"meta":[{"name":"robots","content":"index,follow,max-image-preview:large"}]},"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":["The Customer API enforces rate limits to protect service stability and ensure fair usage across all integrators. Limits are applied per user (identified by OAuth client and user ID) unless otherwise noted."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"response-headers","__idx":1},"children":["Response Headers"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Every response includes rate limit headers:"]},{"$$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":"Header"},"children":["Header"]},{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"Description"},"children":["Description"]}]}]},{"$$mdtype":"Tag","name":"tbody","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["X-RateLimit-Limit"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Maximum requests allowed in the current window"]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["X-RateLimit-Remaining"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Requests remaining in the current window"]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["X-RateLimit-Reset"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Unix timestamp when the current window resets"]}]}]}]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["When a rate limit is exceeded, the API returns a ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["429 Too Many Requests"]}," response with a ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["Retry-After"]}," header indicating the number of seconds to wait before retrying."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"limits-by-endpoint-group","__idx":2},"children":["Limits by Endpoint Group"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Rate limits for authenticated endpoints are scoped to the combination of your OAuth ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["client_id"]}," and the authenticated ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["user_id"]},". Each user of your integration has their own independent rate limit budget. Unauthenticated endpoints (authentication flows) are rate limited by client IP address."]},{"$$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":"Endpoint Group"},"children":["Endpoint Group"]},{"$$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":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Authentication"]}," (login, logout, authorize, signup, token)"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["300/min"]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Agreements"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["300/min"]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Counterparties"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["300/min"]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Customer"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["300/min"]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Notifications"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["300/min"]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Pockets"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["120/min"]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Portals"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["300/min"]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Reports"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["300/min"]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Subscriptions"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["300/min"]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Team"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["300/min"]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Trades"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["120/min"]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Trading Strategies"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["300/min"]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Transactions"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["120/min"]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Transfer Requests"]}," (read)"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["120/min"]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Transfer Requests"]}," (create)"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["60/min, 1/sec"]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["User"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["300/min"]}]}]}]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"best-practices","__idx":3},"children":["Best Practices"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Monitor response headers"]}," to track your remaining budget and avoid hitting limits."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Implement exponential backoff"]}," when you receive a ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["429"]}," response. Use the ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["Retry-After"]}," header to determine the minimum wait time."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Spread requests over time"]}," rather than sending bursts. Bursting can exhaust your per-minute budget quickly even if your average request rate is well within limits."]}]}]},"headings":[{"value":"Rate Limits","id":"rate-limits","depth":1},{"value":"Response Headers","id":"response-headers","depth":2},{"value":"Limits by Endpoint Group","id":"limits-by-endpoint-group","depth":2},{"value":"Best Practices","id":"best-practices","depth":2}],"frontmatter":{"seo":{"title":"Rate Limits"}},"lastModified":"2026-03-10T14:06:40.000Z","pagePropGetterError":{"message":"","name":""}},"slug":"/products/customer-api/guides/rate-limits","userData":{"isAuthenticated":false,"teams":["anonymous"]},"isPublic":true}