Knowledge Base - Smart Flows

Gain Insights in Adoption Rate & License Consumption

As organizations scale their use of Experlogix Smart Flows, understanding how the platform is being used becomes just as important as what it can do. Questions like which flows are actively used, which templates drive the most value, and how license capacity is consumed over time are essential for making informed operational, financial, and product decisions.

Without clear visibility, teams risk underutilizing licensed capabilities, overlooking adoption bottlenecks, or scaling automation without knowing where capacity constraints may arise.

This tutorial focuses on how to gain actionable insights into adoption rates and license consumption using the reporting capabilities in Experlogix Smart Flows. These reports provide transparency across stages, users, flows and templates, enabling administrators and decision-makers to:

  • Monitor how actively Smart Flows is used across teams and processes

  • Identify high-value and underutilized flows or templates

  • Track license usage and consumption trends

  • Support capacity planning and informed licensing decisions

By combining operational usage data with licensing insights, Smart Flows reporting helps organizations move from automation in use to automation under control, ensuring that investments in document and process automation continue to deliver measurable value as adoption grows.

Check the License and Release DatesLicense and Release Dates table below to verify if your Experlogix Smart Flows version and license supports all features mentioned in this tutorial.

License and Release Dates

Feature

Version

Release Date

Licensing

Reporting API Endpoints

4.27+

February 2026

Included in all licenses

Reporting UI for DPU consumption, user analytics and flow utilization

4.28+

June 2026

Included in all licenses

Reporting - Microsoft Excel export

4.28+

June 2026

Included in all licenses

Custom reporting views

4.28+

June 2026

Included in all licenses

How to use the Smart Flows Reporting API endpoints

Experlogix Smart Flows exposes reporting API endpoints that allow you to access usage, adoption, and license consumption data programmatically. This API-first approach enables organizations to go beyond out-of-the-box dashboards and integrate Smart Flows reporting data directly into their own analytics and monitoring ecosystems.

Report Types

The reporting APIs in Experlogix Smart Flows are organized around various Types. A report type defines what kind of insight you want to extract from the system and determines which data points (output columns) are available in the response.

By selecting the appropriate type, you can focus your reporting on user activity, flow adoption, template usage, or license consumption, without having to filter irrelevant data afterward.

Below is an overview of the available report types, what they are typically used for, and the output columns they support.

Reporting Types overview

Report type

Purpose

Typical questions answered

Login

Tracks user sign-in activity.

Who is actively using Smart Flows? When do users log in?

Logout

Tracks user sign-out activity.

Which users are signing out?Usage duration patterns.

Flow utilization

Measures how and when flows are executed.

Which flows are used most? How are they triggered?

Template utilization

Tracks template usage across flows and users.

Which templates drive adoption? In which contexts are they used?

DPU consumption

Measures license usage and processing cost

Where are DPUs consumed? By which flows, templates, or users?

Login and Logout reports

These report types capture authentication events and are typically used to analyze user adoption and activity levels.

Supported output columns

Index

Field

Display name

Description

Data type

0

timestamp

Timestamp

Date and time of the event

DateTime

1

user.name

User Name

Name of the user

String

2

user.id

User ID

Unique identifier for the user

Uuid

3

user.tags

User Tags

Tags associated with the user

StringList

Flow utilization reports

Flow utilization reports provide insight into how Smart Flows automations are executed, by whom, and under which conditions.

Supported output columns

Index

Field

Display name

Description

Data type

0

timestamp

Timestamp

Date and time of the event

DateTime

1

phase

Phase

Execution phase, test or production

String

2

execution.id

Execution ID

Unique identifier for the flow execution

Uuid

3

executedby.name

Executed By

Name of the user who triggers the flow execution (the executor)

String

4

executedby.tags

Executor Tags

Tags for the executor

StringList

5

flow.id

Flow ID

Unique identifier for the flow

Uuid

6

flow.name

Flow Name

Name of the flow

String

7

flow.trigger

Flow Trigger

Trigger for the flow

String

8

flow.tags

Flow Tags

Tags for the flow

StringList

Template utilization reports

Template utilization reports focus on document generation behavior, showing which templates are used, by whom, and in which flows.

Supported output columns

Index

Field

Display name

Description

Data type

0

timestamp

Timestamp

Date and time of the event

DateTime

1

template.id

Template ID

