---
title: "Update custom field"
method: PUT
path: "/public/v1/custom-fields/{custom_field_id}/"
tags: ["Custom Fields"]
---

# Update custom field

`PUT /public/v1/custom-fields/{custom_field_id}/`

Update an existing custom field definition. `applies_to` and `company_ids` are replaced wholesale — send the full desired list. `field_type` cannot be changed after creation.

## Path parameters

- `custom_field_id` integer, required

## Request body

- PublicCustomFieldSchemaUpdateIn
  - `name` string, required
  - `description` string, nullable
  - `helper_text` string, nullable
  - `field_type` 'text' | 'number' | 'currency' | 'date' | 'boolean' | 'single_select' | 'multi_select' | 'link' | 'paragraph', required
  - `applies_to` AppliesToItemSchema[], required
    - `type` 'invoice' | 'bill' | 'direct_expense' | 'journal_entry' | 'vendor_prepayment' | 'vendor_credit' | 'vendor_payment' | 'vendor_refund' | 'customer_payment' | 'customer_prepayment' | 'customer_refund' | 'customer_deposit' | 'currency_revaluation' | 'contract' | 'fixed_asset' | 'customer' | 'vendor' | 'company' | 'sales_order' | 'cash_sale' | 'customer_credit', required
    - `is_active` boolean
    - `is_required` boolean
  - `default_value` union
    - string
    - string[]
  - `company_id` integer, nullable — Single company id this custom field is scoped to (merged into `company_ids`). Omit for an org-wide field.
  - `company_ids` integer[], nullable — List of company ids this custom field is scoped to. Omit for an org-wide field.
  - `is_active` boolean
  - `options` string[], nullable — Allowed values for single_select / multi_select fields

## Response `200`

OK

- PublicCustomFieldSchemaOut
  - `id` integer, required
  - `company_id` integer, nullable
  - `company_ids` integer[]
  - `name` string, required
  - `description` string, nullable
  - `helper_text` string, nullable
  - `field_type` 'text' | 'number' | 'currency' | 'date' | 'boolean' | 'single_select' | 'multi_select' | 'link' | 'paragraph', required
  - `applies_to` AppliesToItemSchema[]
    - `type` 'invoice' | 'bill' | 'direct_expense' | 'journal_entry' | 'vendor_prepayment' | 'vendor_credit' | 'vendor_payment' | 'vendor_refund' | 'customer_payment' | 'customer_prepayment' | 'customer_refund' | 'customer_deposit' | 'currency_revaluation' | 'contract' | 'fixed_asset' | 'customer' | 'vendor' | 'company' | 'sales_order' | 'cash_sale' | 'customer_credit', required
    - `is_active` boolean
    - `is_required` boolean
  - `default_value` union
    - string
    - string[]
  - `options` string[], nullable
  - `is_active` boolean, required

## Other responses

- `400` — Bad Request
- `404` — Not Found
- `422` — Unprocessable Content
- `500` — Internal Server Error

---

[API](https://skmtc.net/dualentry/apis/dualentry-public-api-2.md) · [All operations](https://skmtc.net/dualentry/apis/dualentry-public-api-2/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/dualentry/dualentry-public-api-2/versions/77cd3c6ec719/schema)
