Call Mixpeek from Vercel, GitHub Actions or any OIDC platform without storing an API key
A workload that runs on Vercel, GitHub Actions or another platform with an OIDC
identity can call Mixpeek without a stored API key. The platform gives the
workload a short-lived signed token. The workload trades that token at
POST /v1/auth/token-exchange for a Mixpeek API key that expires in minutes,
and uses that key like any other.Nothing long-lived sits in the workload’s environment variables, so there is
no key to leak, rotate or revoke when a deployment or dependency is
compromised.
An admin adds a workload identity provider to the organization. It names
the issuer, the accepted audience, and the claims a token must carry (for
example a Vercel project ID and environment, or a GitHub repository).
The workload gets a token from its platform and sends it, with the
provider’s provider_id, to POST /v1/auth/token-exchange. No API key is
needed for this call.
Mixpeek checks the token’s signature against the issuer’s published keys,
then its issuer, audience, expiry and every claim condition. If all hold, it
returns an API key that expires after the provider’s token_ttl_seconds
(5 to 60 minutes, 15 by default).
The workload sends Authorization: Bearer <access_token> until
expires_at, then exchanges a fresh token.
The returned key is an ordinary API key: permissions, scopes, rate limits and
the audit log treat it the same way. It belongs to the admin who added the
provider, it never appears in the API key list, and keys stop being issued if
that admin is suspended or removed.
Providers live on the organization. Send the full list with
PATCH /v1/organizations (admin key required). Keep each existing provider’s
provider_id to preserve it; omit provider_id to add one; leave a provider
out to remove it.
The response lists each provider with the provider_id your workload sends.
Field
What it does
name
Unique within the organization.
issuer
Exact iss of the tokens. Vercel team issuer mode: https://oidc.vercel.com/<team_slug>; global mode: https://oidc.vercel.com. GitHub: https://token.actions.githubusercontent.com.
audience
Accepted aud values. Vercel’s default is https://vercel.com/<team_slug>. For GitHub, the audience you request in the workflow.
claim_conditions
Claim name to allowed values. Every listed claim must match one value. A value ending in * matches by prefix.
permissions
read, write, delete. Admin cannot be granted this way.
token_ttl_seconds
Lifetime of each key, 300 to 3600. Default 900.
jwks_url
Optional. Mixpeek reads jwks_uri from the issuer’s /.well-known/openid-configuration when it is not set.
enabled
Set false to stop exchanges without deleting the provider.
A provider must match at least one claim besides iss, aud, exp, iat,
nbf and jti, and a bare * is refused. Otherwise any project on Vercel,
or any repository on GitHub, could get a key for your organization. Pin the
project ID or repository, and the environment or branch.
Reuse the key until shortly before expires_at rather than exchanging on every
request. Exchanges are limited to 120 per provider per minute. You can ask for
a shorter key with "ttl_seconds"; it is capped at the provider’s
token_ttl_seconds.
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"Mixpeek","colors":{"primary":"#FC5185","light":"#FFA0BD","dark":"#364F6B"},"logo":{"light":"https://mintcdn.com/mixpeek/QQyAGObvvz8PjpE0/logo/light.png?fit=max\u0026auto=format\u0026n=QQyAGObvvz8PjpE0\u0026q=85\u0026s=ac5ab550180057404fe833886513775f","dark":"https://mintcdn.com/mixpeek/QQyAGObvvz8PjpE0/logo/dark.png?fit=max\u0026auto=format\u0026n=QQyAGObvvz8PjpE0\u0026q=85\u0026s=e18979c495dbd68be4fc44473098773e"},"favicon":"https://mintcdn.com/mixpeek/QQyAGObvvz8PjpE0/favicon.png?fit=max\u0026auto=format\u0026n=QQyAGObvvz8PjpE0\u0026q=85\u0026s=8be5d2f6dc7e4cb44127a0493d57cde1","api":{"openapi":"api-reference/openapi.json","mdx":{"auth":{"method":"bearer","name":"Authorization"},"server":["https://api.mixpeek.com"]}},"background":{"image":"https://mintcdn.com/mixpeek/QQyAGObvvz8PjpE0/images/background.png?fit=max\u0026auto=format\u0026n=QQyAGObvvz8PjpE0\u0026q=85\u0026s=a68d0aa9f5eba448bcf67f5f410a6c90","color":{"dark":"#121212"}},"navbar":{"links":[{"href":"https://mixpeek.com/contact","label":"Talk to Engineers"}],"primary":{"type":"button","label":"Use Mixpeek","href":"https://studio.mixpeek.com/?utm_source=docs\u0026utm_medium=docs_navbar\u0026utm_campaign=mvs_onramp"}},"footer":{"socials":{"website":"https://mixpeek.com/","github":"https://github.com/mixpeek"}},"integrations":{"posthog":{"apiKey":"phc_x1G3IrW97qXoodTPWbyBK8dbZ3H7x5k5aZPCXmRvuWw","apiHost":"https://us.i.posthog.com"}},"contextual":{"options":["view","claude","chatgpt","cursor","vscode"],"display":"header"},"styling":{"latex":true},"navigation":{"global":{"anchors":[{"anchor":"Homepage","icon":"house","href":"https://mixpeek.com"},{"anchor":"Engineering Blog","icon":"newspaper","href":"https://mixpeek.com/blog"},{"anchor":"API Swagger","icon":"file-code","href":"https://api.mixpeek.com/docs"}]},"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"mixpeek","hasAudioNarration":false,"actualSubdomain":"mixpeek","customDomains":["docs.mixpeek.com"],"gitSource":{"type":"github","owner":"mixpeek","repo":"mixpeek","deployBranch":"main","contentDirectory":"docs","isPrivate":true,"mountPath":"","label":""},"feedback":{"thumbs":true,"edits":false,"issues":false},"entitlements":{"AI_CHAT":{"status":"DISABLED"}},"buildId":"6aeff52f552e9ea17aa8eeb5","clientVersion":"0.0.4087","searchFilterCounts":[{"language":"default","tag":"API Reference","count":536},{"language":"default","tag":"Documentation","count":195},{"language":"default","tag":"Advanced","count":140},{"language":"default","tag":"Administer","count":77},{"language":"default","tag":"Buckets","count":70},{"language":"default","tag":"Organization","count":62},{"language":"default","tag":"Retrievers","count":61},{"language":"default","tag":"Integrate \u0026 operate","count":59},{"language":"default","tag":"Build retrievers","count":55},{"language":"default","tag":"Apps","count":53}]},"assistantConfig":{"deflection":{"enabled":true,"email":"ethan@mixpeek.com"}},"basePath":"/docs","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":"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":"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":"editor-metadata","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":false},"customCss":[],"page":{"pagePath":"operations/workload-identity","slug":"/operations/workload-identity","pageMetadata":{"title":"Workload Identity (OIDC)","description":"Call Mixpeek from Vercel, GitHub Actions or any OIDC platform without storing an API key","href":"/operations/workload-identity"},"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: \"Call Mixpeek from Vercel, GitHub Actions or any OIDC platform without storing an API key\"\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`,ol:`ol`,p:`p`,pre:`pre`,span:`span`,strong:`strong`,tbody:`tbody`,td:`td`,th:`th`,thead:`thead`,tr:`tr`,ul:`ul`,..._provideComponents(),...props.components},{CodeBlock,CodeGroup,Heading,Table,Warning}=_components;if(!CodeBlock)_missingMdxReference(`CodeBlock`,true);if(!CodeGroup)_missingMdxReference(`CodeGroup`,true);if(!Heading)_missingMdxReference(`Heading`,true);if(!Table)_missingMdxReference(`Table`,true);if(!Warning)_missingMdxReference(`Warning`,true);return _jsxs(_Fragment,{children:[_jsxs(_components.p,{children:[`A workload that runs on Vercel, GitHub Actions or another platform with an OIDC\nidentity can call Mixpeek without a stored API key. The platform gives the\nworkload a short-lived signed token. The workload trades that token at\n`,_jsx(_components.code,{children:`POST /v1/auth/token-exchange`}),` for a Mixpeek API key that expires in minutes,\nand uses that key like any other.`]}),`\n`,_jsx(_components.p,{children:`Nothing long-lived sits in the workload’s environment variables, so there is\nno key to leak, rotate or revoke when a deployment or dependency is\ncompromised.`}),`\n`,_jsx(Heading,{level:`2`,id:`how-it-works`,children:`How it works`}),`\n`,_jsxs(_components.ol,{children:[`\n`,_jsxs(_components.li,{children:[`An admin adds a `,_jsx(_components.strong,{children:`workload identity provider`}),` to the organization. It names\nthe issuer, the accepted audience, and the claims a token must carry (for\nexample a Vercel project ID and environment, or a GitHub repository).`]}),`\n`,_jsxs(_components.li,{children:[`The workload gets a token from its platform and sends it, with the\nprovider’s `,_jsx(_components.code,{children:`provider_id`}),`, to `,_jsx(_components.code,{children:`POST /v1/auth/token-exchange`}),`. No API key is\nneeded for this call.`]}),`\n`,_jsxs(_components.li,{children:[`Mixpeek checks the token’s signature against the issuer’s published keys,\nthen its issuer, audience, expiry and every claim condition. If all hold, it\nreturns an API key that expires after the provider’s `,_jsx(_components.code,{children:`token_ttl_seconds`}),`\n(5 to 60 minutes, 15 by default).`]}),`\n`,_jsxs(_components.li,{children:[`The workload sends `,_jsx(_components.code,{children:`Authorization: Bearer \u003caccess_token>`}),` until\n`,_jsx(_components.code,{children:`expires_at`}),`, then exchanges a fresh token.`]}),`\n`]}),`\n`,_jsx(_components.p,{children:`The returned key is an ordinary API key: permissions, scopes, rate limits and\nthe audit log treat it the same way. It belongs to the admin who added the\nprovider, it never appears in the API key list, and keys stop being issued if\nthat admin is suspended or removed.`}),`\n`,_jsx(Heading,{level:`2`,id:`add-a-provider`,children:`Add a provider`}),`\n`,_jsxs(_components.p,{children:[`Providers live on the organization. Send the full list with\n`,_jsx(_components.code,{children:`PATCH /v1/organizations`}),` (admin key required). Keep each existing provider’s\n`,_jsx(_components.code,{children:`provider_id`}),` to preserve it; omit `,_jsx(_components.code,{children:`provider_id`}),` to add one; leave a provider\nout to remove it.`]}),`\n`,_jsxs(CodeGroup,{children:[_jsx(CodeBlock,{filename:`Vercel`,numberOfLines:`15`,language:`shellscript`,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:`shellscript`,children:_jsxs(_components.code,{language:`shellscript`,numberOfLines:`15`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`curl`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` -X`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` PATCH`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` https://api.mixpeek.com/v1/organizations`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D7BA7D`},children:` \\\\`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` -H`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"Authorization: Bearer `}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`$MIXPEEK_ADMIN_KEY`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D7BA7D`},children:` \\\\`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` -H`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"Content-Type: application/json\"`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D7BA7D`},children:` \\\\`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` -d`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` '{`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"workload_identity_providers\": [{`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"name\": \"vercel-prod\",`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"issuer\": \"https://oidc.vercel.com/acme\",`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"audience\": [\"https://vercel.com/acme\"],`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"claim_conditions\": {`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"project_id\": [\"prj_123\"],`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"environment\": [\"production\"]`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` },`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"permissions\": [\"read\"]`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` }]`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` }'`})}),`\n`]})})}),_jsx(CodeBlock,{filename:`GitHub Actions`,numberOfLines:`15`,language:`shellscript`,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:`shellscript`,children:_jsxs(_components.code,{language:`shellscript`,numberOfLines:`15`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`curl`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` -X`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` PATCH`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` https://api.mixpeek.com/v1/organizations`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D7BA7D`},children:` \\\\`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` -H`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"Authorization: Bearer `}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`$MIXPEEK_ADMIN_KEY`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D7BA7D`},children:` \\\\`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` -H`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"Content-Type: application/json\"`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D7BA7D`},children:` \\\\`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` -d`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` '{`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"workload_identity_providers\": [{`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"name\": \"github-deploys\",`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"issuer\": \"https://token.actions.githubusercontent.com\",`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"audience\": [\"https://api.mixpeek.com\"],`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"claim_conditions\": {`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"repository\": [\"acme/api\"],`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"ref\": [\"refs/heads/main\"]`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` },`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"permissions\": [\"read\", \"write\"]`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` }]`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` }'`})}),`\n`]})})})]}),`\n`,_jsxs(_components.p,{children:[`The response lists each provider with the `,_jsx(_components.code,{children:`provider_id`}),` your workload sends.`]}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Field`}),_jsx(_components.th,{children:`What it does`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`name`})}),_jsx(_components.td,{children:`Unique within the organization.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`issuer`})}),_jsxs(_components.td,{children:[`Exact `,_jsx(_components.code,{children:`iss`}),` of the tokens. Vercel team issuer mode: `,_jsx(_components.code,{children:`https://oidc.vercel.com/\u003cteam_slug>`}),`; global mode: `,_jsx(_components.code,{children:`https://oidc.vercel.com`}),`. GitHub: `,_jsx(_components.code,{children:`https://token.actions.githubusercontent.com`}),`.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`audience`})}),_jsxs(_components.td,{children:[`Accepted `,_jsx(_components.code,{children:`aud`}),` values. Vercel’s default is `,_jsx(_components.code,{children:`https://vercel.com/\u003cteam_slug>`}),`. For GitHub, the audience you request in the workflow.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`claim_conditions`})}),_jsxs(_components.td,{children:[`Claim name to allowed values. Every listed claim must match one value. A value ending in `,_jsx(_components.code,{children:`*`}),` matches by prefix.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`permissions`})}),_jsxs(_components.td,{children:[_jsx(_components.code,{children:`read`}),`, `,_jsx(_components.code,{children:`write`}),`, `,_jsx(_components.code,{children:`delete`}),`. Admin cannot be granted this way.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`token_ttl_seconds`})}),_jsx(_components.td,{children:`Lifetime of each key, 300 to 3600. Default 900.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`jwks_url`})}),_jsxs(_components.td,{children:[`Optional. Mixpeek reads `,_jsx(_components.code,{children:`jwks_uri`}),` from the issuer’s `,_jsx(_components.code,{children:`/.well-known/openid-configuration`}),` when it is not set.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`enabled`})}),_jsxs(_components.td,{children:[`Set `,_jsx(_components.code,{children:`false`}),` to stop exchanges without deleting the provider.`]})]})]})]}),`\n`,_jsx(Warning,{children:_jsxs(_components.p,{children:[`A provider must match at least one claim besides `,_jsx(_components.code,{children:`iss`}),`, `,_jsx(_components.code,{children:`aud`}),`, `,_jsx(_components.code,{children:`exp`}),`, `,_jsx(_components.code,{children:`iat`}),`,\n`,_jsx(_components.code,{children:`nbf`}),` and `,_jsx(_components.code,{children:`jti`}),`, and a bare `,_jsx(_components.code,{children:`*`}),` is refused. Otherwise any project on Vercel,\nor any repository on GitHub, could get a key for your organization. Pin the\nproject ID or repository, and the environment or branch.`]})}),`\n`,_jsx(Heading,{level:`2`,id:`exchange-a-token`,children:`Exchange a token`}),`\n`,_jsxs(CodeGroup,{children:[_jsx(CodeBlock,{filename:`Vercel (Node.js)`,numberOfLines:`14`,language:`typescript`,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:`typescript`,children:_jsxs(_components.code,{language:`typescript`,numberOfLines:`14`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:`import`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` { `}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`getVercelOidcToken`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` } `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:`from`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"@vercel/oidc\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`;`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`async`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` function`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:` mixpeekKey`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`() {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` const`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4FC1FF`},children:` res`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` =`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:` await`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:` fetch`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"https://api.mixpeek.com/v1/auth/token-exchange\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` method:`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"POST\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` headers:`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` { `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"Content-Type\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`:`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"application/json\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` },`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` body:`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4FC1FF`},children:` JSON`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`stringify`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`({`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` provider_id:`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` process`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`env`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4FC1FF`},children:`MIXPEEK_PROVIDER_ID`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` subject_token:`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:` await`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:` getVercelOidcToken`}),_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`,_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:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:` if`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` (`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`!`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`res`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`ok`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`) `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:`throw`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` new`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:` Error`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:\"`token exchange failed: \"}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#569CD6`},children:\"${\"}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`res`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`status`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#569CD6`},children:`}`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:\"`\"}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`);`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:` return`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` (`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:`await`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` res`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`json`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`()).`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`access_token`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:` as`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4EC9B0`},children:` string`}),_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`]})})}),_jsx(CodeBlock,{filename:`GitHub Actions`,numberOfLines:`15`,language:`yaml`,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:`yaml`,children:_jsxs(_components.code,{language:`yaml`,numberOfLines:`15`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:`permissions`}),_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\":`#569CD6`},children:` id-token`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`write`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:` contents`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`read`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:`steps`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`:`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` - `}),_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:`name`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`Get a Mixpeek key`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:` run`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:`|`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` TOKEN=$(curl -sSf -H \"Authorization: Bearer $ACTIONS_ID_TOKEN_REQUEST_TOKEN\" \\\\`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"$ACTIONS_ID_TOKEN_REQUEST_URL\u0026audience=https://api.mixpeek.com\" | jq -r .value)`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` KEY=$(curl -sSf -X POST https://api.mixpeek.com/v1/auth/token-exchange \\\\`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` -H \"Content-Type: application/json\" \\\\`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` -d \"{\\\\\"provider_id\\\\\":\\\\\"$MIXPEEK_PROVIDER_ID\\\\\",\\\\\"subject_token\\\\\":\\\\\"$TOKEN\\\\\"}\" \\\\`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` | jq -r .access_token)`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` echo \"::add-mask::$KEY\"`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` echo \"MIXPEEK_API_KEY=$KEY\" >> \"$GITHUB_ENV\"`})}),`\n`]})})})]}),`\n`,_jsx(_components.p,{children:`The provider ID is not a secret; it only says which provider to check the\ntoken against. The response:`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`9`,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:`9`,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:` \"access_token\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"mxp_sk_...\"`}),_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:` \"token_type\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"Bearer\"`}),_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:` \"expires_in\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`900`}),_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:` \"expires_at\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"2026-10-23T12:15:00Z\"`}),_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:` \"key_id\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"key_...\"`}),_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:` \"organization_id\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"org_...\"`}),_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:` \"permissions\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: [`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"read\"`}),_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`,_jsxs(_components.p,{children:[`Reuse the key until shortly before `,_jsx(_components.code,{children:`expires_at`}),` rather than exchanging on every\nrequest. Exchanges are limited to 120 per provider per minute. You can ask for\na shorter key with `,_jsx(_components.code,{children:`\"ttl_seconds\"`}),`; it is capped at the provider’s\n`,_jsx(_components.code,{children:`token_ttl_seconds`}),`.`]}),`\n`,_jsx(Heading,{level:`2`,id:`errors`,children:`Errors`}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Status`}),_jsx(_components.th,{children:_jsx(_components.code,{children:`error_code`})}),_jsx(_components.th,{children:`Meaning`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{\"data-numeric\":`true`,children:`401`}),_jsx(_components.td,{children:_jsx(_components.code,{children:`workload_identity_unknown_provider`})}),_jsxs(_components.td,{children:[`No provider has this `,_jsx(_components.code,{children:`provider_id`}),`.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{\"data-numeric\":`true`,children:`401`}),_jsx(_components.td,{children:_jsx(_components.code,{children:`workload_identity_invalid_signature`})}),_jsx(_components.td,{children:`The token is not signed by a key the issuer publishes.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{\"data-numeric\":`true`,children:`401`}),_jsx(_components.td,{children:_jsx(_components.code,{children:`workload_identity_wrong_issuer`})}),_jsxs(_components.td,{children:[`The token’s `,_jsx(_components.code,{children:`iss`}),` differs from the provider’s `,_jsx(_components.code,{children:`issuer`}),`.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{\"data-numeric\":`true`,children:`401`}),_jsx(_components.td,{children:_jsx(_components.code,{children:`workload_identity_wrong_audience`})}),_jsxs(_components.td,{children:[`The token’s `,_jsx(_components.code,{children:`aud`}),` is not in the provider’s `,_jsx(_components.code,{children:`audience`}),`.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{\"data-numeric\":`true`,children:`401`}),_jsx(_components.td,{children:_jsx(_components.code,{children:`workload_identity_token_expired`})}),_jsx(_components.td,{children:`The platform token has expired; get a fresh one.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{\"data-numeric\":`true`,children:`403`}),_jsx(_components.td,{children:_jsx(_components.code,{children:`workload_identity_claim_mismatch`})}),_jsxs(_components.td,{children:[`A claim in `,_jsx(_components.code,{children:`claim_conditions`}),` holds a value the provider does not allow. `,_jsx(_components.code,{children:`details.claim`}),` names it.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{\"data-numeric\":`true`,children:`403`}),_jsx(_components.td,{children:_jsx(_components.code,{children:`workload_identity_claim_missing`})}),_jsx(_components.td,{children:`The token lacks a claim the provider requires.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{\"data-numeric\":`true`,children:`403`}),_jsx(_components.td,{children:_jsx(_components.code,{children:`workload_identity_provider_disabled`})}),_jsxs(_components.td,{children:[`The provider has `,_jsx(_components.code,{children:`enabled: false`}),`.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{\"data-numeric\":`true`,children:`429`}),_jsx(_components.td,{}),_jsx(_components.td,{children:`Too many exchanges for this provider in the last minute.`})]})]})]}),`\n`,_jsx(Heading,{level:`2`,id:`related`,children:`Related`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.a,{href:`/operations/api-keys`,children:`API Keys`}),`: permissions, scopes, rotation.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.a,{href:`/operations/security`,children:`Security \u0026 Tenancy`}),`: headers and isolation.`]}),`\n`,_jsxs(_components.li,{children:[`Vercel: `,_jsx(_components.a,{href:`https://vercel.com/docs/oidc`,children:`OIDC federation`}),`. GitHub: `,_jsx(_components.a,{href:`https://docs.github.com/en/actions/security-for-github-actions/security-hardening-your-deployments/about-security-hardening-with-openid-connect`,children:`OpenID Connect in GitHub Actions`}),`.`]}),`\n`]})]})}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":"Workload Identity (OIDC)","description":"Call Mixpeek from Vercel, GitHub Actions or any OIDC platform without storing an API key","href":"/operations/workload-identity"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[{"title":"How it works","slug":"how-it-works","depth":2,"children":[]},{"title":"Add a provider","slug":"add-a-provider","depth":2,"children":[]},{"title":"Exchange a token","slug":"exchange-a-token","depth":2,"children":[]},{"title":"Errors","slug":"errors","depth":2,"children":[]},{"title":"Related","slug":"related","depth":2,"children":[]}],"codeExamples":{}},"jsLinks":["/docs/_mintlify/custom/mixpeek/fd427c04b3bf84bb/custom.js","/docs/_mintlify/custom/mixpeek/e878da59c725dc0d/scripts/test_first_touch.js"],"subdomain":"mixpeek","siteName":"Mixpeek","title":"Workload Identity (OIDC) - Mixpeek","navMaps":{"firstHrefInVersion":{"v1":{"href":"/operations/workload-identity","matchLevel":0}},"firstHrefInLanguage":{}},"lastModified":"2026-10-25T09:43:36.728Z","originalFileLocation":"operations/workload-identity.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=\"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=\"Call Mixpeek from Vercel, GitHub Actions or any OIDC platform without storing an API key\">\u003cmeta data-mint-head name=\"application-name\" content=\"Mixpeek\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/docs/mintlify-assets/_mintlify/favicons/mixpeek/FL3jtq6uKM5AAW-Z/_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=\"/docs/mintlify-assets/_mintlify/favicons/mixpeek/FL3jtq6uKM5AAW-Z/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/docs/mintlify-assets/_mintlify/favicons/mixpeek/FL3jtq6uKM5AAW-Z/_generated/favicon/favicon-16x16.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/docs/mintlify-assets/_mintlify/favicons/mixpeek/FL3jtq6uKM5AAW-Z/_generated/favicon/favicon-32x32.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/docs/mintlify-assets/_mintlify/favicons/mixpeek/FL3jtq6uKM5AAW-Z/_generated/favicon/favicon.ico\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/docs/mintlify-assets/_mintlify/favicons/mixpeek/FL3jtq6uKM5AAW-Z/_generated/favicon-dark/android-chrome-192x192.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/docs/mintlify-assets/_mintlify/favicons/mixpeek/FL3jtq6uKM5AAW-Z/_generated/favicon-dark/favicon-16x16.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/docs/mintlify-assets/_mintlify/favicons/mixpeek/FL3jtq6uKM5AAW-Z/_generated/favicon-dark/favicon-32x32.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/docs/mintlify-assets/_mintlify/favicons/mixpeek/FL3jtq6uKM5AAW-Z/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Workload Identity (OIDC) - Mixpeek\">\u003cmeta data-mint-head property=\"og:description\" content=\"Call Mixpeek from Vercel, GitHub Actions or any OIDC platform without storing an API key\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Mixpeek\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.mixpeek.com/docs/operations/workload-identity\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://mixpeek.mintlify.site/docs/_mintlify/api/og/v2?division=Security+%26+access\u0026amp;title=Workload+Identity+%28OIDC%29\u0026amp;description=Call+Mixpeek+from+Vercel%2C+GitHub+Actions+or+any+OIDC+platform+without+storing+an+API+key\u0026amp;theme=c63607064cbc270563da1421\u0026amp;signature=112a3c4bfe9be43888a8911ed7a2620a35979f08c316a0efadfd73e42accf7ae\">\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=\"Workload Identity (OIDC) - Mixpeek\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Call Mixpeek from Vercel, GitHub Actions or any OIDC platform without storing an API key\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://mixpeek.mintlify.site/docs/_mintlify/api/og/v2?division=Security+%26+access\u0026amp;title=Workload+Identity+%28OIDC%29\u0026amp;description=Call+Mixpeek+from+Vercel%2C+GitHub+Actions+or+any+OIDC+platform+without+storing+an+API+key\u0026amp;theme=c63607064cbc270563da1421\u0026amp;signature=112a3c4bfe9be43888a8911ed7a2620a35979f08c316a0efadfd73e42accf7ae\">\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=\"/docs/mintlify-assets/_mintlify/favicons/mixpeek/FL3jtq6uKM5AAW-Z/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"Mixpeek\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#FC5185\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.mixpeek.com/docs/operations/workload-identity\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/docs/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/docs/operations/workload-identity.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://docs.mixpeek.com/#organization\",\"name\":\"Mixpeek\",\"url\":\"https://docs.mixpeek.com\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/mixpeek/QQyAGObvvz8PjpE0/logo/light.png?fit=max\u0026auto=format\u0026n=QQyAGObvvz8PjpE0\u0026q=85\u0026s=ac5ab550180057404fe833886513775f\"}},{\"@type\":\"WebSite\",\"@id\":\"https://docs.mixpeek.com/docs#website\",\"name\":\"Mixpeek\",\"url\":\"https://docs.mixpeek.com/docs\",\"publisher\":{\"@id\":\"https://docs.mixpeek.com/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.mixpeek.com/docs/operations/workload-identity#webpage\",\"url\":\"https://docs.mixpeek.com/docs/operations/workload-identity\",\"name\":\"Workload Identity (OIDC)\",\"description\":\"Call Mixpeek from Vercel, GitHub Actions or any OIDC platform without storing an API key\",\"dateModified\":\"2026-10-25T09:43:36.728Z\",\"isPartOf\":{\"@id\":\"https://docs.mixpeek.com/docs#website\"},\"breadcrumb\":{\"@id\":\"https://docs.mixpeek.com/docs/operations/workload-identity#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.mixpeek.com/docs/operations/workload-identity#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Integrate \u0026 operate\",\"item\":\"https://docs.mixpeek.com/docs/agent-integrations/mcp\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Security \u0026 access\",\"item\":\"https://docs.mixpeek.com/docs/operations/security\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Workload Identity (OIDC)\",\"item\":\"https://docs.mixpeek.com/docs/operations/workload-identity\"}]},{\"@type\":[\"Article\",\"TechArticle\"],\"@id\":\"https://docs.mixpeek.com/docs/operations/workload-identity#article\",\"headline\":\"Workload Identity (OIDC)\",\"name\":\"Workload Identity (OIDC)\",\"description\":\"Call Mixpeek from Vercel, GitHub Actions or any OIDC platform without storing an API key\",\"url\":\"https://docs.mixpeek.com/docs/operations/workload-identity\",\"mainEntityOfPage\":{\"@id\":\"https://docs.mixpeek.com/docs/operations/workload-identity#webpage\"},\"dateModified\":\"2026-10-25T09:43:36.728Z\",\"publisher\":{\"@id\":\"https://docs.mixpeek.com/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.mixpeek.com/docs#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"Mixpeek\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"Mixpeek","nav":{"global":{"anchors":[{"anchor":"Homepage","icon":"house","href":"https://mixpeek.com"},{"anchor":"Engineering Blog","icon":"newspaper","href":"https://mixpeek.com/blog"},{"anchor":"API Swagger","icon":"file-code","href":"https://api.mixpeek.com/docs"}]},"versions":[{"version":"v1","default":true,"tabs":[{"tab":"Documentation","groups":[{"group":"Get started","pages":[{"title":"Introduction","href":"/overview/introduction"},{"title":"Quickstart","href":"/overview/quickstart"},{"title":"Explore the sample data","href":"/overview/sample-data"},{"title":"Core Concepts","href":"/overview/concepts"},{"title":"Data Model \u0026 Lineage","href":"/overview/data-model"},{"title":"Agents","href":"/overview/agents"},{"group":"Migrate to Mixpeek","expanded":false,"pages":[{"title":"Migrate from Elasticsearch","href":"/overview/from-elasticsearch"},{"title":"Migrate from Pinecone","href":"/overview/from-pinecone"},{"title":"Migrate from Weaviate","href":"/overview/from-weaviate"}]},{"group":"Using Studio","expanded":false,"pages":[{"title":"Quickstart","icon":"rocket","iconType":"solid","href":"/studio/quickstart"},{"title":"Namespaces","icon":"folder-tree","iconType":"solid","href":"/studio/namespaces"},{"title":"Buckets","icon":"bucket","iconType":"solid","href":"/studio/buckets"},{"title":"Collections","icon":"layer-group","iconType":"solid","href":"/studio/collections"},{"title":"Retrievers","icon":"magnifying-glass","iconType":"solid","href":"/studio/retrievers"},{"title":"Clusters","icon":"object-group","iconType":"solid","href":"/studio/clusters"},{"title":"Taxonomies","icon":"sitemap","iconType":"solid","href":"/studio/taxonomies"},{"title":"Explorer","icon":"compass","iconType":"solid","href":"/studio/explorer"},{"title":"Research","icon":"microscope","iconType":"solid","href":"/studio/research"}]}]},{"group":"Connect your data","pages":[{"title":"Ingest Data","href":"/platform/data-model"},{"title":"Syncs","href":"/platform/syncs"},{"group":"Object storage","expanded":false,"pages":[{"title":"Overview","href":"/integrations/object-storage/overview"},{"title":"AWS S3","href":"/integrations/object-storage/s3"},{"title":"Google Cloud Storage","href":"/integrations/object-storage/gcs"},{"title":"Google Drive","href":"/integrations/object-storage/google-drive"},{"title":"SharePoint","href":"/integrations/object-storage/sharepoint"},{"title":"Azure Blob Storage","href":"/integrations/object-storage/azure-blob"},{"title":"Cloudflare R2","href":"/integrations/object-storage/r2"},{"title":"Wasabi Hot Cloud Storage","href":"/integrations/object-storage/wasabi"},{"title":"Tigris","href":"/integrations/object-storage/tigris"},{"title":"Backblaze B2","href":"/integrations/object-storage/backblaze"},{"title":"Box","href":"/integrations/object-storage/box"},{"title":"Mux","href":"/integrations/object-storage/mux"},{"title":"Iconik","href":"/integrations/object-storage/iconik"},{"title":"Supabase Storage","href":"/integrations/object-storage/supabase"}]},{"group":"Other sources","expanded":false,"pages":[{"title":"RTSP","href":"/integrations/streaming/rtsp"},{"title":"Mixpeek + Snowflake","href":"/integrations/snowflake-warehouse"},{"title":"Mixpeek + Databricks","href":"/integrations/databricks-warehouse"},{"title":"PostgreSQL","href":"/integrations/databases/postgresql"},{"title":"BrightData","href":"/integrations/web-data/brightdata"},{"title":"HTTP API","href":"/integrations/web-data/http-api"},{"title":"RSS","href":"/integrations/web-data/rss"},{"title":"Overview","href":"/integrations/social-media/overview"},{"title":"Instagram","href":"/integrations/social-media/instagram"},{"title":"TikTok","href":"/integrations/social-media/tiktok"},{"title":"Email","href":"/integrations/email"}]}]},{"group":"Extract features","pages":[{"title":"Extract Features","href":"/platform/processing"},{"title":"Deduplication \u0026 Re-processing","href":"/processing/deduplication"},{"title":"Features","href":"/processing/features"},{"title":"Pipeline Configuration (Advanced)","href":"/processing/feature-extractors"},{"title":"Decomposition","href":"/processing/decomposition"},{"group":"Built-in extractors","expanded":false,"pages":[{"title":"Multimodal Extractor","href":"/processing/extractors/multimodal"},{"title":"Image Extractor","href":"/processing/extractors/image"},{"title":"Document Graph Extractor","href":"/processing/extractors/document"},{"title":"Text Extractor","href":"/processing/extractors/text"},{"title":"Face Identity Extractor","href":"/processing/extractors/face-identity"},{"title":"Audio Fingerprint Extractor","href":"/processing/extractors/audio-fingerprint"},{"title":"Gemini Multifile Extractor","href":"/processing/extractors/gemini-multifile"},{"title":"Scrolling Text Extractor","href":"/processing/extractors/scrolling-text"},{"title":"Web Scraper Extractor","href":"/processing/extractors/web-scraper"},{"title":"Passthrough Extractor","href":"/processing/extractors/passthrough"},{"title":"Universal Extractor","href":"/processing/extractors/universal"},{"title":"Video Transcode Extractor","href":"/processing/extractors/video-transcode"}]},{"group":"Custom extractors","expanded":false,"pages":[{"title":"Custom Extractors","href":"/processing/custom-extractors"},{"title":"Custom Extractor API (Dedicated Infrastructure)","href":"/processing/custom-extractor-api"},{"title":"Extractor Submissions","href":"/processing/extractor-marketplace"},{"title":"Multi-Tier Feature Extraction","href":"/processing/multi-tier-extractors"}]},{"group":"Models \u0026 migration","expanded":false,"pages":[{"title":"Model Registry","href":"/processing/model-registry"},{"title":"Migrate Embedding Models","href":"/processing/model-migration"},{"title":"Migrating from Extractor Names","href":"/processing/extractor-migration"},{"title":"Jev decision model","href":"/processing/jev"}]}]},{"group":"Build retrievers","pages":[{"title":"Retrievers","href":"/retrieval/retrievers"},{"title":"Retrieval Cookbook","href":"/retrieval/cookbook"},{"group":"Retriever Stages","pages":[{"title":"Retriever Stages","href":"/retrieval/stages/overview"},{"group":"Filter","pages":[{"title":"Feature Search","href":"/retrieval/stages/feature-search"},{"title":"Attribute Filter","href":"/retrieval/stages/attribute-filter"},{"title":"LLM Filter","href":"/retrieval/stages/llm-filter"},{"title":"Agent Search","href":"/retrieval/stages/agent-search"},{"title":"Query Expand","href":"/retrieval/stages/query-expand"}]},{"group":"Sort","pages":[{"title":"Sort Relevance","href":"/retrieval/stages/sort-relevance"},{"title":"Sort Attribute","href":"/retrieval/stages/sort-attribute"},{"title":"MMR (Maximal Marginal Relevance)","href":"/retrieval/stages/mmr"},{"title":"Rerank","href":"/retrieval/stages/rerank"},{"title":"MaxSim Rerank","href":"/retrieval/stages/maxsim-rerank"},{"title":"Score Normalize","href":"/retrieval/stages/score-normalize"}]},{"group":"Reduce","pages":[{"title":"Aggregate","href":"/retrieval/stages/aggregate"},{"title":"Temporal","href":"/retrieval/stages/temporal"},{"title":"Sample","href":"/retrieval/stages/sample"},{"title":"Summarize","href":"/retrieval/stages/summarize"},{"title":"Limit","href":"/retrieval/stages/limit"},{"title":"Deduplicate","href":"/retrieval/stages/deduplicate"},{"title":"Moment Group","href":"/retrieval/stages/moment-group"},{"title":"Score Threshold","href":"/retrieval/stages/score-threshold"}]},{"group":"Group","pages":[{"title":"Group By","href":"/retrieval/stages/group-by"},{"title":"Cluster","href":"/retrieval/stages/cluster"}]},{"group":"Apply","pages":[{"title":"JSON Transform","href":"/retrieval/stages/json-transform"},{"title":"RAG Prepare","href":"/retrieval/stages/rag-prepare"},{"title":"External Web Search","href":"/retrieval/stages/external-web-search"},{"title":"API Call","href":"/retrieval/stages/api-call"},{"title":"SQL Lookup","href":"/retrieval/stages/sql-lookup"},{"title":"Cross Compare","href":"/retrieval/stages/cross-compare"},{"title":"Traverse Edge","href":"/retrieval/stages/traverse-edge"},{"title":"Web Scrape","href":"/retrieval/stages/web-scrape"},{"title":"Unwind","href":"/retrieval/stages/unwind"},{"title":"Code Execution","href":"/retrieval/stages/code-execution"}]},{"group":"Enrich","pages":[{"title":"LLM Enrich","href":"/retrieval/stages/llm-enrich"},{"title":"Classify","href":"/retrieval/stages/classify"},{"title":"Taxonomy Enrich","href":"/retrieval/stages/taxonomy-enrich"},{"title":"Document Enrich","href":"/retrieval/stages/document-enrich"},{"title":"Agentic Enrich","href":"/retrieval/stages/agentic-enrich"}]}]},{"group":"Tune relevance","expanded":false,"pages":[{"title":"Improve Relevance","href":"/platform/improve-relevance"},{"title":"Auto-Tune","sidebarTitle":"Auto-Tune","href":"/retrieval/auto-tune"},{"title":"Rollout \u0026 Safety","sidebarTitle":"Rollout \u0026 Safety","href":"/retrieval/auto-tune-rollout"},{"title":"Reward Signals","sidebarTitle":"Reward Signals","href":"/retrieval/reward-signals"},{"title":"Evaluations","href":"/retrieval/evaluations"},{"title":"Interactions","href":"/retrieval/interactions"},{"title":"Typeahead","href":"/retrieval/typeahead"},{"title":"Query Optimization \u0026 Explain","href":"/retrieval/query-optimization"},{"title":"Multi-Stage Retrieval","href":"/retrieval/multi-stage-deep-dive"},{"title":"Lineage Traversal","href":"/retrieval/lineage-traversal"},{"title":"Filters","href":"/retrieval/filters"},{"title":"Deep Research Patterns","href":"/retrieval/research"},{"title":"Architecture","href":"/relevance/architecture"},{"title":"Fusion Strategies","href":"/relevance/fusion-strategies"},{"title":"Learned Fusion","href":"/relevance/learned-fusion"},{"title":"Analytics","href":"/relevance/analytics"}]}]},{"group":"Enrich \u0026 organize","pages":[{"title":"Classify Content","href":"/platform/enrichment"},{"title":"Taxonomies","href":"/enrichment/taxonomies"},{"title":"Clusters","href":"/enrichment/clusters"},{"title":"Alerts","href":"/enrichment/alerts"},{"title":"Triggers","href":"/platform/triggers"},{"group":"Annotations \u0026 enrichments","expanded":false,"pages":[{"title":"Retriever Enrichments","href":"/enrichment/retriever-enrichments"},{"title":"Annotations","href":"/relevance/annotations"}]}]},{"group":"Integrate \u0026 operate","pages":[{"group":"Agents","expanded":false,"pages":[{"title":"MCP Server","href":"/agent-integrations/mcp"},{"title":"LangChain","href":"/agent-integrations/langchain"},{"title":"OpenAI Function Calling","href":"/agent-integrations/openai-function-calling"}]},{"title":"Pagination","href":"/platform/pagination"},{"group":"SDKs \u0026 tools","expanded":false,"pages":[{"title":"SDK Overview","href":"/integrations/developer-tools/sdk-usage"},{"title":"Python SDK","href":"/integrations/developer-tools/python-sdk"},{"title":"JavaScript SDK","href":"/integrations/developer-tools/javascript-sdk"},{"title":"Mixpeek CLI","href":"/integrations/developer-tools/mixpeek-cli"},{"title":"MCP Server","href":"/integrations/developer-tools/mcp-server"},{"title":"IAB Tech Lab buyer agent","href":"/integrations/developer-tools/iab-buyer-agent"},{"title":"Claude Code Skill","href":"/integrations/developer-tools/claude-skill"}]},{"title":"Search Widget","href":"/integrations/search-widget"},{"group":"Apps","expanded":false,"pages":[{"title":"Apps","icon":"browser","href":"/canvas/apps"},{"title":"Deploy from Code","icon":"upload","href":"/canvas/apps/deploy"},{"title":"Build Logs","icon":"terminal","href":"/canvas/apps/build-logs"},{"title":"Preview Deploys","icon":"code-pull-request","href":"/canvas/apps/preview-deploys"},{"title":"GitHub Integration","icon":"github","href":"/canvas/apps/github"},{"title":"CLI","icon":"square-terminal","href":"/canvas/apps/cli"},{"title":"Server Functions","icon":"server","href":"/canvas/apps/server-functions"},{"title":"Environment Variables","icon":"key","href":"/canvas/apps/environment-variables"},{"title":"Runtime Logs \u0026 Analytics","icon":"chart-line","href":"/canvas/apps/logs"},{"title":"Monitoring","icon":"monitor-waveform","href":"/canvas/apps/monitoring"},{"title":"Version History","icon":"code-branch","href":"/canvas/apps/versions"},{"title":"Authentication","icon":"lock","href":"/canvas/apps/authentication"},{"title":"User Management","icon":"users","href":"/canvas/apps/users"},{"title":"Custom Domains","icon":"globe","href":"/canvas/apps/domains"}]},{"title":"Operate","href":"/platform/operations"},{"group":"Security \u0026 access","expanded":false,"pages":[{"title":"Security \u0026 Tenancy","href":"/operations/security"},{"title":"API Keys","description":"Create, scope, rotate, and monitor API keys — permissions, resource scopes, per-key usage, and end-user keys","href":"/operations/api-keys"},{"title":"Workload Identity (OIDC)","href":"/operations/workload-identity"},{"title":"Permissions","description":"Authorize retrieval per end-user — with Mixpeek's built-in document ACL or your own external authorization system (OpenFGA).","href":"/platform/permissions"},{"title":"Document-Level ACL","href":"/operations/document-acl"},{"title":"Using Mixpeek on corporate networks","href":"/operations/corporate-networks"}]},{"group":"Automation","expanded":false,"pages":[{"title":"Triggers vs Alerts","href":"/operations/triggers-vs-alerts"},{"title":"Webhooks","href":"/operations/webhooks"},{"title":"Change Feed","href":"/operations/change-feed"},{"title":"Manifests","href":"/operations/manifests"},{"title":"Describe It: Generate a Pipeline","sidebarTitle":"Generate from a description","href":"/operations/generate-from-description"},{"title":"Environment Branching","href":"/operations/environment-branching"}]},{"title":"Billing \u0026 Pricing","href":"/platform/billing"},{"title":"Budgets","href":"/platform/budgets"},{"title":"Rate Limits \u0026 Quotas","href":"/operations/rate-limits-quotas"},{"group":"Monitoring \u0026 scale","expanded":false,"pages":[{"title":"Analytics \u0026 Performance","href":"/operations/analytics-overview"},{"title":"Observability","href":"/operations/observability"},{"title":"Batch ingestion at scale","href":"/operations/batch-ingestion-at-scale"},{"title":"Batch Diagnostics \u0026 Troubleshooting","href":"/troubleshoot/batch-diagnostics"},{"title":"Deployment","href":"/operations/deployment"},{"title":"Deployment Models","href":"/resources/deployment-models"},{"title":"Single Tenant","href":"/resources/single-tenant"}]},{"group":"Customer-Hosted Mixpeek","expanded":false,"pages":[{"title":"Customer-Hosted Mixpeek","href":"/customer-hosted/overview"},{"title":"End-to-End Data Flow","href":"/customer-hosted/data-flow"},{"title":"What you provide","href":"/customer-hosted/kuberay"},{"title":"Running inside your existing Ray cluster","href":"/customer-hosted/existing-raycluster"},{"title":"Ray infrastructure lifecycle","href":"/customer-hosted/lifecycle"},{"title":"Qualification","href":"/customer-hosted/qualification"},{"title":"Security and RBAC","href":"/customer-hosted/security-rbac"},{"title":"Configuration and secrets","href":"/customer-hosted/configuration"},{"title":"Supported environments","href":"/customer-hosted/compatibility"},{"title":"Troubleshooting","href":"/customer-hosted/troubleshooting"}]}]},{"group":"Resources","pages":[{"title":"Best Practices","href":"/resources/best-practices"},{"title":"Troubleshooting","href":"/resources/troubleshooting"},{"title":"Caching \u0026 Signatures","href":"/overview/caching"},{"title":"Tasks","href":"/processing/tasks"}]}]},{"tab":"Vector Store","pages":[{"title":"Vector Store","href":"/vector-store/overview"}]},{"tab":"Guides","pages":[{"title":"Guides","href":"/tutorials/semantic-search"}]},{"tab":"API Reference","pages":[{"title":"API Reference","href":"/api-reference/namespaces/create-namespace"}]}]}]},"basePath":"","title":"Workload Identity (OIDC) - Mixpeek","buildId":"dpl_BSPUBxEoKhhK7HzXVDPxdPvWx4xc","deploymentId":"dpl_BSPUBxEoKhhK7HzXVDPxdPvWx4xc","dynamics":[],"chunks":[]}