# Create a custom field definition

> `POST` `/v1/fields`

URL: https://www.agencytitan.com/docs/tag/fields/POST/v1/fields

Operation ID: `fields_create`

Tag: [fields](https://www.agencytitan.com/docs/tag/fields.md)

## Description

Creates a custom field definition for an entity type. When field_key is omitted it is auto-generated from field_label (snake_case), matching in-app behavior. field_key must be unique within the scope and cannot be changed after creation.

## Parameters

_None_

## Request body

- Required: yes
- Content-Type: `application/json`
  - Type: `object`
  - Properties:
    - `allow_multiple_values` (`boolean`)
    - `composite_type_id` (`string`)
    - `default_value` (`unknown`) — Default value applied when the field is not set. For choice types, a choice `value`.
    - `display_order` (`integer`)
    - `entity_type` (`string`) — Entity the field is defined for.
    - `field_key` (`string`) — Stable snake_case key. Auto-generated from field_label when omitted.
    - `field_label` (`string`, required)
    - `field_type` (`string`, required) — Field type. Choice types (dropdown, multi_select, radio, checkbox) require `options.choices`.
    - `folder_id` (`string`) — Folder to place the field in (see List field folders).
    - `form_id` (`string`) — Scope to a form (includes shared form fields).
    - `help_text` (`string`)
    - `icon` (`string`)
    - `is_required` (`boolean`)
    - `options` (`object`) — Type-specific configuration. For choice types (dropdown, multi_select, radio, checkbox) supply `{ "choices": [{ "value"…
    - `placeholder` (`string`)
    - `process_definition_id` (`string`) — Scope to a process definition (includes global process fields). See List process definitions.

## Responses

- `200` (`application/json`): Successful response.
  - Type: `object`
  - Properties:
    - `data` (`object`, required)
- `400` (`application/json`): Request validation failed (unknown or out-of-range parameters/properties are rejected).
  - Type: `object`
  - Properties:
    - `error` (`object`, required)
- `401` (`application/json`): Missing, invalid, expired, or revoked bearer token.
  - Type: `object`
  - Properties:
    - `error` (`string`, required)
    - `error_description` (`string`, required)
- `403` (`application/json`): The authenticated user does not have permission for this operation.
  - Type: `object`
  - Properties:
    - `error` (`object`, required)
- `404` (`application/json`): The requested resource was not found.
  - Type: `object`
  - Properties:
    - `error` (`object`, required)
- `409` (`application/json`): The request conflicts with an existing record or partially applied.
  - Type: `object`
  - Properties:
    - `error` (`object`, required)
- `429` (`application/json`): Per-tenant rate limit exceeded (600 requests/minute across all /v1 REST endpoints). The Retry-After header indicates how many seconds to wait.
  - Type: `object`
  - Properties:
    - `error` (`object`, required)
- `500` (`application/json`): An unexpected internal error occurred.
  - Type: `object`
  - Properties:
    - `error` (`object`, required)

## Authentication

- `bearerAuth` — http (bearer) — All /v1 endpoints (except `/v1/openapi.json` and `/v1/llms.txt`) require a bearer token. Two equal first-class paths: (1) an OAuth 2.0 access token from the au…

## Useful links

- Interactive page: https://www.agencytitan.com/docs/tag/fields/POST/v1/fields
- API reference home: https://www.agencytitan.com/docs/
- Tag page: https://www.agencytitan.com/docs/tag/fields.md
- This operation as Markdown: https://www.agencytitan.com/docs/tag/fields/POST/v1/fields.md
- OpenAPI JSON: https://www.agencytitan.com/docs/openapi.json
- Full API Markdown: https://api.agencytitan.com/v1/llms.txt
- API keys: https://app.agencytitan.com/settings/api-mcp
