Cases (classic API)¶
The cases resource is the heart of the classic API: list the cases a user can see,
read one, act on it, and reach its documents, notes and variables.
Paths are relative to /api/1.0/{workspace}/cases.
Listing¶
| Route | Returns |
|---|---|
GET / |
The cases the caller can see |
GET /paged |
The same, paginated |
GET /draft, /participated, /unassigned, /paused |
One tray, with the same paged variant |
GET /advanced-search, /advanced-search/paged |
The result of a saved filter |
GET /advanced-search/filters |
The filters this user saved |
POST /advanced-search/filter · PUT/DELETE …/:filterUid |
Create, update, delete a filter |
The trays are also available through home/ and lists/, with counts. Prefer one
of the three families in an integration: they return the same cases in different shapes,
and mixing them means parsing two field sets.
The list endpoints share a set of query parameters and return 15 cases by default, sorted by case number, newest first:
| Parameter | Meaning |
|---|---|
caseNumber |
One case number |
process |
The process id |
task |
The task id |
limit |
How many to return |
offset |
Where to start |
caseTitle |
Text in the case title |
reviewStatus |
READ or UNREAD: whether the assignee has opened the case |
Reading a case¶
| Route | Returns |
|---|---|
GET /:appUid |
The case |
GET /:appUid/current-task |
The task it is on |
GET /:appUid/tasks |
Every task of the case |
GET /:appUid/:del_index/steps |
The steps of one delegation |
GET /:appNumber/supervisor |
The supervisor of the case |
GET /:appUid/sub-process-cases |
The cases it spawned |
app_uid is the case id (APP_UID); del_index is the position of the task in the
case, and both appear in every list response.
GET /:appUid answers with the case header and its open tasks:
{
"app_uid": "36722263554ca70b82c52e8020802754",
"app_number": "5",
"app_name": "#5",
"app_status": "TO_DO",
"pro_uid": "35648267754ca36d119ecc1014698225",
"pro_name": "Safety training course",
"app_create_date": "2026-01-29 12:41:12",
"current_task": [
{ "usr_uid": "…", "usr_name": "Administrator", "tas_uid": "…",
"tas_title": "Written safety test", "del_index": 2, "del_thread_status": "OPEN" }
]
}
Reading a case you do not participate in requires a process permission such as the
summary form or ALL.
Notes¶
| Route | Does |
|---|---|
GET /:appUid/notes · /:appUid/notes/paged |
List the notes; the paged variant accepts search |
POST /:appUid/note |
Add one |
POST takes note_content — plain text, \n for a line break — and send_mail,
which when set to 1 emails the note to every participant. The message is queued, not
sent immediately: it leaves when the scheduler runs.
Documents¶
| Route | Does |
|---|---|
GET /:appUid/input-documents |
The input documents of the case |
GET /:appUid/input-document/:inp_doc_uid |
One definition |
GET /:appUid/input-document/:app_doc_uid/file |
Download the file |
GET /:appUid/input-document/:app_doc_uid/versions |
Its versions |
POST /:appUid/input-document |
Upload |
DELETE /:appUid/:del_index/input-document/:app_doc_uid |
Delete |
GET /:appUid/output-documents |
The generated documents |
GET /:appUid/output-document/:app_doc_uid/file |
Download one |
POST /:appUid/:del_index/output-document/:out_doc_uid |
Generate one |
DELETE /:appUid/output-document/:app_doc_uid |
Delete one |
The upload takes inp_doc_uid (the definition), tas_uid (the task where the document is
a step) and app_doc_comment. Generating an output document takes the del_index and the
out_doc_uid — the id behind Show ID in the list of output documents.
Uploading into a variable (a file field of a form) is a separate family:
POST /:appUid/upload/:var_name
POST /:appUid/upload/:var_name/:doc_uid
POST /:appUid/upload/:var_name/:doc_uid/:app_doc_uid
The three variants add a version to an existing document instead of replacing it.
Variables¶
| Route | Does |
|---|---|
GET /:appUid/variables |
Every variable of the case |
PUT /:appUid/variable?del_index=N |
Write variables; del_index says which delegation records the change |
GET /:appUid/:del_index/variable/:var_name |
Read one variable at that delegation |
GET /:appUid/:del_index/variable/:var_name/paged |
Read a grid variable, paginated |
del_index is the delegation index — the position of the task in the case, also exposed
to the process as the system variable @%INDEX. Reading a variable per delegation is what
tells you what the case held at that step, not what it holds now.
Acting on a case¶
Each action takes its id in the path and the rest in the body:
reassign-case—usr_uid_source(the current assignee) andusr_uid_targetare required; the target must already be in the task's pool of users.del_indexis optional and defaults to the most recent open task.pause—unpaused_dateinYYYY-MM-DDorYYYY-MM-DD HH:MM:SS; an empty string pauses the case indefinitely.unpause—unpaused_dateoptional; empty or absent resumes immediately.route-case—del_indexoptional, defaults to the highest open task.executeTriggersBeforeAssignmentexists but is not recommended: it can send the case into a loop.execute-trigger— thetri_uidof the trigger; it runs even when that trigger is not attached to the case's process.cancelanddelete— onlyapp_uid.
A failure answers with an error object, not a bare status:
{"error": {"code": 400,
"message": "Bad Request: This case delegation is already closed or does not exist"}}
| Route | Effect |
|---|---|
PUT /:appUid/claim |
Assigns an unassigned case to the caller |
PUT /:appUid/:usrUid/assign |
Assigns it to another user |
PUT /:appUid/reassign-case |
Reassigns it |
POST /reassign |
Reassigns in batch |
PUT /:appUid/pause · /unpause |
Pauses and resumes |
PUT /:appUid/cancel |
Cancels |
DELETE /:appUid |
Deletes |
PUT /:appUid/route-case |
Moves it to the next task |
PUT /:appUid/execute-trigger/:tri_uid |
Runs one trigger |
PUT /:appUid/execute-triggers |
Runs several |
Routing is the one to watch: route-case moves the case to the next task without a
form submission. When the step has a DynaForm, the workspace API's case-derivate is
the call that stores the form and moves the case together.
Starting cases¶
| Route | Returns |
|---|---|
GET /start-cases |
The tasks the caller can start |
GET /bookmark-start-cases |
The ones they bookmarked |
POST /bookmark/:tas_uid · DELETE /bookmark/:tas_uid |
Add or remove a bookmark |
POST / |
Starts a case |
POST /impersonate |
Starts it as another user |
POST /cases takes the task, the user and the initial variables; the response carries
the new APP_UID.
Who can start a process¶
Two resources answer that question without starting anything:
| Route | Returns |
|---|---|
GET /project/:prj_uid/process-permissions |
The permission rules of the process |
GET /project/:prj_uid/users |
The users related to the process |
GET /project/:prj_uid/user/:usr_uid/starting-tasks |
The tasks that user can start |
That last one is the practical check: an empty list means the user cannot start anything in the process, whatever the diagram says.
Related¶
- Classic REST API — base URL and authentication.
- Endpoint reference — every documented route.
- Cases in the workspace API — the newer surface.