{
  "schema": "aaes/capability-pack/1",
  "provider": "wiz",
  "version": "1.0.0",
  "description": "Wiz GraphQL API on the tenant's single /graphql endpoint: read issues, vulnerability findings, configuration findings and inventory under a read-only service-account credential.",
  "notes": "Draft package: no first-party operation contract has been verified. On 2026-09-21, docs.wiz.io returned HTTP 429 on every retrieval attempt and integrate.wiz.io was unreachable. The retrieved Fortinet FortiSOAR Wiz.io connector documentation is a third-party source. It corroborates the regional GraphQL endpoint shape (https://api.<region>.app.wiz.io), service-account OAuth client credentials with a separate auth endpoint, and issue/vulnerability query shapes. It does not establish Wiz's operation contracts. Before promotion, verify every query field, input type, and permission against Wiz documentation and the tenant's GraphQL schema introspection.\n\nReplace wiz-api.invalid with the tenant's regional API host shown in Wiz console settings. Update every endpoint, resource locator, and network allowlist entry together; allowlists match exactly.\n\nEvery registered capability uses POST /graphql. Request bodies select the operation, so a different capability name does not restrict a mutation on that shared URL. Two controls are required for these R0 reads: use a service-account token with read-only scopes, and enforce query-only bodies targeting only the types named in each capability description. The provider scopes must reject mutations. The deployment must enforce the type restriction, for example through executor body inspection. Do not enable the capabilities at R0 if either control is absent.\n\nThe removed wiz.issues.update and wiz.projects.update registrations remain excluded. This format does not restrict request bodies, so either write registration would admit every mutation permitted by a write-scoped token. Any future write capability needs a separately reviewed control that restricts the actual mutation, such as an executor body allowlist.\n\nAn external process creates the service account with minimum scopes, exchanges its client id and secret at the separate Wiz auth endpoint, and stores and renews the complete header value defined in the credential note. The package performs no account creation or token issuance.\n\nAll GraphQL mutations are excluded, including updateIssue, deleteIssue, updateProject, deleteProject; service-account creation, rotation, and deletion; SAML, SSO, and authentication settings; cloud connector onboarding and offboarding for subscriptions, projects, and organization-wide connections; automation and integration changes that may send finding data to third parties; reports scheduled for external delivery; and user or role management.\n\nRe-review on 2026-10-29: the web reader returned HTTP 403 for the API guide on docs.wiz.io. The llms.txt URL, win.wiz.io and integrate.wiz.io were inaccessible through that tool. The wiz-sec GitHub organization and its charts repository were readable, but no first-party query contract for these four reads was retrieved. The earlier HTTP 429 result is historical. All four operations, exact read-only scopes, token lifetime and revocation behavior remain unverified against Wiz documentation. Do not enable this draft.",
  "credential": {
    "secret_ref_id": "secret-ref-wiz-readonly-access-token",
    "custody": "customer_vault",
    "inject": "header",
    "inject_name": "Authorization",
    "note": "Provisional credential design: no Wiz authentication reference was retrieved in this review. Earlier third-party connector documentation corroborated OAuth2 client credentials and bearer authentication; it does not verify the vendor contract. Before enabling, confirm the scheme, auth endpoint, grant, audience, exact API scopes, project scoping, lifetime and revocation behavior against Wiz documentation.\n\nIf that contract is confirmed, store the complete Authorization header value, including the documented scheme, for a service account restricted to these reads in the customer's secret manager. An external deployment process must own service-account setup, token issuance and renewal. Keep client credentials under separate vault references; the executor injects the stored access-token header and does not perform OAuth or token renewal.\n\nRequire provider permissions that reject mutations and executor controls that restrict queries to the types registered here. Do not store write-scoped credentials under this reference or enable the R0 registrations without both controls. The exact vendor scopes that satisfy these requirements remain unverified.\n\nRenew before the confirmed expiry and refuse expired or rejected values. Do not assume that deleting or deactivating an account stops issuance or invalidates captured tokens without vendor confirmation. Treat captured material as live until confirmed expiry or revocation.\n\nThe deployment must restrict vault access and keep credential material only in executor memory for the call, out of logs, traces, diagnostics and crash reports. These are requirements awaiting deployment verification, not completed custody checks."
  },
  "capabilities": [
    {
      "capability_id": "wiz.issues.read",
      "version": "1.0.0",
      "kind": "tool",
      "risk_tier": "R0",
      "owner": "REPLACE-WITH-ACCOUNTABLE-HUMAN",
      "data_class": "internal",
      "egress_allowlist": [
        "wiz-api.invalid"
      ],
      "endpoint": "https://wiz-api.invalid/graphql",
      "method": "POST",
      "connector": "http",
      "custody": "customer_vault",
      "secret_ref_id": "secret-ref-wiz-readonly-access-token",
      "inject": "header",
      "inject_name": "Authorization",
      "actions": [
        "read"
      ],
      "resource_id": "wiz-tenant",
      "description": "Query the tenant's Issues (security issues with severity, status, affected resource and project) via a GraphQL query operation. R0 holds only under the read-only discipline stated in the pack notes: the request body must be a query operation against the issues type with no mutation — an unrestricted body defeats the tier.\n\nThe host is a reserved placeholder: substitute the tenant's API host before enabling.",
      "requires_review": true
    },
    {
      "capability_id": "wiz.vulnerability_findings.read",
      "version": "1.0.0",
      "kind": "tool",
      "risk_tier": "R0",
      "owner": "REPLACE-WITH-ACCOUNTABLE-HUMAN",
      "data_class": "internal",
      "egress_allowlist": [
        "wiz-api.invalid"
      ],
      "endpoint": "https://wiz-api.invalid/graphql",
      "method": "POST",
      "connector": "http",
      "custody": "customer_vault",
      "secret_ref_id": "secret-ref-wiz-readonly-access-token",
      "inject": "header",
      "inject_name": "Authorization",
      "actions": [
        "read"
      ],
      "resource_id": "wiz-tenant",
      "description": "Query vulnerability findings (CVE findings on cloud resources, with package, fix availability and affected asset) via a GraphQL query operation. R0 holds only under the read-only discipline stated in the pack notes: query operations only, no mutation.\n\nThe host is a reserved placeholder: substitute before enabling.",
      "requires_review": true
    },
    {
      "capability_id": "wiz.configuration_findings.read",
      "version": "1.0.0",
      "kind": "tool",
      "risk_tier": "R0",
      "owner": "REPLACE-WITH-ACCOUNTABLE-HUMAN",
      "data_class": "internal",
      "egress_allowlist": [
        "wiz-api.invalid"
      ],
      "endpoint": "https://wiz-api.invalid/graphql",
      "method": "POST",
      "connector": "http",
      "custody": "customer_vault",
      "secret_ref_id": "secret-ref-wiz-readonly-access-token",
      "inject": "header",
      "inject_name": "Authorization",
      "actions": [
        "read"
      ],
      "resource_id": "wiz-tenant",
      "description": "Query cloud configuration findings (posture findings against controls, with pass/fail result and affected resource) via a GraphQL query operation. R0 holds only under the read-only discipline stated in the pack notes: query operations only, no mutation.\n\nThe host is a reserved placeholder: substitute before enabling.",
      "requires_review": true
    },
    {
      "capability_id": "wiz.inventory.read",
      "version": "1.0.0",
      "kind": "tool",
      "risk_tier": "R0",
      "owner": "REPLACE-WITH-ACCOUNTABLE-HUMAN",
      "data_class": "internal",
      "egress_allowlist": [
        "wiz-api.invalid"
      ],
      "endpoint": "https://wiz-api.invalid/graphql",
      "method": "POST",
      "connector": "http",
      "custody": "customer_vault",
      "secret_ref_id": "secret-ref-wiz-readonly-access-token",
      "inject": "header",
      "inject_name": "Authorization",
      "actions": [
        "read"
      ],
      "resource_id": "wiz-tenant",
      "description": "Query the cloud resource inventory (graph search / cloud resources: entities, relationships and properties across connected cloud accounts) via a GraphQL query operation. R0 holds only under the read-only discipline stated in the pack notes: query operations only, no mutation. Inventory results describe the customer's whole cloud estate — treat the output as sensitive even though the capability is a read.\n\nThe host is a reserved placeholder: substitute before enabling.",
      "requires_review": true
    }
  ],
  "resources": [
    {
      "resource_id": "wiz-tenant",
      "kind": "api",
      "locator": "https://wiz-api.invalid/graphql",
      "data_class": "internal",
      "owner": "REPLACE-WITH-ACCOUNTABLE-HUMAN"
    }
  ],
  "review": {
    "state": "draft",
    "date": "2026-10-29",
    "sources": [
      "https://docs.fortinet.com/document/fortisoar/2.0.0/wiz-io/980/wiz-io-v2-0-0 (retrieved 2026-09-21)"
    ],
    "reviewer_id": "aaes-eng"
  }
}
