# Custom Fields
View and set Custom Fields on tasks using the ClickUp API.
# Custom Fields
You can work with certain types of Custom Fields using the ClickUp API.
> 👍 Tip
>
> Explore the [Custom Field Endpoints](https://developer.clickup.com/reference/getaccessiblecustomfields).
## The Custom Field object
Below is an example Custom Field object. This is the information you'll see about each Custom Field when using the [Get Accessible Custom Fields](https://developer.clickup.com/reference/getaccessiblecustomfields) endpoint.
```json
{
"id": "5dc86497-098d-4bb0-87d6-cf28e43812e7",
"name": "Text Field",
"type": "text",
"type_config": {},
"date_created": "1577378759142",
"hide_from_guests": false
}
```
### Properties of the Custom Field object
There are four key properties you will use when working with Custom Fields in the ClickUp API.
1. **id:** This is the unique identifier of a Custom Field available on at least one List in your ClickUp Workspace.
2. **[type](#custom-field-types):** Refers to the Custom Field type.
3. **[type\_config](#the-type_config-property):** Sets the acceptable values for Custom Field types with specific requirements.
4. **[value](#field-values):** The actual data shown on tasks in ClickUp.
### Note
Free Forever Plans have 60 uses of Custom Fields. Each use of the Set Custom Field Value endpoint counts as 1 use per request. Uses accumulate across a Workspace and do not reset. When you reach the use limit, you won't lose any data, but you won't be able to edit or create new items with that feature.
## Custom Field types
Here is a list of the available [Custom Field types](https://docs.clickup.com/en/articles/3071474-custom-field-types). Use these values in the `type` property.
* `url`: The URL of any website.
* `drop_down`: A series of options in a menu.
* `labels`: A flexible list of options, similar to Tags.
* `email`: A formatted email address.
* `phone`: A formatted phone number with country and area codes.
* `date`: A custom date and time.
* `short_text`: Enter a single line of plain text.
* `text`: Enter a paragraph of plain text.
* `checkbox`: A true or false checkbox.
* `number`: A formatted numeric value.
* `currency`: A **Money** Custom Field. A formatted amount of money in any currency.
* `tasks`: Tasks linked together without Relationships.
* `users`: A **People** Custom Field. Pick people and Teams.
* `emoji`: A **Rating** Custom Field. Use emoji to rate items on a numeric scale.
* `automatic_progress`: An automatically calculated progress bar.
* `manual_progress`: A progress bar that's manually set.
* `location`: A formatted address based on Google Maps.
### Note
[Voting Custom Field](https://help.clickup.com/hc/en-us/articles/24266511749527-Use-Voting-Custom-Fields) values are returned as part of the Custom Field array. Voting Custom Field values cannot be set using the API.
## The type\_config property
The `type_config` property determines what options and requirements apply to a Custom Field. Examples are included below.
### Drop down
Dropdown options exist in the `options` array. The order of items is determined by the array index. A `placeholder` value (string) and `default` option are available, but are not currently used in ClickUp.\
Sorting options include `manual`, `name_asc`, and `name_desc`. The `orderindex` property is a unique, sequential number starting at `0` and ending at the length of the array.
```json
{
"name": "My Dropdown Field",
"type": "drop_down",
"type_config": {
"sorting": "manual",
"default": 0,
"placeholder": "Select a value",
"options": [
{
"id": "option_1_id",
"name": "Option 1",
"color": "#FFFFF",
"orderindex": "0"
},
{
"id": "option_2_id",
"name": "Option 2",
"color": "#000000",
"orderindex": "1"
}
]
}
}
```
### Currency (Money)
You must specify a particular currency in the `currency_type` property. The `default` option is available, but it is not currently used in ClickUp.
```json
{
"name": "My Currency Field",
"type": "currency",
"type_config": {
"precision": 2,
"currency_type": "USD",
"default": 10
}
}
```
### Emoji
The `code_point` property must be a valid Unicode emoji code point, usually written like `U+1f613`. Omit the `U+` and pass only the hex value as a string.
The `count` property sets the maximum number of values the rating can hold, with a minimum value of `1` and a maximum of `5`.
```json
{
"name": "My Emoji Rating Field",
"type": "emoji",
"type_config": {
"code_point": "1f613",
"count": 5
}
}
```
### Labels
A flexible list of options, similar to Tags.
Sorting options include `manual`, `name_asc`, and `name_desc`. The `orderindex` property is always provided, must be unique, starts at `0`, and ends at `Array.length`.
```json
{
"name": "My Label Field",
"type": "labels",
"type_config": {
"sorting": "manual"
"options": [
{
"id": "option_1_id",
"label": "Label 1",
"color": "#123456",
"orderindex": "0"
},
{
"id": "option_2_id",
"label": "Label 2",
"color": "#FFFFFF",
"orderindex": "1"
}
]
}
}
```
### Automatic progress
An automatically calculated progress bar.
```json
{
"name": "Automatic Progress Bar",
"type": "progress",
"type_config": {
"method": "automatic",
"tracking": {
"subtasks": true,
"assigned_comments": true,
"checklists": true
}
}
}
```
### Manual progress
A progress bar that's manually set.\
Start, end and current are absolute values. ClickUp will display the current value as a percentage of the total.
```json
{
"name": "Manual Progress Bar",
"type": "progress",
"type_config": {
"method": "manual",
"start": 0,
"end": 100,
"current": 50
}
}
```
## Field values
To set a field value on a task, use the [Set Custom Field Value endpoint](https://developer.clickup.com/reference/setcustomfieldvalue). The following shows how to change specific custom field types.
The request will always require the body `{ value: ... }` based on the [Custom Field Type](#custom-field-types).
### Url
The value must be a string and a valid URL.
```json
{ "value": "https://clickup.com" }
```
### Drop down
The value must be an ID that matches one of the existing options retrieved from [`type_config`](#drop-down).
```json
{ "value": "option_1_id" }
```
### Email
The value must be a string and a valid email.
```json
{ "value": "lana@clickup.com" }
```
### Phone
The value must be a string and a valid phone number with country code.
```json
{ "value": "+1 123 456 7890" }
```
### Date
The `value` must be Unix time in milliseconds. By default, or if you include `"time": false`, only the date is displayed in ClickUp.\
To display time in the ClickUp UI, include `"time": true`.
### Note
When requesting tasks that include a Date Custom Field (e.g., when using the GET task or other calls), but do not display a time in ClickUp, the API will return a value in Unix time in milliseconds of 4:00 am in the authorized user's timezone.
```json
{
"value": 1565993299379,
"value_options": {
"time": true
}
}
```
### Text
The value must be a string.
```json
{ "value": "Some text" }
```
### Checkbox
The value must be a boolean.
```json
{ "value": true }
```
### Number
The value must be a number.
```json
{ "value": -28 }
```
### Currency
The value must be a number.
```json
{ "value": 80000 }
```
### Tasks
The value must be an object with the following format. The `task_ids` in `add` will be added to the field, and the `task_ids` in `rem` will be removed. The user must have access to all tasks in the request.
```json
{
"value": {
"add": ["task_id_1", "task_id_2"],
"rem": ["task_id_3"]
}
}
```
### Users
The value must be an object with the following format. The users in `add` will be added to the field, and the users in `rem` will be removed.
```json
{
"value": {
"add": ["user_id_1", "user_id_2"],
"rem": ["user_id_3"]
}
}
```
### Filter by users
To filter by users using the [Get Filtered Team Tasks](https://developer.clickup.com/reference/getfilteredteamtasks) endpoint, input each `user_id` as an array into the value parameter.
```json
{
"field_id":"bd12538-4cf0-51f3-13h1-a1c0bedae3f7",
"operator":"ANY",
"value":["user_id_1", "user_id_2"]
}
```
### Emoji (Rating)
The value must be an integer that meets the following conditions:
* The value must be greater than or equal to zero, **and**
* The `count` property (which is the maximum value possible) must be greater than or equal to the `value`.
`0 <= value <= field.type_config.count.`
```json
{
"value": 4
}
```
### Automatic progress
Automatic progress fields cannot be set by user.
### Manual progress
The value must be an object with the current value of the progress. For example, if your `start` and `end` are `10` and `30`, you would pass `20` to set the manual progress bar at 50%.
```json
{
"value": {
"current": 20
}
}
```
### Labels
The value must be an object with the following format. The `ID` for each label must come from the field's [`type_config`](#labels). Any labels that currently exist on a task will be overwritten.
```json
{
"value": ["label_1_id", "label_2_id"]
}
```
### Location
You must provide the latitude `lat`, longitude `lng`, and formatted address per [Google Maps Geocoding API](https://developers.google.com/maps/documentation/geocoding/overview).
```json
{
"value": {
"location":{
"lat": -28.016667,
"lng": 153.4
},
"formatted_address": "Gold Coast QLD, Australia"
}
}
```