🐰 New: Triage — a self-updating cross-repository queue that prioritizes pull requests by value and risk, so you always know what to review next. Explore Triage →
{
"error": {
"code": "LEGACY_API_KEY",
"message": "You are using a legacy API key. We are deprecating use of legacy keys. Regenerate a new API key and retry the request."
}
}
{
"error": {
"code": "RATE_LIMIT_EXCEEDED",
"message": "Rate limit exceeded. Max 10 requests per 60 seconds"
}
}
{
"error": {
"code": "INTERNAL_ERROR",
"message": "Internal server error while listing users"
}
}
Seats
Bulk assign or unassign seats for up to 500 users. The request format depends on the type of API key used. Organization and self-hosted instance API keys address users by provider user ID with the action + user_ids format, where the action field determines the operation type. Workspace API keys address users by email or CodeRabbit user ID (cr_user_id) with the members format, where each entry declares its desired seat state via seat_assigned. Sending the action + user_ids format with a workspace API key (or the members format with an organization key) fails with an INVALID_REQUEST error.
{
"error": {
"code": "LEGACY_API_KEY",
"message": "You are using a legacy API key. We are deprecating use of legacy keys. Regenerate a new API key and retry the request."
}
}
{
"error": {
"code": "RATE_LIMIT_EXCEEDED",
"message": "Rate limit exceeded. Max 10 requests per 60 seconds"
}
}
{
"error": {
"code": "INTERNAL_ERROR",
"message": "Internal server error while listing users"
}
}
The request body schema depends on the type of API key you authenticate with:
API key type
Request format
Users addressed by
Organization
action + user_ids
Provider user ID
Self-hosted instance
action + user_ids
Provider user ID
Workspace
members
Email or cr_user_id
Workspace API keys do not accept the action + user_ids format — sending it fails with INVALID_REQUEST: Invalid input: expected array, received undefined. Use the members format instead, where each entry declares its desired seat state with seat_assigned.
Each member entry is identified by email or cr_user_id (the user_id returned by GET /v1/users) — at least one is required, and cr_user_id takes precedence when both are provided. Use cr_user_id to address members who have no email; unknown IDs fail that entry with USER_NOT_FOUND in the response’s failed array.
Operation completed (check status field for partial failures). The succeeded and failed entries echo the identifiers used in the request: provider user IDs for organization and self-hosted instance keys; for workspace keys, whichever identifier each member supplied (cr_user_id when provided, otherwise email).
Response for bulk operations with partial success model
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"CodeRabbit","description":"Guides for Agentic Change Management: review, prioritize, understand, and secure changes across pull requests, your IDE, CLI, and team chat.","colors":{"primary":"#FF570A","light":"#FF570A","dark":"#FF570A"},"logo":{"light":"https://mintcdn.com/coderabbit/qAZa_d7FrwPO_w-O/coderabbit-logo-light.svg?fit=max\u0026auto=format\u0026n=qAZa_d7FrwPO_w-O\u0026q=85\u0026s=d2bf9e91be0e760ec9cb468676fa6ab6","dark":"https://mintcdn.com/coderabbit/qAZa_d7FrwPO_w-O/coderabbit-logo-dark.svg?fit=max\u0026auto=format\u0026n=qAZa_d7FrwPO_w-O\u0026q=85\u0026s=feeb1667ed4a2768a15b271f130395c0","href":"/"},"favicon":{"light":"https://mintcdn.com/coderabbit/qAZa_d7FrwPO_w-O/favicon-light.svg?fit=max\u0026auto=format\u0026n=qAZa_d7FrwPO_w-O\u0026q=85\u0026s=c0b0fbea23b48949cc631606f2a30022","dark":"https://mintcdn.com/coderabbit/qAZa_d7FrwPO_w-O/favicon-dark.svg?fit=max\u0026auto=format\u0026n=qAZa_d7FrwPO_w-O\u0026q=85\u0026s=4db7fc04860b6907c7f236f05b37f5c6"},"api":{"openapi":"openapi.json","playground":{"display":"simple"}},"navbar":{"primary":{"type":"button","label":"Sign up","href":"https://app.coderabbit.ai/login?free-trial="}},"footer":{"socials":{"x":"https://x.com/coderabbitai","linkedin":"https://www.linkedin.com/company/coderabbitai","github":"https://github.com/coderabbitai","discord":"https://discord.gg/GsXnASn26c"},"links":[{"header":"Resources","items":[{"label":"Blog","href":"https://coderabbit.ai/blog"},{"label":"Pricing","href":"https://www.coderabbit.ai/pricing"},{"label":"Changelog","href":"https://docs.coderabbit.ai/changelog"},{"label":"Support knowledge base","href":"https://kb.coderabbit.ai"}]},{"header":"Quick links","items":[{"label":"Schedule a demo","href":"https://www.coderabbit.ai/contact-us/sales"},{"label":"Get support","href":"https://docs.coderabbit.ai/support"},{"label":"Status page","href":"https://status.coderabbit.ai"},{"label":"Terms of service","href":"https://www.coderabbit.ai/terms-of-service"},{"label":"Privacy Policy","href":"https://coderabbit.ai/privacy-policy"}]}]},"seo":{"metatags":{"description":"Guides for Agentic Change Management: review, prioritize, understand, and secure changes across pull requests, your IDE, CLI, and team chat.","og:type":"website","og:site_name":"CodeRabbit Documentation","og:locale":"en_US","twitter:card":"summary_large_image","twitter:site":"@coderabbitai","canonical":"https://docs.coderabbit.ai"}},"fonts":{"heading":{"family":"Geist"},"body":{"family":"Geist"}},"icons":{"library":"lucide"},"styling":{"eyebrows":"breadcrumbs","latex":true},"integrations":{"gtm":{"tagId":"GTM-5BWLXJRC"},"posthog":{"apiKey":"phc_6fDZRN9hYzB83I7Fk2GNHYqas4WMIdGBQ58aZ6EOZR0"}},"banner":{"content":"🐰 New: **Triage** — a self-updating cross-repository queue that prioritizes pull requests by value and risk, so you always know what to review next. [Explore Triage →](/triage)","dismissible":true,"type":"info","color":{"light":"#171717","dark":"#171717"}},"errors":{"404":{"redirect":false,"title":"Page Not Found. Sorry!","description":"Try **Search** or **Ask AI** to find what you're looking for.\nPress \u003ckbd>⌘K\u003c/kbd> (Mac) or \u003ckbd>Ctrl+K\u003c/kbd> (Windows/Linux) to open the search.\n\n\nNeed help? [Get support](/support)."}},"contextual":{"options":["copy","view","chatgpt","claude","perplexity","mcp","cursor","vscode"],"display":"header"},"navigation":{"global":{"anchors":[{"anchor":"Quickstart","icon":"rocket","hidden":false,"href":"/getting-started/quickstart"},{"anchor":"Blog","icon":"pen-line","hidden":true,"href":"https://coderabbit.ai/blog"},{"anchor":"Changelog","icon":"history","href":"/changelog"},{"anchor":"Support","icon":"life-buoy","href":"/support"},{"anchor":"Discord","icon":"discord","href":"https://discord.gg/coderabbit"}]},"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"coderabbit","hasAudioNarration":false,"actualSubdomain":"coderabbit","customDomains":["docs.coderabbit.ai"],"gitSource":{"type":"github","owner":"coderabbitai","repo":"docs","deployBranch":"main","contentDirectory":"","isPrivate":true,"mountPath":"","label":""},"chroma":{"liveDeploymentHistoryId":"6ae06be2b64cd9c8a5d3308b","collectionId":"c0e0c2d8-6d18-4047-b347-d10658cdadad","schemaVersion":"v3","latestBuiltDeploymentHistoryId":"6ae06be2b64cd9c8a5d3308b"},"feedback":{"thumbs":true,"agentFeedback":true},"entitlements":{"AI_CHAT":{"status":"ENABLED"},"WEB_MCP":{"status":"ENABLED"},"NARRATION":{"status":"ENABLED"}},"buildId":"6ae078fa83d301a35cf45519","clientVersion":"0.0.3971","searchFilterCounts":[{"language":"default","tag":"CodeRabbit Platform","count":156},{"language":"default","tag":"Management","count":76},{"language":"default","tag":"Tools","count":62},{"language":"default","tag":"Per-tool guides","count":59},{"language":"default","tag":"Languages","count":39},{"language":"default","tag":"CodeRabbit API","count":23},{"language":"default","tag":"API Reference","count":21},{"language":"default","tag":"Agent for Slack and Discord","count":20},{"language":"default","tag":"CLI and IDE tools","count":20},{"language":"default","tag":"Agent for Slack","count":14}]},"assistantConfig":{},"basePath":"","hasChatPermissions":false,"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":"editor-v7-file-tree","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-integrations-settings","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-pr-grouping","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-prefix","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"analytics-v7","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"user-flows-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"no-publish-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-onboarding","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"llms-txt-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"pause-universal-search-reconcile","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving-live","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"stripTemperatureMiddleware","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"per-site-search-delta","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"support-platform-pylon-zendesk","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"instant-rollback","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications-server","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-private-page-search","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-fable","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fixed-ai-action-pricing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automation-resolve-merge-conflict","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"scoped-publishing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"mintql","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"page-level-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-version-history-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-nav-generations","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-page-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workspace-projects","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"assistant-v5","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"byok-sep-25","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fork-pr-previews","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"revalidation-jwt","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"vite-origin","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-agent-model-picker","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-updated-9-15","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-sso-scim","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"hobby-abuse-scan","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"dashboard-inbox","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-signup","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-enabled","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"isAtlas":false,"googleFontsInlined":true},"customCss":[],"page":{"pagePath":"api-reference/users-manage-seats","slug":"/api-reference/users-manage-seats","pageMetadata":{"openapi":"post /v1/users/seats","title":"Seats","description":"Bulk assign or unassign seats for up to 500 users. The request format depends on the type of API key used. **Organization and self-hosted instance API keys** address users by provider user ID with the `action` + `user_ids` format, where the `action` field determines the operation type. **Workspace API keys** address users by email or CodeRabbit user ID (`cr_user_id`) with the `members` format, where each entry declares its desired seat state via `seat_assigned`. Sending the `action` + `user_ids` format with a workspace API key (or the `members` format with an organization key) fails with an `INVALID_REQUEST` error.","href":"/api-reference/users-manage-seats"},"description":{"compiledSource":"\"use strict\";\nconst {jsx: _jsx, jsxs: _jsxs} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n code: \"code\",\n p: \"p\",\n strong: \"strong\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsxs(_components.p, {\n children: [\"Bulk assign or unassign seats for up to 500 users. The request format depends on the type of API key used. \", _jsx(_components.strong, {\n children: \"Organization and self-hosted instance API keys\"\n }), \" address users by provider user ID with the \", _jsx(_components.code, {\n children: \"action\"\n }), \" + \", _jsx(_components.code, {\n children: \"user_ids\"\n }), \" format, where the \", _jsx(_components.code, {\n children: \"action\"\n }), \" field determines the operation type. \", _jsx(_components.strong, {\n children: \"Workspace API keys\"\n }), \" address users by email or CodeRabbit user ID (\", _jsx(_components.code, {\n children: \"cr_user_id\"\n }), \") with the \", _jsx(_components.code, {\n children: \"members\"\n }), \" format, where each entry declares its desired seat state via \", _jsx(_components.code, {\n children: \"seat_assigned\"\n }), \". Sending the \", _jsx(_components.code, {\n children: \"action\"\n }), \" + \", _jsx(_components.code, {\n children: \"user_ids\"\n }), \" format with a workspace API key (or the \", _jsx(_components.code, {\n children: \"members\"\n }), \" format with an organization key) fails with an \", _jsx(_components.code, {\n children: \"INVALID_REQUEST\"\n }), \" error.\"]\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];const EnterprisePlanBadge=({tip=`This feature is available exclusively as part of the Enterprise plan. Please refer to our pricing page for more information about our plans and features.`,title=`Enterprise Plan`,cta=`Read more`,href=`https://coderabbit.ai/pricing`,disabled=false})=>{const{Badge,Tooltip}=_provideComponents()||{};if(!Badge)_missingMdxReference(`Badge`,true);if(!Tooltip)_missingMdxReference(`Tooltip`,true);return _jsx(Tooltip,{tip,cta,href,children:_jsx(Badge,{icon:`building-2`,disabled:disabled||undefined,children:title})})};function _createMdxContent(props){const _components={a:`a`,code:`code`,p:`p`,pre:`pre`,span:`span`,strong:`strong`,tbody:`tbody`,td:`td`,th:`th`,thead:`thead`,tr:`tr`,..._provideComponents(),...props.components},{CodeBlock,Heading,Info,Table,Warning,_MdxComponentBoundary}=_components;if(!CodeBlock)_missingMdxReference(`CodeBlock`,true);if(!Heading)_missingMdxReference(`Heading`,true);if(!Info)_missingMdxReference(`Info`,true);if(!Table)_missingMdxReference(`Table`,true);if(!Warning)_missingMdxReference(`Warning`,true);if(!_MdxComponentBoundary)_missingMdxReference(`_MdxComponentBoundary`,true);return _jsxs(_Fragment,{children:[_jsx(_MdxComponentBoundary,{name:`EnterprisePlanBadge`,children:_jsx(EnterprisePlanBadge,{})}),`\n`,_jsx(Heading,{level:`2`,id:`manage-seats`,children:`Manage Seats`}),`\n`,_jsx(Info,{children:_jsxs(_components.p,{children:[`Requires `,_jsx(_components.strong,{children:`Admin`}),` role. See `,_jsx(_components.a,{href:`/management/roles`,children:`Role-based access`}),` for details.`]})}),`\n`,_jsx(Heading,{level:`3`,id:`request-format-by-api-key-type`,children:`Request format by API key type`}),`\n`,_jsx(_components.p,{children:`The request body schema depends on the type of API key you authenticate with:`}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`API key type`}),_jsx(_components.th,{children:`Request format`}),_jsx(_components.th,{children:`Users addressed by`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Organization`}),_jsxs(_components.td,{children:[_jsx(_components.code,{children:`action`}),` + `,_jsx(_components.code,{children:`user_ids`})]}),_jsx(_components.td,{children:`Provider user ID`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Self-hosted instance`}),_jsxs(_components.td,{children:[_jsx(_components.code,{children:`action`}),` + `,_jsx(_components.code,{children:`user_ids`})]}),_jsx(_components.td,{children:`Provider user ID`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Workspace`}),_jsx(_components.td,{children:_jsx(_components.code,{children:`members`})}),_jsxs(_components.td,{children:[`Email or `,_jsx(_components.code,{children:`cr_user_id`})]})]})]})]}),`\n`,_jsx(Warning,{children:_jsxs(_components.p,{children:[`Workspace API keys do not accept the `,_jsx(_components.code,{children:`action`}),` + `,_jsx(_components.code,{children:`user_ids`}),` format — sending it fails with `,_jsx(_components.code,{children:`INVALID_REQUEST: Invalid input: expected array, received undefined`}),`. Use the `,_jsx(_components.code,{children:`members`}),` format instead, where each entry declares its desired seat state with `,_jsx(_components.code,{children:`seat_assigned`}),`.`]})}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`5`,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:`5`,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:` --request`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` POST`}),_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:` --url`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` 'https://api.coderabbit.ai/v1/users/seats'`}),_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:` --header`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` 'x-coderabbitai-api-key: \u003cworkspace-api-key>'`}),_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:` --header`}),_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:` --data`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` '{\"members\":[{\"email\":\"user@example.com\",\"seat_assigned\":true}]}'`})]}),`\n`]})})}),`\n`,_jsxs(_components.p,{children:[`Each member entry is identified by `,_jsx(_components.code,{children:`email`}),` or `,_jsx(_components.code,{children:`cr_user_id`}),` (the `,_jsx(_components.code,{children:`user_id`}),` returned by `,_jsx(_components.a,{href:`/api-reference/users-list`,children:_jsx(_components.code,{children:`GET /v1/users`})}),`) — at least one is required, and `,_jsx(_components.code,{children:`cr_user_id`}),` takes precedence when both are provided. Use `,_jsx(_components.code,{children:`cr_user_id`}),` to address members who have no email; unknown IDs fail that entry with `,_jsx(_components.code,{children:`USER_NOT_FOUND`}),` in the response’s `,_jsx(_components.code,{children:`failed`}),` array.`]})]})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{EnterprisePlanBadge,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":{"openapi":"post /v1/users/seats","title":"Seats","description":"Bulk assign or unassign seats for up to 500 users. The request format depends on the type of API key used. **Organization and self-hosted instance API keys** address users by provider user ID with the `action` + `user_ids` format, where the `action` field determines the operation type. **Workspace API keys** address users by email or CodeRabbit user ID (`cr_user_id`) with the `members` format, where each entry declares its desired seat state via `seat_assigned`. Sending the `action` + `user_ids` format with a workspace API key (or the `members` format with an organization key) fails with an `INVALID_REQUEST` error.","href":"/api-reference/users-manage-seats"}}},"mdxSourceWithNoJs":null,"noJsSplices":[[155,686,")=>null;function _cr"]]},"mdxExtracts":{"tableOfContents":[{"title":"Manage Seats","slug":"manage-seats","depth":2,"children":[{"title":"Request format by API key type","slug":"request-format-by-api-key-type","depth":3,"children":[]}]}],"codeExamples":{}},"jsLinks":["/_mintlify/custom/coderabbit/c83587702ff75216/inkeep.js","/_mintlify/custom/coderabbit/b7ecafa4358af1c7/yaml-editor.js","/_mintlify/custom/coderabbit/44fd990531d7b83e/acquisition.js"],"openApiReferenceData":{"operation":{"operationId":"manage-seats","summary":"Seats","description":"Bulk assign or unassign seats for up to 500 users. The request format depends on the type of API key used. **Organization and self-hosted instance API keys** address users by provider user ID with the `action` + `user_ids` format, where the `action` field determines the operation type. **Workspace API keys** address users by email or CodeRabbit user ID (`cr_user_id`) with the `members` format, where each entry declares its desired seat state via `seat_assigned`. Sending the `action` + `user_ids` format with a workspace API key (or the `members` format with an organization key) fails with an `INVALID_REQUEST` error.","parameters":["ad34c1e5-9cb0-4325-82db-7eda25ce6dac"],"requestBody":"0300b1a6-8cf6-4267-9909-b2003ad53f9e","responses":{"200":"e8242561-ef10-43b3-b8f8-f802ee6a533e","400":"915f6597-0c60-429a-a2ec-f2eb9e9b455a","401":"70996831-ff68-4450-96b5-e2d6a1523385","403":"e5d75f72-d4d4-4054-b651-2e2e8c707b9d","410":"1b5c0460-6988-49f7-b117-69c2154b9bb9","429":"c7e7b4b9-ce3c-408c-bfdb-12bfbc9f5d2e","500":"a07e055c-4571-4874-bc7b-98b0631377b9"},"security":["f28ebc56-0960-45a3-8cd0-177c8a803a09"],"method":"post","type":"path","servers":["7e78e78e-0bf5-4102-9e15-4e0e299566e8"],"path":"/v1/users/seats","baseUrlOptions":["https://api.coderabbit.ai"],"title":"Seats","codeSamples":[],"requiredOnlyExamples":false,"requestExampleType":"generated","responseExampleType":"generated"},"dependencies":{"parameters":{"ad34c1e5-9cb0-4325-82db-7eda25ce6dac":{"name":"x-coderabbitai-api-key","description":"Your CodeRabbit API key","required":true,"example":"cr-xxxxxxxxxx","schema":{"type":"string","isRequired":true,"description":"Your CodeRabbit API key","uniqueKey":"","typeLabel":"string"},"in":"header"}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"oneOf":[{"type":"object","title":"Organization / self-hosted instance key","description":"Request to manage user seats with an organization or self-hosted instance API key. Users are addressed by provider user ID.","required":["action","user_ids"],"properties":{"action":{"type":"string","enum":["assign","unassign"],"description":"Action to perform","isRequired":true,"uniqueKey":"oneOf.0.action","typeLabel":"enum\u003cstring>"},"user_ids":{"type":"array","items":{"type":"string","uniqueKey":"oneOf.0.user_ids.items.[INDEX]","typeLabel":"string"},"description":"Array of provider user IDs","minItems":1,"maxItems":500,"isRequired":true,"uniqueKey":"oneOf.0.user_ids","typeLabel":"string[]"}},"additionalProperties":false,"uniqueKey":"oneOf.0","typeLabel":"Organization / self-hosted instance key · object"},{"type":"object","title":"Workspace key","description":"Request to manage user seats with a workspace API key. Members are addressed by email or CodeRabbit user ID, and each entry declares its desired seat state.","required":["members"],"properties":{"members":{"type":"array","description":"Array of members to update. Each member is identified by `email` or `cr_user_id` (at least one required; `cr_user_id` takes precedence when both are provided).","minItems":1,"maxItems":500,"items":{"oneOf":[{"type":"object","title":"Identified by email","description":"One member to update. Identify the member by `email` or `cr_user_id` — at least one is required, and `cr_user_id` takes precedence when both are provided.","required":["email"],"properties":{"email":{"type":"string","format":"email","description":"Email address of the member (unique per workspace). The only identifier that can enroll a member not yet known to CodeRabbit.","isRequired":true,"uniqueKey":"oneOf.1.members.items.[INDEX].oneOf.0.email","typeLabel":"string\u003cemail>"},"cr_user_id":{"type":"string","format":"uuid","description":"CodeRabbit user ID of an existing member — the `user_id` returned by `GET /v1/users` when using a workspace key. Use it to address members who have no email. Never enrolls a new member: an unknown ID fails that entry with `USER_NOT_FOUND`.","uniqueKey":"oneOf.1.members.items.[INDEX].oneOf.0.cr_user_id","typeLabel":"string\u003cuuid>"},"seat_assigned":{"type":"boolean","description":"Desired seat state: `true` assigns a seat, `false` unassigns it. Omit to leave the member's seat unchanged.","uniqueKey":"oneOf.1.members.items.[INDEX].oneOf.0.seat_assigned","typeLabel":"boolean"},"identities":{"type":"array","description":"Declarative replacement of the member's full Git provider identity set. Omit to leave identities untouched; an empty array removes all identities.","items":{"type":"object","properties":{"provider":{"type":"string","description":"Git platform provider of this identity","isRequired":true,"uniqueKey":"oneOf.1.members.items.[INDEX].oneOf.0.identities.items.[INDEX].provider","typeLabel":"string"},"user_id":{"type":"string","description":"Provider user ID","isRequired":true,"uniqueKey":"oneOf.1.members.items.[INDEX].oneOf.0.identities.items.[INDEX].user_id","typeLabel":"string"},"self_hosted_instance_url":{"type":"string","description":"Host URL of the self-hosted instance this identity belongs to. Omit for cloud identities. The URL must match a self-hosted instance registered to the workspace.","uniqueKey":"oneOf.1.members.items.[INDEX].oneOf.0.identities.items.[INDEX].self_hosted_instance_url","typeLabel":"string"},"username":{"type":"string","description":"Provider username","uniqueKey":"oneOf.1.members.items.[INDEX].oneOf.0.identities.items.[INDEX].username","typeLabel":"string"},"name":{"type":"string","description":"Display name","uniqueKey":"oneOf.1.members.items.[INDEX].oneOf.0.identities.items.[INDEX].name","typeLabel":"string"}},"required":["provider","user_id"],"additionalProperties":false,"uniqueKey":"oneOf.1.members.items.[INDEX].oneOf.0.identities.items.[INDEX]","typeLabel":"object"},"uniqueKey":"oneOf.1.members.items.[INDEX].oneOf.0.identities","typeLabel":"object[]"}},"additionalProperties":false,"uniqueKey":"oneOf.1.members.items.[INDEX].oneOf.0","typeLabel":"Identified by email · object"},{"type":"object","title":"Identified by cr_user_id","description":"One member to update. Identify the member by `email` or `cr_user_id` — at least one is required, and `cr_user_id` takes precedence when both are provided.","required":["cr_user_id"],"properties":{"cr_user_id":{"type":"string","format":"uuid","description":"CodeRabbit user ID of an existing member — the `user_id` returned by `GET /v1/users` when using a workspace key. Use it to address members who have no email. Never enrolls a new member: an unknown ID fails that entry with `USER_NOT_FOUND`.","isRequired":true,"uniqueKey":"oneOf.1.members.items.[INDEX].oneOf.1.cr_user_id","typeLabel":"string\u003cuuid>"},"email":{"type":"string","format":"email","description":"Email address of the member (unique per workspace). The only identifier that can enroll a member not yet known to CodeRabbit.","uniqueKey":"oneOf.1.members.items.[INDEX].oneOf.1.email","typeLabel":"string\u003cemail>"},"seat_assigned":{"type":"boolean","description":"Desired seat state: `true` assigns a seat, `false` unassigns it. Omit to leave the member's seat unchanged.","uniqueKey":"oneOf.1.members.items.[INDEX].oneOf.1.seat_assigned","typeLabel":"boolean"},"identities":{"type":"array","description":"Declarative replacement of the member's full Git provider identity set. Omit to leave identities untouched; an empty array removes all identities.","items":{"type":"object","properties":{"provider":{"type":"string","description":"Git platform provider of this identity","isRequired":true,"uniqueKey":"oneOf.1.members.items.[INDEX].oneOf.1.identities.items.[INDEX].provider","typeLabel":"string"},"user_id":{"type":"string","description":"Provider user ID","isRequired":true,"uniqueKey":"oneOf.1.members.items.[INDEX].oneOf.1.identities.items.[INDEX].user_id","typeLabel":"string"},"self_hosted_instance_url":{"type":"string","description":"Host URL of the self-hosted instance this identity belongs to. Omit for cloud identities. The URL must match a self-hosted instance registered to the workspace.","uniqueKey":"oneOf.1.members.items.[INDEX].oneOf.1.identities.items.[INDEX].self_hosted_instance_url","typeLabel":"string"},"username":{"type":"string","description":"Provider username","uniqueKey":"oneOf.1.members.items.[INDEX].oneOf.1.identities.items.[INDEX].username","typeLabel":"string"},"name":{"type":"string","description":"Display name","uniqueKey":"oneOf.1.members.items.[INDEX].oneOf.1.identities.items.[INDEX].name","typeLabel":"string"}},"required":["provider","user_id"],"additionalProperties":false,"uniqueKey":"oneOf.1.members.items.[INDEX].oneOf.1.identities.items.[INDEX]","typeLabel":"object"},"uniqueKey":"oneOf.1.members.items.[INDEX].oneOf.1.identities","typeLabel":"object[]"}},"additionalProperties":false,"uniqueKey":"oneOf.1.members.items.[INDEX].oneOf.1","typeLabel":"Identified by cr_user_id · object"}],"uniqueKey":"oneOf.1.members.items.[INDEX]","typeLabel":"Identified by email · object | Identified by cr_user_id · object"},"isRequired":true,"uniqueKey":"oneOf.1.members","typeLabel":"(Identified by email · object | Identified by cr_user_id · object)[]"}},"additionalProperties":false,"uniqueKey":"oneOf.1","typeLabel":"Workspace key · object"}],"uniqueKey":"","typeLabel":"Organization / self-hosted instance key · object | Workspace key · object"},"examples":{"assign":{"title":"assign","value":{"action":"assign","user_ids":["121358802","22605247"]}},"unassign":{"title":"unassign","value":{"action":"unassign","user_ids":["121358802","22605247"]}},"assignByEmail":{"title":"assignByEmail","value":{"members":[{"email":"jane@example.com","seat_assigned":true},{"cr_user_id":"3f8e2a9c-6b1d-4e5a-9c7f-2d4b8a6e1c3b","seat_assigned":true}]}},"unassignByEmail":{"title":"unassignByEmail","value":{"members":[{"email":"jane@example.com","seat_assigned":false}]}}},"exampleType":"examples"}},"exampleType":"examples"},"responses":{"e8242561-ef10-43b3-b8f8-f802ee6a533e":{"description":"Operation completed (check status field for partial failures). The `succeeded` and `failed` entries echo the identifiers used in the request: provider user IDs for organization and self-hosted instance keys; for workspace keys, whichever identifier each member supplied (`cr_user_id` when provided, otherwise `email`).","content":{"application/json":{"schema":{"type":"object","description":"Response for bulk operations with partial success model","properties":{"status":{"type":"string","enum":["success","partial_success","failure"],"description":"Operation status: 'success' if all succeeded, 'partial_success' if some succeeded, 'failure' if all failed","isRequired":true,"uniqueKey":"status","typeLabel":"enum\u003cstring>"},"succeeded":{"type":"array","items":{"type":"string","uniqueKey":"succeeded.items.[INDEX]","typeLabel":"string"},"description":"Array of user IDs that were successfully processed","isRequired":true,"uniqueKey":"succeeded","typeLabel":"string[]"},"failed":{"type":"array","items":{"type":"object","description":"Failed operation details","properties":{"user_id":{"type":"string","description":"Identifier that failed: a provider user ID, or the supplied `cr_user_id`/`email` when the request used a workspace API key","isRequired":true,"uniqueKey":"failed.items.[INDEX].user_id","typeLabel":"string"},"code":{"type":"string","description":"Error code","isRequired":true,"uniqueKey":"failed.items.[INDEX].code","typeLabel":"string"}},"required":["user_id","code"],"additionalProperties":false,"uniqueKey":"failed.items.[INDEX]","typeLabel":"object"},"description":"Array of failures with error details","isRequired":true,"uniqueKey":"failed","typeLabel":"object[]"}},"required":["status","succeeded","failed"],"additionalProperties":false,"uniqueKey":"","typeLabel":"object"},"example":{"status":"success","succeeded":["121358802","22605247"],"failed":[]},"examples":{"Example":{"title":"Example","value":{"status":"success","succeeded":["121358802","22605247"],"failed":[]}}},"exampleType":"examples"}},"exampleType":"examples"},"915f6597-0c60-429a-a2ec-f2eb9e9b455a":{"description":"Invalid request","content":{"application/json":{"schema":{"type":"object","description":"Standard API error response","properties":{"error":{"type":"object","properties":{"code":{"type":"string","description":"Error code identifier","isRequired":true,"uniqueKey":"error.code","typeLabel":"string"},"message":{"type":"string","description":"Human-readable error message","isRequired":true,"uniqueKey":"error.message","typeLabel":"string"}},"required":["code","message"],"additionalProperties":false,"isRequired":true,"uniqueKey":"error","typeLabel":"object"}},"required":["error"],"additionalProperties":false,"uniqueKey":"","typeLabel":"object"},"example":{"error":{"code":"BATCH_SIZE_EXCEEDED","message":"Maximum 500 users per request"}},"examples":{"Example":{"title":"Example","value":{"error":{"code":"BATCH_SIZE_EXCEEDED","message":"Maximum 500 users per request"}}}},"exampleType":"examples"}},"exampleType":"examples"},"70996831-ff68-4450-96b5-e2d6a1523385":{"description":"Unauthorized - Invalid or missing API key","content":{"application/json":{"schema":{"type":"object","description":"Standard API error response","properties":{"error":{"type":"object","properties":{"code":{"type":"string","description":"Error code identifier","isRequired":true,"uniqueKey":"error.code","typeLabel":"string"},"message":{"type":"string","description":"Human-readable error message","isRequired":true,"uniqueKey":"error.message","typeLabel":"string"}},"required":["code","message"],"additionalProperties":false,"isRequired":true,"uniqueKey":"error","typeLabel":"object"}},"required":["error"],"additionalProperties":false,"uniqueKey":"","typeLabel":"object"},"example":{"error":{"code":"UNAUTHORIZED","message":"Invalid or inactive API key"}},"examples":{"Example":{"title":"Example","value":{"error":{"code":"UNAUTHORIZED","message":"Invalid or inactive API key"}}}},"exampleType":"examples"}},"exampleType":"examples"},"e5d75f72-d4d4-4054-b651-2e2e8c707b9d":{"description":"Forbidden - Not an admin or missing Enterprise plan","content":{"application/json":{"schema":{"type":"object","description":"Standard API error response","properties":{"error":{"type":"object","properties":{"code":{"type":"string","description":"Error code identifier","isRequired":true,"uniqueKey":"error.code","typeLabel":"string"},"message":{"type":"string","description":"Human-readable error message","isRequired":true,"uniqueKey":"error.message","typeLabel":"string"}},"required":["code","message"],"additionalProperties":false,"isRequired":true,"uniqueKey":"error","typeLabel":"object"}},"required":["error"],"additionalProperties":false,"uniqueKey":"","typeLabel":"object"},"example":{"error":{"code":"NOT_ADMIN","message":"Only administrators can perform seat management operations"}},"examples":{"Example":{"title":"Example","value":{"error":{"code":"NOT_ADMIN","message":"Only administrators can perform seat management operations"}}}},"exampleType":"examples"}},"exampleType":"examples"},"1b5c0460-6988-49f7-b117-69c2154b9bb9":{"description":"Legacy API key - deprecated and no longer supported for user management","content":{"application/json":{"schema":{"type":"object","description":"Standard API error response","properties":{"error":{"type":"object","properties":{"code":{"type":"string","description":"Error code identifier","isRequired":true,"uniqueKey":"error.code","typeLabel":"string"},"message":{"type":"string","description":"Human-readable error message","isRequired":true,"uniqueKey":"error.message","typeLabel":"string"}},"required":["code","message"],"additionalProperties":false,"isRequired":true,"uniqueKey":"error","typeLabel":"object"}},"required":["error"],"additionalProperties":false,"uniqueKey":"","typeLabel":"object"},"example":{"error":{"code":"LEGACY_API_KEY","message":"You are using a legacy API key. We are deprecating use of legacy keys. Regenerate a new API key and retry the request."}},"examples":{"Example":{"title":"Example","value":{"error":{"code":"LEGACY_API_KEY","message":"You are using a legacy API key. We are deprecating use of legacy keys. Regenerate a new API key and retry the request."}}}},"exampleType":"examples"}},"exampleType":"examples"},"c7e7b4b9-ce3c-408c-bfdb-12bfbc9f5d2e":{"description":"Rate limit exceeded (10 requests per 60 seconds per organization)","content":{"application/json":{"schema":{"type":"object","description":"Standard API error response","properties":{"error":{"type":"object","properties":{"code":{"type":"string","description":"Error code identifier","isRequired":true,"uniqueKey":"error.code","typeLabel":"string"},"message":{"type":"string","description":"Human-readable error message","isRequired":true,"uniqueKey":"error.message","typeLabel":"string"}},"required":["code","message"],"additionalProperties":false,"isRequired":true,"uniqueKey":"error","typeLabel":"object"}},"required":["error"],"additionalProperties":false,"uniqueKey":"","typeLabel":"object"},"example":{"error":{"code":"RATE_LIMIT_EXCEEDED","message":"Rate limit exceeded. Max 10 requests per 60 seconds"}},"examples":{"Example":{"title":"Example","value":{"error":{"code":"RATE_LIMIT_EXCEEDED","message":"Rate limit exceeded. Max 10 requests per 60 seconds"}}}},"exampleType":"examples"}},"headers":{"Retry-After":{"schema":{"type":"integer"},"description":"Seconds to wait before retrying"},"X-RateLimit-Limit":{"description":"Maximum requests allowed per time window","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Always 0 when rate limited","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the rate limit resets","schema":{"type":"integer"}}},"exampleType":"examples"},"a07e055c-4571-4874-bc7b-98b0631377b9":{"description":"Internal server error","content":{"application/json":{"schema":{"type":"object","description":"Standard API error response","properties":{"error":{"type":"object","properties":{"code":{"type":"string","description":"Error code identifier","isRequired":true,"uniqueKey":"error.code","typeLabel":"string"},"message":{"type":"string","description":"Human-readable error message","isRequired":true,"uniqueKey":"error.message","typeLabel":"string"}},"required":["code","message"],"additionalProperties":false,"isRequired":true,"uniqueKey":"error","typeLabel":"object"}},"required":["error"],"additionalProperties":false,"uniqueKey":"","typeLabel":"object"},"example":{"error":{"code":"INTERNAL_ERROR","message":"Internal server error while listing users"}},"examples":{"Example":{"title":"Example","value":{"error":{"code":"INTERNAL_ERROR","message":"Internal server error while listing users"}}}},"exampleType":"examples"}},"exampleType":"examples"}},"security":{"f28ebc56-0960-45a3-8cd0-177c8a803a09":{"ApiKeyAuth":{"type":"apiKey","in":"header","name":"x-coderabbitai-api-key","description":"API key for authentication. You can create an API key from the CodeRabbit dashboard.","scopes":[],"schemeName":"ApiKeyAuth"}}},"servers":{"7e78e78e-0bf5-4102-9e15-4e0e299566e8":{"url":"https://api.coderabbit.ai"}},"processedSecurityOptions":[{"schemes":[{"scheme":{"type":"apiKey","in":"header","name":"x-coderabbitai-api-key","description":"API key for authentication. You can create an API key from the CodeRabbit dashboard.","scopes":[],"schemeName":"ApiKeyAuth"},"schema":{"title":"x-coderabbitai-api-key","type":"string","description":"API key for authentication. You can create an API key from the CodeRabbit dashboard.","isRequired":true,"typeLabel":"string","deprecated":false},"schemeName":"ApiKeyAuth","name":"x-coderabbitai-api-key"}],"title":"ApiKeyAuth"}]},"originalFileLocation":"openapi.json"},"subdomain":"coderabbit","siteName":"CodeRabbit","title":"Seats - CodeRabbit","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-08-07T16:24:32.162Z","originalFileLocation":"api-reference/users-manage-seats.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=\"Bulk assign or unassign seats for up to 500 users. The request format depends on the type of API key used. Organization and self-hosted instance API keys address users by provider user ID with the action + user_ids format, where the action field determines the operation type. Workspace API keys address users by email or CodeRabbit user ID (cr_user_id) with the members format, where each entry declares its desired seat state via seat_assigned. Sending the action + user_ids format with a workspace API key (or the members format with an organization key) fails with an INVALID_REQUEST error.\">\u003cmeta data-mint-head name=\"application-name\" content=\"CodeRabbit\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/coderabbit/d4muCEkFHyXyjg4k/_generated/favicon/android-chrome-192x192.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"apple-touch-icon\" type=\"image/png\" sizes=\"180x180\" href=\"/mintlify-assets/_mintlify/favicons/coderabbit/d4muCEkFHyXyjg4k/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/coderabbit/d4muCEkFHyXyjg4k/_generated/favicon/favicon-16x16.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/coderabbit/d4muCEkFHyXyjg4k/_generated/favicon/favicon-32x32.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/coderabbit/d4muCEkFHyXyjg4k/_generated/favicon/favicon.ico\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/coderabbit/d4muCEkFHyXyjg4k/_generated/favicon-dark/android-chrome-192x192.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/coderabbit/d4muCEkFHyXyjg4k/_generated/favicon-dark/favicon-16x16.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/coderabbit/d4muCEkFHyXyjg4k/_generated/favicon-dark/favicon-32x32.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/coderabbit/d4muCEkFHyXyjg4k/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Seats - CodeRabbit\">\u003cmeta data-mint-head property=\"og:description\" content=\"Bulk assign or unassign seats for up to 500 users. The request format depends on the type of API key used. Organization and self-hosted instance API keys address users by provider user ID with the action + user_ids format, where the action field determines the operation type. Workspace API keys address users by email or CodeRabbit user ID (cr_user_id) with the members format, where each entry declares its desired seat state via seat_assigned. Sending the action + user_ids format with a workspace API key (or the members format with an organization key) fails with an INVALID_REQUEST error.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"CodeRabbit Documentation\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.coderabbit.ai/api-reference/users-manage-seats\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://coderabbit.mintlify.app/_mintlify/api/og/v2?division=User+Management\u0026amp;title=Seats\u0026amp;description=Bulk+assign+or+unassign+seats+for+up+to+500+users.+The+request+format+depends+on+the+type+of+API+key+used.+**Organization+and+self-hosted+instance+API+keys**+ad\u0026amp;theme=eb8011b6d836a1ac186d66ac\u0026amp;signature=1d97ad7177afe04349424678a59845238e0aa786ad51649a2d3b56f5717c63b5\">\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=\"Seats - CodeRabbit\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Bulk assign or unassign seats for up to 500 users. The request format depends on the type of API key used. Organization and self-hosted instance API keys address users by provider user ID with the action + user_ids format, where the action field determines the operation type. Workspace API keys address users by email or CodeRabbit user ID (cr_user_id) with the members format, where each entry declares its desired seat state via seat_assigned. Sending the action + user_ids format with a workspace API key (or the members format with an organization key) fails with an INVALID_REQUEST error.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://coderabbit.mintlify.app/_mintlify/api/og/v2?division=User+Management\u0026amp;title=Seats\u0026amp;description=Bulk+assign+or+unassign+seats+for+up+to+500+users.+The+request+format+depends+on+the+type+of+API+key+used.+**Organization+and+self-hosted+instance+API+keys**+ad\u0026amp;theme=eb8011b6d836a1ac186d66ac\u0026amp;signature=1d97ad7177afe04349424678a59845238e0aa786ad51649a2d3b56f5717c63b5\">\u003cmeta data-mint-head name=\"twitter:image:width\" content=\"1200\">\u003cmeta data-mint-head name=\"twitter:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"msapplication-config\" content=\"/mintlify-assets/_mintlify/favicons/coderabbit/d4muCEkFHyXyjg4k/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"CodeRabbit\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#FF570A\">\u003cmeta data-mint-head name=\"og:locale\" content=\"en_US\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.coderabbit.ai/api-reference/users-manage-seats\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/api-reference/users-manage-seats.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://docs.coderabbit.ai/#organization\",\"name\":\"CodeRabbit\",\"url\":\"https://docs.coderabbit.ai\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/coderabbit/qAZa_d7FrwPO_w-O/coderabbit-logo-light.svg?fit=max\u0026auto=format\u0026n=qAZa_d7FrwPO_w-O\u0026q=85\u0026s=d2bf9e91be0e760ec9cb468676fa6ab6\"}},{\"@type\":\"WebSite\",\"@id\":\"https://docs.coderabbit.ai#website\",\"name\":\"CodeRabbit\",\"url\":\"https://docs.coderabbit.ai\",\"publisher\":{\"@id\":\"https://docs.coderabbit.ai/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.coderabbit.ai/api-reference/users-manage-seats#webpage\",\"url\":\"https://docs.coderabbit.ai/api-reference/users-manage-seats\",\"name\":\"Seats\",\"description\":\"Bulk assign or unassign seats for up to 500 users. The request format depends on the type of API key used. Organization and self-hosted instance API keys address users by provider user ID with the action + user_ids format, where the action field determines the operation type. Workspace API keys address users by email or CodeRabbit user ID (cr_user_id) with the members format, where each entry declares its desired seat state via seat_assigned. Sending the action + user_ids format with a workspace API key (or the members format with an organization key) fails with an INVALID_REQUEST error.\",\"dateModified\":\"2026-08-07T16:24:32.162Z\",\"isPartOf\":{\"@id\":\"https://docs.coderabbit.ai#website\"},\"breadcrumb\":{\"@id\":\"https://docs.coderabbit.ai/api-reference/users-manage-seats#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.coderabbit.ai/api-reference/users-manage-seats#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"CodeRabbit API\",\"item\":\"https://docs.coderabbit.ai/api/index\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"API Reference\",\"item\":\"https://docs.coderabbit.ai/api-reference/metrics-data-api\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"User Management\",\"item\":\"https://docs.coderabbit.ai/api-reference/users-list\"},{\"@type\":\"ListItem\",\"position\":4,\"name\":\"Seats\",\"item\":\"https://docs.coderabbit.ai/api-reference/users-manage-seats\"}]},{\"@type\":[\"TechArticle\",\"APIReference\"],\"@id\":\"https://docs.coderabbit.ai/api-reference/users-manage-seats#apireference\",\"headline\":\"Seats\",\"name\":\"Seats\",\"description\":\"Bulk assign or unassign seats for up to 500 users. The request format depends on the type of API key used. Organization and self-hosted instance API keys address users by provider user ID with the action + user_ids format, where the action field determines the operation type. Workspace API keys address users by email or CodeRabbit user ID (cr_user_id) with the members format, where each entry declares its desired seat state via seat_assigned. Sending the action + user_ids format with a workspace API key (or the members format with an organization key) fails with an INVALID_REQUEST error.\",\"url\":\"https://docs.coderabbit.ai/api-reference/users-manage-seats\",\"mainEntityOfPage\":{\"@id\":\"https://docs.coderabbit.ai/api-reference/users-manage-seats#webpage\"},\"dateModified\":\"2026-08-07T16:24:32.162Z\",\"publisher\":{\"@id\":\"https://docs.coderabbit.ai/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.coderabbit.ai#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"CodeRabbit\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"CodeRabbit","nav":{"global":{"anchors":[{"anchor":"Quickstart","icon":"rocket","hidden":false,"href":"/getting-started/quickstart"},{"anchor":"Blog","icon":"pen-line","hidden":true,"href":"https://coderabbit.ai/blog"},{"anchor":"Changelog","icon":"history","href":"/changelog"},{"anchor":"Support","icon":"life-buoy","href":"/support"},{"anchor":"Discord","icon":"discord","href":"https://discord.gg/coderabbit"}]},"tabs":[{"tab":"CodeRabbit Platform","icon":"layers","pages":[{"title":"CodeRabbit Platform","href":""}]},{"tab":"CLI and IDE tools","icon":"square-terminal","pages":[{"title":"CLI and IDE tools","href":"/cli"}]},{"tab":"Coding Agent","icon":"square-code","pages":[{"title":"Coding Agent","href":"/code"}]},{"tab":"Agent for Slack and Discord","icon":"bot","pages":[{"title":"Agent for Slack and Discord","href":"/agent"}]},{"tab":"Management","icon":"wrench","pages":[{"title":"Management overview","sidebarTitle":"Overview","mode":"wide","href":"/management"},{"group":"Repository Configuration","icon":"folder-git-2","pages":[{"title":"Overview","href":"/platforms/overview"},{"group":"Supported Git platforms","expanded":false,"pages":[{"title":"GitHub","icon":"github","href":"/platforms/github-com"},{"title":"GitHub Enterprise Server","icon":"github","href":"/platforms/github-enterprise-server"},{"title":"GitLab","icon":"gitlab","href":"/platforms/gitlab-com"},{"title":"Self-managed GitLab","sidebarTitle":"GitLab self-managed","icon":"gitlab","href":"/platforms/self-hosted-gitlab"},{"title":"Azure DevOps","icon":"microsoft","href":"/platforms/azure-devops"},{"title":"Bitbucket Cloud","icon":"bitbucket","href":"/platforms/bitbucket-cloud"},{"title":"Bitbucket Data Center","icon":"bitbucket","href":"/platforms/bitbucket-data-center"}]}]},{"group":"Subscription \u0026 billing","icon":"credit-card","pages":[{"title":"Plans and pricing","sidebarTitle":"Plans and pricing","href":"/management/plans"},{"title":"Review rate limits","sidebarTitle":"Rate limits","href":"/management/rate-limits"},{"title":"Billing and changing plans","sidebarTitle":"Billing and changing plans","href":"/management/billing"},{"title":"Enterprise seat true-up","sidebarTitle":"Enterprise seat true-up","href":"/management/enterprise-seat-true-up"},{"title":"Usage-based reviews","sidebarTitle":"Usage-based reviews","href":"/management/usage-based-addon"},{"title":"Subscription management","sidebarTitle":"Subscription management","href":"/management/subscription-management"}]},{"group":"Connections","icon":"plug","pages":[{"title":"Connections","sidebarTitle":"Connections","href":"/connections/index"},{"title":"Scopes overview","sidebarTitle":"Scopes","href":"/connections/scopes"},{"title":"Review scopes","sidebarTitle":"Review scopes","href":"/connections/scopes-review"},{"title":"Connect MCP servers","sidebarTitle":"MCP servers","href":"/connections/mcp-servers"},{"group":"Issue trackers","root":{"title":"Issue trackers","href":"/connections/issue-trackers"},"pages":[{"title":"Jira Integration","icon":"jira","href":"/connections/jira"},{"title":"Linear Integration","icon":"linear","href":"/connections/linear"}]},{"group":"CI/CD tools","pages":[{"title":"CircleCI integration","sidebarTitle":"CircleCI","href":"/connections/circleci"},{"title":"Jenkins integration","sidebarTitle":"Jenkins","href":"/connections/jenkins"}]}]},{"group":"Dashboard","icon":"layout-dashboard","pages":[{"title":"Overview","href":"/guides/dashboard"},{"title":"Git platform review metrics","href":"/guides/dashboard-metrics"},{"title":"IDE/CLI review metrics","href":"/guides/ide-cli-dashboard-metrics"},{"title":"Review Usage dashboard","sidebarTitle":"Review Usage","href":"/management/review-usage-dashboard"},{"title":"Data Export","href":"/guides/data-export"}]},{"group":"Reports","icon":"text-search","pages":[{"title":"Reports","href":"/management/reports"},{"title":"Schedule reports","href":"/guides/scheduled-reports"},{"title":"Legacy Report Testing","href":"/guides/ondemand-reports"},{"title":"Customize CodeRabbit pull request reports with prompts","sidebarTitle":"Custom reports","href":"/guides/custom-reports"}]},{"group":"Organization administration","icon":"user-cog","pages":[{"title":"Seat assignment","href":"/management/seat-assignment"},{"title":"Role-based access","href":"/management/roles"},{"title":"Custom roles and permissions","href":"/management/custom-roles"},{"title":"Set up Multi-Org","sidebarTitle":"Multiple organizations","href":"/management/multi-org"},{"title":"Add organizations","href":"/management/adding-organizations"},{"title":"Set permissions","href":"/management/upgrading-permissions"},{"title":"Audit Logs","href":"/management/audit-logs"}]},{"group":"Enterprise SSO","icon":"key","pages":[{"title":"Sso","href":"/management/sso"},{"title":"Okta SAML SSO setup","sidebarTitle":"Okta SAML","href":"/management/sso/okta-saml"},{"title":"Google Workspace self-serve SSO setup","sidebarTitle":"Google Workspace","href":"/management/sso/google-workspace-saml"},{"title":"Microsoft Entra ID SSO setup","sidebarTitle":"Microsoft Entra ID","href":"/management/sso/microsoft-entra-saml"},{"title":"SAML 2.0 provider SSO setup","sidebarTitle":"Other SAML 2.0 providers","href":"/management/sso/custom-saml"},{"title":"Prepare self-hosted Git providers for SSO","sidebarTitle":"Self-hosted Git providers","href":"/management/sso/self-hosted-git-providers"},{"title":"Azure DevOps Server setup","sidebarTitle":"Azure DevOps Server","href":"/management/sso/azure-devops-server"},{"title":"SCIM directory sync","sidebarTitle":"SCIM directory sync","href":"/management/sso/scim"},{"title":"SSO user management API","sidebarTitle":"User management API","href":"/management/sso/user-management-api"}]},{"group":"Self-hosted CodeRabbit","icon":"server","pages":[{"title":"Self-hosted CodeRabbit","sidebarTitle":"Overview","href":"/self-hosted/overview"},{"group":"Reverse Tunnel","pages":[{"title":"CodeRabbit Reverse Tunnel","sidebarTitle":"Reverse Tunnel overview","href":"/self-hosted/coderabbit-reverse-tunnel"},{"title":"Reverse Tunnel connector configuration","sidebarTitle":"Connector configuration","href":"/self-hosted/reverse-tunnel-connector-configuration"}]}]},{"group":"CodeRabbit API","icon":"braces","pages":[{"title":"CodeRabbit API","sidebarTitle":"Overview","href":"/api/index"},{"title":"Workspace API tokens","href":"/api/workspace-api-tokens"},{"group":"API Reference","expanded":false,"pages":[{"group":"Metrics","pages":[{"openapi":"get /v1/metrics/reviews","title":"Metrics Data","href":"/api-reference/metrics-data-api"},{"openapi":"get /v1/metrics/review-comments","title":"Review comment metrics","href":"/api-reference/review-comment-metrics"},{"openapi":"get /v1/metrics/mcp","title":"MCP server usage","href":"/api-reference/mcp-metrics"}]},{"group":"Learnings","pages":[{"openapi":"get /v1/learnings","title":"Learnings","href":"/api-reference/learnings-list"},{"openapi":"patch /v1/learnings/{learning_id}","title":"Update Learning","href":"/api-reference/learnings-update"},{"openapi":"delete /v1/learnings/{learning_id}","title":"Delete Learning","href":"/api-reference/learnings-delete"}]},{"group":"Security","pages":[{"openapi":"get /v1/security/scans/code","title":"Deep Scan code findings","href":"/api-reference/security-scans-code-list"}]},{"group":"Organizations","pages":[{"title":"List organizations","openapi":"get /v1/organizations","href":"/api-reference/organizations-list"},{"title":"List organization repositories","openapi":"get /v1/organizations/{organization_id}/repositories","href":"/api-reference/organization-repositories-list"}]},{"group":"User Management","pages":[{"openapi":"get /v1/users","title":"Users","description":"List all users in your organization with optional filtering by seat assignment and role status. Supports cursor-based pagination.","href":"/api-reference/users-list"},{"openapi":"post /v1/users/seats","title":"Seats","href":"/api-reference/users-manage-seats"},{"openapi":"post /v1/users/seats/assignment","title":"Seat Assignment Mode","description":"Update the seat assignment mode for the organization. Only accessible by fully self-hosted organizations with enterprise plans.","href":"/api-reference/users-seat-assignment-mode"}]},{"group":"Roles","pages":[{"openapi":"get /v1/roles","title":"List Roles","href":"/api-reference/roles-list"},{"openapi":"post /v1/roles","title":"Create Role","href":"/api-reference/roles-create"},{"openapi":"get /v1/roles/permissions","title":"Role permissions","href":"/api-reference/roles-permissions"},{"openapi":"get /v1/roles/{roleId}","title":"Get Role","href":"/api-reference/roles-get"},{"openapi":"patch /v1/roles/{roleId}","title":"Update Role","href":"/api-reference/roles-update"},{"openapi":"delete /v1/roles/{roleId}","title":"Delete Role","href":"/api-reference/roles-delete"},{"openapi":"post /v1/users/roles","title":"Assign roles","href":"/api-reference/users-change-roles"}]},{"group":"Audit Logs","pages":[{"openapi":"get /v1/audit-logs","title":"Audit Logs","href":"/api-reference/audit-logs"}]},{"group":"Legacy APIs","pages":[{"openapi":"post /api/v1/report.generate","title":"","href":"/api-reference/report-generate"}]}]}]},{"title":"Caching","href":"/reference/caching"},{"title":"Early Access Program","href":"/early-access"}]}]},"title":"Seats - CodeRabbit","buildId":"dpl_DFJrtvUi8HS5F9nkooKuDJsuD5BM","deploymentId":"dpl_DFJrtvUi8HS5F9nkooKuDJsuD5BM","dynamics":["10e4515597","c2aa737661","2b790eda92","b0f84f53ff","a9bb46feb3"],"chunks":["BannerMarkdown-BVNUlwBc.js","dist-aeztFa9U.js","lib--scc4DXi.js","lib-B8HbPgcC.js","clsx-rL8ZCCw4.js","html-void-elements-mCSPHezU.js","katex-YMM-FMeD.js","marked.esm-CZWythHk.js","OpenApiReferenceProvider-rfhihCWU.js","utils-BmH1XFxk.js","cloneDeep-izs3Hzxb.js","_Uint8Array-BVIqJ90l.js","isObjectLike-C8vmzPEN.js","isArray-Dcu1dQ5t.js","utils-BcNsxPKB.js","toString-BX-iyh8G.js","isSymbol-CSH9U2Gm.js","addUniqueKeysToSchema-BAES3tkd.js","snippetPresets-DCMQBKLP.js","style-to-object-BY3JEAdk.js","v4-DIgz8zy6.js","ApiExamples-D6l_bzE9.js","isEqual-BfaiBbcl.js","usePlaygroundInputsStore-BOktbnNh.js","shallow-BCs8SgM7.js","getApiPlaygroundDisplay-DEmW5bJB.js","CodeSnippet-CpZOpB9C.js","CodeSnippets-BOBDqibl.js","Page-D5fEM6aW.js","getPastedJson-DH2JBvmr.js","icon-BBJH-kKh.js","MethodPill-D2Sd5NLC.js","DuplicateIcon-CGgfL2qN.js","createIcon-BKudBBzi.js","DynamicMarkdown-85clUA0i.js","SectionHeading-D0JiMgDx.js","axios-vUo_bRtp.js","Markdown-Cfiy0xZO.js","AssistantPageLink-BywkCr5C.js"]}