Findings Reference
Overview
The Findings report is the output of the CSPM integration: one row per Wiz-flagged cloud role, enriched with what Britive knows about that role. This page documents what each column means, where the value comes from, and how to query the same data through the API.
Findings are always scoped to one integration. There is no cross-integration view — if you run several Wiz integrations, you read each one’s findings separately.
The Findings Table
Open it at System Admin → CSPM Integration → Manage on an integration → Findings.
| Column | API field | Source | Meaning |
|---|---|---|---|
| Source Role | sourceRoleName | Wiz | The role name as Wiz reported it |
| Description | controlName | Wiz | The Wiz control that flagged this role. Hover the info icon for the full controlDescription |
| Severity | controlSeverity | Wiz | CRITICAL, HIGH, MEDIUM, or LOW, shown as a colored pill |
| Application | appName | Britive | The onboarded Britive application containing this role |
| Profile | profileName | Britive | The Britive profile that grants this role, if any |
| Britive Role | britiveRoleName | Britive | The role’s name in Britive’s catalog |
| Environment | environment | Britive | The Britive environment, as Name (id) |
| Status | resolved | Derived | Resolved or Unresolved |
| Source | source | Derived | Britive or External |
Two fields are returned by the API but not shown as columns:
| API field | Meaning |
|---|---|
sourceEnvironment | The cloud provider’s account, as Subscription Name (subscription id) — what Wiz reported, before Britive resolves it |
appType | The application type (AWS, AZURE, GCP, OCI), used to render the application’s logo |
sourceEnvironment and environment answer different questions. sourceEnvironment is the raw cloud account Wiz saw. environment is the Britive environment that Britive matched it to — and it’s empty if no match was found, even when sourceEnvironment has a value.
How Each Value Is Resolved
Britive correlates a finding by walking a chain from the role Wiz reported to the profiles that grant it. Each hop can fail independently, which is what produces the partially-populated rows you see in the report.
flowchart TD
A["Wiz finding<br/>resource type = role"] --> B{"Role's native id matches<br/>a cataloged Britive role?"}
B -->|No| C["Unresolved<br/>Application, Profile, Britive Role all empty"]
B -->|Yes| D["Britive Role populated"]
D --> E["Application + App Type populated<br/>via the role's environment"]
E --> F{"Subscription id matches<br/>a Britive environment?"}
F -->|No| G["Environment empty"]
F -->|Yes| H["Environment = Name (id)"]
E --> I{"Any profile grants<br/>this role?"}
I -->|No| J["Unresolved<br/>Profile empty, Source = External"]
I -->|Yes| K["Resolved<br/>Profile populated"]
Britive Role, Application, and App Type
Britive matches Wiz’s resource.id — the cloud provider’s native role identifier — against the native id of the roles in its own permission catalog, requiring the resource type to be role on both sides.
Application and App Type come from the role’s own environment, not from any profile. That means they populate as soon as the role is cataloged in Britive at all, even if no profile grants it. This is deliberate: it’s what makes the “Britive knows this role but nothing governs it” case visible.
Profile and Status
Status is gated on the profile chain alone:
- Resolved — at least one Britive profile grants this role
- Unresolved — no profile grants it
A populated Application with an empty Profile is therefore a normal, meaningful state — not a bug. It’s the highest-signal row in the report.
Resolved means governed by a profile, not known to Britive. A row can have Application, App Type, and Britive Role all populated and still be Unresolved.
Environment
Britive resolves this by matching Wiz’s resource.subscriptionId against the native id of each environment in the application’s environment tree, then formatting the winner as Name (id).
It returns empty when the role didn’t resolve to an application, or when no environment in that application has a matching native id.
environment is computed in the application layer rather than the database, which is why — unlike every other field — it cannot be filtered, sorted, or searched. See Filterable attributes.
Source
| Value | Meaning |
|---|---|
| Britive | The role’s association with the profile was created through Britive |
| External | The role has no profile association recorded in Britive |
Source: External and Status: Unresolved travel together for the same rows.
API Reference
All endpoints require an identity with the securityadmin.security.manage permission.
Integration management
| Method | Path | Purpose |
|---|---|---|
GET | /api/cspm/apps | List supported CSPM apps |
GET | /api/cspm/tokens | List this tenant’s integrations |
POST | /api/cspm/token | Create an integration |
GET | /api/cspm/integrations/{nameOrId} | Get one integration |
PATCH | /api/cspm/integrations/{nameOrId} | Rename or re-describe |
POST | /api/cspm/integrations/{nameOrId}/rotate | Rotate the token |
DELETE | /api/cspm/integrations/{nameOrId} | Delete the integration |
Findings
| Method | Path | Purpose |
|---|---|---|
GET | /api/cspm/{app}/finding-types | List finding types for an app |
GET | /api/cspm/{app}/findings/{findingType} | Retrieve a page of findings |
For Wiz, {app} is wiz and {findingType} is wiz-roles.
Every endpoint taking {nameOrId} accepts the integration’s name or its generated id (cspm-<uuid>). Britive tries the id first — a direct lookup — then falls back to matching the name. Since ids always carry the cspm- prefix, the two can never collide.
Listing integrations
curl -s -X GET "https://$BRITIVE_TENANT/api/cspm/tokens?searchText=prod" \
-H "Authorization: TOKEN $BRITIVE_API_TOKEN"searchText is an optional case-insensitive substring match against each integration’s name, description, or id. Omit it to list everything.
[
{
"app": "wiz",
"name": "wiz-production",
"description": "Wiz tenant for production cloud accounts",
"ingestUrl": "https://acme.britive-app.com/wiz-ingest/cspm-3a91f0c8-52b7-4d16-9f4a-77c0de11ab34",
"createdOn": "2026-08-07T16:22:41.913Z"
}
]List responses omit actionTemplate — it’s identical for every integration of the same app type. Fetch a single integration with GET /api/cspm/integrations/{nameOrId} to get it.
No endpoint ever returns the cleartext token. POST /api/cspm/token and POST .../rotate are the only two responses that contain one, and only at the moment it’s generated.
Querying findings
curl -s -G "https://$BRITIVE_TENANT/api/cspm/wiz/findings/wiz-roles" \
-H "Authorization: TOKEN $BRITIVE_API_TOKEN" \
--data-urlencode "integration=wiz-production" \
--data-urlencode "filter=controlSeverity eq CRITICAL and resolved eq unresolved" \
--data-urlencode "sort=sourceRoleName,asc" \
--data-urlencode "page=0" \
--data-urlencode "size=50"| Parameter | Required | Default | Notes |
|---|---|---|---|
integration | Yes | — | Integration name or id. Findings are always scoped to one integration |
page | No | 0 | Zero-based page number |
size | No | 20 | Rows per page |
sort | No | unsorted | attribute,asc or attribute,desc. Direction defaults to asc |
filter | No | — | Structured filter expression (below) |
searchText | No | — | Free-text substring match across every filterable attribute, OR’d together |
The response wraps the rows with paging metadata:
{
"page": 0,
"size": 50,
"count": 128,
"data": [ /* WizRoleFinding objects */ ]
}count is the total matching rows, not the number in data — use it to drive paging.
Filter Grammar
<attribute> <operator> <value> [and <attribute> <operator> <value>]...Conditions are combined with and. There is no or and no grouping — for OR-style matching across attributes, use searchText.
Operators
| Operator | Meaning | Example |
|---|---|---|
eq | Exact match | controlSeverity eq HIGH |
co | Contains | sourceRoleName co admin |
sw | Starts with | appName sw AWS |
Literal _ and % in values are escaped, so they match themselves rather than acting as wildcards.
Filterable attributes
These same attributes are valid for filter, sort, and searchText:
| Attribute | Example values |
|---|---|
sourceRoleName | acme-prod-admin |
sourceEnvironment | Acme Production (123456789012) |
britiveRoleName | acme-prod-admin |
controlName | IAM role with administrative privileges |
controlDescription | Full control text |
controlSeverity | CRITICAL, HIGH, MEDIUM, LOW |
appName | AWS Production |
appType | AWS, AZURE, GCP, OCI |
profileName | Prod-Admin-Breakglass |
source | britive, external |
resolved | resolved, unresolved |
environment is not filterable, sortable, or searchable. It’s resolved in the application layer from the app container’s environment tree, not stored as a queryable column. Filter on sourceEnvironment instead, which holds the cloud account Wiz reported.
An unrecognized attribute or operator returns a validation error naming what is supported, so a typo fails loudly rather than silently returning everything.
Useful Queries
Ungoverned critical roles — the highest-priority list. Roles Wiz flagged as critical that no Britive profile governs:
filter=controlSeverity eq CRITICAL and resolved eq unresolvedUngoverned roles in a known application — roles Britive can already see, which means you can wrap them in a profile today:
filter=resolved eq unresolved and appName sw AWSEverything in one cloud account:
filter=sourceEnvironment co 123456789012Findings on admin-named roles, worst first:
filter=sourceRoleName co admin&sort=controlSeverity,asccontrolSeverity sorts alphabetically, not by risk — ascending gives CRITICAL, HIGH, LOW, MEDIUM. That happens to put CRITICAL first, but LOW lands above MEDIUM. For strict risk ordering, filter one severity at a time.
Data Retention and Updates
Each finding is stored keyed by the integration plus the Wiz issue id. Re-sending the same issue updates the existing row rather than creating a duplicate — so as Wiz re-evaluates an issue and pushes an update, the report reflects the latest state.
Because the key includes the integration, two integrations that happen to ingest the same underlying Wiz issue id keep separate rows and never overwrite each other.
Britive does not delete findings when Wiz closes an issue unless Wiz sends an update saying so. If your Wiz rule only fires on issue creation, closed issues will persist in the report — configure the rule to fire on status changes too.
Next Steps
- Troubleshooting — when findings don’t arrive or don’t resolve
- Wiz Integration — setup and token management