---
title: "Update a contact"
method: PATCH
path: "/v1/contacts/{id}"
tags: ["Contacts"]
---

# Update a contact

`PATCH /v1/contacts/{id}`

Updates an existing contact. Only provided fields will be updated. Returns 404 if the contact is in a workspace outside the API key scope.

## Path parameters

- `id` string, required

## Request body

- PublicUpdateContactDto
  - `firstName` string — First name of the contact
  - `lastName` string — Last name of the contact
  - `email` string — Email address of the contact
  - `company` string — Company name
  - `city` string — City
  - `country` string — Country
  - `url` string — Website URL
  - `linkedinUrl` string — LinkedIn profile URL
  - `linkedinSalesUrl` string — LinkedIn Sales Navigator URL
  - `role` string — Role / job title
  - `allowPhoneCalls` boolean — Whether the contact accepts phone calls
  - `phoneNumbers` string[] — Phone numbers in E.164 format. If provided, replaces all existing phone numbers.
  - `customFields` object — Custom field values keyed by the custom field **slug** (the stable, immutable identifier returned by GET /custom-fields). Only provided keys are updated; omit to leave existing values untouched. Custom fields must already exist for the team. For backwards compatibility this endpoint also accepts keys matching the custom field **name**, but this fallback is deprecated and will be removed in a future release — migrate your integrations to use slugs.

## Response `200`

The updated contact

- PublicContactDto
  - `id` string, required
  - `firstName` string, required
  - `lastName` string, required
  - `email` object, nullable
  - `company` object, nullable
  - `city` object, nullable
  - `country` object, nullable
  - `url` object, nullable
  - `linkedinUrl` object, nullable
  - `linkedinSalesUrl` object, nullable
  - `role` object, nullable
  - `allowPhoneCalls` boolean, required
  - `callCount` number, required
  - `lastCallAt` string, date-time, nullable
  - `teamId` string, required
  - `phoneNumbers` string[], required
  - `customFields` object, required
  - `createdAt` string, date-time, required
  - `updatedAt` string, date-time, required
  - `lastModificationSource` 'SKIPCALL' | 'API', required

## Other responses

- `400` — Invalid input data
- `401` — Invalid or missing API key
- `403` — Subscription required or plan not eligible
- `404` — Contact not found or outside API key scope

---

[API](https://skmtc.dev/skipcall/apis/skipcall-public-api.md) · [All operations](https://skmtc.dev/skipcall/apis/skipcall-public-api/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/skipcall/skipcall-public-api/revisions/f594352719bd/schema)
