Skip to the documentation
API

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`.

PATCHapi.openemail.uk/contacts/{email}

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
curl -X PATCH "$OE/contacts/grace%40example.com" -H "$AUTH" -H 'content-type: application/json' -d '{  "name": "Grace Hopper",  "notes": null}'
Response
{  "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.