Update a Project container
Updates narrow Project metadata and customFields. ownerId is create-only and is rejected on PATCH because Organization API v1 does not expose the staff reassignment action. status ON_HOLD is rejected: holds are placed in solarOS and never change status, and onHold reports them. Moving a project with an open hold to COMPLETED, CLOSED or CANCELLED returns 409 CONFLICT: resolve its holds in solarOS first. No-op PATCH returns changed=false and does not emit audit/domain events. The Project is returned with its scope money only for a key that also has quotes:content:read, as GET /v1/projects/{id} returns it.
Updates narrow Project metadata and customFields. ownerId is create-only and is rejected on PATCH because Organization API v1 does not expose the staff reassignment action. status ON_HOLD is rejected: holds are placed in solarOS and never change status, and onHold reports them. Moving a project with an open hold to COMPLETED, CLOSED or CANCELLED returns 409 CONFLICT: resolve its holds in solarOS first. No-op PATCH returns changed=false and does not emit audit/domain events. The Project is returned with its scope money only for a key that also has quotes:content:read, as GET /v1/projects/{id} returns it.
Update a Project container. Use an organization API key with projects:write. Check the response envelope and meta.requestId before triggering dependent workflow steps.
Required scopes
Parameters
| Name | In | Type | Description |
|---|---|---|---|
| idrequired | path | string | Project identifier returned by the Organization API. |
Request body
| Field | Type | Description |
|---|---|---|
| name | string | Optional unless marked required. |
| caseId | string | null | Optional unless marked required. |
| expectedCaseId | string | null | Supply the current Case ID when unlinking; stale or conflicting assignments return 409. |
| type | string | Ignored compatibility input. Project Type is retired; use templateId for workflow selection. |
| status | DRAFT | ACTIVE | COMPLETED | CANCELLED | CLOSED | Optional unless marked required. |
| priority | LOW | MEDIUM | HIGH | URGENT | Optional unless marked required. |
| description | string | null | Optional unless marked required. |
| targetEndDate | string | null | Optional unless marked required. |
| customFields | object | Field Values keyed by savedIdentity from GET /api/v1/schema. |
{
"status": "ACTIVE",
"priority": "HIGH",
"customFields": {
"permitJurisdiction": "San Francisco"
}
}Responses
Updated Project envelope
#/components/schemas/OrgApiResourceEnvelope
Validation error
#/components/schemas/OrgApiError
Missing or invalid organization API key
#/components/schemas/OrgApiError
Organization billing access or an endpoint-specific business quota denied the request
#/components/schemas/OrgApiError
Missing required scope: projects:write
#/components/schemas/OrgApiError
Not found
#/components/schemas/OrgApiError
Conflict, such as finishing a project that has an open hold
#/components/schemas/OrgApiError
Rate limit exceeded
#/components/schemas/OrgApiError
Errors
Static examples
curl -X PATCH "$SOLAROS_BASE_URL/api/v1/projects/$SOLAROS_PROJECT" \
-H "Authorization: Bearer $SOLAROS_API_KEY" \
-H "Content-Type: application/json" \
--data '{"status":"ACTIVE","priority":"HIGH","customFields":{"permitJurisdiction":"San Francisco"}}'