Our API enables you to track and manage all your monitored workflows. You can:
  • Get all active workflows with monitoring enabled
  • Retrieve historical data changes across your workflows

Prerequisites

To get the most out of this guide, you’ll need to:

1. Get All Active Monitoring Workflows

Use the following endpoint to retrieve your workflows:
GET https://api.kadoa.com/v4/workflows
View full API reference → The response will include all workflows that are in your scope (user, team, organization). To get all workflows that are active and have real-time monitoring enabled, you can use the following query parameter:
GET https://api.kadoa.com/v4/workflows?limit=100&state=ACTIVE&monitoring=true&updateInterval=REAL_TIME

2. Get Historical Data Changes

The /changes endpoint returns all historical data changes detected by your monitoring workflows. By default, it returns changes from all your active workflows. View full API reference →
GET https://api.kadoa.com/v4/changes
You can filter changes by workflow and date range using the different query parameters. Example with filters:
GET https://api.kadoa.com/v4/changes?startDate=2024-11-01T00:00:00Z&endDate=2024-11-30T23:59:59Z

Differences Field Explanation

Each change includes a differences array showing structured representations of what changed:
{
  "differences": [
    {
      "type": "changed",
      "fields": [
        {
          "key": "title",
          "previousValue": "Old Title",
          "value": "New Title"
        }
      ]
    }
  ]
}
The differences field provides an object-based diffing with the following structure:
  • type: The type of change - can be added, removed, or changed
  • fields: All fields of the object (even if unchanged)
Each field change includes:
  • key: Field name that was changed
  • value: Current field value
  • previousValue: Previous field value (only present for changed type)

Example: Product Inventory Changes

Here’s a real-world example showing how product data changes are tracked: Before:
[
  { "id": "001", "name": "Product A", "status": "In Stock" },
  { "id": "002", "name": "Product B", "status": "Low Stock" },
  { "id": "003", "name": "Product C", "status": "Out of Stock" },
  { "id": "004", "name": "Product D", "status": "In Stock" }
]
After:
[
  { "id": "001", "name": "Product A Premium", "status": "In Stock" },
  { "id": "003", "name": "Product C", "status": "In Stock" },
  { "id": "004", "name": "Product D", "status": "In Stock" },
  { "id": "005", "name": "Product E", "status": "New Arrival" }
]
{
  "differences": [
    {
      "type": "changed",
      "fields": [
        {
          "key": "id",
          "previousValue": "001",
          "value": "001"
        },
        {
          "key": "name",
          "previousValue": "Product A",
          "value": "Product A Premium"
        },
        {
          "key": "status",
          "previousValue": "In Stock",
          "value": "In Stock"
        }
      ]
    },
    {
      "type": "removed",
      "fields": [
        {
          "key": "id",
          "value": "002"
        },
        {
          "key": "name",
          "value": "Product B"
        },
        {
          "key": "status",
          "value": "Low Stock"
        }
      ]
    },
    {
      "type": "changed",
      "fields": [
        {
          "key": "id",
          "previousValue": "003",
          "value": "003"
        },
        {
          "key": "name",
          "previousValue": "Product C",
          "value": "Product C"
        },
        {
          "key": "status",
          "previousValue": "Out of Stock",
          "value": "In Stock"
        }
      ]
    },
    {
      "type": "added",
      "fields": [
        {
          "key": "id",
          "value": "005"
        },
        {
          "key": "name",
          "value": "Product E"
        },
        {
          "key": "status",
          "value": "New Arrival"
        }
      ]
    }
  ]
}
Note that item with id: "004" remains unchanged, so it doesn’t appear in the differences array.
For real-time updates, consider using our WebSocket API instead of polling this endpoint.