Skip to content

One action over many cases

POST
/v1/test-cases/bulk
curl --request POST \
--url https://beta-api.plune.ai/v1/test-cases/bulk \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '{ "ids": [ "6f1c2b3a-0000-4000-8000-0000000000c1" ], "action": { "kind": "move", "suiteId": "6f1c2b3a-0000-4000-8000-0000000000a1" } }'

The dashboard’s selection bar (D30) and an agent’s batch: move, set the priority, change the state or delete up to 200 cases in one call. Every id walks the same road as the single PATCH/DELETE — same actor rule for states (a bearer token is an agent, a session a person), same suite rule, same words when refused — and the answer is always 200 with done and refused by id: a refusal of one case is a result, not an error of the call. Sequential, not atomic: what was done before a refusal stays done, and each case gets its own audit entry under one session. A move target that would refuse every case (a folder, a stranger’s suite) is answered 400 before anything moves.

Media type application/json

One action over up to 200 cases — the selection’s «Move to… · Priority · Retire · Delete». Each id walks the single PATCH/DELETE road and is refused with the same sentence it would get alone.

object
ids
required
Array<string>
>= 1 items <= 200 items
action
required
One of: discriminator: kind
object
kind
required
string
Allowed values: move
suiteId
required

null takes the cases out of their suite

string format: uuid
nullable
position

Where the selection lands (D31): the slot, counted among the target’s cases that are NOT in ids, the first moved case takes — the rest follow in the order of ids. Past the end means last. Absent, each case goes last, as PATCH does.

integer
Examples

Move three cases into a suite

{
"ids": [
"6f1c2b3a-0000-4000-8000-0000000000c1"
],
"action": {
"kind": "move",
"suiteId": "6f1c2b3a-0000-4000-8000-0000000000a1"
}
}

What was done and what was refused

Media type application/json

Always 200 when the body is valid: what was done and what was refused, by id. Sequential and not atomic — what was done before a refusal stays done.

object
done
required
Array<string>
refused
required
Array<object>
object
id
required
string
error
required
string
Example
{
"done": [
"6f1c2b3a-0000-4000-8000-0000000000c1"
],
"refused": []
}

Invalid body, or a move target every case would be refused for

Media type application/json
object
error
required
string
Example
{
"error": "suite '6f1c2b3a-0000-4000-8000-0000000000a2' is a folder — cases go in suites"
}

No / invalid token or session

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