Understanding reporting API payloads
The list-report endpoint, POST /api/repositories/{repository}/reporting/list, returns report data in a compact, array-based shape. Because a report can nest data to any depth, the response describes its own structure instead of using a fixed schema — so a client can read any report once it understands the pattern.
Overview
You send a request body with the report definition:
{
"approvedOnly": true,
"filters": ["type=ObjectType.PROCESS and isSupportedBy.object.type=ObjectType.RESOURCE"],
"properties": ["isSupportedBy"]
}
filters— the row filter, written in iGrafx Query Language (IQL).properties— the columns to include beyond the object's own identity.approvedOnly— whentrue, restricts the report to approved versions.
The response has two parts: a heading that describes the columns, and a body that holds the rows.
Key concepts
Heading. An array of column descriptors. Each has a name and a type (for example, Int32 or NString). A column that holds a collection of related objects also has a collectionType (such as Set) and its own nested heading describing the columns of each related object.
[
{ "name": "ID", "type": "Int32" },
{ "name": "name", "type": "NString" },
{ "name": "isSupportedBy", "type": "IsSupportedBy", "collectionType": "Set",
"heading": [ { "name": "ID", "type": "Int32" }, { "name": "name", "type": "NString" } ] }
]
Body. An array of rows. Each row is itself an array of values, in the same order as the heading. A value for a collection column is itself an array of nested rows that match the nested heading.
[
[ 1, "Process 1", [ [2, "Application 1"], [3, "Application 2"] ] ],
[ 4, "Process 2", [ [5, "Application 3"], [6, "Person 1"] ] ]
]
Positional mapping. Values carry no names — you read each one by its position in the matching heading. In the first row, 1 is the ID, "Process 1" is the name, and the third element is the isSupportedBy set, where each entry ([2, "Application 1"]) maps to the nested heading's ID and name.
Returning rows as arrays rather than named objects keeps the payload small, which matters for reports with many rows.