Skip to content

Merge patch (RFC 7396)

Connect’s PATCH endpoints follow RFC 7396 JSON Merge Patch. This applies anywhere you PATCH a resource with a partial body — most relevantly on PATCH /connect/table_entries/:id for the data and customFieldData fields.

Body has key with…Result
Non-null valueSet or replace the key
null valueDelete the key entirely
Key omittedLeave it untouched

For nested objects (e.g., inside customFieldData), the merge is deep — you can update a single nested field without overwriting siblings.

Starting state:

{
"data": {
"course": "Kids BJJ",
"preferredDay": "Saturday",
"notes": "Interested in beginner course"
}
}
PATCH /connect/table_entries/<id>
Content-Type: application/json
{ "data": { "preferredDay": "Monday" } }

Result: preferredDay updated, course and notes untouched.

{ "data": { "notes": null } }

Result: notes removed entirely. course and preferredDay untouched.

{ "data": { "preferredDay": "Monday", "notes": null } }

Both apply atomically.

Exception: contacts replaces, it doesn’t merge

Section titled “Exception: contacts replaces, it doesn’t merge”

contacts on PATCH /connect/table_entries/:id is not merge-patched. A given array is the complete set of people on the lead — anyone absent is taken off it. Omit contacts on updates that aren’t about people. See Contacts.

Changing somebody’s email or phone number is not a data patch either: identity keys in data are stored but read by nothing, and the Connect API does not edit a person’s channels.

Merge patch can’t express “replace data entirely” in a single request. If you need to clear all keys, you have to:

  1. List the existing keys (e.g., from a GET first).
  2. Send a PATCH with null for each key you want to delete.
  3. Send the new keys in the same PATCH.

In practice this almost never matters — you usually want to update or delete specific fields, not nuke the whole object.

  • Leads resource — primary place merge-patch shows up.
  • Workflows — common patch patterns (move to lead state, archive a value).