Update a project
OpenAPI contract
- Method
- PATCH
- Path
/api/v1/projects/{id}- Security
- jwtBearer (bearer) OR automationKey (bearer)
- Response status
- 200 400 401 403 404 409 429 500
Request and response schemas
{
"requestBody": {
"application/json": {
"$ref": "#/components/schemas/UpdateProjectRequest"
}
},
"responses": {
"200": {
"description": "Project updated",
"content": {
"application/json": {
"$ref": "#/components/schemas/ProjectResponse"
}
}
},
"400": {
"description": "Invalid request",
"content": {
"application/json": {
"$ref": "#/components/schemas/RequestError"
}
}
},
"401": {
"description": "Authentication required or invalid",
"content": {
"application/json": {
"$ref": "#/components/schemas/SecurityError"
}
}
},
"403": {
"description": "Authenticated but not permitted",
"content": {
"application/json": {
"$ref": "#/components/schemas/SecurityError"
}
}
},
"404": {
"description": "Requested project or build was not found",
"content": {
"application/json": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"409": {
"description": "Request conflicts with current project state",
"content": {
"application/json": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"429": {
"description": "HTTP rate limit or API-key NCU usage limit exceeded",
"content": {
"application/json": {
"$ref": "#/components/schemas/RateLimitError"
}
}
},
"500": {
"description": "Unexpected server error",
"content": {
"application/json": {
"$ref": "#/components/schemas/ApiError"
}
}
}
}
}PATCH /api/v1/projects/{id} accepts a JWT or an nfy_ key with project:write; the caller must also have effective project:configure capability on the project. Omitted fields remain unchanged. Non-null name, description, defaultPlatforms, and defaultFeatures replace their saved values subject to the same maximum lengths as creation. A changed name must remain unique within the workspace ignoring case, or the request returns a conflict. Set defaults deliberately: an empty or blank default is treated as absent when a build resolves its configuration.
defaultModuleConfiguration stores the full backend-aware configuration, including target, LTO, NOL declarations and Structural settings. It is validated and normalized by the same configuration resolver used for builds. Use this field to save the complete configuration; a draft in the NOL dialog or analysis assistant does not save project defaults automatically. Keep 64-bit Structural seeds as decimal strings.
When both formats are supplied, explicit defaultModuleConfiguration is authoritative and updates the legacy fields to match. A later update that supplies only defaultPlatforms or defaultFeatures applies those changes to the stored configuration while preserving the backend and unrelated NOL declarations and Structural options.
PATCH /api/v1/projects/{id}
Authorization: Bearer <access token>
Content-Type: application/json
{"defaultFeatures":"native-llvm-direct-call"}