Updates a prospect: interest, stage, owner, room-access expiry, external references, project tags, or the legacy classification. Every deterministic validation of the body runs before the first write, so a malformed request changes nothing; the writes themselves are applied one field at a time and are not transactional — a concurrent change of the project's team or room state between them can leave earlier fields applied when a later one is refused.

​

Path Parameters

  • Project ID

  • Prospect ID

Headers

  • ETag value for optimistic concurrency control

Body·

required

Fields to update

Request model for updating a prospect.

  • Schedule when the prospect's room access expires. Accepts a relative ("7d", "1w"), named ("tomorrow", "next_week"), or ISO date/datetime value — must be in the future. An expiry is a deadline, so a date without a time is the START of that day, UTC. Only valid on a prospect connected to a room. Send null to clear a scheduled expiry. Omit to leave unchanged.

  • Single-value pipeline vocabulary kept for existing integrations: not_contacted, contacted, interested, not_interested, bidder. Prefer interest and stage. When sent together with them, interest and stage win.

  • External references for CRM integration. Replaces all existing external refs. Set to empty array to remove all external refs.

    Properties: 2
  • Your judgement of the prospect's appetite: interested, maybe, not_interested. Send null to clear it. Omit to leave unchanged.

    values
    interestedmaybenot_interested
  • Assign a team member as the prospect's owner. Send the member's user id, or "me" for the caller. Send null to unassign. Omit to leave unchanged.

  • Your labels on this prospect within this project. Replaces the whole list; send an empty array (or null) to clear it. Values are trimmed and de-duplicated (case-sensitive) and a multi-word value stays one label. Leaves tags — the contact's or company's network-wide tags — untouched. Omit to leave unchanged.

  • Correct the prospect's process stage: not_contacted, teaser, im, data_room, bid. The stage is normally derived from what has happened; setting it records a manual override (returned as stageOverride) that later events can still raise. Omit to leave unchanged; there is no null here — correct an override by sending another stage, or withdraw it with DELETE .../prospects/{id}/stage-override.

    values
    not_contactedteaserimdata_roombid
  • Why the stage was corrected. Only valid together with stage; kept with the override.

Responses

  • application/json
  • application/problem+json
  • application/problem+json
  • application/problem+json
  • application/problem+json
  • application/problem+json
  • application/problem+json
Request Example for patch/api/v1/projects/{projectId}/prospects/{id}
curl 'https://app.propstreet.com/api/v1/projects/{projectId}/prospects/{id}' \
  --request PATCH \
  --header 'Content-Type: application/json' \
  --header 'Authorization: Bearer YOUR_SECRET_TOKEN' \
  --data '{
  "interest": "interested",
  "stage": "not_contacted",
  "stageReason": null,
  "classification": null,
  "owner": null,
  "accessExpiry": null,
  "externalRefs": [
    {
      "namespace": "",
      "id": ""
    }
  ],
  "projectTags": [
    ""
  ]
}'
{
  "id": "string",
  "uri": null,
  "externalRefs": [
    {
      "namespace": "string",
      "id": "string"
    }
  ],
  "projectId": "string",
  "contactId": null,
  "companyId": null,
  "displayName": null,
  "organizationName": null,
  "status": "active",
  "interest": "interested",
  "stage": "not_contacted",
  "stageOverride": {
    "stage": "not_contacted",
    "setBy": {
      "id": "string",
      "name": "string"
    },
    "setAtUtc": "2026-10-16T16:23:10.054Z",
    "reason": null
  },
  "nextTask": {
    "id": "string",
    "type": "call",
    "dueDateUtc": "2026-10-16T16:23:10.054Z",
    "assignee": {
      "id": "string",
      "name": "string"
    },
    "overdue": true
  },
  "openTaskCount": 1,
  "owner": {
    "id": "string",
    "name": "string"
  },
  "capabilities": [
    "string"
  ],
  "tags": [
    "string"
  ],
  "projectTags": [
    "string"
  ],
  "teaser": {
    "acceptedUtc": null,
    "deadlineUtc": null
  },
  "createdUtc": "2026-10-16T16:23:10.054Z",
  "updatedUtc": "2026-10-16T16:23:10.054Z",
  "deletedUtc": null,
  "etag": "string",
  "changeType": null,
  "changeOrigin": null
}