---
title: "Create a custom-field definition"
method: POST
path: "/custom-fields/definitions"
tags: ["custom-fields"]
---

# Create a custom-field definition

`POST /custom-fields/definitions`

## Request

- Base URL: `https://api.onplana.com/api`
- URL: `https://api.onplana.com/api/custom-fields/definitions`
- Auth: one of:
  - HTTP bearer
  - API key in header `Authorization`

Plan: `customFields` (PRO+).

## Headers

- `X-Organization-Id` string, required

## Request body

- object
  - `name` string, required
  - `entityType` 'PROJECT' | 'TASK' | 'PROPOSAL', required
  - `fieldType` 'TEXT' | 'NUMBER' | 'DATE' | 'DROPDOWN' | 'USER' | 'CHECKBOX', required
  - `options` string[]: For DROPDOWN.
  - `required` boolean
  - `order` integer

## Response `200`

Created

- CustomFieldDefinition
  - `id` string, uuid, required
  - `name` string, required
  - `entityType` 'PROJECT' | 'TASK' | 'PROPOSAL', required
  - `fieldType` 'TEXT' | 'NUMBER' | 'DATE' | 'DROPDOWN' | 'USER' | 'CHECKBOX', required
  - `options` string[]: For DROPDOWN: choice values.
  - `required` boolean
  - `order` integer
  - `organizationId` string, uuid, required

## Other responses

- `400`: Validation error
- `401`: Unauthorized - missing or invalid JWT
- `402`: Plan gate - feature not available on current plan
- `403`: Forbidden - insufficient role

---

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