curl --request PATCH \
--url https://brew.new/api/v1/contacts/{email} \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"fields": {
"firstName": "Janet",
"plan": "scale"
}
}
'{
"contact": {
"email": "jane@example.com",
"firstName": "Janet",
"lastName": "Doe",
"subscribed": true,
"validationStatus": "valid",
"verificationStatus": "valid",
"suppressed": false,
"suppressedReason": null,
"consent": {
"source": "form",
"capturedAt": "2026-04-08T12:00:00.000Z",
"policyVersion": "2026-03"
},
"createdAt": "2026-04-08T12:00:00.000Z",
"updatedAt": "2026-04-08T12:05:00.000Z",
"importId": null,
"customFields": {
"plan": "enterprise",
"revenue": 4200
}
},
"updated": [
"firstName",
"plan",
"consent"
]
}Update a contact
Patches fields on the contact ({ fields: { <name>: <value> } } — core columns or custom fields) and/or records marketing consent provenance ({ consent: { source, capturedAt?, policyVersion?, evidence? } }, never re-subscribing an opt-out). Send one or both. Returns { contact, updated } where updated lists the field names that changed (consent included).
curl --request PATCH \
--url https://brew.new/api/v1/contacts/{email} \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"fields": {
"firstName": "Janet",
"plan": "scale"
}
}
'{
"contact": {
"email": "jane@example.com",
"firstName": "Janet",
"lastName": "Doe",
"subscribed": true,
"validationStatus": "valid",
"verificationStatus": "valid",
"suppressed": false,
"suppressedReason": null,
"consent": {
"source": "form",
"capturedAt": "2026-04-08T12:00:00.000Z",
"policyVersion": "2026-03"
},
"createdAt": "2026-04-08T12:00:00.000Z",
"updatedAt": "2026-04-08T12:05:00.000Z",
"importId": null,
"customFields": {
"plan": "enterprise",
"revenue": 4200
}
},
"updated": [
"firstName",
"plan",
"consent"
]
}Authorizations
Send your Brew API key as Authorization: Bearer brew_xxx.
Headers
The brand this request acts on. REQUIRED for organization-scoped credentials (otherwise 400 BRAND_ID_REQUIRED — there is no default brand); list ids with GET /v1/brands. Brand-scoped credentials may omit it, and sending a different brand returns 403 BRAND_SCOPE_MISMATCH. A brand outside your organization returns 404 BRAND_NOT_FOUND.
1 - 64Path Parameters
The contact’s email address (URL-encoded). Email is the contact primary key.
"jane%40example.com"
Body
Was this page helpful?