---
title: "Update a contact"
method: PATCH
path: "/v1/contacts/{email}"
tags: ["Contacts"]
---

# Update a contact

`PATCH /v1/contacts/{email}`

Patches one or more fields on the contact (`{ fields: { <name>: <value> } }` — core columns or custom fields). Returns `{ contact, updated }` where `updated` lists the field names that changed.

## Path parameters

- `email` string, email, required — The contact’s email address (URL-encoded). Email is the contact primary key.

## Request body

- ContactsPatchRequest
  - `fields` object, required

## Response `200`

Patched.

- ContactsPatchResponse
  - `contact` object, required
    - `email` string, email, required
    - `firstName` string
    - `lastName` string
    - `subscribed` boolean
    - `validationStatus` 'valid' | 'risky' | 'invalid'
    - `verificationStatus` 'valid' | 'risky' | 'invalid' — Deprecated: legacy mirror of validationStatus. Will be removed; read validationStatus.
    - `suppressed` boolean
    - `suppressedReason` string, nullable
    - `lastValidatedAt` string, date-time
    - `validationDetails` object
      - `provider` 'brew', required
      - `reason` string
      - `didYouMean` string
      - `risk` string
      - `isDisposable` boolean
      - `isRole` boolean
    - `createdAt` string, date-time, required
    - `updatedAt` string, date-time, required
    - `importId` string, nullable
    - `customFields` object
  - `updated` string[], required

## Other responses

- `400` — The request body or query string was invalid (unknown key, wrong type, or missing required field). Strict schemas reject unknown keys — including `brandId`, which is always resolved from the API key.
- `401` — The API key was missing, invalid, or revoked.
- `403` — The caller does not have the required `contacts` permission.
- `404` — Contact not found in the API-key brand. Cross-brand ids intentionally surface as 404 (never 403) so the API does not leak cross-brand existence.
- `422` — Attempted to write a read-only core column.
- `429` — The request hit the rolling rate limit window.
- `500` — Unexpected internal error.

---

[API](https://skmtc.net/brew/apis/brew-public-api-v1.md) · [All operations](https://skmtc.net/brew/apis/brew-public-api-v1/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/brew/brew-public-api-v1/versions/db96cfedc6c5/schema)