Unique identifier for the template

Uuid

2

template.name

Template Name

Name of the template

String

3

template.tags

Template Tags

Tags for the template

StringList

4

template.type

Template Type

Type of the template

String

5

template.language

Template Language

Language of the template

String

6

outputformat

Output Format

Format of the output

String

7

usedby.id

Used By ID

ID of the user who used the template

Uuid

8

usedby.name

Used By Name

Name of the user who used the template

String

9

usedby.tags

Used By Tags

Tags for the user who used the template

StringList

10

flow.id

Flow ID

Unique identifier for the flow

Uuid

11

flow.name

Flow Name

Name of the flow

String

12

flow.trigger

Flow Trigger

Trigger for the flow

String

13

flow.tags

Flow Tags

Tags for the flow

StringList

DPU consumption reports

DPU consumption reports are designed for license monitoring and cost control, showing where document processing units are consumed across executions.

Supported output columns

Index

Field

Display name

Description

Data type

0

timestamp

Timestamp

Date and time of the event

DateTime

1

document.name

Document Name

Name of the document

String

2

document.contenttype

Content Type

Type of document content

String

3

dpuconsumed

DPU Consumed

Document processing units consumed

Integer

4

phase

Phase

Execution phase

String

5

consumedby.id

Consumed By ID

ID of the consumer

Uuid

6

consumedby.name

Consumed By Name

Name of the consumer

String

7

consumedby.tags

Consumer Tags

Tags for the consumer

StringList

8

template.id

Template ID

Unique identifier for the template

Uuid

9

template.name

Template Name

Name of the template

String

10

template.tags

Template Tags

Tags for the template

StringList

11

template.type

Template Type

Type of the template

String

12

template.language

Template Language

Language of the template

String

13

flow.id

Flow ID

Unique identifier for the flow

Uuid

14

flow.name

Flow Name

Name of the flow

String

15

flow.trigger

Flow Trigger

Trigger for the flow

String

16

flow.tags

Flow Tags

Tags for the flow

StringList

API endpoints for report types

The following table lists relevant API endpoints for report types.

Method & Endpoint

Description

GET /api/v1/reporting/types

List all available view types.

GET /api/v1/reporting/types/{type}

Get a specific view type. {type} can be either the name or the id of the view type and is a required parameter.

GET /api/v1/reporting/types/{type}/data

Return reporting data according to the view type. {type} can be either the name or the id of the view type and is a required parameter. Query parameters can be applied to control the structure of the response.

GET /api/v1/reporting/types/{type}/data/download

Return reporting data according to the view type. {type} can be either the name or the id of the view type and is a required parameter. Query parameters can be applied to control the structure of the response. The response contains a Content-Disposition header that specifies the filename with extension of the data. A custom name for the file can be specified using the filename request parameter, an appropriate extension is appended to the name. The body of the request can contain a filter.

POST /api/v1/reporting/types/{type}/data

Return reporting data according to the view type. {type} can be either the name or the id of the view type and is a required parameter. Query parameters can be applied to control the structure of the response.

POST /api/v1/reporting/types/{type}/data/download

Return reporting data according to the view type. {type} can be either the name or the id of the view type and is a required parameter. Query parameters can be applied to control the structure of the response. The response contains a Content-Disposition header that specifies the filename with extension of the data. A custom name for the file can be specified using the filename request parameter, an appropriate extension is appended to the name. The body of the request can contain a filter.

Reporting Views

For each of the report types, Smart Flows comes with one or more Reporting Views. A view is a filtered result set of reporting records of one of the report types. It is defined by:

  • a filter definition

  • a set of columns to include in the output

  • an ordering of the included columns

Out-of-the-box reporting views

Type

Name of the view

System name

Description

Login

Never Logged In

neverloggedin

Lists all users who have been provisioned in Smart Flows but have never logged in. Useful for identifying unused licenses and onboarding gaps.

Login

All Logins

alllogins

Provides an overview of all user login events, including frequency and timing, to help analyze user adoption and activity patterns.

Logout

All Logouts

alllogouts

Shows all user logout events, offering insight into session behavior and overall platform usage.

Template utilization

All Templates

alltemplates

Displays an overview of all document generation actions that use a template in the environment, helping assess template usage, adoption, and opportunities for cleanup or consolidation.

Flow utilization

All Executions

allexecutions

