List handled gate requests
Returns one row per served gate request. Each row is the fully-hydrated GateRequestHandled_v1 event as stored, including per-plugin timings and per-round-trip HTTP metadata inline (no separate detail endpoint).
Default lookback when neither start_time nor end_time is provided is 24 hours — the endpoint is a high-volume activity log so the short default protects casual opens from scanning a full 30-day window. If only one bound is provided, the other is derived using the 24-hour default. Same 30-day cap applies when both bounds are provided.
Query Parameters
- limit integer
Possible values:
<= 500The maximum number of items to return. Default 50.
- offset integer
The number of the first item to return.
- start_time date-time
RFC3339 timestamp. Inclusive lower bound on
publish_time. - end_time date-time
RFC3339 timestamp. Exclusive upper bound on
publish_time. - filter string
SCIM 2.0 filter over
GET /gate/requests-handled.Top-level fields
event_id,analytics_correlation_id: identifier lookups.method: exact-match HTTP method.status_code: integer, supports ranges.elapsed_seconds: number (seconds), supports ranges.url: full string surface —eq/ne,sw/co/ew, and lexicographicgt/ge/lt/le.otel_trace_id,otel_span_id,request_id: exact-match identifiers.outcome: exact-match on the framework-derived outcome (allow/modify/reject/error).instance_id,service_name,client_ip_address: identifier lookups.request_length,response_length: integer bytes, support ranges.
Sub-scopes
target_round_trip.*— dotted access into the top-level target round-trip (method,url,status_code,request_length,response_length,elapsed_seconds).target_round_trip prtests presence.plugins[...]— SCIM 2.0 value-path over the plugin array. Supported sub-attributes:plugin_index,plugin_id,plugin_type,outcome,elapsed_seconds.plugins prtests non-emptiness.plugins.round_trips[...]— nested value-path over each plugin's HTTP round trips. Same six sub-attributes astarget_round_trip.*. Written as a dotted parent (plugins.round_trips[…]) because the SCIM 2.0 filter parser used here doesn't implement RFC 7644's recursive value-paths;plugins[round_trips.status_code ge 500]produces the same result.plugins.reasons[...]— nested value-path over each plugin's reason list. Sub-attributes:code(exact-match),message(full string surface).plugins[reasons eq X]is short forplugins.reasons[code eq X]—codeis the default sub-attribute.Supported operators
eq,ne: all scalar fields. Multi-value lookups: chain withor.gt,ge,lt,le: numeric fields (status_code,elapsed_seconds,request_length,response_length, and their namesakes insideplugins[…]/ round-trip sub-scopes) and lexicographic on full-string fields (url,message).sw,co,ew: full-string fields (url,message).pr: presence — scalars useIS NOT NULL; arrays useARRAY_LENGTH > 0; structs useIS NOT NULL(plus a JSON-null guard on JSON-typed struct paths).
Semantic notes
plugins.plugin_type eq Xandplugins[plugin_type eq X]compile to the same SQL (SCIM 2.0 multi-valued attribute semantics — "some plugin has plugin_type = X"). To match the same plugin across multiple predicates, use the bracketed form:plugins[plugin_type eq "opa" and outcome eq "reject"].Example: plugins[plugin_type eq "opa" and outcome eq "reject"]
Header Parameters
- SlashID-OrgID string required
The organization ID
Example: af5fbd30-7ce7-4548-8b30-4cd59cb2aba1
- 200
- 400
- 401
- 403
OK
- application/json
- Schema
- Example (from schema)
Schema
meta object
pagination object
limit integeroffset integertotal_count int64cursor_pagination object
limit integercursor stringtotal_count int64errors object[]
httpcode integermessage stringresult object[]
event_name stringPossible values: [
AuthenticationSucceeded_v1,AuthenticationFailed_v1,PersonCreated_v1,AnonymousPersonCreated_v1,PersonDeleted_v1,VirtualPageLoaded_v1,SlashIDSDKLoaded_v1,PersonIdentified_v1,PersonLoggedOut_v1,TokenMinted_v1,AnonymousTokenMinted_v1,PasswordChanged_v1,GdprConsentsChanged_v1,GateServerStarted_v1,GateRequestHandled_v1,GateHeartbeat_v1,PermissionCreated_InRegion_v1,PermissionCreated_v1,PermissionDeleted_InRegion_v1,PermissionDeleted_v1,RoleCreated_InRegion_v1,RoleCreated_v1,RoleDeleted_InRegion_v1,RoleDeleted_v1,RoleUpdated_InRegion_v1,RoleUpdated_v1,RolesSetToPerson_InRegion_v1,RolesSetToPerson_v1,PermissionsSetToPerson_InRegion_v1,PermissionsSetToPerson_v1,MitmAttackDetected_v1,PermissionUpdated_InRegion_v1,PermissionUpdated_v1,SuborganizationCreated_InRegion_v1,SuborganizationCreated_v1,OAuth2ClientCreated_InRegion_v1,OAuth2ClientCreated_v1,AWSIAMUserCreated_v1,AWSIAMRoleCreated_v1,AWSIAMRoleInlinePoliciesUpdated_v1,AWSIAMRoleManagedPoliciesUpdated_v1,AWSIAMRoleAssumeRolePolicyUpdated_v1,AWSIAMRolePermissionsBoundaryUpdated_v1,AWSIAMRoleDeleted_v1,GCPServiceAccountCreated_v1,GCPRoleCreated_v1,GCPIAMPolicyBindingUpdated_v1,GCPServiceAccountDeleted_v1,ActiveDirectorySPNCreated_v1,ActiveDirectorySPNRoleUpdated_v1,ActiveDirectorySPNDeleted_v1,ActiveDirectoryUserCreated_v1]service_name stringHuman-readable service identity — the OpenTelemetry
service.nameattribute Gate also emits on traces and logs. Typically set by the operator to the deployment name (e.g. "gate-demo", "slashid-backend"); defaults to "gate".instance_id uuidStable UUID identifying a Gate installation across restarts. Generated on first boot and persisted to disk at monitoring.instance_id_file. When the file cannot be read or written, Gate falls back to the same UUID as analytics_correlation_id — so instance_id == analytics_correlation_id reliably signals "no persistent identity available".
start date-timeTimestamp when the operation started
end date-timeTimestamp when the operation ended
elapsed doubleAmount of time (in seconds) elapsed during the operation. Might be smaller than
end-start(e.g., if the operation was paused)method stringMethod of the HTTP Request
url stringTarget URL of the HTTP Request
status_code integerStatus Code of the HTTP Response (-1 on I/O errors)
request_length int64Number of bytes transferred in the request body
response_length int64Number of bytes transferred in the response body
request_id uuidGate-generated UUID that uniquely identifies this request within Gate's observability stream. Always populated. Distinct from otel_trace_id: the request_id is Gate's local handle for deduplication and lookup; otel_trace_id (when present) ties the request to the caller's distributed trace.
otel_trace_id stringOpenTelemetry trace ID (32 lowercase hex characters) associated with this request. Populated from the current span's SpanContext when it is valid — either extracted from an incoming traceparent / Jaeger / Cloud Trace header, or synthesized locally when a tracing exporter is configured. Absent when no tracer provider is configured (the SDK's noop span yields an invalid SpanContext).
otel_span_id stringOpenTelemetry span ID (16 lowercase hex characters) of the request-scoped span Gate created inside NewRequestObservability. Populated whenever otel_trace_id is populated.
outcome stringPossible values: [
allow,reject,modify,error]Describes what the plugin actually did to this request — not policy intent.
- allow: plugin invoked next.ServeHTTP; request forwarded downstream unchanged.
- modify: plugin invoked next.ServeHTTP but altered the request or response.
- reject: plugin did NOT invoke next.ServeHTTP; short-circuited with its own response (rejection, redirect, cached response, UI response, etc.).
- error: framework-emitted fallback. Plugins MUST NOT emit this.
Monitoring/advisory-mode denials that let the request through use
allow(that is what the plugin did) plus an advisory reason code (e.g.,opa.policy_denied_advisory,ratelimit.exceeded_advisory).target_round_trip object
start date-timeTimestamp when the operation started
end date-timeTimestamp when the operation ended
elapsed doubleAmount of time (in seconds) elapsed during the operation. Might be smaller than
end-start(e.g., if the operation was paused)method stringMethod of the HTTP Request
url stringTarget URL of the HTTP Request
status_code integerStatus Code of the HTTP Response (-1 on I/O errors)
request_length int64Number of bytes transferred in the request body
response_length int64Number of bytes transferred in the response body
plugins object[]
Timing and metadata information for all plugins used
start date-timeTimestamp when the operation started
end date-timeTimestamp when the operation ended
elapsed doubleAmount of time (in seconds) elapsed during the operation. Might be smaller than
end-start(e.g., if the operation was paused)plugin_index integerplugin_id stringplugin_type stringoutcome stringPossible values: [
allow,reject,modify,error]Describes what the plugin actually did to this request — not policy intent.
- allow: plugin invoked next.ServeHTTP; request forwarded downstream unchanged.
- modify: plugin invoked next.ServeHTTP but altered the request or response.
- reject: plugin did NOT invoke next.ServeHTTP; short-circuited with its own response (rejection, redirect, cached response, UI response, etc.).
- error: framework-emitted fallback. Plugins MUST NOT emit this.
Monitoring/advisory-mode denials that let the request through use
allow(that is what the plugin did) plus an advisory reason code (e.g.,opa.policy_denied_advisory,ratelimit.exceeded_advisory).reasons object[]
code stringPossible values: [
framework.plugin_missing_outcome,framework.plugin_double_outcome,framework.plugin_panic,opa.policy_allowed,opa.policy_denied,opa.policy_denied_advisory,opa.evaluation_failed,opa.input_build_failed,opa.body_read_failed,opa.result_unrecognized_shape,opa.trace_at,ratelimit.allowed,ratelimit.throttled,ratelimit.exceeded,ratelimit.exceeded_advisory,ratelimit.limits_lookup_failed,ratelimit.check_failed,validate_jwt.token_present,validate_jwt.token_missing,validate_jwt.invalid_token,validate_jwt.token_expired,validate_jwt.groups_missing,validate_jwt.dependency_lookup_failed,validate_jwt.validation_skipped,validate_oauth2_token.token_present,validate_oauth2_token.token_missing,validate_oauth2_token.introspection_failed,validate_oauth2_token.token_inactive,validate_oauth2_token.scope_missing,validate_oauth2_token.claim_mismatch,request_oauth2_authenticator.token_injected,request_oauth2_authenticator.token_fetch_failed,token_exchange.token_exchanged,token_exchange.source_token_missing,token_exchange.exchange_failed,token_exchange.exchange_denied,token_translation_upgrade.token_upgraded,token_translation_upgrade.map_failed,token_translation_upgrade.mint_failed,token_translation_upgrade.no_match,token_translation_upgrade.custom_claims_filter_failed,token_translation_downgrade.token_downgraded,token_translation_downgrade.map_failed,token_translation_downgrade.mint_failed,token_translation_downgrade.no_match,token_translation_downgrade.token_missing,token_reminting.token_reminted,token_reminting.mint_failed,token_reminting.no_match,token_reminting.token_missing,token_reminting.token_invalid,anonymizer.body_anonymized,anonymizer.no_pii_detected,anonymizer.body_read_failed,tokenizer.body_tokenized,tokenizer.no_tokens_found,tokenizer.tokenizer_call_failed,mirroring.mirrored,mirroring.mirror_dispatch_failed,enforce_openapi_security.security_satisfied,enforce_openapi_security.security_failed,enforce_openapi_security.spec_not_found,enforce_openapi_security.security_scheme_not_supported,request_validator.request_valid,request_validator.request_invalid,request_validator.validator_call_failed,authentication_proxy.session_authenticated,authentication_proxy.session_missing,authentication_proxy.session_expired,authentication_proxy.login_flow,e2e_testing.injected,e2e_testing.no_op]Namespaced reason code. Namespace prefix (before the first
.) is eitherframeworkfor wrapper-emitted codes or the plugin_type for plugin-emitted codes. Enum-schema-gated so new codes require a schema PR. MUST BE KEPT IN SYNC with plugins/observability_reasons.go and each plugin's reason-code constants.message stringdetails object
Optional per-code diagnostic payload. Discriminated by
code. Codes with no diagnostic payload have no variant declared here — absent variant means thedetailsfield is omitted on the wire.oneOf- MOD1
- MOD2
- MOD3
code stringPossible values: [
framework.plugin_panic]panic_value stringfmt.Sprint of the recovered panic value.
stack stringRuntime stack captured at panic time (may be truncated).
code stringPossible values: [
opa.policy_allowed,opa.policy_denied,opa.policy_denied_advisory]payload object
Envelope for the rego-authored details value. Reason omits
detailsentirely (rather than emitting an empty payload) when the policy did not supply a details value.rawThe rego-authored details value verbatim — whatever shape the policy wrote (object, array, string, scalar). Always nested under a fixed
rawkey: consumers get a uniform path regardless of the input shape, and rego-authored fields (includingcode) are isolated from the union'scodediscriminator at the payload root.code stringPossible values: [
opa.trace_at]file stringRego source file path relative to the policy bundle root, with a leading slash — the form OPA emits (e.g.
/inline.regofor inline policies,/policies/authz.regofor bundle files).row integerPossible values:
>= 11-indexed line number.
col integerPossible values:
>= 11-indexed column number (if the SDK reports one).
rule_path stringFully-qualified rule path, e.g.
data.gate.auth.deny.result stringJSON-serialized rule value at this location.
metadata object
Optional per-plugin invariant per-invocation state. Discriminated by
plugin_type. Plugins that don't opt into metadata have no variant here — absent variant means the field is omitted on the wire. Variants are added per-plugin as each plugin is retrofitted.oneOf- MOD1
- MOD2
- MOD3
plugin_type stringPossible values: [
opa]allowed booleanBoolean result of the OPA policy decision.
monitoring_mode booleanTrue iff the plugin was configured in monitoring mode. Distinguishes advisory vs. enforcement rejects.
decision_id stringOPA decision ID for cross-referencing OPA logs (may be absent).
plugin_type stringPossible values: [
ratelimit]allowed booleanTrue iff the rate limiter permitted the request.
monitoring_mode booleanremaining integerRemaining quota after this request (from LimitResult.Remaining).
throttle_wait_seconds numberSleep duration (seconds) if the request was throttle-delayed. Zero when not throttled.
plugin_type stringPossible values: [
anonymizer]pii_count integerCount of anonymizer operations performed on this invocation across BOTH Presidio Analyzer and Trufflehog. Per-occurrence — a duplicated string at two JSON paths counts twice, matching what actually went on the wire. Diverges from
len(found_credentials), which is per-unique-value.found_credentials object[]
Trufflehog credential findings for this invocation, deduplicated by raw value. Omitted when empty. Content per item is shaped by the plugin's observability.credential_value_exposure config.
credential_provider stringProducer-facing identifier of the detector — for gate anonymizer findings, this is the trufflehog EntityType verbatim (e.g. "AwsAccessKey", "GithubPat").
credential_value stringPlaintext (in
plainmode) or redacted preview (inredactedmode) of the credential the anonymizer observed. Absent intype_onlyandhashedmodes. See the plugin's observability.credential_value_exposure config for interpretation.credential_hashes object
Content hashes keyed by algorithm (lowercase, e.g. "sha256", "sha1", "md5"). Values are the lowercase hex digest — no algorithm prefix. Producers may supply whichever algorithms their source system exposes (OneDrive publishes SHA-1, S3 publishes MD5 ETags, etc.); consumers should pick the strongest algorithm they recognize.
property name*stringhit_count integerNumber of times this exact credential value appeared in the analyzed payload (across all JSON paths). Findings are dedup'd by raw value; this counter preserves the per-occurrence multiplicity. Invariant: sum(found_credentials[i].hit_count) ≤ pii_count. The gap accounts for Presidio Analyzer PII ops, which don't emit findings.
round_trips object[]
HTTP requests executed by this plugin
start date-timeTimestamp when the operation started
end date-timeTimestamp when the operation ended
elapsed doubleAmount of time (in seconds) elapsed during the operation. Might be smaller than
end-start(e.g., if the operation was paused)method stringMethod of the HTTP Request
url stringTarget URL of the HTTP Request
status_code integerStatus Code of the HTTP Response (-1 on I/O errors)
request_length int64Number of bytes transferred in the request body
response_length int64Number of bytes transferred in the response body
event_metadata object
Metadata attached by the backend after ingest. A curated subset of
common.EventMetadatafrom the proto plus one BQ-derived field (publish_time).sourceis omitted (always "Gate" for these events);event_type/event_name/event_versionare already carried by theEventIdentifiersslice of the embedded ingress schema.event_id uuidtimestamp stringRFC3339Nano — client-set, when gate emitted the event.
publish_time date-timePub/Sub ingest time, from the BigQuery table column. Not on the proto. Endpoints order by this field.
organization_id uuidroot_organization_id uuidanalytics_correlation_id uuidPer-gate-process identifier. Same value across every event emitted by one gate process (including its heartbeats); a new value on process restart.
{
"meta": {
"pagination": {
"limit": 0,
"offset": 0,
"total_count": 0
},
"cursor_pagination": {
"limit": 0,
"cursor": "string",
"total_count": 0
}
},
"errors": [
{
"httpcode": 0,
"message": "string"
}
],
"result": [
{
"event_name": "AuthenticationSucceeded_v1",
"service_name": "string",
"instance_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
"start": "2005-12-24T18:29:30.033157Z",
"end": "2005-12-24T18:29:30.033157Z",
"elapsed": 0,
"method": "string",
"url": "string",
"status_code": 0,
"request_length": 0,
"response_length": 0,
"request_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
"otel_trace_id": "string",
"otel_span_id": "string",
"outcome": "allow",
"target_round_trip": {
"start": "2005-12-24T18:29:30.033157Z",
"end": "2005-12-24T18:29:30.033157Z",
"elapsed": 0,
"method": "string",
"url": "string",
"status_code": 0,
"request_length": 0,
"response_length": 0
},
"plugins": [
{
"start": "2005-12-24T18:29:30.033157Z",
"end": "2005-12-24T18:29:30.033157Z",
"elapsed": 0,
"plugin_index": 0,
"plugin_id": "string",
"plugin_type": "string",
"outcome": "allow",
"reasons": [
{
"code": "framework.plugin_missing_outcome",
"message": "string",
"details": {
"code": "framework.plugin_panic",
"panic_value": "string",
"stack": "string"
}
}
],
"metadata": {
"plugin_type": "opa",
"allowed": true,
"monitoring_mode": true,
"decision_id": "string"
},
"round_trips": [
{
"start": "2005-12-24T18:29:30.033157Z",
"end": "2005-12-24T18:29:30.033157Z",
"elapsed": 0,
"method": "string",
"url": "string",
"status_code": 0,
"request_length": 0,
"response_length": 0
}
]
}
],
"event_metadata": {
"event_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
"timestamp": "string",
"publish_time": "2005-12-24T18:29:30.033157Z",
"organization_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
"root_organization_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
"analytics_correlation_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6"
}
}
]
}
Bad Request
- application/json
- Schema
- Example (from schema)
Schema
meta object
pagination object
limit integeroffset integertotal_count int64cursor_pagination object
limit integercursor stringtotal_count int64errors object[]
httpcode integermessage string
{
"meta": {
"pagination": {
"limit": 0,
"offset": 0,
"total_count": 0
},
"cursor_pagination": {
"limit": 0,
"cursor": "string",
"total_count": 0
}
},
"errors": [
{
"httpcode": 0,
"message": "string"
}
]
}
Unauthorized
- application/json
- Schema
- Example (from schema)
Schema
meta object
pagination object
limit integeroffset integertotal_count int64cursor_pagination object
limit integercursor stringtotal_count int64errors object[]
httpcode integermessage string
{
"meta": {
"pagination": {
"limit": 0,
"offset": 0,
"total_count": 0
},
"cursor_pagination": {
"limit": 0,
"cursor": "string",
"total_count": 0
}
},
"errors": [
{
"httpcode": 0,
"message": "string"
}
]
}
Forbidden
- application/json
- Schema
- Example (from schema)
Schema
meta object
pagination object
limit integeroffset integertotal_count int64cursor_pagination object
limit integercursor stringtotal_count int64errors object[]
httpcode integermessage string
{
"meta": {
"pagination": {
"limit": 0,
"offset": 0,
"total_count": 0
},
"cursor_pagination": {
"limit": 0,
"cursor": "string",
"total_count": 0
}
},
"errors": [
{
"httpcode": 0,
"message": "string"
}
]
}