---
title: "Create a custom field"
method: POST
path: "/inboxes/{inbox_id}/custom-fields"
tags: ["Inboxes"]
---

# Create a custom field

`POST /inboxes/{inbox_id}/custom-fields`

## Request

- Base URL: `https://api.thrivedesk.com/v1`
- URL: `https://api.thrivedesk.com/v1/inboxes/{inbox_id}/custom-fields`
- Auth: HTTP bearer

Create a custom field.

Personal access token only. The API supports a second, partner-issued token class that is not part of the public surface. This endpoint does not accept that class.

## Path parameters

- `inbox_id` string, required

## Request body

- CustomFieldCreate
  - `name` string, required
  - `type` 'text' | 'textarea' | 'dropdown' | 'toggle' | 'number', required
  - `key` string, required: Unique per inbox.
  - `description` string, nullable
  - `is_required` boolean
  - `is_active` boolean
  - `default_value` unknown
  - `options` string[]: Only for dropdown fields, rejected for other types.
  - `conditions` object[]: Only for field types that support conditional visibility.
    - `expected_value` string, required
    - `dependent_field_ids` string[], required

## Response `201`

Success.

- CustomFieldResponse
  - `message` string, required
  - `data` CustomField, required
    - `id` string
    - `inbox_id` string
    - `name` string
    - `key` string
    - `description` string, nullable
    - `type` 'text' | 'textarea' | 'dropdown' | 'toggle' | 'number'
    - `default_value` unknown
    - `is_required` boolean
    - `is_active` boolean
    - `order` integer
    - `extra` object, nullable
    - `options` object[]: Present for dropdown fields.
      - `id` string
      - `value` string
    - `conditions` object[]
    - `created_at` string, date-time
    - `readable_created_at` string, nullable

## Other responses

- `401`: Missing or invalid bearer token.
- `403`: Token is valid but does not include a required scope, or the user does not have access to the resource.
- `404`: Resource not found.
- `422`: Request body failed validation.
- `429`: Rate limit exceeded. The `Retry-After` header indicates how long to wait before retrying. See [Pagination and rate limits](/get-started/pagination) for the full rate-limit policy.
- `500`: Unexpected server error.

---

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