Update a contact

PATCH
/v1/contacts/{id}

attributes is a merge (incoming keys overlay existing; keys not present are kept) — not a replace. status changes only affect marketing eligibility.

Authorization

bearerAuth
headerAuthorizationBearer <token>

API key sent as Authorization: Bearer <key>. Looked up by SHA-256 hash (email_core::sha256_hex) against api_keys.hash; revoked keys and keys belonging to a suspended tenant are rejected. See the top-level Authentication section for permission levels.

Path Parameters

id*string

Request Body

application/json
  1. body
attributes?

Flat schemaless attributes (email_core::validate_attributes): object only, at most 50 keys, ≤8 KiB serialized, and every value must be a string/number/bool/null — no nested objects or arrays.

Default{}
status?string
Value in"subscribed""unsubscribed""cleaned"

Response Body

Updated.

application/json
  1. response

The intentionally minimal response from create/patch (no attributes/source/timestamps).

id?string
email?string
status?string
Value in"subscribed""unsubscribed""cleaned"
curl -X PATCH "https://example.com/v1/contacts/string" \  -H "Content-Type: application/json" \  -d '{}'
{  "id": "string",  "email": "string",  "status": "subscribed"}