PATCH /v1/contacts/{id}
Partially updates a contact. Only fields included in the request body are changed. Requires editor role or higher.

Parameters

Authorization
string
required
Bearer <api_key>
id
string
required
The contact ID.
email
string
Updated email address. Triggers re-deduplication.
phone
string
Updated phone number in international format.
first_name
string
Updated first name.
last_name
string
Updated last name.
status
string
Updated lifecycle status: ACTIVE, UNSUBSCRIBED, BOUNCED, or BLOCKED.
Setting status to UNSUBSCRIBED or BLOCKED immediately suppresses the contact from future sends. Use this when syncing opt-out signals from an external source. For consent-based suppression, prefer the Consent API — it stores a timestamped audit trail.
tags
array
Replaces the contact’s tag list entirely. To add a single tag without removing others, fetch the contact first, append the tag, then send the full updated array.
custom_fields
object
Key-value pairs merged into the existing custom_fields object. Existing keys not included in this call are preserved.

Request

curl -sS -X PATCH "https://api.arowana.app/v1/contacts/c_a1b2c3d4" \
  -H "Authorization: Bearer $API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "tags": ["vip", "germany", "newsletter"],
    "custom_fields": { "loyalty_tier": "platinum" }
  }'

Response

{
  "id": "c_a1b2c3d4",
  "email": "jana@example.com",
  "phone": "+4917612345678",
  "first_name": "Jana",
  "last_name": "Müller",
  "status": "ACTIVE",
  "tags": ["vip", "germany", "newsletter"],
  "custom_fields": { "loyalty_tier": "platinum" },
  "updated_at": "2026-03-28T10:00:00Z"
}