Input & Output
The real node data envelope, how the collection is resolved, output ports, and the exact per-operation output shape.
The Node Data Envelope
Every node's input and output — CollectionOperation's included — is shaped like this. Run metadata sits at the top level; the actual payload records live under items, each entry holding its record under "json":
{
"timestamp": "2026-07-24T01:02:27.8652562Z",
"triggerTime": "2026-07-24T01:02:27.8652562Z",
"resource": "trigger",
"operation": "manual-trigger",
"status": "success",
"portName": "main",
"items": [
{
"json": {
"timestamp": "2026-07-24T01:02:27.8652562Z",
"triggerTime": "2026-07-24T01:02:27.8652562Z",
"resource": "trigger",
"operation": "manual-trigger",
"status": "success",
"portName": "main"
}
}
],
"success": true
}
CollectionOperation's real collection is InputData["items"] — it unwraps each entry's "json" value into one array element. It never reads the outer envelope fields as data; those describe the upstream node's run.
When you type test data into inlineDataSource, or reference data freshly fetched by an external API call, write a plain JSON array of elements — [{...}, {...}] — not the items/json wire shape. The node (via the shared ResolveSourceRecords helper) parses it and normalizes it into the standard shape itself before producing output.
Output Ports
| Port | Condition | Description |
|---|---|---|
| success | Operation completed — including when some items failed under onError: "continue" | Result available at output.NodeName.items. Always check errorCount even on this port to detect partial per-item failures. |
| error | Collection unresolvable, missing/invalid operation or expression, or error thresholds exceeded | Error details in output.NodeName.error. See the three failure conditions below. |
1) Structural: collection can't be resolved at all, operation is missing/unrecognized, or the operation's required expression is missing. 2) onError: "error" threshold: errorCount exceeded maxErrorCount. 3) Circuit breaker: maxErrorsToCollect was reached mid-operation — this fails the node regardless of onError, since the operation didn't finish processing every item.
Output Data Fields
| Field | Type | Present For | Description |
|---|---|---|---|
status | string | All operations | Literal "success" on the success path. |
successCount | integer | All operations | Number of items that processed without error. |
errorCount | integer | All operations | Total items that failed, including any beyond the maxErrorsToCollect cap. |
errorRecords | array | All operations | Up to maxErrorsToCollect failed items, each as {"item": <original>, "error": "<message>"}. |
count | integer | filter, map, sort, distinct, reverse | Number of successful result records (equals successCount). Not present for reduce/count/first/last. |
items | array | All operations | List operations: one {"json": record} entry per successful result record. Scalar operations (reduce/count/first/last): a single item wrapping the scalar or element value. |
Per-Operation Output Examples
// filter operation output (no errors):
{
"status": "success",
"successCount": 2,
"errorCount": 0,
"errorRecords": [],
"count": 2,
"items": [
{ "json": { "orderId": "ORD-001", "status": "active", "total": 100 } },
{ "json": { "orderId": "ORD-003", "status": "active", "total": 250 } }
]
}
// map operation output (extracting IDs):
{
"status": "success",
"successCount": 3,
"errorCount": 0,
"errorRecords": [],
"count": 3,
"items": [
{ "json": "ORD-001" },
{ "json": "ORD-003" },
{ "json": "ORD-005" }
]
}
// reduce operation output (sum) — single item, no "count" field:
{
"status": "success",
"successCount": 3,
"errorCount": 0,
"errorRecords": [],
"items": [
{ "json": 580.50 }
]
}
// first operation output — single item, no "count" field:
{
"status": "success",
"successCount": 1,
"errorCount": 0,
"errorRecords": [],
"items": [
{ "json": { "orderId": "ORD-001", "status": "pending", "total": 99.99 } }
]
}
// count operation output — single item holding the integer, no "count" field:
{
"status": "success",
"successCount": 1,
"errorCount": 0,
"errorRecords": [],
"items": [
{ "json": 7 }
]
}
Accessing Results Downstream
| Expression | What It Returns |
|---|---|
{@ output.FilterActiveOrders.items } | The filtered array of {"json": ...} entries — active order objects |
{@ output.SumOrderTotals.items[0].json } | The numeric sum produced by reduce |
{@ output.FilterActiveOrders.successCount } | Number of active orders that matched (integer) |
{@ output.FilterActiveOrders.errorCount } | Number of items that failed evaluation — check this even on success |
{@ output.FindFirstPending.items[0].json.orderId } | The orderId of the first pending order |