---
title: "Create Custom Field"
method: POST
path: "/custom_fields"
tags: ["custom_fields"]
---

# Create Custom Field

`POST /custom_fields`

## Request

- Base URL: `https://api.kobaltlabs.com` (the document declares no server; this is the origin it was published from)
- URL: `https://api.kobaltlabs.com/custom_fields`
- Auth: none declared

## Request body

- union
  - CustomFieldDropdownDefinition
    - `custom_field_id` string, uuid, nullable
    - `name` string, nullable
    - `description` string, nullable
    - `custom_field_type` 'INHERENT_RISK_LEVEL' | 'RESIDUAL_RISK_LEVEL' | 'CRITICALITY' | 'LIFECYCLE_STATUS'
    - `entity_type` 'VENDOR' | 'CANONICAL' | 'SERVICE' | 'ISSUE' | 'DISCLOSURE' | 'CONTRACT' | 'CONTACT'
    - `order_index` integer, nullable
    - `archived_at` string, date-time, nullable
    - `custom_field_definition_type` 'DROPDOWN'
    - `options` CustomFieldOptionDefinition[]
      - `option_id` string, uuid, nullable
      - `label` string, nullable
      - `hex_color` string, nullable
      - `order_index` integer, nullable
  - CustomFieldFreeTextDefinition
    - `custom_field_id` string, uuid, nullable
    - `name` string, nullable
    - `description` string, nullable
    - `custom_field_type` 'INHERENT_RISK_LEVEL' | 'RESIDUAL_RISK_LEVEL' | 'CRITICALITY' | 'LIFECYCLE_STATUS'
    - `entity_type` 'VENDOR' | 'CANONICAL' | 'SERVICE' | 'ISSUE' | 'DISCLOSURE' | 'CONTRACT' | 'CONTACT'
    - `order_index` integer, nullable
    - `archived_at` string, date-time, nullable
    - `custom_field_definition_type` 'FREE_TEXT'
  - CustomFieldNumberDefinition
    - `custom_field_id` string, uuid, nullable
    - `name` string, nullable
    - `description` string, nullable
    - `custom_field_type` 'INHERENT_RISK_LEVEL' | 'RESIDUAL_RISK_LEVEL' | 'CRITICALITY' | 'LIFECYCLE_STATUS'
    - `entity_type` 'VENDOR' | 'CANONICAL' | 'SERVICE' | 'ISSUE' | 'DISCLOSURE' | 'CONTRACT' | 'CONTACT'
    - `order_index` integer, nullable
    - `archived_at` string, date-time, nullable
    - `custom_field_definition_type` 'NUMBER'
  - CustomFieldDateDefinition
    - `custom_field_id` string, uuid, nullable
    - `name` string, nullable
    - `description` string, nullable
    - `custom_field_type` 'INHERENT_RISK_LEVEL' | 'RESIDUAL_RISK_LEVEL' | 'CRITICALITY' | 'LIFECYCLE_STATUS'
    - `entity_type` 'VENDOR' | 'CANONICAL' | 'SERVICE' | 'ISSUE' | 'DISCLOSURE' | 'CONTRACT' | 'CONTACT'
    - `order_index` integer, nullable
    - `archived_at` string, date-time, nullable
    - `custom_field_definition_type` 'DATE'
  - CustomFieldBooleanDefinition
    - `custom_field_id` string, uuid, nullable
    - `name` string, nullable
    - `description` string, nullable
    - `custom_field_type` 'INHERENT_RISK_LEVEL' | 'RESIDUAL_RISK_LEVEL' | 'CRITICALITY' | 'LIFECYCLE_STATUS'
    - `entity_type` 'VENDOR' | 'CANONICAL' | 'SERVICE' | 'ISSUE' | 'DISCLOSURE' | 'CONTRACT' | 'CONTACT'
    - `order_index` integer, nullable
    - `archived_at` string, date-time, nullable
    - `custom_field_definition_type` 'BOOLEAN'
  - CustomFieldMultiselectDefinition
    - `custom_field_id` string, uuid, nullable
    - `name` string, nullable
    - `description` string, nullable
    - `custom_field_type` 'INHERENT_RISK_LEVEL' | 'RESIDUAL_RISK_LEVEL' | 'CRITICALITY' | 'LIFECYCLE_STATUS'
    - `entity_type` 'VENDOR' | 'CANONICAL' | 'SERVICE' | 'ISSUE' | 'DISCLOSURE' | 'CONTRACT' | 'CONTACT'
    - `order_index` integer, nullable
    - `archived_at` string, date-time, nullable
    - `custom_field_definition_type` 'MULTISELECT'
    - `options` CustomFieldOptionDefinition[]
      - `option_id` string, uuid, nullable
      - `label` string, nullable
      - `hex_color` string, nullable
      - `order_index` integer, nullable
  - CustomFieldUserDefinition
    - `custom_field_id` string, uuid, nullable
    - `name` string, nullable
    - `description` string, nullable
    - `custom_field_type` 'INHERENT_RISK_LEVEL' | 'RESIDUAL_RISK_LEVEL' | 'CRITICALITY' | 'LIFECYCLE_STATUS'
    - `entity_type` 'VENDOR' | 'CANONICAL' | 'SERVICE' | 'ISSUE' | 'DISCLOSURE' | 'CONTRACT' | 'CONTACT'
    - `order_index` integer, nullable
    - `archived_at` string, date-time, nullable
    - `custom_field_definition_type` 'USER'
  - CustomFieldMultiUserDefinition
    - `custom_field_id` string, uuid, nullable
    - `name` string, nullable
    - `description` string, nullable
    - `custom_field_type` 'INHERENT_RISK_LEVEL' | 'RESIDUAL_RISK_LEVEL' | 'CRITICALITY' | 'LIFECYCLE_STATUS'
    - `entity_type` 'VENDOR' | 'CANONICAL' | 'SERVICE' | 'ISSUE' | 'DISCLOSURE' | 'CONTRACT' | 'CONTACT'
    - `order_index` integer, nullable
    - `archived_at` string, date-time, nullable
    - `custom_field_definition_type` 'MULTI_USER'

