Per-caller sliding-window limits on every /v1/* call, with a tighter tier on login/register.
Every request is rate-limited by an in-memory sliding-window counter — no external dependency (no Redis, no slowapi). Limits are per caller identity, not global:
Authenticated calls are keyed by a hash of the Bearer token (API key, session, or master key).
Unauthenticated calls (before any credential is known to be valid, e.g. a login attempt) are keyed by source IP.
This means one noisy caller can’t exhaust another caller’s quota, and an unauthenticated brute-force attempt against /v1/auth/login is throttled per-IP even before it ever presents a valid credential.
Single-process only. Counters live in this process’s memory. If this API ever runs with multiple uvicorn workers or multiple replicas behind a load balancer, each process keeps its own counters — the effective limit multiplies by however many processes are running. Fine for a single-instance deployment (e.g. one Railway service); move to a shared store (Redis) first if you scale horizontally.
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"R3AL.AI","description":"Build specialized models around your documents, data boundaries, and business requirements.","colors":{"primary":"#8B8B8B","light":"#D4D4D4","dark":"#525252"},"logo":{"light":"https://mintcdn.com/r3-al-ai/yQp-Okq6KuZUnAmw/logo/light.svg?fit=max\u0026auto=format\u0026n=yQp-Okq6KuZUnAmw\u0026q=85\u0026s=f8244cfe1f9f90f983420d12cde22f72","dark":"https://mintcdn.com/r3-al-ai/yQp-Okq6KuZUnAmw/logo/dark.svg?fit=max\u0026auto=format\u0026n=yQp-Okq6KuZUnAmw\u0026q=85\u0026s=344bcc2f41fad71f20648b93e98bd1ef"},"favicon":"https://mintcdn.com/r3-al-ai/mXExBhQnq297Ec30/favicon.svg?fit=max\u0026auto=format\u0026n=mXExBhQnq297Ec30\u0026q=85\u0026s=a51c32ff4b16e92e5ba8863640b13168","appearance":{"default":"dark"},"background":{"color":{"light":"#FFFFFF","dark":"#090909"}},"navbar":{"links":[{"href":"https://r3al.ai","label":"Website"}],"primary":{"type":"button","label":"Open platform","href":"https://platform.r3al.ai"}},"footer":{"socials":{"github":"https://github.com/R3AL-AI/SDK"}},"fonts":{"family":"Inter Tight"},"styling":{"latex":false},"navigation":{"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"r3-al-ai","hasAudioNarration":false,"actualSubdomain":"r3-al-ai","customDomains":["docs.r3al.ai"],"gitSource":{"type":"github","owner":"r3al-ai","repo":"sdk","deployBranch":"main","contentDirectory":"docs-site","isPrivate":true,"mountPath":"","label":""},"chroma":{"collectionId":"d541aff9-d5dd-49c7-97e6-f0e1a2d99409","liveDeploymentHistoryId":"6ac8fd416df55b4695ddb4b6","schemaVersion":"v3","latestBuiltDeploymentHistoryId":"6ac8fd416df55b4695ddb4b6"},"entitlements":{"AI_CHAT":{"status":"DISABLED"}},"buildId":"6ac8fd416df55b4695ddb4b6","clientVersion":"0.0.3965","searchFilterCounts":[{"language":"default","tag":"Legacy SDK","count":20},{"language":"default","tag":"Documentation","count":13},{"language":"default","tag":"Optimization","count":8},{"language":"default","tag":"Legacy API","count":6},{"language":"default","tag":"Model setup and inference","count":6},{"language":"default","tag":"API reference","count":5},{"language":"default","tag":"Project inference","count":4},{"language":"default","tag":"Your workspace","count":4},{"language":"default","tag":"CLI","count":3},{"language":"default","tag":"Vision SDK","count":3}]},"assistantConfig":{"enableAskAiButton":false,"enableStarterQuestions":false,"enableContextualStarterQuestions":false,"enableAskAiSearchBar":true},"hasChatPermissions":false,"hasWebMcpPermissions":false,"toggles":[{"name":"kill-isr","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-mintlify-slack","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-v7-file-tree","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-integrations-settings","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-pr-grouping","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-prefix","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"analytics-v7","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"user-flows-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"no-publish-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-onboarding","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"llms-txt-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"pause-universal-search-reconcile","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving-live","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"stripTemperatureMiddleware","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"per-site-search-delta","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"support-platform-pylon-zendesk","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"instant-rollback","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications-server","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-private-page-search","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-fable","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fixed-ai-action-pricing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automation-resolve-merge-conflict","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"scoped-publishing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"mintql","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"page-level-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-version-history-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-nav-generations","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-page-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workspace-projects","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"assistant-v5","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"byok-sep-25","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fork-pr-previews","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"revalidation-jwt","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"vite-origin","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-agent-model-picker","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-updated-9-15","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"hobby-abuse-scan","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"dashboard-inbox","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"isAtlas":false,"googleFontsInlined":true},"customCss":[{"filePath":"style.css","content":".platform-hero{position:relative;overflow:hidden;aspect-ratio:2.1;margin:28px 0;border:1px solid #333;border-radius:10px;background:#161616 url(/images/showcase-background.png) center/cover no-repeat}.platform-hero-brand,.platform-hero-preview{position:absolute;left:50%;transform:translateX(-50%)}.platform-hero-brand{top:8%;display:flex;align-items:center;gap:2px;filter:drop-shadow(0 1px 8px #0008)}.platform-hero-brand .hero-symbol{width:36px;height:36px;margin:0}.platform-hero-brand .hero-wordmark{width:140px;height:auto;margin:0}.platform-hero-preview{width:64%;bottom:-1px}.platform-hero .platform-hero-screen{display:block;width:100%;height:auto;margin:0;border:1px solid #454545;border-radius:6px 6px 0 0;box-shadow:0 12px 40px #0009}@media (max-width:640px){.platform-hero-brand{gap:2px}.platform-hero-brand .hero-symbol{width:26px;height:26px}.platform-hero-brand .hero-wordmark{width:104px}}"}],"page":{"pagePath":"api/rate-limiting","slug":"/api/rate-limiting","pageMetadata":{"title":"Rate limiting","description":"Per-caller sliding-window limits on every /v1/* call, with a tighter tier on login/register.","icon":"gauge-high","href":"/api/rate-limiting"},"description":{"compiledSource":"\"use strict\";\nconst {jsx: _jsx} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n p: \"p\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsx(_components.p, {\n children: \"Per-caller sliding-window limits on every /v1/* call, with a tighter tier on login/register.\"\n });\n}\nfunction MDXContent(props = {}) {\n const {wrapper: MDXLayout} = {\n ..._provideComponents(),\n ...props.components\n };\n return MDXLayout ? _jsx(MDXLayout, {\n ...props,\n children: _jsx(_createMdxContent, {\n ...props\n })\n }) : _createMdxContent(props);\n}\nreturn {\n default: MDXContent\n};\n","frontmatter":{},"scope":{}},"pageType":"default","mdx":{"mdxSource":{"compiledSource":"\"use strict\";const{Fragment:_Fragment,jsx:_jsx,jsxs:_jsxs}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){const _components={a:`a`,code:`code`,li:`li`,p:`p`,pre:`pre`,span:`span`,strong:`strong`,tbody:`tbody`,td:`td`,th:`th`,thead:`thead`,tr:`tr`,ul:`ul`,..._provideComponents(),...props.components},{CodeBlock,Heading,Table,Warning}=_components;if(!CodeBlock)_missingMdxReference(`CodeBlock`,true);if(!Heading)_missingMdxReference(`Heading`,true);if(!Table)_missingMdxReference(`Table`,true);if(!Warning)_missingMdxReference(`Warning`,true);return _jsxs(_Fragment,{children:[_jsxs(_components.p,{children:[`Every request is rate-limited by an in-memory sliding-window counter — no external dependency (no Redis, no `,_jsx(_components.code,{children:`slowapi`}),`). Limits are per `,_jsx(_components.strong,{children:`caller identity`}),`, not global:`]}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Authenticated calls are keyed by a hash of the Bearer token (API key, session, or master key).`}),`\n`,_jsx(_components.li,{children:`Unauthenticated calls (before any credential is known to be valid, e.g. a login attempt) are keyed by source IP.`}),`\n`]}),`\n`,_jsxs(_components.p,{children:[`This means one noisy caller can’t exhaust another caller’s quota, and an unauthenticated brute-force attempt against `,_jsx(_components.code,{children:`/v1/auth/login`}),` is throttled per-IP even before it ever presents a valid credential.`]}),`\n`,_jsx(Heading,{level:`2`,id:`limits`,children:`Limits`}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Tier`}),_jsx(_components.th,{children:`Default`}),_jsx(_components.th,{children:`Env override`}),_jsx(_components.th,{children:`Applies to`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`General`}),_jsx(_components.td,{children:`120 requests/min`}),_jsx(_components.td,{children:_jsx(_components.code,{children:`R3AL_RATE_LIMIT_PER_MIN`})}),_jsxs(_components.td,{children:[`Every route under `,_jsx(_components.code,{children:`/v1/*`}),` (jobs, keys, alerts, deployments, logs, …)`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Auth`}),_jsx(_components.td,{children:`20 requests/min`}),_jsx(_components.td,{children:_jsx(_components.code,{children:`R3AL_RATE_LIMIT_AUTH_PER_MIN`})}),_jsxs(_components.td,{children:[_jsx(_components.code,{children:`POST /v1/auth/register`}),`, `,_jsx(_components.code,{children:`/login`}),`, `,_jsx(_components.code,{children:`/site-login`})]})]})]})]}),`\n`,_jsx(_components.p,{children:`The auth tier is intentionally tighter — these are the endpoints someone would actually try to brute-force (login) or spam (registration).`}),`\n`,_jsx(Heading,{level:`2`,id:`response-when-limited`,children:`Response when limited`}),`\n`,_jsxs(_components.p,{children:[`A `,_jsx(_components.code,{children:`429`}),` with a structured body and a standard `,_jsx(_components.code,{children:`Retry-After`}),` header (seconds until the window frees up):`]}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`3`,language:`http`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`http`,children:_jsxs(_components.code,{language:`http`,numberOfLines:`3`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`HTTP`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`/`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`1.1`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:` 429`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` Too Many Requests`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:`Retry-After`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`:`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` 37`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:`Content-Type`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`:`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` application/json`})]}),`\n`]})})}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`6`,language:`json`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`json`,children:_jsxs(_components.code,{language:`json`,numberOfLines:`6`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`{`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"status\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"error\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"code\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"rate_limited\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"error\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"Rate limit exceeded (120 requests/min). Try again in 37s.\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"request_id\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"a1b2c3d4e5f6\"`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`}`})}),`\n`]})})}),`\n`,_jsxs(_components.p,{children:[`Same `,_jsx(_components.a,{href:`/api/errors`,children:`error envelope`}),` as every other error in this API.`]}),`\n`,_jsx(Warning,{children:_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Single-process only.`}),` Counters live in this process’s memory. If this API ever runs with multiple `,_jsx(_components.code,{children:`uvicorn`}),` workers or multiple replicas behind a load balancer, each process keeps its own counters — the effective limit multiplies by however many processes are running. Fine for a single-instance deployment (e.g. one Railway service); move to a shared store (Redis) first if you scale horizontally.`]})})]})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent};function _missingMdxReference(id,component){throw new Error(`Expected `+(component?`component`:`object`)+\" `\"+id+\"` to be defined: you likely forgot to import, pass, or provide it.\")}","frontmatter":{},"scope":{"config":{},"pageMetadata":{"title":"Rate limiting","description":"Per-caller sliding-window limits on every /v1/* call, with a tighter tier on login/register.","icon":"gauge-high","href":"/api/rate-limiting"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[{"title":"Limits","slug":"limits","depth":2,"children":[]},{"title":"Response when limited","slug":"response-when-limited","depth":2,"children":[]}],"codeExamples":{}},"jsLinks":[],"subdomain":"r3-al-ai","siteName":"R3AL.AI","title":"Rate limiting - R3AL.AI","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-08-13T15:35:27.929Z","originalFileLocation":"api/rate-limiting.mdx"},"headHtml":"\u003cscript data-mint-head>(function(){var d=document.documentElement,p=null;if(!p){try{p=localStorage.getItem(\"isDarkMode\")}catch(e){}if(p==='true')p='dark';else if(p==='false')p='light';if(p!=='light'\u0026\u0026p!=='dark'\u0026\u0026p!=='system')p=\"dark\"}var r=p==='system'?(matchMedia(\"(prefers-color-scheme: dark)\").matches?'dark':'light'):p;d.classList.remove(r==='dark'?'light':'dark');d.classList.add(r);d.setAttribute(\"data-theme-preference\",p)})();\u003c/script>\u003cmeta data-mint-head name=\"description\" content=\"Per-caller sliding-window limits on every /v1/* call, with a tighter tier on login/register.\">\u003cmeta data-mint-head name=\"application-name\" content=\"R3AL.AI\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/r3-al-ai/5dK_YA8Sc2QyZ071/_generated/favicon/android-chrome-192x192.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"apple-touch-icon\" type=\"image/png\" sizes=\"180x180\" href=\"/mintlify-assets/_mintlify/favicons/r3-al-ai/5dK_YA8Sc2QyZ071/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/r3-al-ai/5dK_YA8Sc2QyZ071/_generated/favicon/favicon-16x16.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/r3-al-ai/5dK_YA8Sc2QyZ071/_generated/favicon/favicon-32x32.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/r3-al-ai/5dK_YA8Sc2QyZ071/_generated/favicon/favicon.ico\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/r3-al-ai/5dK_YA8Sc2QyZ071/_generated/favicon-dark/android-chrome-192x192.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/r3-al-ai/5dK_YA8Sc2QyZ071/_generated/favicon-dark/favicon-16x16.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/r3-al-ai/5dK_YA8Sc2QyZ071/_generated/favicon-dark/favicon-32x32.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/r3-al-ai/5dK_YA8Sc2QyZ071/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Rate limiting - R3AL.AI\">\u003cmeta data-mint-head property=\"og:description\" content=\"Per-caller sliding-window limits on every /v1/* call, with a tighter tier on login/register.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"R3AL.AI\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.r3al.ai/api/rate-limiting\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://r3-al-ai.mintlify.app/_mintlify/api/og/v2?division=Legacy+API\u0026amp;title=Rate+limiting\u0026amp;description=Per-caller+sliding-window+limits+on+every+%2Fv1%2F*+call%2C+with+a+tighter+tier+on+login%2Fregister.\u0026amp;theme=cb8be6fd8e5425744410a222\u0026amp;signature=c435314df0a60697d6ab0d253915ef478367db3975abcacf4789e8bfa9055347\">\u003cmeta data-mint-head property=\"og:image:width\" content=\"1200\">\u003cmeta data-mint-head property=\"og:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"twitter:card\" content=\"summary_large_image\">\u003cmeta data-mint-head name=\"twitter:title\" content=\"Rate limiting - R3AL.AI\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Per-caller sliding-window limits on every /v1/* call, with a tighter tier on login/register.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://r3-al-ai.mintlify.app/_mintlify/api/og/v2?division=Legacy+API\u0026amp;title=Rate+limiting\u0026amp;description=Per-caller+sliding-window+limits+on+every+%2Fv1%2F*+call%2C+with+a+tighter+tier+on+login%2Fregister.\u0026amp;theme=cb8be6fd8e5425744410a222\u0026amp;signature=c435314df0a60697d6ab0d253915ef478367db3975abcacf4789e8bfa9055347\">\u003cmeta data-mint-head name=\"twitter:image:width\" content=\"1200\">\u003cmeta data-mint-head name=\"twitter:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"msapplication-config\" content=\"/mintlify-assets/_mintlify/favicons/r3-al-ai/5dK_YA8Sc2QyZ071/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"R3AL.AI\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#8B8B8B\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.r3al.ai/api/rate-limiting\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/api/rate-limiting.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://docs.r3al.ai/#organization\",\"name\":\"R3AL.AI\",\"url\":\"https://docs.r3al.ai\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/r3-al-ai/yQp-Okq6KuZUnAmw/logo/light.svg?fit=max\u0026auto=format\u0026n=yQp-Okq6KuZUnAmw\u0026q=85\u0026s=f8244cfe1f9f90f983420d12cde22f72\"}},{\"@type\":\"WebSite\",\"@id\":\"https://docs.r3al.ai#website\",\"name\":\"R3AL.AI\",\"url\":\"https://docs.r3al.ai\",\"publisher\":{\"@id\":\"https://docs.r3al.ai/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.r3al.ai/api/rate-limiting#webpage\",\"url\":\"https://docs.r3al.ai/api/rate-limiting\",\"name\":\"Rate limiting\",\"description\":\"Per-caller sliding-window limits on every /v1/* call, with a tighter tier on login/register.\",\"dateModified\":\"2026-08-13T15:35:27.929Z\",\"isPartOf\":{\"@id\":\"https://docs.r3al.ai#website\"},\"breadcrumb\":{\"@id\":\"https://docs.r3al.ai/api/rate-limiting#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.r3al.ai/api/rate-limiting#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Legacy API\",\"item\":\"https://docs.r3al.ai/api/jobs\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Rate limiting\",\"item\":\"https://docs.r3al.ai/api/rate-limiting\"}]},{\"@type\":[\"Article\",\"TechArticle\"],\"@id\":\"https://docs.r3al.ai/api/rate-limiting#article\",\"headline\":\"Rate limiting\",\"name\":\"Rate limiting\",\"description\":\"Per-caller sliding-window limits on every /v1/* call, with a tighter tier on login/register.\",\"url\":\"https://docs.r3al.ai/api/rate-limiting\",\"mainEntityOfPage\":{\"@id\":\"https://docs.r3al.ai/api/rate-limiting#webpage\"},\"dateModified\":\"2026-08-13T15:35:27.929Z\",\"publisher\":{\"@id\":\"https://docs.r3al.ai/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.r3al.ai#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"R3AL.AI\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"R3AL.AI","nav":{"global":null,"tabs":[{"tab":"Documentation","pages":[{"title":"Documentation","href":"/introduction"}]},{"tab":"API reference","pages":[{"title":"API reference","href":"/api/overview"}]},{"tab":"Legacy SDK","groups":[{"group":"Vision SDK","pages":[{"title":"Installation","icon":"download","href":"/installation"},{"title":"Vision SDK quickstart","icon":"rocket","href":"/guides/vision-quickstart"},{"title":"Python SDK","icon":"code","href":"/sdk/quantizer"}]},{"group":"CLI","pages":[{"title":"CLI","icon":"terminal","href":"/cli/overview"},{"title":"Command reference","icon":"list","href":"/cli/commands"},{"title":"Coding agents","icon":"robot","href":"/cli/agents"}]},{"group":"Optimization","pages":[{"title":"Quantization methods","icon":"sliders","href":"/concepts/methods"},{"title":"QAT explained","icon":"dumbbell","href":"/concepts/qat"},{"title":"Integer arithmetic","icon":"gauge","href":"/concepts/integer-arithmetic"},{"title":"Calibration","icon":"images","href":"/concepts/calibration"},{"title":"Output \u0026 manifest","icon":"file-check","href":"/concepts/manifest"},{"title":"End-to-end workflow","icon":"route","href":"/guides/workflow"},{"title":"Benchmarking","icon":"chart-line","href":"/guides/benchmarking"},{"title":"QAT pipeline","icon":"dumbbell","href":"/guides/qat-pipeline"}]},{"group":"Legacy API","pages":[{"title":"Jobs: upload, quantize, qat, download","icon":"gears","href":"/api/jobs"},{"title":"API keys","icon":"lock","href":"/api/keys"},{"title":"Team: accounts, invites, roles","icon":"users","href":"/api/team"},{"title":"Monitoring: alerts, deployments, logs","description":"Operator monitoring: alert rules over job history, model-serving deployments, and a log tail.","icon":"chart-line","href":"/api/monitoring"},{"title":"Rate limiting","icon":"gauge-high","href":"/api/rate-limiting"},{"title":"Errors","description":"One consistent error envelope, whether it's an SDK failure, a bad request, or a rate limit.","icon":"triangle-exclamation","href":"/api/errors"}]}]}]},"title":"Rate limiting - R3AL.AI","buildId":"dpl_849ArpqvBiCczQiT1Y1stNGpbqHT","deploymentId":"dpl_849ArpqvBiCczQiT1Y1stNGpbqHT","dynamics":[],"chunks":[]}