---
title: "Update a contact"
method: PUT
path: "/v1/contacts/update"
tags: ["Contacts"]
---

# Update a contact

`PUT /v1/contacts/update`

Update a contact by `email` or `userId`. You must provide one of these parameters.

If you want to update a contact's email address, the contact will first need a `userId` value. You can then make a request containing the `userId` field along with an updated email address.

This endpoint will create a contact if a matching contact does not already exist in your audience.

Provide either `email` or `userId` to identify the contact you want to update. If both are provided, the system will look for a contact with either a matching `email` or `userId` value. If a contact is found for one of the values (e.g. `email`), the other value (e.g. `userId`) will be updated. If a contact is not found, a new contact will be created using both `email` and `userId` values.

## Request body

- union
  - object
    - `email` string, required — The contact's email address.
    - `firstName` string — The contact's first name.
    - `lastName` string — The contact's last name.
    - `source` string — A custom source value to replace the default “API”.
    - `subscribed` boolean — Whether the contact will receive campaign and workflow emails. All new contacts are subscribed by default.
    - `userGroup` string — The contact's user group.
    - `userId` string — A unique user ID (for example, from an external application).
    - `mailingLists` MailingListSubscriptions — Manage mailing list subscriptions. Include key-value pairs of mailing list IDs and a `boolean` denoting if the contact should be added (`true`) or removed (`false`) from the list.
  - object
    - `email` string — The contact's email address.
    - `firstName` string — The contact's first name.
    - `lastName` string — The contact's last name.
    - `source` string — A custom source value to replace the default “API”.
    - `subscribed` boolean — Whether the contact will receive campaign and workflow emails. All new contacts are subscribed by default.
    - `userGroup` string — The contact's user group.
    - `userId` string, required — A unique user ID (for example, from an external application).
    - `mailingLists` MailingListSubscriptions — Manage mailing list subscriptions. Include key-value pairs of mailing list IDs and a `boolean` denoting if the contact should be added (`true`) or removed (`false`) from the list.

## Response `200`

Successful update.

- ContactSuccessResponse
  - `success` boolean, required
  - `id` string, required

## Other responses

- `400` — Bad request (e.g. `email` or `userId` are missing).
- `405` — Wrong HTTP request method.

## Changes

> 9 revisions in range; 1 not diffed, 3 could not be searched.

- **2026-07-21** `df77516a130a` — 2 breaking, 7 warning
  - added `#/components/schemas/ContactFields, subschema #2` to the request body `allOf` list
  - the request's body type/format changed from `object`/`` to ``/``
  - removed the request property `email`
  - removed the request property `firstName`
  - …5 more

[Change history](https://skmtc.dev/loops/apis/loops-openapi-spec/changes/v1/contacts/update/put.md)

---

[API](https://skmtc.dev/loops/apis/loops-openapi-spec.md) · [All operations](https://skmtc.dev/loops/apis/loops-openapi-spec/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/loops/loops-openapi-spec/revisions/8bd0098300ec/schema)
