diff --git a/ui/litellm-dashboard/src/components/common_components/AccessGroupSelector.tsx b/ui/litellm-dashboard/src/components/common_components/AccessGroupSelector.tsx
new file mode 100644
index 00000000000..392587d910a
--- /dev/null
+++ b/ui/litellm-dashboard/src/components/common_components/AccessGroupSelector.tsx
@@ -0,0 +1,112 @@
+import React from "react";
+import { Select, Skeleton } from "antd";
+import { TeamOutlined } from "@ant-design/icons";
+import { Text } from "@tremor/react";
+import {
+ useAccessGroups,
+ AccessGroupResponse,
+} from "@/app/(dashboard)/hooks/accessGroups/useAccessGroups";
+
+export interface AccessGroupSelectorProps {
+ value?: string[];
+ onChange?: (value: string[]) => void;
+ placeholder?: string;
+ disabled?: boolean;
+ style?: React.CSSProperties;
+ className?: string;
+ showLabel?: boolean;
+ labelText?: string;
+ /** Allow clearing the selection */
+ allowClear?: boolean;
+}
+
+/**
+ * Reusable multi-select selector for access groups.
+ *
+ * - Displays the **access_group_name** in the dropdown.
+ * - Returns an array of **access_group_id** values.
+ * - Always multi-select since users can assign multiple access groups.
+ * - Integrates with Ant Design `
` out of the box via `value` / `onChange`.
+ */
+const AccessGroupSelector: React.FC = ({
+ value,
+ onChange,
+ placeholder = "Select access groups",
+ disabled = false,
+ style,
+ className,
+ showLabel = false,
+ labelText = "Access Group",
+ allowClear = true,
+}) => {
+ const { data: accessGroups, isLoading, isError } = useAccessGroups();
+
+ // ── Loading skeleton ─────────────────────────────────────────────────────
+ if (isLoading) {
+ return (
+
+ {showLabel && (
+
+ {labelText}
+
+ )}
+
+
+ );
+ }
+
+ // ── Build options ────────────────────────────────────────────────────────
+ const options = (accessGroups ?? []).map((group: AccessGroupResponse) => ({
+ label: (
+
+ {group.access_group_name}{" "}
+ ({group.access_group_id})
+
+ ),
+ value: group.access_group_id,
+ selectedLabel: group.access_group_name,
+ searchText: `${group.access_group_name} ${group.access_group_id}`,
+ }));
+
+ // ── Render ───────────────────────────────────────────────────────────────
+ return (
+
+ {showLabel && (
+
+ {labelText}
+
+ )}
+
+ );
+};
+
+export default AccessGroupSelector;
diff --git a/ui/litellm-dashboard/src/components/organisms/create_key_button.tsx b/ui/litellm-dashboard/src/components/organisms/create_key_button.tsx
index abadbe10590..7937ebef666 100644
--- a/ui/litellm-dashboard/src/components/organisms/create_key_button.tsx
+++ b/ui/litellm-dashboard/src/components/organisms/create_key_button.tsx
@@ -20,6 +20,7 @@ import PassThroughRoutesSelector from "../common_components/PassThroughRoutesSel
import PremiumLoggingSettings from "../common_components/PremiumLoggingSettings";
import RateLimitTypeFormItem from "../common_components/RateLimitTypeFormItem";
import RouterSettingsAccordion, { RouterSettingsAccordionValue } from "../common_components/RouterSettingsAccordion";
+import AccessGroupSelector from "../common_components/AccessGroupSelector";
import TeamDropdown from "../common_components/team_dropdown";
import { CreateUserButton } from "../CreateUserButton";
import { getModelDisplayName } from "../key_team_helpers/fetch_available_models_team_key";
@@ -998,6 +999,23 @@ const CreateKey: React.FC = ({ team, teams, data, addKey }) => {
options={promptsList.map((name) => ({ value: name, label: name }))}
/>
+
+ Access Groups{" "}
+
+
+
+
+ }
+ name="access_group_ids"
+ className="mt-4"
+ help="Select access groups to assign to this key"
+ >
+
+