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

# Update custom field

`PUT /custom-fields/{id}/`

Endpoint for updating an existing custom field.

## Path parameters

- `id` string, required

## Headers

- `X-Wafeq-Idempotency-Key` string

## Request body

- ApiV1ExternalCustomFieldWrite
  - `apply_to` ApplyToEnum[], required — The groups this custom field applies to.
  - `config` union, required — The configuration of the custom field, containing field_type and metadata. The metadata structure depends on field_type: SELECT fields include a choices array, LOOKUP fields include an entity_type, and other types have empty metadata.
    - CustomFieldSelectModel
      - `field_type` 'SELECT', required
      - `metadata` CustomFieldSelectMetadataModel, required
        - `choices` ChoiceModel[], required
          - `label` string, required
          - `value` string
    - CustomFieldNumberModel
      - `field_type` 'NUMBER', required
      - `metadata` CustomFieldNumberMetadataModel
    - CustomFieldTextModel
      - `field_type` 'TEXT', required
      - `metadata` CustomFieldTextMetadataModel
    - CustomFieldLongTextModel
      - `field_type` 'LONG_TEXT', required
      - `metadata` CustomFieldLongTextMetadataModel
    - CustomFieldDateModel
      - `field_type` 'DATE', required
      - `metadata` CustomFieldDateMetadataModel
    - CustomFieldLookupModel
      - `field_type` 'LOOKUP', required
      - `metadata` CustomFieldLookupMetadataModel, required
        - `entity_type` 'EMPLOYEE' | 'USER', required
    - CustomFieldCalculatedModel
      - `field_type` 'CALCULATED', required
      - `metadata` CustomFieldCalculatedMetadataModel, required
        - `operands` string[], required
        - `operator` 'MULTIPLY', required
  - `is_active` boolean
  - `is_line_item_field` boolean
  - `is_visible` boolean
  - `name` string — The english name of the custom field.
  - `name_ar` string — The arabic name of the custom field.

## Response `200`

- ApiV1ExternalCustomFieldRead
  - `apply_to` ApplyToEnum[], required — The groups this custom field applies to.
  - `config` union, required — The configuration of the custom field, containing field_type and metadata. The metadata structure depends on field_type: SELECT fields include a choices array, LOOKUP fields include an entity_type, and other types have empty metadata.
    - CustomFieldSelectModel
      - `field_type` 'SELECT', required
      - `metadata` CustomFieldSelectMetadataModel, required
        - `choices` ChoiceModel[], required
          - `label` string, required
          - `value` string
    - CustomFieldNumberModel
      - `field_type` 'NUMBER', required
      - `metadata` CustomFieldNumberMetadataModel
    - CustomFieldTextModel
      - `field_type` 'TEXT', required
      - `metadata` CustomFieldTextMetadataModel
    - CustomFieldLongTextModel
      - `field_type` 'LONG_TEXT', required
      - `metadata` CustomFieldLongTextMetadataModel
    - CustomFieldDateModel
      - `field_type` 'DATE', required
      - `metadata` CustomFieldDateMetadataModel
    - CustomFieldLookupModel
      - `field_type` 'LOOKUP', required
      - `metadata` CustomFieldLookupMetadataModel, required
        - `entity_type` 'EMPLOYEE' | 'USER', required
    - CustomFieldCalculatedModel
      - `field_type` 'CALCULATED', required
      - `metadata` CustomFieldCalculatedMetadataModel, required
        - `operands` string[], required
        - `operator` 'MULTIPLY', required
  - `created_ts` string, date-time, required — The timestamp in UTC when the custom field was created.
  - `field_type` 'TEXT' | 'LONG_TEXT' | 'NUMBER' | 'DATE' | 'SELECT' | 'LOOKUP' | 'CALCULATED', required — * `TEXT` - TEXT * `LONG_TEXT` - LONG_TEXT * `NUMBER` - NUMBER * `DATE` - DATE * `SELECT` - SELECT * `LOOKUP` - LOOKUP * `CALCULATED` - CALCULATED Full information for [FieldTypeEnum](fieldtypeenum)
  - `id` string, required — The unique identifier of the custom field.
  - `is_active` boolean
  - `is_line_item_field` boolean
  - `modified_ts` string, date-time, required — The timestamp in UTC when the custom field was last modified.
  - `name` string
  - `name_ar` string

## Other responses

- `400` — Validation error (e.g., invalid config, field type change while in use, or choice removal while in use).
- `403` — Permission denied or addon limit reached.

---

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