Store an upstream provider key and have Tokenless use it for that provider’s routed requests.
Bring your own keys (BYOK) lets you supply an upstream provider API key while
keeping Tokenless routing. When an active, enabled key exists for a provider,
Tokenless uses that key for that provider’s upstream legs. When no key exists,
Tokenless uses the platform-managed key.
BYOK management requires an interactive dashboard or tkl CLI session. A
regular Tokenless API key cannot create, view, or revoke provider keys.
Keys are validated against the provider before they are stored. Tokenless stores
only encrypted key material; list responses contain provider metadata and the
last four characters, never the key itself.
An enabled BYOK key is used only for matching upstream provider legs. If a
provider rejects an enabled key after it is stored, Tokenless returns an error
that identifies the provider rather than silently falling back to the platform
key.
⌘I
{"docsConfig":{"theme":"maple","$schema":"https://mintlify.com/docs.json","name":"Tokenless","description":"Documentation for the Tokenless API.","colors":{"primary":"#CBA94E","light":"#CBA94E","dark":"#B89431"},"logo":{"light":"https://usetokenless.com/logo.png","dark":"https://usetokenless.com/logo.png","href":"https://usetokenless.com"},"favicon":"https://usetokenless.com/logo.png","api":{"openapi":"openapi/usage.yaml","playground":{"display":"none"}},"appearance":{"default":"dark","strict":true},"background":{"color":{"light":"#F3EEE0","dark":"#091124"}},"fonts":{"heading":{"family":"Figtree","weight":600},"body":{"family":"Figtree","weight":400}},"icons":{"library":"lucide"},"styling":{"codeblocks":"dark","latex":false},"navigation":{"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"tokenless","hasAudioNarration":false,"actualSubdomain":"tokenless","customDomains":["docs.usetokenless.com"],"gitSource":{"type":"github","owner":"tokenless-ai","repo":"autorouter","deployBranch":"prod","contentDirectory":"docs","isPrivate":true,"mountPath":"","label":""},"chroma":{"collectionId":"8c461f19-1546-45c8-bd35-c3402dac6208","liveDeploymentHistoryId":"6a518893dbbbccfc0b940264","schemaVersion":"v3"},"entitlements":{"AI_CHAT":{"status":"ENABLED"},"WEB_MCP":{"status":"ENABLED"},"NARRATION":{"status":"ENABLED"}},"buildId":"6ae958e9b4f7670642c7b311:success","clientVersion":"0.0.4074","searchFilterCounts":[{"language":"default","tag":"Cost \u0026 usage","count":7},{"language":"default","tag":"BYOK","count":5},{"language":"default","tag":"OpenAI API","count":4},{"language":"default","tag":"Anthropic API","count":3},{"language":"default","tag":"Get started","count":3},{"language":"default","tag":"Reference","count":1},{"language":"default","tag":"Tokenless CLI","count":1}]},"assistantConfig":{"enableAskAiButton":false,"enableStarterQuestions":false,"enableContextualStarterQuestions":false,"enableAskAiSearchBar":true},"basePath":"","hasChatPermissions":true,"hasWebMcpPermissions":true,"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":"agent-integrations-settings","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"rbac-expansion","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":"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":"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":"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":"billing-page-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"full-page-search","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":"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":"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":"turbopuffer-dual-write","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},{"name":"approve-review-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"sso-setup-deadline-banner","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-serve","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"live-agents","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"comment-mode","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"googleFontsInlined":true},"customCss":[{"filePath":"style.css","content":"/* cyrillic-ext */\n@font-face {\n font-family: 'IBM Plex Mono';\n font-style: normal;\n font-weight: 400;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/ibmplexmono/v20/-F63fjptAgt5VM-kVkqdyU8n1iIq129k.woff2) format('woff2');\n unicode-range: U+0460-052F, U+1C80-1C8A, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;\n}\n/* cyrillic */\n@font-face {\n font-family: 'IBM Plex Mono';\n font-style: normal;\n font-weight: 400;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/ibmplexmono/v20/-F63fjptAgt5VM-kVkqdyU8n1isq129k.woff2) format('woff2');\n unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;\n}\n/* vietnamese */\n@font-face {\n font-family: 'IBM Plex Mono';\n font-style: normal;\n font-weight: 400;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/ibmplexmono/v20/-F63fjptAgt5VM-kVkqdyU8n1iAq129k.woff2) format('woff2');\n unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB;\n}\n/* latin-ext */\n@font-face {\n font-family: 'IBM Plex Mono';\n font-style: normal;\n font-weight: 400;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/ibmplexmono/v20/-F63fjptAgt5VM-kVkqdyU8n1iEq129k.woff2) format('woff2');\n unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C4, U+2113, U+2C60-2C7F, U+A720-A7FF;\n}\n/* latin */\n@font-face {\n font-family: 'IBM Plex Mono';\n font-style: normal;\n font-weight: 400;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/ibmplexmono/v20/-F63fjptAgt5VM-kVkqdyU8n1i8q1w.woff2) format('woff2');\n unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;\n}\n/* cyrillic-ext */\n@font-face {\n font-family: 'IBM Plex Mono';\n font-style: normal;\n font-weight: 500;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/ibmplexmono/v20/-F6qfjptAgt5VM-kVkqdyU8n3twJwl1FgtIU.woff2) format('woff2');\n unicode-range: U+0460-052F, U+1C80-1C8A, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;\n}\n/* cyrillic */\n@font-face {\n font-family: 'IBM Plex Mono';\n font-style: normal;\n font-weight: 500;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/ibmplexmono/v20/-F6qfjptAgt5VM-kVkqdyU8n3twJwlRFgtIU.woff2) format('woff2');\n unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;\n}\n/* vietnamese */\n@font-face {\n font-family: 'IBM Plex Mono';\n font-style: normal;\n font-weight: 500;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/ibmplexmono/v20/-F6qfjptAgt5VM-kVkqdyU8n3twJwl9FgtIU.woff2) format('woff2');\n unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB;\n}\n/* latin-ext */\n@font-face {\n font-family: 'IBM Plex Mono';\n font-style: normal;\n font-weight: 500;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/ibmplexmono/v20/-F6qfjptAgt5VM-kVkqdyU8n3twJwl5FgtIU.woff2) format('woff2');\n unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C4, U+2113, U+2C60-2C7F, U+A720-A7FF;\n}\n/* latin */\n@font-face {\n font-family: 'IBM Plex Mono';\n font-style: normal;\n font-weight: 500;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/ibmplexmono/v20/-F6qfjptAgt5VM-kVkqdyU8n3twJwlBFgg.woff2) format('woff2');\n unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;\n}\n/* cyrillic-ext */\n@font-face {\n font-family: 'IBM Plex Mono';\n font-style: normal;\n font-weight: 600;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/ibmplexmono/v20/-F6qfjptAgt5VM-kVkqdyU8n3vAOwl1FgtIU.woff2) format('woff2');\n unicode-range: U+0460-052F, U+1C80-1C8A, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;\n}\n/* cyrillic */\n@font-face {\n font-family: 'IBM Plex Mono';\n font-style: normal;\n font-weight: 600;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/ibmplexmono/v20/-F6qfjptAgt5VM-kVkqdyU8n3vAOwlRFgtIU.woff2) format('woff2');\n unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;\n}\n/* vietnamese */\n@font-face {\n font-family: 'IBM Plex Mono';\n font-style: normal;\n font-weight: 600;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/ibmplexmono/v20/-F6qfjptAgt5VM-kVkqdyU8n3vAOwl9FgtIU.woff2) format('woff2');\n unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB;\n}\n/* latin-ext */\n@font-face {\n font-family: 'IBM Plex Mono';\n font-style: normal;\n font-weight: 600;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/ibmplexmono/v20/-F6qfjptAgt5VM-kVkqdyU8n3vAOwl5FgtIU.woff2) format('woff2');\n unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C4, U+2113, U+2C60-2C7F, U+A720-A7FF;\n}\n/* latin */\n@font-face {\n font-family: 'IBM Plex Mono';\n font-style: normal;\n font-weight: 600;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/ibmplexmono/v20/-F6qfjptAgt5VM-kVkqdyU8n3vAOwlBFgg.woff2) format('woff2');\n unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;\n}\n@media (min-width: 1280px){#content-area{max-width:52rem}}:root{--font-family-mono-custom: \"IBM Plex Mono\"}a:has(>img.nav-logo){align-items:center;display:inline-flex}a:has(>img.nav-logo)::before,a:has(>img.nav-logo)::after{font-family:Georgia, \"Times New Roman\", serif;font-size:1.7rem;line-height:1;margin-top:0.05rem}a:has(>img.nav-logo)>img.nav-logo{height:2.1rem!important;order:1}a:has(>img.nav-logo)::before{color:rgb(241 245 249);content:\"Token\";margin-left:0.3rem;order:2}a:has(>img.nav-logo)::after{color:#cba94e;content:\"less\";font-style:italic;margin-left:0.04em;order:3}.method-nav-pill>span{align-items:center;display:inline-flex;font-size:0;height:1.25rem;justify-content:center;padding:0;width:1.25rem}.method-nav-pill>span::after{font-size:0.875rem;font-weight:500;line-height:1}.method-nav-pill>span[class*=\"bg-green-\"]::after{content:\"↙\"}.method-nav-pill>span[class*=\"bg-blue-\"]::after,.method-nav-pill>span[class*=\"bg-yellow-\"]::after,.method-nav-pill>span[class*=\"bg-orange-\"]::after{content:\"↗\"}.method-nav-pill>span[class*=\"bg-red-\"]::after{content:\"×\";font-size:1rem}.method-nav-pill>span[class*=\"3064E3\"]{background-color:rgb(96 165 250 / 0.2)!important;color:#60a5fa!important}.method-nav-pill>span[class*=\"2AB673\"]{background-color:rgb(74 222 128 / 0.2)!important;color:#4ade80!important}.method-nav-pill>span[class*=\"C28C30\"]{background-color:rgb(250 204 21 / 0.2)!important;color:#facc15!important}.method-nav-pill>span[class*=\"DA622B\"]{background-color:rgb(251 146 60 / 0.2)!important;color:#fb923c!important}.method-nav-pill>span[class*=\"CB3A32\"]{background-color:rgb(248 113 113 / 0.2)!important;color:#f87171!important}.method-nav-pill>span[class*=\"3064E3\"]::after,.method-nav-pill>span[class*=\"C28C30\"]::after,.method-nav-pill>span[class*=\"DA622B\"]::after{content:\"↗\"}.method-nav-pill>span[class*=\"2AB673\"]::after{content:\"↙\"}.method-nav-pill>span[class*=\"CB3A32\"]::after{content:\"×\";font-size:1rem}.endpoint-signature{align-items:center;display:flex;gap:0.5rem;margin:-0.25rem 0 1.5rem}.endpoint-signature code{background:transparent;color:rgb(203 213 225);font-family:\"IBM Plex Mono\", ui-monospace, monospace;font-size:0.9rem;padding:0}.endpoint-method{border-radius:0.25rem;font-family:\"IBM Plex Mono\", ui-monospace, monospace;font-size:0.7rem;font-weight:600;letter-spacing:0.02em;line-height:1;padding:0.3rem 0.45rem}.endpoint-method-get{background:rgb(74 222 128 / 0.16);color:#4ade80}.endpoint-method-post{background:rgb(96 165 250 / 0.16);color:#60a5fa}.endpoint-method-put{background:rgb(250 204 21 / 0.16);color:#facc15}.endpoint-method-patch{background:rgb(251 146 60 / 0.16);color:#fb923c}.endpoint-method-delete{background:rgb(248 113 113 / 0.16);color:#f87171}"}],"page":{"pagePath":"byok","slug":"/byok","pageMetadata":{"title":"Bring your own keys","description":"Store an upstream provider key and have Tokenless use it for that provider's routed requests.","href":"/byok"},"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: \"Store an upstream provider key and have Tokenless use it for that provider’s routed requests.\"\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`,ul:`ul`,..._provideComponents(),...props.components},{Heading,Warning}=_components;if(!Heading)_missingMdxReference(`Heading`,true);if(!Warning)_missingMdxReference(`Warning`,true);return _jsxs(_Fragment,{children:[_jsx(_components.p,{children:`Bring your own keys (BYOK) lets you supply an upstream provider API key while\nkeeping Tokenless routing. When an active, enabled key exists for a provider,\nTokenless uses that key for that provider’s upstream legs. When no key exists,\nTokenless uses the platform-managed key.`}),`\n`,_jsx(Warning,{children:_jsxs(_components.p,{children:[`BYOK management requires an interactive dashboard or `,_jsx(_components.code,{children:`tkl`}),` CLI session. A\nregular Tokenless API key cannot create, view, or revoke provider keys.`]})}),`\n`,_jsx(Heading,{level:`2`,id:`supported-providers`,children:`Supported providers`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:_jsx(_components.code,{children:`openai`})}),`\n`,_jsx(_components.li,{children:_jsx(_components.code,{children:`anthropic`})}),`\n`,_jsx(_components.li,{children:_jsx(_components.code,{children:`deepseek`})}),`\n`]}),`\n`,_jsx(_components.p,{children:`Keys are validated against the provider before they are stored. Tokenless stores\nonly encrypted key material; list responses contain provider metadata and the\nlast four characters, never the key itself.`}),`\n`,_jsx(Heading,{level:`2`,id:`routing-behavior`,children:`Routing behavior`}),`\n`,_jsx(_components.p,{children:`An enabled BYOK key is used only for matching upstream provider legs. If a\nprovider rejects an enabled key after it is stored, Tokenless returns an error\nthat identifies the provider rather than silently falling back to the platform\nkey.`})]})}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":{"codeStyling":"dark","config":{},"pageMetadata":{"title":"Bring your own keys","description":"Store an upstream provider key and have Tokenless use it for that provider's routed requests.","href":"/byok"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[{"title":"Supported providers","slug":"supported-providers","depth":2,"children":[]},{"title":"Routing behavior","slug":"routing-behavior","depth":2,"children":[]}],"codeExamples":{}},"jsLinks":[],"subdomain":"tokenless","siteName":"Tokenless","title":"Bring your own keys - Tokenless","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-07-10T23:36:49.650Z","originalFileLocation":"byok.mdx"},"headHtml":"\u003cscript data-mint-head>(function(){var d=document.documentElement,p=\"dark\";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=\"Store an upstream provider key and have Tokenless use it for that provider\u0026#x27;s routed requests.\">\u003cmeta data-mint-head name=\"application-name\" content=\"Tokenless\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"apple-touch-icon\" type=\"image/png\" sizes=\"180x180\" href=\"https://usetokenless.com/logo.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"https://usetokenless.com/logo.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"https://usetokenless.com/logo.png\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/png\" href=\"https://usetokenless.com/logo.png\">\u003cmeta data-mint-head property=\"og:title\" content=\"Bring your own keys - Tokenless\">\u003cmeta data-mint-head property=\"og:description\" content=\"Store an upstream provider key and have Tokenless use it for that provider\u0026#x27;s routed requests.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Tokenless\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.usetokenless.com/byok\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://tokenless.mintlify.site/_mintlify/api/og/v2?division=BYOK\u0026amp;title=Bring+your+own+keys\u0026amp;description=Store+an+upstream+provider+key+and+have+Tokenless+use+it+for+that+provider%27s+routed+requests.\u0026amp;theme=ae39aa01e9c9d7dc4a80ca30\u0026amp;signature=7e8f649c24e44d206e03bd3bf9a97f560d9d03fce18a10012ffdc0751d06c134\">\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=\"Bring your own keys - Tokenless\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Store an upstream provider key and have Tokenless use it for that provider\u0026#x27;s routed requests.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://tokenless.mintlify.site/_mintlify/api/og/v2?division=BYOK\u0026amp;title=Bring+your+own+keys\u0026amp;description=Store+an+upstream+provider+key+and+have+Tokenless+use+it+for+that+provider%27s+routed+requests.\u0026amp;theme=ae39aa01e9c9d7dc4a80ca30\u0026amp;signature=7e8f649c24e44d206e03bd3bf9a97f560d9d03fce18a10012ffdc0751d06c134\">\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=\"https://mintlify.s3.us-west-1.amazonaws.com/tokenless/_generated/favicon/browserconfig.xml?v=3\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"Tokenless\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#CBA94E\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.usetokenless.com/byok\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/byok.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://docs.usetokenless.com/#organization\",\"name\":\"Tokenless\",\"url\":\"https://docs.usetokenless.com\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://usetokenless.com/logo.png\"}},{\"@type\":\"WebSite\",\"@id\":\"https://docs.usetokenless.com#website\",\"name\":\"Tokenless\",\"url\":\"https://docs.usetokenless.com\",\"publisher\":{\"@id\":\"https://docs.usetokenless.com/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.usetokenless.com/byok#webpage\",\"url\":\"https://docs.usetokenless.com/byok\",\"name\":\"Bring your own keys\",\"description\":\"Store an upstream provider key and have Tokenless use it for that provider's routed requests.\",\"dateModified\":\"2026-07-10T23:36:49.650Z\",\"isPartOf\":{\"@id\":\"https://docs.usetokenless.com#website\"},\"breadcrumb\":{\"@id\":\"https://docs.usetokenless.com/byok#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.usetokenless.com/byok#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Tokenless\",\"item\":\"https://docs.usetokenless.com\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Bring your own keys\",\"item\":\"https://docs.usetokenless.com/byok\"}]},{\"@type\":[\"Article\",\"TechArticle\"],\"@id\":\"https://docs.usetokenless.com/byok#article\",\"headline\":\"Bring your own keys\",\"name\":\"Bring your own keys\",\"description\":\"Store an upstream provider key and have Tokenless use it for that provider's routed requests.\",\"url\":\"https://docs.usetokenless.com/byok\",\"mainEntityOfPage\":{\"@id\":\"https://docs.usetokenless.com/byok#webpage\"},\"dateModified\":\"2026-07-10T23:36:49.650Z\",\"publisher\":{\"@id\":\"https://docs.usetokenless.com/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.usetokenless.com#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"Tokenless\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"Tokenless","nav":{"global":null,"groups":[{"group":"Get started","pages":[{"title":"Tokenless API","href":"/index"},{"title":"Quickstart","href":"/quickstart"},{"title":"Routing modes","href":"/routing-profiles"}]},{"group":"Tokenless CLI","pages":[{"title":"Tokenless CLI","href":"/tkl-cli"}]},{"group":"OpenAI API","expanded":true,"pages":[{"title":"OpenAI-compatible API","href":"/compatibility/openai"},{"title":"Chat Completions","deprecated":null,"version":null,"openapi":"/openapi/compatibility.yaml post /openai/v1/chat/completions","href":"/api-reference/openai/chat-completions"},{"title":"Responses","deprecated":null,"version":null,"openapi":"/openapi/compatibility.yaml post /openai/v1/responses","href":"/api-reference/openai/responses"},{"title":"Models","deprecated":null,"version":null,"openapi":"/openapi/compatibility.yaml get /openai/v1/models","href":"/api-reference/openai/models"}]},{"group":"Anthropic API","expanded":true,"pages":[{"title":"Anthropic-compatible API","href":"/compatibility/anthropic"},{"title":"Messages","deprecated":null,"version":null,"openapi":"/openapi/compatibility.yaml post /anthropic/v1/messages","href":"/api-reference/anthropic/messages"},{"title":"Models","deprecated":null,"version":null,"openapi":"/openapi/compatibility.yaml get /anthropic/v1/models","href":"/api-reference/anthropic/models"}]},{"group":"Cost \u0026 usage","expanded":true,"pages":[{"title":"Cost and usage","href":"/reference/usage"},{"title":"Usage","deprecated":null,"version":null,"openapi":"/openapi/usage.yaml get /v1/usage","href":"/api-reference/usage"},{"title":"Get request details","deprecated":null,"version":null,"openapi":"/openapi/usage.yaml get /v1/usage/requests/{request_id}","href":"/api-reference/get-request-details"},{"title":"List routed requests","deprecated":null,"version":null,"openapi":"/openapi/usage.yaml get /v1/usage/requests","href":"/api-reference/list-routed-requests"},{"title":"Session totals","deprecated":null,"version":null,"openapi":"/openapi/usage.yaml get /v1/usage/sessions","href":"/api-reference/session-totals"},{"title":"Sessions","deprecated":null,"version":null,"openapi":"/openapi/usage.yaml get /v1/usage/sessions/list","href":"/api-reference/sessions"},{"title":"Feedback","description":"Sets or clears the caller's rating/comment on a routed request. Send an\nall-empty body to clear existing feedback. The operation is idempotent.\n","deprecated":null,"version":null,"openapi":"/openapi/usage.yaml post /v1/usage/requests/{request_id}/feedback","href":"/api-reference/feedback"}]},{"group":"BYOK","expanded":true,"pages":[{"title":"Bring your own keys","href":"/byok"},{"title":"Provider keys","description":null,"deprecated":null,"version":null,"openapi":"/openapi/compatibility.yaml get /v1/provider-keys","href":"/api-reference/byok/provider-keys"},{"title":"Set provider key","deprecated":null,"version":null,"openapi":"/openapi/compatibility.yaml put /v1/provider-keys/{provider}","href":"/api-reference/byok/set-provider-key"},{"title":"Update provider key","deprecated":null,"version":null,"openapi":"/openapi/compatibility.yaml patch /v1/provider-keys/{provider}","href":"/api-reference/byok/update-provider-key"},{"title":"Revoke provider key","deprecated":null,"version":null,"openapi":"/openapi/compatibility.yaml delete /v1/provider-keys/{provider}","href":"/api-reference/byok/revoke-provider-key"}]},{"group":"Reference","pages":[{"title":"Errors and retries","href":"/reference/errors"}]}]},"basePath":"","title":"Bring your own keys - Tokenless","buildId":"dpl_BLQvU86QFwq3AhPofSTw6q8dGWKm","deploymentId":"dpl_BLQvU86QFwq3AhPofSTw6q8dGWKm","dynamics":[],"chunks":[]}