Provides a complete overview of all flow executions, enabling analysis of automation adoption, execution volumes, and trends over time.

DPU consumption

All DPU Consumption

alldpuconsumption

Shows detailed Document Processing Unit (DPU) consumption, allowing monitoring of license usage, optimization of consumption patterns, and capacity planning.

API endpoints for reporting views

The following table lists relevant API endpoints for reporting views.

Method & Endpoint

Description

GET /api/v1/reporting/views

List all available views for all view types.

GET /api/v1/reporting/views/{view}

Get a specific view. {view} can be either the id or the name of the view.

GET /api/v1/reporting/views/{view}/data

Return reporting data for the view. {view} can be the name or id. Query parameters can shape the response structure.

GET /api/v1/reporting/views/{view}/data/download

Download reporting data for the view. Supports query parameters; response includes a downloadable file.

Advanced reporting options

By targeting the Reporting View endpoints, you can retrieve relevant reporting data. Advanced reporting view options help you distill actionable insights from that data:

  • Aggregate results - Perform calculations on the retrieved results, to track insights in the form of key numbers

  • Define query parameters - Set parameters to page, sort and format reporting data

Aggregating reporting view data

Aggregations allow you to group and summarize data returned by Experlogix Smart Flows reporting views. Instead of retrieving individual reporting lines, aggregation enables you to answer higher-level questions such as:

  • How many executions occurred per flow?

  • What is the total or average DPU consumption user, per flow or per template?

  • Which flows or templates are used most frequently?

Aggregations are defined by grouping one or more columns and applying aggregation functions to selected fields.

Aggregation structure

An aggregation request consists of two main parts:

  • groupByColumns - defines how the data should be grouped

  • aggregationColumns - defines which values should be aggregated

