Identity & Access Management

Preview — pending review

This reference is generated from the platform API contract and is still under review. Operations, fields, and descriptions can change before publication.

List and query Access Analyzer findings

GET
/scopes/{scopeId}/iam/access-findings

Lists Access Analyzer findings for the active tenant/subscription/project scope. Each finding describes a resource (object bucket, KMS key, IAM role, secret, snapshot, machine image, file share, or database) that an external principal can reach, including the granting policy statement, the access level, and a remediation recommendation. This single endpoint serves both the plain route-load list (default filter status=Active in the UI) and the search/filter/sort/paginate behavior of the iam.access_finding.search_filter_sort action: q matches resource name and external principal, and the status, exposure, resourceType, and accessLevel filters mirror the UI facet chips. Validation: scopeId must reference a scope visible to the caller (NOT_FOUND otherwise); status, exposure, resourceType, accessLevel, sort, order, page, and pageSize must be within their documented enums/ranges or the request fails with VALIDATION_FAILED (422). Async & state: Synchronous read; no state change. Findings themselves are produced by the continuous analyzer scan, not by this call. Errors: 401 when unauthenticated; 403 when the caller lacks a reader-capable role on the scope; 422 on malformed filter/pagination parameters; 500 on backend read-model failure. Idempotency/Concurrency: Safe, cacheable; no idempotency key required.

Authorization

bearerToken
headerAuthorizationBearer <token>

An API token (pc_live_…) or a service-account key (sak_live_…), created in Identity & Access Management and sent as Authorization: Bearer <token>. Requests are rate limited per credential and per tenant: every response carries X-RateLimit-Limit, X-RateLimit-Remaining and X-RateLimit-Reset, and a refused request gets 429 RATE_LIMITED with Retry-After.

Path Parameters

scopeId*string

Opaque ownership+authorization scope resolving to tenant + subscription + project.

Query Parameters

region?string

Restrict the result set to a single region.

Match^[a-z][a-z0-9-]{1,39}$
q?string

Free-text search.

sort?string

Field to sort by (entity-specific; defaults to the entity's natural order).

order?string

Sort direction.

Default"asc"
Value in"asc""desc"
page?integer

1-based page number.

Range1 <= value
Default1
pageSize?integer

Items per page (max 200).

Range1 <= value <= 200
Default50
status?string

Filter by finding lifecycle status (UI chips All / Active / Archived / Resolved).

Value in"Active""Archived""Resolved"
exposure?string

Filter by exposure surface of the finding.

Value in"Public""Cross-account""Cross-organization"
resourceType?string

Filter by the type of the exposed resource.

Value in"Object bucket""KMS key""IAM role""Secret""Snapshot""Machine image""File share""Database"
accessLevel?string

Filter by the access level granted to the external principal.

Value in"Read""Write""Full""List"

Response Body

Paginated collection of access findings in the active scope.

application/json
  1. response
data*array<>
meta*

Pagination envelope metadata. List responses are always { data, meta } — never a naked array.

curl -X GET "https://example.com/scopes/string/iam/access-findings"
{  "data": [    {      "id": "string",      "resource": "string",      "resourceArn": "string",      "resourceType": "Object bucket",      "resourceHref": "string",      "exposure": "Public",      "externalPrincipal": "string",      "accessLevel": "Read",      "actions": [        "string"      ],      "status": "Active",      "grantStatement": {        "sid": "string",        "effect": "Allow",        "service": "string",        "actions": [          "string"        ],        "resources": [          "string"        ],        "conditions": [          {            "operator": "string",            "key": "string",            "value": "string"          }        ]      },      "recommendation": "string",      "analyzedAt": "2019-08-24T14:15:22Z",      "firstObservedAt": "2019-08-24T14:15:22Z"    }  ],  "meta": {    "page": 1,    "pageSize": 1,    "total": 0,    "hasNext": true  }}