Each token may make a fixed number of requests per minute — 120 today, counted in a
window that resets every minute. A request past that answers 429 rate_limited with a
Retry-After header naming the seconds until the window resets, and the same number in
the body as retry_after_seconds:
{ "error": { "code": "rate_limited", "message": "This token has made more than 120 requests in 60 seconds. Retry in 17 seconds.", "retry_after_seconds": 17 }}
The counter is per token, not per workspace or per user: two tokens in the same workspace
have two counters. It is also durable, so a refusal survives the application restarting;
waiting is the only thing that clears it.The MCP server sits behind the same door, so a chatty assistant meets the same limit. A
refused request is not “used”: it does not update the token’s last-used time.
Honour Retry-After rather than retrying on a fixed schedule. Most HTTP clients treat
429 as retryable and will wait the right time if you let them read the header.
Separately, two abuse bounds answer 429 limit_reached with a sentence naming the bound
that was hit. They are the same on every plan, and neither is something the plan sets:
300 new links per day, per workspace. Counted the same way whether the link came
from the console, the assistant or the API. The refusal carries no Retry-After header.
10,000 conversions per hour, per token. The refusal carries a Retry-After header
and retry_after_seconds in the body, like the request limit.
The MCP server returns the link bound’s sentence as a tool result; there is no conversions
tool. Same status as the request limit, different code: branch on code, not on the
status.
The product’s own chat assistant, inside the console, runs under bounds of its own so that
a conversation cannot run away. Those bounds are the chat’s, not the API’s or the MCP
server’s: nothing you build against either door is affected by them, and nothing here
lets you change them.
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"UTMKit","colors":{"primary":"#b03000","light":"#ea6f2f","dark":"#b03000"},"logo":{"light":"https://mintcdn.com/utmkit/x7Gci208BkzFSXRM/logo/light.svg?fit=max\u0026auto=format\u0026n=x7Gci208BkzFSXRM\u0026q=85\u0026s=6edffb02c948d38a8af548d67b6aedc4","dark":"https://mintcdn.com/utmkit/x7Gci208BkzFSXRM/logo/dark.svg?fit=max\u0026auto=format\u0026n=x7Gci208BkzFSXRM\u0026q=85\u0026s=320f5d7cce996c2396c5c6c0061c4a6c","href":"https://utmkit.co"},"favicon":"https://mintcdn.com/utmkit/T8FlCzY_fwQSoIVJ/favicon.svg?fit=max\u0026auto=format\u0026n=T8FlCzY_fwQSoIVJ\u0026q=85\u0026s=8ca92951b7a340d662eee348e5ef5a98","navbar":{"links":[{"href":"https://app.utmkit.co","label":"Console"}]},"contextual":{"options":["copy","view","claude","cursor","mcp"],"display":"header"},"styling":{"latex":false},"navigation":{"languages":[{"language":"en","href":"en"},{"language":"es","href":"es"}]}},"deployment":{"deploymentMetadataValue":{"subdomain":"utmkit","hasAudioNarration":false,"actualSubdomain":"utmkit","customDomains":["docs.utmkit.co"],"gitSource":{"type":"github","owner":"victorhazbun","repo":"utm-builder","deployBranch":"main","contentDirectory":"docs-site","isPrivate":true,"mountPath":"","label":""},"chroma":{"latestBuiltDeploymentHistoryId":"6ad28d93ed3ac4917cd3bb4b","collectionId":"c91add22-6805-4a3e-bb0a-dc8c87362917","liveDeploymentHistoryId":"6ad28d93ed3ac4917cd3bb4b","schemaVersion":"v3"},"entitlements":{},"buildId":"6ad28d93ed3ac4917cd3bb4b","clientVersion":"0.0.3990","searchFilterCounts":[{"language":"en","tag":"Guides","count":32},{"language":"es","tag":"Guías","count":32},{"language":"default","tag":"APIs \u0026 MCP","count":25},{"language":"default","tag":"Rules","count":8},{"language":"en","tag":"Links","count":7},{"language":"es","tag":"Enlaces","count":7},{"language":"en","tag":"Analytics \u0026 reports","count":5},{"language":"en","tag":"APIs \u0026 MCP","count":5},{"language":"en","tag":"Overview","count":5},{"language":"en","tag":"Get started","count":5},{"language":"en","tag":"Rules","count":5},{"language":"es","tag":"Analítica e informes","count":5},{"language":"es","tag":"APIs y MCP","count":5},{"language":"es","tag":"Introducción","count":5},{"language":"es","tag":"Primeros pasos","count":5},{"language":"es","tag":"Reglas","count":5},{"language":"default","tag":"Campaigns","count":5},{"language":"default","tag":"Links","count":5},{"language":"en","tag":"QR codes","count":3},{"language":"en","tag":"Workspaces \u0026 organizations","count":3},{"language":"es","tag":"Códigos QR","count":3},{"language":"es","tag":"Espacios de trabajo y organizaciones","count":3},{"language":"default","tag":"Client reports","count":3},{"language":"en","tag":"Security","count":2},{"language":"es","tag":"Seguridad","count":2},{"language":"default","tag":"Tags","count":2},{"language":"default","tag":"Analytics","count":1},{"language":"default","tag":"Conversions","count":1}]},"assistantConfig":{"enableAskAiButton":false,"enableStarterQuestions":false,"enableContextualStarterQuestions":false,"enableAskAiSearchBar":true},"basePath":"","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":"workos-sso-scim","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},{"name":"workos-signup","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-enabled","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"isAtlas":false,"googleFontsInlined":false},"customCss":[],"page":{"pagePath":"en/developers/rate-limits","slug":"/en/developers/rate-limits","pageMetadata":{"title":"Rate limits","description":"A per-token request limit with a retry hint, and two abuse bounds that answer with the same status and a different code.","href":"/en/developers/rate-limits"},"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: \"A per-token request limit with a retry hint, and two abuse bounds that answer with the same status and a different code.\"\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={code:`code`,li:`li`,p:`p`,pre:`pre`,span:`span`,strong:`strong`,ul:`ul`,..._provideComponents(),...props.components},{CodeBlock,Heading,Tip}=_components;if(!CodeBlock)_missingMdxReference(`CodeBlock`,true);if(!Heading)_missingMdxReference(`Heading`,true);if(!Tip)_missingMdxReference(`Tip`,true);return _jsxs(_Fragment,{children:[_jsx(_components.p,{children:`Two kinds of limit apply to the API and the MCP server. They are easy to confuse because\nboth say “no” for a while; they are unrelated.`}),`\n`,_jsx(Heading,{level:`2`,id:`the-request-limit-per-token`,children:`The request limit, per token`}),`\n`,_jsxs(_components.p,{children:[`Each token may make a fixed number of requests per minute — `,_jsx(_components.strong,{children:`120 today`}),`, counted in a\nwindow that resets every minute. A request past that answers `,_jsx(_components.code,{children:`429 rate_limited`}),` with a\n`,_jsx(_components.code,{children:`Retry-After`}),` header naming the seconds until the window resets, and the same number in\nthe body as `,_jsx(_components.code,{children:`retry_after_seconds`}),`:`]}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`7`,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:`7`,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:` \"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:` \"message\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"This token has made more than 120 requests in 60 seconds. Retry in 17 seconds.\"`}),_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:` \"retry_after_seconds\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`17`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` }`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`}`})}),`\n`]})})}),`\n`,_jsx(_components.p,{children:`The counter is per token, not per workspace or per user: two tokens in the same workspace\nhave two counters. It is also durable, so a refusal survives the application restarting;\nwaiting is the only thing that clears it.`}),`\n`,_jsx(_components.p,{children:`The MCP server sits behind the same door, so a chatty assistant meets the same limit. A\nrefused request is not “used”: it does not update the token’s last-used time.`}),`\n`,_jsx(Tip,{children:_jsxs(_components.p,{children:[`Honour `,_jsx(_components.code,{children:`Retry-After`}),` rather than retrying on a fixed schedule. Most HTTP clients treat\n429 as retryable and will wait the right time if you let them read the header.`]})}),`\n`,_jsx(Heading,{level:`2`,id:`two-more-429s`,children:`Two more 429s`}),`\n`,_jsxs(_components.p,{children:[`Separately, two abuse bounds answer `,_jsx(_components.code,{children:`429 limit_reached`}),` with a sentence naming the bound\nthat was hit. They are the same on every plan, and neither is something the plan sets:`]}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`300 new links per day, per workspace.`}),` Counted the same way whether the link came\nfrom the console, the assistant or the API. The refusal carries no `,_jsx(_components.code,{children:`Retry-After`}),` header.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`10,000 conversions per hour, per token.`}),` The refusal carries a `,_jsx(_components.code,{children:`Retry-After`}),` header\nand `,_jsx(_components.code,{children:`retry_after_seconds`}),` in the body, like the request limit.`]}),`\n`]}),`\n`,_jsxs(_components.p,{children:[`The MCP server returns the link bound’s sentence as a tool result; there is no conversions\ntool. Same status as the request limit, different code: branch on `,_jsx(_components.code,{children:`code`}),`, not on the\nstatus.`]}),`\n`,_jsx(Heading,{level:`2`,id:`what-is-not-a-limit-here`,children:`What is not a limit here`}),`\n`,_jsx(_components.p,{children:`The product’s own chat assistant, inside the console, runs under bounds of its own so that\na conversation cannot run away. Those bounds are the chat’s, not the API’s or the MCP\nserver’s: nothing you build against either door is affected by them, and nothing here\nlets you change them.`})]})}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 limits","description":"A per-token request limit with a retry hint, and two abuse bounds that answer with the same status and a different code.","href":"/en/developers/rate-limits"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[{"title":"The request limit, per token","slug":"the-request-limit-per-token","depth":2,"children":[]},{"title":"Two more 429s","slug":"two-more-429s","depth":2,"children":[]},{"title":"What is not a limit here","slug":"what-is-not-a-limit-here","depth":2,"children":[]}],"codeExamples":{}},"jsLinks":[],"subdomain":"utmkit","siteName":"UTMKit","title":"Rate limits - UTMKit","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{"en":{"href":"/en/developers/rate-limits","matchLevel":0},"es":{"href":"/es/developers/rate-limits","matchLevel":1}}},"lastModified":"2026-09-12T20:58:30.637Z","originalFileLocation":"en/developers/rate-limits.mdx","locale":"en"},"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=\"system\"}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=\"A per-token request limit with a retry hint, and two abuse bounds that answer with the same status and a different code.\">\u003cmeta data-mint-head name=\"application-name\" content=\"UTMKit\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/utmkit/YtzWov0rFPYkALKx/_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/utmkit/YtzWov0rFPYkALKx/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/utmkit/YtzWov0rFPYkALKx/_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/utmkit/YtzWov0rFPYkALKx/_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/utmkit/YtzWov0rFPYkALKx/_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/utmkit/YtzWov0rFPYkALKx/_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/utmkit/YtzWov0rFPYkALKx/_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/utmkit/YtzWov0rFPYkALKx/_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/utmkit/YtzWov0rFPYkALKx/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Rate limits - UTMKit\">\u003cmeta data-mint-head property=\"og:description\" content=\"A per-token request limit with a retry hint, and two abuse bounds that answer with the same status and a different code.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"UTMKit\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.utmkit.co/en/developers/rate-limits\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://utmkit.mintlify.app/_mintlify/api/og/v2?division=Overview\u0026amp;title=Rate+limits\u0026amp;description=A+per-token+request+limit+with+a+retry+hint%2C+and+two+abuse+bounds+that+answer+with+the+same+status+and+a+different+code.\u0026amp;theme=6f3199e78b94e86effb82ff6\u0026amp;signature=ec0e4c0b82ff0290b4ff30adc611b69682da666b41ae31b2e37cff85f8595797\">\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 limits - UTMKit\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"A per-token request limit with a retry hint, and two abuse bounds that answer with the same status and a different code.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://utmkit.mintlify.app/_mintlify/api/og/v2?division=Overview\u0026amp;title=Rate+limits\u0026amp;description=A+per-token+request+limit+with+a+retry+hint%2C+and+two+abuse+bounds+that+answer+with+the+same+status+and+a+different+code.\u0026amp;theme=6f3199e78b94e86effb82ff6\u0026amp;signature=ec0e4c0b82ff0290b4ff30adc611b69682da666b41ae31b2e37cff85f8595797\">\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/utmkit/YtzWov0rFPYkALKx/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"UTMKit\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#b03000\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.utmkit.co/en/developers/rate-limits\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/en/developers/rate-limits.md\">\u003clink data-mint-head rel=\"alternate\" hreflang=\"en\" href=\"https://docs.utmkit.co/en/developers/rate-limits\">\u003clink data-mint-head rel=\"alternate\" hreflang=\"es\" href=\"https://docs.utmkit.co/es/developers/rate-limits\">\u003clink data-mint-head rel=\"alternate\" hreflang=\"x-default\" href=\"https://docs.utmkit.co/en/developers/rate-limits\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://docs.utmkit.co/#organization\",\"name\":\"UTMKit\",\"url\":\"https://docs.utmkit.co\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/utmkit/x7Gci208BkzFSXRM/logo/light.svg?fit=max\u0026auto=format\u0026n=x7Gci208BkzFSXRM\u0026q=85\u0026s=6edffb02c948d38a8af548d67b6aedc4\"}},{\"@type\":\"WebSite\",\"@id\":\"https://docs.utmkit.co#website\",\"name\":\"UTMKit\",\"url\":\"https://docs.utmkit.co\",\"publisher\":{\"@id\":\"https://docs.utmkit.co/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.utmkit.co/en/developers/rate-limits#webpage\",\"url\":\"https://docs.utmkit.co/en/developers/rate-limits\",\"name\":\"Rate limits\",\"description\":\"A per-token request limit with a retry hint, and two abuse bounds that answer with the same status and a different code.\",\"dateModified\":\"2026-09-12T20:58:30.637Z\",\"isPartOf\":{\"@id\":\"https://docs.utmkit.co#website\"},\"breadcrumb\":{\"@id\":\"https://docs.utmkit.co/en/developers/rate-limits#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.utmkit.co/en/developers/rate-limits#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Overview\",\"item\":\"https://docs.utmkit.co/en/developers/index\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Rate limits\",\"item\":\"https://docs.utmkit.co/en/developers/rate-limits\"}]},{\"@type\":[\"Article\",\"TechArticle\"],\"@id\":\"https://docs.utmkit.co/en/developers/rate-limits#article\",\"headline\":\"Rate limits\",\"name\":\"Rate limits\",\"description\":\"A per-token request limit with a retry hint, and two abuse bounds that answer with the same status and a different code.\",\"url\":\"https://docs.utmkit.co/en/developers/rate-limits\",\"mainEntityOfPage\":{\"@id\":\"https://docs.utmkit.co/en/developers/rate-limits#webpage\"},\"dateModified\":\"2026-09-12T20:58:30.637Z\",\"publisher\":{\"@id\":\"https://docs.utmkit.co/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.utmkit.co#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"UTMKit\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"UTMKit","nav":{"global":null,"languages":[{"language":"en","tabs":[{"tab":"Guides","pages":[{"title":"Guides","href":"/en"}]},{"tab":"APIs \u0026 MCP","groups":[{"group":"Overview","pages":[{"title":"APIs \u0026 MCP","href":"/en/developers"},{"title":"Authentication \u0026 tokens","href":"/en/developers/authentication"},{"title":"MCP server","description":"Connect claude.ai, Claude Desktop, Claude Code or Cursor to your workspace, by signing in or with a token: thirty-one tools, each behind one permission.","href":"/en/developers/mcp"},{"title":"Rate limits","href":"/en/developers/rate-limits"},{"title":"Errors","description":"Every refusal comes back in one envelope, with a code from a closed list and a sentence a person can read.","href":"/en/developers/errors"}]},{"group":"Links","pages":[{"title":"List links of the token's workspace, newest first","deprecated":null,"version":null,"openapi":"/openapi.json get /api/v1/links","href":"/api-reference/links/list-links-of-the-tokens-workspace-newest-first"},{"title":"Create a governed short link","deprecated":null,"version":null,"openapi":"/openapi.json post /api/v1/links","href":"/api-reference/links/create-a-governed-short-link"},{"title":"One link","deprecated":null,"version":null,"openapi":"/openapi.json get /api/v1/links/{id}","href":"/api-reference/links/one-link"},{"title":"Update destination, UTMs or expiry; re-validated and re-scanned","deprecated":null,"version":null,"openapi":"/openapi.json patch /api/v1/links/{id}","href":"/api-reference/links/update-destination-utms-or-expiry;-re-validated-and-re-scanned"},{"title":"Withdraw the link — removed from the edge on the console's own path","deprecated":null,"version":null,"openapi":"/openapi.json delete /api/v1/links/{id}","href":"/api-reference/links/withdraw-the-link-—-removed-from-the-edge-on-the-consoles-own-path"}]},{"group":"Tags","pages":[{"title":"List the tags of the token's workspace, with their link counts","deprecated":null,"version":null,"openapi":"/openapi.json get /api/v1/tags","href":"/api-reference/tags/list-the-tags-of-the-tokens-workspace-with-their-link-counts"},{"title":"Create a tag ahead of any link — the colour may be chosen","deprecated":null,"version":null,"openapi":"/openapi.json post /api/v1/tags","href":"/api-reference/tags/create-a-tag-ahead-of-any-link-—-the-colour-may-be-chosen"}]},{"group":"Campaigns","pages":[{"title":"List campaigns of the token's workspace, with their link counts","deprecated":null,"version":null,"openapi":"/openapi.json get /api/v1/campaigns","href":"/api-reference/campaigns/list-campaigns-of-the-tokens-workspace-with-their-link-counts"},{"title":"Create a campaign — a repeated name returns the existing one","deprecated":null,"version":null,"openapi":"/openapi.json post /api/v1/campaigns","href":"/api-reference/campaigns/create-a-campaign-—-a-repeated-name-returns-the-existing-one"},{"title":"One campaign","deprecated":null,"version":null,"openapi":"/openapi.json get /api/v1/campaigns/{id}","href":"/api-reference/campaigns/one-campaign"},{"title":"Rename or re-describe — existing links keep their utm_campaign","deprecated":null,"version":null,"openapi":"/openapi.json patch /api/v1/campaigns/{id}","href":"/api-reference/campaigns/rename-or-re-describe-—-existing-links-keep-their-utm_campaign"},{"title":"Delete a campaign — its links keep working and only lose the container","deprecated":null,"version":null,"openapi":"/openapi.json delete /api/v1/campaigns/{id}","href":"/api-reference/campaigns/delete-a-campaign-—-its-links-keep-working-and-only-lose-the-container"}]},{"group":"Client reports","pages":[{"title":"List the workspace's client report links, live first — never their URLs","deprecated":null,"version":null,"openapi":"/openapi.json get /api/v1/report-links","href":"/api-reference/reports/list-the-workspaces-client-report-links-live-first-—-never-their-urls"},{"title":"Publish a client report link — the URL is returned this once","deprecated":null,"version":null,"openapi":"/openapi.json post /api/v1/report-links","href":"/api-reference/reports/publish-a-client-report-link-—-the-url-is-returned-this-once"},{"title":"Revoke a client report link — whoever holds it sees nothing from the next request","deprecated":null,"version":null,"openapi":"/openapi.json delete /api/v1/report-links/{id}","href":"/api-reference/reports/revoke-a-client-report-link-—-whoever-holds-it-sees-nothing-from-the-next-request"}]},{"group":"Rules","pages":[{"title":"The workspace's UTM convention","deprecated":null,"version":null,"openapi":"/openapi.json get /api/v1/rules/convention","href":"/api-reference/rules/the-workspaces-utm-convention"},{"title":"Update the convention — casing, separator, required parameters, mode; a field left out keeps its value","deprecated":null,"version":null,"openapi":"/openapi.json put /api/v1/rules/convention","href":"/api-reference/rules/update-the-convention-—-casing-separator-required-parameters-mode;-a-field-left-out-keeps-its-value"},{"title":"The approved values, per UTM parameter","deprecated":null,"version":null,"openapi":"/openapi.json get /api/v1/rules/values","href":"/api-reference/rules/the-approved-values-per-utm-parameter"},{"title":"Approve values for one parameter — additive, repeats are no-ops","deprecated":null,"version":null,"openapi":"/openapi.json post /api/v1/rules/values","href":"/api-reference/rules/approve-values-for-one-parameter-—-additive-repeats-are-no-ops"},{"title":"Retire an approved value — retiring the last one OPENS the parameter","deprecated":null,"version":null,"openapi":"/openapi.json delete /api/v1/rules/values/{id}","href":"/api-reference/rules/retire-an-approved-value-—-retiring-the-last-one-opens-the-parameter"},{"title":"The dependency rules, one row per allowed value under a driving pair","deprecated":null,"version":null,"openapi":"/openapi.json get /api/v1/rules/dependencies","href":"/api-reference/rules/the-dependency-rules-one-row-per-allowed-value-under-a-driving-pair"},{"title":"Allow values for a target under a driving pair — additive","deprecated":null,"version":null,"openapi":"/openapi.json post /api/v1/rules/dependencies","href":"/api-reference/rules/allow-values-for-a-target-under-a-driving-pair-—-additive"},{"title":"Remove one dependency rule — one allowed value, not the whole set","deprecated":null,"version":null,"openapi":"/openapi.json delete /api/v1/rules/dependencies/{id}","href":"/api-reference/rules/remove-one-dependency-rule-—-one-allowed-value-not-the-whole-set"}]},{"group":"Analytics","pages":[{"title":"Click report — scans reported apart from clicks","deprecated":null,"version":null,"openapi":"/openapi.json get /api/v1/analytics/report","href":"/api-reference/analytics/click-report-—-scans-reported-apart-from-clicks"}]},{"group":"Conversions","pages":[{"title":"Report a conversion against one of the workspace's links","deprecated":null,"version":null,"openapi":"/openapi.json post /api/v1/conversions","href":"/api-reference/conversions/report-a-conversion-against-one-of-the-workspaces-links"}]}]}]},{"language":"es","pages":[{"title":"es","href":"/es/developers/rate-limits"}]}]},"title":"Rate limits - UTMKit","buildId":"dpl_2oYXwqkEXirXBPk8wV1FtM5USFWi","deploymentId":"dpl_2oYXwqkEXirXBPk8wV1FtM5USFWi","dynamics":[],"chunks":[]}