Single-Select Custom Field

Create single-select fields to allow users to choose one option from a predefined list


Single-select custom fields allow users to choose exactly one option from a predefined list. They’re ideal for status fields, categories, priorities, or any scenario where only one choice should be made from a controlled set of options.

Basic Example

Create a simple single-select field:

mutation CreateSingleSelectField {
  createCustomField(input: {
    name: "Project Status"
    type: SELECT_SINGLE
    projectId: "proj_123"
  }) {
    id
    name
    type
  }
}

Advanced Example

Create a single-select field with predefined options:

mutation CreateDetailedSingleSelectField {
  createCustomField(input: {
    name: "Priority Level"
    type: SELECT_SINGLE
    projectId: "proj_123"
    description: "Set the priority level for this task"
    customFieldOptions: [
      { title: "Low", color: "#28a745" }
      { title: "Medium", color: "#ffc107" }
      { title: "High", color: "#fd7e14" }
      { title: "Critical", color: "#dc3545" }
    ]
  }) {
    id
    name
    type
    description
    customFieldOptions {
      id
      title
      color
      position
    }
  }
}

Input Parameters

CreateCustomFieldInput

ParameterTypeRequiredDescription
nameString!✅ YesDisplay name of the single-select field
typeCustomFieldType!✅ YesMust be SELECT_SINGLE
descriptionStringNoHelp text shown to users
customFieldOptions[CreateCustomFieldOptionInput!]NoInitial options for the field

CreateCustomFieldOptionInput

ParameterTypeRequiredDescription
titleString!✅ YesDisplay text for the option
colorStringNoHex color code for the option

Adding Options to Existing Fields

Add new options to an existing single-select field:

mutation AddSingleSelectOption {
  createCustomFieldOption(input: {
    customFieldId: "field_123"
    title: "Urgent"
    color: "#6f42c1"
  }) {
    id
    title
    color
    position
  }
}

Setting Single-Select Values

To set the selected option on a record:

mutation SetSingleSelectValue {
  setTodoCustomField(input: {
    todoId: "todo_123"
    customFieldId: "field_456"
    customFieldOptionId: "option_789"
  })
}

SetTodoCustomFieldInput Parameters

ParameterTypeRequiredDescription
todoIdString!✅ YesID of the record to update
customFieldIdString!✅ YesID of the single-select custom field
customFieldOptionIdStringNoID of the option to select (preferred for single-select)
customFieldOptionIds[String!]NoArray of option IDs (uses first element for single-select)

Querying Single-Select Values

Query a record’s single-select value:

query GetRecordWithSingleSelect {
  todo(id: "todo_123") {
    id
    title
    customFields {
      id
      customField {
        name
        type
      }
      value  # For SELECT_SINGLE, contains: {"id": "opt_123", "title": "High", "color": "#dc3545", "position": 3}
    }
  }
}

The value field returns a JSON object with the selected option’s details.

Creating Records with Single-Select Values

When creating a new record with single-select values:

mutation CreateRecordWithSingleSelect {
  createTodo(input: {
    title: "Review user feedback"
    todoListId: "list_123"
    customFields: [{
      customFieldId: "priority_field_id"
      customFieldOptionId: "option_high_priority"
    }]
  }) {
    id
    title
    customFields {
      id
      customField {
        name
        type
      }
      value  # Contains the selected option object
    }
  }
}

Response Fields

TodoCustomField Response

FieldTypeDescription
idString!Unique identifier for the field value
customFieldCustomField!The custom field definition
valueJSONContains the selected option object with id, title, color, position
todoTodo!The record this value belongs to
createdAtDateTime!When the value was created
updatedAtDateTime!When the value was last modified

CustomFieldOption Response

FieldTypeDescription
idString!Unique identifier for the option
titleString!Display text for the option
colorStringHex color code for visual representation
positionFloatSort order for the option
customFieldCustomField!The custom field this option belongs to

CustomField Response

FieldTypeDescription
idString!Unique identifier for the field
nameString!Display name of the single-select field
typeCustomFieldType!Always SELECT_SINGLE
descriptionStringHelp text for the field
customFieldOptions[CustomFieldOption!]All available options

Value Format

Input Format

  • API Parameter: Use customFieldOptionId for single option ID
  • Alternative: Use customFieldOptionIds array (takes first element)
  • Clearing Selection: Omit both fields or pass empty values

Output Format

  • GraphQL Response: JSON object in value field containing {id, title, color, position}
  • Activity Log: Option title as string
  • Automation Data: Option title as string

Selection Behavior

Exclusive Selection

  • Setting a new option automatically removes the previous selection
  • Only one option can be selected at a time
  • Setting null or empty value clears the selection

Fallback Logic

  • If customFieldOptionIds array is provided, only the first option is used
  • This ensures compatibility with multi-select input formats
  • Empty arrays or null values clear the selection

