---
title: "Update a company"
method: PATCH
path: "/companies/{id}"
tags: ["Objects"]
---

# Update a company

`PATCH /companies/{id}`

Updates an existing company. Only provided fields will be updated. When `tags` is provided, it replaces the full set. Custom field values use `cf_*` keys — see the [Custom fields](/api-v2/custom-fields) guide.

## Path parameters

- `id` string, required

## Request body

- CompanyUpdateInput
  - `name` string — Company name
  - `email` string, email, nullable — Email address
  - `phone` string — Phone number with country code
  - `taxNumber` string — Tax number
  - `website` string, uri, nullable — Website URL
  - `description` string — Description
  - `linkedin` string, uri, nullable — LinkedIn URL
  - `currency` string, nullable — 3-letter ISO currency code
  - `openingBalance` number — Opening balance
  - `showJobAmountToWorker` boolean — Whether job amounts are visible to field workers
  - `isClientPortalEnabled` boolean — Whether the client portal is enabled
  - `internalNotes` string — Internal notes
  - `stageId` string — Client stage ID
  - `ownerUserId` string — Owner user ID
  - `vendorId` string — Vendor ID
  - `sourceId` string — CRM source ID
  - `tags` string[] — Tag IDs (tag_ prefix). Replaces the full set when provided.
  - `billingAddress` BillingAddressInput
    - `city` string, nullable — City
    - `address` string, nullable — Street address
    - `landmark` string, nullable — Nearby landmark
    - `state` string, nullable — State or province
    - `country` string, nullable — Country code, ISO3 code, or country name
    - `postalCode` string, nullable — Postal code or ZIP code
  - `primaryContact` object — Optional primary contact fields to create or update

## Response `200`

OK

- Company
  - `id` string, required — Company ID
  - `name` string, required — Company name
  - `number` string, required — Auto-generated company number
  - `type` 'contact' | 'company', nullable — Record type (always company for this endpoint)
  - `email` string, nullable — Email address
  - `phone` string, nullable — Phone number
  - `taxNumber` string, nullable — Tax number
  - `website` string, nullable — Website URL
  - `description` string, nullable — Description
  - `stageId` string, nullable — Client stage ID
  - `stageName` string, nullable — Client stage label
  - `ownerUserId` string, nullable — Owner user ID
  - `crmSourceId` string, nullable — CRM source ID
  - `sourceName` string, nullable — CRM source name
  - `currency` string, nullable — Currency code
  - `openingBalance` number, required — Opening balance
  - `showJobAmountToWorker` boolean, required — Whether job amounts are visible to field workers
  - `isClientPortalEnabled` boolean, required — Whether the client portal is enabled
  - `internalNotes` string, nullable — Internal notes
  - `linkedin` string, nullable — LinkedIn URL
  - `createdAt` string, date-time — When the company was created
  - `updatedAt` string, date-time — When the company was last updated

## Other responses

- `400` — Validation error or bad request
- `401` — Missing or invalid API key
- `403` — Insufficient permission
- `404` — Resource not found
- `429` — Rate limit exceeded

---

[API](https://skmtc.net/heffl/apis/heffl-api-v2-beta.md) · [All operations](https://skmtc.net/heffl/apis/heffl-api-v2-beta/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/heffl/heffl-api-v2-beta/versions/27006cfef4d8/schema)
