Archive, unarchive, or supersede a note on a contact.
Body shape
PATCH /api/v1/network/contacts/123/notes/456
If-Match: "AAAAAAAAK0Q="
Content-Type: application/json
{ "action": "archive" }
PATCH /api/v1/network/contacts/123/notes/456
If-Match: "AAAAAAAAK0Q="
Content-Type: application/json
{ "action": "unarchive" }
PATCH /api/v1/network/contacts/123/notes/456
If-Match: "AAAAAAAAK0Q="
Content-Type: application/json
{
"action": "supersede",
"supersede": { "message": "Updated wording — discussed with the asset team." }
}
Semantics
-
archive soft-hides the note;
archivedAtis stamped. Idempotent: re-archiving an already-archived note is a no-op 204. -
unarchive clears
archivedAt. Fails (400) when the note has been superseded (caller must unarchive the head of the chain). -
supersede expires the predecessor and creates a new revision pointing back
at it via
supersedesActivityId. Unset payload fields inherit from the predecessor. -
When
action == "archive"or"unarchive", anysupersedepayload is ignored (not an error). - When
action == "supersede", thesupersedeobject must be present.
Retry safety
These PATCH endpoints are not replay-cached by Idempotency-Key. Use the
required If-Match header for retry safety. A concurrent revision makes the
stale retry fail with 412 instead of mutating the wrong note version.
- Type: stringidrequired
Contact ID
- Type: stringnote
Id requiredNote ID (the action id returned by the actions endpoint)
- Type: stringIf
- Match Required ETag value from a previous GET response. Missing -> 428; mismatched -> 412.
Action discriminator + optional supersede payload
Body for PATCH /api/v1/network/{contacts|companies}/{id}/notes/{noteId}.
Body-discriminated: action selects archive / unarchive / supersede; the
supersede object carries the new-revision payload when applicable and
is ignored for archive / unarchive.
- Type: stringactionrequired
Required verb. One of:
archive,unarchive,supersede. Unknown values return 400 ValidationFailed. - Type: object · nullablesupersede
Required when
action == "supersede"; ignored otherwise. Every field is a partial-update wrapper: omitted properties inherit from the predecessor, and explicitnullclears the field.
- 204
Note mutated successfully
- application/problem+json
- application/problem+json
- application/problem+json
- application/problem+json
- application/problem+json
- application/problem+json
- application/problem+json
curl 'https://app.propstreet.com/api/v1/network/contacts/{id}/notes/{noteId}' \
--request PATCH \
--header 'If-Match: ' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer YOUR_SECRET_TOKEN' \
--data '{
"action": "",
"supersede": {
"message": null,
"fileId": null,
"contentFormat": null
}
}'