solarOS Organization API

Organization API

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.

/api/v1/projects/{id}

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

projects:write

Parameters

NameInTypeDescription
idrequiredpathstringProject identifier returned by the Organization API.

Request body

objectrequired
FieldTypeDescription
namestringOptional unless marked required.
caseIdstring | nullOptional unless marked required.
expectedCaseIdstring | nullSupply the current Case ID when unlinking; stale or conflicting assignments return 409.
typestringIgnored compatibility input. Project Type is retired; use templateId for workflow selection.
statusDRAFT | ACTIVE | COMPLETED | CANCELLED | CLOSEDOptional unless marked required.
priorityLOW | MEDIUM | HIGH | URGENTOptional unless marked required.
descriptionstring | nullOptional unless marked required.
targetEndDatestring | nullOptional unless marked required.
customFieldsobjectField Values keyed by savedIdentity from GET /api/v1/schema.
updateprojectRequest
{
  "status": "ACTIVE",
  "priority": "HIGH",
  "customFields": {
    "permitJurisdiction": "San Francisco"
  }
}

Responses

200

Updated Project envelope

#/components/schemas/OrgApiResourceEnvelope

400

Validation error

#/components/schemas/OrgApiError

401

Missing or invalid organization API key

#/components/schemas/OrgApiError

402

Organization billing access or an endpoint-specific business quota denied the request

#/components/schemas/OrgApiError

403

Missing required scope: projects:write

#/components/schemas/OrgApiError

404

Not found

#/components/schemas/OrgApiError

409

Conflict, such as finishing a project that has an open hold

#/components/schemas/OrgApiError

429

Rate limit exceeded

#/components/schemas/OrgApiError

Errors

400 Validation error401 Missing or invalid organization API key402 Organization billing access or an endpoint-specific business quota denied the request403 Missing required scope: projects:write404 Not found409 Conflict, such as finishing a project that has an open hold429 Rate limit exceeded

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"}}'