---
title: "Update a contact"
description: "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`."
url: "https://openemail.uk/docs/api/contacts/update"
area: "API"
category: "Mailbox"
---

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

`PATCH /contacts/{email}`

## 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": "grace@example.com",
  "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.
