---
title: "New Project"
method: POST
path: "/project/new"
tags: ["project management"]
---

# New Project

`POST /project/new`

Create a new project. Projects sit between teams and keys in the hierarchy.

Only admins or team admins can create projects.

# Parameters

- project_alias: *Optional[str]* - The name of the project.
- description: *Optional[str]* - Description of the project's purpose and use case.
- team_id: *str* - The team id that this project belongs to. Required.
- models: *List* - The models the project has access to.
- budget_id: *Optional[str]* - The id for a budget (tpm/rpm/max budget) for the project.
### IF NO BUDGET ID - CREATE ONE WITH THESE PARAMS ###
- max_budget: *Optional[float]* - Max budget for project
- tpm_limit: *Optional[int]* - Max tpm limit for project
- rpm_limit: *Optional[int]* - Max rpm limit for project
- max_parallel_requests: *Optional[int]* - Max parallel requests for project
- soft_budget: *Optional[float]* - Get a slack alert when this soft budget is reached. Don't block requests.
- model_max_budget: *Optional[dict]* - Max budget for a specific model. Example: {"gpt-4": 100.0, "gpt-3.5-turbo": 50.0}
- model_rpm_limit: *Optional[dict]* - RPM limits per model. Example: {"gpt-4": 1000, "gpt-3.5-turbo": 5000}
- model_tpm_limit: *Optional[dict]* - TPM limits per model. Example: {"gpt-4": 50000, "gpt-3.5-turbo": 100000}
- budget_duration: *Optional[str]* - Frequency of reseting project budget
- metadata: *Optional[dict]* - Metadata for project, store information for project. Example metadata - {"use_case_id": "SNOW-12345", "responsible_ai_id": "RAI-67890"}
- tags: *Optional[list]* - Tags for the project. Example: ["production", "api"]
- blocked: *bool* - Flag indicating if the project is blocked or not - will stop all calls from keys with this project_id.
- object_permission: Optional[LiteLLM_ObjectPermissionBase] - project-specific object permission. Example - {"vector_stores": ["vector_store_1", "vector_store_2"]}. IF null or {} then no object permission.

Example 1: Create new project **without** a budget_id, with model-specific limits

```bash
curl --location 'http://0.0.0.0:4000/project/new' \
--header 'Authorization: Bearer sk-1234' \
--header 'Content-Type: application/json' \
--data '{
    "project_alias": "flight-search-assistant",
    "description": "AI-powered flight search and booking assistant",
    "team_id": "team-123",
    "models": ["gpt-4", "gpt-3.5-turbo"],
    "max_budget": 100,
    "model_rpm_limit": {
        "gpt-4": 1000,
        "gpt-3.5-turbo": 5000
    },
    "model_tpm_limit": {
        "gpt-4": 50000,
        "gpt-3.5-turbo": 100000
    },
    "metadata": {
        "use_case_id": "SNOW-12345",
        "responsible_ai_id": "RAI-67890"
    }
}'
```

Example 2: Create new project **with** a budget_id

```bash
curl --location 'http://0.0.0.0:4000/project/new' \
--header 'Authorization: Bearer sk-1234' \
--header 'Content-Type: application/json' \
--data '{
    "project_alias": "hotel-recommendations",
    "description": "Personalized hotel recommendation engine",
    "team_id": "team-123",
    "models": ["claude-3-sonnet"],
    "budget_id": "428eeaa8-f3ac-4e85-a8fb-7dc8d7aa8689",
    "metadata": {
        "use_case_id": "SNOW-54321"
    }
}'
```

## Request body

- NewProjectRequest — Request model for POST /project/new
  - `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
  - `project_id` string, nullable
  - `project_alias` string, nullable
  - `description` string, nullable
  - `team_id` string, required
  - `metadata` object, nullable
  - `tags` string[], nullable
  - `models` string[]
  - `model_rpm_limit` object, nullable
  - `model_tpm_limit` object, nullable
  - `blocked` boolean
  - `object_permission` LiteLLMObjectPermissionBase
    - `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

## Response `200`

Successful Response

- NewProjectResponse — Response model for POST /project/new
  - `project_id` string, required
  - `project_alias` string, nullable
  - `description` string, nullable
  - `team_id` string, nullable
  - `budget_id` string, nullable
  - `metadata` object, nullable
  - `models` string[]
  - `spend` number
  - `model_spend` object, nullable
  - `model_rpm_limit` object, nullable
  - `model_tpm_limit` object, nullable
  - `blocked` boolean
  - `object_permission_id` string, nullable
  - `created_by` string, required
  - `updated_by` string, required
  - `created_at` string, date-time, required
  - `updated_at` string, date-time, required
  - `litellm_budget_table` LiteLLMBudgetTable — Represents user-controllable params for a LiteLLM_BudgetTable record
    - `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
  - `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

## Other responses

- `422` — Validation Error

---

[API](https://skmtc.net/sea-lion/apis/litellm-api.md) · [All operations](https://skmtc.net/sea-lion/apis/litellm-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/sea-lion/litellm-api/revisions/79928a3d37d3/schema)
