Skip to main contentGET/v1/portal-referrals
Newest first, with the lead each became and who referred it; keyset pagination.
Access: Signed-in members only (web or Android session) — not for API keys. Permission leads.view.
Parameters
cursorquery- Id
Opaque record id.
limitquery- integer
Requestcurl -X GET 'https://api.propzolo.com/v1/portal-referrals' \
-H 'Authorization: Bearer pz_live_…'
Response example{
"data": [
{
"id": "cmusrceel0000q7kaafxqi1om",
"name": "string",
"status": "received",
"lead_id": "cmusrceel0000q7kaafxqi1om",
"note": "string",
"referrer": {
"id": "cmusrceel0000q7kaafxqi1om",
"name": "string"
},
"created_at": "2026-10-06T05:30:00.000Z"
}
],
"meta": {
"next_cursor": "string",
"has_more": true
}
}
Errors
401 No valid session or API key (missing, expired or revoked).403 The caller lacks the permission, API-key scope or support grant this operation needs.422 Invalid input; `error.fields` maps field paths to messages.429 Too many requests; retry after the Retry-After header.500 Unexpected error; quote `error.request_id` to support.
PATCH/v1/project-updates/{id}
Access: Signed-in members only (web or Android session) — not for API keys. Permission projects.edit.
Parameters
idpathrequired- Id
Opaque record id.
Request body
titlerequired- string
body- string or null
progress_pct- integer or null
publish- boolean
Publish now: buyers with a booking in the project see it.
Response · 200
metarequired- object
Requestcurl -X PATCH 'https://api.propzolo.com/v1/project-updates/{id}' \
-H 'Authorization: Bearer pz_live_…' \
-H 'Content-Type: application/json' \
-d '{"title":"string","body":"string","progress_pct":0,"publish":false}'
Response example{
"data": {
"id": "cmusrceel0000q7kaafxqi1om",
"project_id": "cmusrceel0000q7kaafxqi1om",
"title": "string",
"body": "string",
"progress_pct": 0,
"status": "draft",
"published_at": "2026-10-06T05:30:00.000Z",
"created_by_id": "cmusrceel0000q7kaafxqi1om",
"created_at": "2026-10-06T05:30:00.000Z",
"updated_at": "2026-10-06T05:30:00.000Z"
},
"meta": {}
}
Errors
401 No valid session or API key (missing, expired or revoked).403 The caller lacks the permission, API-key scope or support grant this operation needs.404 Not found — records of another company are reported the same way.409 A unique value already exists, a concurrent change won, or the Idempotency-Key is still in use or was sent with a different request.422 Invalid input; `error.fields` maps field paths to messages.429 Too many requests; retry after the Retry-After header.500 Unexpected error; quote `error.request_id` to support.
DELETE/v1/project-updates/{id}
Access: Signed-in members only (web or Android session) — not for API keys. Permission projects.edit.
Parameters
idpathrequired- Id
Opaque record id.
Response · 200
datarequired- object
data.idrequired- Id
Opaque record id.
data.deletedrequired- true
metarequired- object
Requestcurl -X DELETE 'https://api.propzolo.com/v1/project-updates/{id}' \
-H 'Authorization: Bearer pz_live_…'
Response example{
"data": {
"id": "cmusrceel0000q7kaafxqi1om",
"deleted": true
},
"meta": {}
}
Errors
401 No valid session or API key (missing, expired or revoked).403 The caller lacks the permission, API-key scope or support grant this operation needs.404 Not found — records of another company are reported the same way.422 Invalid input; `error.fields` maps field paths to messages.429 Too many requests; retry after the Retry-After header.500 Unexpected error; quote `error.request_id` to support.
GET/v1/projects/{id}/updates
Access: Signed-in members only (web or Android session) — not for API keys. Permission projects.view.
Parameters
idpathrequired- Id
Opaque record id.
Response · 200
metarequired- object
Requestcurl -X GET 'https://api.propzolo.com/v1/projects/{id}/updates' \
-H 'Authorization: Bearer pz_live_…'
Response example{
"data": [
{
"id": "cmusrceel0000q7kaafxqi1om",
"project_id": "cmusrceel0000q7kaafxqi1om",
"title": "string",
"body": "string",
"progress_pct": 0,
"status": "draft",
"published_at": "2026-10-06T05:30:00.000Z",
"created_by_id": "cmusrceel0000q7kaafxqi1om",
"created_at": "2026-10-06T05:30:00.000Z",
"updated_at": "2026-10-06T05:30:00.000Z"
}
],
"meta": {}
}
Errors
401 No valid session or API key (missing, expired or revoked).403 The caller lacks the permission, API-key scope or support grant this operation needs.404 Not found — records of another company are reported the same way.422 Invalid input; `error.fields` maps field paths to messages.429 Too many requests; retry after the Retry-After header.500 Unexpected error; quote `error.request_id` to support.
POST/v1/projects/{id}/updates
A draft, or published at once (`project_update.published` for automations).
Access: Signed-in members only (web or Android session) — not for API keys. Permission projects.edit.
Parameters
idpathrequired- Id
Opaque record id.
Request body
titlerequired- string
body- string or null
progress_pct- integer or null
publish- boolean
Publish now: buyers with a booking in the project see it.
Response · 201
metarequired- object
Requestcurl -X POST 'https://api.propzolo.com/v1/projects/{id}/updates' \
-H 'Authorization: Bearer pz_live_…' \
-H 'Content-Type: application/json' \
-d '{"title":"string","body":"string","progress_pct":0,"publish":false}'
Response example{
"data": {
"id": "cmusrceel0000q7kaafxqi1om",
"project_id": "cmusrceel0000q7kaafxqi1om",
"title": "string",
"body": "string",
"progress_pct": 0,
"status": "draft",
"published_at": "2026-10-06T05:30:00.000Z",
"created_by_id": "cmusrceel0000q7kaafxqi1om",
"created_at": "2026-10-06T05:30:00.000Z",
"updated_at": "2026-10-06T05:30:00.000Z"
},
"meta": {}
}
Errors
401 No valid session or API key (missing, expired or revoked).403 The caller lacks the permission, API-key scope or support grant this operation needs.404 Not found — records of another company are reported the same way.409 A unique value already exists, a concurrent change won, or the Idempotency-Key is still in use or was sent with a different request.422 Invalid input; `error.fields` maps field paths to messages.429 Too many requests; retry after the Retry-After header.500 Unexpected error; quote `error.request_id` to support.