---
title: "Update End User"
method: POST
path: "/customer/update"
tags: ["Customer Management"]
---

# Update End User

`POST /customer/update`

Example curl 

Parameters:
- user_id: str
- alias: Optional[str] = None  # human-friendly alias
- blocked: bool = False  # allow/disallow requests for this end-user
- max_budget: Optional[float] = None
- budget_id: Optional[str] = None  # give either a budget_id or max_budget
- allowed_model_region: Optional[AllowedModelRegion] = (
    None  # require all user requests to use models in this specific region
)
- default_model: Optional[str] = (
    None  # if no equivalent model in allowed region - default all requests to this model
)
- object_permission: Optional[LiteLLM_ObjectPermissionBase] - Customer-specific object permissions to control access to resources.
    Supported fields:
    * mcp_servers: List[str] - List of allowed MCP server IDs
    * mcp_access_groups: List[str] - List of MCP access group names
    * mcp_tool_permissions: Dict[str, List[str]] - Map of server ID to allowed tool names
    * vector_stores: List[str] - List of allowed vector store IDs
    * agents: List[str] - List of allowed agent IDs
    * agent_access_groups: List[str] - List of agent access group names
    Example: {"mcp_servers": ["server_1"], "vector_stores": ["vector_store_1"]}
    IF null or {} then no object-level restrictions apply.

Example curl:
```
curl --location 'http://0.0.0.0:4000/customer/update'     --header 'Authorization: Bearer sk-1234'     --header 'Content-Type: application/json'     --data '{
    "user_id": "test-litellm-user-4",
    "budget_id": "paid_tier"
}'

# Updating object permissions
curl -L -X POST 'http://localhost:4000/customer/update'     --header 'Authorization: Bearer sk-1234'     --header 'Content-Type: application/json'     --data '{
    "user_id": "user_1",
    "object_permission": {
      "mcp_servers": ["server_3"],
      "vector_stores": ["vector_store_2", "vector_store_3"]
    }
  }'

See below for all params
```

## Request body

- UpdateCustomerRequest — Update a Customer, use this to update customer budgets etc
  - `user_id` string, required
  - `alias` string, nullable
  - `blocked` boolean
  - `max_budget` number, nullable
  - `budget_id` string, nullable
  - `allowed_model_region` 'eu' | 'us', nullable
  - `default_model` string, nullable
  - `object_permission` LiteLLMObjectPermissionBase
    - `mcp_servers` string[], nullable
    - `mcp_access_groups` string[], nullable
    - `mcp_tool_permissions` object, nullable
    - `mcp_toolsets` string[], nullable
    - `blocked_tools` string[], nullable
    - `vector_stores` string[], nullable
    - `agents` string[], nullable
    - `agent_access_groups` string[], nullable
    - `models` string[], nullable
    - `search_tools` string[], nullable
    - `mcp_tool_search_enabled` boolean, nullable

## Response `200`

Successful Response

- CustomerResponse — Customer object returned by the /customer read+write endpoints. Nests the full budget response model so server-managed budget fields (budget_reset_at, created_at) survive response_model filtering, rather than the narrow write-allowlist shape LiteLLM_EndUserTable carries for internal use.
  - `user_id` string, required
  - `blocked` boolean, required
  - `alias` string, nullable
  - `spend` number
  - `allowed_model_region` 'eu' | 'us', nullable
  - `default_model` string, nullable
  - `budget_id` string, nullable
  - `litellm_budget_table` LiteLLMBudgetTableFull — LiteLLM_BudgetTable + server-managed fields returned on API responses.
    - `budget_id` string, nullable
    - `soft_budget` number, nullable
    - `max_budget` number, nullable
    - `max_parallel_requests` integer, nullable
    - `tpm_limit` integer, nullable
    - `rpm_limit` integer, nullable
    - `model_max_budget` object, nullable
    - `budget_duration` string, nullable
    - `allowed_models` string[], nullable
    - `budget_reset_at` string, date-time, nullable
    - `created_at` string, date-time, required
  - `object_permission_id` string, nullable
  - `object_permission` LiteLLMObjectPermissionTable — Represents a LiteLLM_ObjectPermissionTable record
    - `object_permission_id` string, required
    - `mcp_servers` string[], nullable
    - `mcp_access_groups` string[], nullable
    - `mcp_tool_permissions` object, nullable
    - `vector_stores` string[], nullable
    - `agents` string[], nullable
    - `agent_access_groups` string[], nullable
    - `models` string[], nullable
    - `mcp_toolsets` string[], nullable
    - `blocked_tools` string[], nullable
    - `search_tools` string[], nullable
    - `mcp_tool_search_enabled` boolean, nullable

## Other responses

- `422` — Validation Error

## Changes

- **2026-09-18** `082b5fabd909` — 1 breaking, 13 info
  - the response's body type changed from no type to `object` for status `200`
  - added the new optional request property `object_permission/anyOf[subschema #1: LiteLLM_ObjectPermissionBase]/mcp_tool_search_enabled`
  - added the optional property `alias` to the response with the `200` status
  - added the optional property `allowed_model_region` to the response with the `200` status
  - …10 more

[Change history](https://skmtc.dev/flock/apis/litellm-api/changes/customer/update/post.md)

---

[API](https://skmtc.dev/flock/apis/litellm-api.md) · [All operations](https://skmtc.dev/flock/apis/litellm-api/llms.txt) · [OpenAPI document](https://skmtc.dev/flock/apis/litellm-api/revisions/b694deb1e459?raw)