{
  "groupByColumns": ["column1", "column2"],
  "aggregationColumns": [
    {
      "columnName": "columnName",
      "distinctValues": false,
      "function": "aggregationFunction"
    }
  ]
 

groupByColumns is a list of column names used to group the result set. At least one column must be specified.

  • Column names must match the column names exposed by the reporting view.

  • Each unique combination of grouped columns results in one aggregated record.

Example use cases:

  • Group executions by flow.id

  • Group logins by user.id

  • Group DPU consumption by date

aggregationColumns defines which columns should be aggregated and which aggregation function should be applied.

  • At least one aggregation column must be defined

  • Each aggregation column specifies:

    • Tthe source column

    • Tthe aggregation function

    • Wwhether distinct values should be considered

distinctValues

  • Defaults to false

  • When set to true, only unique values are considered during aggregation

  • Functions that do not support distinct values (min, max, concat) silently ignore this setting

Example aggregation

The following example groups execution data by flow and counts how many executions occurred per flow.

{
  "groupByColumns": [
    "flow.id",
    "flow.name"
  ],
  "aggregationColumns": [
    {
      "columnName": "execution_count",
      "viewColumnName": "flow.id",
      "aggregationType": "COUNT"
    }
  ]
}
 

This query groups data by flow.id and flow.name and counts the number of execution records per flow.

{
  "data": [
    {
      "execution_count": 7,
      "flow": {
        "id": "7DFDC541-40FF-4C41-B86B-0C731EBF5DD9",
        "name": "Show account info"
      }
    },
    {
      "execution_count": 3,
      "flow": {
        "id": "9E4B744D-0CF2-48C2-A326-11D4AF9A7005",
        "name": "Create quote"
      }
    }
  ]
 

Supported aggregation functions

The following endpoints are available for executing aggregation queries:

  • POST /api/v1/reporting/views/{view}/aggregate

    Returns aggregated results as JSON

  • POST /api/v1/reporting/views/{view}/aggregate/download

    Returns aggregated results as a downloadable file

Defining query parameters: paging, sorting, and output options

When retrieving data from Smart Flows reporting views, all requests support pagination, sorting, filtering, and output customization. These query parameters allow you to efficiently navigate large result sets and shape the response to fit downstream reporting or integration needs.

Paging and sorting - Paging parameters

Parameter

Type

Description

Default

Example

page

Integer

Zero-based page index (first page is 0)

0

?page=2

size

Integer

Number of records per page

20

?size=50

Sorting parameters

Parameter

Type

Description

Default

Example

sort

String[]

Sorting criteria in the format property,direction, where direction is asc or desc. Multiple sort parameters are supported and applied in order.

?sort=name,asc&sort=timestamp,desc

Paging and sorting examples

GET /reporting/views/login/data?page=0&size=25
GET /reporting/views/login/data?page=1&size=10&sort=timestamp,desc
GET /reporting/views/execution/data?page=0&size=20&sort=timestamp,desc&sort=flow.name,asc
  • Paging is zero-indexed

  • If size is not specified, a default page size of 20 is applied

  • Sorting defaults to ascending (asc) if no direction is specified

  • Multiple sort parameters are evaluated in the order they appear


Output formatting

Following query parameters define how the reporting data is formatted.

Parameter

Type

Description

Default

Allowed values

format

String

Output format for the response.

reportingdata

resultset, reportingdata, recordlist, csv

flat

Boolean

Return a flat structure instead of nested elements.

false

true, false

includeNullValues

Boolean

Include null-valued fields in the output.

true

true, false

flattenArrays

Boolean

Flatten array values into a single string.

false

true, false

flatArraySeparator

String

Separator used when flattening arrays.

;

Any character

normalizeNames

Boolean

Normalize field names to alphanumeric characters and '_'.

false

true, false

emptyListsAsNulls

Boolean

Return null instead of empty lists.

true

true, false

The Accept HTTP header controls whether structured responses are returned as JSON or XML:

  • Accept: application/json (default)

  • Accept: application/xml

This applies when format is resultset, reportingdata, or recordlist.


Time zone handling - Time zone parameters

Parameter

Type

Description

Default

Example

useProjectTimeZone

Boolean

Use the project’s configured time zone for date/time fields. When set to true, this setting takes precedence over timeZone.

false

true

timeZone

String

Time zone to use for date/time fields. If omitted and useProjectTimeZone is false, timestamps are returned in UTC.

Europe/Brussels, America/New_York

Time range and phase filtering - Filter parameters

Parameter

Type

Description

Default

Allowed values

phase

String

Execution phase to filter on

production, test

timeRangeType

String

Predefined or custom time range

last30Minutes, last1Hour, last4Hours, last12Hours, last24Hours, last48Hours, last3Days, lastWeek, lastMonth, last3Months, last6Months, lastYear, fromBeginning, and custom.

timeRangeStart

String (ISO 8601)

Start timestamp for a custom time range

2023-01-01T00:00:00Z

timeRangeEnd

String (ISO 8601)

End timestamp for a custom time range

2023-01-31T23:59:59Z

  • timeRangeStart and timeRangeEnd are only used when timeRangeType=custom

  • If either timeRangeStart or timeRangeEnd is specified without timeRangeType, the request defaults to custom

CSV export options

CSV-specific parameters apply only when the selected output format supports CSV export.

Parameter

Type

Description

Default

Allowed values

csvDelimiter

Character

CSV delimiter character

,

Any character

csvQuoteChar

Character

CSV quote character

\"

Any character

csvLineEnding

String

Line ending format

lf

lf, cr, crlf

csvIncludeHeader

Boolean

Include header row in CSV output

true

true, false

csvNullValue

String

String representation for null values

empty string

Any string

Usage examples

GET /reporting/views/login/data
GET /reporting/views/execution/data?flat=true&normalizeNames=true
GET /reporting/views/execution/data?timeRangeType=last24Hours&phase=production
GET /reporting/views/login/data?timeRangeType=custom&timeRangeStart=2023-01-01T00:00:00Z&timeRangeEnd=2023-01-31T23:59:59Z
GET /reporting/views/dpu/data?format=csv&csvDelimiter=;&csvLineEnding=crlf&csvNullValue=N/A
GET /reporting/views/template/data?timeZone=Europe/Brussels

Beyond views - retrieving and formatting custom reporting data

Defining filters for reporting data retrieval

The reporting API supports powerful, structured filtering that allows you to precisely control which records are returned. Filters are defined as a tree of nodes, where each node is either:

  • Aa single condition, or

  • aA group of conditions combined with logical operators (AND, OR)

A node must contain either a condition or a group — never both.

Filter structure overview - Basic filter node types

Node type

Description

Condition

A single comparison on one field (for example, execution date, user name, or DPU amount).

Group

A logical container that combines multiple nodes using AND or OR. Groups can be nested.

Details

Single condition

A condition compares one field to one or more values using an operator.

{
  "condition": {
    "key": "user.tags",
    "operator": "contains",
    "values": ["salesteam"]
  }
}
 
Details

Group of conditions

Groups allow you to combine multiple conditions using logical operators.

{
  "group": {
    "operator": "AND",
    "nodes": [
      {
        "condition": {
          "key": "flow.id",
          "operator": "equalTo",
          "values": ["c47410a7-da52-49ef-8f4f-940b3d339af3"]
        }
      },
      {
        "condition": {
          "key": "phase",
          "operator": "equalTo",
          "values": ["test"]
        }
      }
    ]
  }
}
 
Details

Building complex filters

AND logic

Match records where all conditions are true.

{
  "group": {
    "operator": "AND",
    "nodes": [
      {
        "condition": {
          "key": "executedby.tags",
          "operator": "contains",
          "values": ["salesteam"]
        }
      },
      {
        "condition": {
          "key": "dpuconsumed",
          "operator": "greaterThan",
          "values": ["1"]
        }
      }
    ]
  }
}
 
Details

OR logic

Match records where any condition is true.

{
  "group": {
    "operator": "OR",
    "nodes": [
      {
        "condition": {
          "key": "flow.trigger",
          "operator": "equalTo",
          "values": ["salesforce"]
        }
      },
      {
        "condition": {
          "key": "flow.trigger",
          "operator": "equalTo",
          "values": ["dynamics"]
        }
      }
    ]
  }
}
 
Details

Nested groups

You can nest groups to combine AND and OR logic.

{
  "group": {
    "operator": "OR",
    "nodes": [
      {
        "group": {
          "operator": "AND",
          "nodes": [
            {
              "condition": {
                "key": "executedby.tags",
                "operator": "contains",
                "values": ["salesteam"]
              }
            },
            {
              "condition": {
                "key": "dpuconsumed",
                "operator": "greaterThan",
                "values": ["1"]
              }
            }
          ]
        }
      },
      {
        "condition": {
          "key": "flow.trigger",
          "operator": "equalTo",
          "values": ["salesforce"]
        }
      }
    ]
  }
}
 
Details

Common filtering patterns

Multiple values for the same field (OR)

{
  "group": {
    "operator": "OR",
    "nodes": [
      { "condition": { "key": "user.name", "operator": "equalTo", "values": ["alice"] } },
      { "condition": { "key": "user.name", "operator": "equalTo", "values": ["bob"] } },
      { "condition": { "key": "user.name", "operator": "equalTo", "values": ["charlie"] } }
    ]
  }
}
 
Details

Range filtering (AND)

{
  "group": {
    "operator": "AND",
    "nodes": [
      {
        "condition": {
          "key": "dpuconsumed",
          "operator": "greaterThanOrEqualTo",
          "values": ["1"]
        }
      },
      {
        "condition": {
          "key": "dpuconsumed",
          "operator": "lessThanOrEqualTo",
          "values": ["3"]
        }
      }
    ]
  }
}
 

Supported condition operators

Details

Range operators

Operator

Description

between

Matches values between two values (inclusive).

notBetween

Matches values outside a range.

{
  "key": "dpuconsumed",
  "operator": "between",
  "values": ["1", "3"]
}
 
Details

Comparison operators

Operator

Description

equalTo

Exact match

notEqualTo

Not equal

greaterThan

Greater than

lessThan

Less than

greaterThanOrEqualTo

Greater than or equal

lessThanOrEqualTo

Less than or equal

Details

Text operators

Operator

Description

like

Pattern match (wildcards)

notLike

Excludes pattern

contains

Substring match

containsLike

Pattern-based contains

{
  "key": "template.name",
  "operator": "contains",
  "values": ["Invoice"]
}
 
Details

Empty / blank operators

Operator

Description

isBlank

Empty or whitespace

notIsBlank

Not empty

Details

Null checking

Operator

Description

isNull

Value is null

isNotNull

Value exists

Details

Collection operators

Operator

Description

in

Value exists in a list

{
  "key": "executedby.tags",
  "operator": "in",
  "values": ["salesteam", "marketingteam", "presalesteam"]
}
 

Formatting the output of a custom report

Reporting queries can return data in multiple output formats, allowing you to choose the structure that best fits your integration, reporting, or export scenario. Output formatting is controlled through a combination of the format query parameter and standard HTTP headers.

Structured text formats (JSON and XML)

Structured output formats can be returned as JSON or XML, depending on the Accept header of the request:

  • If the Accept header specifies a MIME type compatible with JSON, the response is returned as JSON.

  • If the Accept header specifies a MIME type compatible with XML, the response is returned as XML.

  • If no compatible MIME type is specified, JSON is returned by default.

MIME type compatibility rules

Two MIME types are considered compatible if:

  • Their primary types match (or either uses the wildcard *)

  • Their subtypes match (or either uses the wildcard *)

Examples:

  • application/* is compatible with application/json

  • For XML responses, use application/xml or text/xml

To explicitly request XML output, ensure the Accept header contains only an XML-compatible MIME type and does not include any MIME types compatible with JSON.

Output format: resultset

The resultset format is designed for paginated, tabular reporting scenarios. It includes both metadata and row data.

Structure

  • columns – list of column definitions, including name and data type

  • rows – list of result rows, each represented as a map of column names to values

  • pageSize – number of rows returned in the current page

  • pageNumber – zero-based index of the current page

  • totalRecords – total number of records available across all pages

GET /api/v1/reporting/types/execution/data?format=resultset
{
  "columns": [
    { "name": "timestamp", "type": "DateTime" },
    { "name": "phase", "type": "String" },
    { "name": "execution.id", "type": "Uuid" },
    { "name": "executedby.name", "type": "String" }
  ],
  "rows": [
    {
      "timestamp": "2025-11-17T10:16:26.346807400Z",
      "phase": "TEST",
      "execution.id": "6D5331BE-0B52-4624-9E26-15132BD9B461",
      "executedby.name": "admin"
    }
  ],
  "pageNumber": 0,
  "pageSize": 20,
  "totalRecords": 10
}
 

This format is ideal for UI grids, paged APIs, and structured reporting tools.

Output format: reportingdata

The reportingdata format returns results as a JSON object containing a data array, where each entry represents one record. Nested structures are preserved.

GET /api/v1/reporting/types/execution/data?format=reportingdata
{
  "data": [
    {
      "timestamp": "2025-11-17T10:16:26.346807400Z",
      "phase": "TEST",
      "execution": { "id": "6D5331BE-0B52-4624-9E26-15132BD9B461" },
      "executedby": {
        "name": "admin",
        "tags": ["Users.Good"]
      },
      "flow": {
        "id": "9E4B744D-0CF2-48C2-A326-11D4AF9A7005",
        "name": "onder dataset"
      }
    }
  ]
}
 

This format is well-suited for programmatic consumption where hierarchical data is preferred.

Output format: recordlist

The recordlist format returns the result as a plain JSON array, without wrapping it in a data property.

GET /api/v1/reporting/types/execution/data?format=recordlist
[
  {
    "timestamp": "2025-11-17T10:16:26.346807400Z",
    "phase": "TEST",
    "execution": { "id": "6D5331BE-0B52-4624-9E26-15132BD9B461" },
    "executedby": { "name": "admin" },
    "flow": { "id": "9E4B744D-0CF2-48C2-A326-11D4AF9A7005" }
  }
]

This format is useful when the result set needs to be processed directly as a list, for example in scripting or lightweight integrations.

Text output format: csv

The CSV csv format returns query results as comma-separated values, with one row per record.

Supported CSV-features include:

Feature

Description

Default

Configuration

Header row

Controls whether the first row contains column names

Included

csvIncludeHeader=true (default) / csvIncludeHeader=false

Delimiter

Character used to separate columns

, (comma)

csvDelimiter=; or csvDelimiter=%09 (tab)

Quote character

Character used to quote values containing special characters

" (double quote)

csvQuoteChar='

Line endings

End-of-line character(s) used in the CSV file

lf

crlf (Windows), cr (legacy Mac)

Null values

Representation of null values in CSV output

Empty string

csvNullValue=NULL

Date and time values

Format used for date/time fields

ISO 8601 (UTC)

Adjusted when a custom time zone is configured

Arrays and lists

How array values are represented in CSV output

Flattened into a single cell

Separator configurable via flatArraySeparator

GET /api/v1/reporting/types/execution/data?format=csv

CSV output is ideal for exports, spreadsheets, and integration with external reporting or BI tools.