Reorder the fields of an entity
const url = 'https://beta-api.plune.ai/v1/custom-fields/order';const options = { method: 'PUT', headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'}, body: '{"entity":"case","ids":["6f1c2b3a-0000-4000-8000-0000000000f4"]}'};
try { const response = await fetch(url, options); const data = await response.json(); console.log(data);} catch (error) { console.error(error);}curl --request PUT \ --url https://beta-api.plune.ai/v1/custom-fields/order \ --header 'Authorization: Bearer <token>' \ --header 'Content-Type: application/json' \ --data '{ "entity": "case", "ids": [ "6f1c2b3a-0000-4000-8000-0000000000f4" ] }'The project owner’s. ids is every live field of the entity in the order wanted — a missing, repeated or foreign id is a 400 and nothing moves. One audit entry per field that changed place.
Authorizations
Section titled “Authorizations ”Request Body required
Section titled “Request Body required ”object
#1251: orders the configuration groups among themselves; left out, the fields.
Every live field of the entity (of the role, when one is named), in the order wanted.
Example
{ "entity": "case", "ids": [ "6f1c2b3a-0000-4000-8000-0000000000f4" ]}Responses
Section titled “ Responses ”The live fields of the entity as they are now
object
object
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.
Unique among the fields of the entity in the project, case-insensitively, archived fields included.
Fixed after creation.
A list field that takes several options. Fixed after creation; only a list can be.
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.
object
Never changes and is never reused: this is what a case stores. A rename changes label only.
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.
Checked when a case is created. On an existing case the server only refuses to clear the value; it does not demand one.
Independent of showInList (#1250 AC-07). A toggle for the screen, not for access.
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).
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.
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.
Set while the field is archived: it takes no new value and its old values stay.
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
object
Example
{ "error": "validation failed — name: a field needs a name"}No / invalid token or session
You are in the project, but not as its owner
object
Example
{ "error": "project owner only"}Rate-limited: the per-route throttle, or the per-minute request limit of the plan an API token counts by (#1442; the body names the plan, #2092). Retry-After carries the seconds until the window rolls over.
object
Example generated
{ "error": "example"}Headers
Section titled “Headers ”Seconds until the window rolls over