Update a contact
A partial update, never an upsert. A field you leave out keeps its stored value and an explicit `null` clears it, so `{"notes": null}` empties the notes while `{}` changes nothing. An address not in the book is a `404`.
Runs the real call against your workspace, with your own key.
PATCH /contacts/{email}
A partial update, never an upsert. A field you leave out keeps its stored value and an explicit null clears it, so {"notes": null} empties the notes while {} changes nothing. An address not in the book is a 404.
Example
Needs contacts:write. URL-encode the @.
curl -X PATCH "$OE/contacts/grace%40example.com" -H "$AUTH" -H 'content-type: application/json' -d '{ "name": "Grace Hopper", "notes": null}'{ "object": "contact", "email": "[email protected]", "name": "Grace Hopper", "source": "manual", "notes": null, "lastSeenAt": null, "createdAt": "2026-09-18T09:00:00.000Z", "updatedAt": "2026-09-18T09:04:00.000Z", "audiences": [ { "id": "aud_9f2c4b7e1a0d63d84c5f2e7b", "name": "All contacts", "builtin": "default" } ]}The address cannot be changed here. It is the identity, the path segment and the unique key of the book, so moving a contact to a new address is a delete and a create.
A contact recorded automatically stays auto after you give it a name. Naming it is not the same claim as somebody having saved it.
Audience membership is untouched. Use the audience routes for that.