The project’s test plans
const url = 'https://beta-api.plune.ai/v1/plans';const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
try { const response = await fetch(url, options); const data = await response.json(); console.log(data);} catch (error) { console.error(error);}curl --request GET \ --url https://beta-api.plune.ai/v1/plans \ --header 'Authorization: Bearer <token>'Every plan, ordered case-insensitively by title, each with how many cases it collects right now — resolved on the way out, so the count is today’s, not the count at the last edit.
Authorizations
Section titled “Authorizations ”Responses
Section titled “ Responses ”The plans
object
object
Unique within the project.
Up to 16 384 bytes.
Who executes it and which cases it may collect: manual takes manual cases, automated automated ones, mixed both. Evals belong to no plan.
The one exception to the strict mapping: a manual plan that also takes automated cases, to be walked by a person.
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.
How many cases the plan collects right now, by its kind’s rule.
Example
{ "plans": [ { "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": "mixed", "asManual": false, "collections": [ "suiteId=6f1c2b3a-0000-4000-8000-0000000000a1", "priority=critical" ], "createdAt": "2026-09-16T09:12:04.151Z", "updatedAt": "2026-09-16T09:12:04.151Z", "count": 12 } ]}No / invalid token or session