When compare_duration is set, the GroupResult's "state_change" attribute is
updated to indicate whether the finding had its state changed, the
finding's state remained unchanged, or if the finding was added during the
compare_duration period of time that precedes the read_time. This is the
time between (read_time - compare_duration) and read_time.
The state_change value is derived based on the presence and state of the
finding at the two points in time. Intermediate state changes between the
two times don't affect the result. For example, the results aren't affected
if the finding is made inactive and then active again.
Possible "state_change" values when compare_duration is specified:
"CHANGED": indicates that the finding was present and matched the given
filter at the start of compare_duration, but changed its
state at read_time.
"UNCHANGED": indicates that the finding was present and matched the given
filter at the start of compare_duration and did not change
state at read_time.
"ADDED": indicates that the finding did not match the given filter or
was not present at the start of compare_duration, but was
present at read_time.
"REMOVED": indicates that the finding was present and matched the
filter at the start of compare_duration, but did not match
the filter at read_time.
If compare_duration is not specified, then the only possible state_change
is "UNUSED", which will be the state_change set for all findings present
at read_time.
If this field is set then state_change must be a specified field in
group_by.
Expression that defines the filter to apply across findings.
The expression is a list of one or more restrictions combined via logical
operators AND and OR.
Parentheses are supported, and OR has higher precedence than AND.
Restrictions have the form <field> <operator> <value> and may have a -
character in front of them to indicate negation. Examples include:
name
source_properties.a_property
security_marks.marks.marka
The supported operators are:
= for all value types.
>, <, >=, <= for integer values.
:, meaning substring matching, for strings.
The supported value types are:
string literals in quotes.
integer literals without quotes.
boolean literals true and false without quotes.
The following field and operator combinations are supported:
name: =
parent: =, :
resource_name: =, :
state: =, :
category: =, :
external_uri: =, :
event_time: =, >, <, >=, <=
severity: =, :
Usage: This should be milliseconds since epoch or an RFC3339 string.
Examples:
event_time = "2019-06-10T16:07:18-07:00"event_time = 1560208038000
security_marks.marks: =, :
source_properties: =, :, >, <, >=, <=
For example, source_properties.size = 100 is a valid filter string.
Use a partial match on the empty string to filter based on a property
existing: source_properties.my_property : ""
Use a negated partial match on the empty string to filter based on a
property not existing: -source_properties.my_property : ""
Required. Expression that defines what assets fields to use for grouping (including
state_change). The string value should follow SQL syntax: comma separated
list of fields. For example: "parent,resource_name".
The following fields are supported:
resource_name
category
state
parent
severity
The following fields are supported when compare_duration is set:
The value returned by the last GroupFindingsResponse; indicates
that this is a continuation of a prior GroupFindings call, and
that the system should return the next page of data.
Required. Name of the source to groupBy. Its format is
"organizations/[organization_id]/sources/[source_id]",
folders/[folder_id]/sources/[source_id], or
projects/[project_id]/sources/[source_id]. To groupBy across all sources
provide a source_id of -. For example:
organizations/{organization_id}/sources/-, folders/{folder_id}/sources/-,
or projects/{project_id}/sources/-
Time used as a reference point when filtering findings. The filter is
limited to findings existing at the supplied time and their values are
those at that specific time. Absence of this field will default to the
API's version of NOW.
[[["Easy to understand","easyToUnderstand","thumb-up"],["Solved my problem","solvedMyProblem","thumb-up"],["Other","otherUp","thumb-up"]],[["Missing the information I need","missingTheInformationINeed","thumb-down"],["Too complicated / too many steps","tooComplicatedTooManySteps","thumb-down"],["Out of date","outOfDate","thumb-down"],["Samples / code issue","samplesCodeIssue","thumb-down"],["Other","otherDown","thumb-down"]],["Last updated 2025-08-07 UTC."],[[["\u003cp\u003eThis documentation details the \u003ccode\u003eGroupFindingsRequest\u003c/code\u003e class within the Google Cloud Security Command Center v1p1beta1 API, used for grouping findings.\u003c/p\u003e\n"],["\u003cp\u003eThe \u003ccode\u003eGroupFindingsRequest\u003c/code\u003e class allows filtering findings based on criteria like name, parent, resource name, state, and more, with support for logical operators and various data types.\u003c/p\u003e\n"],["\u003cp\u003eIt includes properties such as \u003ccode\u003eCompareDuration\u003c/code\u003e to analyze state changes of findings over time, \u003ccode\u003eFilter\u003c/code\u003e to define filtering rules, \u003ccode\u003eGroupBy\u003c/code\u003e to specify grouping fields, and \u003ccode\u003eParent\u003c/code\u003e to indicate the source to group by.\u003c/p\u003e\n"],["\u003cp\u003eThe class allows for pagination in it's result, with \u003ccode\u003ePageSize\u003c/code\u003e and \u003ccode\u003ePageToken\u003c/code\u003e allowing a user to control how much is retrieved and in which order.\u003c/p\u003e\n"],["\u003cp\u003eThe \u003ccode\u003eReadTime\u003c/code\u003e property enables users to filter and view findings as they existed at a specific point in time, as opposed to only the current state.\u003c/p\u003e\n"]]],[],null,["# Google Cloud Security Command Center v1p1beta1 API - Class GroupFindingsRequest (3.0.0-beta05)\n\nVersion latestkeyboard_arrow_down\n\n- [3.0.0-beta05 (latest)](/dotnet/docs/reference/Google.Cloud.SecurityCenter.V1P1Beta1/latest/Google.Cloud.SecurityCenter.V1P1Beta1.GroupFindingsRequest)\n- [3.0.0-beta04](/dotnet/docs/reference/Google.Cloud.SecurityCenter.V1P1Beta1/3.0.0-beta04/Google.Cloud.SecurityCenter.V1P1Beta1.GroupFindingsRequest)\n- [2.0.0-beta07](/dotnet/docs/reference/Google.Cloud.SecurityCenter.V1P1Beta1/2.0.0-beta07/Google.Cloud.SecurityCenter.V1P1Beta1.GroupFindingsRequest) \n\n public sealed class GroupFindingsRequest : IPageRequest, IMessage\u003cGroupFindingsRequest\u003e, IEquatable\u003cGroupFindingsRequest\u003e, IDeepCloneable\u003cGroupFindingsRequest\u003e, IBufferMessage, IMessage\n\nReference documentation and code samples for the Google Cloud Security Command Center v1p1beta1 API class GroupFindingsRequest.\n\nRequest message for grouping by findings. \n\nInheritance\n-----------\n\n[object](https://learn.microsoft.com/dotnet/api/system.object) \\\u003e GroupFindingsRequest \n\nImplements\n----------\n\n[IPageRequest](https://github.com/googleapis/gax-dotnet/blob/83f42b5edc4529818dbdb34d9ea9ecc3c04f7b6e/Google.Api.Gax.Grpc/PagedEnumerableCommon.cs), [IMessage](https://cloud.google.com/dotnet/docs/reference/Google.Protobuf/latest/Google.Protobuf.IMessage-1.html)[GroupFindingsRequest](/dotnet/docs/reference/Google.Cloud.SecurityCenter.V1P1Beta1/latest/Google.Cloud.SecurityCenter.V1P1Beta1.GroupFindingsRequest), [IEquatable](https://learn.microsoft.com/dotnet/api/system.iequatable-1)[GroupFindingsRequest](/dotnet/docs/reference/Google.Cloud.SecurityCenter.V1P1Beta1/latest/Google.Cloud.SecurityCenter.V1P1Beta1.GroupFindingsRequest), [IDeepCloneable](https://cloud.google.com/dotnet/docs/reference/Google.Protobuf/latest/Google.Protobuf.IDeepCloneable-1.html)[GroupFindingsRequest](/dotnet/docs/reference/Google.Cloud.SecurityCenter.V1P1Beta1/latest/Google.Cloud.SecurityCenter.V1P1Beta1.GroupFindingsRequest), [IBufferMessage](https://cloud.google.com/dotnet/docs/reference/Google.Protobuf/latest/Google.Protobuf.IBufferMessage.html), [IMessage](https://cloud.google.com/dotnet/docs/reference/Google.Protobuf/latest/Google.Protobuf.IMessage.html) \n\nInherited Members\n-----------------\n\n[object.GetHashCode()](https://learn.microsoft.com/dotnet/api/system.object.gethashcode) \n[object.GetType()](https://learn.microsoft.com/dotnet/api/system.object.gettype) \n[object.ToString()](https://learn.microsoft.com/dotnet/api/system.object.tostring)\n\nNamespace\n---------\n\n[Google.Cloud.SecurityCenter.V1P1Beta1](/dotnet/docs/reference/Google.Cloud.SecurityCenter.V1P1Beta1/latest/Google.Cloud.SecurityCenter.V1P1Beta1)\n\nAssembly\n--------\n\nGoogle.Cloud.SecurityCenter.V1P1Beta1.dll\n\nConstructors\n------------\n\n### GroupFindingsRequest()\n\n public GroupFindingsRequest()\n\n### GroupFindingsRequest(GroupFindingsRequest)\n\n public GroupFindingsRequest(GroupFindingsRequest other)\n\nProperties\n----------\n\n### CompareDuration\n\n public Duration CompareDuration { get; set; }\n\nWhen compare_duration is set, the GroupResult's \"state_change\" attribute is\nupdated to indicate whether the finding had its state changed, the\nfinding's state remained unchanged, or if the finding was added during the\ncompare_duration period of time that precedes the read_time. This is the\ntime between (read_time - compare_duration) and read_time.\n\nThe state_change value is derived based on the presence and state of the\nfinding at the two points in time. Intermediate state changes between the\ntwo times don't affect the result. For example, the results aren't affected\nif the finding is made inactive and then active again.\n\nPossible \"state_change\" values when compare_duration is specified:\n\n- \"CHANGED\": indicates that the finding was present and matched the given filter at the start of compare_duration, but changed its state at read_time.\n- \"UNCHANGED\": indicates that the finding was present and matched the given filter at the start of compare_duration and did not change state at read_time.\n- \"ADDED\": indicates that the finding did not match the given filter or was not present at the start of compare_duration, but was present at read_time.\n- \"REMOVED\": indicates that the finding was present and matched the filter at the start of compare_duration, but did not match the filter at read_time.\n\nIf compare_duration is not specified, then the only possible state_change\nis \"UNUSED\", which will be the state_change set for all findings present\nat read_time.\n\nIf this field is set then `state_change` must be a specified field in\n`group_by`.\n\n### Filter\n\n public string Filter { get; set; }\n\nExpression that defines the filter to apply across findings.\nThe expression is a list of one or more restrictions combined via logical\noperators `AND` and `OR`.\nParentheses are supported, and `OR` has higher precedence than `AND`.\n\nRestrictions have the form `\u003cfield\u003e \u003coperator\u003e \u003cvalue\u003e` and may have a `-`\ncharacter in front of them to indicate negation. Examples include:\n\n- name\n- source_properties.a_property\n- security_marks.marks.marka\n\nThe supported operators are:\n\n- `=` for all value types.\n- `\u003e`, `\u003c`, `\u003e=`, `\u003c=` for integer values.\n- `:`, meaning substring matching, for strings.\n\nThe supported value types are:\n\n- string literals in quotes.\n- integer literals without quotes.\n- boolean literals `true` and `false` without quotes.\n\nThe following field and operator combinations are supported:\n\n- name: `=`\n- parent: `=`, `:`\n- resource_name: `=`, `:`\n- state: `=`, `:`\n- category: `=`, `:`\n- external_uri: `=`, `:`\n- event_time: `=`, `\u003e`, `\u003c`, `\u003e=`, `\u003c=`\n- severity: `=`, `:`\n\n Usage: This should be milliseconds since epoch or an RFC3339 string.\n Examples:\n `event_time = \"2019-06-10T16:07:18-07:00\"`\n `event_time = 1560208038000`\n- security_marks.marks: `=`, `:`\n\n- source_properties: `=`, `:`, `\u003e`, `\u003c`, `\u003e=`, `\u003c=`\n\nFor example, `source_properties.size = 100` is a valid filter string.\n\nUse a partial match on the empty string to filter based on a property\nexisting: `source_properties.my_property : \"\"`\n\nUse a negated partial match on the empty string to filter based on a\nproperty not existing: `-source_properties.my_property : \"\"`\n\n### GroupBy\n\n public string GroupBy { get; set; }\n\nRequired. Expression that defines what assets fields to use for grouping (including\n`state_change`). The string value should follow SQL syntax: comma separated\nlist of fields. For example: \"parent,resource_name\".\n\nThe following fields are supported:\n\n- resource_name\n- category\n- state\n- parent\n- severity\n\nThe following fields are supported when compare_duration is set:\n\n- state_change\n\n### PageSize\n\n public int PageSize { get; set; }\n\nThe maximum number of results to return in a single response. Default is\n10, minimum is 1, maximum is 1000.\n\n### PageToken\n\n public string PageToken { get; set; }\n\nThe value returned by the last `GroupFindingsResponse`; indicates\nthat this is a continuation of a prior `GroupFindings` call, and\nthat the system should return the next page of data.\n\n### Parent\n\n public string Parent { get; set; }\n\nRequired. Name of the source to groupBy. Its format is\n\"organizations/\\[organization_id\\]/sources/\\[source_id\\]\",\nfolders/\\[folder_id\\]/sources/\\[source_id\\], or\nprojects/\\[project_id\\]/sources/\\[source_id\\]. To groupBy across all sources\nprovide a source_id of `-`. For example:\norganizations/{organization_id}/sources/-, folders/{folder_id}/sources/-,\nor projects/{project_id}/sources/-\n\n### ParentAsSourceName\n\n public SourceName ParentAsSourceName { get; set; }\n\n[SourceName](/dotnet/docs/reference/Google.Cloud.SecurityCenter.V1P1Beta1/latest/Google.Cloud.SecurityCenter.V1P1Beta1.SourceName)-typed view over the [Parent](/dotnet/docs/reference/Google.Cloud.SecurityCenter.V1P1Beta1/latest/Google.Cloud.SecurityCenter.V1P1Beta1.GroupFindingsRequest#Google_Cloud_SecurityCenter_V1P1Beta1_GroupFindingsRequest_Parent) resource name property.\n\n### ReadTime\n\n public Timestamp ReadTime { get; set; }\n\nTime used as a reference point when filtering findings. The filter is\nlimited to findings existing at the supplied time and their values are\nthose at that specific time. Absence of this field will default to the\nAPI's version of NOW."]]