Managing Options

Update Option Properties

mutation UpdateOption {
  editCustomFieldOption(input: {
    id: "option_123"
    title: "Updated Priority"
    color: "#ff6b6b"
  }) {
    id
    title
    color
  }
}

Delete Option

mutation DeleteOption {
  deleteCustomFieldOption(id: "option_123")
}

Note: Deleting an option will clear it from all records where it was selected.

Reorder Options

mutation ReorderOptions {
  reorderCustomFieldOptions(input: {
    customFieldId: "field_123"
    optionIds: ["option_1", "option_3", "option_2"]
  }) {
    id
    position
  }
}

Validation Rules

Option Validation

  • The provided option ID must exist
  • Option must belong to the specified custom field
  • Only one option can be selected (enforced automatically)
  • Null/empty values are valid (no selection)

Field Validation

  • Must have at least one option defined to be usable
  • Option titles must be unique within the field
  • Color codes must be valid hex format (if provided)

Required Permissions

ActionRequired Permission
Create single-select fieldCompany role: OWNER or ADMIN
Update single-select fieldCompany role: OWNER or ADMIN
Add/edit optionsCompany role: OWNER or ADMIN
Set selected valueAny company role (OWNER, ADMIN, MEMBER, CLIENT) or custom project role with edit permission
View selected valueStandard record view permissions

Error Responses

Invalid Option ID

{
  "errors": [{
    "message": "Custom field option was not found.",
    "extensions": {
      "code": "CUSTOM_FIELD_OPTION_NOT_FOUND"
    }
  }]
}

Option Doesn’t Belong to Field

{
  "errors": [{
    "message": "Option does not belong to this custom field",
    "extensions": {
      "code": "VALIDATION_ERROR"
    }
  }]
}

Field Not Found

{
  "errors": [{
    "message": "Custom field was not found.",
    "extensions": {
      "code": "CUSTOM_FIELD_NOT_FOUND"
    }
  }]
}

Unable to Parse Value

{
  "errors": [{
    "message": "Unable to parse custom field value.",
    "extensions": {
      "code": "CUSTOM_FIELD_VALUE_PARSE_ERROR"
    }
  }]
}

Best Practices

Option Design

  • Use clear, descriptive option titles
  • Apply meaningful color coding
  • Keep option lists focused and relevant
  • Order options logically (by priority, frequency, etc.)

Status Field Patterns

  • Use consistent status workflows across projects
  • Consider the natural progression of options
  • Include clear final states (Done, Canceled, etc.)
  • Use colors that reflect option meaning

Data Management

  • Review and clean up unused options periodically
  • Use consistent naming conventions
  • Consider the impact of option deletion on existing records
  • Plan for option updates and migrations

Common Use Cases

  1. Status and Workflow

    • Task status (To Do, In Progress, Done)
    • Approval status (Pending, Approved, Rejected)
    • Project phase (Planning, Development, Testing, Released)
    • Issue resolution status
  2. Classification and Categorization

    • Priority levels (Low, Medium, High, Critical)
    • Task types (Bug, Feature, Enhancement, Documentation)
    • Project categories (Internal, Client, Research)
    • Department assignments
  3. Quality and Assessment

    • Review status (Not Started, In Review, Approved)
    • Quality ratings (Poor, Fair, Good, Excellent)
    • Risk levels (Low, Medium, High)
    • Confidence levels
  4. Assignment and Ownership

    • Team assignments
    • Department ownership
    • Role-based assignments
    • Regional assignments

Integration Features

With Automations

  • Trigger actions when specific options are selected
  • Route work based on selected categories
  • Send notifications for status changes
  • Create conditional workflows based on selections

With Lookups

  • Filter records by selected options
  • Reference option data from other records
  • Create reports based on option selections
  • Group records by selected values

With Forms

  • Dropdown input controls
  • Radio button interfaces
  • Option validation and filtering
  • Conditional field display based on selections

Activity Tracking

Single-select field changes are automatically tracked:

  • Shows old and new option selections
  • Displays option titles in activity log
  • Timestamps for all selection changes
  • User attribution for modifications

Differences from Multi-Select

FeatureSingle-SelectMulti-Select
Selection LimitExactly 1 optionMultiple options
Input ParametercustomFieldOptionIdcustomFieldOptionIds
Response Fieldvalue (single option object)value (array of option objects)
Storage BehaviorReplaces existing selectionAdds to existing selections
Common Use CasesStatus, category, priorityTags, skills, categories

Limitations

  • Only one option can be selected at a time
  • No hierarchical or nested option structure
  • Options are shared across all records using the field
  • No built-in option analytics or usage tracking
  • Color codes are for display only, no functional impact
  • Cannot set different permissions per option