## Response `200`

Successful Response

- union
  - CustomFieldDropdownDefinition
    - `custom_field_id` string, uuid, nullable
    - `name` string, nullable
    - `description` string, nullable
    - `custom_field_type` 'INHERENT_RISK_LEVEL' | 'RESIDUAL_RISK_LEVEL' | 'CRITICALITY' | 'LIFECYCLE_STATUS'
    - `entity_type` 'VENDOR' | 'CANONICAL' | 'SERVICE' | 'ISSUE' | 'DISCLOSURE' | 'CONTRACT' | 'CONTACT'
    - `order_index` integer, nullable
    - `archived_at` string, date-time, nullable
    - `custom_field_definition_type` 'DROPDOWN'
    - `options` CustomFieldOptionDefinition[]
      - `option_id` string, uuid, nullable
      - `label` string, nullable
      - `hex_color` string, nullable
      - `order_index` integer, nullable
  - CustomFieldFreeTextDefinition
    - `custom_field_id` string, uuid, nullable
    - `name` string, nullable
    - `description` string, nullable
    - `custom_field_type` 'INHERENT_RISK_LEVEL' | 'RESIDUAL_RISK_LEVEL' | 'CRITICALITY' | 'LIFECYCLE_STATUS'
    - `entity_type` 'VENDOR' | 'CANONICAL' | 'SERVICE' | 'ISSUE' | 'DISCLOSURE' | 'CONTRACT' | 'CONTACT'
    - `order_index` integer, nullable
    - `archived_at` string, date-time, nullable
    - `custom_field_definition_type` 'FREE_TEXT'
  - CustomFieldNumberDefinition
    - `custom_field_id` string, uuid, nullable
    - `name` string, nullable
    - `description` string, nullable
    - `custom_field_type` 'INHERENT_RISK_LEVEL' | 'RESIDUAL_RISK_LEVEL' | 'CRITICALITY' | 'LIFECYCLE_STATUS'
    - `entity_type` 'VENDOR' | 'CANONICAL' | 'SERVICE' | 'ISSUE' | 'DISCLOSURE' | 'CONTRACT' | 'CONTACT'
    - `order_index` integer, nullable
    - `archived_at` string, date-time, nullable
    - `custom_field_definition_type` 'NUMBER'
  - CustomFieldDateDefinition
    - `custom_field_id` string, uuid, nullable
    - `name` string, nullable
    - `description` string, nullable
    - `custom_field_type` 'INHERENT_RISK_LEVEL' | 'RESIDUAL_RISK_LEVEL' | 'CRITICALITY' | 'LIFECYCLE_STATUS'
    - `entity_type` 'VENDOR' | 'CANONICAL' | 'SERVICE' | 'ISSUE' | 'DISCLOSURE' | 'CONTRACT' | 'CONTACT'
    - `order_index` integer, nullable
    - `archived_at` string, date-time, nullable
    - `custom_field_definition_type` 'DATE'
  - CustomFieldBooleanDefinition
    - `custom_field_id` string, uuid, nullable
    - `name` string, nullable
    - `description` string, nullable
    - `custom_field_type` 'INHERENT_RISK_LEVEL' | 'RESIDUAL_RISK_LEVEL' | 'CRITICALITY' | 'LIFECYCLE_STATUS'
    - `entity_type` 'VENDOR' | 'CANONICAL' | 'SERVICE' | 'ISSUE' | 'DISCLOSURE' | 'CONTRACT' | 'CONTACT'
    - `order_index` integer, nullable
    - `archived_at` string, date-time, nullable
    - `custom_field_definition_type` 'BOOLEAN'
  - CustomFieldMultiselectDefinition
    - `custom_field_id` string, uuid, nullable
    - `name` string, nullable
    - `description` string, nullable
    - `custom_field_type` 'INHERENT_RISK_LEVEL' | 'RESIDUAL_RISK_LEVEL' | 'CRITICALITY' | 'LIFECYCLE_STATUS'
    - `entity_type` 'VENDOR' | 'CANONICAL' | 'SERVICE' | 'ISSUE' | 'DISCLOSURE' | 'CONTRACT' | 'CONTACT'
    - `order_index` integer, nullable
    - `archived_at` string, date-time, nullable
    - `custom_field_definition_type` 'MULTISELECT'
    - `options` CustomFieldOptionDefinition[]
      - `option_id` string, uuid, nullable
      - `label` string, nullable
      - `hex_color` string, nullable
      - `order_index` integer, nullable
  - CustomFieldUserDefinition
    - `custom_field_id` string, uuid, nullable
    - `name` string, nullable
    - `description` string, nullable
    - `custom_field_type` 'INHERENT_RISK_LEVEL' | 'RESIDUAL_RISK_LEVEL' | 'CRITICALITY' | 'LIFECYCLE_STATUS'
    - `entity_type` 'VENDOR' | 'CANONICAL' | 'SERVICE' | 'ISSUE' | 'DISCLOSURE' | 'CONTRACT' | 'CONTACT'
    - `order_index` integer, nullable
    - `archived_at` string, date-time, nullable
    - `custom_field_definition_type` 'USER'
  - CustomFieldMultiUserDefinition
    - `custom_field_id` string, uuid, nullable
    - `name` string, nullable
    - `description` string, nullable
    - `custom_field_type` 'INHERENT_RISK_LEVEL' | 'RESIDUAL_RISK_LEVEL' | 'CRITICALITY' | 'LIFECYCLE_STATUS'
    - `entity_type` 'VENDOR' | 'CANONICAL' | 'SERVICE' | 'ISSUE' | 'DISCLOSURE' | 'CONTRACT' | 'CONTACT'
    - `order_index` integer, nullable
    - `archived_at` string, date-time, nullable
    - `custom_field_definition_type` 'MULTI_USER'

## Other responses

- `422`: Validation Error

## Changes

- **2026-09-08** `9fe2fb8a3631`: 16 info
  - added the new optional request property `oneOf[subschema #1: CustomFieldDropdownDefinition]/archived_at`
  - added the new optional request property `oneOf[subschema #2: CustomFieldFreeTextDefinition]/archived_at`
  - added the new optional request property `oneOf[subschema #3: CustomFieldNumberDefinition]/archived_at`
  - added the new optional request property `oneOf[subschema #4: CustomFieldDateDefinition]/archived_at`
  - …12 more

[Operation history](https://skmtc.dev/kobaltlabs/apis/kobaltlabs-api/changes/custom_fields/post.md)

---

[API](https://skmtc.dev/kobaltlabs/apis/kobaltlabs-api.md) - [All operations](https://skmtc.dev/kobaltlabs/apis/kobaltlabs-api/llms.txt) - [OpenAPI document](https://skmtc.dev/kobaltlabs/apis/kobaltlabs-api/revisions/8587332d5e43?raw)
