Skip to content

Change a test plan

PATCH
/v1/plans/{id}
curl --request PATCH \
--url https://beta-api.plune.ai/v1/plans/example \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '{ "kind": "manual", "asManual": true }'

Title, description, kind, asManual or the collections — the last replaces the whole list. Runs already launched from the plan keep their own expected: a plan is resolved at launch, not linked.

id
required
string
Media type application/json

Any of the five fields; an empty object is refused (400). collections replaces the whole list.

object
title
string
>= 1 characters <= 200 characters
description
string
nullable
kind
string
Allowed values: manual automated mixed
asManual
boolean
collections
Array<string>
>= 1 items <= 20 items
Example
{
"kind": "manual",
"asManual": true
}

The plan as it is now

Media type application/json

A titled collection of case filters. A plan is a query, not a list of ids: what it collects is resolved when asked (GET /v1/plans/{id}/cases), and a launch turns that into a run.

object
id
required
string format: uuid
projectId
required
string
title
required

Unique within the project.

string
>= 1 characters <= 200 characters
description
required

Up to 16 384 bytes.

string
nullable
kind
required

Who executes it and which cases it may collect: manual takes manual cases, automated automated ones, mixed both. Evals belong to no plan.

string
Allowed values: manual automated mixed
asManual
required

The one exception to the strict mapping: a manual plan that also takes automated cases, to be walked by a person.

boolean
collections
required

Each item is a case filter in its query-string form (suiteId=…&tag=…&priority=…&priorityMin=…&type=…&state=…&q=…, ADR 0001) — AND between its dimensions, OR within one, OR between collections. Written back canonical, so two spellings of one filter are one string. An empty string is every case.

Array<string>
>= 1 items <= 20 items
createdAt
required
string format: date-time
updatedAt
required
string format: date-time
Example
{
"id": "6f1c2b3a-0000-4000-8000-0000000000f3",
"projectId": "u-shop::default",
"title": "Release regression",
"description": "Everything under checkout, plus every critical case wherever it lives.",
"kind": "manual",
"asManual": true,
"collections": [
"suiteId=6f1c2b3a-0000-4000-8000-0000000000a1",
"priority=critical"
],
"createdAt": "2026-09-16T09:12:04.151Z",
"updatedAt": "2026-09-16T09:12:04.151Z"
}

Invalid body, or nothing to change

Media type application/json
object
error
required
string
Example generated
{
"error": "example"
}

No / invalid token or session

No such plan in your projects

Media type application/json
object
error
required
string
Example generated
{
"error": "example"
}

The new title is taken

Media type application/json
object
error
required
string
Example generated
{
"error": "example"
}

Rate-limited: either the per-route throttle or a tenant quota. Retry-After carries the seconds until the window rolls over.

Media type application/json
object
error
required
string
Example generated
{
"error": "example"
}
Retry-After
integer

Seconds until the window rolls over