# Projects

Projects implement resource allocation policies and create segregation between different initiatives. It can represent a team, an individual, or an initiative that shares resources or has a specific resources budget (quota). See [Projects](https://run-ai-docs.nvidia.com/self-hosted/2.25/platform-management/aiinitiatives/organization/projects) for more information.

## Get projects

> List projects

```json
{"openapi":"3.0.3","info":{"title":"NVIDIA Run:ai","version":"2.25"},"tags":[{"name":"Projects","description":"Projects implement resource allocation policies and create segregation between \ndifferent initiatives. It can represent a team, an individual, or an initiative that \nshares resources or has a specific resources budget (quota). \nSee [Projects](https://run-ai-docs.nvidia.com/self-hosted/2.25/platform-management/aiinitiatives/organization/projects) \nfor more information.\n"}],"servers":[{"url":"https://app.run.ai"}],"security":[{"bearerAuth":[]}],"components":{"securitySchemes":{"bearerAuth":{"type":"http","scheme":"bearer","bearerFormat":"JWT","description":"Bearer authentication"}},"parameters":{"ProjectsFilterBy":{"name":"filterBy","in":"query","required":false,"description":"Filter results by a parameter. Use the format field-name operator value. Operators are == Equals, != Not equals, <= Less than or equal, >= Greater than or equal, =@ contains, !@ Does not contains, =^ Starts with and =$ Ends with. Dates are in ISO 8601 timestamp format and available for operators ==, !=, <= and >=.","schema":{"type":"array","maxItems":10,"items":{"type":"string","pattern":"^(name|clusterId|departmentId|parentId|parentName|phase|totalGpuQuota|gpuAllocated|createdAt|avgGpuAllocation24h|avgGpuUtilization24h|avgGpuMemoryUtilization24h|avgGpuAllocation7d|avgGpuUtilization7d|avgGpuMemoryUtilization7d|avgGpuAllocation30d|avgGpuUtilization30d|avgGpuMemoryUtilization30d)(==|!=|<=|>=|=@|!@|=\\^|=\\$).+$"}},"explode":false},"ProjectsSortBy":{"name":"sortBy","in":"query","required":false,"description":"Sort results by a parameters.","schema":{"$ref":"#/components/schemas/ProjectFilterSortFields"}},"SortOrder":{"name":"sortOrder","in":"query","required":false,"description":"Sort results in descending or ascending order.","schema":{"type":"string","enum":["asc","desc"],"default":"asc"}},"Offset":{"name":"offset","in":"query","required":false,"description":"The offset of the first item returned in the collection.","schema":{"type":"integer","format":"int32"}},"Limit":{"name":"limit","in":"query","required":false,"description":"The maximum number of entries to return.","schema":{"type":"integer","format":"int32","default":50,"minimum":1,"maximum":500}},"Search":{"name":"search","in":"query","required":false,"description":"Filter results by a free text search.","schema":{"type":"string"}}},"schemas":{"ProjectFilterSortFields":{"type":"string","enum":["name","clusterId","departmentId","parentId","parentName","phase","totalGpuQuota","gpuAllocated","createdAt","avgGpuAllocation24h","avgGpuUtilization24h","avgGpuMemoryUtilization24h","avgGpuAllocation7d","avgGpuUtilization7d","avgGpuMemoryUtilization7d","avgGpuAllocation30d","avgGpuUtilization30d","avgGpuMemoryUtilization30d"]},"Project":{"allOf":[{"$ref":"#/components/schemas/DataUpdatableFields"},{"type":"object","required":["id","name","parentId","createdAt","updatedAt","totalResources","effective","status","description","enforceRunaiScheduler","clusterId","resources"],"properties":{"id":{"type":"string"},"name":{"type":"string"},"clusterId":{"$ref":"#/components/schemas/ClusterId"},"parentId":{"type":"string","description":"department parent uuid"},"requestedNamespace":{"type":"string","description":"the project's namespace only if requested","nullable":true},"enforceRunaiScheduler":{"type":"boolean","description":"a flag to enforce that all pods in this namespace will be scheduled with runai-scheduler. Supported for cluster v2.21+"},"status":{"$ref":"#/components/schemas/ProjectStatus"},"totalResources":{"$ref":"#/components/schemas/TotalResources"},"createdAt":{"type":"string","format":"date-time"},"updatedAt":{"type":"string","format":"date-time"},"createdBy":{"type":"string"},"updatedBy":{"type":"string"},"parent":{"$ref":"#/components/schemas/DepartmentProjectParent"},"effective":{"$ref":"#/components/schemas/ProjectEffective"},"overtimeData":{"$ref":"#/components/schemas/OvertimeData"},"resources":{"type":"array","items":{"$ref":"#/components/schemas/Resources"},"description":"Resources assigned to this Organization per Node Pool"}}}]},"DataUpdatableFields":{"type":"object","description":"Updatable fields","required":["resources"],"properties":{"description":{"type":"string","description":"The description of the project."},"schedulingRules":{"$ref":"#/components/schemas/SchedulingRules"},"defaultNodePools":{"description":"An ordered list of node pools that defines the default scheduling preference for workloads in this project. The Scheduler will attempt to schedule workloads on node pools in this order. This setting is enforced if no node pool list is defined in the workload policy.","type":"array","maxItems":20,"nullable":true,"items":{"type":"string"}},"nodeTypes":{"$ref":"#/components/schemas/NodeTypesPerWorkload"}}},"SchedulingRules":{"type":"object","nullable":true,"description":"Scheduling rules that define time limits and idle GPU timeouts for workloads in this org-unit. These rules help manage resource utilization by automatically terminating or preempting idle or long-running workloads.","properties":{"interactiveJobTimeLimitSeconds":{"type":"integer","description":"interactive job time limit in seconds","nullable":true,"minimum":1},"interactiveJobMaxIdleDurationSeconds":{"type":"integer","description":"interactive job max idle duration in seconds","nullable":true,"minimum":1},"interactiveJobPreemptIdleDurationSeconds":{"type":"integer","description":"interactive job preempt idle duration in seconds","nullable":true,"minimum":1},"trainingJobMaxIdleDurationSeconds":{"type":"integer","description":"training job max idle duration in seconds","nullable":true,"minimum":1},"trainingJobTimeLimitSeconds":{"type":"integer","description":"training job time limit in seconds","nullable":true,"minimum":1}}},"NodeTypesPerWorkload":{"description":"Node type configurations for different workload types (training, workspace). Specifies which node types are allowed for each workload type. Enforced when no node type is configured in the workload policy.","properties":{"training":{"type":"array","maxItems":20,"description":"ids of the node types for training workloads","items":{"type":"string"}},"workspace":{"type":"array","maxItems":20,"description":"ids of the node types for workspace workloads","items":{"type":"string"}},"names":{"nullable":true,"type":"object","maxProperties":20,"additionalProperties":{"type":"string"},"description":"mapping of ids to names"}}},"ClusterId":{"description":"The id of the cluster.","type":"string","format":"uuid"},"ProjectStatus":{"type":"object","properties":{"namespace":{"type":"string","description":"the project's namespace","nullable":true},"phase":{"$ref":"#/components/schemas/ProjectPhase","description":"the project's phase"},"phaseMessage":{"type":"string","description":"the project's phase message","nullable":true},"lastUpdatedTime":{"type":"string","format":"date-time","nullable":true},"nodePoolQuotaStatuses":{"type":"array","items":{"$ref":"#/components/schemas/QuotaStatusNodePool"}},"quotaStatus":{"$ref":"#/components/schemas/QuotaStatus"},"additionalStatusData":{"nullable":true,"type":"object","additionalProperties":true}}},"ProjectPhase":{"type":"string","enum":["Creating","Updating","Deleting","Deleted","Initializing","Ready","NotReady","Unknown"]},"QuotaStatusNodePool":{"allOf":[{"$ref":"#/components/schemas/QuotaStatus"},{"type":"object","required":["nodePoolName","nodePoolId"],"properties":{"nodePoolName":{"type":"string","description":"The node pool name which the current quota status refers to"},"nodePoolId":{"type":"string","description":"The node pool id which the current quota status refers to"}}}]},"QuotaStatus":{"type":"object","description":"Sum of all quota statuses of all the node pools","properties":{"allocated":{"$ref":"#/components/schemas/QuotaStatusResource"},"allocatedNonPreemptible":{"$ref":"#/components/schemas/QuotaStatusResource"},"requested":{"$ref":"#/components/schemas/QuotaStatusResource"}}},"QuotaStatusResource":{"type":"object","properties":{"gpu":{"type":"number","format":"double","description":"The number of GPUs (allocated/requested/...)."},"cpu":{"type":"number","format":"double","description":"CPU in Millicores (allocated/requested/...)."},"memory":{"type":"number","format":"double","description":"Memory in MB (allocated/requested/...)."}}},"TotalResources":{"type":"object","properties":{"gpuQuota":{"type":"number","format":"double","description":"Total gpu quota of the org unit","nullable":true},"cpuQuota":{"type":"number","format":"double","description":"Total cpu quota of the org unit in Millicores","nullable":true},"memoryQuota":{"type":"number","format":"double","description":"Total memory quota of the org unit in MB","nullable":true}}},"DepartmentProjectParent":{"type":"object","nullable":true,"description":"Department or project parent","required":["id","name"],"properties":{"id":{"type":"string","format":"uuid"},"name":{"type":"string"},"parent":{"$ref":"#/components/schemas/DepartmentProjectParent"}}},"ProjectEffective":{"properties":{"schedulingRules":{"$ref":"#/components/schemas/SchedulingRules"},"defaultNodePools":{"description":"default order of node pools for workloads. will be enforced if no list is defined in workload policy","type":"array","nullable":true,"items":{"type":"string"}},"nodeTypes":{"$ref":"#/components/schemas/NodeTypesPerWorkload"}}},"OvertimeData":{"type":"object","properties":{"range24hData":{"type":"object","nullable":true,"allOf":[{"$ref":"#/components/schemas/OvertimeRangeData"}]},"range7dData":{"type":"object","nullable":true,"allOf":[{"$ref":"#/components/schemas/OvertimeRangeData"}]},"range30dData":{"type":"object","nullable":true,"allOf":[{"$ref":"#/components/schemas/OvertimeRangeData"}]}}},"OvertimeRangeData":{"type":"object","description":"Average data for the specified time range, or for the lifetime of the project/department if it exists for less than the time range.","properties":{"averageGpuAllocation":{"type":"number","format":"double","description":"The average gpu devices allocation of the project/department."},"averageGpuUtilization":{"type":"number","format":"double","description":"The average gpu utilization percentage of the project/department."},"averageGpuMemoryUtilization":{"type":"number","format":"double","description":"The average gpu memory utilization percentage of the project/department. Only available for cluster versions >= 2.22.","nullable":true},"updatedAt":{"type":"string","format":"date-time"}}},"Resources":{"required":["gpu"],"properties":{"nodePool":{"required":["id"],"properties":{"id":{"type":"string","description":"The ID of the node pool."},"name":{"type":"string","description":"The name of the node pool."}},"description":"The node pool to which this resource configuration applies.","type":"object","nullable":true},"gpu":{"required":["deserved"],"allOf":[{"$ref":"#/components/schemas/NonNullResource"},{"description":"Defines the GPU quota assignment, maximum GPU device allocation, and weight assigned that determines the fairshare of over-quota resources."}]},"cpu":{"type":"object","nullable":true,"allOf":[{"$ref":"#/components/schemas/Resource"},{"description":"Defines the CPU quota assignment in millicores (1000 millicores = 1 CPU core), maximum CPU allocation, and weight."}]},"memory":{"type":"object","nullable":true,"allOf":[{"$ref":"#/components/schemas/Resource"},{"type":"object","description":"Defines the CPU memory quota assignment, maximum allocation, and weight.","required":["units"],"properties":{"units":{"$ref":"#/components/schemas/units"}}}]},"rank":{"type":"string","nullable":true,"description":"The scheduling rank of this org-unit within the node pool. Determines the scheduling order of workloads between org-units. Workloads in higher-ranked org-units are scheduled before workloads in lower-ranked org-units. For example, all workloads in rank \"High\" will be scheduled before all workloads in rank \"Medium\".","default":"MediumLow"},"priority":{"deprecated":true,"description":"Deprecated. Use rank instead. The scheduling priority for workloads in this node pool.","type":"string","nullable":true}}},"NonNullResource":{"properties":{"deserved":{"type":"number","format":"double","description":"The GPU quota assigned to this org-unit.","default":0},"limit":{"type":"number","format":"double","description":"The maximum GPU device allocation the org-unit can get from this node pool, representing the maximum sum of assigned quota and over-quota GPUs. Set to null for unlimited.","nullable":true},"overQuotaWeight":{"type":"number","format":"double","description":"The weight assigned to determine the org-unit's share of over-quota resources within its rank. When multiple org-units share the same rank in a node pool, resources are distributed proportionally based on their weights. Valid values: 1–20. Requires over-quota weight to be enabled. When enabled, the default is 2. See [GPU over quota](https://run-ai-docs.nvidia.com/self-hosted/2.25/platform-management/aiinitiatives/organization/projects#gpu-over-quota) for more details.\n","nullable":true}}},"Resource":{"properties":{"deserved":{"type":"number","format":"double","description":"The resource quota assigned to this org-unit.","nullable":true},"limit":{"type":"number","format":"double","description":"The maximum resource allocation for this org-unit. Set to null for unlimited.","nullable":true},"overQuotaWeight":{"type":"number","format":"double","description":"The weight assigned to determine the org-unit's share of over-quota resources within its rank. When multiple org-units share the same rank in a node pool, resources are distributed proportionally based on their weights. Valid values: 1–20. Requires over-quota weight to be enabled. When enabled, the default is 2. See [GPU over quota](https://run-ai-docs.nvidia.com/self-hosted/2.25/platform-management/aiinitiatives/organization/projects#gpu-over-quota) for more details.\n","nullable":true}}},"units":{"type":"string","description":"The unit of measurement for CPU memory values.","enum":["Mib","MB","GB"]},"Error":{"required":["code","message"],"properties":{"code":{"type":"integer","minimum":100,"maximum":599},"message":{"type":"string"},"details":{"type":"string"}}}},"responses":{"400BadRequest":{"description":"Bad request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401Unauthorized":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403Forbidden":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503ServiceUnavailable":{"description":"unexpected error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"paths":{"/api/v1/org-unit/projects":{"get":{"summary":"Get projects","operationId":"get_projects","description":"List projects","tags":["Projects"],"parameters":[{"$ref":"#/components/parameters/ProjectsFilterBy"},{"$ref":"#/components/parameters/ProjectsSortBy"},{"$ref":"#/components/parameters/SortOrder"},{"$ref":"#/components/parameters/Offset"},{"$ref":"#/components/parameters/Limit"},{"$ref":"#/components/parameters/Search"}],"responses":{"200":{"description":"ok","content":{"application/json":{"schema":{"type":"object","required":["projects"],"properties":{"projects":{"type":"array","items":{"$ref":"#/components/schemas/Project"}},"next":{"type":"integer"}}}}}},"400":{"$ref":"#/components/responses/400BadRequest"},"401":{"$ref":"#/components/responses/401Unauthorized"},"403":{"$ref":"#/components/responses/403Forbidden"},"503":{"$ref":"#/components/responses/503ServiceUnavailable"}}}}}}
```

## Create project

> Create a project

```json
{"openapi":"3.0.3","info":{"title":"NVIDIA Run:ai","version":"2.25"},"tags":[{"name":"Projects","description":"Projects implement resource allocation policies and create segregation between \ndifferent initiatives. It can represent a team, an individual, or an initiative that \nshares resources or has a specific resources budget (quota). \nSee [Projects](https://run-ai-docs.nvidia.com/self-hosted/2.25/platform-management/aiinitiatives/organization/projects) \nfor more information.\n"}],"servers":[{"url":"https://app.run.ai"}],"security":[{"bearerAuth":[]}],"components":{"securitySchemes":{"bearerAuth":{"type":"http","scheme":"bearer","bearerFormat":"JWT","description":"Bearer authentication"}},"schemas":{"ProjectCreationRequest":{"allOf":[{"$ref":"#/components/schemas/DataUpdatableFields"},{"type":"object","required":["name","clusterId","resources"],"properties":{"name":{"description":"The unique name of the project within the cluster. Must be a valid Kubernetes name (lowercase, alphanumeric, hyphens allowed).","type":"string","maxLength":63},"clusterId":{"$ref":"#/components/schemas/ClusterId"},"requestedNamespace":{"type":"string","description":"The custom Kubernetes namespace name for the project. If not specified, a namespace will be auto-generated using the pattern runai-<project-name>."},"enforceRunaiScheduler":{"type":"boolean","description":"When set to true, enforces that all pods in this project's namespace are scheduled using the NVIDIA Run:ai Scheduler (runai-scheduler). Supported for cluster version 2.21 and later.","nullable":true,"default":true},"parentId":{"type":"string","description":"The ID of the parent department. When specified, the project is created as a child of this department and inherits its quota, the quota of other projects within the department and its scheduling rules.","nullable":true},"resources":{"type":"array","items":{"$ref":"#/components/schemas/ResourcesNullable"},"description":"An array of resource configurations for the project. Each entry defines GPU, CPU, and CPU memory assigned to a specific node pool."}}}]},"DataUpdatableFields":{"type":"object","description":"Updatable fields","required":["resources"],"properties":{"description":{"type":"string","description":"The description of the project."},"schedulingRules":{"$ref":"#/components/schemas/SchedulingRules"},"defaultNodePools":{"description":"An ordered list of node pools that defines the default scheduling preference for workloads in this project. The Scheduler will attempt to schedule workloads on node pools in this order. This setting is enforced if no node pool list is defined in the workload policy.","type":"array","maxItems":20,"nullable":true,"items":{"type":"string"}},"nodeTypes":{"$ref":"#/components/schemas/NodeTypesPerWorkload"}}},"SchedulingRules":{"type":"object","nullable":true,"description":"Scheduling rules that define time limits and idle GPU timeouts for workloads in this org-unit. These rules help manage resource utilization by automatically terminating or preempting idle or long-running workloads.","properties":{"interactiveJobTimeLimitSeconds":{"type":"integer","description":"interactive job time limit in seconds","nullable":true,"minimum":1},"interactiveJobMaxIdleDurationSeconds":{"type":"integer","description":"interactive job max idle duration in seconds","nullable":true,"minimum":1},"interactiveJobPreemptIdleDurationSeconds":{"type":"integer","description":"interactive job preempt idle duration in seconds","nullable":true,"minimum":1},"trainingJobMaxIdleDurationSeconds":{"type":"integer","description":"training job max idle duration in seconds","nullable":true,"minimum":1},"trainingJobTimeLimitSeconds":{"type":"integer","description":"training job time limit in seconds","nullable":true,"minimum":1}}},"NodeTypesPerWorkload":{"description":"Node type configurations for different workload types (training, workspace). Specifies which node types are allowed for each workload type. Enforced when no node type is configured in the workload policy.","properties":{"training":{"type":"array","maxItems":20,"description":"ids of the node types for training workloads","items":{"type":"string"}},"workspace":{"type":"array","maxItems":20,"description":"ids of the node types for workspace workloads","items":{"type":"string"}},"names":{"nullable":true,"type":"object","maxProperties":20,"additionalProperties":{"type":"string"},"description":"mapping of ids to names"}}},"ClusterId":{"description":"The id of the cluster.","type":"string","format":"uuid"},"ResourcesNullable":{"properties":{"nodePool":{"required":["id"],"properties":{"id":{"type":"string","description":"The ID of the node pool."},"name":{"type":"string","description":"The name of the node pool."}},"description":"The node pool to which this resource configuration applies.","type":"object","nullable":true},"gpu":{"allOf":[{"$ref":"#/components/schemas/NonNullResource"},{"description":"Defines the GPU quota assignment, maximum GPU device allocation, and weight assigned that determines the fairshare of over-quota resources."}]},"cpu":{"type":"object","nullable":true,"allOf":[{"$ref":"#/components/schemas/Resource"},{"description":"Defines the CPU quota assignment in millicores (1000 millicores = 1 CPU core), maximum CPU allocation, and weight."}]},"memory":{"type":"object","nullable":true,"allOf":[{"$ref":"#/components/schemas/Resource"},{"type":"object","description":"Defines the CPU memory quota assignment, maximum allocation, and weight.","required":["units"],"properties":{"units":{"$ref":"#/components/schemas/units"}}}]},"rank":{"type":"string","nullable":true,"description":"The scheduling rank of this org-unit within the node pool. Determines the scheduling order of workloads between org-units. Workloads in higher-ranked org-units are scheduled before workloads in lower-ranked org-units. For example, all workloads in rank \"High\" will be scheduled before all workloads in rank \"Medium\".","default":"MediumLow"},"priority":{"deprecated":true,"description":"Deprecated. Use rank instead. The scheduling priority for workloads in this node pool.","type":"string","nullable":true}}},"NonNullResource":{"properties":{"deserved":{"type":"number","format":"double","description":"The GPU quota assigned to this org-unit.","default":0},"limit":{"type":"number","format":"double","description":"The maximum GPU device allocation the org-unit can get from this node pool, representing the maximum sum of assigned quota and over-quota GPUs. Set to null for unlimited.","nullable":true},"overQuotaWeight":{"type":"number","format":"double","description":"The weight assigned to determine the org-unit's share of over-quota resources within its rank. When multiple org-units share the same rank in a node pool, resources are distributed proportionally based on their weights. Valid values: 1–20. Requires over-quota weight to be enabled. When enabled, the default is 2. See [GPU over quota](https://run-ai-docs.nvidia.com/self-hosted/2.25/platform-management/aiinitiatives/organization/projects#gpu-over-quota) for more details.\n","nullable":true}}},"Resource":{"properties":{"deserved":{"type":"number","format":"double","description":"The resource quota assigned to this org-unit.","nullable":true},"limit":{"type":"number","format":"double","description":"The maximum resource allocation for this org-unit. Set to null for unlimited.","nullable":true},"overQuotaWeight":{"type":"number","format":"double","description":"The weight assigned to determine the org-unit's share of over-quota resources within its rank. When multiple org-units share the same rank in a node pool, resources are distributed proportionally based on their weights. Valid values: 1–20. Requires over-quota weight to be enabled. When enabled, the default is 2. See [GPU over quota](https://run-ai-docs.nvidia.com/self-hosted/2.25/platform-management/aiinitiatives/organization/projects#gpu-over-quota) for more details.\n","nullable":true}}},"units":{"type":"string","description":"The unit of measurement for CPU memory values.","enum":["Mib","MB","GB"]},"Project":{"allOf":[{"$ref":"#/components/schemas/DataUpdatableFields"},{"type":"object","required":["id","name","parentId","createdAt","updatedAt","totalResources","effective","status","description","enforceRunaiScheduler","clusterId","resources"],"properties":{"id":{"type":"string"},"name":{"type":"string"},"clusterId":{"$ref":"#/components/schemas/ClusterId"},"parentId":{"type":"string","description":"department parent uuid"},"requestedNamespace":{"type":"string","description":"the project's namespace only if requested","nullable":true},"enforceRunaiScheduler":{"type":"boolean","description":"a flag to enforce that all pods in this namespace will be scheduled with runai-scheduler. Supported for cluster v2.21+"},"status":{"$ref":"#/components/schemas/ProjectStatus"},"totalResources":{"$ref":"#/components/schemas/TotalResources"},"createdAt":{"type":"string","format":"date-time"},"updatedAt":{"type":"string","format":"date-time"},"createdBy":{"type":"string"},"updatedBy":{"type":"string"},"parent":{"$ref":"#/components/schemas/DepartmentProjectParent"},"effective":{"$ref":"#/components/schemas/ProjectEffective"},"overtimeData":{"$ref":"#/components/schemas/OvertimeData"},"resources":{"type":"array","items":{"$ref":"#/components/schemas/Resources"},"description":"Resources assigned to this Organization per Node Pool"}}}]},"ProjectStatus":{"type":"object","properties":{"namespace":{"type":"string","description":"the project's namespace","nullable":true},"phase":{"$ref":"#/components/schemas/ProjectPhase","description":"the project's phase"},"phaseMessage":{"type":"string","description":"the project's phase message","nullable":true},"lastUpdatedTime":{"type":"string","format":"date-time","nullable":true},"nodePoolQuotaStatuses":{"type":"array","items":{"$ref":"#/components/schemas/QuotaStatusNodePool"}},"quotaStatus":{"$ref":"#/components/schemas/QuotaStatus"},"additionalStatusData":{"nullable":true,"type":"object","additionalProperties":true}}},"ProjectPhase":{"type":"string","enum":["Creating","Updating","Deleting","Deleted","Initializing","Ready","NotReady","Unknown"]},"QuotaStatusNodePool":{"allOf":[{"$ref":"#/components/schemas/QuotaStatus"},{"type":"object","required":["nodePoolName","nodePoolId"],"properties":{"nodePoolName":{"type":"string","description":"The node pool name which the current quota status refers to"},"nodePoolId":{"type":"string","description":"The node pool id which the current quota status refers to"}}}]},"QuotaStatus":{"type":"object","description":"Sum of all quota statuses of all the node pools","properties":{"allocated":{"$ref":"#/components/schemas/QuotaStatusResource"},"allocatedNonPreemptible":{"$ref":"#/components/schemas/QuotaStatusResource"},"requested":{"$ref":"#/components/schemas/QuotaStatusResource"}}},"QuotaStatusResource":{"type":"object","properties":{"gpu":{"type":"number","format":"double","description":"The number of GPUs (allocated/requested/...)."},"cpu":{"type":"number","format":"double","description":"CPU in Millicores (allocated/requested/...)."},"memory":{"type":"number","format":"double","description":"Memory in MB (allocated/requested/...)."}}},"TotalResources":{"type":"object","properties":{"gpuQuota":{"type":"number","format":"double","description":"Total gpu quota of the org unit","nullable":true},"cpuQuota":{"type":"number","format":"double","description":"Total cpu quota of the org unit in Millicores","nullable":true},"memoryQuota":{"type":"number","format":"double","description":"Total memory quota of the org unit in MB","nullable":true}}},"DepartmentProjectParent":{"type":"object","nullable":true,"description":"Department or project parent","required":["id","name"],"properties":{"id":{"type":"string","format":"uuid"},"name":{"type":"string"},"parent":{"$ref":"#/components/schemas/DepartmentProjectParent"}}},"ProjectEffective":{"properties":{"schedulingRules":{"$ref":"#/components/schemas/SchedulingRules"},"defaultNodePools":{"description":"default order of node pools for workloads. will be enforced if no list is defined in workload policy","type":"array","nullable":true,"items":{"type":"string"}},"nodeTypes":{"$ref":"#/components/schemas/NodeTypesPerWorkload"}}},"OvertimeData":{"type":"object","properties":{"range24hData":{"type":"object","nullable":true,"allOf":[{"$ref":"#/components/schemas/OvertimeRangeData"}]},"range7dData":{"type":"object","nullable":true,"allOf":[{"$ref":"#/components/schemas/OvertimeRangeData"}]},"range30dData":{"type":"object","nullable":true,"allOf":[{"$ref":"#/components/schemas/OvertimeRangeData"}]}}},"OvertimeRangeData":{"type":"object","description":"Average data for the specified time range, or for the lifetime of the project/department if it exists for less than the time range.","properties":{"averageGpuAllocation":{"type":"number","format":"double","description":"The average gpu devices allocation of the project/department."},"averageGpuUtilization":{"type":"number","format":"double","description":"The average gpu utilization percentage of the project/department."},"averageGpuMemoryUtilization":{"type":"number","format":"double","description":"The average gpu memory utilization percentage of the project/department. Only available for cluster versions >= 2.22.","nullable":true},"updatedAt":{"type":"string","format":"date-time"}}},"Resources":{"required":["gpu"],"properties":{"nodePool":{"required":["id"],"properties":{"id":{"type":"string","description":"The ID of the node pool."},"name":{"type":"string","description":"The name of the node pool."}},"description":"The node pool to which this resource configuration applies.","type":"object","nullable":true},"gpu":{"required":["deserved"],"allOf":[{"$ref":"#/components/schemas/NonNullResource"},{"description":"Defines the GPU quota assignment, maximum GPU device allocation, and weight assigned that determines the fairshare of over-quota resources."}]},"cpu":{"type":"object","nullable":true,"allOf":[{"$ref":"#/components/schemas/Resource"},{"description":"Defines the CPU quota assignment in millicores (1000 millicores = 1 CPU core), maximum CPU allocation, and weight."}]},"memory":{"type":"object","nullable":true,"allOf":[{"$ref":"#/components/schemas/Resource"},{"type":"object","description":"Defines the CPU memory quota assignment, maximum allocation, and weight.","required":["units"],"properties":{"units":{"$ref":"#/components/schemas/units"}}}]},"rank":{"type":"string","nullable":true,"description":"The scheduling rank of this org-unit within the node pool. Determines the scheduling order of workloads between org-units. Workloads in higher-ranked org-units are scheduled before workloads in lower-ranked org-units. For example, all workloads in rank \"High\" will be scheduled before all workloads in rank \"Medium\".","default":"MediumLow"},"priority":{"deprecated":true,"description":"Deprecated. Use rank instead. The scheduling priority for workloads in this node pool.","type":"string","nullable":true}}},"Error":{"required":["code","message"],"properties":{"code":{"type":"integer","minimum":100,"maximum":599},"message":{"type":"string"},"details":{"type":"string"}}}},"responses":{"400BadRequest":{"description":"Bad request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401Unauthorized":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403Forbidden":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409Conflict":{"description":"The specified resource already exists","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503ServiceUnavailable":{"description":"unexpected error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"paths":{"/api/v1/org-unit/projects":{"post":{"summary":"Create project","operationId":"create_project","description":"Create a project","tags":["Projects"],"requestBody":{"description":"Project to create.","required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProjectCreationRequest"}}}},"responses":{"201":{"description":"Created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Project"}}}},"400":{"$ref":"#/components/responses/400BadRequest"},"401":{"$ref":"#/components/responses/401Unauthorized"},"403":{"$ref":"#/components/responses/403Forbidden"},"409":{"$ref":"#/components/responses/409Conflict"},"503":{"$ref":"#/components/responses/503ServiceUnavailable"}}}}}}
```

## Get project

> Get a project by id

```json
{"openapi":"3.0.3","info":{"title":"NVIDIA Run:ai","version":"2.25"},"tags":[{"name":"Projects","description":"Projects implement resource allocation policies and create segregation between \ndifferent initiatives. It can represent a team, an individual, or an initiative that \nshares resources or has a specific resources budget (quota). \nSee [Projects](https://run-ai-docs.nvidia.com/self-hosted/2.25/platform-management/aiinitiatives/organization/projects) \nfor more information.\n"}],"servers":[{"url":"https://app.run.ai"}],"security":[{"bearerAuth":[]}],"components":{"securitySchemes":{"bearerAuth":{"type":"http","scheme":"bearer","bearerFormat":"JWT","description":"Bearer authentication"}},"parameters":{"ProjectId":{"name":"projectId","in":"path","required":true,"description":"The project id","schema":{"type":"string"}}},"schemas":{"Project":{"allOf":[{"$ref":"#/components/schemas/DataUpdatableFields"},{"type":"object","required":["id","name","parentId","createdAt","updatedAt","totalResources","effective","status","description","enforceRunaiScheduler","clusterId","resources"],"properties":{"id":{"type":"string"},"name":{"type":"string"},"clusterId":{"$ref":"#/components/schemas/ClusterId"},"parentId":{"type":"string","description":"department parent uuid"},"requestedNamespace":{"type":"string","description":"the project's namespace only if requested","nullable":true},"enforceRunaiScheduler":{"type":"boolean","description":"a flag to enforce that all pods in this namespace will be scheduled with runai-scheduler. Supported for cluster v2.21+"},"status":{"$ref":"#/components/schemas/ProjectStatus"},"totalResources":{"$ref":"#/components/schemas/TotalResources"},"createdAt":{"type":"string","format":"date-time"},"updatedAt":{"type":"string","format":"date-time"},"createdBy":{"type":"string"},"updatedBy":{"type":"string"},"parent":{"$ref":"#/components/schemas/DepartmentProjectParent"},"effective":{"$ref":"#/components/schemas/ProjectEffective"},"overtimeData":{"$ref":"#/components/schemas/OvertimeData"},"resources":{"type":"array","items":{"$ref":"#/components/schemas/Resources"},"description":"Resources assigned to this Organization per Node Pool"}}}]},"DataUpdatableFields":{"type":"object","description":"Updatable fields","required":["resources"],"properties":{"description":{"type":"string","description":"The description of the project."},"schedulingRules":{"$ref":"#/components/schemas/SchedulingRules"},"defaultNodePools":{"description":"An ordered list of node pools that defines the default scheduling preference for workloads in this project. The Scheduler will attempt to schedule workloads on node pools in this order. This setting is enforced if no node pool list is defined in the workload policy.","type":"array","maxItems":20,"nullable":true,"items":{"type":"string"}},"nodeTypes":{"$ref":"#/components/schemas/NodeTypesPerWorkload"}}},"SchedulingRules":{"type":"object","nullable":true,"description":"Scheduling rules that define time limits and idle GPU timeouts for workloads in this org-unit. These rules help manage resource utilization by automatically terminating or preempting idle or long-running workloads.","properties":{"interactiveJobTimeLimitSeconds":{"type":"integer","description":"interactive job time limit in seconds","nullable":true,"minimum":1},"interactiveJobMaxIdleDurationSeconds":{"type":"integer","description":"interactive job max idle duration in seconds","nullable":true,"minimum":1},"interactiveJobPreemptIdleDurationSeconds":{"type":"integer","description":"interactive job preempt idle duration in seconds","nullable":true,"minimum":1},"trainingJobMaxIdleDurationSeconds":{"type":"integer","description":"training job max idle duration in seconds","nullable":true,"minimum":1},"trainingJobTimeLimitSeconds":{"type":"integer","description":"training job time limit in seconds","nullable":true,"minimum":1}}},"NodeTypesPerWorkload":{"description":"Node type configurations for different workload types (training, workspace). Specifies which node types are allowed for each workload type. Enforced when no node type is configured in the workload policy.","properties":{"training":{"type":"array","maxItems":20,"description":"ids of the node types for training workloads","items":{"type":"string"}},"workspace":{"type":"array","maxItems":20,"description":"ids of the node types for workspace workloads","items":{"type":"string"}},"names":{"nullable":true,"type":"object","maxProperties":20,"additionalProperties":{"type":"string"},"description":"mapping of ids to names"}}},"ClusterId":{"description":"The id of the cluster.","type":"string","format":"uuid"},"ProjectStatus":{"type":"object","properties":{"namespace":{"type":"string","description":"the project's namespace","nullable":true},"phase":{"$ref":"#/components/schemas/ProjectPhase","description":"the project's phase"},"phaseMessage":{"type":"string","description":"the project's phase message","nullable":true},"lastUpdatedTime":{"type":"string","format":"date-time","nullable":true},"nodePoolQuotaStatuses":{"type":"array","items":{"$ref":"#/components/schemas/QuotaStatusNodePool"}},"quotaStatus":{"$ref":"#/components/schemas/QuotaStatus"},"additionalStatusData":{"nullable":true,"type":"object","additionalProperties":true}}},"ProjectPhase":{"type":"string","enum":["Creating","Updating","Deleting","Deleted","Initializing","Ready","NotReady","Unknown"]},"QuotaStatusNodePool":{"allOf":[{"$ref":"#/components/schemas/QuotaStatus"},{"type":"object","required":["nodePoolName","nodePoolId"],"properties":{"nodePoolName":{"type":"string","description":"The node pool name which the current quota status refers to"},"nodePoolId":{"type":"string","description":"The node pool id which the current quota status refers to"}}}]},"QuotaStatus":{"type":"object","description":"Sum of all quota statuses of all the node pools","properties":{"allocated":{"$ref":"#/components/schemas/QuotaStatusResource"},"allocatedNonPreemptible":{"$ref":"#/components/schemas/QuotaStatusResource"},"requested":{"$ref":"#/components/schemas/QuotaStatusResource"}}},"QuotaStatusResource":{"type":"object","properties":{"gpu":{"type":"number","format":"double","description":"The number of GPUs (allocated/requested/...)."},"cpu":{"type":"number","format":"double","description":"CPU in Millicores (allocated/requested/...)."},"memory":{"type":"number","format":"double","description":"Memory in MB (allocated/requested/...)."}}},"TotalResources":{"type":"object","properties":{"gpuQuota":{"type":"number","format":"double","description":"Total gpu quota of the org unit","nullable":true},"cpuQuota":{"type":"number","format":"double","description":"Total cpu quota of the org unit in Millicores","nullable":true},"memoryQuota":{"type":"number","format":"double","description":"Total memory quota of the org unit in MB","nullable":true}}},"DepartmentProjectParent":{"type":"object","nullable":true,"description":"Department or project parent","required":["id","name"],"properties":{"id":{"type":"string","format":"uuid"},"name":{"type":"string"},"parent":{"$ref":"#/components/schemas/DepartmentProjectParent"}}},"ProjectEffective":{"properties":{"schedulingRules":{"$ref":"#/components/schemas/SchedulingRules"},"defaultNodePools":{"description":"default order of node pools for workloads. will be enforced if no list is defined in workload policy","type":"array","nullable":true,"items":{"type":"string"}},"nodeTypes":{"$ref":"#/components/schemas/NodeTypesPerWorkload"}}},"OvertimeData":{"type":"object","properties":{"range24hData":{"type":"object","nullable":true,"allOf":[{"$ref":"#/components/schemas/OvertimeRangeData"}]},"range7dData":{"type":"object","nullable":true,"allOf":[{"$ref":"#/components/schemas/OvertimeRangeData"}]},"range30dData":{"type":"object","nullable":true,"allOf":[{"$ref":"#/components/schemas/OvertimeRangeData"}]}}},"OvertimeRangeData":{"type":"object","description":"Average data for the specified time range, or for the lifetime of the project/department if it exists for less than the time range.","properties":{"averageGpuAllocation":{"type":"number","format":"double","description":"The average gpu devices allocation of the project/department."},"averageGpuUtilization":{"type":"number","format":"double","description":"The average gpu utilization percentage of the project/department."},"averageGpuMemoryUtilization":{"type":"number","format":"double","description":"The average gpu memory utilization percentage of the project/department. Only available for cluster versions >= 2.22.","nullable":true},"updatedAt":{"type":"string","format":"date-time"}}},"Resources":{"required":["gpu"],"properties":{"nodePool":{"required":["id"],"properties":{"id":{"type":"string","description":"The ID of the node pool."},"name":{"type":"string","description":"The name of the node pool."}},"description":"The node pool to which this resource configuration applies.","type":"object","nullable":true},"gpu":{"required":["deserved"],"allOf":[{"$ref":"#/components/schemas/NonNullResource"},{"description":"Defines the GPU quota assignment, maximum GPU device allocation, and weight assigned that determines the fairshare of over-quota resources."}]},"cpu":{"type":"object","nullable":true,"allOf":[{"$ref":"#/components/schemas/Resource"},{"description":"Defines the CPU quota assignment in millicores (1000 millicores = 1 CPU core), maximum CPU allocation, and weight."}]},"memory":{"type":"object","nullable":true,"allOf":[{"$ref":"#/components/schemas/Resource"},{"type":"object","description":"Defines the CPU memory quota assignment, maximum allocation, and weight.","required":["units"],"properties":{"units":{"$ref":"#/components/schemas/units"}}}]},"rank":{"type":"string","nullable":true,"description":"The scheduling rank of this org-unit within the node pool. Determines the scheduling order of workloads between org-units. Workloads in higher-ranked org-units are scheduled before workloads in lower-ranked org-units. For example, all workloads in rank \"High\" will be scheduled before all workloads in rank \"Medium\".","default":"MediumLow"},"priority":{"deprecated":true,"description":"Deprecated. Use rank instead. The scheduling priority for workloads in this node pool.","type":"string","nullable":true}}},"NonNullResource":{"properties":{"deserved":{"type":"number","format":"double","description":"The GPU quota assigned to this org-unit.","default":0},"limit":{"type":"number","format":"double","description":"The maximum GPU device allocation the org-unit can get from this node pool, representing the maximum sum of assigned quota and over-quota GPUs. Set to null for unlimited.","nullable":true},"overQuotaWeight":{"type":"number","format":"double","description":"The weight assigned to determine the org-unit's share of over-quota resources within its rank. When multiple org-units share the same rank in a node pool, resources are distributed proportionally based on their weights. Valid values: 1–20. Requires over-quota weight to be enabled. When enabled, the default is 2. See [GPU over quota](https://run-ai-docs.nvidia.com/self-hosted/2.25/platform-management/aiinitiatives/organization/projects#gpu-over-quota) for more details.\n","nullable":true}}},"Resource":{"properties":{"deserved":{"type":"number","format":"double","description":"The resource quota assigned to this org-unit.","nullable":true},"limit":{"type":"number","format":"double","description":"The maximum resource allocation for this org-unit. Set to null for unlimited.","nullable":true},"overQuotaWeight":{"type":"number","format":"double","description":"The weight assigned to determine the org-unit's share of over-quota resources within its rank. When multiple org-units share the same rank in a node pool, resources are distributed proportionally based on their weights. Valid values: 1–20. Requires over-quota weight to be enabled. When enabled, the default is 2. See [GPU over quota](https://run-ai-docs.nvidia.com/self-hosted/2.25/platform-management/aiinitiatives/organization/projects#gpu-over-quota) for more details.\n","nullable":true}}},"units":{"type":"string","description":"The unit of measurement for CPU memory values.","enum":["Mib","MB","GB"]},"Error":{"required":["code","message"],"properties":{"code":{"type":"integer","minimum":100,"maximum":599},"message":{"type":"string"},"details":{"type":"string"}}}},"responses":{"401Unauthorized":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403Forbidden":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404NotFound":{"description":"The specified resource was not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503ServiceUnavailable":{"description":"unexpected error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"paths":{"/api/v1/org-unit/projects/{projectId}":{"get":{"summary":"Get project","operationId":"get_project","description":"Get a project by id","tags":["Projects"],"parameters":[{"$ref":"#/components/parameters/ProjectId"}],"responses":{"200":{"description":"ok","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Project"}}}},"401":{"$ref":"#/components/responses/401Unauthorized"},"403":{"$ref":"#/components/responses/403Forbidden"},"404":{"$ref":"#/components/responses/404NotFound"},"503":{"$ref":"#/components/responses/503ServiceUnavailable"}}}}}}
```

## Update project

> Update project by Id

```json
{"openapi":"3.0.3","info":{"title":"NVIDIA Run:ai","version":"2.25"},"tags":[{"name":"Projects","description":"Projects implement resource allocation policies and create segregation between \ndifferent initiatives. It can represent a team, an individual, or an initiative that \nshares resources or has a specific resources budget (quota). \nSee [Projects](https://run-ai-docs.nvidia.com/self-hosted/2.25/platform-management/aiinitiatives/organization/projects) \nfor more information.\n"}],"servers":[{"url":"https://app.run.ai"}],"security":[{"bearerAuth":[]}],"components":{"securitySchemes":{"bearerAuth":{"type":"http","scheme":"bearer","bearerFormat":"JWT","description":"Bearer authentication"}},"parameters":{"ProjectId":{"name":"projectId","in":"path","required":true,"description":"The project id","schema":{"type":"string"}}},"schemas":{"ProjectUpdateRequest":{"allOf":[{"$ref":"#/components/schemas/DataUpdatableFields"},{"type":"object","required":["resources"],"properties":{"enforceRunaiScheduler":{"type":"boolean","description":"a flag to enforce that all pods in this namespace will be scheduled with runai-scheduler. Supported for cluster v2.21+","nullable":true},"resources":{"type":"array","items":{"$ref":"#/components/schemas/ResourcesNullable"},"description":"Resources assigned to this Organization per Node Pool"}}}]},"DataUpdatableFields":{"type":"object","description":"Updatable fields","required":["resources"],"properties":{"description":{"type":"string","description":"The description of the project."},"schedulingRules":{"$ref":"#/components/schemas/SchedulingRules"},"defaultNodePools":{"description":"An ordered list of node pools that defines the default scheduling preference for workloads in this project. The Scheduler will attempt to schedule workloads on node pools in this order. This setting is enforced if no node pool list is defined in the workload policy.","type":"array","maxItems":20,"nullable":true,"items":{"type":"string"}},"nodeTypes":{"$ref":"#/components/schemas/NodeTypesPerWorkload"}}},"SchedulingRules":{"type":"object","nullable":true,"description":"Scheduling rules that define time limits and idle GPU timeouts for workloads in this org-unit. These rules help manage resource utilization by automatically terminating or preempting idle or long-running workloads.","properties":{"interactiveJobTimeLimitSeconds":{"type":"integer","description":"interactive job time limit in seconds","nullable":true,"minimum":1},"interactiveJobMaxIdleDurationSeconds":{"type":"integer","description":"interactive job max idle duration in seconds","nullable":true,"minimum":1},"interactiveJobPreemptIdleDurationSeconds":{"type":"integer","description":"interactive job preempt idle duration in seconds","nullable":true,"minimum":1},"trainingJobMaxIdleDurationSeconds":{"type":"integer","description":"training job max idle duration in seconds","nullable":true,"minimum":1},"trainingJobTimeLimitSeconds":{"type":"integer","description":"training job time limit in seconds","nullable":true,"minimum":1}}},"NodeTypesPerWorkload":{"description":"Node type configurations for different workload types (training, workspace). Specifies which node types are allowed for each workload type. Enforced when no node type is configured in the workload policy.","properties":{"training":{"type":"array","maxItems":20,"description":"ids of the node types for training workloads","items":{"type":"string"}},"workspace":{"type":"array","maxItems":20,"description":"ids of the node types for workspace workloads","items":{"type":"string"}},"names":{"nullable":true,"type":"object","maxProperties":20,"additionalProperties":{"type":"string"},"description":"mapping of ids to names"}}},"ResourcesNullable":{"properties":{"nodePool":{"required":["id"],"properties":{"id":{"type":"string","description":"The ID of the node pool."},"name":{"type":"string","description":"The name of the node pool."}},"description":"The node pool to which this resource configuration applies.","type":"object","nullable":true},"gpu":{"allOf":[{"$ref":"#/components/schemas/NonNullResource"},{"description":"Defines the GPU quota assignment, maximum GPU device allocation, and weight assigned that determines the fairshare of over-quota resources."}]},"cpu":{"type":"object","nullable":true,"allOf":[{"$ref":"#/components/schemas/Resource"},{"description":"Defines the CPU quota assignment in millicores (1000 millicores = 1 CPU core), maximum CPU allocation, and weight."}]},"memory":{"type":"object","nullable":true,"allOf":[{"$ref":"#/components/schemas/Resource"},{"type":"object","description":"Defines the CPU memory quota assignment, maximum allocation, and weight.","required":["units"],"properties":{"units":{"$ref":"#/components/schemas/units"}}}]},"rank":{"type":"string","nullable":true,"description":"The scheduling rank of this org-unit within the node pool. Determines the scheduling order of workloads between org-units. Workloads in higher-ranked org-units are scheduled before workloads in lower-ranked org-units. For example, all workloads in rank \"High\" will be scheduled before all workloads in rank \"Medium\".","default":"MediumLow"},"priority":{"deprecated":true,"description":"Deprecated. Use rank instead. The scheduling priority for workloads in this node pool.","type":"string","nullable":true}}},"NonNullResource":{"properties":{"deserved":{"type":"number","format":"double","description":"The GPU quota assigned to this org-unit.","default":0},"limit":{"type":"number","format":"double","description":"The maximum GPU device allocation the org-unit can get from this node pool, representing the maximum sum of assigned quota and over-quota GPUs. Set to null for unlimited.","nullable":true},"overQuotaWeight":{"type":"number","format":"double","description":"The weight assigned to determine the org-unit's share of over-quota resources within its rank. When multiple org-units share the same rank in a node pool, resources are distributed proportionally based on their weights. Valid values: 1–20. Requires over-quota weight to be enabled. When enabled, the default is 2. See [GPU over quota](https://run-ai-docs.nvidia.com/self-hosted/2.25/platform-management/aiinitiatives/organization/projects#gpu-over-quota) for more details.\n","nullable":true}}},"Resource":{"properties":{"deserved":{"type":"number","format":"double","description":"The resource quota assigned to this org-unit.","nullable":true},"limit":{"type":"number","format":"double","description":"The maximum resource allocation for this org-unit. Set to null for unlimited.","nullable":true},"overQuotaWeight":{"type":"number","format":"double","description":"The weight assigned to determine the org-unit's share of over-quota resources within its rank. When multiple org-units share the same rank in a node pool, resources are distributed proportionally based on their weights. Valid values: 1–20. Requires over-quota weight to be enabled. When enabled, the default is 2. See [GPU over quota](https://run-ai-docs.nvidia.com/self-hosted/2.25/platform-management/aiinitiatives/organization/projects#gpu-over-quota) for more details.\n","nullable":true}}},"units":{"type":"string","description":"The unit of measurement for CPU memory values.","enum":["Mib","MB","GB"]},"Project":{"allOf":[{"$ref":"#/components/schemas/DataUpdatableFields"},{"type":"object","required":["id","name","parentId","createdAt","updatedAt","totalResources","effective","status","description","enforceRunaiScheduler","clusterId","resources"],"properties":{"id":{"type":"string"},"name":{"type":"string"},"clusterId":{"$ref":"#/components/schemas/ClusterId"},"parentId":{"type":"string","description":"department parent uuid"},"requestedNamespace":{"type":"string","description":"the project's namespace only if requested","nullable":true},"enforceRunaiScheduler":{"type":"boolean","description":"a flag to enforce that all pods in this namespace will be scheduled with runai-scheduler. Supported for cluster v2.21+"},"status":{"$ref":"#/components/schemas/ProjectStatus"},"totalResources":{"$ref":"#/components/schemas/TotalResources"},"createdAt":{"type":"string","format":"date-time"},"updatedAt":{"type":"string","format":"date-time"},"createdBy":{"type":"string"},"updatedBy":{"type":"string"},"parent":{"$ref":"#/components/schemas/DepartmentProjectParent"},"effective":{"$ref":"#/components/schemas/ProjectEffective"},"overtimeData":{"$ref":"#/components/schemas/OvertimeData"},"resources":{"type":"array","items":{"$ref":"#/components/schemas/Resources"},"description":"Resources assigned to this Organization per Node Pool"}}}]},"ClusterId":{"description":"The id of the cluster.","type":"string","format":"uuid"},"ProjectStatus":{"type":"object","properties":{"namespace":{"type":"string","description":"the project's namespace","nullable":true},"phase":{"$ref":"#/components/schemas/ProjectPhase","description":"the project's phase"},"phaseMessage":{"type":"string","description":"the project's phase message","nullable":true},"lastUpdatedTime":{"type":"string","format":"date-time","nullable":true},"nodePoolQuotaStatuses":{"type":"array","items":{"$ref":"#/components/schemas/QuotaStatusNodePool"}},"quotaStatus":{"$ref":"#/components/schemas/QuotaStatus"},"additionalStatusData":{"nullable":true,"type":"object","additionalProperties":true}}},"ProjectPhase":{"type":"string","enum":["Creating","Updating","Deleting","Deleted","Initializing","Ready","NotReady","Unknown"]},"QuotaStatusNodePool":{"allOf":[{"$ref":"#/components/schemas/QuotaStatus"},{"type":"object","required":["nodePoolName","nodePoolId"],"properties":{"nodePoolName":{"type":"string","description":"The node pool name which the current quota status refers to"},"nodePoolId":{"type":"string","description":"The node pool id which the current quota status refers to"}}}]},"QuotaStatus":{"type":"object","description":"Sum of all quota statuses of all the node pools","properties":{"allocated":{"$ref":"#/components/schemas/QuotaStatusResource"},"allocatedNonPreemptible":{"$ref":"#/components/schemas/QuotaStatusResource"},"requested":{"$ref":"#/components/schemas/QuotaStatusResource"}}},"QuotaStatusResource":{"type":"object","properties":{"gpu":{"type":"number","format":"double","description":"The number of GPUs (allocated/requested/...)."},"cpu":{"type":"number","format":"double","description":"CPU in Millicores (allocated/requested/...)."},"memory":{"type":"number","format":"double","description":"Memory in MB (allocated/requested/...)."}}},"TotalResources":{"type":"object","properties":{"gpuQuota":{"type":"number","format":"double","description":"Total gpu quota of the org unit","nullable":true},"cpuQuota":{"type":"number","format":"double","description":"Total cpu quota of the org unit in Millicores","nullable":true},"memoryQuota":{"type":"number","format":"double","description":"Total memory quota of the org unit in MB","nullable":true}}},"DepartmentProjectParent":{"type":"object","nullable":true,"description":"Department or project parent","required":["id","name"],"properties":{"id":{"type":"string","format":"uuid"},"name":{"type":"string"},"parent":{"$ref":"#/components/schemas/DepartmentProjectParent"}}},"ProjectEffective":{"properties":{"schedulingRules":{"$ref":"#/components/schemas/SchedulingRules"},"defaultNodePools":{"description":"default order of node pools for workloads. will be enforced if no list is defined in workload policy","type":"array","nullable":true,"items":{"type":"string"}},"nodeTypes":{"$ref":"#/components/schemas/NodeTypesPerWorkload"}}},"OvertimeData":{"type":"object","properties":{"range24hData":{"type":"object","nullable":true,"allOf":[{"$ref":"#/components/schemas/OvertimeRangeData"}]},"range7dData":{"type":"object","nullable":true,"allOf":[{"$ref":"#/components/schemas/OvertimeRangeData"}]},"range30dData":{"type":"object","nullable":true,"allOf":[{"$ref":"#/components/schemas/OvertimeRangeData"}]}}},"OvertimeRangeData":{"type":"object","description":"Average data for the specified time range, or for the lifetime of the project/department if it exists for less than the time range.","properties":{"averageGpuAllocation":{"type":"number","format":"double","description":"The average gpu devices allocation of the project/department."},"averageGpuUtilization":{"type":"number","format":"double","description":"The average gpu utilization percentage of the project/department."},"averageGpuMemoryUtilization":{"type":"number","format":"double","description":"The average gpu memory utilization percentage of the project/department. Only available for cluster versions >= 2.22.","nullable":true},"updatedAt":{"type":"string","format":"date-time"}}},"Resources":{"required":["gpu"],"properties":{"nodePool":{"required":["id"],"properties":{"id":{"type":"string","description":"The ID of the node pool."},"name":{"type":"string","description":"The name of the node pool."}},"description":"The node pool to which this resource configuration applies.","type":"object","nullable":true},"gpu":{"required":["deserved"],"allOf":[{"$ref":"#/components/schemas/NonNullResource"},{"description":"Defines the GPU quota assignment, maximum GPU device allocation, and weight assigned that determines the fairshare of over-quota resources."}]},"cpu":{"type":"object","nullable":true,"allOf":[{"$ref":"#/components/schemas/Resource"},{"description":"Defines the CPU quota assignment in millicores (1000 millicores = 1 CPU core), maximum CPU allocation, and weight."}]},"memory":{"type":"object","nullable":true,"allOf":[{"$ref":"#/components/schemas/Resource"},{"type":"object","description":"Defines the CPU memory quota assignment, maximum allocation, and weight.","required":["units"],"properties":{"units":{"$ref":"#/components/schemas/units"}}}]},"rank":{"type":"string","nullable":true,"description":"The scheduling rank of this org-unit within the node pool. Determines the scheduling order of workloads between org-units. Workloads in higher-ranked org-units are scheduled before workloads in lower-ranked org-units. For example, all workloads in rank \"High\" will be scheduled before all workloads in rank \"Medium\".","default":"MediumLow"},"priority":{"deprecated":true,"description":"Deprecated. Use rank instead. The scheduling priority for workloads in this node pool.","type":"string","nullable":true}}},"Error":{"required":["code","message"],"properties":{"code":{"type":"integer","minimum":100,"maximum":599},"message":{"type":"string"},"details":{"type":"string"}}}},"responses":{"400BadRequest":{"description":"Bad request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401Unauthorized":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403Forbidden":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404NotFound":{"description":"The specified resource was not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503ServiceUnavailable":{"description":"unexpected error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"paths":{"/api/v1/org-unit/projects/{projectId}":{"put":{"summary":"Update project","operationId":"update_project","description":"Update project by Id","tags":["Projects"],"parameters":[{"$ref":"#/components/parameters/ProjectId"}],"requestBody":{"description":"Project to update.","required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProjectUpdateRequest"}}}},"responses":{"200":{"description":"Updated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Project"}}}},"400":{"$ref":"#/components/responses/400BadRequest"},"401":{"$ref":"#/components/responses/401Unauthorized"},"403":{"$ref":"#/components/responses/403Forbidden"},"404":{"$ref":"#/components/responses/404NotFound"},"503":{"$ref":"#/components/responses/503ServiceUnavailable"}}}}}}
```

## Delete project

> Delete a project

```json
{"openapi":"3.0.3","info":{"title":"NVIDIA Run:ai","version":"2.25"},"tags":[{"name":"Projects","description":"Projects implement resource allocation policies and create segregation between \ndifferent initiatives. It can represent a team, an individual, or an initiative that \nshares resources or has a specific resources budget (quota). \nSee [Projects](https://run-ai-docs.nvidia.com/self-hosted/2.25/platform-management/aiinitiatives/organization/projects) \nfor more information.\n"}],"servers":[{"url":"https://app.run.ai"}],"security":[{"bearerAuth":[]}],"components":{"securitySchemes":{"bearerAuth":{"type":"http","scheme":"bearer","bearerFormat":"JWT","description":"Bearer authentication"}},"parameters":{"ProjectId":{"name":"projectId","in":"path","required":true,"description":"The project id","schema":{"type":"string"}}},"responses":{"400BadRequest":{"description":"Bad request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401Unauthorized":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403Forbidden":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404NotFound":{"description":"The specified resource was not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500InternalServerError":{"description":"unexpected error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503ServiceUnavailable":{"description":"unexpected error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"schemas":{"Error":{"required":["code","message"],"properties":{"code":{"type":"integer","minimum":100,"maximum":599},"message":{"type":"string"},"details":{"type":"string"}}}}},"paths":{"/api/v1/org-unit/projects/{projectId}":{"delete":{"summary":"Delete project","operationId":"delete_project","description":"Delete a project","tags":["Projects"],"parameters":[{"$ref":"#/components/parameters/ProjectId"}],"responses":{"202":{"description":"Accepted"},"204":{"description":"Deleted"},"400":{"$ref":"#/components/responses/400BadRequest"},"401":{"$ref":"#/components/responses/401Unauthorized"},"403":{"$ref":"#/components/responses/403Forbidden"},"404":{"$ref":"#/components/responses/404NotFound"},"500":{"$ref":"#/components/responses/500InternalServerError"},"503":{"$ref":"#/components/responses/503ServiceUnavailable"}}}}}}
```

## Update project resources

> Update projects resources

```json
{"openapi":"3.0.3","info":{"title":"NVIDIA Run:ai","version":"2.25"},"tags":[{"name":"Projects","description":"Projects implement resource allocation policies and create segregation between \ndifferent initiatives. It can represent a team, an individual, or an initiative that \nshares resources or has a specific resources budget (quota). \nSee [Projects](https://run-ai-docs.nvidia.com/self-hosted/2.25/platform-management/aiinitiatives/organization/projects) \nfor more information.\n"}],"servers":[{"url":"https://app.run.ai"}],"security":[{"bearerAuth":[]}],"components":{"securitySchemes":{"bearerAuth":{"type":"http","scheme":"bearer","bearerFormat":"JWT","description":"Bearer authentication"}},"parameters":{"ProjectId":{"name":"projectId","in":"path","required":true,"description":"The project id","schema":{"type":"string"}}},"schemas":{"ResourcesUpdateRequest":{"type":"array","items":{"$ref":"#/components/schemas/ResourcesNullable"},"description":"Resources assigned to this Project per Node Pool"},"ResourcesNullable":{"properties":{"nodePool":{"required":["id"],"properties":{"id":{"type":"string","description":"The ID of the node pool."},"name":{"type":"string","description":"The name of the node pool."}},"description":"The node pool to which this resource configuration applies.","type":"object","nullable":true},"gpu":{"allOf":[{"$ref":"#/components/schemas/NonNullResource"},{"description":"Defines the GPU quota assignment, maximum GPU device allocation, and weight assigned that determines the fairshare of over-quota resources."}]},"cpu":{"type":"object","nullable":true,"allOf":[{"$ref":"#/components/schemas/Resource"},{"description":"Defines the CPU quota assignment in millicores (1000 millicores = 1 CPU core), maximum CPU allocation, and weight."}]},"memory":{"type":"object","nullable":true,"allOf":[{"$ref":"#/components/schemas/Resource"},{"type":"object","description":"Defines the CPU memory quota assignment, maximum allocation, and weight.","required":["units"],"properties":{"units":{"$ref":"#/components/schemas/units"}}}]},"rank":{"type":"string","nullable":true,"description":"The scheduling rank of this org-unit within the node pool. Determines the scheduling order of workloads between org-units. Workloads in higher-ranked org-units are scheduled before workloads in lower-ranked org-units. For example, all workloads in rank \"High\" will be scheduled before all workloads in rank \"Medium\".","default":"MediumLow"},"priority":{"deprecated":true,"description":"Deprecated. Use rank instead. The scheduling priority for workloads in this node pool.","type":"string","nullable":true}}},"NonNullResource":{"properties":{"deserved":{"type":"number","format":"double","description":"The GPU quota assigned to this org-unit.","default":0},"limit":{"type":"number","format":"double","description":"The maximum GPU device allocation the org-unit can get from this node pool, representing the maximum sum of assigned quota and over-quota GPUs. Set to null for unlimited.","nullable":true},"overQuotaWeight":{"type":"number","format":"double","description":"The weight assigned to determine the org-unit's share of over-quota resources within its rank. When multiple org-units share the same rank in a node pool, resources are distributed proportionally based on their weights. Valid values: 1–20. Requires over-quota weight to be enabled. When enabled, the default is 2. See [GPU over quota](https://run-ai-docs.nvidia.com/self-hosted/2.25/platform-management/aiinitiatives/organization/projects#gpu-over-quota) for more details.\n","nullable":true}}},"Resource":{"properties":{"deserved":{"type":"number","format":"double","description":"The resource quota assigned to this org-unit.","nullable":true},"limit":{"type":"number","format":"double","description":"The maximum resource allocation for this org-unit. Set to null for unlimited.","nullable":true},"overQuotaWeight":{"type":"number","format":"double","description":"The weight assigned to determine the org-unit's share of over-quota resources within its rank. When multiple org-units share the same rank in a node pool, resources are distributed proportionally based on their weights. Valid values: 1–20. Requires over-quota weight to be enabled. When enabled, the default is 2. See [GPU over quota](https://run-ai-docs.nvidia.com/self-hosted/2.25/platform-management/aiinitiatives/organization/projects#gpu-over-quota) for more details.\n","nullable":true}}},"units":{"type":"string","description":"The unit of measurement for CPU memory values.","enum":["Mib","MB","GB"]},"Resources":{"required":["gpu"],"properties":{"nodePool":{"required":["id"],"properties":{"id":{"type":"string","description":"The ID of the node pool."},"name":{"type":"string","description":"The name of the node pool."}},"description":"The node pool to which this resource configuration applies.","type":"object","nullable":true},"gpu":{"required":["deserved"],"allOf":[{"$ref":"#/components/schemas/NonNullResource"},{"description":"Defines the GPU quota assignment, maximum GPU device allocation, and weight assigned that determines the fairshare of over-quota resources."}]},"cpu":{"type":"object","nullable":true,"allOf":[{"$ref":"#/components/schemas/Resource"},{"description":"Defines the CPU quota assignment in millicores (1000 millicores = 1 CPU core), maximum CPU allocation, and weight."}]},"memory":{"type":"object","nullable":true,"allOf":[{"$ref":"#/components/schemas/Resource"},{"type":"object","description":"Defines the CPU memory quota assignment, maximum allocation, and weight.","required":["units"],"properties":{"units":{"$ref":"#/components/schemas/units"}}}]},"rank":{"type":"string","nullable":true,"description":"The scheduling rank of this org-unit within the node pool. Determines the scheduling order of workloads between org-units. Workloads in higher-ranked org-units are scheduled before workloads in lower-ranked org-units. For example, all workloads in rank \"High\" will be scheduled before all workloads in rank \"Medium\".","default":"MediumLow"},"priority":{"deprecated":true,"description":"Deprecated. Use rank instead. The scheduling priority for workloads in this node pool.","type":"string","nullable":true}}},"Error":{"required":["code","message"],"properties":{"code":{"type":"integer","minimum":100,"maximum":599},"message":{"type":"string"},"details":{"type":"string"}}}},"responses":{"400BadRequest":{"description":"Bad request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401Unauthorized":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403Forbidden":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404NotFound":{"description":"The specified resource was not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503ServiceUnavailable":{"description":"unexpected error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"paths":{"/api/v1/org-unit/projects/{projectId}/resources":{"put":{"summary":"Update project resources","operationId":"update_project_resources","description":"Update projects resources","tags":["Projects"],"parameters":[{"$ref":"#/components/parameters/ProjectId"}],"requestBody":{"description":"Project resources to update.","required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResourcesUpdateRequest"}}}},"responses":{"200":{"description":"Updated","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/Resources"}}}}},"400":{"$ref":"#/components/responses/400BadRequest"},"401":{"$ref":"#/components/responses/401Unauthorized"},"403":{"$ref":"#/components/responses/403Forbidden"},"404":{"$ref":"#/components/responses/404NotFound"},"503":{"$ref":"#/components/responses/503ServiceUnavailable"}}}}}}
```

## Patch project resources

> Partial updates to specific items in the list. Should be used for update one or more attributes of an item without modifying the entire resource.

```json
{"openapi":"3.0.3","info":{"title":"NVIDIA Run:ai","version":"2.25"},"tags":[{"name":"Projects","description":"Projects implement resource allocation policies and create segregation between \ndifferent initiatives. It can represent a team, an individual, or an initiative that \nshares resources or has a specific resources budget (quota). \nSee [Projects](https://run-ai-docs.nvidia.com/self-hosted/2.25/platform-management/aiinitiatives/organization/projects) \nfor more information.\n"}],"servers":[{"url":"https://app.run.ai"}],"security":[{"bearerAuth":[]}],"components":{"securitySchemes":{"bearerAuth":{"type":"http","scheme":"bearer","bearerFormat":"JWT","description":"Bearer authentication"}},"parameters":{"ProjectId":{"name":"projectId","in":"path","required":true,"description":"The project id","schema":{"type":"string"}}},"schemas":{"ResourcesUpdateRequest":{"type":"array","items":{"$ref":"#/components/schemas/ResourcesNullable"},"description":"Resources assigned to this Project per Node Pool"},"ResourcesNullable":{"properties":{"nodePool":{"required":["id"],"properties":{"id":{"type":"string","description":"The ID of the node pool."},"name":{"type":"string","description":"The name of the node pool."}},"description":"The node pool to which this resource configuration applies.","type":"object","nullable":true},"gpu":{"allOf":[{"$ref":"#/components/schemas/NonNullResource"},{"description":"Defines the GPU quota assignment, maximum GPU device allocation, and weight assigned that determines the fairshare of over-quota resources."}]},"cpu":{"type":"object","nullable":true,"allOf":[{"$ref":"#/components/schemas/Resource"},{"description":"Defines the CPU quota assignment in millicores (1000 millicores = 1 CPU core), maximum CPU allocation, and weight."}]},"memory":{"type":"object","nullable":true,"allOf":[{"$ref":"#/components/schemas/Resource"},{"type":"object","description":"Defines the CPU memory quota assignment, maximum allocation, and weight.","required":["units"],"properties":{"units":{"$ref":"#/components/schemas/units"}}}]},"rank":{"type":"string","nullable":true,"description":"The scheduling rank of this org-unit within the node pool. Determines the scheduling order of workloads between org-units. Workloads in higher-ranked org-units are scheduled before workloads in lower-ranked org-units. For example, all workloads in rank \"High\" will be scheduled before all workloads in rank \"Medium\".","default":"MediumLow"},"priority":{"deprecated":true,"description":"Deprecated. Use rank instead. The scheduling priority for workloads in this node pool.","type":"string","nullable":true}}},"NonNullResource":{"properties":{"deserved":{"type":"number","format":"double","description":"The GPU quota assigned to this org-unit.","default":0},"limit":{"type":"number","format":"double","description":"The maximum GPU device allocation the org-unit can get from this node pool, representing the maximum sum of assigned quota and over-quota GPUs. Set to null for unlimited.","nullable":true},"overQuotaWeight":{"type":"number","format":"double","description":"The weight assigned to determine the org-unit's share of over-quota resources within its rank. When multiple org-units share the same rank in a node pool, resources are distributed proportionally based on their weights. Valid values: 1–20. Requires over-quota weight to be enabled. When enabled, the default is 2. See [GPU over quota](https://run-ai-docs.nvidia.com/self-hosted/2.25/platform-management/aiinitiatives/organization/projects#gpu-over-quota) for more details.\n","nullable":true}}},"Resource":{"properties":{"deserved":{"type":"number","format":"double","description":"The resource quota assigned to this org-unit.","nullable":true},"limit":{"type":"number","format":"double","description":"The maximum resource allocation for this org-unit. Set to null for unlimited.","nullable":true},"overQuotaWeight":{"type":"number","format":"double","description":"The weight assigned to determine the org-unit's share of over-quota resources within its rank. When multiple org-units share the same rank in a node pool, resources are distributed proportionally based on their weights. Valid values: 1–20. Requires over-quota weight to be enabled. When enabled, the default is 2. See [GPU over quota](https://run-ai-docs.nvidia.com/self-hosted/2.25/platform-management/aiinitiatives/organization/projects#gpu-over-quota) for more details.\n","nullable":true}}},"units":{"type":"string","description":"The unit of measurement for CPU memory values.","enum":["Mib","MB","GB"]},"Resources":{"required":["gpu"],"properties":{"nodePool":{"required":["id"],"properties":{"id":{"type":"string","description":"The ID of the node pool."},"name":{"type":"string","description":"The name of the node pool."}},"description":"The node pool to which this resource configuration applies.","type":"object","nullable":true},"gpu":{"required":["deserved"],"allOf":[{"$ref":"#/components/schemas/NonNullResource"},{"description":"Defines the GPU quota assignment, maximum GPU device allocation, and weight assigned that determines the fairshare of over-quota resources."}]},"cpu":{"type":"object","nullable":true,"allOf":[{"$ref":"#/components/schemas/Resource"},{"description":"Defines the CPU quota assignment in millicores (1000 millicores = 1 CPU core), maximum CPU allocation, and weight."}]},"memory":{"type":"object","nullable":true,"allOf":[{"$ref":"#/components/schemas/Resource"},{"type":"object","description":"Defines the CPU memory quota assignment, maximum allocation, and weight.","required":["units"],"properties":{"units":{"$ref":"#/components/schemas/units"}}}]},"rank":{"type":"string","nullable":true,"description":"The scheduling rank of this org-unit within the node pool. Determines the scheduling order of workloads between org-units. Workloads in higher-ranked org-units are scheduled before workloads in lower-ranked org-units. For example, all workloads in rank \"High\" will be scheduled before all workloads in rank \"Medium\".","default":"MediumLow"},"priority":{"deprecated":true,"description":"Deprecated. Use rank instead. The scheduling priority for workloads in this node pool.","type":"string","nullable":true}}},"Error":{"required":["code","message"],"properties":{"code":{"type":"integer","minimum":100,"maximum":599},"message":{"type":"string"},"details":{"type":"string"}}}},"responses":{"400BadRequest":{"description":"Bad request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401Unauthorized":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403Forbidden":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404NotFound":{"description":"The specified resource was not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503ServiceUnavailable":{"description":"unexpected error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"paths":{"/api/v1/org-unit/projects/{projectId}/resources":{"patch":{"summary":"Patch project resources","operationId":"patch_project_resources","description":"Partial updates to specific items in the list. Should be used for update one or more attributes of an item without modifying the entire resource.","tags":["Projects"],"parameters":[{"$ref":"#/components/parameters/ProjectId"}],"requestBody":{"description":"Project resources to patch.","required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResourcesUpdateRequest"}}}},"responses":{"200":{"description":"Updated","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/Resources"}}}}},"400":{"$ref":"#/components/responses/400BadRequest"},"401":{"$ref":"#/components/responses/401Unauthorized"},"403":{"$ref":"#/components/responses/403Forbidden"},"404":{"$ref":"#/components/responses/404NotFound"},"503":{"$ref":"#/components/responses/503ServiceUnavailable"}}}}}}
```

## Get project metrics data.

> Retrieves project data metrics from the metrics database. Use in reporting and analysis tools.

```json
{"openapi":"3.0.3","info":{"title":"NVIDIA Run:ai","version":"2.25"},"tags":[{"name":"Projects","description":"Projects implement resource allocation policies and create segregation between \ndifferent initiatives. It can represent a team, an individual, or an initiative that \nshares resources or has a specific resources budget (quota). \nSee [Projects](https://run-ai-docs.nvidia.com/self-hosted/2.25/platform-management/aiinitiatives/organization/projects) \nfor more information.\n"}],"servers":[{"url":"https://app.run.ai"}],"security":[{"bearerAuth":[]}],"components":{"securitySchemes":{"bearerAuth":{"type":"http","scheme":"bearer","bearerFormat":"JWT","description":"Bearer authentication"}},"parameters":{"ProjectId":{"name":"projectId","in":"path","required":true,"description":"The project id","schema":{"type":"string"}},"OrgUnitMetricTypes":{"name":"metricType","in":"query","required":true,"description":"Specify which data to request.","explode":false,"schema":{"type":"array","maxItems":10,"items":{"$ref":"#/components/schemas/OrgUnitMetricType"}}},"StartRequired":{"name":"start","in":"query","description":"Start date of time range to fetch data in ISO 8601 timestamp format.","required":true,"schema":{"type":"string","format":"date-time"}},"EndRequired":{"name":"end","in":"query","description":"End date of time range to fetch data in ISO 8601 timestamp format.","required":true,"schema":{"type":"string","format":"date-time"}},"NumberOfSamples":{"name":"numberOfSamples","in":"query","description":"The number of samples to take in the specified time range.","required":false,"schema":{"type":"integer","maximum":1000,"minimum":0,"default":20}},"FilterByNodepoolName":{"name":"nodepoolName","in":"query","description":"Filter using the nodepool.","required":false,"schema":{"type":"string"}}},"schemas":{"OrgUnitMetricType":{"type":"string","description":"Specify which metric data to request.","enum":["GPU_QUOTA","CPU_QUOTA_MILLICORES","CPU_MEMORY_QUOTA_MB","GPU_ALLOCATION","CPU_ALLOCATION_MILLICORES","CPU_MEMORY_ALLOCATION_MB","GPU_MEMORY_UTILIZATION","GPU_UTILIZATION","CPU_UTILIZATION","CPU_MEMORY_UTILIZATION","WORKLOADS_COUNT"]},"MetricsResponse":{"type":"object","required":["measurements"],"properties":{"measurements":{"type":"array","items":{"$ref":"#/components/schemas/MeasurementResponse"}}}},"MeasurementResponse":{"type":"object","required":["type","values"],"properties":{"type":{"type":"string","description":"specifies what data returned"},"labels":{"type":"object","nullable":true,"description":"labels of the metric measurement","additionalProperties":{"type":"string"}},"values":{"type":"array","nullable":true,"items":{"type":"object","required":["value","timestamp"],"properties":{"value":{"type":"string"},"timestamp":{"type":"string","format":"date-time","nullable":true}}}}}},"Error":{"required":["code","message"],"properties":{"code":{"type":"integer","minimum":100,"maximum":599},"message":{"type":"string"},"details":{"type":"string"}}}},"responses":{"400BadRequest":{"description":"Bad request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401Unauthorized":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403Forbidden":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404NotFound":{"description":"The specified resource was not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500InternalServerError":{"description":"unexpected error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503ServiceUnavailable":{"description":"unexpected error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"paths":{"/api/v1/org-unit/projects/{projectId}/metrics":{"get":{"summary":"Get project metrics data.","operationId":"get_project_metrics","description":"Retrieves project data metrics from the metrics database. Use in reporting and analysis tools.","tags":["Projects"],"parameters":[{"$ref":"#/components/parameters/ProjectId"},{"$ref":"#/components/parameters/OrgUnitMetricTypes"},{"$ref":"#/components/parameters/StartRequired"},{"$ref":"#/components/parameters/EndRequired"},{"$ref":"#/components/parameters/NumberOfSamples"},{"$ref":"#/components/parameters/FilterByNodepoolName"}],"responses":{"200":{"description":"Executed successfully.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MetricsResponse"}},"text/csv":{}}},"207":{"description":"Partial success.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MetricsResponse"}}}},"400":{"$ref":"#/components/responses/400BadRequest"},"401":{"$ref":"#/components/responses/401Unauthorized"},"403":{"$ref":"#/components/responses/403Forbidden"},"404":{"$ref":"#/components/responses/404NotFound"},"500":{"$ref":"#/components/responses/500InternalServerError"},"503":{"$ref":"#/components/responses/503ServiceUnavailable"}}}}}}
```

## Get projects telemetry

> Get projects telemetry data by the given query parameters

```json
{"openapi":"3.0.3","info":{"title":"NVIDIA Run:ai","version":"2.25"},"tags":[{"name":"Projects","description":"Projects implement resource allocation policies and create segregation between \ndifferent initiatives. It can represent a team, an individual, or an initiative that \nshares resources or has a specific resources budget (quota). \nSee [Projects](https://run-ai-docs.nvidia.com/self-hosted/2.25/platform-management/aiinitiatives/organization/projects) \nfor more information.\n"}],"servers":[{"url":"https://app.run.ai"}],"security":[{"bearerAuth":[]}],"components":{"securitySchemes":{"bearerAuth":{"type":"http","scheme":"bearer","bearerFormat":"JWT","description":"Bearer authentication"}},"parameters":{"FilterByCluster":{"name":"clusterId","in":"query","description":"Filter using the Universally Unique Identifier (UUID) of the cluster.","required":false,"schema":{"type":"string","format":"uuid"}},"FilterByNodepoolId":{"name":"nodepoolId","in":"query","description":"Filter using the nodepool.","required":false,"schema":{"type":"string"}},"FilterByDepartment":{"name":"departmentId","in":"query","description":"Filter using the department id.","required":false,"schema":{"type":"string"}},"TelemetryGroupByProject":{"name":"groupBy","in":"query","description":"project fields to group the data by","explode":false,"required":false,"schema":{"type":"array","maxItems":2,"items":{"type":"string","enum":["ClusterId","NodepoolId","ParentId","ProjectId"]}}},"TelemetryType1":{"name":"telemetryType","in":"query","required":true,"description":"specifies what data to request","schema":{"$ref":"#/components/schemas/OrgUnitTelemetryType"}}},"schemas":{"OrgUnitTelemetryType":{"type":"string","description":"Select a telemetry type.","enum":["GPU_QUOTA","CPU_QUOTA","MEMORY_QUOTA","GPU_ALLOCATION","CPU_ALLOCATION","MEMORY_ALLOCATION","GPU_ALLOCATION_NON_PREEMPTIBLE","CPU_ALLOCATION_NON_PREEMPTIBLE","MEMORY_ALLOCATION_NON_PREEMPTIBLE"]},"TelemetryResponse":{"type":"object","required":["type","timestamp","values"],"properties":{"type":{"type":"string","description":"specifies what data returned"},"timestamp":{"type":"string","format":"date-time"},"values":{"type":"array","items":{"type":"object","required":["value"],"properties":{"value":{"type":"string"},"groups":{"type":"array","description":"columns the data is grouped by","maxItems":2,"items":{"type":"object","required":["key","value"],"properties":{"key":{"type":"string"},"value":{"type":"string"},"name":{"type":"string"}}}}}}}}},"Error":{"required":["code","message"],"properties":{"code":{"type":"integer","minimum":100,"maximum":599},"message":{"type":"string"},"details":{"type":"string"}}}},"responses":{"400BadRequest":{"description":"Bad request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401Unauthorized":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403Forbidden":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503ServiceUnavailable":{"description":"unexpected error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"paths":{"/api/v1/org-unit/projects/telemetry":{"get":{"summary":"Get projects telemetry","operationId":"get_projects_telemetry","description":"Get projects telemetry data by the given query parameters","tags":["Projects"],"parameters":[{"$ref":"#/components/parameters/FilterByCluster"},{"$ref":"#/components/parameters/FilterByNodepoolId"},{"$ref":"#/components/parameters/FilterByDepartment"},{"$ref":"#/components/parameters/TelemetryGroupByProject"},{"$ref":"#/components/parameters/TelemetryType1"}],"responses":{"200":{"description":"Executed successfully.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TelemetryResponse"}}}},"400":{"$ref":"#/components/responses/400BadRequest"},"401":{"$ref":"#/components/responses/401Unauthorized"},"403":{"$ref":"#/components/responses/403Forbidden"},"503":{"$ref":"#/components/responses/503ServiceUnavailable"}}}}}}
```

## Count projects

> count projects

```json
{"openapi":"3.0.3","info":{"title":"NVIDIA Run:ai","version":"2.25"},"tags":[{"name":"Projects","description":"Projects implement resource allocation policies and create segregation between \ndifferent initiatives. It can represent a team, an individual, or an initiative that \nshares resources or has a specific resources budget (quota). \nSee [Projects](https://run-ai-docs.nvidia.com/self-hosted/2.25/platform-management/aiinitiatives/organization/projects) \nfor more information.\n"}],"servers":[{"url":"https://app.run.ai"}],"security":[{"bearerAuth":[]}],"components":{"securitySchemes":{"bearerAuth":{"type":"http","scheme":"bearer","bearerFormat":"JWT","description":"Bearer authentication"}},"parameters":{"ProjectsFilterBy":{"name":"filterBy","in":"query","required":false,"description":"Filter results by a parameter. Use the format field-name operator value. Operators are == Equals, != Not equals, <= Less than or equal, >= Greater than or equal, =@ contains, !@ Does not contains, =^ Starts with and =$ Ends with. Dates are in ISO 8601 timestamp format and available for operators ==, !=, <= and >=.","schema":{"type":"array","maxItems":10,"items":{"type":"string","pattern":"^(name|clusterId|departmentId|parentId|parentName|phase|totalGpuQuota|gpuAllocated|createdAt|avgGpuAllocation24h|avgGpuUtilization24h|avgGpuMemoryUtilization24h|avgGpuAllocation7d|avgGpuUtilization7d|avgGpuMemoryUtilization7d|avgGpuAllocation30d|avgGpuUtilization30d|avgGpuMemoryUtilization30d)(==|!=|<=|>=|=@|!@|=\\^|=\\$).+$"}},"explode":false},"Search":{"name":"search","in":"query","required":false,"description":"Filter results by a free text search.","schema":{"type":"string"}}},"schemas":{"CountResponse":{"type":"object","required":["count"],"properties":{"count":{"type":"integer","format":"int64"}}},"Error":{"required":["code","message"],"properties":{"code":{"type":"integer","minimum":100,"maximum":599},"message":{"type":"string"},"details":{"type":"string"}}}},"responses":{"400BadRequest":{"description":"Bad request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401Unauthorized":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403Forbidden":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503ServiceUnavailable":{"description":"unexpected error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"paths":{"/api/v1/org-unit/projects/count":{"get":{"summary":"Count projects","operationId":"count_projects","description":"count projects","tags":["Projects"],"parameters":[{"$ref":"#/components/parameters/ProjectsFilterBy"},{"$ref":"#/components/parameters/Search"}],"responses":{"200":{"description":"ok","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CountResponse"}}}},"400":{"$ref":"#/components/responses/400BadRequest"},"401":{"$ref":"#/components/responses/401Unauthorized"},"403":{"$ref":"#/components/responses/403Forbidden"},"503":{"$ref":"#/components/responses/503ServiceUnavailable"}}}}}}
```

## Get projects node pool resources

> List projects node pool resources

```json
{"openapi":"3.0.3","info":{"title":"NVIDIA Run:ai","version":"2.25"},"tags":[{"name":"Projects","description":"Projects implement resource allocation policies and create segregation between \ndifferent initiatives. It can represent a team, an individual, or an initiative that \nshares resources or has a specific resources budget (quota). \nSee [Projects](https://run-ai-docs.nvidia.com/self-hosted/2.25/platform-management/aiinitiatives/organization/projects) \nfor more information.\n"}],"servers":[{"url":"https://app.run.ai"}],"security":[{"bearerAuth":[]}],"components":{"securitySchemes":{"bearerAuth":{"type":"http","scheme":"bearer","bearerFormat":"JWT","description":"Bearer authentication"}},"parameters":{"ProjectNodePoolResourcesFilterBy":{"name":"filterBy","in":"query","required":false,"description":"Filter results by a parameter. Use the format field-name operator value. Operators are == Equals, != Not equals, <= Less than or equal, >= Greater than or equal, =@ contains, !@ Does not contains, =^ Starts with and =$ Ends with. Dates are in ISO 8601 timestamp format and available for operators ==, !=, <= and >=.","schema":{"type":"array","maxItems":10,"items":{"type":"string","pattern":"^(nodePoolName|nodePoolId|parentId|orgUnitId|orgUnitName|rank|clusterId)(==|!=|<=|>=|=@|!@|=\\^|=\\$).+$"}},"explode":false},"ProjectNodePoolResourcesSortBy":{"name":"sortBy","in":"query","required":false,"description":"Sort results by a parameters.","schema":{"$ref":"#/components/schemas/ProjectNodePoolResourcesFilterSortFields"}},"SortOrder":{"name":"sortOrder","in":"query","required":false,"description":"Sort results in descending or ascending order.","schema":{"type":"string","enum":["asc","desc"],"default":"asc"}},"Offset":{"name":"offset","in":"query","required":false,"description":"The offset of the first item returned in the collection.","schema":{"type":"integer","format":"int32"}},"Limit":{"name":"limit","in":"query","required":false,"description":"The maximum number of entries to return.","schema":{"type":"integer","format":"int32","default":50,"minimum":1,"maximum":500}},"Search":{"name":"search","in":"query","required":false,"description":"Filter results by a free text search.","schema":{"type":"string"}}},"schemas":{"ProjectNodePoolResourcesFilterSortFields":{"type":"string","enum":["nodePoolName","nodePoolId","parentId","orgUnitId","orgUnitName","clusterId","gpuDeserved","gpuOverQuotaWeight"]},"ProjectNodePoolResources":{"type":"object","required":["id","orgUnitId","orgUnitName","parentId","nodePoolId","nodePoolName","resources","rank","clusterId"],"properties":{"id":{"description":"The unique ID of the resources.","type":"string"},"orgUnitId":{"description":"The project/department ID.","type":"string"},"orgUnitName":{"description":"The project/department name.","type":"string"},"parentId":{"type":"string"},"clusterId":{"type":"string"},"nodePoolId":{"type":"string"},"nodePoolName":{"type":"string"},"rank":{"type":"string"},"resources":{"$ref":"#/components/schemas/ResourcesPerNodePool"},"quotaStatus":{"$ref":"#/components/schemas/QuotaStatus"}}},"ResourcesPerNodePool":{"type":"object","properties":{"gpu":{"allOf":[{"$ref":"#/components/schemas/Resource"},{"description":"Defines the GPU quota assignment, maximum GPU device allocation, and weight assigned that determines the fairshare of over-quota resources."}]},"cpu":{"type":"object","nullable":true,"allOf":[{"$ref":"#/components/schemas/Resource"},{"description":"Defines the CPU quota assignment in millicores (1000 millicores = 1 CPU core), maximum CPU allocation, and weight."}]},"memory":{"type":"object","nullable":true,"allOf":[{"$ref":"#/components/schemas/Resource"},{"type":"object","description":"Defines the CPU memory quota assignment, maximum allocation, and weight.","required":["units"],"properties":{"units":{"$ref":"#/components/schemas/units"}}}]}}},"Resource":{"properties":{"deserved":{"type":"number","format":"double","description":"The resource quota assigned to this org-unit.","nullable":true},"limit":{"type":"number","format":"double","description":"The maximum resource allocation for this org-unit. Set to null for unlimited.","nullable":true},"overQuotaWeight":{"type":"number","format":"double","description":"The weight assigned to determine the org-unit's share of over-quota resources within its rank. When multiple org-units share the same rank in a node pool, resources are distributed proportionally based on their weights. Valid values: 1–20. Requires over-quota weight to be enabled. When enabled, the default is 2. See [GPU over quota](https://run-ai-docs.nvidia.com/self-hosted/2.25/platform-management/aiinitiatives/organization/projects#gpu-over-quota) for more details.\n","nullable":true}}},"units":{"type":"string","description":"The unit of measurement for CPU memory values.","enum":["Mib","MB","GB"]},"QuotaStatus":{"type":"object","description":"Sum of all quota statuses of all the node pools","properties":{"allocated":{"$ref":"#/components/schemas/QuotaStatusResource"},"allocatedNonPreemptible":{"$ref":"#/components/schemas/QuotaStatusResource"},"requested":{"$ref":"#/components/schemas/QuotaStatusResource"}}},"QuotaStatusResource":{"type":"object","properties":{"gpu":{"type":"number","format":"double","description":"The number of GPUs (allocated/requested/...)."},"cpu":{"type":"number","format":"double","description":"CPU in Millicores (allocated/requested/...)."},"memory":{"type":"number","format":"double","description":"Memory in MB (allocated/requested/...)."}}},"Error":{"required":["code","message"],"properties":{"code":{"type":"integer","minimum":100,"maximum":599},"message":{"type":"string"},"details":{"type":"string"}}}},"responses":{"400BadRequest":{"description":"Bad request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401Unauthorized":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403Forbidden":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503ServiceUnavailable":{"description":"unexpected error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"paths":{"/api/v1/org-unit/projects/node-pool-resources":{"get":{"summary":"Get projects node pool resources","operationId":"get_project_node_pool_resources","description":"List projects node pool resources","tags":["Projects"],"parameters":[{"$ref":"#/components/parameters/ProjectNodePoolResourcesFilterBy"},{"$ref":"#/components/parameters/ProjectNodePoolResourcesSortBy"},{"$ref":"#/components/parameters/SortOrder"},{"$ref":"#/components/parameters/Offset"},{"$ref":"#/components/parameters/Limit"},{"$ref":"#/components/parameters/Search"}],"responses":{"200":{"description":"ok","content":{"application/json":{"schema":{"type":"object","required":["nodePoolResources"],"properties":{"nodePoolResources":{"type":"array","items":{"$ref":"#/components/schemas/ProjectNodePoolResources"}},"next":{"type":"integer"}}}}}},"400":{"$ref":"#/components/responses/400BadRequest"},"401":{"$ref":"#/components/responses/401Unauthorized"},"403":{"$ref":"#/components/responses/403Forbidden"},"503":{"$ref":"#/components/responses/503ServiceUnavailable"}}}}}}
```

## Count projects node pool resources

> Count projects node pool resources

```json
{"openapi":"3.0.3","info":{"title":"NVIDIA Run:ai","version":"2.25"},"tags":[{"name":"Projects","description":"Projects implement resource allocation policies and create segregation between \ndifferent initiatives. It can represent a team, an individual, or an initiative that \nshares resources or has a specific resources budget (quota). \nSee [Projects](https://run-ai-docs.nvidia.com/self-hosted/2.25/platform-management/aiinitiatives/organization/projects) \nfor more information.\n"}],"servers":[{"url":"https://app.run.ai"}],"security":[{"bearerAuth":[]}],"components":{"securitySchemes":{"bearerAuth":{"type":"http","scheme":"bearer","bearerFormat":"JWT","description":"Bearer authentication"}},"parameters":{"ProjectNodePoolResourcesFilterBy":{"name":"filterBy","in":"query","required":false,"description":"Filter results by a parameter. Use the format field-name operator value. Operators are == Equals, != Not equals, <= Less than or equal, >= Greater than or equal, =@ contains, !@ Does not contains, =^ Starts with and =$ Ends with. Dates are in ISO 8601 timestamp format and available for operators ==, !=, <= and >=.","schema":{"type":"array","maxItems":10,"items":{"type":"string","pattern":"^(nodePoolName|nodePoolId|parentId|orgUnitId|orgUnitName|rank|clusterId)(==|!=|<=|>=|=@|!@|=\\^|=\\$).+$"}},"explode":false},"Search":{"name":"search","in":"query","required":false,"description":"Filter results by a free text search.","schema":{"type":"string"}}},"schemas":{"CountResponse":{"type":"object","required":["count"],"properties":{"count":{"type":"integer","format":"int64"}}},"Error":{"required":["code","message"],"properties":{"code":{"type":"integer","minimum":100,"maximum":599},"message":{"type":"string"},"details":{"type":"string"}}}},"responses":{"400BadRequest":{"description":"Bad request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401Unauthorized":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403Forbidden":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503ServiceUnavailable":{"description":"unexpected error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"paths":{"/api/v1/org-unit/projects/node-pool-resources/count":{"get":{"summary":"Count projects node pool resources","operationId":"count_project_node_pool_resources","description":"Count projects node pool resources","tags":["Projects"],"parameters":[{"$ref":"#/components/parameters/ProjectNodePoolResourcesFilterBy"},{"$ref":"#/components/parameters/Search"}],"responses":{"200":{"description":"ok","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CountResponse"}}}},"400":{"$ref":"#/components/responses/400BadRequest"},"401":{"$ref":"#/components/responses/401Unauthorized"},"403":{"$ref":"#/components/responses/403Forbidden"},"503":{"$ref":"#/components/responses/503ServiceUnavailable"}}}}}}
```

## Patch multiple projects node pool resources in batch.

> Partially updates node pool resource quotas for multiple projects in a single request.

```json
{"openapi":"3.0.3","info":{"title":"NVIDIA Run:ai","version":"2.25"},"tags":[{"name":"Projects","description":"Projects implement resource allocation policies and create segregation between \ndifferent initiatives. It can represent a team, an individual, or an initiative that \nshares resources or has a specific resources budget (quota). \nSee [Projects](https://run-ai-docs.nvidia.com/self-hosted/2.25/platform-management/aiinitiatives/organization/projects) \nfor more information.\n"}],"servers":[{"url":"https://app.run.ai"}],"security":[{"bearerAuth":[]}],"components":{"securitySchemes":{"bearerAuth":{"type":"http","scheme":"bearer","bearerFormat":"JWT","description":"Bearer authentication"}},"schemas":{"BatchPatchNodePoolResourcesRequest":{"type":"object","description":"Batch of node pool resources patch requests.","required":["patchRequests"],"properties":{"patchRequests":{"type":"array","minItems":1,"maxItems":100,"description":"Array of node pool resources patch requests.","items":{"$ref":"#/components/schemas/NodePoolResourcesPatchRequest"}}}},"NodePoolResourcesPatchRequest":{"type":"object","required":["orgUnitId","nodePoolId"],"properties":{"orgUnitId":{"description":"The project/department ID.","type":"string"},"nodePoolId":{"type":"string"},"rank":{"nullable":true,"type":"string"},"resources":{"$ref":"#/components/schemas/ResourcesPerNodePoolNullable"}}},"ResourcesPerNodePoolNullable":{"type":"object","nullable":true,"properties":{"gpu":{"type":"object","nullable":true,"allOf":[{"$ref":"#/components/schemas/Resource"},{"description":"Defines the GPU quota assignment, maximum GPU device allocation, and weight assigned that determines the fairshare of over-quota resources."}]},"cpu":{"type":"object","nullable":true,"allOf":[{"$ref":"#/components/schemas/Resource"},{"description":"Defines the CPU quota assignment in millicores (1000 millicores = 1 CPU core), maximum CPU allocation, and weight."}]},"memory":{"type":"object","nullable":true,"allOf":[{"$ref":"#/components/schemas/Resource"},{"type":"object","description":"Defines the CPU memory quota assignment, maximum allocation, and weight.","required":["units"],"properties":{"units":{"$ref":"#/components/schemas/units"}}}]}}},"Resource":{"properties":{"deserved":{"type":"number","format":"double","description":"The resource quota assigned to this org-unit.","nullable":true},"limit":{"type":"number","format":"double","description":"The maximum resource allocation for this org-unit. Set to null for unlimited.","nullable":true},"overQuotaWeight":{"type":"number","format":"double","description":"The weight assigned to determine the org-unit's share of over-quota resources within its rank. When multiple org-units share the same rank in a node pool, resources are distributed proportionally based on their weights. Valid values: 1–20. Requires over-quota weight to be enabled. When enabled, the default is 2. See [GPU over quota](https://run-ai-docs.nvidia.com/self-hosted/2.25/platform-management/aiinitiatives/organization/projects#gpu-over-quota) for more details.\n","nullable":true}}},"units":{"type":"string","description":"The unit of measurement for CPU memory values.","enum":["Mib","MB","GB"]},"BatchPatchProjectResourcesResponse":{"type":"object","required":["id","totalRequested","totalSuccessful","totalFailed"],"properties":{"id":{"type":"string","format":"uuid","description":"The unique ID of the batch operation."},"succeeded":{"type":"array","description":"Successfully patched project node pool resources results.","items":{"$ref":"#/components/schemas/ProjectNodePoolResources"}},"failed":{"type":"array","description":"Failed patch operations with the original payload and error details.","items":{"$ref":"#/components/schemas/FailedNodePoolResourcesPatchRequest"}},"totalRequested":{"type":"integer","description":"Total number of items requested in the batch."},"totalSuccessful":{"type":"integer","description":"Number of items successfully processed."},"totalFailed":{"type":"integer","description":"Number of items that failed."}}},"ProjectNodePoolResources":{"type":"object","required":["id","orgUnitId","orgUnitName","parentId","nodePoolId","nodePoolName","resources","rank","clusterId"],"properties":{"id":{"description":"The unique ID of the resources.","type":"string"},"orgUnitId":{"description":"The project/department ID.","type":"string"},"orgUnitName":{"description":"The project/department name.","type":"string"},"parentId":{"type":"string"},"clusterId":{"type":"string"},"nodePoolId":{"type":"string"},"nodePoolName":{"type":"string"},"rank":{"type":"string"},"resources":{"$ref":"#/components/schemas/ResourcesPerNodePool"},"quotaStatus":{"$ref":"#/components/schemas/QuotaStatus"}}},"ResourcesPerNodePool":{"type":"object","properties":{"gpu":{"allOf":[{"$ref":"#/components/schemas/Resource"},{"description":"Defines the GPU quota assignment, maximum GPU device allocation, and weight assigned that determines the fairshare of over-quota resources."}]},"cpu":{"type":"object","nullable":true,"allOf":[{"$ref":"#/components/schemas/Resource"},{"description":"Defines the CPU quota assignment in millicores (1000 millicores = 1 CPU core), maximum CPU allocation, and weight."}]},"memory":{"type":"object","nullable":true,"allOf":[{"$ref":"#/components/schemas/Resource"},{"type":"object","description":"Defines the CPU memory quota assignment, maximum allocation, and weight.","required":["units"],"properties":{"units":{"$ref":"#/components/schemas/units"}}}]}}},"QuotaStatus":{"type":"object","description":"Sum of all quota statuses of all the node pools","properties":{"allocated":{"$ref":"#/components/schemas/QuotaStatusResource"},"allocatedNonPreemptible":{"$ref":"#/components/schemas/QuotaStatusResource"},"requested":{"$ref":"#/components/schemas/QuotaStatusResource"}}},"QuotaStatusResource":{"type":"object","properties":{"gpu":{"type":"number","format":"double","description":"The number of GPUs (allocated/requested/...)."},"cpu":{"type":"number","format":"double","description":"CPU in Millicores (allocated/requested/...)."},"memory":{"type":"number","format":"double","description":"Memory in MB (allocated/requested/...)."}}},"FailedNodePoolResourcesPatchRequest":{"type":"object","properties":{"payload":{"$ref":"#/components/schemas/NodePoolResourcesPatchRequest"},"code":{"type":"integer","description":"HTTP error code."},"message":{"type":"string","description":"Error message."}}},"Error":{"required":["code","message"],"properties":{"code":{"type":"integer","minimum":100,"maximum":599},"message":{"type":"string"},"details":{"type":"string"}}}},"responses":{"400BadRequest":{"description":"Bad request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401Unauthorized":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403Forbidden":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500InternalServerError":{"description":"unexpected error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503ServiceUnavailable":{"description":"unexpected error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"paths":{"/api/v1/org-unit/projects/node-pool-resources/batch-patch":{"post":{"summary":"Patch multiple projects node pool resources in batch.","operationId":"batch_patch_project_node_pool_resources","description":"Partially updates node pool resource quotas for multiple projects in a single request.","tags":["Projects"],"requestBody":{"description":"Batch of project resources patch requests.","required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BatchPatchNodePoolResourcesRequest"}}}},"responses":{"200":{"description":"Batch patch processed. Returns succeeded and failed items with totals and a batch id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BatchPatchProjectResourcesResponse"}}}},"400":{"$ref":"#/components/responses/400BadRequest"},"401":{"$ref":"#/components/responses/401Unauthorized"},"403":{"$ref":"#/components/responses/403Forbidden"},"500":{"$ref":"#/components/responses/500InternalServerError"},"503":{"$ref":"#/components/responses/503ServiceUnavailable"}}}}}}
```


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://run-ai-docs.nvidia.com/api/2.25/organizations/projects.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
