# Update contact (/api-reference/contacts/updateContact)

`PATCH /contacts/{id}`

Base URL: `https://next-api.useplunk.com`

Update an existing contact's email, subscription state, or `data` fields.

## Path parameters

- `id`: string (required)

## Request body

- `email`: string (email) — Change the contact's email address. Returns 409 if another contact in the project already uses this email.
- `subscribed`: boolean — Update subscription state. Flipping this fires `contact.subscribed` or `contact.unsubscribed`.
- `data`: object — Patch contact data. `null` deletes a key, empty strings are ignored, primitives are stored. Reserved keys are silently filtered out.

Example:

```json
{
  "email": "user@example.com",
  "subscribed": false,
  "data": null
}
```

## Responses

### `200` — Contact updated

- `id`: string — Unique contact identifier
- `email`: string (email) — Contact email address
- `subscribed`: boolean — Subscription status
- `data`: object — Custom contact data fields
- `createdAt`: string (date-time)
- `updatedAt`: string (date-time)

```json
{
  "id": "string",
  "email": "user@example.com",
  "subscribed": false,
  "data": null,
  "createdAt": "2026-05-17T18:27:16.097Z",
  "updatedAt": "2026-05-17T18:27:16.097Z"
}
```

### `409` — An existing contact already uses the email you're trying to set.

## Example request

```bash
curl -X PATCH 'https://next-api.useplunk.com/contacts/{id}' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"email":"user@example.com","subscribed":false,"data":null}'
```
