> ## Documentation Index
> Fetch the complete documentation index at: https://www.plain.com/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# Thread fields

<Snippet file="graphql/sdk-note.mdx" />

Thread fields allow you to extend Plain's thread data model. The thread fields which you want to support have to conform to a schema configured in **Settings** → **Thread fields**.

Thread fields can be nested and be either a boolean, text or a string enum.

Thread fields can be required. When they are required, their value must be set in order for the thread to be marked as done.

For interacting with thread fields via the API, every field has a `key` defined in its schema. Keys make it possible to quickly refer to a thread field without having to know its ID in the schema. For example if you have a field called "Product Area" the key you might choose for the key to be `product_area`.

## Manage thread field schemas

Most teams configure thread field schemas in **Settings** → **Thread fields**, but if you want to provision them programmatically you can do so via the API.

### Get thread field schemas

<Snippet file="graphql/get-thread-field-schemas.mdx" />

### Create a thread field schema

`key` must be unique within your workspace. `type` is one of `STRING`, `BOOL`, `NUMBER`, `DATETIME`, or `ENUM` (for enum types, populate `enumValues`).

This operation requires the following permissions:

* `threadFieldSchema:create`

<Snippet file="graphql/create-thread-field-schema.mdx" />

### Update a thread field schema

Field-level wrapper inputs apply — pass `{ "value": ... }` for the fields you want to change.

This operation requires the following permissions:

* `threadFieldSchema:edit`

<Snippet file="graphql/update-thread-field-schema.mdx" />

### Delete a thread field schema

Deleting a schema also removes any values stored against it on threads.

This operation requires the following permissions:

* `threadFieldSchema:delete`

<Snippet file="graphql/delete-thread-field-schema.mdx" />

### Reorder thread field schemas

`reorderThreadFieldSchemas` updates the `order` of multiple schemas in a single call. You don't need to include every schema — only the ones whose order is changing.

<Snippet file="graphql/reorder-thread-field-schemas.mdx" />

## Manage thread field values

### Upsert a thread field

To upsert a thread field you need an API key with the following permissions:

* `threadField:create`
* `threadField:update`

<Snippet file="graphql/upsert-thread-field.mdx" />

### Delete a thread field

To delete a thread field you need an API key with the following permissions:

* `threadField:delete`

<Snippet file="graphql/delete-thread-field.mdx" />
