---
title: "Update a contact of a recipient (PATCH alias)"
method: PATCH
path: "/api/v1/recipients/{recipient}/contacts/{contact}"
tags: ["Recipients"]
---

# Update a contact of a recipient (PATCH alias)

`PATCH /api/v1/recipients/{recipient}/contacts/{contact}`

## Request

- Base URL: `https://wardenpoint.com` (the document declares no server; this is the origin it was published from)
- URL: `https://wardenpoint.com/api/v1/recipients/{recipient}/contacts/{contact}`
- Auth: API key in header `X-API-Key`

Identical to PUT on the same path — including the fact that `value` must be sent even when it is not what you are changing. The verb is the misleading part here: omitting `value` from a PATCH is not "leave the address alone" but "no address", which is a 422 for most contact types and an erased address for the externally-bound ones. Read the PUT description before using this.

## Path parameters

- `recipient` string, uuid, required
- `contact` string, uuid, required

## Request body

- RecipientContactUpdateRequest: The contact type is fixed by the contact itself and cannot be changed — switching channel means deleting this contact and adding another.
  - `value` string: The new address. Effectively required: an absent value is read as an empty one, which only the externally-bound types accept. Same emptiness rules as on create.
  - `is_primary` boolean: Omit to leave the primary flag as it is. Sending true clears the flag on every other contact of the recipient.
  - `label` string, nullable: Short human note. Omit to keep the stored one; send an empty string to drop it. Sending a label replaces the whole stored metadata object of the contact.

## Response `200`

Updated contact.

- object
  - `data` RecipientContact: One delivery address of a recipient.
    - `uuid` string, uuid
    - `contact_type` string: Slug of the contact type — the same value the write endpoints accept.
    - `value` string: The address itself: a Telegram handle, a phone number in E.164, an email.
    - `is_primary` boolean: The contact preferred when a channel could use more than one of this recipient's addresses. At most one per recipient is primary.
    - `is_active` boolean: Flipped to false automatically after repeated delivery failures.
    - `is_verified` boolean: A bookkeeping flag an operator sets by hand. Nothing in delivery consults it — an unverified contact is used exactly like a verified one, so do not read this as "reachable". `is_active` is the flag that actually gates delivery.
    - `metadata` object, nullable: Free-form data stored with the contact, plus keys we derive ourselves (phone voice zone, the Teams and SIP binding). Returned so a read-modify-write cycle can send it back unchanged.

## Other responses

- `401`: API key missing, invalid, revoked or expired.
- `403`: API key lacks config.write, or the recipient belongs to another company.
- `404`: No such recipient, or the contact belongs to a different recipient.
- `422`: The value is missing for a type that requires one, does not match the contact type, or names an internal_sip extension that is missing or already taken.

---

[API](https://skmtc.dev/wardenpoint/apis/wardenpoint-api.md) · [All operations](https://skmtc.dev/wardenpoint/apis/wardenpoint-api/llms.txt) · [OpenAPI document](https://skmtc.dev/wardenpoint/apis/wardenpoint-api/revisions/259ee445728e?raw)
