ghl_project_upsert_space_statuses
Replace the complete status set for a project space; omitted groups and statuses are removed.
Instructions
PROJECT MANAGEMENT API — hierarchy is spaces -> folders -> lists -> tasks (+ comments, space statuses, recurring tasks). Task batch-get is RBAC-filtered (inaccessible ids are omitted, not errors) and omits embedded subtasks. position is an opaque server-assigned lexorank string; there is no public reorder endpoint. Recurring tasks use owners/contactIds and rruleOptions.intervalType (task create uses assignees/contactId). Task search supports updatedAt filtering/sorting for incremental sync. The docs do not describe what a delete cascades to — treat every delete as destructive.
Update Statuses
Replaces the whole space status set. Send every group you want to keep — omitted groups and statuses are removed. There is no If-Match and no per-status route. A task that still uses a removed status key keeps that key until you update the task. key is the stable id; label is display text. Status color is any hex. Space, folder, and list color must be one of the 16 palette swatches. A task is complete when properties.statusGroup is done.
Endpoint: PUT /projects/spaces/{spaceId}/statuses (Version header: v3; source: v3/projects-v3.json)
OAuth scopes: projects/workspace.write
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| body | Yes | Request body (schema carried verbatim from the official OpenAPI spec). | |
| spaceId | Yes | Space id | |
| locationId | No | Location id. Required for APP channel (`?locationId=`). Ignored for OAuth/PIT (token location is used). Do not send in path, body, or headers. |