Skip to content

Custom Fields

Custom fields let you attach structured data to every task on a board, beyond the built-in properties like priority, size, and due date. Each board defines its own set of fields, and every task on that board gets a value slot for each one.

Five field types are supported:

TypeUse for
NumberRatings, scores, estimates — anything you sort numerically
TextFree-form notes that need their own column
SelectA fixed list of options
DateA date separate from due date
CheckboxA yes/no flag

The flagship use case is an ICE rating (a Number field for Impact/Confidence/Ease scoring) used to rank a backlog. The ICE ranking recipe below walks through setting one up end to end.

  1. Press Ctrl+K and search for “Create custom field”.
  2. Enter a name for the field.
  3. Pick a type: Number, Text, Select, Date, or Checkbox.
  4. Press Enter to create it.

The field is created on the current board and is visible by default — no separate step to turn it on.

Open a task and the field appears as a property row in the right rail, alongside priority, size, and due date. Click it, type or pick a value, and press Enter to save.

Every custom field on a board shows up as a column in table view:

  • Sorting: click a custom field’s column header to sort by it. Number and Date fields sort numerically/chronologically; empty values always sort to the bottom regardless of sort direction.
  • Columns picker: open “Configure table columns” to toggle any custom field’s visibility or drag it to reorder, the same as built-in columns. “Reset to default” restores the original set.

A saved view captures the table’s current sort, so a view sorted by a custom field stays sorted every time it’s opened. This is what makes an ICE ranking view sharable: save it once, and everyone who opens the view sees the backlog in ICE order.

  1. Create a Number field named ICE on the board (see Creating a field above).
  2. Open each task and set its ICE score in the right rail.
  3. Switch to table view, add the ICE column if it’s hidden, and click the header to sort descending.
  4. Save the sorted table as a view named “ICE ranking”.

Anyone who opens the “ICE ranking” view sees the board pre-sorted by score, no re-sorting required.

Custom fields are managed through the same Bearer htk_... REST API used elsewhere in Hypertask (authentication). Task detail responses include a customFieldValues array for every task on a board with custom fields defined.

Endpoint: GET /api/mcp/custom-fields / POST /api/mcp/custom-fields

Creating a field is idempotent on name — calling create again with a name that already exists on the board returns the existing field instead of erroring.

Terminal window
curl -s -X POST -H "Authorization: Bearer $HT_API_KEY" \
-H "Content-Type: application/json" \
-d '{"project_id": 123, "name": "ICE", "type": "number"}' \
"https://app.hypertask.ai/api/mcp/custom-fields"

Endpoint: POST /api/mcp/custom-fields/value

Accepts either field_id or field_name. Using field_name auto-creates the field on the board if it doesn’t already exist, so an agent can set a value without a separate create call:

Terminal window
curl -s -X POST -H "Authorization: Bearer $HT_API_KEY" \
-H "Content-Type: application/json" \
-d '{"task_id": 789, "field_name": "ICE", "value": 42}' \
"https://app.hypertask.ai/api/mcp/custom-fields/value"

Values are strictly validated against the field’s type — for example, a non-numeric value sent to a Number field is rejected with a 400 response rather than silently coerced.

Endpoint: DELETE /api/mcp/custom-fields/{fieldId}

Terminal window
curl -s -X DELETE -H "Authorization: Bearer $HT_API_KEY" \
"https://app.hypertask.ai/api/mcp/custom-fields/456"

Deleting a field removes every task’s value for it. This can’t be undone.