---
title: "Full update a client"
method: PUT
path: "/v1/clients/{clientId}"
tags: ["Clients"]
---

# Full update a client

`PUT /v1/clients/{clientId}`

## Request

- Base URL: `https://api.frihet.io`
- URL: `https://api.frihet.io/v1/clients/{clientId}`
- Auth: API key in header `X-API-Key`

Replace all fields on an existing client. Returns `409 CLIENT_TAXID_EXISTS`
if the new `taxId` is already in use by another client in your workspace.

## Path parameters

- `clientId` string, required

## Request body

- ClientCreate
  - `name` string, required: Client name (person or company)
  - `email` string, email: Contact email
  - `phone` string: Phone number
  - `taxId` string: Tax identification number (NIF/CIF/VAT)
  - `address` Address: Structured address. Canonical fields are `province` and `zip`. The aliases `state` and `postalCode` are also accepted for backward compatibility.
    - `street` string
    - `city` string
    - `province` string: Province or state (canonical field)
    - `zip` string: Postal/ZIP code (canonical field)
    - `country` string
    - `state` string: Alias for `province` (backward compatibility)
    - `postalCode` string: Alias for `zip` (backward compatibility)
  - `integrationSource` 'hubspot' | 'pipedrive' | 'intercom' | 'mailchimp': Source integration when the client is imported from an external CRM or marketing tool.
  - `nextAction` ClientNextAction
    - `title` string, required: Current next step for this client.
    - `dueDate` string, date: Optional due date for the next action.
    - `status` 'open' | 'done', required: Whether the next action is still open or already completed.
    - `source` 'manual' | 'api' | 'integration' | 'system': Origin of the next action.
    - `createdAt` string, date-time
    - `updatedAt` string, date-time
    - `completedAt` string, date-time

## Response `200`

Client updated

- Client
  - `id` string: Unique identifier
  - `createdAt` string, date-time
  - `updatedAt` string, date-time
  - `name` string, required: Client name (person or company)
  - `email` string, email: Contact email
  - `phone` string: Phone number
  - `taxId` string: Tax identification number (NIF/CIF/VAT)
  - `address` Address: Structured address. Canonical fields are `province` and `zip`. The aliases `state` and `postalCode` are also accepted for backward compatibility.
    - `street` string
    - `city` string
    - `province` string: Province or state (canonical field)
    - `zip` string: Postal/ZIP code (canonical field)
    - `country` string
    - `state` string: Alias for `province` (backward compatibility)
    - `postalCode` string: Alias for `zip` (backward compatibility)
  - `integrationSource` 'hubspot' | 'pipedrive' | 'intercom' | 'mailchimp': Source integration when the client is imported from an external CRM or marketing tool.
  - `nextAction` ClientNextAction
    - `title` string, required: Current next step for this client.
    - `dueDate` string, date: Optional due date for the next action.
    - `status` 'open' | 'done', required: Whether the next action is still open or already completed.
    - `source` 'manual' | 'api' | 'integration' | 'system': Origin of the next action.
    - `createdAt` string, date-time
    - `updatedAt` string, date-time
    - `completedAt` string, date-time

## Other responses

- `400`: Bad request - invalid parameters or request body
- `401`: Authentication required or invalid API key
- `404`: Resource not found
- `409`: Another client with this taxId already exists in your workspace.
- `429`: Rate limit exceeded (100 requests per minute)
- `500`: Internal server error

---

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