---
search:
  exclude: true
---

# <a id="bitdrift.public.unary.workflows.v1.Rule"></a>Rule

No fields

# <a id="bitdrift.public.unary.workflows.v1.Rule.RuleFlushConfiguration"></a>Rule.RuleFlushConfiguration

| Field | Type | Description |
|---|---|---|
| id | <span class="proto-type proto-type-primitive">string</span> | The server-generated ID for this rule action. This can be used to query  for sessions that arrive at this rule action. |
| applied_daily_limit | <span class="proto-type proto-type-primitive">uint32</span> | The effective daily capture limit currently applied to this rule. |
| match_id | <span class="proto-type proto-type-primitive">string</span> | Points to a step's match ID that will trigger session capture when this flush rule is hit.  |

#### Example
```json
{
  "applied_daily_limit": 25,
  "id": "fkQ1PfAZhdYvJexzY6DYuoYCZTEaWO0Y7spxwjr7akc",
  "match_id": "_i1yUnHjKfmWpCaD5Tazo"
}
```

# <a id="bitdrift.public.unary.workflows.v1.Rule.RuleMetricChartConfiguration"></a>Rule.RuleMetricChartConfiguration

| Field | Type | Description |
|---|---|---|
| time_series | <span class="proto-type proto-type-message">repeated [<i class="proto-type-part">bitdrift</i><i class="proto-type-dot">.</i><i class="proto-type-part">public</i><i class="proto-type-dot">.</i><i class="proto-type-part">unary</i><i class="proto-type-dot">.</i><i class="proto-type-part">workflows</i><i class="proto-type-dot">.</i><i class="proto-type-part">v1</i><i class="proto-type-dot">.</i><i class="proto-type-part">Rule</i><i class="proto-type-dot">.</i><i class="proto-type-part">RuleMetricChartConfiguration</i><i class="proto-type-dot">.</i><i class="proto-type-part">TimeSeries</i>](#bitdrift.public.unary.workflows.v1.Rule.RuleMetricChartConfiguration.TimeSeries){ title="bitdrift.public.unary.workflows.v1.Rule.RuleMetricChartConfiguration.TimeSeries"}</span> | Explicit lists of time series to generate for this rule. |

#### Example
```json
{
  "time_series": [
    {
      "aggregated_id": "count/fkQ1PfAZhdYvJexzY6DYuoYCZTEaWO0Y7spxwjr7akc",
      "rate": {
        "denominator": {
          "match_id": "_i1yUnHjKfmWpCaD5Tazo",
          "name": "field_name"
        },
        "denominator_id": "fkQ1PfAZhdYvJexzY6DYuoYCZTEaWO0Y7spxwjr7akc",
        "group_by": {
          "values": [
            {
              "log_body": false
            }
          ]
        },
        "numerator": {
          "match_id": "_i1yUnHjKfmWpCaD5Tazo",
          "name": "field_name"
        },
        "numerator_id": "fkQ1PfAZhdYvJexzY6DYuoYCZTEaWO0Y7spxwjr7akc"
      },
      "track_unique": {
        "device_id": true
      }
    }
  ]
}
```

# <a id="bitdrift.public.unary.workflows.v1.Rule.RuleMetricChartConfiguration.DataReference"></a>Rule.RuleMetricChartConfiguration.DataReference

A reference to data extracted from a previous rule in the workflow path.

| Field | Type | Description |
|---|---|---|
| match_id | <span class="proto-type proto-type-primitive">string</span> | Points to a step's match ID to extract the value from. If extraction type is measured_time,  this must point to a Measure Time rule.  |
| name | <span class="proto-type proto-type-primitive">string</span> | The name of the field to extract the value from.<br><br>(Only one of <em>name</em>, or <em>measured_time</em> can be set) |
| measured_time | <span class="proto-type proto-type-primitive">bool</span> | Extract the measured time from a completed Measure Time rule. This can only be set if  the match_id points to a Measure Time rule.<br><br>(Only one of <em>measured_time</em>, or <em>name</em> can be set) |

#### Example
```json
{
  "match_id": "_i1yUnHjKfmWpCaD5Tazo",
  "name": "field_name"
}
```

# <a id="bitdrift.public.unary.workflows.v1.Rule.RuleMetricChartConfiguration.TimeSeries"></a>Rule.RuleMetricChartConfiguration.TimeSeries

| Field | Type | Description |
|---|---|---|
| rate | <span class="proto-type proto-type-message">[<i class="proto-type-part">bitdrift</i><i class="proto-type-dot">.</i><i class="proto-type-part">public</i><i class="proto-type-dot">.</i><i class="proto-type-part">unary</i><i class="proto-type-dot">.</i><i class="proto-type-part">workflows</i><i class="proto-type-dot">.</i><i class="proto-type-part">v1</i><i class="proto-type-dot">.</i><i class="proto-type-part">Rule</i><i class="proto-type-dot">.</i><i class="proto-type-part">RuleMetricChartConfiguration</i><i class="proto-type-dot">.</i><i class="proto-type-part">TimeSeries</i><i class="proto-type-dot">.</i><i class="proto-type-part">Rate</i>](#bitdrift.public.unary.workflows.v1.Rule.RuleMetricChartConfiguration.TimeSeries.Rate){ title="bitdrift.public.unary.workflows.v1.Rule.RuleMetricChartConfiguration.TimeSeries.Rate"}</span> | A rate metric time series.<br><br>(Only one of <em>rate</em>, or <em>histogram</em>, <em>count</em>, <em>average_count</em> can be set) |
| histogram | <span class="proto-type proto-type-message">[<i class="proto-type-part">bitdrift</i><i class="proto-type-dot">.</i><i class="proto-type-part">public</i><i class="proto-type-dot">.</i><i class="proto-type-part">unary</i><i class="proto-type-dot">.</i><i class="proto-type-part">workflows</i><i class="proto-type-dot">.</i><i class="proto-type-part">v1</i><i class="proto-type-dot">.</i><i class="proto-type-part">Rule</i><i class="proto-type-dot">.</i><i class="proto-type-part">RuleMetricChartConfiguration</i><i class="proto-type-dot">.</i><i class="proto-type-part">TimeSeries</i><i class="proto-type-dot">.</i><i class="proto-type-part">Histogram</i>](#bitdrift.public.unary.workflows.v1.Rule.RuleMetricChartConfiguration.TimeSeries.Histogram){ title="bitdrift.public.unary.workflows.v1.Rule.RuleMetricChartConfiguration.TimeSeries.Histogram"}</span> | A histogram metric time series.<br><br>(Only one of <em>histogram</em>, or <em>rate</em>, <em>count</em>, <em>average_count</em> can be set) |
| count | <span class="proto-type proto-type-message">[<i class="proto-type-part">bitdrift</i><i class="proto-type-dot">.</i><i class="proto-type-part">public</i><i class="proto-type-dot">.</i><i class="proto-type-part">unary</i><i class="proto-type-dot">.</i><i class="proto-type-part">workflows</i><i class="proto-type-dot">.</i><i class="proto-type-part">v1</i><i class="proto-type-dot">.</i><i class="proto-type-part">Rule</i><i class="proto-type-dot">.</i><i class="proto-type-part">RuleMetricChartConfiguration</i><i class="proto-type-dot">.</i><i class="proto-type-part">TimeSeries</i><i class="proto-type-dot">.</i><i class="proto-type-part">Count</i>](#bitdrift.public.unary.workflows.v1.Rule.RuleMetricChartConfiguration.TimeSeries.Count){ title="bitdrift.public.unary.workflows.v1.Rule.RuleMetricChartConfiguration.TimeSeries.Count"}</span> | A count metric time series.<br><br>(Only one of <em>count</em>, or <em>rate</em>, <em>histogram</em>, <em>average_count</em> can be set) |
| average_count | <span class="proto-type proto-type-message">[<i class="proto-type-part">bitdrift</i><i class="proto-type-dot">.</i><i class="proto-type-part">public</i><i class="proto-type-dot">.</i><i class="proto-type-part">unary</i><i class="proto-type-dot">.</i><i class="proto-type-part">workflows</i><i class="proto-type-dot">.</i><i class="proto-type-part">v1</i><i class="proto-type-dot">.</i><i class="proto-type-part">Rule</i><i class="proto-type-dot">.</i><i class="proto-type-part">RuleMetricChartConfiguration</i><i class="proto-type-dot">.</i><i class="proto-type-part">TimeSeries</i><i class="proto-type-dot">.</i><i class="proto-type-part">AverageCount</i>](#bitdrift.public.unary.workflows.v1.Rule.RuleMetricChartConfiguration.TimeSeries.AverageCount){ title="bitdrift.public.unary.workflows.v1.Rule.RuleMetricChartConfiguration.TimeSeries.AverageCount"}</span> | An average count metric time series.<br><br>(Only one of <em>average_count</em>, or <em>rate</em>, <em>histogram</em>, <em>count</em> can be set) |
| aggregated_id | <span class="proto-type proto-type-primitive">string</span> | This is the normalized ID for the time series. It is the ID that ends up being used in  chart data requests, attaching alerts, etc. |
| track_unique | <span class="proto-type proto-type-message">[<i class="proto-type-part">bitdrift</i><i class="proto-type-dot">.</i><i class="proto-type-part">public</i><i class="proto-type-dot">.</i><i class="proto-type-part">unary</i><i class="proto-type-dot">.</i><i class="proto-type-part">workflows</i><i class="proto-type-dot">.</i><i class="proto-type-part">v1</i><i class="proto-type-dot">.</i><i class="proto-type-part">Rule</i><i class="proto-type-dot">.</i><i class="proto-type-part">RuleMetricChartConfiguration</i><i class="proto-type-dot">.</i><i class="proto-type-part">TimeSeries</i><i class="proto-type-dot">.</i><i class="proto-type-part">TrackUnique</i>](#bitdrift.public.unary.workflows.v1.Rule.RuleMetricChartConfiguration.TimeSeries.TrackUnique){ title="bitdrift.public.unary.workflows.v1.Rule.RuleMetricChartConfiguration.TimeSeries.TrackUnique"}</span> | Whether to track unique contributions to each aggregation interval for this time series. |

#### Example
```json
{
  "aggregated_id": "count/fkQ1PfAZhdYvJexzY6DYuoYCZTEaWO0Y7spxwjr7akc",
  "rate": {
    "denominator": {
      "match_id": "_i1yUnHjKfmWpCaD5Tazo",
      "name": "field_name"
    },
    "denominator_id": "fkQ1PfAZhdYvJexzY6DYuoYCZTEaWO0Y7spxwjr7akc",
    "group_by": {
      "values": [
        {
          "log_body": false
        }
      ]
    },
    "numerator": {
      "match_id": "_i1yUnHjKfmWpCaD5Tazo",
      "name": "field_name"
    },
    "numerator_id": "fkQ1PfAZhdYvJexzY6DYuoYCZTEaWO0Y7spxwjr7akc"
  },
  "track_unique": {
    "device_id": true
  }
}
```

# <a id="bitdrift.public.unary.workflows.v1.Rule.RuleMetricChartConfiguration.TimeSeries.Rate"></a>Rule.RuleMetricChartConfiguration.TimeSeries.Rate

A rate metric that is going to be generated for this time series. This
 is done by emitting simple counters for each of the extracted values
 and computing the ratio server-side.

| Field | Type | Description |
|---|---|---|
| numerator | <span class="proto-type proto-type-message">[<i class="proto-type-part">bitdrift</i><i class="proto-type-dot">.</i><i class="proto-type-part">public</i><i class="proto-type-dot">.</i><i class="proto-type-part">unary</i><i class="proto-type-dot">.</i><i class="proto-type-part">workflows</i><i class="proto-type-dot">.</i><i class="proto-type-part">v1</i><i class="proto-type-dot">.</i><i class="proto-type-part">Rule</i><i class="proto-type-dot">.</i><i class="proto-type-part">RuleMetricChartConfiguration</i><i class="proto-type-dot">.</i><i class="proto-type-part">DataReference</i>](#bitdrift.public.unary.workflows.v1.Rule.RuleMetricChartConfiguration.DataReference){ title="bitdrift.public.unary.workflows.v1.Rule.RuleMetricChartConfiguration.DataReference"}</span> | The data reference to use for the rate numerator. |
| denominator | <span class="proto-type proto-type-message">[<i class="proto-type-part">bitdrift</i><i class="proto-type-dot">.</i><i class="proto-type-part">public</i><i class="proto-type-dot">.</i><i class="proto-type-part">unary</i><i class="proto-type-dot">.</i><i class="proto-type-part">workflows</i><i class="proto-type-dot">.</i><i class="proto-type-part">v1</i><i class="proto-type-dot">.</i><i class="proto-type-part">Rule</i><i class="proto-type-dot">.</i><i class="proto-type-part">RuleMetricChartConfiguration</i><i class="proto-type-dot">.</i><i class="proto-type-part">DataReference</i>](#bitdrift.public.unary.workflows.v1.Rule.RuleMetricChartConfiguration.DataReference){ title="bitdrift.public.unary.workflows.v1.Rule.RuleMetricChartConfiguration.DataReference"}</span> | The data reference to use for the rate denominator. |
| numerator_id | <span class="proto-type proto-type-primitive">string</span> | The server-generated ID for this rate metric. This can be used to  query for the metric. |
| denominator_id | <span class="proto-type proto-type-primitive">string</span> | The server-generated ID for the denominator metric. This can be used  to query for the metric. |
| group_by | <span class="proto-type proto-type-message">[<i class="proto-type-part">bitdrift</i><i class="proto-type-dot">.</i><i class="proto-type-part">public</i><i class="proto-type-dot">.</i><i class="proto-type-part">unary</i><i class="proto-type-dot">.</i><i class="proto-type-part">workflows</i><i class="proto-type-dot">.</i><i class="proto-type-part">v1</i><i class="proto-type-dot">.</i><i class="proto-type-part">GroupBy</i>](bitdrift_public_unary_workflows_v1_GroupBy.md#bitdrift.public.unary.workflows.v1.GroupBy){ title="bitdrift.public.unary.workflows.v1.GroupBy"}</span> | An optional group by configuration for the time series. The chart  will select a limited number of time series based on a top K lookup  of the most relevant time series. If the group by is not set, the  generated chart will show the time series as a single line. |

#### Example
```json
{
  "denominator": {
    "match_id": "_i1yUnHjKfmWpCaD5Tazo",
    "name": "field_name"
  },
  "denominator_id": "fkQ1PfAZhdYvJexzY6DYuoYCZTEaWO0Y7spxwjr7akc",
  "group_by": {
    "values": [
      {
        "log_body": false
      }
    ]
  },
  "numerator": {
    "match_id": "_i1yUnHjKfmWpCaD5Tazo",
    "name": "field_name"
  },
  "numerator_id": "fkQ1PfAZhdYvJexzY6DYuoYCZTEaWO0Y7spxwjr7akc"
}
```

# <a id="bitdrift.public.unary.workflows.v1.Rule.RuleMetricChartConfiguration.TimeSeries.Histogram"></a>Rule.RuleMetricChartConfiguration.TimeSeries.Histogram

A histogram metric that is going to be generated for this time series.
 This is done by emitting histogram values for each value of the
 extracted value, aggregated server-side.

| Field | Type | Description |
|---|---|---|
| value | <span class="proto-type proto-type-message">[<i class="proto-type-part">bitdrift</i><i class="proto-type-dot">.</i><i class="proto-type-part">public</i><i class="proto-type-dot">.</i><i class="proto-type-part">unary</i><i class="proto-type-dot">.</i><i class="proto-type-part">workflows</i><i class="proto-type-dot">.</i><i class="proto-type-part">v1</i><i class="proto-type-dot">.</i><i class="proto-type-part">Rule</i><i class="proto-type-dot">.</i><i class="proto-type-part">RuleMetricChartConfiguration</i><i class="proto-type-dot">.</i><i class="proto-type-part">DataReference</i>](#bitdrift.public.unary.workflows.v1.Rule.RuleMetricChartConfiguration.DataReference){ title="bitdrift.public.unary.workflows.v1.Rule.RuleMetricChartConfiguration.DataReference"}</span> | The data reference whose values will be recorded in the histogram. |
| group_by | <span class="proto-type proto-type-message">[<i class="proto-type-part">bitdrift</i><i class="proto-type-dot">.</i><i class="proto-type-part">public</i><i class="proto-type-dot">.</i><i class="proto-type-part">unary</i><i class="proto-type-dot">.</i><i class="proto-type-part">workflows</i><i class="proto-type-dot">.</i><i class="proto-type-part">v1</i><i class="proto-type-dot">.</i><i class="proto-type-part">GroupBy</i>](bitdrift_public_unary_workflows_v1_GroupBy.md#bitdrift.public.unary.workflows.v1.GroupBy){ title="bitdrift.public.unary.workflows.v1.GroupBy"}</span> | An optional group by configuration for the time series. The chart  will select a limited number of time series based on a top K lookup  of the most relevant time series. If the group by is not set, the  generated chart will show the time series with one line per (P50,  P90, P99) percentile. |
| id | <span class="proto-type proto-type-primitive">string</span> | The server-generated ID for this histogram metric. This can be used  to query for the metric. |

#### Example
```json
{
  "group_by": {
    "values": [
      {
        "log_body": false
      }
    ]
  },
  "id": "fkQ1PfAZhdYvJexzY6DYuoYCZTEaWO0Y7spxwjr7akc",
  "value": {
    "match_id": "_i1yUnHjKfmWpCaD5Tazo",
    "name": "field_name"
  }
}
```

# <a id="bitdrift.public.unary.workflows.v1.Rule.RuleMetricChartConfiguration.TimeSeries.Count"></a>Rule.RuleMetricChartConfiguration.TimeSeries.Count

A count metric that is going to be generated for this time series. This
 is done by emitting a counter with the extracted value.

| Field | Type | Description |
|---|---|---|
| value | <span class="proto-type proto-type-message">[<i class="proto-type-part">bitdrift</i><i class="proto-type-dot">.</i><i class="proto-type-part">public</i><i class="proto-type-dot">.</i><i class="proto-type-part">unary</i><i class="proto-type-dot">.</i><i class="proto-type-part">workflows</i><i class="proto-type-dot">.</i><i class="proto-type-part">v1</i><i class="proto-type-dot">.</i><i class="proto-type-part">Rule</i><i class="proto-type-dot">.</i><i class="proto-type-part">RuleMetricChartConfiguration</i><i class="proto-type-dot">.</i><i class="proto-type-part">DataReference</i>](#bitdrift.public.unary.workflows.v1.Rule.RuleMetricChartConfiguration.DataReference){ title="bitdrift.public.unary.workflows.v1.Rule.RuleMetricChartConfiguration.DataReference"}</span> | The data reference whose values will be emitted into the counter. |
| group_by | <span class="proto-type proto-type-message">[<i class="proto-type-part">bitdrift</i><i class="proto-type-dot">.</i><i class="proto-type-part">public</i><i class="proto-type-dot">.</i><i class="proto-type-part">unary</i><i class="proto-type-dot">.</i><i class="proto-type-part">workflows</i><i class="proto-type-dot">.</i><i class="proto-type-part">v1</i><i class="proto-type-dot">.</i><i class="proto-type-part">GroupBy</i>](bitdrift_public_unary_workflows_v1_GroupBy.md#bitdrift.public.unary.workflows.v1.GroupBy){ title="bitdrift.public.unary.workflows.v1.GroupBy"}</span> | An optional group by configuration for the time series. The chart  will select a limited number of time series based on a top K lookup  of the most relevant time series. If the group by is not set, the  generated chart will show the time series as a single line. |
| id | <span class="proto-type proto-type-primitive">string</span> | The server-generated ID for this count metric. This can be used to  query for the metric. |

#### Example
```json
{
  "group_by": {
    "values": [
      {
        "log_body": false
      }
    ]
  },
  "id": "fkQ1PfAZhdYvJexzY6DYuoYCZTEaWO0Y7spxwjr7akc",
  "value": {
    "match_id": "_i1yUnHjKfmWpCaD5Tazo",
    "name": "field_name"
  }
}
```

# <a id="bitdrift.public.unary.workflows.v1.Rule.RuleMetricChartConfiguration.TimeSeries.AverageCount"></a>Rule.RuleMetricChartConfiguration.TimeSeries.AverageCount

This time series type will produce an average counter, by emitting a synthetic denominator
 counter increment every time the numerator counter is extracted and incremented. In
 practice this is identical to rate, but the display will not be % based and the denominator
 is implicit.

| Field | Type | Description |
|---|---|---|
| numerator | <span class="proto-type proto-type-message">[<i class="proto-type-part">bitdrift</i><i class="proto-type-dot">.</i><i class="proto-type-part">public</i><i class="proto-type-dot">.</i><i class="proto-type-part">unary</i><i class="proto-type-dot">.</i><i class="proto-type-part">workflows</i><i class="proto-type-dot">.</i><i class="proto-type-part">v1</i><i class="proto-type-dot">.</i><i class="proto-type-part">Rule</i><i class="proto-type-dot">.</i><i class="proto-type-part">RuleMetricChartConfiguration</i><i class="proto-type-dot">.</i><i class="proto-type-part">DataReference</i>](#bitdrift.public.unary.workflows.v1.Rule.RuleMetricChartConfiguration.DataReference){ title="bitdrift.public.unary.workflows.v1.Rule.RuleMetricChartConfiguration.DataReference"}</span> | The data reference to use for the average count numerator. |
| numerator_id | <span class="proto-type proto-type-primitive">string</span> | The server-generated ID for this rate metric. This can be used to  query for the metric. |
| denominator_id | <span class="proto-type proto-type-primitive">string</span> | The server-generated ID for the denominator metric. This can be used  to query for the metric. |
| group_by | <span class="proto-type proto-type-message">[<i class="proto-type-part">bitdrift</i><i class="proto-type-dot">.</i><i class="proto-type-part">public</i><i class="proto-type-dot">.</i><i class="proto-type-part">unary</i><i class="proto-type-dot">.</i><i class="proto-type-part">workflows</i><i class="proto-type-dot">.</i><i class="proto-type-part">v1</i><i class="proto-type-dot">.</i><i class="proto-type-part">GroupBy</i>](bitdrift_public_unary_workflows_v1_GroupBy.md#bitdrift.public.unary.workflows.v1.GroupBy){ title="bitdrift.public.unary.workflows.v1.GroupBy"}</span> | An optional group by configuration for the time series. The chart  will select a limited number of time series based on a top K lookup  of the most relevant time series. If the group by is not set, the  generated chart will show the time series as a single line. |

#### Example
```json
{
  "denominator_id": "fkQ1PfAZhdYvJexzY6DYuoYCZTEaWO0Y7spxwjr7akc",
  "group_by": {
    "values": [
      {
        "log_body": false
      }
    ]
  },
  "numerator": {
    "match_id": "_i1yUnHjKfmWpCaD5Tazo",
    "name": "field_name"
  },
  "numerator_id": "fkQ1PfAZhdYvJexzY6DYuoYCZTEaWO0Y7spxwjr7akc"
}
```

# <a id="bitdrift.public.unary.workflows.v1.Rule.RuleMetricChartConfiguration.TimeSeries.TrackUnique"></a>Rule.RuleMetricChartConfiguration.TimeSeries.TrackUnique

| Field | Type | Description |
|---|---|---|
| device_id | <span class="proto-type proto-type-primitive">bool</span> | This is computed entirely server-side and thus does not require any client emission.<br><br> |

#### Example
```json
{
  "device_id": true
}
```

# <a id="bitdrift.public.unary.workflows.v1.Rule.RuleSankeyDiagramConfiguration"></a>Rule.RuleSankeyDiagramConfiguration

| Field | Type | Description |
|---|---|---|
| nodes | <span class="proto-type proto-type-message">repeated [<i class="proto-type-part">bitdrift</i><i class="proto-type-dot">.</i><i class="proto-type-part">public</i><i class="proto-type-dot">.</i><i class="proto-type-part">unary</i><i class="proto-type-dot">.</i><i class="proto-type-part">workflows</i><i class="proto-type-dot">.</i><i class="proto-type-part">v1</i><i class="proto-type-dot">.</i><i class="proto-type-part">Rule</i><i class="proto-type-dot">.</i><i class="proto-type-part">RuleSankeyDiagramConfiguration</i><i class="proto-type-dot">.</i><i class="proto-type-part">Node</i>](#bitdrift.public.unary.workflows.v1.Rule.RuleSankeyDiagramConfiguration.Node){ title="bitdrift.public.unary.workflows.v1.Rule.RuleSankeyDiagramConfiguration.Node"}</span> | The list of nodes. Since workflows can have loops and each node corresponds to a matcher  within a workflow, it's possible for a given matcher and its corresponding node to be visited  multiple times. For each visit, a new value is extracted.   Additional details related to each node of the diagram. This data is not modified  by the server during workflow updates, allowing the frontend to store  information that remains stable between updates.   All target nodes *must* be within the same flow. |
| id | <span class="proto-type proto-type-primitive">string</span> | The server-generated ID for this rule action. This uniquely identifies the Sankey diagram  in a way which is consistent between workflows that define the same Sankey diagram. |

#### Example
```json
{
  "id": "fkQ1PfAZhdYvJexzY6DYuoYCZTEaWO0Y7spxwjr7akc",
  "nodes": [
    {
      "extract_field": "field_name",
      "id": "_i1yUnHjKfmWpCaD5Tazo"
    }
  ]
}
```

# <a id="bitdrift.public.unary.workflows.v1.Rule.RuleSankeyDiagramConfiguration.Node"></a>Rule.RuleSankeyDiagramConfiguration.Node

Configuration for creating Sankey diagram nodes in response to workflow state updates.
 Each node corresponds to a matching rule.

| Field | Type | Description |
|---|---|---|
| id | <span class="proto-type proto-type-primitive">string</span> | ID of the corresponding matching rule.  |
| fixed | <span class="proto-type proto-type-primitive">string</span> | The fixed value.<br><br>(Only one of <em>fixed</em>, or <em>extract_field</em> can be set) |
| extract_field | <span class="proto-type proto-type-primitive">string</span> | The name of the field whose value should be extracted.<br><br>(Only one of <em>extract_field</em>, or <em>fixed</em> can be set) |

#### Example
```json
{
  "extract_field": "field_name",
  "id": "_i1yUnHjKfmWpCaD5Tazo"
}
```

# <a id="bitdrift.public.unary.workflows.v1.Rule.RuleFunnelConfiguration"></a>Rule.RuleFunnelConfiguration

| Field | Type | Description |
|---|---|---|
| ids | <span class="proto-type proto-type-primitive">repeated string</span> | The server-generated IDs for this funnel. This is generated by the server  and may change during updates. |
| match_ids | <span class="proto-type proto-type-primitive">repeated string</span> | The match IDs in the workflow that correspond to the steps of the funnel. All match IDs must  be from the same flow. |

#### Example
```json
{
  "ids": [
    "fkQ1PfAZhdYvJexzY6DYuoYCZTEaWO0Y7spxwjr7akc"
  ],
  "match_ids": [
    "_i1yUnHjKfmWpCaD5Tazo"
  ]
}
```

# <a id="bitdrift.public.unary.workflows.v1.Rule.RuleMeasureTime"></a>Rule.RuleMeasureTime

| Field | Type | Description |
|---|---|---|
| name | <span class="proto-type proto-type-primitive">string</span> | A unique identifier for this node that will be included in the generated message body. |
| start_match_id | <span class="proto-type proto-type-primitive">string</span> | The start match ID of the step to start measuring from. Must be in the same flow as the end  match ID. |
| end_match_id | <span class="proto-type proto-type-primitive">string</span> | The end match ID of the step to end measuring at. Must be in the same flow as the start match  ID. |
| correlation_field_name | <span class="proto-type proto-type-primitive">optional string</span> | Allows the ability to measure time between two rules with a common  correlation id. This is useful when the start and end can be racey and we end up  measuring time between unrelated events. An example of this is when you measure  download time and you get events like:    - Download started, id=A   - Download started, id=B   - Download completed, id=A   - Download completed, id=B   Without this we'd be measuring the time between B started and A completed. |
| additional_extracted_fields | <span class="proto-type proto-type-primitive">repeated string</span> | Supplies optional fields that will be extracted from the log when the time measurement is  completed. |
| measure_time_condition | <span class="proto-type proto-type-message">[<i class="proto-type-part">bitdrift</i><i class="proto-type-dot">.</i><i class="proto-type-part">public</i><i class="proto-type-dot">.</i><i class="proto-type-part">unary</i><i class="proto-type-dot">.</i><i class="proto-type-part">workflows</i><i class="proto-type-dot">.</i><i class="proto-type-part">v1</i><i class="proto-type-dot">.</i><i class="proto-type-part">Rule</i><i class="proto-type-dot">.</i><i class="proto-type-part">RuleMeasureTime</i><i class="proto-type-dot">.</i><i class="proto-type-part">MeasureTimeCondition</i>](#bitdrift.public.unary.workflows.v1.Rule.RuleMeasureTime.MeasureTimeCondition){ title="bitdrift.public.unary.workflows.v1.Rule.RuleMeasureTime.MeasureTimeCondition"}</span> | An optional condition to check when time measurement is complete. If specified, actions that  target the match_id of this rule will only be triggered if the condition is met. |

#### Example
```json
{
  "additional_extracted_fields": [
    "field_name"
  ],
  "correlation_field_name": "field_name",
  "end_match_id": "_i1yUnHjKfmWpCaD5Tazo",
  "measure_time_condition": {
    "duration_threshold": "3600s",
    "operator": "NOT_EQUAL"
  },
  "name": "name",
  "start_match_id": "_i1yUnHjKfmWpCaD5Tazo"
}
```

# <a id="bitdrift.public.unary.workflows.v1.Rule.RuleMeasureTime.MeasureTimeCondition"></a>Rule.RuleMeasureTime.MeasureTimeCondition

| Field | Type | Description |
|---|---|---|
| operator | <span class="proto-type proto-type-enum">[<i class="proto-type-part">bitdrift</i><i class="proto-type-dot">.</i><i class="proto-type-part">public</i><i class="proto-type-dot">.</i><i class="proto-type-part">unary</i><i class="proto-type-dot">.</i><i class="proto-type-part">workflows</i><i class="proto-type-dot">.</i><i class="proto-type-part">v1</i><i class="proto-type-dot">.</i><i class="proto-type-part">Operator</i>](bitdrift_public_unary_workflows_v1_Operator.md#bitdrift.public.unary.workflows.v1.Operator){ title="bitdrift.public.unary.workflows.v1.Operator"}</span> | The operator to use when evaluating the duration threshold. |
| duration_threshold | <span class="proto-type proto-type-well-known">[google.protobuf.Duration](https://protobuf.dev/reference/protobuf/google.protobuf/#duration){ title="google.protobuf.Duration"}</span> | The duration threshold to use when evaluating the condition. |

#### Example
```json
{
  "duration_threshold": "3600s",
  "operator": "NOT_EQUAL"
}
```

# <a id="bitdrift.public.unary.workflows.v1.Rule.RuleTimeout"></a>Rule.RuleTimeout

This is valid anywhere a generic match or OOTB match rule is allowed, including attached to
 start with the caveat that we only allow a single timeout outbound from any origin.

| Field | Type | Description |
|---|---|---|
| duration | <span class="proto-type proto-type-primitive">uint32</span> | The timeout duration for this rule. |
| duration_unit | <span class="proto-type proto-type-enum">[<i class="proto-type-part">bitdrift</i><i class="proto-type-dot">.</i><i class="proto-type-part">public</i><i class="proto-type-dot">.</i><i class="proto-type-part">unary</i><i class="proto-type-dot">.</i><i class="proto-type-part">workflows</i><i class="proto-type-dot">.</i><i class="proto-type-part">v1</i><i class="proto-type-dot">.</i><i class="proto-type-part">Rule</i><i class="proto-type-dot">.</i><i class="proto-type-part">RuleTimeout</i><i class="proto-type-dot">.</i><i class="proto-type-part">DurationUnit</i>](#bitdrift.public.unary.workflows.v1.Rule.RuleTimeout.DurationUnit){ title="bitdrift.public.unary.workflows.v1.Rule.RuleTimeout.DurationUnit"}</span> | The unit for the timeout duration value. |

#### Example
```json
{
  "duration": 1,
  "duration_unit": "SECONDS"
}
```

# <a id="bitdrift.public.unary.workflows.v1.Rule.RuleTimeout.DurationUnit"></a>Rule.RuleTimeout.DurationUnit

| Name | Number | Description |
|---|---|---|
| MILLISECONDS | 0 |  |
| SECONDS | 1 |  |
| MINUTES | 2 |  |
| HOURS | 3 |  |

