Skip to content

Workspace API

Upsert Project

Add or update a workspace project with POST /workspace/projects/upsert.

Endpoint
POST https://api.parcelengineering.com/api/v1/workspace/projects/upsert

Adds a project to your workspace or updates its custom fields if it is already saved. Projects are identified by UUID only. There is no natural-key match for projects.

Upsert costs 0 credits.

Request body

Provide project_id to identify the project. All annotation fields are optional.

FieldTypeRequiredDescription
project_idstring (UUID)YesThe UUID from a Data API project record.
workspace_statusstring | nullNoYour workflow state (any string). null clears the value.
notesstring | nullNoFree-text notes. null clears the value.
tagsstring[]NoFull-replace tag set. Sending [] clears all tags.

Partial update semantics

  • Omitted fields are left unchanged. You can update workspace_status without touching notes or tags.
  • Explicit null clears a field. Sending "notes": null removes the existing note.
  • tags is full-replace. Sending "tags": ["seaport"] replaces the entire tag set, not merges it with the existing one.

Example

Upsert project by id
curl -X POST https://api.parcelengineering.com/api/v1/workspace/projects/upsert \
-H "Authorization: Bearer pcl_your_api_key" \
-H "Content-Type: application/json" \
-d '{
"project_id": "7b2e4d1f-0001-4c8e-af6b-000000000001",
"workspace_status": "watching",
"notes": "GC bid due Q3",
"tags": ["seaport", "mixed-use"]
}'

Response

Response
{
"data": {
"id": "7b2e4d1f-0001-4c8e-af6b-000000000001",
"name": "100 Seaport Boulevard",
"city": "Boston",
"state": "MA",
"stage": "under_construction",
"primary_use": "mixed_use",
"residential_units": 120,
"last_signal_at": "2026-06-01T00:00:00Z",
"workspace_status": "watching",
"notes": "GC bid due Q3",
"tags": ["seaport", "mixed-use"]
},
"metadata": { "credits": 0 }
}

Upsert costs 0 credits.