Skip to content

The project’s custom fields

GET
/v1/custom-fields
curl --request GET \
--url 'https://beta-api.plune.ai/v1/custom-fields?entity=case&archived=true' \
--header 'Authorization: Bearer <token>'

The live fields in their order; ?entity=case narrows to one entity, ?archived=true adds the archived ones after them. Any member reads, a reader too — the fields a case carries are how its custom is read.

entity
string
Allowed values: case suite run plan step
archived
string
Allowed values: true false

The fields

Media type application/json
object
fields
required
Array<object>
object
id
required
string format: uuid
projectId
required
string
entity
required

What the field is on: a case, a suite, a run, a plan or a step. Its values ride on that entity as custom (for a step, on the Steps Database row, not on the case that carries it). A step field cannot be required.

string
Allowed values: case suite run plan step
name
required

Unique among the fields of the entity in the project, case-insensitively, archived fields included.

string
>= 1 characters <= 100 characters
type
required

Fixed after creation.

string
Allowed values: string number list
multiple
required

A list field that takes several options. Fixed after creation; only a list can be.

boolean
options
required

In the order a person set; null for a string or number field. An option taken off the list stays on the cases that hold it, shown as stale, and is refused only as a NEW value.

Array<object>
nullable <= 100 items
object
id
required

Never changes and is never reused: this is what a case stores. A rename changes label only.

string
label
required
string
>= 1 characters <= 200 characters
archivedAt

Present while the option is archived (#1251), set by the server on archived: true: it is not taken as a new value, and an entity that holds it keeps it.

string format: date-time
required
required

Checked when a case is created. On an existing case the server only refuses to clear the value; it does not demand one.

boolean
defaultValue
required
One of:
string
showInList
required
boolean
showInFilter
required

Independent of showInList (#1250 AC-07). A toggle for the screen, not for access.

boolean
position
required

Dense 0..n-1 among the live fields of the entity with the same role: the configuration groups have an order of their own (#1251).

integer
source
required

Where the field came from (#1930): testrail - the TestRail import made it or carries values into it (the settings page shows “From TestRail”); null - a person made it. Set by the server only: a create or a patch that sends it does not set it, and it never changes once set.

string
nullable
Allowed values: testrail
role
required

configuration — a configuration group (#1251, ADR 0070): a run list of several values, which a launch multiplies into the run’s combinations. Fixed at creation. Its values are archived, never removed; it is neither required nor has a default; position, the limit of 50 and the name are counted among the groups apart from the fields. null — a field.

string
nullable
Allowed values: configuration
archivedAt
required

Set while the field is archived: it takes no new value and its old values stay.

string format: date-time
nullable
createdAt
required
string format: date-time
updatedAt
required
string format: date-time
Example
{
"fields": [
{
"id": "6f1c2b3a-0000-4000-8000-0000000000f4",
"projectId": "u-shop::default",
"entity": "case",
"name": "Browser",
"type": "list",
"multiple": true,
"options": [
{
"id": "opt_chrome0001",
"label": "Chrome"
},
{
"id": "opt_firefox001",
"label": "Firefox"
}
],
"required": false,
"defaultValue": null,
"showInList": true,
"showInFilter": false,
"position": 0,
"role": null,
"archivedAt": null,
"createdAt": "2026-09-16T09:12:04.151Z",
"updatedAt": "2026-09-16T09:12:04.151Z"
}
]
}

Invalid body, a value the field does not take, or a rule broken

Media type application/json
object
error
required
string
Example
{
"error": "validation failed — name: a field needs a name"
}

No / invalid token or session