Skip to content

Black Cat API reference (beta)

By Black Cat Security Team · Published November 1, 2026

API reference Beta

Beta. Endpoints and fields can change while the API is in beta. Download the OpenAPI spec to generate a client.

Download the OpenAPI spec (JSON)

Authentication

Create an API key in the app under Settings → API Keys (Professional and Enterprise plans, admins only). Send it as a Bearer token:

curl -H "Authorization: Bearer bcs_…" https://api.blackcatsecurity.fr/v1/findings

A key can only use the permissions chosen when it was created, and it is refused on account, billing, SSO and key-management endpoints. This beta reference documents most of the endpoints a key can call. Each key is limited to 300 requests per minute on Professional and 1,200 on Enterprise; past the limit the API answers 429 with a Retry-After header.

AccessReviews

GET /access-reviews

List access-review campaigns

Requires permission: access_reviews:read

Parameters

NameInTypeRequiredDescription
statusquerystringNoFilter by status
limitqueryintegerNoItems per page (default 100, max 1000)
offsetqueryintegerNoNumber of items to skip

Responses

  • 200 — OK
    NameTypeRequiredDescription
    dataentity.ReviewCampaign[]No
    paginationentity.PaginationMetaNo
  • 401 — Authentication failed: the API key is missing, malformed, unknown, revoked or expired.
  • 403 — Forbidden. The code field says why: insufficient_permissions (the key lacks the permission named in x-api-key-permission), api_key_not_allowed (API keys cannot call this endpoint), plan_limit (the tenant's plan does not include API keys, and the body has no limit_type; or the request hit a feature or usage limit of the plan, which limit_type names), tenant_suspended (the tenant is suspended), ip_not_allowed (the key is restricted to certain IP addresses and this request came from another one). An endpoint may name other codes in its description.
  • 429 — Too many requests for this API key. Wait the number of seconds in the Retry-After header, then retry.
  • 500 — Internal Server Error

GET /access-reviews/{id}

Get an access-review campaign

Requires permission: access_reviews:read

Parameters

NameInTypeRequiredDescription
idpathstringYesCampaign ID

Responses

  • 200 — OK
    NameTypeRequiredDescription
    closed_atstringNo
    created_atstringNo
    created_bystringNo
    created_by_emailstringNo
    due_atstringNo
    idstringNo
    last_reminder_atstringNo
    launched_atstringNo
    namestringNo
    report_idstringNo
    scope_connector_idsstring[]No
    scope_typeentity.ReviewScopeTypeNo
    statusentity.ReviewCampaignStatusNo
    tenant_idstringNo
    updated_atstringNo
    versionintegerNo
  • 401 — Authentication failed: the API key is missing, malformed, unknown, revoked or expired.
  • 403 — Forbidden. The code field says why: insufficient_permissions (the key lacks the permission named in x-api-key-permission), api_key_not_allowed (API keys cannot call this endpoint), plan_limit (the tenant's plan does not include API keys, and the body has no limit_type; or the request hit a feature or usage limit of the plan, which limit_type names), tenant_suspended (the tenant is suspended), ip_not_allowed (the key is restricted to certain IP addresses and this request came from another one). An endpoint may name other codes in its description.
  • 404 — Not Found
  • 429 — Too many requests for this API key. Wait the number of seconds in the Retry-After header, then retry.

GET /access-reviews/{id}/grants

List reviewer grants

Requires permission: access_reviews:read

Parameters

NameInTypeRequiredDescription
idpathstringYesCampaign ID

Responses

  • 200 — OK
    NameTypeRequiredDescription
    campaign_idstringNo
    connector_idstringNo
    created_atstringNo
    expires_atstringNo
    idstringNo
    last_accessed_atstringNo
    reviewer_emailstringNo
    revoked_atstringNo
    sign_off_statementstringNo
    signed_off_atstringNo
    tenant_idstringNo
    updated_atstringNo
  • 401 — Authentication failed: the API key is missing, malformed, unknown, revoked or expired.
  • 403 — Forbidden. The code field says why: insufficient_permissions (the key lacks the permission named in x-api-key-permission), api_key_not_allowed (API keys cannot call this endpoint), plan_limit (the tenant's plan does not include API keys, and the body has no limit_type; or the request hit a feature or usage limit of the plan, which limit_type names), tenant_suspended (the tenant is suspended), ip_not_allowed (the key is restricted to certain IP addresses and this request came from another one). An endpoint may name other codes in its description.
  • 404 — Not Found
  • 429 — Too many requests for this API key. Wait the number of seconds in the Retry-After header, then retry.

GET /access-reviews/{id}/items

List access-review items

Requires permission: access_reviews:read

Parameters

NameInTypeRequiredDescription
idpathstringYesCampaign ID
decisionquerystringNoFilter by decision
connector_idquerystringNoFilter by connector ID
grant_idquerystringNoFilter by reviewer grant ID
verification_statusquerystringNoFilter by verification status
limitqueryintegerNoItems per page (default 100, max 1000)
offsetqueryintegerNoNumber of items to skip

Responses

  • 200 — OK
    NameTypeRequiredDescription
    dataentity.ReviewItem[]No
    paginationentity.PaginationMetaNo
  • 401 — Authentication failed: the API key is missing, malformed, unknown, revoked or expired.
  • 403 — Forbidden. The code field says why: insufficient_permissions (the key lacks the permission named in x-api-key-permission), api_key_not_allowed (API keys cannot call this endpoint), plan_limit (the tenant's plan does not include API keys, and the body has no limit_type; or the request hit a feature or usage limit of the plan, which limit_type names), tenant_suspended (the tenant is suspended), ip_not_allowed (the key is restricted to certain IP addresses and this request came from another one). An endpoint may name other codes in its description.
  • 429 — Too many requests for this API key. Wait the number of seconds in the Retry-After header, then retry.
  • 500 — Internal Server Error

GET /access-reviews/{id}/progress

Get access-review campaign progress

Requires permission: access_reviews:read

Parameters

NameInTypeRequiredDescription
idpathstringYesCampaign ID

Responses

  • 200 — OK
    NameTypeRequiredDescription
    decided_itemsintegerNo
    flagged_itemsintegerNo
    grantsentity.ReviewGrantProgress[]No
    revoke_itemsintegerNo
    total_itemsintegerNo
  • 401 — Authentication failed: the API key is missing, malformed, unknown, revoked or expired.
  • 403 — Forbidden. The code field says why: insufficient_permissions (the key lacks the permission named in x-api-key-permission), api_key_not_allowed (API keys cannot call this endpoint), plan_limit (the tenant's plan does not include API keys, and the body has no limit_type; or the request hit a feature or usage limit of the plan, which limit_type names), tenant_suspended (the tenant is suspended), ip_not_allowed (the key is restricted to certain IP addresses and this request came from another one). An endpoint may name other codes in its description.
  • 404 — Not Found
  • 429 — Too many requests for this API key. Wait the number of seconds in the Retry-After header, then retry.

Agent Governance Rules

GET /agent-governance-rules

List agent governance rules

Requires permission: ai_governance:read

Parameters

NameInTypeRequiredDescription
limitqueryintegerNoItems per page
offsetqueryintegerNoNumber of items to skip

Responses

  • 200 — OK
    NameTypeRequiredDescription
    dataentity.AgentGovernanceRule[]No
    totalintegerNo
  • 401 — Authentication failed: the API key is missing, malformed, unknown, revoked or expired.
  • 403 — Forbidden. The code field says why: insufficient_permissions (the key lacks the permission named in x-api-key-permission), api_key_not_allowed (API keys cannot call this endpoint), plan_limit (the tenant's plan does not include API keys, and the body has no limit_type; or the request hit a feature or usage limit of the plan, which limit_type names), tenant_suspended (the tenant is suspended), ip_not_allowed (the key is restricted to certain IP addresses and this request came from another one). An endpoint may name other codes in its description.
  • 429 — Too many requests for this API key. Wait the number of seconds in the Retry-After header, then retry.
  • 500 — Internal Server Error

POST /agent-governance-rules

Create an agent governance rule

Requires permission: ai_governance:write

Request body (request.CreateAgentGovernanceRuleRequest)

NameTypeRequiredDescription
cooldown_hoursintegerNo
descriptionstringNo
enabledbooleanNo
expressionstringYes
namestringYes
playbook_idstringYes

Responses

  • 201 — Created
    NameTypeRequiredDescription
    cooldown_hoursintegerNo
    created_atstringNo
    descriptionstringNo
    enabledbooleanNo
    expressionstringNo
    idstringNo
    last_error_atstringNo
    last_error_msgstringNo
    namestringNo
    playbook_idstringNo
    tenant_idstringNo
    updated_atstringNo
  • 400 — Bad Request
  • 401 — Authentication failed: the API key is missing, malformed, unknown, revoked or expired.
  • 403 — Forbidden. The code field says why: insufficient_permissions (the key lacks the permission named in x-api-key-permission), api_key_not_allowed (API keys cannot call this endpoint), plan_limit (the tenant's plan does not include API keys, and the body has no limit_type; or the request hit a feature or usage limit of the plan, which limit_type names), tenant_suspended (the tenant is suspended), ip_not_allowed (the key is restricted to certain IP addresses and this request came from another one). An endpoint may name other codes in its description.
  • 429 — Too many requests for this API key. Wait the number of seconds in the Retry-After header, then retry.
  • 500 — Internal Server Error

GET /agent-governance-rules/{id}

Get an agent governance rule

Requires permission: ai_governance:read

Parameters

NameInTypeRequiredDescription
idpathstringYesResource ID (UUID)

Responses

  • 200 — OK
    NameTypeRequiredDescription
    cooldown_hoursintegerNo
    created_atstringNo
    descriptionstringNo
    enabledbooleanNo
    expressionstringNo
    idstringNo
    last_error_atstringNo
    last_error_msgstringNo
    namestringNo
    playbook_idstringNo
    tenant_idstringNo
    updated_atstringNo
  • 400 — Bad Request
  • 401 — Authentication failed: the API key is missing, malformed, unknown, revoked or expired.
  • 403 — Forbidden. The code field says why: insufficient_permissions (the key lacks the permission named in x-api-key-permission), api_key_not_allowed (API keys cannot call this endpoint), plan_limit (the tenant's plan does not include API keys, and the body has no limit_type; or the request hit a feature or usage limit of the plan, which limit_type names), tenant_suspended (the tenant is suspended), ip_not_allowed (the key is restricted to certain IP addresses and this request came from another one). An endpoint may name other codes in its description.
  • 404 — Not Found
  • 429 — Too many requests for this API key. Wait the number of seconds in the Retry-After header, then retry.
  • 500 — Internal Server Error

PUT /agent-governance-rules/{id}

Update an agent governance rule

Requires permission: ai_governance:write

Parameters

NameInTypeRequiredDescription
idpathstringYesResource ID (UUID)

Request body (request.UpdateAgentGovernanceRuleRequest)

NameTypeRequiredDescription
cooldown_hoursintegerNo
descriptionstringNo
enabledbooleanNo
expressionstringNo
namestringNo
playbook_idstringNo

Responses

  • 204 — No Content
  • 400 — Bad Request
  • 401 — Authentication failed: the API key is missing, malformed, unknown, revoked or expired.
  • 403 — Forbidden. The code field says why: insufficient_permissions (the key lacks the permission named in x-api-key-permission), api_key_not_allowed (API keys cannot call this endpoint), plan_limit (the tenant's plan does not include API keys, and the body has no limit_type; or the request hit a feature or usage limit of the plan, which limit_type names), tenant_suspended (the tenant is suspended), ip_not_allowed (the key is restricted to certain IP addresses and this request came from another one). An endpoint may name other codes in its description.
  • 404 — Not Found
  • 429 — Too many requests for this API key. Wait the number of seconds in the Retry-After header, then retry.
  • 500 — Internal Server Error

DELETE /agent-governance-rules/{id}

Delete an agent governance rule

Requires permission: ai_governance:write

Parameters

NameInTypeRequiredDescription
idpathstringYesResource ID (UUID)

Responses

  • 204 — No Content
  • 400 — Bad Request
  • 401 — Authentication failed: the API key is missing, malformed, unknown, revoked or expired.
  • 403 — Forbidden. The code field says why: insufficient_permissions (the key lacks the permission named in x-api-key-permission), api_key_not_allowed (API keys cannot call this endpoint), plan_limit (the tenant's plan does not include API keys, and the body has no limit_type; or the request hit a feature or usage limit of the plan, which limit_type names), tenant_suspended (the tenant is suspended), ip_not_allowed (the key is restricted to certain IP addresses and this request came from another one). An endpoint may name other codes in its description.
  • 404 — Not Found
  • 429 — Too many requests for this API key. Wait the number of seconds in the Retry-After header, then retry.
  • 500 — Internal Server Error

POST /agent-governance-rules/{id}/test

Test an agent governance rule

Requires permission: ai_governance:read

Parameters

NameInTypeRequiredDescription
idpathstringYesResource ID (UUID)

Responses

  • 200 — OK
    NameTypeRequiredDescription
    matched_agentsentity.AgentGovernanceRuleTestMatch[]No
    total_matchedintegerNo
    would_fireintegerNo
    would_skipintegerNo
  • 400 — Bad Request
  • 401 — Authentication failed: the API key is missing, malformed, unknown, revoked or expired.
  • 403 — Forbidden. The code field says why: insufficient_permissions (the key lacks the permission named in x-api-key-permission), api_key_not_allowed (API keys cannot call this endpoint), plan_limit (the tenant's plan does not include API keys, and the body has no limit_type; or the request hit a feature or usage limit of the plan, which limit_type names), tenant_suspended (the tenant is suspended), ip_not_allowed (the key is restricted to certain IP addresses and this request came from another one). An endpoint may name other codes in its description.
  • 404 — Not Found
  • 429 — Too many requests for this API key. Wait the number of seconds in the Retry-After header, then retry.
  • 500 — Internal Server Error

AI Agents

GET /agents

List AI agents

Requires permission: ai_governance:read

Parameters

NameInTypeRequiredDescription
platformquerystringNoFilter by agent platform
statusquerystringNoFilter by review status
autonomy_levelquerystringNoFilter by autonomy level
owner_idquerystringNoFilter by owner ID (UUID)
connector_idquerystringNoFilter by connector ID (UUID)
qquerystringNoFull-text search
includequerystringNoComma-separated extras; supports last_remediated
limitqueryintegerNoItems per page
offsetqueryintegerNoNumber of items to skip
sort_byquerystringNoSort column
sort_orderquerystringNoSort direction

Responses

  • 200 — OK
    NameTypeRequiredDescription
    dataentity.AIAgent[]No
    paginationentity.PaginationMetaNo
  • 401 — Authentication failed: the API key is missing, malformed, unknown, revoked or expired.
  • 403 — Forbidden. The code field says why: insufficient_permissions (the key lacks the permission named in x-api-key-permission), api_key_not_allowed (API keys cannot call this endpoint), plan_limit (the tenant's plan does not include API keys, and the body has no limit_type; or the request hit a feature or usage limit of the plan, which limit_type names), tenant_suspended (the tenant is suspended), ip_not_allowed (the key is restricted to certain IP addresses and this request came from another one). An endpoint may name other codes in its description.
  • 429 — Too many requests for this API key. Wait the number of seconds in the Retry-After header, then retry.
  • 500 — Internal Server Error

POST /agents/batch-owner

Assign an owner to several AI agents

Requires permission: ai_governance:write

Request body (request.BatchUpdateAgentOwnerRequest)

NameTypeRequiredDescription
agent_idsstring[]Yes
owner_emailstringNo
owner_idstringNo

Responses

  • 200 — OK
    NameTypeRequiredDescription
    updatedintegerNo
  • 400 — Bad Request
  • 401 — Authentication failed: the API key is missing, malformed, unknown, revoked or expired.
  • 403 — Forbidden. The code field says why: insufficient_permissions (the key lacks the permission named in x-api-key-permission), api_key_not_allowed (API keys cannot call this endpoint), plan_limit (the tenant's plan does not include API keys, and the body has no limit_type; or the request hit a feature or usage limit of the plan, which limit_type names), tenant_suspended (the tenant is suspended), ip_not_allowed (the key is restricted to certain IP addresses and this request came from another one). An endpoint may name other codes in its description.
  • 429 — Too many requests for this API key. Wait the number of seconds in the Retry-After header, then retry.
  • 500 — Internal Server Error

POST /agents/batch-status

Update the status of several AI agents

Requires permission: ai_governance:write

Request body (request.BatchUpdateAgentStatusRequest)

NameTypeRequiredDescription
agent_idsstring[]Yes
statusstringYes

Responses

  • 200 — OK
    NameTypeRequiredDescription
    updatedintegerNo
  • 400 — Bad Request
  • 401 — Authentication failed: the API key is missing, malformed, unknown, revoked or expired.
  • 403 — Forbidden. The code field says why: insufficient_permissions (the key lacks the permission named in x-api-key-permission), api_key_not_allowed (API keys cannot call this endpoint), plan_limit (the tenant's plan does not include API keys, and the body has no limit_type; or the request hit a feature or usage limit of the plan, which limit_type names), tenant_suspended (the tenant is suspended), ip_not_allowed (the key is restricted to certain IP addresses and this request came from another one). An endpoint may name other codes in its description.
  • 429 — Too many requests for this API key. Wait the number of seconds in the Retry-After header, then retry.
  • 500 — Internal Server Error

GET /agents/summary

Get AI agent summary

Requires permission: ai_governance:read

Responses

  • 200 — OK
    NameTypeRequiredDescription
    approvedintegerNo
    blockedintegerNo
    criticalintegerNo
    needs_reviewintegerNo
    orphanedintegerNo
    totalintegerNo
  • 401 — Authentication failed: the API key is missing, malformed, unknown, revoked or expired.
  • 403 — Forbidden. The code field says why: insufficient_permissions (the key lacks the permission named in x-api-key-permission), api_key_not_allowed (API keys cannot call this endpoint), plan_limit (the tenant's plan does not include API keys, and the body has no limit_type; or the request hit a feature or usage limit of the plan, which limit_type names), tenant_suspended (the tenant is suspended), ip_not_allowed (the key is restricted to certain IP addresses and this request came from another one). An endpoint may name other codes in its description.
  • 429 — Too many requests for this API key. Wait the number of seconds in the Retry-After header, then retry.
  • 500 — Internal Server Error

GET /agents/{id}

Get an AI agent

Requires permission: ai_governance:read

Parameters

NameInTypeRequiredDescription
idpathstringYesResource ID (UUID)

Responses

  • 200 — OK
    NameTypeRequiredDescription
    agent_created_atstringNo
    agent_typeentity.AIAgentTypeNo
    ai_review_item_idstringNo
    approval_statusentity.AIReviewStatusNo
    autonomy_levelentity.AutonomyLevelNo
    blast_radiusentity.BlastRadiusNo
    capabilitiesentity.AgentCapability[]No
    connector_idstringNo
    created_atstringNo
    created_bystringNo
    data_scopesentity.AgentDataScope[]No
    descriptionstringNo
    finding_idsstring[]No
    first_seen_atstringNo
    idstringNo
    last_active_atstringNo
    last_remediated_atstringNoLastRemediatedAt is a computed field populated when include=last_remediated is requested.
    last_seen_atstringNo
    namestringNo
    owner_activebooleanNo
    owner_emailstringNo
    owner_idstringNo
    permissionsentity.AgentPermission[]No
    platformentity.AIAgentPlatformNo
    platform_idstringNo
    publisherstringNo
    resource_idsstring[]No
    risk_confidenceentity.RiskConfidenceNo
    risk_factorsentity.AgentRiskFactor[]No
    risk_scoreintegerNo
    stale_atstringNo
    tenant_idstringNo
    third_party_app_idstringNo
    tool_bindingsentity.AgentToolBinding[]No
    updated_atstringNo
    versionstringNo
  • 400 — Bad Request
  • 401 — Authentication failed: the API key is missing, malformed, unknown, revoked or expired.
  • 403 — Forbidden. The code field says why: insufficient_permissions (the key lacks the permission named in x-api-key-permission), api_key_not_allowed (API keys cannot call this endpoint), plan_limit (the tenant's plan does not include API keys, and the body has no limit_type; or the request hit a feature or usage limit of the plan, which limit_type names), tenant_suspended (the tenant is suspended), ip_not_allowed (the key is restricted to certain IP addresses and this request came from another one). An endpoint may name other codes in its description.
  • 404 — Not Found
  • 429 — Too many requests for this API key. Wait the number of seconds in the Retry-After header, then retry.
  • 500 — Internal Server Error

PUT /agents/{id}/owner

Assign an AI agent owner

Requires permission: ai_governance:write

Parameters

NameInTypeRequiredDescription
idpathstringYesResource ID (UUID)

Request body (request.UpdateAgentOwnerRequest)

NameTypeRequiredDescription
owner_emailstringNo
owner_idstringNo

Responses

  • 204 — No Content
  • 400 — Bad Request
  • 401 — Authentication failed: the API key is missing, malformed, unknown, revoked or expired.
  • 403 — Forbidden. The code field says why: insufficient_permissions (the key lacks the permission named in x-api-key-permission), api_key_not_allowed (API keys cannot call this endpoint), plan_limit (the tenant's plan does not include API keys, and the body has no limit_type; or the request hit a feature or usage limit of the plan, which limit_type names), tenant_suspended (the tenant is suspended), ip_not_allowed (the key is restricted to certain IP addresses and this request came from another one). An endpoint may name other codes in its description.
  • 404 — Not Found
  • 429 — Too many requests for this API key. Wait the number of seconds in the Retry-After header, then retry.
  • 500 — Internal Server Error

GET /agents/{id}/permissions

Get AI agent permissions

Requires permission: ai_governance:read

Parameters

NameInTypeRequiredDescription
idpathstringYesResource ID (UUID)

Responses

  • 200 — OK
    NameTypeRequiredDescription
    capabilitiesentity.AgentCapability[]No
    data_scopesentity.AgentDataScope[]No
    permissionsentity.AgentPermission[]No
    tool_bindingsentity.AgentToolBinding[]No
  • 400 — Bad Request
  • 401 — Authentication failed: the API key is missing, malformed, unknown, revoked or expired.
  • 403 — Forbidden. The code field says why: insufficient_permissions (the key lacks the permission named in x-api-key-permission), api_key_not_allowed (API keys cannot call this endpoint), plan_limit (the tenant's plan does not include API keys, and the body has no limit_type; or the request hit a feature or usage limit of the plan, which limit_type names), tenant_suspended (the tenant is suspended), ip_not_allowed (the key is restricted to certain IP addresses and this request came from another one). An endpoint may name other codes in its description.
  • 404 — Not Found
  • 429 — Too many requests for this API key. Wait the number of seconds in the Retry-After header, then retry.
  • 500 — Internal Server Error

GET /agents/{id}/revocation-guide

Get an AI agent revocation guide

Requires permission: ai_governance:read

Parameters

NameInTypeRequiredDescription
idpathstringYesResource ID (UUID)

Responses

  • 200 — OK
    NameTypeRequiredDescription
    actionsentity.RevocationAction[]No
    admin_portalstringNo
    docs_urlstringNo
    platformentity.AIAgentPlatformNo
  • 400 — Bad Request
  • 401 — Authentication failed: the API key is missing, malformed, unknown, revoked or expired.
  • 403 — Forbidden. The code field says why: insufficient_permissions (the key lacks the permission named in x-api-key-permission), api_key_not_allowed (API keys cannot call this endpoint), plan_limit (the tenant's plan does not include API keys, and the body has no limit_type; or the request hit a feature or usage limit of the plan, which limit_type names), tenant_suspended (the tenant is suspended), ip_not_allowed (the key is restricted to certain IP addresses and this request came from another one). An endpoint may name other codes in its description.
  • 404 — Not Found
  • 429 — Too many requests for this API key. Wait the number of seconds in the Retry-After header, then retry.
  • 500 — Internal Server Error

PUT /agents/{id}/status

Update an AI agent status

Requires permission: ai_governance:write

Parameters

NameInTypeRequiredDescription
idpathstringYesResource ID (UUID)

Request body (request.UpdateAgentStatusRequest)

NameTypeRequiredDescription
statusstringYes

Responses

  • 204 — No Content
  • 400 — Bad Request
  • 401 — Authentication failed: the API key is missing, malformed, unknown, revoked or expired.
  • 403 — Forbidden. The code field says why: insufficient_permissions (the key lacks the permission named in x-api-key-permission), api_key_not_allowed (API keys cannot call this endpoint), plan_limit (the tenant's plan does not include API keys, and the body has no limit_type; or the request hit a feature or usage limit of the plan, which limit_type names), tenant_suspended (the tenant is suspended), ip_not_allowed (the key is restricted to certain IP addresses and this request came from another one). An endpoint may name other codes in its description.
  • 404 — Not Found
  • 429 — Too many requests for this API key. Wait the number of seconds in the Retry-After header, then retry.
  • 500 — Internal Server Error

AI Governance

GET /ai-governance/items

List AI review items

Requires permission: ai_governance:read

Parameters

NameInTypeRequiredDescription
statusquerystringNoFilter by status
object_typequerystringNoFilter by object type
providerquerystringNoFilter by provider
owner_idquerystringNoFilter by owner ID (UUID)
reasonquerystringNoFilter by priority reason
ai_sourcequerystringNoFilter shadow-AI items by tier
qquerystringNoFull-text search (title, subtitle)
changed_onlyquerybooleanNoShow only items changed since last review
show_archivedquerybooleanNoInclude archived items
stale_onlyquerybooleanNoShow only stale items
overdue_onlyquerybooleanNoShow only overdue items
min_priorityqueryintegerNoMinimum priority score
limitqueryintegerNoItems per page (default 100)
offsetqueryintegerNoNumber of items to skip
sort_byquerystringNoSort column
sort_orderquerystringNoSort direction

Responses

  • 200 — paged list of AI review items
  • 400 — Bad Request
  • 401 — Authentication failed: the API key is missing, malformed, unknown, revoked or expired.
  • 403 — Forbidden. The code field says why: insufficient_permissions (the key lacks the permission named in x-api-key-permission), api_key_not_allowed (API keys cannot call this endpoint), plan_limit (the tenant's plan does not include API keys, and the body has no limit_type; or the request hit a feature or usage limit of the plan, which limit_type names), tenant_suspended (the tenant is suspended), ip_not_allowed (the key is restricted to certain IP addresses and this request came from another one). An endpoint may name other codes in its description.
  • 429 — Too many requests for this API key. Wait the number of seconds in the Retry-After header, then retry.
  • 500 — Internal Server Error

POST /ai-governance/items

Create an AI review item

Requires permission: ai_governance:write

Request body (request.CreateAIReviewItemRequest)

NameTypeRequiredDescription
evidenceobjectNo
object_typestringYes
priority_reasonsstring[]No
providerstringNo
subtitlestringNo
titlestringYes

Responses

  • 201 — Created
    NameTypeRequiredDescription
    aging_daysintegerNo
    archived_atstringNo
    changed_since_reviewbooleanNo
    created_atstringNo
    decision_reasonstringNo
    evidenceobjectNo
    evidence_hashstringNo
    first_seen_atstringNo
    idstringNo
    last_seen_atstringNo
    object_typeentity.AIReviewObjectTypeNo
    owner_emailstringNo
    owner_idstringNo
    priority_reasonsstring[]No
    priority_scoreintegerNo
    providerstringNo
    reviewed_atstringNo
    reviewed_bystringNo
    source_connector_idstringNo
    source_finding_idstringNo
    source_idstringNo
    source_typeentity.AIReviewSourceTypeNo
    stale_atstringNo
    statusentity.AIReviewStatusNo
    subtitlestringNo
    tenant_idstringNo
    titlestringNo
    updated_atstringNo
  • 400 — Bad Request
  • 401 — Authentication failed: the API key is missing, malformed, unknown, revoked or expired.
  • 403 — Forbidden. The code field says why: insufficient_permissions (the key lacks the permission named in x-api-key-permission), api_key_not_allowed (API keys cannot call this endpoint), plan_limit (the tenant's plan does not include API keys, and the body has no limit_type; or the request hit a feature or usage limit of the plan, which limit_type names), tenant_suspended (the tenant is suspended), ip_not_allowed (the key is restricted to certain IP addresses and this request came from another one). An endpoint may name other codes in its description.
  • 429 — Too many requests for this API key. Wait the number of seconds in the Retry-After header, then retry.
  • 500 — Internal Server Error

POST /ai-governance/items/batch-owner

Assign an owner to several AI review items

Requires permission: ai_governance:write

Request body (request.BatchUpdateAIReviewOwnerRequest)

NameTypeRequiredDescription
item_idsstring[]Yes
owner_emailstringNo
owner_idstringNo

Responses

  • 200 — OK
    NameTypeRequiredDescription
    errorsentity.BatchError[]No
    skippedintegerNo
    updatedintegerNo
  • 400 — Bad Request
  • 401 — Authentication failed: the API key is missing, malformed, unknown, revoked or expired.
  • 403 — Forbidden. The code field says why: insufficient_permissions (the key lacks the permission named in x-api-key-permission), api_key_not_allowed (API keys cannot call this endpoint), plan_limit (the tenant's plan does not include API keys, and the body has no limit_type; or the request hit a feature or usage limit of the plan, which limit_type names), tenant_suspended (the tenant is suspended), ip_not_allowed (the key is restricted to certain IP addresses and this request came from another one). An endpoint may name other codes in its description.
  • 429 — Too many requests for this API key. Wait the number of seconds in the Retry-After header, then retry.
  • 500 — Internal Server Error

POST /ai-governance/items/batch-status

Update the status of several AI review items

Requires permission: ai_governance:write

Request body (request.BatchUpdateAIReviewStatusRequest)

NameTypeRequiredDescription
decision_reasonstringNo
item_idsstring[]Yes
statusstringYes

Responses

  • 200 — OK
    NameTypeRequiredDescription
    errorsentity.BatchError[]No
    skippedintegerNo
    updatedintegerNo
  • 400 — Bad Request
  • 401 — Authentication failed: the API key is missing, malformed, unknown, revoked or expired.
  • 403 — Forbidden. The code field says why: insufficient_permissions (the key lacks the permission named in x-api-key-permission), api_key_not_allowed (API keys cannot call this endpoint), plan_limit (the tenant's plan does not include API keys, and the body has no limit_type; or the request hit a feature or usage limit of the plan, which limit_type names), tenant_suspended (the tenant is suspended), ip_not_allowed (the key is restricted to certain IP addresses and this request came from another one). An endpoint may name other codes in its description.
  • 429 — Too many requests for this API key. Wait the number of seconds in the Retry-After header, then retry.
  • 500 — Internal Server Error

GET /ai-governance/items/{id}

Get an AI review item

Requires permission: ai_governance:read

Parameters

NameInTypeRequiredDescription
idpathstringYesResource ID (UUID)

Responses

  • 200 — OK
    NameTypeRequiredDescription
    aging_daysintegerNo
    archived_atstringNo
    changed_since_reviewbooleanNo
    created_atstringNo
    decision_reasonstringNo
    evidenceobjectNo
    evidence_hashstringNo
    first_seen_atstringNo
    idstringNo
    last_seen_atstringNo
    object_typeentity.AIReviewObjectTypeNo
    owner_emailstringNo
    owner_idstringNo
    priority_reasonsstring[]No
    priority_scoreintegerNo
    providerstringNo
    reviewed_atstringNo
    reviewed_bystringNo
    source_connector_idstringNo
    source_finding_idstringNo
    source_idstringNo
    source_typeentity.AIReviewSourceTypeNo
    stale_atstringNo
    statusentity.AIReviewStatusNo
    subtitlestringNo
    tenant_idstringNo
    titlestringNo
    updated_atstringNo
  • 400 — Bad Request
  • 401 — Authentication failed: the API key is missing, malformed, unknown, revoked or expired.
  • 403 — Forbidden. The code field says why: insufficient_permissions (the key lacks the permission named in x-api-key-permission), api_key_not_allowed (API keys cannot call this endpoint), plan_limit (the tenant's plan does not include API keys, and the body has no limit_type; or the request hit a feature or usage limit of the plan, which limit_type names), tenant_suspended (the tenant is suspended), ip_not_allowed (the key is restricted to certain IP addresses and this request came from another one). An endpoint may name other codes in its description.
  • 404 — Not Found
  • 429 — Too many requests for this API key. Wait the number of seconds in the Retry-After header, then retry.
  • 500 — Internal Server Error

GET /ai-governance/items/{id}/evidence

Get AI review evidence

Requires permission: ai_governance:read

Parameters

NameInTypeRequiredDescription
idpathstringYesResource ID (UUID)

Responses

  • 200 — OK
    NameTypeRequiredDescription
    decisionsentity.AIReviewDecision[]No
    itementity.AIReviewItemNo
  • 400 — Bad Request
  • 401 — Authentication failed: the API key is missing, malformed, unknown, revoked or expired.
  • 403 — Forbidden. The code field says why: insufficient_permissions (the key lacks the permission named in x-api-key-permission), api_key_not_allowed (API keys cannot call this endpoint), plan_limit (the tenant's plan does not include API keys, and the body has no limit_type; or the request hit a feature or usage limit of the plan, which limit_type names), tenant_suspended (the tenant is suspended), ip_not_allowed (the key is restricted to certain IP addresses and this request came from another one). An endpoint may name other codes in its description.
  • 404 — Not Found
  • 429 — Too many requests for this API key. Wait the number of seconds in the Retry-After header, then retry.
  • 500 — Internal Server Error

PUT /ai-governance/items/{id}/owner

Assign an AI review item owner

Requires permission: ai_governance:write

Parameters

NameInTypeRequiredDescription
idpathstringYesResource ID (UUID)

Request body (request.UpdateAIReviewOwnerRequest)

NameTypeRequiredDescription
owner_emailstringNo
owner_idstringNo

Responses

  • 204 — No Content
  • 400 — Bad Request
  • 401 — Authentication failed: the API key is missing, malformed, unknown, revoked or expired.
  • 403 — Forbidden. The code field says why: insufficient_permissions (the key lacks the permission named in x-api-key-permission), api_key_not_allowed (API keys cannot call this endpoint), plan_limit (the tenant's plan does not include API keys, and the body has no limit_type; or the request hit a feature or usage limit of the plan, which limit_type names), tenant_suspended (the tenant is suspended), ip_not_allowed (the key is restricted to certain IP addresses and this request came from another one). An endpoint may name other codes in its description.
  • 404 — Not Found
  • 429 — Too many requests for this API key. Wait the number of seconds in the Retry-After header, then retry.
  • 500 — Internal Server Error

POST /ai-governance/items/{id}/restore

Restore an archived AI review item

Requires permission: ai_governance:write

Parameters

NameInTypeRequiredDescription
idpathstringYesResource ID (UUID)

Responses

  • 204 — No Content
  • 400 — Bad Request
  • 401 — Authentication failed: the API key is missing, malformed, unknown, revoked or expired.
  • 403 — Forbidden. The code field says why: insufficient_permissions (the key lacks the permission named in x-api-key-permission), api_key_not_allowed (API keys cannot call this endpoint), plan_limit (the tenant's plan does not include API keys, and the body has no limit_type; or the request hit a feature or usage limit of the plan, which limit_type names), tenant_suspended (the tenant is suspended), ip_not_allowed (the key is restricted to certain IP addresses and this request came from another one). An endpoint may name other codes in its description.
  • 404 — Not Found
  • 429 — Too many requests for this API key. Wait the number of seconds in the Retry-After header, then retry.
  • 500 — Internal Server Error

PUT /ai-governance/items/{id}/status

Update an AI review item status

Requires permission: ai_governance:write

Parameters

NameInTypeRequiredDescription
idpathstringYesResource ID (UUID)

Request body (request.UpdateAIReviewStatusRequest)

NameTypeRequiredDescription
decision_reasonstringNo
statusstringYes

Responses

  • 204 — No Content
  • 400 — Bad Request
  • 401 — Authentication failed: the API key is missing, malformed, unknown, revoked or expired.
  • 403 — Forbidden. The code field says why: insufficient_permissions (the key lacks the permission named in x-api-key-permission), api_key_not_allowed (API keys cannot call this endpoint), plan_limit (the tenant's plan does not include API keys, and the body has no limit_type; or the request hit a feature or usage limit of the plan, which limit_type names), tenant_suspended (the tenant is suspended), ip_not_allowed (the key is restricted to certain IP addresses and this request came from another one). An endpoint may name other codes in its description.
  • 404 — Not Found
  • 429 — Too many requests for this API key. Wait the number of seconds in the Retry-After header, then retry.
  • 500 — Internal Server Error

GET /ai-governance/summary

Get AI governance summary

Requires permission: ai_governance:read

Responses

  • 200 — OK
    NameTypeRequiredDescription
    approvedintegerNo
    blockedintegerNo
    critical_highintegerNo
    needs_reviewintegerNo
    new_this_weekintegerNo
    overdueintegerNo
    staleintegerNo
    unknown_ownerintegerNo
  • 401 — Authentication failed: the API key is missing, malformed, unknown, revoked or expired.
  • 403 — Forbidden. The code field says why: insufficient_permissions (the key lacks the permission named in x-api-key-permission), api_key_not_allowed (API keys cannot call this endpoint), plan_limit (the tenant's plan does not include API keys, and the body has no limit_type; or the request hit a feature or usage limit of the plan, which limit_type names), tenant_suspended (the tenant is suspended), ip_not_allowed (the key is restricted to certain IP addresses and this request came from another one). An endpoint may name other codes in its description.
  • 429 — Too many requests for this API key. Wait the number of seconds in the Retry-After header, then retry.
  • 500 — Internal Server Error

AlertRules

GET /alert-rules

List alert rules

Requires permission: alert_rules:read

Parameters

NameInTypeRequiredDescription
typequerystringNoFilter by alert type

Responses

  • 200 — OK
    NameTypeRequiredDescription
    connector_idsstring[]No
    created_atstringNo
    deliver_emailbooleanNo
    deliver_slackbooleanNo
    enabledbooleanNo
    expressionstringNo
    idstringNo
    last_error_atstringNo
    last_error_messagestringNo
    modeentity.AlertRuleModeNo
    namestringNo
    policy_categoriesstring[]No
    severity_thresholdentity.SeverityNo
    tenant_idstringNo
    threshold_daysintegerNo
    trigger_eventsentity.ScanAlertEvent[]NoTriggerEvents constrains which scan lifecycle events activate this rule. An empty slice fires on completion events only (scan_completed and scan_completed_with_warnings); non-completion events such as drift_detected require explicit opt-in by listing them here. Stored in alert_rules.trigger_events.
    updated_atstringNo
    versionintegerNo
  • 401 — Authentication failed: the API key is missing, malformed, unknown, revoked or expired.
  • 403 — Forbidden. The code field says why: insufficient_permissions (the key lacks the permission named in x-api-key-permission), api_key_not_allowed (API keys cannot call this endpoint), plan_limit (the tenant's plan does not include API keys, and the body has no limit_type; or the request hit a feature or usage limit of the plan, which limit_type names), tenant_suspended (the tenant is suspended), ip_not_allowed (the key is restricted to certain IP addresses and this request came from another one). An endpoint may name other codes in its description.
  • 429 — Too many requests for this API key. Wait the number of seconds in the Retry-After header, then retry.
  • 500 — Internal Server Error

POST /alert-rules

Create an alert rule

Requires permission: alert_rules:write

Request body (request.CreateAlertRuleRequest)

NameTypeRequiredDescription
connector_idsstring[]No
deliver_emailbooleanNo
deliver_slackbooleanNo
expressionstringNo
namestringYes
policy_categoriesstring[]No
severity_thresholdstringYes
trigger_eventsstring[]No

Responses

  • 201 — Created
    NameTypeRequiredDescription
    connector_idsstring[]No
    created_atstringNo
    deliver_emailbooleanNo
    deliver_slackbooleanNo
    enabledbooleanNo
    expressionstringNo
    idstringNo
    last_error_atstringNo
    last_error_messagestringNo
    modeentity.AlertRuleModeNo
    namestringNo
    policy_categoriesstring[]No
    severity_thresholdentity.SeverityNo
    tenant_idstringNo
    threshold_daysintegerNo
    trigger_eventsentity.ScanAlertEvent[]NoTriggerEvents constrains which scan lifecycle events activate this rule. An empty slice fires on completion events only (scan_completed and scan_completed_with_warnings); non-completion events such as drift_detected require explicit opt-in by listing them here. Stored in alert_rules.trigger_events.
    updated_atstringNo
    versionintegerNo
  • 400 — Bad Request
  • 401 — Authentication failed: the API key is missing, malformed, unknown, revoked or expired.
  • 403 — Forbidden. The code field says why: insufficient_permissions (the key lacks the permission named in x-api-key-permission), api_key_not_allowed (API keys cannot call this endpoint), plan_limit (the tenant's plan does not include API keys, and the body has no limit_type; or the request hit a feature or usage limit of the plan, which limit_type names), tenant_suspended (the tenant is suspended), ip_not_allowed (the key is restricted to certain IP addresses and this request came from another one). An endpoint may name other codes in its description.
  • 429 — Too many requests for this API key. Wait the number of seconds in the Retry-After header, then retry.
  • 500 — Internal Server Error

GET /alert-rules/{id}

Get an alert rule

Requires permission: alert_rules:read

Parameters

NameInTypeRequiredDescription
idpathstringYesAlert Rule ID

Responses

  • 200 — OK
    NameTypeRequiredDescription
    connector_idsstring[]No
    created_atstringNo
    deliver_emailbooleanNo
    deliver_slackbooleanNo
    enabledbooleanNo
    expressionstringNo
    idstringNo
    last_error_atstringNo
    last_error_messagestringNo
    modeentity.AlertRuleModeNo
    namestringNo
    policy_categoriesstring[]No
    severity_thresholdentity.SeverityNo
    tenant_idstringNo
    threshold_daysintegerNo
    trigger_eventsentity.ScanAlertEvent[]NoTriggerEvents constrains which scan lifecycle events activate this rule. An empty slice fires on completion events only (scan_completed and scan_completed_with_warnings); non-completion events such as drift_detected require explicit opt-in by listing them here. Stored in alert_rules.trigger_events.
    updated_atstringNo
    versionintegerNo
  • 401 — Authentication failed: the API key is missing, malformed, unknown, revoked or expired.
  • 403 — Forbidden. The code field says why: insufficient_permissions (the key lacks the permission named in x-api-key-permission), api_key_not_allowed (API keys cannot call this endpoint), plan_limit (the tenant's plan does not include API keys, and the body has no limit_type; or the request hit a feature or usage limit of the plan, which limit_type names), tenant_suspended (the tenant is suspended), ip_not_allowed (the key is restricted to certain IP addresses and this request came from another one). An endpoint may name other codes in its description.
  • 404 — Not Found
  • 429 — Too many requests for this API key. Wait the number of seconds in the Retry-After header, then retry.
  • 500 — Internal Server Error

PUT /alert-rules/{id}

Update an alert rule

Requires permission: alert_rules:write

Parameters

NameInTypeRequiredDescription
idpathstringYesAlert Rule ID

Request body (request.UpdateAlertRuleRequest)

NameTypeRequiredDescription
connector_idsstring[]No
deliver_emailbooleanNo
deliver_slackbooleanNo
enabledbooleanNo
expressionstringNo
namestringNo
policy_categoriesstring[]No
severity_thresholdstringNo
trigger_eventsstring[]No
versionintegerNo

Responses

  • 204 — No Content
  • 400 — Bad Request
  • 401 — Authentication failed: the API key is missing, malformed, unknown, revoked or expired.
  • 403 — Forbidden. The code field says why: insufficient_permissions (the key lacks the permission named in x-api-key-permission), api_key_not_allowed (API keys cannot call this endpoint), plan_limit (the tenant's plan does not include API keys, and the body has no limit_type; or the request hit a feature or usage limit of the plan, which limit_type names), tenant_suspended (the tenant is suspended), ip_not_allowed (the key is restricted to certain IP addresses and this request came from another one). An endpoint may name other codes in its description.
  • 429 — Too many requests for this API key. Wait the number of seconds in the Retry-After header, then retry.
  • 500 — Internal Server Error

DELETE /alert-rules/{id}

Delete an alert rule

Requires permission: alert_rules:write

Parameters

NameInTypeRequiredDescription
idpathstringYesAlert Rule ID

Responses

  • 204 — No Content
  • 401 — Authentication failed: the API key is missing, malformed, unknown, revoked or expired.
  • 403 — Forbidden. The code field says why: insufficient_permissions (the key lacks the permission named in x-api-key-permission), api_key_not_allowed (API keys cannot call this endpoint), plan_limit (the tenant's plan does not include API keys, and the body has no limit_type; or the request hit a feature or usage limit of the plan, which limit_type names), tenant_suspended (the tenant is suspended), ip_not_allowed (the key is restricted to certain IP addresses and this request came from another one). An endpoint may name other codes in its description.
  • 429 — Too many requests for this API key. Wait the number of seconds in the Retry-After header, then retry.
  • 500 — Internal Server Error

POST /alert-rules/{id}/test

Test an alert rule

Requires permission: alert_rules:write

Parameters

NameInTypeRequiredDescription
idpathstringYesAlert Rule ID

Responses

  • 204 — No Content
  • 401 — Authentication failed: the API key is missing, malformed, unknown, revoked or expired.
  • 403 — Forbidden. The code field says why: insufficient_permissions (the key lacks the permission named in x-api-key-permission), api_key_not_allowed (API keys cannot call this endpoint), plan_limit (the tenant's plan does not include API keys, and the body has no limit_type; or the request hit a feature or usage limit of the plan, which limit_type names), tenant_suspended (the tenant is suspended), ip_not_allowed (the key is restricted to certain IP addresses and this request came from another one). An endpoint may name other codes in its description.
  • 404 — Not Found
  • 429 — Too many requests for this API key. Wait the number of seconds in the Retry-After header, then retry.
  • 500 — Internal Server Error

Alerts

GET /alerts

List alerts

Requires permission: alert_rules:read

Parameters

NameInTypeRequiredDescription
statusquerystringNoComma-separated statuses
severityquerystringNoComma-separated severities
connector_idquerystringNoFilter by connector ID
alert_rule_idquerystringNoFilter by alert rule ID
group_byquerystringNoGroup by dimension
sortquerystringNoSort field
orderquerystringNoSort direction
limitqueryintegerNoItems per page (default 100, max 1000)
offsetqueryintegerNoNumber of items to skip

Responses

  • 200 — OK
    NameTypeRequiredDescription
    dataentity.Alert[]No
    paginationentity.PaginationMetaNo
  • 401 — Authentication failed: the API key is missing, malformed, unknown, revoked or expired.
  • 403 — Forbidden. The code field says why: insufficient_permissions (the key lacks the permission named in x-api-key-permission), api_key_not_allowed (API keys cannot call this endpoint), plan_limit (the tenant's plan does not include API keys, and the body has no limit_type; or the request hit a feature or usage limit of the plan, which limit_type names), tenant_suspended (the tenant is suspended), ip_not_allowed (the key is restricted to certain IP addresses and this request came from another one). An endpoint may name other codes in its description.
  • 429 — Too many requests for this API key. Wait the number of seconds in the Retry-After header, then retry.
  • 500 — Internal Server Error

POST /alerts/bulk-acknowledge

Bulk acknowledge alerts

Requires permission: alert_rules:write

Request body (request.BulkAlertRequest)

NameTypeRequiredDescription
idsstring[]Yes

Responses

  • 200 — OK
  • 400 — Bad Request
  • 401 — Authentication failed: the API key is missing, malformed, unknown, revoked or expired.
  • 403 — Forbidden. The code field says why: insufficient_permissions (the key lacks the permission named in x-api-key-permission), api_key_not_allowed (API keys cannot call this endpoint), plan_limit (the tenant's plan does not include API keys, and the body has no limit_type; or the request hit a feature or usage limit of the plan, which limit_type names), tenant_suspended (the tenant is suspended), ip_not_allowed (the key is restricted to certain IP addresses and this request came from another one). An endpoint may name other codes in its description.
  • 429 — Too many requests for this API key. Wait the number of seconds in the Retry-After header, then retry.
  • 500 — Internal Server Error

POST /alerts/bulk-resolve

Bulk resolve alerts

Requires permission: alert_rules:write

Request body (request.BulkAlertRequest)

NameTypeRequiredDescription
idsstring[]Yes

Responses

  • 200 — OK
  • 400 — Bad Request
  • 401 — Authentication failed: the API key is missing, malformed, unknown, revoked or expired.
  • 403 — Forbidden. The code field says why: insufficient_permissions (the key lacks the permission named in x-api-key-permission), api_key_not_allowed (API keys cannot call this endpoint), plan_limit (the tenant's plan does not include API keys, and the body has no limit_type; or the request hit a feature or usage limit of the plan, which limit_type names), tenant_suspended (the tenant is suspended), ip_not_allowed (the key is restricted to certain IP addresses and this request came from another one). An endpoint may name other codes in its description.
  • 429 — Too many requests for this API key. Wait the number of seconds in the Retry-After header, then retry.
  • 500 — Internal Server Error

GET /alerts/count

Count alerts by status

Requires permission: alert_rules:read

Responses

  • 200 — OK
    NameTypeRequiredDescription
    acknowledgedintegerNo
    openintegerNo
    resolvedintegerNo
    snoozedintegerNo
  • 401 — Authentication failed: the API key is missing, malformed, unknown, revoked or expired.
  • 403 — Forbidden. The code field says why: insufficient_permissions (the key lacks the permission named in x-api-key-permission), api_key_not_allowed (API keys cannot call this endpoint), plan_limit (the tenant's plan does not include API keys, and the body has no limit_type; or the request hit a feature or usage limit of the plan, which limit_type names), tenant_suspended (the tenant is suspended), ip_not_allowed (the key is restricted to certain IP addresses and this request came from another one). An endpoint may name other codes in its description.
  • 429 — Too many requests for this API key. Wait the number of seconds in the Retry-After header, then retry.
  • 500 — Internal Server Error

GET /alerts/{id}

Get an alert

Requires permission: alert_rules:read

Parameters

NameInTypeRequiredDescription
idpathstringYesAlert ID

Responses

  • 200 — OK
    NameTypeRequiredDescription
    acknowledged_atstringNo
    acknowledged_bystringNo
    alert_rule_idstringNo
    connector_idstringNo
    connector_namestringNo
    connector_typeentity.ConnectorTypeNo
    created_atstringNo
    exception_idstringNo
    finding_countintegerNo
    idstringNo
    resolved_atstringNo
    resolved_bystringNo
    scan_idstringNo
    severityentity.SeverityNo
    severity_countsentity.SeverityCountsNo
    snooze_modeentity.SnoozeModeNo
    snoozed_untilstringNo
    statusentity.AlertStatusNo
    tenant_idstringNo
    updated_atstringNo
  • 401 — Authentication failed: the API key is missing, malformed, unknown, revoked or expired.
  • 403 — Forbidden. The code field says why: insufficient_permissions (the key lacks the permission named in x-api-key-permission), api_key_not_allowed (API keys cannot call this endpoint), plan_limit (the tenant's plan does not include API keys, and the body has no limit_type; or the request hit a feature or usage limit of the plan, which limit_type names), tenant_suspended (the tenant is suspended), ip_not_allowed (the key is restricted to certain IP addresses and this request came from another one). An endpoint may name other codes in its description.
  • 404 — Not Found
  • 429 — Too many requests for this API key. Wait the number of seconds in the Retry-After header, then retry.
  • 500 — Internal Server Error

POST /alerts/{id}/acknowledge

Acknowledge an alert

Requires permission: alert_rules:write

Parameters

NameInTypeRequiredDescription
idpathstringYesAlert ID

Responses

  • 200 — OK
  • 401 — Authentication failed: the API key is missing, malformed, unknown, revoked or expired.
  • 403 — Forbidden. The code field says why: insufficient_permissions (the key lacks the permission named in x-api-key-permission), api_key_not_allowed (API keys cannot call this endpoint), plan_limit (the tenant's plan does not include API keys, and the body has no limit_type; or the request hit a feature or usage limit of the plan, which limit_type names), tenant_suspended (the tenant is suspended), ip_not_allowed (the key is restricted to certain IP addresses and this request came from another one). An endpoint may name other codes in its description.
  • 404 — Not Found
  • 429 — Too many requests for this API key. Wait the number of seconds in the Retry-After header, then retry.
  • 500 — Internal Server Error

POST /alerts/{id}/resolve

Resolve an alert

Requires permission: alert_rules:write

Parameters

NameInTypeRequiredDescription
idpathstringYesAlert ID

Responses

  • 200 — OK
  • 401 — Authentication failed: the API key is missing, malformed, unknown, revoked or expired.
  • 403 — Forbidden. The code field says why: insufficient_permissions (the key lacks the permission named in x-api-key-permission), api_key_not_allowed (API keys cannot call this endpoint), plan_limit (the tenant's plan does not include API keys, and the body has no limit_type; or the request hit a feature or usage limit of the plan, which limit_type names), tenant_suspended (the tenant is suspended), ip_not_allowed (the key is restricted to certain IP addresses and this request came from another one). An endpoint may name other codes in its description.
  • 404 — Not Found
  • 429 — Too many requests for this API key. Wait the number of seconds in the Retry-After header, then retry.
  • 500 — Internal Server Error

POST /alerts/{id}/snooze

Snooze an alert

Requires permission: alert_rules:write

Parameters

NameInTypeRequiredDescription
idpathstringYesAlert ID

Request body (request.SnoozeAlertRequest)

NameTypeRequiredDescription
modestringYes
untilstringNo

Responses

  • 200 — OK
  • 400 — Bad Request
  • 401 — Authentication failed: the API key is missing, malformed, unknown, revoked or expired.
  • 403 — Forbidden. The code field says why: insufficient_permissions (the key lacks the permission named in x-api-key-permission), api_key_not_allowed (API keys cannot call this endpoint), plan_limit (the tenant's plan does not include API keys, and the body has no limit_type; or the request hit a feature or usage limit of the plan, which limit_type names), tenant_suspended (the tenant is suspended), ip_not_allowed (the key is restricted to certain IP addresses and this request came from another one). An endpoint may name other codes in its description.
  • 404 — Not Found
  • 429 — Too many requests for this API key. Wait the number of seconds in the Retry-After header, then retry.
  • 500 — Internal Server Error

AppGovernanceRules

GET /app-governance-rules

List app governance rules

Requires permission: third_party_apps:read

Responses

  • 200 — OK
    NameTypeRequiredDescription
    actionstringNo
    auto_create_findingbooleanNo
    create_ai_review_itembooleanNo
    created_atstringNo
    created_bystringNo
    enabledbooleanNo
    expressionstringNo
    idstringNo
    last_error_atstringNo
    last_error_messagestringNo
    match_typestringNo
    match_valuestringNo
    namestringNo
    notify_channelsstring[]No
    notify_on_discoverybooleanNo
    tenant_idstringNo
    updated_atstringNo
  • 401 — Authentication failed: the API key is missing, malformed, unknown, revoked or expired.
  • 403 — Forbidden. The code field says why: insufficient_permissions (the key lacks the permission named in x-api-key-permission), api_key_not_allowed (API keys cannot call this endpoint), plan_limit (the tenant's plan does not include API keys, and the body has no limit_type; or the request hit a feature or usage limit of the plan, which limit_type names), tenant_suspended (the tenant is suspended), ip_not_allowed (the key is restricted to certain IP addresses and this request came from another one). An endpoint may name other codes in its description.
  • 429 — Too many requests for this API key. Wait the number of seconds in the Retry-After header, then retry.
  • 500 — Internal Server Error

POST /app-governance-rules

Create an app governance rule

Requires permission: third_party_apps:write

Request body (request.CreateAppGovernanceRuleRequest)

NameTypeRequiredDescription
actionstringYes
auto_create_findingbooleanNo
enabledbooleanNo
expressionstringNo
match_typestringNo
match_valuestringNo
namestringYes
notify_channelsstring[]No
notify_on_discoverybooleanNo

Responses

  • 201 — Created
    NameTypeRequiredDescription
    actionstringNo
    auto_create_findingbooleanNo
    create_ai_review_itembooleanNo
    created_atstringNo
    created_bystringNo
    enabledbooleanNo
    expressionstringNo
    idstringNo
    last_error_atstringNo
    last_error_messagestringNo
    match_typestringNo
    match_valuestringNo
    namestringNo
    notify_channelsstring[]No
    notify_on_discoverybooleanNo
    tenant_idstringNo
    updated_atstringNo
  • 400 — Bad Request
  • 401 — Authentication failed: the API key is missing, malformed, unknown, revoked or expired.
  • 403 — Forbidden. The code field says why: insufficient_permissions (the key lacks the permission named in x-api-key-permission), api_key_not_allowed (API keys cannot call this endpoint), plan_limit (the tenant's plan does not include API keys, and the body has no limit_type; or the request hit a feature or usage limit of the plan, which limit_type names), tenant_suspended (the tenant is suspended), ip_not_allowed (the key is restricted to certain IP addresses and this request came from another one). An endpoint may name other codes in its description.
  • 429 — Too many requests for this API key. Wait the number of seconds in the Retry-After header, then retry.
  • 500 — Internal Server Error

GET /app-governance-rules/{id}

Get an app governance rule

Requires permission: third_party_apps:read

Parameters

NameInTypeRequiredDescription
idpathstringYesGovernance Rule ID

Responses

  • 200 — OK
    NameTypeRequiredDescription
    actionstringNo
    auto_create_findingbooleanNo
    create_ai_review_itembooleanNo
    created_atstringNo
    created_bystringNo
    enabledbooleanNo
    expressionstringNo
    idstringNo
    last_error_atstringNo
    last_error_messagestringNo
    match_typestringNo
    match_valuestringNo
    namestringNo
    notify_channelsstring[]No
    notify_on_discoverybooleanNo
    tenant_idstringNo
    updated_atstringNo
  • 401 — Authentication failed: the API key is missing, malformed, unknown, revoked or expired.
  • 403 — Forbidden. The code field says why: insufficient_permissions (the key lacks the permission named in x-api-key-permission), api_key_not_allowed (API keys cannot call this endpoint), plan_limit (the tenant's plan does not include API keys, and the body has no limit_type; or the request hit a feature or usage limit of the plan, which limit_type names), tenant_suspended (the tenant is suspended), ip_not_allowed (the key is restricted to certain IP addresses and this request came from another one). An endpoint may name other codes in its description.
  • 404 — Not Found
  • 429 — Too many requests for this API key. Wait the number of seconds in the Retry-After header, then retry.
  • 500 — Internal Server Error

PUT /app-governance-rules/{id}

Update an app governance rule

Requires permission: third_party_apps:write

Parameters

NameInTypeRequiredDescription
idpathstringYesGovernance Rule ID

Request body (request.UpdateAppGovernanceRuleRequest)

NameTypeRequiredDescription
actionstringNo
auto_create_findingbooleanNo
enabledbooleanNo
expressionstringNo
match_typestringNo
match_valuestringNo
namestringNo
notify_channelsstring[]No
notify_on_discoverybooleanNo

Responses

  • 204 — No Content
  • 400 — Bad Request
  • 401 — Authentication failed: the API key is missing, malformed, unknown, revoked or expired.
  • 403 — Forbidden. The code field says why: insufficient_permissions (the key lacks the permission named in x-api-key-permission), api_key_not_allowed (API keys cannot call this endpoint), plan_limit (the tenant's plan does not include API keys, and the body has no limit_type; or the request hit a feature or usage limit of the plan, which limit_type names), tenant_suspended (the tenant is suspended), ip_not_allowed (the key is restricted to certain IP addresses and this request came from another one). An endpoint may name other codes in its description.
  • 404 — Not Found
  • 429 — Too many requests for this API key. Wait the number of seconds in the Retry-After header, then retry.
  • 500 — Internal Server Error

DELETE /app-governance-rules/{id}

Delete an app governance rule

Requires permission: third_party_apps:write

Parameters

NameInTypeRequiredDescription
idpathstringYesGovernance Rule ID

Responses

  • 204 — No Content
  • 401 — Authentication failed: the API key is missing, malformed, unknown, revoked or expired.
  • 403 — Forbidden. The code field says why: insufficient_permissions (the key lacks the permission named in x-api-key-permission), api_key_not_allowed (API keys cannot call this endpoint), plan_limit (the tenant's plan does not include API keys, and the body has no limit_type; or the request hit a feature or usage limit of the plan, which limit_type names), tenant_suspended (the tenant is suspended), ip_not_allowed (the key is restricted to certain IP addresses and this request came from another one). An endpoint may name other codes in its description.
  • 404 — Not Found
  • 429 — Too many requests for this API key. Wait the number of seconds in the Retry-After header, then retry.
  • 500 — Internal Server Error

ApprovalChains

GET /approval-chains

List approval chains

Requires permission: exceptions:read

Responses

  • 200 — OK
    NameTypeRequiredDescription
    created_atstringNo
    enabledbooleanNo
    idstringNo
    namestringNo
    priorityintegerNo
    request_typestringNo
    severity_filterstring[]No
    stepsentity.ApprovalStep[]No
    tenant_idstringNo
    updated_atstringNo
  • 401 — Authentication failed: the API key is missing, malformed, unknown, revoked or expired.
  • 403 — Forbidden. The code field says why: insufficient_permissions (the key lacks the permission named in x-api-key-permission), api_key_not_allowed (API keys cannot call this endpoint), plan_limit (the tenant's plan does not include API keys, and the body has no limit_type; or the request hit a feature or usage limit of the plan, which limit_type names), tenant_suspended (the tenant is suspended), ip_not_allowed (the key is restricted to certain IP addresses and this request came from another one). An endpoint may name other codes in its description.
  • 429 — Too many requests for this API key. Wait the number of seconds in the Retry-After header, then retry.
  • 500 — Internal Server Error

GET /approval-chains/match

Match approval chain

Requires permission: exceptions:read

Parameters

NameInTypeRequiredDescription
severityquerystringYesFinding severity to match against
request_typequerystringNoRequest that would be gated (default exceptions)

Responses

  • 200 — OK
    NameTypeRequiredDescription
    created_atstringNo
    enabledbooleanNo
    idstringNo
    namestringNo
    priorityintegerNo
    request_typestringNo
    severity_filterstring[]No
    stepsentity.ApprovalStep[]No
    tenant_idstringNo
    updated_atstringNo
  • 204 — No matching chain
  • 400 — Bad Request
  • 401 — Authentication failed: the API key is missing, malformed, unknown, revoked or expired.
  • 403 — Forbidden. The code field says why: insufficient_permissions (the key lacks the permission named in x-api-key-permission), api_key_not_allowed (API keys cannot call this endpoint), plan_limit (the tenant's plan does not include API keys, and the body has no limit_type; or the request hit a feature or usage limit of the plan, which limit_type names), tenant_suspended (the tenant is suspended), ip_not_allowed (the key is restricted to certain IP addresses and this request came from another one). An endpoint may name other codes in its description.
  • 429 — Too many requests for this API key. Wait the number of seconds in the Retry-After header, then retry.

GET /approval-chains/{id}

Get an approval chain

Requires permission: exceptions:read

Parameters

NameInTypeRequiredDescription
idpathstringYesApproval Chain ID

Responses

  • 200 — OK
    NameTypeRequiredDescription
    created_atstringNo
    enabledbooleanNo
    idstringNo
    namestringNo
    priorityintegerNo
    request_typestringNo
    severity_filterstring[]No
    stepsentity.ApprovalStep[]No
    tenant_idstringNo
    updated_atstringNo
  • 401 — Authentication failed: the API key is missing, malformed, unknown, revoked or expired.
  • 403 — Forbidden. The code field says why: insufficient_permissions (the key lacks the permission named in x-api-key-permission), api_key_not_allowed (API keys cannot call this endpoint), plan_limit (the tenant's plan does not include API keys, and the body has no limit_type; or the request hit a feature or usage limit of the plan, which limit_type names), tenant_suspended (the tenant is suspended), ip_not_allowed (the key is restricted to certain IP addresses and this request came from another one). An endpoint may name other codes in its description.
  • 404 — Not Found
  • 429 — Too many requests for this API key. Wait the number of seconds in the Retry-After header, then retry.
  • 500 — Internal Server Error

Audit

GET /audit-log

List audit events

Requires permission: audit_log:read

Parameters

NameInTypeRequiredDescription
actor_idquerystringNoFilter by actor ID
actionquerystringNoFilter by action
resource_typequerystringNoFilter by resource type
sincequerystringNoStart of date range (RFC3339)
untilquerystringNoEnd of date range (RFC3339)
limitqueryintegerNoPage size (default 100, max 1000)
offsetqueryintegerNoPage offset (default 0)
sort_byquerystringNoSort field (created_at, action, resource_type, actor_email)
sort_orderquerystringNoSort direction (asc, desc)

Responses

  • 200 — OK
    NameTypeRequiredDescription
    dataentity.AuditEvent[]No
    paginationentity.PaginationMetaNo
  • 401 — Authentication failed: the API key is missing, malformed, unknown, revoked or expired.
  • 403 — Forbidden. The code field says why: insufficient_permissions (the key lacks the permission named in x-api-key-permission), api_key_not_allowed (API keys cannot call this endpoint), plan_limit (the tenant's plan does not include API keys, and the body has no limit_type; or the request hit a feature or usage limit of the plan, which limit_type names), tenant_suspended (the tenant is suspended), ip_not_allowed (the key is restricted to certain IP addresses and this request came from another one). An endpoint may name other codes in its description.
  • 429 — Too many requests for this API key. Wait the number of seconds in the Retry-After header, then retry.
  • 500 — Internal Server Error

POST /audit-log/export

Create audit log export

Requires permission: audit_log:read

Request body (request.CreateAuditExport)

NameTypeRequiredDescription
actionstringNo
actor_idstringNo
resource_typestringNo
sincestringNo
untilstringNo

Responses

  • 201 — Created
    NameTypeRequiredDescription
    created_atstringNo
    errorstringNo
    event_countintegerNo
    expires_atstringNo
    file_namestringNo
    file_sizeintegerNo
    filtersentity.AuditExportFilterNo
    idstringNo
    statusentity.AuditExportStatusNo
    tenant_idstringNo
  • 400 — Bad Request
  • 401 — Authentication failed: the API key is missing, malformed, unknown, revoked or expired.
  • 403 — Forbidden. The code field says why: insufficient_permissions (the key lacks the permission named in x-api-key-permission), api_key_not_allowed (API keys cannot call this endpoint), plan_limit (the tenant's plan does not include API keys, and the body has no limit_type; or the request hit a feature or usage limit of the plan, which limit_type names), tenant_suspended (the tenant is suspended), ip_not_allowed (the key is restricted to certain IP addresses and this request came from another one). An endpoint may name other codes in its description.
  • 429 — Too many requests for this API key. Wait the number of seconds in the Retry-After header, then retry.
  • 500 — Internal Server Error

GET /audit-log/export/{id}

Get audit export status

Requires permission: audit_log:read

Parameters

NameInTypeRequiredDescription
idpathstringYesExport ID

Responses

  • 200 — OK
    NameTypeRequiredDescription
    created_atstringNo
    errorstringNo
    event_countintegerNo
    expires_atstringNo
    file_namestringNo
    file_sizeintegerNo
    filtersentity.AuditExportFilterNo
    idstringNo
    statusentity.AuditExportStatusNo
    tenant_idstringNo
  • 401 — Authentication failed: the API key is missing, malformed, unknown, revoked or expired.
  • 403 — Forbidden. The code field says why: insufficient_permissions (the key lacks the permission named in x-api-key-permission), api_key_not_allowed (API keys cannot call this endpoint), plan_limit (the tenant's plan does not include API keys, and the body has no limit_type; or the request hit a feature or usage limit of the plan, which limit_type names), tenant_suspended (the tenant is suspended), ip_not_allowed (the key is restricted to certain IP addresses and this request came from another one). An endpoint may name other codes in its description.
  • 404 — Not Found
  • 429 — Too many requests for this API key. Wait the number of seconds in the Retry-After header, then retry.
  • 500 — Internal Server Error

GET /audit-log/export/{id}/download

Download audit export

Requires permission: audit_log:read

Parameters

NameInTypeRequiredDescription
idpathstringYesExport ID

Responses

  • 200 — OK
  • 400 — Bad Request
  • 401 — Authentication failed: the API key is missing, malformed, unknown, revoked or expired.
  • 403 — Forbidden. The code field says why: insufficient_permissions (the key lacks the permission named in x-api-key-permission), api_key_not_allowed (API keys cannot call this endpoint), plan_limit (the tenant's plan does not include API keys, and the body has no limit_type; or the request hit a feature or usage limit of the plan, which limit_type names), tenant_suspended (the tenant is suspended), ip_not_allowed (the key is restricted to certain IP addresses and this request came from another one). An endpoint may name other codes in its description.
  • 404 — Not Found
  • 429 — Too many requests for this API key. Wait the number of seconds in the Retry-After header, then retry.
  • 500 — Internal Server Error

Campaigns

GET /campaigns

List remediation campaigns

Requires permission: findings:read

Responses

  • 200 — OK
    NameTypeRequiredDescription
    affected_connectorsstring[]No
    aggregate_severityentity.SeverityNo
    categorystringNo
    descriptionstringNo
    drifted_countintegerNo
    estimated_minutesintegerNo
    finding_countintegerNo
    open_countintegerNo
    progress_pctnumberNo
    recommended_stepsentity.CampaignStep[]No
    regression_countintegerNo
    resolved_countintegerNo
    titlestringNo
  • 401 — Authentication failed: the API key is missing, malformed, unknown, revoked or expired.
  • 403 — Forbidden. The code field says why: insufficient_permissions (the key lacks the permission named in x-api-key-permission), api_key_not_allowed (API keys cannot call this endpoint), plan_limit (the tenant's plan does not include API keys, and the body has no limit_type; or the request hit a feature or usage limit of the plan, which limit_type names), tenant_suspended (the tenant is suspended), ip_not_allowed (the key is restricted to certain IP addresses and this request came from another one). An endpoint may name other codes in its description.
  • 429 — Too many requests for this API key. Wait the number of seconds in the Retry-After header, then retry.
  • 500 — Internal Server Error

GET /campaigns/{category}

Get a remediation campaign

Requires permission: findings:read

Parameters

NameInTypeRequiredDescription
categorypathstringYesPolicy category slug

Responses

  • 200 — OK
    NameTypeRequiredDescription
    affected_connectorsstring[]No
    aggregate_severityentity.SeverityNo
    categorystringNo
    descriptionstringNo
    drifted_countintegerNo
    estimated_minutesintegerNo
    finding_countintegerNo
    open_countintegerNo
    progress_pctnumberNo
    recommended_stepsentity.CampaignStep[]No
    regression_countintegerNo
    resolved_countintegerNo
    titlestringNo
  • 401 — Authentication failed: the API key is missing, malformed, unknown, revoked or expired.
  • 403 — Forbidden. The code field says why: insufficient_permissions (the key lacks the permission named in x-api-key-permission), api_key_not_allowed (API keys cannot call this endpoint), plan_limit (the tenant's plan does not include API keys, and the body has no limit_type; or the request hit a feature or usage limit of the plan, which limit_type names), tenant_suspended (the tenant is suspended), ip_not_allowed (the key is restricted to certain IP addresses and this request came from another one). An endpoint may name other codes in its description.
  • 404 — Not Found
  • 429 — Too many requests for this API key. Wait the number of seconds in the Retry-After header, then retry.
  • 500 — Internal Server Error

Canonical Apps

GET /canonical-apps

List canonical apps (Vendors)

Requires permission: third_party_apps:read

Parameters

NameInTypeRequiredDescription
sourcequerystringNoFilter by group source
riskquerystringNoFilter by max risk
qquerystringNoCase-insensitive substring match on display_name
limitqueryintegerNoItems per page (default 100, max 1000)
offsetqueryintegerNoNumber of items to skip
sort_byquerystringNoSort column
sort_orderquerystringNoSort direction

Responses

  • 200 — OK
    NameTypeRequiredDescription
    dataentity.CanonicalAppRollup[]No
    paginationentity.PaginationMetaNo
  • 401 — Authentication failed: the API key is missing, malformed, unknown, revoked or expired.
  • 403 — Forbidden. The code field says why: insufficient_permissions (the key lacks the permission named in x-api-key-permission), api_key_not_allowed (API keys cannot call this endpoint), plan_limit (the tenant's plan does not include API keys, and the body has no limit_type; or the request hit a feature or usage limit of the plan, which limit_type names), tenant_suspended (the tenant is suspended), ip_not_allowed (the key is restricted to certain IP addresses and this request came from another one). An endpoint may name other codes in its description.
  • 429 — Too many requests for this API key. Wait the number of seconds in the Retry-After header, then retry.
  • 500 — Internal Server Error

GET /canonical-apps/merge-candidates

List pending merge candidates

Requires permission: third_party_apps:read

Responses

  • 200 — OK
    NameTypeRequiredDescription
    cluster_keystringNo
    confidencestringNo
    created_atstringNo
    idstringNo
    membersresponse.MergeCandidateMemberView[]No
    signalstringNo
    statusstringNo
    target_canonical_idstringNo
  • 401 — Authentication failed: the API key is missing, malformed, unknown, revoked or expired.
  • 403 — Forbidden. The code field says why: insufficient_permissions (the key lacks the permission named in x-api-key-permission), api_key_not_allowed (API keys cannot call this endpoint), plan_limit (the tenant's plan does not include API keys, and the body has no limit_type; or the request hit a feature or usage limit of the plan, which limit_type names), tenant_suspended (the tenant is suspended), ip_not_allowed (the key is restricted to certain IP addresses and this request came from another one). An endpoint may name other codes in its description.
  • 429 — Too many requests for this API key. Wait the number of seconds in the Retry-After header, then retry.
  • 500 — Internal Server Error

GET /canonical-apps/{id}

Get a canonical app (Vendor detail)

Requires permission: third_party_apps:read

Parameters

NameInTypeRequiredDescription
idpathstringYesCanonical app ID

Responses

  • 200 — OK
    NameTypeRequiredDescription
    connectorsstring[]NoConnectors is the deduped union of member connector types.
    display_namestringNo
    idstringNo
    membersresponse.CanonicalAppDetailMember[]No
    reach_unavailable_sourcesintegerNoReachUnavailableSources is the number of member connectors that do not report users (github, box, slack, teams, servicenow, ...). When > 0 the UI must render "reach unavailable for N source(s)" rather than "0 users".
    scopesstring[]NoScopes is the deduped union of OAuth scopes across all members.
    sourcestringNo
    user_reachintegerNoUserReach is the deduped count of distinct users over members from user-reporting connectors only (workspace, m365, okta, dropbox).
    vendor_keystringNo
  • 401 — Authentication failed: the API key is missing, malformed, unknown, revoked or expired.
  • 403 — Forbidden. The code field says why: insufficient_permissions (the key lacks the permission named in x-api-key-permission), api_key_not_allowed (API keys cannot call this endpoint), plan_limit (the tenant's plan does not include API keys, and the body has no limit_type; or the request hit a feature or usage limit of the plan, which limit_type names), tenant_suspended (the tenant is suspended), ip_not_allowed (the key is restricted to certain IP addresses and this request came from another one). An endpoint may name other codes in its description.
  • 404 — Not Found
  • 429 — Too many requests for this API key. Wait the number of seconds in the Retry-After header, then retry.
  • 500 — Internal Server Error

Compliance

GET /compliance/controls/{id}

Get a compliance control

Requires permission: compliance:read

Parameters

NameInTypeRequiredDescription
idpathstringYesControl ID

Responses

  • 200 — OK
    NameTypeRequiredDescription
    childrenentity.ComplianceControl[]No
    control_idstringNo
    descriptionstringNo
    framework_idstringNo
    idstringNo
    mapping_overriddenbooleanNoMappingOverridden is true when the caller's tenant has overridden this built-in control's policy mapping (omitted otherwise).
    namestringNo
    parent_idstringNo
    policy_idsstring[]No
    sort_orderintegerNo
  • 401 — Authentication failed: the API key is missing, malformed, unknown, revoked or expired.
  • 403 — Forbidden. The code field says why: insufficient_permissions (the key lacks the permission named in x-api-key-permission), api_key_not_allowed (API keys cannot call this endpoint), plan_limit (the tenant's plan does not include API keys, and the body has no limit_type; or the request hit a feature or usage limit of the plan, which limit_type names), tenant_suspended (the tenant is suspended), ip_not_allowed (the key is restricted to certain IP addresses and this request came from another one). An endpoint may name other codes in its description.
  • 404 — Not Found
  • 429 — Too many requests for this API key. Wait the number of seconds in the Retry-After header, then retry.

PUT /compliance/controls/{id}

Update a control in a custom framework

Requires permission: compliance:write

Parameters

NameInTypeRequiredDescription
idpathstringYesControl ID

Request body (request.UpdateControlRequest)

NameTypeRequiredDescription
descriptionstringNo
namestringNo
sort_orderintegerNo

Responses

  • 204 — No Content
  • 400 — Bad Request
  • 401 — Authentication failed: the API key is missing, malformed, unknown, revoked or expired.
  • 403 — Forbidden. The code field says why: insufficient_permissions (the key lacks the permission named in x-api-key-permission), api_key_not_allowed (API keys cannot call this endpoint), plan_limit (the tenant's plan does not include API keys, and the body has no limit_type; or the request hit a feature or usage limit of the plan, which limit_type names), tenant_suspended (the tenant is suspended), ip_not_allowed (the key is restricted to certain IP addresses and this request came from another one). An endpoint may name other codes in its description.
  • 404 — Not Found
  • 429 — Too many requests for this API key. Wait the number of seconds in the Retry-After header, then retry.

DELETE /compliance/controls/{id}

Delete a control from a custom framework

Requires permission: compliance:write

Parameters

NameInTypeRequiredDescription
idpathstringYesControl ID

Responses

  • 204 — No Content
  • 401 — Authentication failed: the API key is missing, malformed, unknown, revoked or expired.
  • 403 — Forbidden. The code field says why: insufficient_permissions (the key lacks the permission named in x-api-key-permission), api_key_not_allowed (API keys cannot call this endpoint), plan_limit (the tenant's plan does not include API keys, and the body has no limit_type; or the request hit a feature or usage limit of the plan, which limit_type names), tenant_suspended (the tenant is suspended), ip_not_allowed (the key is restricted to certain IP addresses and this request came from another one). An endpoint may name other codes in its description.
  • 404 — Not Found
  • 429 — Too many requests for this API key. Wait the number of seconds in the Retry-After header, then retry.

GET /compliance/controls/{id}/attestation

Get a control attestation

Requires permission: compliance:read

Parameters

NameInTypeRequiredDescription
idpathstringYesControl ID

Responses

  • 200 — OK
    NameTypeRequiredDescription
    attested_atstringNo
    attested_bystringNo
    control_codestringNo
    control_db_idstringNo
    created_atstringNo
    evidence_file_namestringNo
    evidence_file_sizeintegerNo
    expires_atstringNo
    framework_idstringNo
    framework_namestringNo
    idstringNo
    last_reminder_atstringNo
    owner_emailstringNo
    review_cadence_daysintegerNo
    statementstringNo
    statusstringNo
    tenant_idstringNo
    updated_atstringNo
  • 401 — Authentication failed: the API key is missing, malformed, unknown, revoked or expired.
  • 403 — Forbidden. The code field says why: insufficient_permissions (the key lacks the permission named in x-api-key-permission), api_key_not_allowed (API keys cannot call this endpoint), plan_limit (the tenant's plan does not include API keys, and the body has no limit_type; or the request hit a feature or usage limit of the plan, which limit_type names), tenant_suspended (the tenant is suspended), ip_not_allowed (the key is restricted to certain IP addresses and this request came from another one). An endpoint may name other codes in its description.
  • 404 — Not Found
  • 429 — Too many requests for this API key. Wait the number of seconds in the Retry-After header, then retry.

GET /compliance/controls/{id}/attestation/evidence

Download attestation evidence

Requires permission: compliance:read

Parameters

NameInTypeRequiredDescription
idpathstringYesControl ID

Responses

  • 200 — OK
  • 401 — Authentication failed: the API key is missing, malformed, unknown, revoked or expired.
  • 403 — Forbidden. The code field says why: insufficient_permissions (the key lacks the permission named in x-api-key-permission), api_key_not_allowed (API keys cannot call this endpoint), plan_limit (the tenant's plan does not include API keys, and the body has no limit_type; or the request hit a feature or usage limit of the plan, which limit_type names), tenant_suspended (the tenant is suspended), ip_not_allowed (the key is restricted to certain IP addresses and this request came from another one). An endpoint may name other codes in its description.
  • 404 — Not Found
  • 429 — Too many requests for this API key. Wait the number of seconds in the Retry-After header, then retry.

PUT /compliance/controls/{id}/policies

Set control policies

Requires permission: compliance:write

Parameters

NameInTypeRequiredDescription
idpathstringYesControl ID

Request body (request.SetControlPoliciesRequest)

NameTypeRequiredDescription
policy_idsstring[]Yes

Responses

  • 204 — No Content
  • 400 — Bad Request
  • 401 — Authentication failed: the API key is missing, malformed, unknown, revoked or expired.
  • 403 — Forbidden. The code field says why: insufficient_permissions (the key lacks the permission named in x-api-key-permission), api_key_not_allowed (API keys cannot call this endpoint), plan_limit (the tenant's plan does not include API keys, and the body has no limit_type; or the request hit a feature or usage limit of the plan, which limit_type names), tenant_suspended (the tenant is suspended), ip_not_allowed (the key is restricted to certain IP addresses and this request came from another one). An endpoint may name other codes in its description.
  • 429 — Too many requests for this API key. Wait the number of seconds in the Retry-After header, then retry.
  • 500 — Internal Server Error

DELETE /compliance/controls/{id}/policies

Reset control policies

Requires permission: compliance:write

Parameters

NameInTypeRequiredDescription
idpathstringYesControl ID

Responses

  • 204 — No Content
  • 400 — Bad Request
  • 401 — Authentication failed: the API key is missing, malformed, unknown, revoked or expired.
  • 403 — Forbidden. The code field says why: insufficient_permissions (the key lacks the permission named in x-api-key-permission), api_key_not_allowed (API keys cannot call this endpoint), plan_limit (the tenant's plan does not include API keys, and the body has no limit_type; or the request hit a feature or usage limit of the plan, which limit_type names), tenant_suspended (the tenant is suspended), ip_not_allowed (the key is restricted to certain IP addresses and this request came from another one). An endpoint may name other codes in its description.
  • 404 — Not Found
  • 429 — Too many requests for this API key. Wait the number of seconds in the Retry-After header, then retry.
  • 500 — Internal Server Error

GET /compliance/enriched-summary

Get enriched compliance summary

Requires permission: compliance:read

Responses

  • 200 — OK
    NameTypeRequiredDescription
    attestedintegerNo
    audit_datestringNo
    blocking_controlsentity.ControlStub[]No
    days_until_auditintegerNo
    domainsentity.ControlPosture[]No
    failed_controlsintegerNo
    framework_idstringNo
    framework_namestringNo
    not_assessedintegerNo
    overall_scorenumberNonil when no control is assessed (no-data ≠ 0)
    passed_controlsintegerNo
    recent_winsentity.ControlStub[]No
    stale_evidence_countintegerNo
    total_controlsintegerNo
    trend_directionstringNo
  • 401 — Authentication failed: the API key is missing, malformed, unknown, revoked or expired.
  • 403 — Forbidden. The code field says why: insufficient_permissions (the key lacks the permission named in x-api-key-permission), api_key_not_allowed (API keys cannot call this endpoint), plan_limit (the tenant's plan does not include API keys, and the body has no limit_type; or the request hit a feature or usage limit of the plan, which limit_type names), tenant_suspended (the tenant is suspended), ip_not_allowed (the key is restricted to certain IP addresses and this request came from another one). An endpoint may name other codes in its description.
  • 429 — Too many requests for this API key. Wait the number of seconds in the Retry-After header, then retry.
  • 500 — Internal Server Error

GET /compliance/frameworks

List compliance frameworks

Requires permission: compliance:read

Responses

  • 200 — OK
    NameTypeRequiredDescription
    audit_datestringNoTarget audit date; drives DaysUntilAudit on enriched summary
    created_atstringNo
    descriptionstringNo
    enabledbooleanNo
    idstringNo
    namestringNo
    tenant_idstringNoOwning tenant (nil = global/seeded)
    updated_atstringNo
    versionstringNo
  • 401 — Authentication failed: the API key is missing, malformed, unknown, revoked or expired.
  • 403 — Forbidden. The code field says why: insufficient_permissions (the key lacks the permission named in x-api-key-permission), api_key_not_allowed (API keys cannot call this endpoint), plan_limit (the tenant's plan does not include API keys, and the body has no limit_type; or the request hit a feature or usage limit of the plan, which limit_type names), tenant_suspended (the tenant is suspended), ip_not_allowed (the key is restricted to certain IP addresses and this request came from another one). An endpoint may name other codes in its description.
  • 429 — Too many requests for this API key. Wait the number of seconds in the Retry-After header, then retry.
  • 500 — Internal Server Error

POST /compliance/frameworks

Create a custom compliance framework

Requires permission: compliance:write

Request body (request.CreateFrameworkRequest)

NameTypeRequiredDescription
descriptionstringNo
namestringYes
versionstringYes

Responses

  • 201 — Created
    NameTypeRequiredDescription
    audit_datestringNoTarget audit date; drives DaysUntilAudit on enriched summary
    created_atstringNo
    descriptionstringNo
    enabledbooleanNo
    idstringNo
    namestringNo
    tenant_idstringNoOwning tenant (nil = global/seeded)
    updated_atstringNo
    versionstringNo
  • 400 — Bad Request
  • 401 — Authentication failed: the API key is missing, malformed, unknown, revoked or expired.
  • 403 — Forbidden. The code field says why: insufficient_permissions (the key lacks the permission named in x-api-key-permission), api_key_not_allowed (API keys cannot call this endpoint), plan_limit (the tenant's plan does not include API keys, and the body has no limit_type; or the request hit a feature or usage limit of the plan, which limit_type names), tenant_suspended (the tenant is suspended), ip_not_allowed (the key is restricted to certain IP addresses and this request came from another one). An endpoint may name other codes in its description.
  • 409 — Conflict
  • 429 — Too many requests for this API key. Wait the number of seconds in the Retry-After header, then retry.

GET /compliance/frameworks/{id}

Get a compliance framework

Requires permission: compliance:read

Parameters

NameInTypeRequiredDescription
idpathstringYesFramework ID

Responses

  • 200 — OK
    NameTypeRequiredDescription
    audit_datestringNoTarget audit date; drives DaysUntilAudit on enriched summary
    created_atstringNo
    descriptionstringNo
    enabledbooleanNo
    idstringNo
    namestringNo
    tenant_idstringNoOwning tenant (nil = global/seeded)
    updated_atstringNo
    versionstringNo
  • 401 — Authentication failed: the API key is missing, malformed, unknown, revoked or expired.
  • 403 — Forbidden. The code field says why: insufficient_permissions (the key lacks the permission named in x-api-key-permission), api_key_not_allowed (API keys cannot call this endpoint), plan_limit (the tenant's plan does not include API keys, and the body has no limit_type; or the request hit a feature or usage limit of the plan, which limit_type names), tenant_suspended (the tenant is suspended), ip_not_allowed (the key is restricted to certain IP addresses and this request came from another one). An endpoint may name other codes in its description.
  • 404 — Not Found
  • 429 — Too many requests for this API key. Wait the number of seconds in the Retry-After header, then retry.

PUT /compliance/frameworks/{id}

Update a custom compliance framework

Requires permission: compliance:write

Parameters

NameInTypeRequiredDescription
idpathstringYesFramework ID

Request body (request.UpdateFrameworkRequest)

NameTypeRequiredDescription
audit_datestringNo
descriptionstringNo
namestringNo
versionstringNo

Responses

  • 204 — No Content
  • 400 — Bad Request
  • 401 — Authentication failed: the API key is missing, malformed, unknown, revoked or expired.
  • 403 — Forbidden. The code field says why: insufficient_permissions (the key lacks the permission named in x-api-key-permission), api_key_not_allowed (API keys cannot call this endpoint), plan_limit (the tenant's plan does not include API keys, and the body has no limit_type; or the request hit a feature or usage limit of the plan, which limit_type names), tenant_suspended (the tenant is suspended), ip_not_allowed (the key is restricted to certain IP addresses and this request came from another one). An endpoint may name other codes in its description.
  • 404 — Not Found
  • 429 — Too many requests for this API key. Wait the number of seconds in the Retry-After header, then retry.

DELETE /compliance/frameworks/{id}

Delete a custom compliance framework

Requires permission: compliance:write

Parameters

NameInTypeRequiredDescription
idpathstringYesFramework ID

Responses

  • 204 — No Content
  • 401 — Authentication failed: the API key is missing, malformed, unknown, revoked or expired.
  • 403 — Forbidden. The code field says why: insufficient_permissions (the key lacks the permission named in x-api-key-permission), api_key_not_allowed (API keys cannot call this endpoint), plan_limit (the tenant's plan does not include API keys, and the body has no limit_type; or the request hit a feature or usage limit of the plan, which limit_type names), tenant_suspended (the tenant is suspended), ip_not_allowed (the key is restricted to certain IP addresses and this request came from another one). An endpoint may name other codes in its description.
  • 404 — Not Found
  • 429 — Too many requests for this API key. Wait the number of seconds in the Retry-After header, then retry.

POST /compliance/frameworks/{id}/clone

Clone a compliance framework

Requires permission: compliance:write

Parameters

NameInTypeRequiredDescription
idpathstringYesSource Framework ID

Request body (request.CloneFrameworkRequest)

NameTypeRequiredDescription
namestringYes

Responses

  • 201 — Created
    NameTypeRequiredDescription
    audit_datestringNoTarget audit date; drives DaysUntilAudit on enriched summary
    created_atstringNo
    descriptionstringNo
    enabledbooleanNo
    idstringNo
    namestringNo
    tenant_idstringNoOwning tenant (nil = global/seeded)
    updated_atstringNo
    versionstringNo
  • 400 — Bad Request
  • 401 — Authentication failed: the API key is missing, malformed, unknown, revoked or expired.
  • 403 — Forbidden. The code field says why: insufficient_permissions (the key lacks the permission named in x-api-key-permission), api_key_not_allowed (API keys cannot call this endpoint), plan_limit (the tenant's plan does not include API keys, and the body has no limit_type; or the request hit a feature or usage limit of the plan, which limit_type names), tenant_suspended (the tenant is suspended), ip_not_allowed (the key is restricted to certain IP addresses and this request came from another one). An endpoint may name other codes in its description.
  • 404 — Not Found
  • 409 — Conflict
  • 429 — Too many requests for this API key. Wait the number of seconds in the Retry-After header, then retry.

POST /compliance/frameworks/{id}/controls

Create a control in a custom framework

Requires permission: compliance:write

Parameters

NameInTypeRequiredDescription
idpathstringYesFramework ID

Request body (request.CreateControlRequest)

NameTypeRequiredDescription
control_idstringYes
descriptionstringNo
namestringYes
parent_idstringNo
sort_orderintegerNo

Responses

  • 201 — Created
    NameTypeRequiredDescription
    childrenentity.ComplianceControl[]No
    control_idstringNo
    descriptionstringNo
    framework_idstringNo
    idstringNo
    mapping_overriddenbooleanNoMappingOverridden is true when the caller's tenant has overridden this built-in control's policy mapping (omitted otherwise).
    namestringNo
    parent_idstringNo
    policy_idsstring[]No
    sort_orderintegerNo
  • 400 — Bad Request
  • 401 — Authentication failed: the API key is missing, malformed, unknown, revoked or expired.
  • 403 — Forbidden. The code field says why: insufficient_permissions (the key lacks the permission named in x-api-key-permission), api_key_not_allowed (API keys cannot call this endpoint), plan_limit (the tenant's plan does not include API keys, and the body has no limit_type; or the request hit a feature or usage limit of the plan, which limit_type names), tenant_suspended (the tenant is suspended), ip_not_allowed (the key is restricted to certain IP addresses and this request came from another one). An endpoint may name other codes in its description.
  • 404 — Not Found
  • 409 — Conflict
  • 429 — Too many requests for this API key. Wait the number of seconds in the Retry-After header, then retry.

GET /compliance/frameworks/{id}/gaps

Get framework audit readiness

Requires permission: compliance:read

Parameters

NameInTypeRequiredDescription
idpathstringYesFramework ID

Responses

  • 200 — OK
    NameTypeRequiredDescription
    coverage_scorenumberNomapped leaf controls / total leaf * 100
    framework_idstringNo
    framework_namestringNo
    mapped_controlsintegerNo
    persistent_failuresentity.PersistentFailure[]No
    posture_scorenumberNopassed / assessed * 100; nil when nothing is assessed
    readiness_scorenumberNocoverage * posture / 100; nil when posture is not assessed
    recent_regressionsentity.ControlRegression[]No
    suggested_mappingsentity.MappingSuggestion[]No
    total_controlsintegerNo
    unmapped_controlsentity.GapControl[]No
  • 401 — Authentication failed: the API key is missing, malformed, unknown, revoked or expired.
  • 403 — Forbidden. The code field says why: insufficient_permissions (the key lacks the permission named in x-api-key-permission), api_key_not_allowed (API keys cannot call this endpoint), plan_limit (the tenant's plan does not include API keys, and the body has no limit_type; or the request hit a feature or usage limit of the plan, which limit_type names), tenant_suspended (the tenant is suspended), ip_not_allowed (the key is restricted to certain IP addresses and this request came from another one). An endpoint may name other codes in its description.
  • 404 — Not Found
  • 429 — Too many requests for this API key. Wait the number of seconds in the Retry-After header, then retry.
  • 500 — Internal Server Error

GET /compliance/frameworks/{id}/history

Get posture history

Requires permission: compliance:read

Parameters

NameInTypeRequiredDescription
idpathstringYesFramework ID
connector_idquerystringNoFilter by connector ID (omit for the tenant-wide scope)
sincequerystringNoStart time (RFC3339, default 365 days before until, clamped to 365 days)
untilquerystringNoEnd time (RFC3339)

Responses

  • 200 — OK
    NameTypeRequiredDescription
    attestedintegerNo
    captured_atstringNo
    category_scoresobjectNo
    connector_idstringNo
    failed_controlsintegerNo
    framework_idstringNo
    idstringNo
    not_assessedintegerNo
    overall_scorenumberNonil when nothing is assessed (no-data ≠ 0)
    passed_controlsintegerNo
    tenant_idstringNo
    total_controlsintegerNo
  • 401 — Authentication failed: the API key is missing, malformed, unknown, revoked or expired.
  • 403 — Forbidden. The code field says why: insufficient_permissions (the key lacks the permission named in x-api-key-permission), api_key_not_allowed (API keys cannot call this endpoint), plan_limit (the tenant's plan does not include API keys, and the body has no limit_type; or the request hit a feature or usage limit of the plan, which limit_type names), tenant_suspended (the tenant is suspended), ip_not_allowed (the key is restricted to certain IP addresses and this request came from another one). An endpoint may name other codes in its description.
  • 429 — Too many requests for this API key. Wait the number of seconds in the Retry-After header, then retry.
  • 500 — Internal Server Error

GET /compliance/frameworks/{id}/posture

Get framework posture

Requires permission: compliance:read

Parameters

NameInTypeRequiredDescription
idpathstringYesFramework ID
connector_idquerystringNoOptional connector ID for per-connector posture

Responses

  • 200 — OK
    NameTypeRequiredDescription
    attestedintegerNo
    domainsentity.ControlPosture[]No
    failed_controlsintegerNo
    framework_idstringNo
    framework_namestringNo
    not_assessedintegerNo
    overall_scorenumberNonil when no control is assessed (no-data ≠ 0)
    passed_controlsintegerNo
    total_controlsintegerNo
  • 401 — Authentication failed: the API key is missing, malformed, unknown, revoked or expired.
  • 403 — Forbidden. The code field says why: insufficient_permissions (the key lacks the permission named in x-api-key-permission), api_key_not_allowed (API keys cannot call this endpoint), plan_limit (the tenant's plan does not include API keys, and the body has no limit_type; or the request hit a feature or usage limit of the plan, which limit_type names), tenant_suspended (the tenant is suspended), ip_not_allowed (the key is restricted to certain IP addresses and this request came from another one). An endpoint may name other codes in its description.
  • 404 — Not Found
  • 429 — Too many requests for this API key. Wait the number of seconds in the Retry-After header, then retry.
  • 500 — Internal Server Error

GET /compliance/frameworks/{id}/trends

Get compliance trends

Requires permission: compliance:read

Parameters

NameInTypeRequiredDescription
idpathstringYesFramework ID
periodquerystringNoPeriod: 30d, 90d (default), 1y
connector_idquerystringNoOptional connector ID to scope trends

Responses

  • 200 — OK
    NameTypeRequiredDescription
    category_trendsobjectNo
    control_deltasentity.ControlDelta[]No
    data_pointsentity.TrendPoint[]No
    directionstringNoimproving, declining, stable
    end_scorenumberNo
    framework_idstringNo
    framework_namestringNo
    periodstringNo
    score_changenumberNo
    start_scorenumberNo
  • 401 — Authentication failed: the API key is missing, malformed, unknown, revoked or expired.
  • 403 — Forbidden. The code field says why: insufficient_permissions (the key lacks the permission named in x-api-key-permission), api_key_not_allowed (API keys cannot call this endpoint), plan_limit (the tenant's plan does not include API keys, and the body has no limit_type; or the request hit a feature or usage limit of the plan, which limit_type names), tenant_suspended (the tenant is suspended), ip_not_allowed (the key is restricted to certain IP addresses and this request came from another one). An endpoint may name other codes in its description.
  • 404 — Not Found
  • 429 — Too many requests for this API key. Wait the number of seconds in the Retry-After header, then retry.
  • 500 — Internal Server Error

GET /compliance/summary

Get compliance summary

Requires permission: compliance:read

Responses

  • 200 — OK
    NameTypeRequiredDescription
    attestedintegerNo
    domainsentity.ControlPosture[]No
    failed_controlsintegerNo
    framework_idstringNo
    framework_namestringNo
    not_assessedintegerNo
    overall_scorenumberNonil when no control is assessed (no-data ≠ 0)
    passed_controlsintegerNo
    total_controlsintegerNo
  • 401 — Authentication failed: the API key is missing, malformed, unknown, revoked or expired.
  • 403 — Forbidden. The code field says why: insufficient_permissions (the key lacks the permission named in x-api-key-permission), api_key_not_allowed (API keys cannot call this endpoint), plan_limit (the tenant's plan does not include API keys, and the body has no limit_type; or the request hit a feature or usage limit of the plan, which limit_type names), tenant_suspended (the tenant is suspended), ip_not_allowed (the key is restricted to certain IP addresses and this request came from another one). An endpoint may name other codes in its description.
  • 429 — Too many requests for this API key. Wait the number of seconds in the Retry-After header, then retry.
  • 500 — Internal Server Error

Connectors

GET /connectors

List connectors

Requires permission: connectors:read

Parameters

NameInTypeRequiredDescription
typequerystringNoFilter by connector type
statusquerystringNoFilter by status

Responses

  • 200 — OK
    NameTypeRequiredDescription
    created_atstringNoCreation timestamp
    data_regionstringNoData residency region (eu, us, ap, global)
    dpa_signed_atstringNoWhen the DPA/BAA was signed
    dpa_statusstringNoDPA/BAA status (signed, pending, not_required)
    fetch_modeentity.FetchModeNoWhere resource fetching runs (origin or edge)
    idstringNoUnique identifier
    last_health_check_atstringNoTimestamp of the last health check
    last_health_errorstringNoLast health check error (nil = healthy)
    last_sync_atstringNoTimestamp of the last successful sync
    modeentity.ConnectorModeNo
    namestringNoHuman-readable connector name
    paused_by_systembooleanNoSystem-paused due to plan downgrade over-limit
    posture_scorenumberNoPolicy pass rate: percentage of enabled policies with no open findings
    statusentity.ConnectorStatusNoOperational state (active, inactive, error, configuring)
    tenant_idstringNoTenant that owns this connector
    typeentity.ConnectorTypeNoSaaS platform type (okta, cloudflare, gcp, workspace)
    updated_atstringNoLast update timestamp
    versionintegerNoOptimistic concurrency control version
  • 401 — Authentication failed: the API key is missing, malformed, unknown, revoked or expired.
  • 403 — Forbidden. The code field says why: insufficient_permissions (the key lacks the permission named in x-api-key-permission), api_key_not_allowed (API keys cannot call this endpoint), plan_limit (the tenant's plan does not include API keys, and the body has no limit_type; or the request hit a feature or usage limit of the plan, which limit_type names), tenant_suspended (the tenant is suspended), ip_not_allowed (the key is restricted to certain IP addresses and this request came from another one). An endpoint may name other codes in its description.
  • 429 — Too many requests for this API key. Wait the number of seconds in the Retry-After header, then retry.
  • 500 — Internal Server Error

POST /connectors

Create a connector

Requires permission: connectors:write

Request body (request.CreateConnectorRequest)

NameTypeRequiredDescription
configobjectYesProvider-specific configuration (JSON object)
fetch_modestringNoWhere resource fetching runs (origin or edge)
modestringNoRead/write mode; read_only is default
namestringYesHuman-readable name
typestringYesSaaS platform type

Responses

  • 201 — Created
    NameTypeRequiredDescription
    created_atstringNoCreation timestamp
    data_regionstringNoData residency region (eu, us, ap, global)
    dpa_signed_atstringNoWhen the DPA/BAA was signed
    dpa_statusstringNoDPA/BAA status (signed, pending, not_required)
    edge_supportresponse.EdgeSupportNo
    fetch_modeentity.FetchModeNoWhere resource fetching runs (origin or edge)
    idstringNoUnique identifier
    last_health_check_atstringNoTimestamp of the last health check
    last_health_errorstringNoLast health check error (nil = healthy)
    last_sync_atstringNoTimestamp of the last successful sync
    login_sourceresponse.LoginSourceInfoNo
    modeentity.ConnectorModeNo
    namestringNoHuman-readable connector name
    onboarding_scan_idstringNoOnboardingScanID is set only by POST /connectors when Create auto-started a scan.
    open_finding_countintegerNo
    paused_by_systembooleanNoSystem-paused due to plan downgrade over-limit
    posture_scorenumberNoPolicy pass rate: percentage of enabled policies with no open findings
    statusentity.ConnectorStatusNoOperational state (active, inactive, error, configuring)
    tenant_idstringNoTenant that owns this connector
    typeentity.ConnectorTypeNoSaaS platform type (okta, cloudflare, gcp, workspace)
    updated_atstringNoLast update timestamp
    versionintegerNoOptimistic concurrency control version
  • 400 — Bad Request
  • 401 — Authentication failed: the API key is missing, malformed, unknown, revoked or expired.
  • 403 — Forbidden. The code field says why: insufficient_permissions (the key lacks the permission named in x-api-key-permission), api_key_not_allowed (API keys cannot call this endpoint), plan_limit (the tenant's plan does not include API keys, and the body has no limit_type; or the request hit a feature or usage limit of the plan, which limit_type names), tenant_suspended (the tenant is suspended), ip_not_allowed (the key is restricted to certain IP addresses and this request came from another one). An endpoint may name other codes in its description.
  • 429 — Too many requests for this API key. Wait the number of seconds in the Retry-After header, then retry.
  • 500 — Internal Server Error

POST /connectors/bulk-test

Bulk test connectors

Requires permission: connectors:write

Request body (request.BulkTestConnectorsRequest)

NameTypeRequiredDescription
connector_idsstring[]Yes

Responses

  • 200 — OK
  • 400 — Bad Request
  • 401 — Authentication failed: the API key is missing, malformed, unknown, revoked or expired.
  • 403 — Forbidden. The code field says why: insufficient_permissions (the key lacks the permission named in x-api-key-permission), api_key_not_allowed (API keys cannot call this endpoint), plan_limit (the tenant's plan does not include API keys, and the body has no limit_type; or the request hit a feature or usage limit of the plan, which limit_type names), tenant_suspended (the tenant is suspended), ip_not_allowed (the key is restricted to certain IP addresses and this request came from another one). An endpoint may name other codes in its description.
  • 429 — Too many requests for this API key. Wait the number of seconds in the Retry-After header, then retry.
  • 500 — Internal Server Error

GET /connectors/{id}

Get a connector

Requires permission: connectors:read

Parameters

NameInTypeRequiredDescription
idpathstringYesConnector ID
includequerystringNoInclude additional data (config)

Responses

  • 200 — OK
    NameTypeRequiredDescription
    created_atstringNoCreation timestamp
    data_regionstringNoData residency region (eu, us, ap, global)
    dpa_signed_atstringNoWhen the DPA/BAA was signed
    dpa_statusstringNoDPA/BAA status (signed, pending, not_required)
    fetch_modeentity.FetchModeNoWhere resource fetching runs (origin or edge)
    idstringNoUnique identifier
    last_health_check_atstringNoTimestamp of the last health check
    last_health_errorstringNoLast health check error (nil = healthy)
    last_sync_atstringNoTimestamp of the last successful sync
    modeentity.ConnectorModeNo
    namestringNoHuman-readable connector name
    paused_by_systembooleanNoSystem-paused due to plan downgrade over-limit
    posture_scorenumberNoPolicy pass rate: percentage of enabled policies with no open findings
    statusentity.ConnectorStatusNoOperational state (active, inactive, error, configuring)
    tenant_idstringNoTenant that owns this connector
    typeentity.ConnectorTypeNoSaaS platform type (okta, cloudflare, gcp, workspace)
    updated_atstringNoLast update timestamp
    versionintegerNoOptimistic concurrency control version
  • 401 — Authentication failed: the API key is missing, malformed, unknown, revoked or expired.
  • 403 — Forbidden. The code field says why: insufficient_permissions (the key lacks the permission named in x-api-key-permission), api_key_not_allowed (API keys cannot call this endpoint), plan_limit (the tenant's plan does not include API keys, and the body has no limit_type; or the request hit a feature or usage limit of the plan, which limit_type names), tenant_suspended (the tenant is suspended), ip_not_allowed (the key is restricted to certain IP addresses and this request came from another one). An endpoint may name other codes in its description.
  • 404 — Not Found
  • 429 — Too many requests for this API key. Wait the number of seconds in the Retry-After header, then retry.
  • 500 — Internal Server Error

DELETE /connectors/{id}

Delete a connector

Requires permission: connectors:write

Parameters

NameInTypeRequiredDescription
idpathstringYesConnector ID

Responses

  • 204 — No Content
  • 401 — Authentication failed: the API key is missing, malformed, unknown, revoked or expired.
  • 403 — Forbidden. The code field says why: insufficient_permissions (the key lacks the permission named in x-api-key-permission), api_key_not_allowed (API keys cannot call this endpoint), plan_limit (the tenant's plan does not include API keys, and the body has no limit_type; or the request hit a feature or usage limit of the plan, which limit_type names), tenant_suspended (the tenant is suspended), ip_not_allowed (the key is restricted to certain IP addresses and this request came from another one). An endpoint may name other codes in its description.
  • 404 — Not Found
  • 409 — Scan in progress
  • 429 — Too many requests for this API key. Wait the number of seconds in the Retry-After header, then retry.
  • 500 — Internal Server Error

GET /connectors/{id}/content-scan-consent

Get content-scan consent

Requires permission: connectors:read

Parameters

NameInTypeRequiredDescription
idpathstringYesConnector ID

Responses

  • 200 — OK
    NameTypeRequiredDescription
    acknowledged_atstringNo
    acknowledgment_versionintegerNo
    actor_emailstringNo
    actor_identity_idstringNo
    connector_idstringNo
    created_atstringNo
    idstringNo
    needs_reconsentbooleanNo
    revoked_atstringNo
    revoked_bystringNo
    tenant_idstringNo
  • 401 — Authentication failed: the API key is missing, malformed, unknown, revoked or expired.
  • 403 — Forbidden. The code field says why: insufficient_permissions (the key lacks the permission named in x-api-key-permission), api_key_not_allowed (API keys cannot call this endpoint), plan_limit (the tenant's plan does not include API keys, and the body has no limit_type; or the request hit a feature or usage limit of the plan, which limit_type names), tenant_suspended (the tenant is suspended), ip_not_allowed (the key is restricted to certain IP addresses and this request came from another one). An endpoint may name other codes in its description.
  • 429 — Too many requests for this API key. Wait the number of seconds in the Retry-After header, then retry.

GET /connectors/{id}/identities

List connector identities

Requires permission: identities:read

Parameters

NameInTypeRequiredDescription
idpathstringYesConnector ID
statusquerystringNoFilter by status
emailquerystringNoFilter by email
rolequerystringNoFilter by role
identity_typequerystringNoFilter by identity type (human, service_account, bot, api_key, oauth_app)
is_non_humanquerybooleanNoFilter non-human identities only
searchquerystringNoSearch by name or email
limitqueryintegerNoPage size
offsetqueryintegerNoPage offset

Responses

  • 200 — OK
    NameTypeRequiredDescription
    dataentity.Identity[]No
    paginationentity.PaginationMetaNo
  • 401 — Authentication failed: the API key is missing, malformed, unknown, revoked or expired.
  • 403 — Forbidden. The code field says why: insufficient_permissions (the key lacks the permission named in x-api-key-permission), api_key_not_allowed (API keys cannot call this endpoint), plan_limit (the tenant's plan does not include API keys, and the body has no limit_type; or the request hit a feature or usage limit of the plan, which limit_type names), tenant_suspended (the tenant is suspended), ip_not_allowed (the key is restricted to certain IP addresses and this request came from another one). An endpoint may name other codes in its description.
  • 429 — Too many requests for this API key. Wait the number of seconds in the Retry-After header, then retry.
  • 500 — Internal Server Error

GET /connectors/{id}/identities/stats

Get connector identity stats

Requires permission: identities:read

Parameters

NameInTypeRequiredDescription
idpathstringYesConnector ID

Responses

  • 200 — OK
    NameTypeRequiredDescription
    active_countintegerNo
    admin_countintegerNo
    deprovisioned_countintegerNo
    dormant_countintegerNo
    mfa_enabled_countintegerNo
    nhi_by_typeobjectNo
    suspended_countintegerNo
    total_countintegerNo
    total_nhisintegerNo
  • 401 — Authentication failed: the API key is missing, malformed, unknown, revoked or expired.
  • 403 — Forbidden. The code field says why: insufficient_permissions (the key lacks the permission named in x-api-key-permission), api_key_not_allowed (API keys cannot call this endpoint), plan_limit (the tenant's plan does not include API keys, and the body has no limit_type; or the request hit a feature or usage limit of the plan, which limit_type names), tenant_suspended (the tenant is suspended), ip_not_allowed (the key is restricted to certain IP addresses and this request came from another one). An endpoint may name other codes in its description.
  • 429 — Too many requests for this API key. Wait the number of seconds in the Retry-After header, then retry.
  • 500 — Internal Server Error

GET /connectors/{id}/resource-types

List connector resource types

Requires permission: connectors:read

Parameters

NameInTypeRequiredDescription
idpathstringYesConnector ID

Responses

  • 200 — OK
    NameTypeRequiredDescription
    datastring[]No
  • 400 — Bad Request
  • 401 — Authentication failed: the API key is missing, malformed, unknown, revoked or expired.
  • 403 — Forbidden. The code field says why: insufficient_permissions (the key lacks the permission named in x-api-key-permission), api_key_not_allowed (API keys cannot call this endpoint), plan_limit (the tenant's plan does not include API keys, and the body has no limit_type; or the request hit a feature or usage limit of the plan, which limit_type names), tenant_suspended (the tenant is suspended), ip_not_allowed (the key is restricted to certain IP addresses and this request came from another one). An endpoint may name other codes in its description.
  • 404 — Not Found
  • 429 — Too many requests for this API key. Wait the number of seconds in the Retry-After header, then retry.
  • 500 — Internal Server Error

GET /connectors/{id}/scans

List connector scan history

Requires permission: scans:read

Parameters

NameInTypeRequiredDescription
idpathstringYesConnector ID
statusquerystringNoFilter by scan status
limitqueryintegerNoItems per page (default 100, max 1000)
offsetqueryintegerNoNumber of items to skip

Responses

  • 200 — OK
    NameTypeRequiredDescription
    dataresponse.ScanResponse[]No
    paginationentity.PaginationMetaNo
  • 401 — Authentication failed: the API key is missing, malformed, unknown, revoked or expired.
  • 403 — Forbidden. The code field says why: insufficient_permissions (the key lacks the permission named in x-api-key-permission), api_key_not_allowed (API keys cannot call this endpoint), plan_limit (the tenant's plan does not include API keys, and the body has no limit_type; or the request hit a feature or usage limit of the plan, which limit_type names), tenant_suspended (the tenant is suspended), ip_not_allowed (the key is restricted to certain IP addresses and this request came from another one). An endpoint may name other codes in its description.
  • 429 — Too many requests for this API key. Wait the number of seconds in the Retry-After header, then retry.
  • 500 — Internal Server Error

POST /connectors/{id}/test

Test a connector

Requires permission: connectors:write

Parameters

NameInTypeRequiredDescription
idpathstringYesConnector ID

Responses

  • 200 — OK
  • 400 — Bad Request
  • 401 — Authentication failed: the API key is missing, malformed, unknown, revoked or expired.
  • 403 — Forbidden. The code field says why: insufficient_permissions (the key lacks the permission named in x-api-key-permission), api_key_not_allowed (API keys cannot call this endpoint), plan_limit (the tenant's plan does not include API keys, and the body has no limit_type; or the request hit a feature or usage limit of the plan, which limit_type names), tenant_suspended (the tenant is suspended), ip_not_allowed (the key is restricted to certain IP addresses and this request came from another one). An endpoint may name other codes in its description.
  • 429 — Too many requests for this API key. Wait the number of seconds in the Retry-After header, then retry.
  • 500 — Internal Server Error

Dashboard

GET /dashboard/ai-risk

Get AI risk summary

Requires permission: ai_governance:read

Responses

  • 200 — OK
    NameTypeRequiredDescription
    by_subcategoryobjectNo
    high_risk_ai_appsintegerNo
    top_ai_apps_by_usersentity.ThirdPartyApp[]No
    total_ai_appsintegerNo
    trains_on_data_countintegerNo
    week_over_weekentity.AITrendNo
  • 401 — Authentication failed: the API key is missing, malformed, unknown, revoked or expired.
  • 403 — Forbidden. The code field says why: insufficient_permissions (the key lacks the permission named in x-api-key-permission), api_key_not_allowed (API keys cannot call this endpoint), plan_limit (the tenant's plan does not include API keys, and the body has no limit_type; or the request hit a feature or usage limit of the plan, which limit_type names), tenant_suspended (the tenant is suspended), ip_not_allowed (the key is restricted to certain IP addresses and this request came from another one). An endpoint may name other codes in its description.
  • 429 — Too many requests for this API key. Wait the number of seconds in the Retry-After header, then retry.
  • 500 — Internal Server Error

GET /dashboard/ai-security

Get AI security dashboard

Requires permission: ai_governance:read

Responses

  • 200 — OK
    NameTypeRequiredDescription
    ai_riskentity.AIRiskSummaryNo
    auto_remediation_statsentity.AISecurityAutoRemediationStatsNo
    data_exposureentity.AIDataExposure[]No
    governance_statusentity.ThirdPartyAppSummaryNo
    recent_remediationsentity.AISecurityRecentRemediation[]No
    risk_trendsentity.AISecurityRiskTrend[]No
    summaryentity.AISecurityAgentSummaryNo
    top_risk_agentsentity.AISecurityTopRiskAgent[]No
  • 401 — Authentication failed: the API key is missing, malformed, unknown, revoked or expired.
  • 403 — Forbidden. The code field says why: insufficient_permissions (the key lacks the permission named in x-api-key-permission), api_key_not_allowed (API keys cannot call this endpoint), plan_limit (the tenant's plan does not include API keys, and the body has no limit_type; or the request hit a feature or usage limit of the plan, which limit_type names), tenant_suspended (the tenant is suspended), ip_not_allowed (the key is restricted to certain IP addresses and this request came from another one). An endpoint may name other codes in its description.
  • 429 — Too many requests for this API key. Wait the number of seconds in the Retry-After header, then retry.
  • 500 — Internal Server Error

GET /dashboard/posture

Get security posture

Requires permission: findings:read

Responses

  • 200 — OK
    NameTypeRequiredDescription
    categoriesentity.PostureCategoryScore[]No
    compliance_scorenumberNo
    connector_healthentity.ConnectorHealthNo
    external_sharingentity.ExternalSharingSummaryNo
    finding_summaryentity.FindingSummaryNo
    gradeentity.PostureGradeNo
    identity_riskentity.IdentityRiskBriefNo
    last_scan_atstringNo
    overall_scorenumberNo
    recommendationsentity.PostureRecommendation[]No
    score_delta_30dnumberNo
    score_delta_7dnumberNo
    third_party_appsentity.ThirdPartyAppSummaryNo
  • 401 — Authentication failed: the API key is missing, malformed, unknown, revoked or expired.
  • 403 — Forbidden. The code field says why: insufficient_permissions (the key lacks the permission named in x-api-key-permission), api_key_not_allowed (API keys cannot call this endpoint), plan_limit (the tenant's plan does not include API keys, and the body has no limit_type; or the request hit a feature or usage limit of the plan, which limit_type names), tenant_suspended (the tenant is suspended), ip_not_allowed (the key is restricted to certain IP addresses and this request came from another one). An endpoint may name other codes in its description.
  • 429 — Too many requests for this API key. Wait the number of seconds in the Retry-After header, then retry.
  • 500 — Internal Server Error

GET /dashboard/proxy-intel

Proxy intelligence summary

Requires permission: geo:read

Responses

  • 200 — OK
    NameTypeRequiredDescription
    datacenter_loginsintegerNo
    identities_with_proxyintegerNo
    residential_loginsintegerNo
    top_countriesentity.ProxyCountryCount[]No
    top_providersentity.ProxyProviderCount[]No
    total_proxy_loginsintegerNo
    unique_proxy_ipsintegerNo
  • 401 — Authentication failed: the API key is missing, malformed, unknown, revoked or expired.
  • 403 — Forbidden. The code field says why: insufficient_permissions (the key lacks the permission named in x-api-key-permission), api_key_not_allowed (API keys cannot call this endpoint), plan_limit (the tenant's plan does not include API keys, and the body has no limit_type; or the request hit a feature or usage limit of the plan, which limit_type names), tenant_suspended (the tenant is suspended), ip_not_allowed (the key is restricted to certain IP addresses and this request came from another one). An endpoint may name other codes in its description.
  • 429 — Too many requests for this API key. Wait the number of seconds in the Retry-After header, then retry.

GET /dashboard/remediation-activity

Get remediation activity

Requires permission: findings:read

Parameters

NameInTypeRequiredDescription
windowqueryintegerNoWindow in days (default 14, max 90)

Responses

  • 200 — OK
    NameTypeRequiredDescription
    by_connectorentity.RemediationGroup[]No
    by_domainentity.RemediationGroup[]No
    driftedintegerNo
    remediatedintegerNo
    rowsentity.RemediationActivityRow[]No
    window_daysintegerNo
  • 400 — Bad Request
  • 401 — Authentication failed: the API key is missing, malformed, unknown, revoked or expired.
  • 403 — Forbidden. The code field says why: insufficient_permissions (the key lacks the permission named in x-api-key-permission), api_key_not_allowed (API keys cannot call this endpoint), plan_limit (the tenant's plan does not include API keys, and the body has no limit_type; or the request hit a feature or usage limit of the plan, which limit_type names), tenant_suspended (the tenant is suspended), ip_not_allowed (the key is restricted to certain IP addresses and this request came from another one). An endpoint may name other codes in its description.
  • 429 — Too many requests for this API key. Wait the number of seconds in the Retry-After header, then retry.
  • 500 — Internal Server Error

GET /dashboard/risk-trends

Get risk trends

Requires permission: findings:read

Responses

  • 200 — OK
    NameTypeRequiredDescription
    change_percentnumberNoPercentage change (negative = improving)
    current_scorenumberNoMost recent aggregate score
    directionstringNoOverall trend: improving, stable, degrading
    high_risk_changeintegerNoChange in high-risk identity count
    pointsentity.RiskTrendPoint[]NoDaily trend data points
    previous_scorenumberNoScore from comparison period
  • 401 — Authentication failed: the API key is missing, malformed, unknown, revoked or expired.
  • 403 — Forbidden. The code field says why: insufficient_permissions (the key lacks the permission named in x-api-key-permission), api_key_not_allowed (API keys cannot call this endpoint), plan_limit (the tenant's plan does not include API keys, and the body has no limit_type; or the request hit a feature or usage limit of the plan, which limit_type names), tenant_suspended (the tenant is suspended), ip_not_allowed (the key is restricted to certain IP addresses and this request came from another one). An endpoint may name other codes in its description.
  • 429 — Too many requests for this API key. Wait the number of seconds in the Retry-After header, then retry.
  • 500 — Internal Server Error

GET /dashboard/score-history

Get composite score history

Requires permission: findings:read

Parameters

NameInTypeRequiredDescription
sincequerystringNoStart date (RFC3339)

Responses

  • 200 — OK
    NameTypeRequiredDescription
    daystringNoYYYY-MM-DD, UTC
    gradeentity.PostureGradeNo
    scorenumberNo
  • 400 — Bad Request
  • 401 — Authentication failed: the API key is missing, malformed, unknown, revoked or expired.
  • 403 — Forbidden. The code field says why: insufficient_permissions (the key lacks the permission named in x-api-key-permission), api_key_not_allowed (API keys cannot call this endpoint), plan_limit (the tenant's plan does not include API keys, and the body has no limit_type; or the request hit a feature or usage limit of the plan, which limit_type names), tenant_suspended (the tenant is suspended), ip_not_allowed (the key is restricted to certain IP addresses and this request came from another one). An endpoint may name other codes in its description.
  • 429 — Too many requests for this API key. Wait the number of seconds in the Retry-After header, then retry.
  • 500 — Internal Server Error

GET /dashboard/summary

Get dashboard summary

Requires permission: findings:read

Responses

  • 200 — OK
    NameTypeRequiredDescription
    frameworksentity.FrameworkPosture[]No
    postureentity.DashboardPostureNo
    top_risksentity.Finding[]No
  • 401 — Authentication failed: the API key is missing, malformed, unknown, revoked or expired.
  • 403 — Forbidden. The code field says why: insufficient_permissions (the key lacks the permission named in x-api-key-permission), api_key_not_allowed (API keys cannot call this endpoint), plan_limit (the tenant's plan does not include API keys, and the body has no limit_type; or the request hit a feature or usage limit of the plan, which limit_type names), tenant_suspended (the tenant is suspended), ip_not_allowed (the key is restricted to certain IP addresses and this request came from another one). An endpoint may name other codes in its description.
  • 429 — Too many requests for this API key. Wait the number of seconds in the Retry-After header, then retry.
  • 500 — Internal Server Error

GET /dashboard/trends

Get posture trends

Requires permission: findings:read

Parameters

NameInTypeRequiredDescription
sincequerystringNoStart date (RFC3339)
connector_idquerystringNoFilter by connector ID

Responses

  • 200 — OK
    NameTypeRequiredDescription
    captured_atstringNo
    compliance_scorenumberNo
    findings_openintegerNo
    framework_namestringNoFrameworkName is populated only on the per-connector series (the primary framework the connector snapshots cover); it is omitted on the tenant-wide composite series.
    overall_scorenumberNoOverallScore is DEPRECATED: a populated alias of ComplianceScore, kept through all of Wave A so the UI ScoreTimeline (plots y="overall_score") and the executive report keep rendering until Task 10 repoints them at compliance_score. It always mirrors ComplianceScore (same value, same null). Removing it is a Wave-B cleanup — do not drop it before the UI cutover.
  • 401 — Authentication failed: the API key is missing, malformed, unknown, revoked or expired.
  • 403 — Forbidden. The code field says why: insufficient_permissions (the key lacks the permission named in x-api-key-permission), api_key_not_allowed (API keys cannot call this endpoint), plan_limit (the tenant's plan does not include API keys, and the body has no limit_type; or the request hit a feature or usage limit of the plan, which limit_type names), tenant_suspended (the tenant is suspended), ip_not_allowed (the key is restricted to certain IP addresses and this request came from another one). An endpoint may name other codes in its description.
  • 429 — Too many requests for this API key. Wait the number of seconds in the Retry-After header, then retry.
  • 500 — Internal Server Error

dispositions

POST /identities/bulk-disposition

Bulk-set triage disposition

Requires permission: identities:write

Request body (request.BulkSetDispositionRequest)

NameTypeRequiredDescription
dispositionstringYes
idsstring[]Yes
notestringNo

Responses

  • 200 — OK
    NameTypeRequiredDescription
    updatedintegerNo
  • 400 — Bad Request
  • 401 — Authentication failed: the API key is missing, malformed, unknown, revoked or expired.
  • 403 — Forbidden. The code field says why: insufficient_permissions (the key lacks the permission named in x-api-key-permission), api_key_not_allowed (API keys cannot call this endpoint), plan_limit (the tenant's plan does not include API keys, and the body has no limit_type; or the request hit a feature or usage limit of the plan, which limit_type names), tenant_suspended (the tenant is suspended), ip_not_allowed (the key is restricted to certain IP addresses and this request came from another one). An endpoint may name other codes in its description.
  • 429 — Too many requests for this API key. Wait the number of seconds in the Retry-After header, then retry.
  • 500 — Internal Server Error

POST /identities/dispositions/batch

Batch-read triage dispositions

Requires permission: identities:read

Request body (request.BatchDispositionRequest)

NameTypeRequiredDescription
idsstring[]Yes

Responses

  • 200 — OK
    NameTypeRequiredDescription
    dispositionsobjectNo
  • 400 — Bad Request
  • 401 — Authentication failed: the API key is missing, malformed, unknown, revoked or expired.
  • 403 — Forbidden. The code field says why: insufficient_permissions (the key lacks the permission named in x-api-key-permission), api_key_not_allowed (API keys cannot call this endpoint), plan_limit (the tenant's plan does not include API keys, and the body has no limit_type; or the request hit a feature or usage limit of the plan, which limit_type names), tenant_suspended (the tenant is suspended), ip_not_allowed (the key is restricted to certain IP addresses and this request came from another one). An endpoint may name other codes in its description.
  • 429 — Too many requests for this API key. Wait the number of seconds in the Retry-After header, then retry.
  • 500 — Internal Server Error

PATCH /identities/{id}/disposition

Set the triage disposition of an inventory item

Requires permission: identities:write

Parameters

NameInTypeRequiredDescription
idpathstringYesIdentity or resource ID (UUID)

Request body (request.SetDispositionRequest)

NameTypeRequiredDescription
dispositionstringYes
notestringNo
versionintegerNo

Responses

  • 200 — OK
    NameTypeRequiredDescription
    dispositionstringNo
    entity_idstringNo
    entity_typestringNo
    idstringNo
    notestringNo
    set_atstringNo
    set_bystringNo
    tenant_idstringNo
    versionintegerNo
  • 400 — Bad Request
  • 401 — Authentication failed: the API key is missing, malformed, unknown, revoked or expired.
  • 403 — Forbidden. The code field says why: insufficient_permissions (the key lacks the permission named in x-api-key-permission), api_key_not_allowed (API keys cannot call this endpoint), plan_limit (the tenant's plan does not include API keys, and the body has no limit_type; or the request hit a feature or usage limit of the plan, which limit_type names), tenant_suspended (the tenant is suspended), ip_not_allowed (the key is restricted to certain IP addresses and this request came from another one). An endpoint may name other codes in its description.
  • 409 — Conflict
  • 429 — Too many requests for this API key. Wait the number of seconds in the Retry-After header, then retry.
  • 500 — Internal Server Error

POST /resources/bulk-disposition

Bulk-set triage disposition

Requires permission: resources:write

Request body (request.BulkSetDispositionRequest)

NameTypeRequiredDescription
dispositionstringYes
idsstring[]Yes
notestringNo

Responses

  • 200 — OK
    NameTypeRequiredDescription
    updatedintegerNo
  • 400 — Bad Request
  • 401 — Authentication failed: the API key is missing, malformed, unknown, revoked or expired.
  • 403 — Forbidden. The code field says why: insufficient_permissions (the key lacks the permission named in x-api-key-permission), api_key_not_allowed (API keys cannot call this endpoint), plan_limit (the tenant's plan does not include API keys, and the body has no limit_type; or the request hit a feature or usage limit of the plan, which limit_type names), tenant_suspended (the tenant is suspended), ip_not_allowed (the key is restricted to certain IP addresses and this request came from another one). An endpoint may name other codes in its description.
  • 429 — Too many requests for this API key. Wait the number of seconds in the Retry-After header, then retry.
  • 500 — Internal Server Error

POST /resources/dispositions/batch

Batch-read triage dispositions

Requires permission: resources:read

Request body (request.BatchDispositionRequest)

NameTypeRequiredDescription
idsstring[]Yes

Responses

  • 200 — OK
    NameTypeRequiredDescription
    dispositionsobjectNo
  • 400 — Bad Request
  • 401 — Authentication failed: the API key is missing, malformed, unknown, revoked or expired.
  • 403 — Forbidden. The code field says why: insufficient_permissions (the key lacks the permission named in x-api-key-permission), api_key_not_allowed (API keys cannot call this endpoint), plan_limit (the tenant's plan does not include API keys, and the body has no limit_type; or the request hit a feature or usage limit of the plan, which limit_type names), tenant_suspended (the tenant is suspended), ip_not_allowed (the key is restricted to certain IP addresses and this request came from another one). An endpoint may name other codes in its description.
  • 429 — Too many requests for this API key. Wait the number of seconds in the Retry-After header, then retry.
  • 500 — Internal Server Error

PATCH /resources/{id}/disposition

Set the triage disposition of an inventory item

Requires permission: resources:write

Parameters

NameInTypeRequiredDescription
idpathstringYesIdentity or resource ID (UUID)

Request body (request.SetDispositionRequest)

NameTypeRequiredDescription
dispositionstringYes
notestringNo
versionintegerNo

Responses

  • 200 — OK
    NameTypeRequiredDescription
    dispositionstringNo
    entity_idstringNo
    entity_typestringNo
    idstringNo
    notestringNo
    set_atstringNo
    set_bystringNo
    tenant_idstringNo
    versionintegerNo
  • 400 — Bad Request
  • 401 — Authentication failed: the API key is missing, malformed, unknown, revoked or expired.
  • 403 — Forbidden. The code field says why: insufficient_permissions (the key lacks the permission named in x-api-key-permission), api_key_not_allowed (API keys cannot call this endpoint), plan_limit (the tenant's plan does not include API keys, and the body has no limit_type; or the request hit a feature or usage limit of the plan, which limit_type names), tenant_suspended (the tenant is suspended), ip_not_allowed (the key is restricted to certain IP addresses and this request came from another one). An endpoint may name other codes in its description.
  • 409 — Conflict
  • 429 — Too many requests for this API key. Wait the number of seconds in the Retry-After header, then retry.
  • 500 — Internal Server Error

Exceptions

GET /exceptions

List exceptions

Requires permission: exceptions:read

Parameters

NameInTypeRequiredDescription
finding_idquerystringNoFilter by finding ID
statusquerystringNoFilter by status

Responses

  • 200 — OK
    NameTypeRequiredDescription
    approval_chain_idstringNoOptional approval chain reference
    approved_bystringNoPerson who approved the exception
    created_atstringNoWhen the exception was created
    created_by_emailstringNoWho created the exception: the creator's email, or `API key <name>` when an API key created it
    expires_atstringNoWhen the exception expires
    finding_idstringNoAssociated finding
    idstringNoUnique exception identifier
    justificationstringNoReason for the exception
    revoked_atstringNoWhen the exception was revoked (null if not revoked)
    statusentity.ExceptionStatusNoLifecycle state (active, expired, revoked)
    tenant_idstringNoOwning tenant
    updated_atstringNoWhen the exception was last updated
    versionintegerNoOptimistic concurrency control version
  • 401 — Authentication failed: the API key is missing, malformed, unknown, revoked or expired.
  • 403 — Forbidden. The code field says why: insufficient_permissions (the key lacks the permission named in x-api-key-permission), api_key_not_allowed (API keys cannot call this endpoint), plan_limit (the tenant's plan does not include API keys, and the body has no limit_type; or the request hit a feature or usage limit of the plan, which limit_type names), tenant_suspended (the tenant is suspended), ip_not_allowed (the key is restricted to certain IP addresses and this request came from another one). An endpoint may name other codes in its description.
  • 429 — Too many requests for this API key. Wait the number of seconds in the Retry-After header, then retry.
  • 500 — Internal Server Error

POST /exceptions

Create an exception

Requires permission: exceptions:write

Request body (request.CreateExceptionRequest)

NameTypeRequiredDescription
approved_bystringNoPerson who approved (optional when approval chain applies)
expires_atstringYesExpiration date (RFC3339)
finding_idstringYesAssociated finding
justificationstringYesReason for the exception

Responses

  • 201 — Created
    NameTypeRequiredDescription
    approval_chain_idstringNoOptional approval chain reference
    approved_bystringNoPerson who approved the exception
    created_atstringNoWhen the exception was created
    created_by_emailstringNoWho created the exception: the creator's email, or `API key <name>` when an API key created it
    expires_atstringNoWhen the exception expires
    finding_idstringNoAssociated finding
    idstringNoUnique exception identifier
    justificationstringNoReason for the exception
    revoked_atstringNoWhen the exception was revoked (null if not revoked)
    statusentity.ExceptionStatusNoLifecycle state (active, expired, revoked)
    tenant_idstringNoOwning tenant
    updated_atstringNoWhen the exception was last updated
    versionintegerNoOptimistic concurrency control version
  • 400 — Bad Request
  • 401 — Authentication failed: the API key is missing, malformed, unknown, revoked or expired.
  • 403 — Forbidden. The code field says why: insufficient_permissions (the key lacks the permission named in x-api-key-permission), api_key_not_allowed (API keys cannot call this endpoint), plan_limit (the tenant's plan does not include API keys, and the body has no limit_type; or the request hit a feature or usage limit of the plan, which limit_type names), tenant_suspended (the tenant is suspended), ip_not_allowed (the key is restricted to certain IP addresses and this request came from another one). An endpoint may name other codes in its description.
  • 404 — Not Found
  • 409 — Conflict
  • 429 — Too many requests for this API key. Wait the number of seconds in the Retry-After header, then retry.

GET /exceptions/{id}

Get an exception

Requires permission: exceptions:read

Parameters

NameInTypeRequiredDescription
idpathstringYesException ID

Responses

  • 200 — OK
    NameTypeRequiredDescription
    approval_chain_idstringNoOptional approval chain reference
    approved_bystringNoPerson who approved the exception
    created_atstringNoWhen the exception was created
    created_by_emailstringNoWho created the exception: the creator's email, or `API key <name>` when an API key created it
    expires_atstringNoWhen the exception expires
    finding_idstringNoAssociated finding
    idstringNoUnique exception identifier
    justificationstringNoReason for the exception
    revoked_atstringNoWhen the exception was revoked (null if not revoked)
    statusentity.ExceptionStatusNoLifecycle state (active, expired, revoked)
    tenant_idstringNoOwning tenant
    updated_atstringNoWhen the exception was last updated
    versionintegerNoOptimistic concurrency control version
  • 401 — Authentication failed: the API key is missing, malformed, unknown, revoked or expired.
  • 403 — Forbidden. The code field says why: insufficient_permissions (the key lacks the permission named in x-api-key-permission), api_key_not_allowed (API keys cannot call this endpoint), plan_limit (the tenant's plan does not include API keys, and the body has no limit_type; or the request hit a feature or usage limit of the plan, which limit_type names), tenant_suspended (the tenant is suspended), ip_not_allowed (the key is restricted to certain IP addresses and this request came from another one). An endpoint may name other codes in its description.
  • 404 — Not Found
  • 429 — Too many requests for this API key. Wait the number of seconds in the Retry-After header, then retry.

GET /exceptions/{id}/approvals

Get exception approvals

Requires permission: exceptions:read

Parameters

NameInTypeRequiredDescription
idpathstringYesException ID

Responses

  • 200 — OK
    NameTypeRequiredDescription
    approver_emailstringNo
    approver_idstringNo
    assigned_approver_emailstringNo
    assigned_delegate_emailstringNo
    commentstringNo
    created_atstringNo
    decided_atstringNo
    decisionstringNo
    delegated_atstringNo
    exception_idstringNo
    idstringNo
    is_delegatebooleanNo
    severity_override_idstringNo
    step_orderintegerNo
    tenant_idstringNo
  • 401 — Authentication failed: the API key is missing, malformed, unknown, revoked or expired.
  • 403 — Forbidden. The code field says why: insufficient_permissions (the key lacks the permission named in x-api-key-permission), api_key_not_allowed (API keys cannot call this endpoint), plan_limit (the tenant's plan does not include API keys, and the body has no limit_type; or the request hit a feature or usage limit of the plan, which limit_type names), tenant_suspended (the tenant is suspended), ip_not_allowed (the key is restricted to certain IP addresses and this request came from another one). An endpoint may name other codes in its description.
  • 404 — Not Found
  • 429 — Too many requests for this API key. Wait the number of seconds in the Retry-After header, then retry.
  • 500 — Internal Server Error

POST /exceptions/{id}/revoke

Revoke an exception

Requires permission: exceptions:write

Parameters

NameInTypeRequiredDescription
idpathstringYesException ID

Responses

  • 204 — No Content
  • 400 — Bad Request
  • 401 — Authentication failed: the API key is missing, malformed, unknown, revoked or expired.
  • 403 — Forbidden. The code field says why: insufficient_permissions (the key lacks the permission named in x-api-key-permission), api_key_not_allowed (API keys cannot call this endpoint), plan_limit (the tenant's plan does not include API keys, and the body has no limit_type; or the request hit a feature or usage limit of the plan, which limit_type names), tenant_suspended (the tenant is suspended), ip_not_allowed (the key is restricted to certain IP addresses and this request came from another one). An endpoint may name other codes in its description.
  • 404 — Not Found
  • 429 — Too many requests for this API key. Wait the number of seconds in the Retry-After header, then retry.
  • 500 — Internal Server Error

Findings

GET /findings

List findings

Requires permission: findings:read

Parameters

NameInTypeRequiredDescription
connector_idquerystringNoFilter by connector ID (comma-separated for multiple)
scan_idquerystringNoFilter by scan ID
severityquerystringNoFilter by severity (comma-separated)
statusquerystringNoFilter by status (comma-separated)
policy_idquerystringNoFilter by policy ID (comma-separated for multiple)
resource_typequerystringNoFilter by resource type (comma-separated for multiple)
framework_idquerystringNoFilter by compliance framework ID
control_idquerystringNoFilter by compliance control ID
qquerystringNoText search across title, resource_name, description
assignee_idquerystringNoFilter by assignee: a team member ID, or 'unassigned' for findings with no assignee
categoryquerystringNoFilter by policy category (comma-separated for multiple)
connector_typequerystringNoFilter by connector type
resource_idquerystringNoFilter by resource ID
priority_minquerynumberNoMinimum priority score (0-100)
priority_maxquerynumberNoMaximum priority score (0-100)
first_seen_afterquerystringNoFindings first seen after (RFC 3339)
first_seen_beforequerystringNoFindings first seen before (RFC 3339)
last_seen_afterquerystringNoFindings last seen after (RFC 3339)
last_seen_beforequerystringNoFindings last seen before (RFC 3339)
resolved_afterquerystringNoFindings resolved after (RFC 3339)
resolved_beforequerystringNoFindings resolved before (RFC 3339)
driftquerystringNoFilter for drifted findings
driftedquerystringNoAlias for drift
overduequerystringNoFilter for SLA-overdue findings
suppression_sourcequerystringNoFilter by suppression source; empty matches never-suppressed findings
group_byquerystringNoGroup findings by dimension
limitqueryintegerNoItems per page (default 100, max 1000)
cursorquerystringNoOpaque keyset cursor for the next page (omit for first page)
sort_byquerystringNoSort column
sort_orderquerystringNoSort direction

Responses

  • 200 — Cursor-paginated findings (FindingGroupPagedResult when group_by is set)
    NameTypeRequiredDescription
    dataentity.Finding[]No
    paginationentity.CursorMetaNo
    withheldentity.SeverityCountsNoset only when a plan visible-window truncated the page
  • 400 — Bad Request
  • 401 — Authentication failed: the API key is missing, malformed, unknown, revoked or expired.
  • 403 — Forbidden. The code field says why: insufficient_permissions (the key lacks the permission named in x-api-key-permission), api_key_not_allowed (API keys cannot call this endpoint), plan_limit (the tenant's plan does not include API keys, and the body has no limit_type; or the request hit a feature or usage limit of the plan, which limit_type names), tenant_suspended (the tenant is suspended), ip_not_allowed (the key is restricted to certain IP addresses and this request came from another one). An endpoint may name other codes in its description.
  • 429 — Too many requests for this API key. Wait the number of seconds in the Retry-After header, then retry.
  • 500 — Internal Server Error

POST /findings/bulk-action

Bulk action on finding group

Requires permission: findings:write

Request body (request.BulkFindingGroupAction)

NameTypeRequiredDescription
actionstringYes
connector_idstringYes
policy_idstringYes
severityentity.SeverityNo

Responses

  • 200 — affected count
  • 400 — Bad Request
  • 401 — Authentication failed: the API key is missing, malformed, unknown, revoked or expired.
  • 403 — Forbidden. The code field says why: insufficient_permissions (the key lacks the permission named in x-api-key-permission), api_key_not_allowed (API keys cannot call this endpoint), plan_limit (the tenant's plan does not include API keys, and the body has no limit_type; or the request hit a feature or usage limit of the plan, which limit_type names), tenant_suspended (the tenant is suspended), ip_not_allowed (the key is restricted to certain IP addresses and this request came from another one). An endpoint may name other codes in its description.
  • 429 — Too many requests for this API key. Wait the number of seconds in the Retry-After header, then retry.
  • 500 — Internal Server Error

PATCH /findings/bulk-status

Bulk update finding statuses

Requires permission: findings:write

Request body (request.BulkUpdateFindingStatusRequest)

NameTypeRequiredDescription
finding_idsstring[]YesFinding IDs to update
statusstringYes

Responses

  • 200 — updated count
  • 400 — Bad Request
  • 401 — Authentication failed: the API key is missing, malformed, unknown, revoked or expired.
  • 403 — Forbidden. The code field says why: insufficient_permissions (the key lacks the permission named in x-api-key-permission), api_key_not_allowed (API keys cannot call this endpoint), plan_limit (the tenant's plan does not include API keys, and the body has no limit_type; or the request hit a feature or usage limit of the plan, which limit_type names), tenant_suspended (the tenant is suspended), ip_not_allowed (the key is restricted to certain IP addresses and this request came from another one). An endpoint may name other codes in its description.
  • 429 — Too many requests for this API key. Wait the number of seconds in the Retry-After header, then retry.
  • 500 — Internal Server Error

GET /findings/count

Count findings

Requires permission: findings:read

Parameters

NameInTypeRequiredDescription
connector_idquerystringNoFilter by connector ID (comma-separated for multiple)
severityquerystringNoFilter by severity (comma-separated)
statusquerystringNoFilter by status (comma-separated)
policy_idquerystringNoFilter by policy ID (comma-separated for multiple)
resource_typequerystringNoFilter by resource type (comma-separated for multiple)
framework_idquerystringNoFilter by compliance framework ID
control_idquerystringNoFilter by compliance control ID
qquerystringNoText search
assignee_idquerystringNoFilter by assignee: a team member ID, or 'unassigned' for findings with no assignee
categoryquerystringNoFilter by policy category (comma-separated for multiple)
connector_typequerystringNoFilter by connector type
resource_idquerystringNoFilter by resource ID
priority_minquerynumberNoMinimum priority score (0-100)
priority_maxquerynumberNoMaximum priority score (0-100)
first_seen_afterquerystringNoFindings first seen after (RFC 3339)
first_seen_beforequerystringNoFindings first seen before (RFC 3339)
last_seen_afterquerystringNoFindings last seen after (RFC 3339)
last_seen_beforequerystringNoFindings last seen before (RFC 3339)
resolved_afterquerystringNoFindings resolved after (RFC 3339)
resolved_beforequerystringNoFindings resolved before (RFC 3339)
driftquerystringNoFilter for drifted findings
driftedquerystringNoAlias for drift
overduequerystringNoFilter for SLA-overdue findings

Responses

  • 200 — total count
    NameTypeRequiredDescription
    totalintegerNo
  • 400 — Bad Request
  • 401 — Authentication failed: the API key is missing, malformed, unknown, revoked or expired.
  • 403 — Forbidden. The code field says why: insufficient_permissions (the key lacks the permission named in x-api-key-permission), api_key_not_allowed (API keys cannot call this endpoint), plan_limit (the tenant's plan does not include API keys, and the body has no limit_type; or the request hit a feature or usage limit of the plan, which limit_type names), tenant_suspended (the tenant is suspended), ip_not_allowed (the key is restricted to certain IP addresses and this request came from another one). An endpoint may name other codes in its description.
  • 429 — Too many requests for this API key. Wait the number of seconds in the Retry-After header, then retry.
  • 500 — Internal Server Error

POST /findings/export

Create finding export

Requires permission: findings:read

Request body (request.CreateFindingExportRequest)

NameTypeRequiredDescription
filtersrequest.FindingExportFiltersNoTyped export filters
formatstringYesExport format (csv or ndjson)

Responses

  • 201 — Created
    NameTypeRequiredDescription
    created_atstringNo
    error_messagestringNo
    expires_atstringNo
    file_namestringNo
    file_sizeintegerNo
    filtersobjectNo
    formatstringNo
    idstringNo
    record_countintegerNo
    statusentity.FindingExportStatusNo
    tenant_idstringNo
  • 400 — Bad Request
  • 401 — Authentication failed: the API key is missing, malformed, unknown, revoked or expired.
  • 403 — Forbidden. The code field says why: insufficient_permissions (the key lacks the permission named in x-api-key-permission), api_key_not_allowed (API keys cannot call this endpoint), plan_limit (the tenant's plan does not include API keys, and the body has no limit_type; or the request hit a feature or usage limit of the plan, which limit_type names), tenant_suspended (the tenant is suspended), ip_not_allowed (the key is restricted to certain IP addresses and this request came from another one). An endpoint may name other codes in its description.
  • 429 — Too many requests for this API key. Wait the number of seconds in the Retry-After header, then retry.
  • 500 — Internal Server Error

GET /findings/export/{id}

Get finding export status

Requires permission: findings:read

Parameters

NameInTypeRequiredDescription
idpathstringYesExport ID

Responses

  • 200 — OK
    NameTypeRequiredDescription
    created_atstringNo
    error_messagestringNo
    expires_atstringNo
    file_namestringNo
    file_sizeintegerNo
    filtersobjectNo
    formatstringNo
    idstringNo
    record_countintegerNo
    statusentity.FindingExportStatusNo
    tenant_idstringNo
  • 401 — Authentication failed: the API key is missing, malformed, unknown, revoked or expired.
  • 403 — Forbidden. The code field says why: insufficient_permissions (the key lacks the permission named in x-api-key-permission), api_key_not_allowed (API keys cannot call this endpoint), plan_limit (the tenant's plan does not include API keys, and the body has no limit_type; or the request hit a feature or usage limit of the plan, which limit_type names), tenant_suspended (the tenant is suspended), ip_not_allowed (the key is restricted to certain IP addresses and this request came from another one). An endpoint may name other codes in its description.
  • 404 — Not Found
  • 429 — Too many requests for this API key. Wait the number of seconds in the Retry-After header, then retry.
  • 500 — Internal Server Error

GET /findings/export/{id}/download

Download finding export

Requires permission: findings:read

Parameters

NameInTypeRequiredDescription
idpathstringYesExport ID

Responses

  • 200 — OK
  • 400 — Bad Request
  • 401 — Authentication failed: the API key is missing, malformed, unknown, revoked or expired.
  • 403 — Forbidden. The code field says why: insufficient_permissions (the key lacks the permission named in x-api-key-permission), api_key_not_allowed (API keys cannot call this endpoint), plan_limit (the tenant's plan does not include API keys, and the body has no limit_type; or the request hit a feature or usage limit of the plan, which limit_type names), tenant_suspended (the tenant is suspended), ip_not_allowed (the key is restricted to certain IP addresses and this request came from another one). An endpoint may name other codes in its description.
  • 404 — Not Found
  • 429 — Too many requests for this API key. Wait the number of seconds in the Retry-After header, then retry.
  • 500 — Internal Server Error

GET /findings/{id}

Get a finding

Requires permission: findings:read

Parameters

NameInTypeRequiredDescription
idpathstringYesFinding ID

Responses

  • 200 — OK
    NameTypeRequiredDescription
    assigned_atstringNoWhen the finding was assigned
    assignee_idstringNoAssigned team member ID
    categorystringNoCategory of the policy that raised the finding (e.g. mfa). Omitted where the response does not include it.
    compliance_refsentity.ComplianceRef[]NoMapped compliance framework controls — populated by a separate code path, not in findingColumns
    connector_idstringNoConnector where the finding was detected
    descriptionstringNoDetailed explanation
    driftedbooleanNoTrue only when the latest scan that saw this finding re-opened it after resolution (configuration drift); regression_count counts every re-open
    first_seen_atstringNoWhen the finding was first detected
    idstringNoUnique finding identifier
    last_resolved_atstringNoWhen this finding was last resolved before the current regression
    last_seen_atstringNoWhen the finding was last observed
    policy_idstringNoPolicy that triggered the finding
    policy_uuidstringNoNative UUID copy of PolicyID for index-only policy joins; NULL for non-UUID policy IDs
    priority_factorsstring[]NoContributing factors (e.g. "severity:critical", "privileged_user")
    priority_scorenumberNoComposite priority score (0-99.99)
    regression_countintegerNoNumber of times this finding has drifted back to open
    remediation_infoentity.RemediationInfoNoUnified remediation payload — populated by scanner, consumed by all delivery channels
    resolved_atstringNoWhen the finding was resolved (null if still open)
    resource_idstringNoIdentifier of the affected resource
    resource_namestringNoHuman-readable name of the affected resource
    resource_typestringNoType of affected resource
    scan_idstringNoScan that produced this finding
    severityentity.SeverityNoSeverity level (critical, high, medium, low, info)
    statusentity.FindingStatusNoLifecycle state (open, resolved, suppressed, accepted)
    suppression_sourcestringNo'sso_coverage' when the overlay suppressed this finding; empty for a human's manual suppression
    tenant_idstringNoOwning tenant
    titlestringNoShort summary of the finding
    verification_requested_atstringNoWhen "I fixed this" was clicked
    versionintegerNoOptimistic concurrency control version
  • 401 — Authentication failed: the API key is missing, malformed, unknown, revoked or expired.
  • 403 — Forbidden. The code field says why: insufficient_permissions (the key lacks the permission named in x-api-key-permission), api_key_not_allowed (API keys cannot call this endpoint), plan_limit (the tenant's plan does not include API keys, and the body has no limit_type; or the request hit a feature or usage limit of the plan, which limit_type names), tenant_suspended (the tenant is suspended), ip_not_allowed (the key is restricted to certain IP addresses and this request came from another one). An endpoint may name other codes in its description.
  • 404 — Not Found
  • 429 — Too many requests for this API key. Wait the number of seconds in the Retry-After header, then retry.
  • 500 — Internal Server Error

PATCH /findings/{id}/assign

Assign a finding

Requires permission: findings:write

Parameters

NameInTypeRequiredDescription
idpathstringYesFinding ID

Request body (request.AssignFindingRequest)

NameTypeRequiredDescription
assignee_idstringNoTeam member ID to assign (null to unassign)

Responses

  • 204 — No Content
  • 400 — Bad Request
  • 401 — Authentication failed: the API key is missing, malformed, unknown, revoked or expired.
  • 403 — Forbidden. The code field says why: insufficient_permissions (the key lacks the permission named in x-api-key-permission), api_key_not_allowed (API keys cannot call this endpoint), plan_limit (the tenant's plan does not include API keys, and the body has no limit_type; or the request hit a feature or usage limit of the plan, which limit_type names), tenant_suspended (the tenant is suspended), ip_not_allowed (the key is restricted to certain IP addresses and this request came from another one). An endpoint may name other codes in its description.
  • 404 — Not Found
  • 429 — Too many requests for this API key. Wait the number of seconds in the Retry-After header, then retry.
  • 500 — Internal Server Error

GET /findings/{id}/comments

List finding comments

Requires permission: findings:read

Parameters

NameInTypeRequiredDescription
idpathstringYesFinding ID

Responses

  • 200 — OK
    NameTypeRequiredDescription
    author_emailstringNo
    author_idstringNo
    bodystringNo
    created_atstringNo
    finding_idstringNo
    idstringNo
    tenant_idstringNo
  • 400 — Bad Request
  • 401 — Authentication failed: the API key is missing, malformed, unknown, revoked or expired.
  • 403 — Forbidden. The code field says why: insufficient_permissions (the key lacks the permission named in x-api-key-permission), api_key_not_allowed (API keys cannot call this endpoint), plan_limit (the tenant's plan does not include API keys, and the body has no limit_type; or the request hit a feature or usage limit of the plan, which limit_type names), tenant_suspended (the tenant is suspended), ip_not_allowed (the key is restricted to certain IP addresses and this request came from another one). An endpoint may name other codes in its description.
  • 404 — Not Found
  • 429 — Too many requests for this API key. Wait the number of seconds in the Retry-After header, then retry.
  • 500 — Internal Server Error

GET /findings/{id}/evidence

Get finding evidence

Requires permission: findings:read

Parameters

NameInTypeRequiredDescription
idpathstringYesFinding ID

Responses

  • 200 — OK
    NameTypeRequiredDescription
    evidenceentity.FindingEvidenceNo
    finding_idstringNo
    resource_uuidstringNo
  • 401 — Authentication failed: the API key is missing, malformed, unknown, revoked or expired.
  • 403 — Forbidden. The code field says why: insufficient_permissions (the key lacks the permission named in x-api-key-permission), api_key_not_allowed (API keys cannot call this endpoint), plan_limit (the tenant's plan does not include API keys, and the body has no limit_type; or the request hit a feature or usage limit of the plan, which limit_type names), tenant_suspended (the tenant is suspended), ip_not_allowed (the key is restricted to certain IP addresses and this request came from another one). An endpoint may name other codes in its description.
  • 404 — Not Found
  • 429 — Too many requests for this API key. Wait the number of seconds in the Retry-After header, then retry.
  • 500 — Internal Server Error

GET /findings/{id}/history

List finding status history

Requires permission: findings:read

Parameters

NameInTypeRequiredDescription
idpathstringYesFinding ID

Responses

  • 200 — OK
    NameTypeRequiredDescription
    changed_atstringNo
    changed_bystringNo
    finding_idstringNo
    idstringNo
    statusentity.FindingStatusNo
    tenant_idstringNo
  • 400 — Bad Request
  • 401 — Authentication failed: the API key is missing, malformed, unknown, revoked or expired.
  • 403 — Forbidden. The code field says why: insufficient_permissions (the key lacks the permission named in x-api-key-permission), api_key_not_allowed (API keys cannot call this endpoint), plan_limit (the tenant's plan does not include API keys, and the body has no limit_type; or the request hit a feature or usage limit of the plan, which limit_type names), tenant_suspended (the tenant is suspended), ip_not_allowed (the key is restricted to certain IP addresses and this request came from another one). An endpoint may name other codes in its description.
  • 429 — Too many requests for this API key. Wait the number of seconds in the Retry-After header, then retry.
  • 500 — Internal Server Error

GET /findings/{id}/remediation

Get remediation guide

Requires permission: findings:read

Parameters

NameInTypeRequiredDescription
idpathstringYesFinding ID

Responses

  • 200 — OK
    NameTypeRequiredDescription
    finding_idstringNo
    guideentity.RemediationInfoNo
    remediationstringNo
  • 401 — Authentication failed: the API key is missing, malformed, unknown, revoked or expired.
  • 403 — Forbidden. The code field says why: insufficient_permissions (the key lacks the permission named in x-api-key-permission), api_key_not_allowed (API keys cannot call this endpoint), plan_limit (the tenant's plan does not include API keys, and the body has no limit_type; or the request hit a feature or usage limit of the plan, which limit_type names), tenant_suspended (the tenant is suspended), ip_not_allowed (the key is restricted to certain IP addresses and this request came from another one). An endpoint may name other codes in its description.
  • 404 — Not Found
  • 429 — Too many requests for this API key. Wait the number of seconds in the Retry-After header, then retry.
  • 500 — Internal Server Error

POST /findings/{id}/request-verification

Request finding verification

Requires permission: findings:write

Parameters

NameInTypeRequiredDescription
idpathstringYesFinding ID

Responses

  • 202 — Verification scan started
    NameTypeRequiredDescription
    cancelled_atstringNo
    cancelled_bystringNo
    completed_atstringNoWhen the scan finished
    connector_idstringNoConnector being scanned
    created_atstringNoCreation timestamp
    delta_resource_countintegerNoSet on delta scans only: resources the delta fetch returned, summed over all resource types, including types fetched in full
    error_messagestringNoError details if scan failed
    failed_resource_countintegerNoFailedResourceCount is the number of resource types whose fetch failed during the scan.
    failed_resource_typesstring[]NoFailedResourceTypes lists the specific resource types that failed to fetch (rate limit, 5xx, etc.). Serialized as JSONB; empty list for clean scans.
    fallback_from_edgebooleanNoWhether this scan fell back from edge to origin
    fallback_reasonstringNoReason for edge-to-origin fallback
    finalize_warningsentity.ScanWarning[]NoNon-fatal warnings emitted during scan finalization
    idstringNoUnique scan identifier
    is_deltabooleanNoWhether this was a delta/incremental scan
    requested_resource_typesstring[]NoRequestedResourceTypes is the original set of resource types the scan was asked to cover, before any cooldown or other filtering. ResourceTypes is the subset that was actually scanned. When the two differ, the difference is "skipped" (e.g., drive_file cooldown).
    resource_fetch_resultsentity.ResourceFetchResult[]NoPer-resource-type fetch outcomes
    resource_typesstring[]NoResource types actually scanned (post-cooldown; see RequestedResourceTypes for pre-filter set)
    started_atstringNoWhen the scan started
    statusentity.ScanStatusNoScan state (pending, running, completed, failed)
    tenant_idstringNoOwning tenant
    total_findingsintegerNoNumber of findings produced
  • 401 — Authentication failed: the API key is missing, malformed, unknown, revoked or expired.
  • 403 — Forbidden. The code field says why: insufficient_permissions (the key lacks the permission named in x-api-key-permission), api_key_not_allowed (API keys cannot call this endpoint), plan_limit (the tenant's plan does not include API keys, and the body has no limit_type; or the request hit a feature or usage limit of the plan, which limit_type names), tenant_suspended (the tenant is suspended), ip_not_allowed (the key is restricted to certain IP addresses and this request came from another one). An endpoint may name other codes in its description.
  • 404 — Not Found
  • 409 — Verification already in progress
  • 429 — Too many requests for this API key. Wait the number of seconds in the Retry-After header, then retry.
  • 500 — Internal Server Error

PATCH /findings/{id}/status

Update finding status

Requires permission: findings:write

Parameters

NameInTypeRequiredDescription
idpathstringYesFinding ID

Request body (request.UpdateFindingStatusRequest)

NameTypeRequiredDescription
statusstringYesNew finding status

Responses

  • 204 — No Content
  • 400 — Bad Request
  • 401 — Authentication failed: the API key is missing, malformed, unknown, revoked or expired.
  • 403 — Forbidden. The code field says why: insufficient_permissions (the key lacks the permission named in x-api-key-permission), api_key_not_allowed (API keys cannot call this endpoint), plan_limit (the tenant's plan does not include API keys, and the body has no limit_type; or the request hit a feature or usage limit of the plan, which limit_type names), tenant_suspended (the tenant is suspended), ip_not_allowed (the key is restricted to certain IP addresses and this request came from another one). An endpoint may name other codes in its description.
  • 409 — Conflict
  • 422 — Unprocessable Entity
  • 429 — Too many requests for this API key. Wait the number of seconds in the Retry-After header, then retry.
  • 500 — Internal Server Error

POST /findings/{id}/verify

Verify a finding

Requires permission: findings:write

Parameters

NameInTypeRequiredDescription
idpathstringYesFinding ID

Responses

  • 204 — No Content
  • 401 — Authentication failed: the API key is missing, malformed, unknown, revoked or expired.
  • 403 — Forbidden. The code field says why: insufficient_permissions (the key lacks the permission named in x-api-key-permission), api_key_not_allowed (API keys cannot call this endpoint), plan_limit (the tenant's plan does not include API keys, and the body has no limit_type; or the request hit a feature or usage limit of the plan, which limit_type names), tenant_suspended (the tenant is suspended), ip_not_allowed (the key is restricted to certain IP addresses and this request came from another one). An endpoint may name other codes in its description.
  • 404 — Not Found
  • 422 — Policy could not be evaluated; finding left unchanged
  • 429 — Too many requests for this API key. Wait the number of seconds in the Retry-After header, then retry.
  • 500 — Internal Server Error

Geo

GET /geo/map

Get the login-geography map

Requires permission: geo:read

Parameters

NameInTypeRequiredDescription
fromquerystringNoRange start (RFC3339 or YYYY-MM-DD); defaults to 30 days ago
toquerystringNoRange end (RFC3339 or YYYY-MM-DD); defaults to now

Responses

  • 200 — OK
    NameTypeRequiredDescription
    as_ofstringNo
    countriesresponse.GeoMapCountry[]No
    total_identitiesintegerNo
  • 400 — Bad Request
  • 401 — Authentication failed: the API key is missing, malformed, unknown, revoked or expired.
  • 403 — Forbidden. The code field says why: insufficient_permissions (the key lacks the permission named in x-api-key-permission), api_key_not_allowed (API keys cannot call this endpoint), plan_limit (the tenant's plan does not include API keys, and the body has no limit_type; or the request hit a feature or usage limit of the plan, which limit_type names), tenant_suspended (the tenant is suspended), ip_not_allowed (the key is restricted to certain IP addresses and this request came from another one). An endpoint may name other codes in its description.
  • 429 — Too many requests for this API key. Wait the number of seconds in the Retry-After header, then retry.
  • 500 — Internal Server Error

GET /geo/observations

List login observations (drill-down)

Requires permission: geo:read

Parameters

NameInTypeRequiredDescription
identity_idquerystringNoResolved identity UUID
emailquerystringNoLogin email, across all connectors
countryquerystringNoISO alpha-2 country code
fromquerystringNoRange start (RFC3339 or YYYY-MM-DD); country filter only
toquerystringNoRange end (RFC3339 or YYYY-MM-DD); country filter only

Responses

  • 200 — OK
    NameTypeRequiredDescription
    observationsresponse.GeoObservation[]No
  • 400 — Bad Request
  • 401 — Authentication failed: the API key is missing, malformed, unknown, revoked or expired.
  • 403 — Forbidden. The code field says why: insufficient_permissions (the key lacks the permission named in x-api-key-permission), api_key_not_allowed (API keys cannot call this endpoint), plan_limit (the tenant's plan does not include API keys, and the body has no limit_type; or the request hit a feature or usage limit of the plan, which limit_type names), tenant_suspended (the tenant is suspended), ip_not_allowed (the key is restricted to certain IP addresses and this request came from another one). An endpoint may name other codes in its description.
  • 429 — Too many requests for this API key. Wait the number of seconds in the Retry-After header, then retry.
  • 500 — Internal Server Error

GET /geo/policy

Get the tenant geo policy

Requires permission: geo:read

Responses

  • 200 — OK
    NameTypeRequiredDescription
    country_codesstring[]No
    enabledbooleanNo
    modestringNo
    severitystringNo
  • 401 — Authentication failed: the API key is missing, malformed, unknown, revoked or expired.
  • 403 — Forbidden. The code field says why: insufficient_permissions (the key lacks the permission named in x-api-key-permission), api_key_not_allowed (API keys cannot call this endpoint), plan_limit (the tenant's plan does not include API keys, and the body has no limit_type; or the request hit a feature or usage limit of the plan, which limit_type names), tenant_suspended (the tenant is suspended), ip_not_allowed (the key is restricted to certain IP addresses and this request came from another one). An endpoint may name other codes in its description.
  • 429 — Too many requests for this API key. Wait the number of seconds in the Retry-After header, then retry.
  • 500 — Internal Server Error

PUT /geo/policy

Update the tenant geo policy

Requires permission: geo:write

Request body (request.UpdateGeoPolicyRequest)

NameTypeRequiredDescription
country_codesstring[]No
enabledbooleanNo
modestringYes
severitystringYes

Responses

  • 200 — OK
    NameTypeRequiredDescription
    country_codesstring[]No
    enabledbooleanNo
    modestringNo
    severitystringNo
  • 400 — Bad Request
  • 401 — Authentication failed: the API key is missing, malformed, unknown, revoked or expired.
  • 403 — Forbidden. The code field says why: insufficient_permissions (the key lacks the permission named in x-api-key-permission), api_key_not_allowed (API keys cannot call this endpoint), plan_limit (the tenant's plan does not include API keys, and the body has no limit_type; or the request hit a feature or usage limit of the plan, which limit_type names), tenant_suspended (the tenant is suspended), ip_not_allowed (the key is restricted to certain IP addresses and this request came from another one). An endpoint may name other codes in its description.
  • 429 — Too many requests for this API key. Wait the number of seconds in the Retry-After header, then retry.
  • 500 — Internal Server Error

Identities

GET /identities

List identities

Requires permission: identities:read

Parameters

NameInTypeRequiredDescription
connector_idquerystringNoFilter by connector ID
statusquerystringNoFilter by status
emailquerystringNoFilter by email
rolequerystringNoFilter by role
is_adminquerybooleanNoFilter by privileged identities (is_privileged; deprovisioned included)
identity_typequerystringNoFilter by identity type (human, service_account, bot, api_key, oauth_app)
is_non_humanquerybooleanNoFilter non-human identities only
searchquerystringNoSearch by name or email
sort_byquerystringNoSort field (email, display_name, role, status, created_at, finding_count, risk_score)
sort_orderquerystringNoSort direction (asc, desc)
limitqueryintegerNoPage size
cursorquerystringNoOpaque keyset cursor for the next page (omit for first page)

Responses

  • 200 — OK
    NameTypeRequiredDescription
    dataentity.Identity[]No
    paginationentity.CursorMetaNo
  • 401 — Authentication failed: the API key is missing, malformed, unknown, revoked or expired.
  • 403 — Forbidden. The code field says why: insufficient_permissions (the key lacks the permission named in x-api-key-permission), api_key_not_allowed (API keys cannot call this endpoint), plan_limit (the tenant's plan does not include API keys, and the body has no limit_type; or the request hit a feature or usage limit of the plan, which limit_type names), tenant_suspended (the tenant is suspended), ip_not_allowed (the key is restricted to certain IP addresses and this request came from another one). An endpoint may name other codes in its description.
  • 429 — Too many requests for this API key. Wait the number of seconds in the Retry-After header, then retry.
  • 500 — Internal Server Error

GET /identities/nhi-summary

Get NHI summary

Requires permission: identities:read

Responses

  • 200 — OK
    NameTypeRequiredDescription
    by_connectorentity.NHIConnectorSummary[]NoPer-connector breakdown of non-human identities. Not returned yet.
    by_typeobjectNo
    expiring_countintegerNo
    hygiene_scorenumberNo
    never_rotated_countintegerNo
    orphaned_countintegerNo
    stale_countintegerNo
    total_nhisintegerNo
  • 401 — Authentication failed: the API key is missing, malformed, unknown, revoked or expired.
  • 403 — Forbidden. The code field says why: insufficient_permissions (the key lacks the permission named in x-api-key-permission), api_key_not_allowed (API keys cannot call this endpoint), plan_limit (the tenant's plan does not include API keys, and the body has no limit_type; or the request hit a feature or usage limit of the plan, which limit_type names), tenant_suspended (the tenant is suspended), ip_not_allowed (the key is restricted to certain IP addresses and this request came from another one). An endpoint may name other codes in its description.
  • 429 — Too many requests for this API key. Wait the number of seconds in the Retry-After header, then retry.
  • 500 — Internal Server Error

GET /identities/offboarding-report

Offboarding report

Requires permission: identities:read

Responses

  • 200 — OK
    NameTypeRequiredDescription
    active_api_key_listentity.IdentityStub[]NoActiveAPIKeyList enumerates api_key-type NHIs owned by the leaver (created_by_external_id). ActiveAPIKeys mirrors len(ActiveAPIKeyList).
    active_api_keysintegerNo
    active_oauth_grantsentity.ThirdPartyAppStub[]NoActiveOAuthGrants surfaces third-party apps still authorized by a deprovisioned user.
    canonical_person_idstringNoCanonicalPersonID is the leaver's canonical identity ID, when one is known.
    deprovisioned_atstringNo
    identityentity.IdentityStubNo
    orphaned_nhisentity.IdentityStub[]No
    recommended_actionsstring[]No
    risk_levelentity.OffboardingRiskLevelNo
    statusstringNo
  • 401 — Authentication failed: the API key is missing, malformed, unknown, revoked or expired.
  • 403 — Forbidden. The code field says why: insufficient_permissions (the key lacks the permission named in x-api-key-permission), api_key_not_allowed (API keys cannot call this endpoint), plan_limit (the tenant's plan does not include API keys, and the body has no limit_type; or the request hit a feature or usage limit of the plan, which limit_type names), tenant_suspended (the tenant is suspended), ip_not_allowed (the key is restricted to certain IP addresses and this request came from another one). An endpoint may name other codes in its description.
  • 429 — Too many requests for this API key. Wait the number of seconds in the Retry-After header, then retry.
  • 500 — Internal Server Error

GET /identities/people

List canonical people

Requires permission: identities:read

Parameters

NameInTypeRequiredDescription
searchquerystringNoCase-insensitive name/email substring search
sort_byquerystringNoSort column (max_risk_score, display_name)
sort_orderquerystringNoSort direction (asc, desc)
limitqueryintegerNoItems per page (default 100, max 1000)
cursorquerystringNoOpaque keyset cursor for the next page (omit for first page)

Responses

  • 200 — OK
    NameTypeRequiredDescription
    dataentity.CanonicalPerson[]No
    paginationentity.CursorMetaNo
  • 401 — Authentication failed: the API key is missing, malformed, unknown, revoked or expired.
  • 403 — Forbidden. The code field says why: insufficient_permissions (the key lacks the permission named in x-api-key-permission), api_key_not_allowed (API keys cannot call this endpoint), plan_limit (the tenant's plan does not include API keys, and the body has no limit_type; or the request hit a feature or usage limit of the plan, which limit_type names), tenant_suspended (the tenant is suspended), ip_not_allowed (the key is restricted to certain IP addresses and this request came from another one). An endpoint may name other codes in its description.
  • 429 — Too many requests for this API key. Wait the number of seconds in the Retry-After header, then retry.
  • 500 — Internal Server Error

GET /identities/people/risk-summary

Get people risk summary

Requires permission: identities:read

Responses

  • 200 — OK
    NameTypeRequiredDescription
    average_person_risknumberNo
    by_risk_bandobjectNocritical/high/medium/low
    privileged_peopleintegerNo
    total_peopleintegerNo
  • 401 — Authentication failed: the API key is missing, malformed, unknown, revoked or expired.
  • 403 — Forbidden. The code field says why: insufficient_permissions (the key lacks the permission named in x-api-key-permission), api_key_not_allowed (API keys cannot call this endpoint), plan_limit (the tenant's plan does not include API keys, and the body has no limit_type; or the request hit a feature or usage limit of the plan, which limit_type names), tenant_suspended (the tenant is suspended), ip_not_allowed (the key is restricted to certain IP addresses and this request came from another one). An endpoint may name other codes in its description.
  • 429 — Too many requests for this API key. Wait the number of seconds in the Retry-After header, then retry.
  • 500 — Internal Server Error

GET /identities/people/{id}

Get canonical person

Requires permission: identities:read

Parameters

NameInTypeRequiredDescription
idpathstringYesCanonical person ID

Responses

  • 200 — OK
    NameTypeRequiredDescription
    blast_radiusentity.ThirdPartyAppStub[]No
    membersentity.IdentityRef[]No
    owned_nhisentity.IdentityStub[]No
    personentity.CanonicalPersonNo
    suspected_duplicatesentity.SuspectedDuplicatePerson[]No
  • 400 — invalid id
  • 401 — Authentication failed: the API key is missing, malformed, unknown, revoked or expired.
  • 403 — Forbidden. The code field says why: insufficient_permissions (the key lacks the permission named in x-api-key-permission), api_key_not_allowed (API keys cannot call this endpoint), plan_limit (the tenant's plan does not include API keys, and the body has no limit_type; or the request hit a feature or usage limit of the plan, which limit_type names), tenant_suspended (the tenant is suspended), ip_not_allowed (the key is restricted to certain IP addresses and this request came from another one). An endpoint may name other codes in its description.
  • 404 — Not Found
  • 429 — Too many requests for this API key. Wait the number of seconds in the Retry-After header, then retry.
  • 500 — Internal Server Error

GET /identities/risk-history

Get identity risk history

Requires permission: identities:read

Parameters

NameInTypeRequiredDescription
connector_idquerystringNoFilter by connector ID
identity_idquerystringNoOne identity's series (omit for the connector aggregate rows)
sincequerystringNoStart date (RFC3339, default 30 days ago, clamped to 365 days)
untilquerystringNoEnd date (RFC3339)

Responses

  • 200 — OK
    NameTypeRequiredDescription
    dataentity.IdentityRiskSnapshot[]No
    paginationentity.PaginationMetaNo
  • 401 — Authentication failed: the API key is missing, malformed, unknown, revoked or expired.
  • 403 — Forbidden. The code field says why: insufficient_permissions (the key lacks the permission named in x-api-key-permission), api_key_not_allowed (API keys cannot call this endpoint), plan_limit (the tenant's plan does not include API keys, and the body has no limit_type; or the request hit a feature or usage limit of the plan, which limit_type names), tenant_suspended (the tenant is suspended), ip_not_allowed (the key is restricted to certain IP addresses and this request came from another one). An endpoint may name other codes in its description.
  • 429 — Too many requests for this API key. Wait the number of seconds in the Retry-After header, then retry.
  • 500 — Internal Server Error

GET /identities/risk-summary

Get identity risk summary

Requires permission: identities:read

Parameters

NameInTypeRequiredDescription
connector_idquerystringYesConnector ID (required)
limitqueryintegerNoItems per page (default 100, max 1000)
cursorquerystringNoOpaque keyset cursor for the next page (omit for first page)

Responses

  • 200 — OK
    NameTypeRequiredDescription
    dataentity.IdentityRiskScore[]No
    paginationentity.CursorMetaNo
  • 400 — Bad Request
  • 401 — Authentication failed: the API key is missing, malformed, unknown, revoked or expired.
  • 403 — Forbidden. The code field says why: insufficient_permissions (the key lacks the permission named in x-api-key-permission), api_key_not_allowed (API keys cannot call this endpoint), plan_limit (the tenant's plan does not include API keys, and the body has no limit_type; or the request hit a feature or usage limit of the plan, which limit_type names), tenant_suspended (the tenant is suspended), ip_not_allowed (the key is restricted to certain IP addresses and this request came from another one). An endpoint may name other codes in its description.
  • 429 — Too many requests for this API key. Wait the number of seconds in the Retry-After header, then retry.
  • 500 — Internal Server Error

GET /identities/{id}

Get an identity

Requires permission: identities:read

Parameters

NameInTypeRequiredDescription
idpathstringYesIdentity ID

Responses

  • 200 — OK
    NameTypeRequiredDescription
    canonical_identity_idstringNo
    connector_idstringNo
    created_atstringNo
    created_by_external_idstringNo
    deprovisioned_atstringNo
    display_namestringNo
    emailstringNo
    expires_atstringNo
    external_idstringNo
    finding_countintegerNoNumber of open findings on this identity, as returned by the identity list; 0 on other reads.
    idstringNo
    identity_typeentity.IdentityTypeNo
    is_privilegedbooleanNoWhether the connector reports this identity as privileged, from its admin flags and role names. Omitted when the connector gives no privilege signal: unknown, not false.
    last_activity_atstringNo
    last_rotated_atstringNo
    offboarding_handled_atstringNo
    owner_canonical_identity_idstringNo
    owner_personentity.PersonRefNo
    propertiesobjectNo
    revocation_detected_atstringNo
    risk_scorenumberNo
    rolestringNo
    statusstringNo
    tenant_idstringNo
    updated_atstringNo
  • 401 — Authentication failed: the API key is missing, malformed, unknown, revoked or expired.
  • 403 — Forbidden. The code field says why: insufficient_permissions (the key lacks the permission named in x-api-key-permission), api_key_not_allowed (API keys cannot call this endpoint), plan_limit (the tenant's plan does not include API keys, and the body has no limit_type; or the request hit a feature or usage limit of the plan, which limit_type names), tenant_suspended (the tenant is suspended), ip_not_allowed (the key is restricted to certain IP addresses and this request came from another one). An endpoint may name other codes in its description.
  • 404 — Not Found
  • 429 — Too many requests for this API key. Wait the number of seconds in the Retry-After header, then retry.
  • 500 — Internal Server Error

GET /identities/{id}/offboarding-risk

Get offboarding risk

Requires permission: identities:read

Parameters

NameInTypeRequiredDescription
idpathstringYesIdentity ID

Responses

  • 200 — OK
    NameTypeRequiredDescription
    active_api_key_listentity.IdentityStub[]NoActiveAPIKeyList enumerates api_key-type NHIs owned by the leaver (created_by_external_id). ActiveAPIKeys mirrors len(ActiveAPIKeyList).
    active_api_keysintegerNo
    active_oauth_grantsentity.ThirdPartyAppStub[]NoActiveOAuthGrants surfaces third-party apps still authorized by a deprovisioned user.
    canonical_person_idstringNoCanonicalPersonID is the leaver's canonical identity ID, when one is known.
    deprovisioned_atstringNo
    identityentity.IdentityStubNo
    orphaned_nhisentity.IdentityStub[]No
    recommended_actionsstring[]No
    risk_levelentity.OffboardingRiskLevelNo
    statusstringNo
  • 401 — Authentication failed: the API key is missing, malformed, unknown, revoked or expired.
  • 403 — Forbidden. The code field says why: insufficient_permissions (the key lacks the permission named in x-api-key-permission), api_key_not_allowed (API keys cannot call this endpoint), plan_limit (the tenant's plan does not include API keys, and the body has no limit_type; or the request hit a feature or usage limit of the plan, which limit_type names), tenant_suspended (the tenant is suspended), ip_not_allowed (the key is restricted to certain IP addresses and this request came from another one). An endpoint may name other codes in its description.
  • 404 — Not Found
  • 429 — Too many requests for this API key. Wait the number of seconds in the Retry-After header, then retry.
  • 500 — Internal Server Error

GET /identities/{id}/resources

List identity resources

Requires permission: identities:read

Parameters

NameInTypeRequiredDescription
idpathstringYesIdentity ID

Responses

  • 200 — OK
    NameTypeRequiredDescription
    connector_idstringNo
    display_namestringNo
    emailstringNo
    external_idstringNo
    identity_idstringNo
    last_activity_atstringNo
    resource_idstringNo
    resource_namestringNo
    resource_typestringNo
    rolestringNo
  • 401 — Authentication failed: the API key is missing, malformed, unknown, revoked or expired.
  • 403 — Forbidden. The code field says why: insufficient_permissions (the key lacks the permission named in x-api-key-permission), api_key_not_allowed (API keys cannot call this endpoint), plan_limit (the tenant's plan does not include API keys, and the body has no limit_type; or the request hit a feature or usage limit of the plan, which limit_type names), tenant_suspended (the tenant is suspended), ip_not_allowed (the key is restricted to certain IP addresses and this request came from another one). An endpoint may name other codes in its description.
  • 404 — Not Found
  • 429 — Too many requests for this API key. Wait the number of seconds in the Retry-After header, then retry.
  • 500 — Internal Server Error

GET /identities/{id}/risk

Get identity risk score

Requires permission: identities:read

Parameters

NameInTypeRequiredDescription
idpathstringYesIdentity ID

Responses

  • 200 — OK
    NameTypeRequiredDescription
    has_proxy_loginsbooleanNo
    identity_idstringNo
    open_finding_countintegerNo
    proxy_login_countintegerNo
    role_factornumberNo
    scorenumberNo
    severity_breakdownentity.SeverityBreakdownNo
    tenant_idstringNo
  • 401 — Authentication failed: the API key is missing, malformed, unknown, revoked or expired.
  • 403 — Forbidden. The code field says why: insufficient_permissions (the key lacks the permission named in x-api-key-permission), api_key_not_allowed (API keys cannot call this endpoint), plan_limit (the tenant's plan does not include API keys, and the body has no limit_type; or the request hit a feature or usage limit of the plan, which limit_type names), tenant_suspended (the tenant is suspended), ip_not_allowed (the key is restricted to certain IP addresses and this request came from another one). An endpoint may name other codes in its description.
  • 404 — Not Found
  • 429 — Too many requests for this API key. Wait the number of seconds in the Retry-After header, then retry.
  • 500 — Internal Server Error

LoginSources

GET /login-sources

List login sources

Requires permission: policies:read

Responses

  • 200 — OK
    NameTypeRequiredDescription
    itemsresponse.ConnectorLoginSourceState[]No
    reconciliation_pendingbooleanNo
  • 401 — Authentication failed: the API key is missing, malformed, unknown, revoked or expired.
  • 403 — Forbidden. The code field says why: insufficient_permissions (the key lacks the permission named in x-api-key-permission), api_key_not_allowed (API keys cannot call this endpoint), plan_limit (the tenant's plan does not include API keys, and the body has no limit_type; or the request hit a feature or usage limit of the plan, which limit_type names), tenant_suspended (the tenant is suspended), ip_not_allowed (the key is restricted to certain IP addresses and this request came from another one). An endpoint may name other codes in its description.
  • 429 — Too many requests for this API key. Wait the number of seconds in the Retry-After header, then retry.
  • 500 — Internal Server Error

PUT /login-sources/{id}

Declare a login source

Requires permission: policies:write

Parameters

NameInTypeRequiredDescription
idpathstringYesConnector ID

Request body (request.DeclareLoginSourceRequest)

NameTypeRequiredDescription
idp_connector_idstringYesConnector ID of the declared identity provider

Responses

  • 200 — OK
    NameTypeRequiredDescription
    changedbooleanNo
    createdbooleanNo
    login_sourceresponse.LoginSourceInfoNo
    previous_idp_connector_idstringNo
    reconciliation_pendingbooleanNo
    restoredintegerNo
    suppressedintegerNo
  • 202 — Accepted — reconciliation pending
    NameTypeRequiredDescription
    changedbooleanNo
    createdbooleanNo
    login_sourceresponse.LoginSourceInfoNo
    previous_idp_connector_idstringNo
    reconciliation_pendingbooleanNo
    restoredintegerNo
    suppressedintegerNo
  • 400 — Bad Request
  • 401 — Authentication failed: the API key is missing, malformed, unknown, revoked or expired.
  • 403 — Forbidden. The code field says why: insufficient_permissions (the key lacks the permission named in x-api-key-permission), api_key_not_allowed (API keys cannot call this endpoint), plan_limit (the tenant's plan does not include API keys, and the body has no limit_type; or the request hit a feature or usage limit of the plan, which limit_type names), tenant_suspended (the tenant is suspended), ip_not_allowed (the key is restricted to certain IP addresses and this request came from another one). An endpoint may name other codes in its description.
  • 404 — Not Found
  • 429 — Too many requests for this API key. Wait the number of seconds in the Retry-After header, then retry.
  • 503 — Service Unavailable

DELETE /login-sources/{id}

Remove a declared login source

Requires permission: policies:write

Parameters

NameInTypeRequiredDescription
idpathstringYesConnector ID

Responses

  • 200 — OK
    NameTypeRequiredDescription
    reconciliation_pendingbooleanNo
    restoredintegerNo
    suppressedintegerNo
  • 202 — Accepted — reconciliation pending
    NameTypeRequiredDescription
    reconciliation_pendingbooleanNo
    restoredintegerNo
    suppressedintegerNo
  • 401 — Authentication failed: the API key is missing, malformed, unknown, revoked or expired.
  • 403 — Forbidden. The code field says why: insufficient_permissions (the key lacks the permission named in x-api-key-permission), api_key_not_allowed (API keys cannot call this endpoint), plan_limit (the tenant's plan does not include API keys, and the body has no limit_type; or the request hit a feature or usage limit of the plan, which limit_type names), tenant_suspended (the tenant is suspended), ip_not_allowed (the key is restricted to certain IP addresses and this request came from another one). An endpoint may name other codes in its description.
  • 404 — Not Found
  • 429 — Too many requests for this API key. Wait the number of seconds in the Retry-After header, then retry.
  • 503 — Service Unavailable

Notifications

GET /notification-deliveries

List notification deliveries

Requires permission: audit_log:read

Parameters

NameInTypeRequiredDescription
statusquerystringNoFilter by delivery status
exclude_in_appquerybooleanNoLeave out in_app rows (the SLA escalation's per-finding tracking rows); only the value true applies
limitqueryintegerNoItems per page (default 100, max 1000)
offsetqueryintegerNoNumber of items to skip

Responses

  • 200 — OK
    NameTypeRequiredDescription
    dataentity.NotificationDelivery[]No
    paginationentity.PaginationMetaNo
  • 400 — Bad Request
  • 401 — Authentication failed: the API key is missing, malformed, unknown, revoked or expired.
  • 403 — Forbidden. The code field says why: insufficient_permissions (the key lacks the permission named in x-api-key-permission), api_key_not_allowed (API keys cannot call this endpoint), plan_limit (the tenant's plan does not include API keys, and the body has no limit_type; or the request hit a feature or usage limit of the plan, which limit_type names), tenant_suspended (the tenant is suspended), ip_not_allowed (the key is restricted to certain IP addresses and this request came from another one). An endpoint may name other codes in its description.
  • 404 — Not Found
  • 429 — Too many requests for this API key. Wait the number of seconds in the Retry-After header, then retry.
  • 500 — Internal Server Error

GET /notifications/deliveries

List delivery logs

Requires permission: audit_log:read

Parameters

NameInTypeRequiredDescription
statusquerystringNoFilter by delivery status (pending, success, failed, exhausted)
channel_typequerystringNoFilter by channel type (slack, email, in_app)
source_typequerystringNoFilter by source type (alert, exception, digest, report)
source_idquerystringNoFilter by source ID
fromquerystringNoStart of date range (RFC3339)
toquerystringNoEnd of date range (RFC3339)
limitqueryintegerNoPage size (default 100, max 1000)
offsetqueryintegerNoPage offset (default 0)

Responses

  • 200 — OK
    NameTypeRequiredDescription
    dataentity.NotificationDelivery[]No
    paginationentity.PaginationMetaNo
  • 400 — Bad Request
  • 401 — Authentication failed: the API key is missing, malformed, unknown, revoked or expired.
  • 403 — Forbidden. The code field says why: insufficient_permissions (the key lacks the permission named in x-api-key-permission), api_key_not_allowed (API keys cannot call this endpoint), plan_limit (the tenant's plan does not include API keys, and the body has no limit_type; or the request hit a feature or usage limit of the plan, which limit_type names), tenant_suspended (the tenant is suspended), ip_not_allowed (the key is restricted to certain IP addresses and this request came from another one). An endpoint may name other codes in its description.
  • 404 — Not Found
  • 429 — Too many requests for this API key. Wait the number of seconds in the Retry-After header, then retry.
  • 500 — Internal Server Error

Offboarding

POST /identities/{id}/offboard

Offboard an identity

Requires permission: identities:write

Parameters

NameInTypeRequiredDescription
idpathstringYesIdentity ID (UUID)

Responses

  • 202 — Accepted
    NameTypeRequiredDescription
    actionsentity.RemediationAction[]No
    agent_countintegerNo
    completed_atstringNo
    created_atstringNo
    governance_rule_idstringNo
    heartbeat_atstringNo
    idstringNo
    playbook_idstringNo
    statusentity.RemediationStatusNo
    target_idstringNo
    target_typestringNo
    tenant_idstringNo
    trigger_typestringNo
    triggered_bystringNo
  • 400 — Bad Request
  • 401 — Authentication failed: the API key is missing, malformed, unknown, revoked or expired.
  • 403 — Forbidden. The code field says why: insufficient_permissions (the key lacks the permission named in x-api-key-permission), api_key_not_allowed (API keys cannot call this endpoint), plan_limit (the tenant's plan does not include API keys, and the body has no limit_type; or the request hit a feature or usage limit of the plan, which limit_type names), tenant_suspended (the tenant is suspended), ip_not_allowed (the key is restricted to certain IP addresses and this request came from another one). An endpoint may name other codes in its description.
  • 404 — Not Found
  • 429 — Too many requests for this API key. Wait the number of seconds in the Retry-After header, then retry.
  • 500 — Internal Server Error

GET /offboarding/packets

List offboarding packets

Requires permission: identities:read

Parameters

NameInTypeRequiredDescription
limitqueryintegerNoItems per page
offsetqueryintegerNoNumber of items to skip

Responses

  • 200 — OK
    NameTypeRequiredDescription
    itemsentity.RemediationRun[]No
    totalintegerNo
  • 401 — Authentication failed: the API key is missing, malformed, unknown, revoked or expired.
  • 403 — Forbidden. The code field says why: insufficient_permissions (the key lacks the permission named in x-api-key-permission), api_key_not_allowed (API keys cannot call this endpoint), plan_limit (the tenant's plan does not include API keys, and the body has no limit_type; or the request hit a feature or usage limit of the plan, which limit_type names), tenant_suspended (the tenant is suspended), ip_not_allowed (the key is restricted to certain IP addresses and this request came from another one). An endpoint may name other codes in its description.
  • 429 — Too many requests for this API key. Wait the number of seconds in the Retry-After header, then retry.
  • 500 — Internal Server Error

GET /offboarding/packets/{id}

Get an offboarding packet

Requires permission: identities:read

Parameters

NameInTypeRequiredDescription
idpathstringYesResource ID (UUID)

Responses

  • 200 — OK
    NameTypeRequiredDescription
    closed_countintegerNo
    itemsentity.OffboardingItem[]No
    person_display_namestringNo
    person_emailstringNo
    runentity.RemediationRunNo
    total_countintegerNo
  • 400 — Bad Request
  • 401 — Authentication failed: the API key is missing, malformed, unknown, revoked or expired.
  • 403 — Forbidden. The code field says why: insufficient_permissions (the key lacks the permission named in x-api-key-permission), api_key_not_allowed (API keys cannot call this endpoint), plan_limit (the tenant's plan does not include API keys, and the body has no limit_type; or the request hit a feature or usage limit of the plan, which limit_type names), tenant_suspended (the tenant is suspended), ip_not_allowed (the key is restricted to certain IP addresses and this request came from another one). An endpoint may name other codes in its description.
  • 404 — Not Found
  • 429 — Too many requests for this API key. Wait the number of seconds in the Retry-After header, then retry.
  • 500 — Internal Server Error

POST /offboarding/packets/{id}/send

Send an offboarding packet

Requires permission: identities:write

Parameters

NameInTypeRequiredDescription
idpathstringYesResource ID (UUID)

Responses

  • 204 — No Content
  • 400 — Bad Request
  • 401 — Authentication failed: the API key is missing, malformed, unknown, revoked or expired.
  • 403 — Forbidden. The code field says why: insufficient_permissions (the key lacks the permission named in x-api-key-permission), api_key_not_allowed (API keys cannot call this endpoint), plan_limit (the tenant's plan does not include API keys, and the body has no limit_type; or the request hit a feature or usage limit of the plan, which limit_type names), tenant_suspended (the tenant is suspended), ip_not_allowed (the key is restricted to certain IP addresses and this request came from another one). An endpoint may name other codes in its description.
  • 404 — Not Found
  • 409 — Conflict
  • 429 — Too many requests for this API key. Wait the number of seconds in the Retry-After header, then retry.
  • 500 — Internal Server Error

GET /offboarding/settings

Get offboarding settings

Requires permission: identities:read

Responses

  • 200 — OK
    NameTypeRequiredDescription
    auto_sendbooleanNo
    orchestration_enabledbooleanNo
    tenant_idstringNo
    updated_atstringNo
  • 401 — Authentication failed: the API key is missing, malformed, unknown, revoked or expired.
  • 403 — Forbidden. The code field says why: insufficient_permissions (the key lacks the permission named in x-api-key-permission), api_key_not_allowed (API keys cannot call this endpoint), plan_limit (the tenant's plan does not include API keys, and the body has no limit_type; or the request hit a feature or usage limit of the plan, which limit_type names), tenant_suspended (the tenant is suspended), ip_not_allowed (the key is restricted to certain IP addresses and this request came from another one). An endpoint may name other codes in its description.
  • 429 — Too many requests for this API key. Wait the number of seconds in the Retry-After header, then retry.
  • 500 — Internal Server Error

PUT /offboarding/settings

Update offboarding settings

Requires permission: identities:write

Request body (request.UpdateOffboardingSettingsRequest)

NameTypeRequiredDescription
auto_sendbooleanNo
orchestration_enabledbooleanNo

Responses

  • 204 — No Content
  • 400 — Bad Request
  • 401 — Authentication failed: the API key is missing, malformed, unknown, revoked or expired.
  • 403 — Forbidden. The code field says why: insufficient_permissions (the key lacks the permission named in x-api-key-permission), api_key_not_allowed (API keys cannot call this endpoint), plan_limit (the tenant's plan does not include API keys, and the body has no limit_type; or the request hit a feature or usage limit of the plan, which limit_type names), tenant_suspended (the tenant is suspended), ip_not_allowed (the key is restricted to certain IP addresses and this request came from another one). An endpoint may name other codes in its description.
  • 429 — Too many requests for this API key. Wait the number of seconds in the Retry-After header, then retry.
  • 500 — Internal Server Error

Ops

GET /ops/activity

Get activity feed

Requires permission: ops_activity:read

Parameters

NameInTypeRequiredDescription
sourcequerystringNoFilter by source: audit, policy
event_typequerystringNoFilter by event type(s), comma-separated
resource_typequerystringNoFilter by resource type
actorquerystringNoFilter by actor email
connector_idquerystringNoFilter by connector ID (UUID)
sincequerystringNoStart of time range (RFC3339). Default: 7 days ago.
untilquerystringNoEnd of time range (RFC3339). Default: now.
pagequeryintegerNoPage number (default: 1)
per_pagequeryintegerNoItems per page (default: 50, max: 100)

Responses

  • 200 — OK
    NameTypeRequiredDescription
    dataentity.ActivityItem[]No
    paginationv1.paginationMetaNo
  • 400 — Bad Request
  • 401 — Authentication failed: the API key is missing, malformed, unknown, revoked or expired.
  • 403 — Forbidden. The code field says why: insufficient_permissions (the key lacks the permission named in x-api-key-permission), api_key_not_allowed (API keys cannot call this endpoint), plan_limit (the tenant's plan does not include API keys, and the body has no limit_type; or the request hit a feature or usage limit of the plan, which limit_type names), tenant_suspended (the tenant is suspended), ip_not_allowed (the key is restricted to certain IP addresses and this request came from another one). An endpoint may name other codes in its description.
  • 429 — Too many requests for this API key. Wait the number of seconds in the Retry-After header, then retry.
  • 500 — Internal Server Error

GET /ops/metrics

Get ops metrics

Requires permission: findings:read

Parameters

NameInTypeRequiredDescription
sincequerystringNoStart time (RFC3339). Defaults to 30 days ago.
untilquerystringNoEnd time (RFC3339). Defaults to now.

Responses

  • 200 — OK
    NameTypeRequiredDescription
    aging_distributionentity.AgingBucket[]No
    by_assigneeentity.AssigneeMetrics[]No
    mttr_hoursobjectNo
    overdue_countobjectNo
    trend_7dentity.TrendMetricsNo
    unassigned_countobjectNo
  • 400 — Bad Request
  • 401 — Authentication failed: the API key is missing, malformed, unknown, revoked or expired.
  • 403 — Forbidden. The code field says why: insufficient_permissions (the key lacks the permission named in x-api-key-permission), api_key_not_allowed (API keys cannot call this endpoint), plan_limit (the tenant's plan does not include API keys, and the body has no limit_type; or the request hit a feature or usage limit of the plan, which limit_type names), tenant_suspended (the tenant is suspended), ip_not_allowed (the key is restricted to certain IP addresses and this request came from another one). An endpoint may name other codes in its description.
  • 429 — Too many requests for this API key. Wait the number of seconds in the Retry-After header, then retry.
  • 500 — Internal Server Error

Policies

GET /policies

List policies

Requires permission: policies:read

Parameters

NameInTypeRequiredDescription
connector_typequerystringNoFilter by connector type
resource_typequerystringNoFilter by resource type
categoryquerystringNoFilter by policy category
has_findingsquerybooleanNoOnly policies with at least one open finding
limitqueryintegerNoItems per page (default 100, max 1000)
offsetqueryintegerNoNumber of items to skip
sort_byquerystringNoSort column
sort_orderquerystringNoSort direction

Responses

  • 200 — OK
    NameTypeRequiredDescription
    dataentity.Policy[]No
    paginationentity.PaginationMetaNo
  • 400 — Bad Request
  • 401 — Authentication failed: the API key is missing, malformed, unknown, revoked or expired.
  • 403 — Forbidden. The code field says why: insufficient_permissions (the key lacks the permission named in x-api-key-permission), api_key_not_allowed (API keys cannot call this endpoint), plan_limit (the tenant's plan does not include API keys, and the body has no limit_type; or the request hit a feature or usage limit of the plan, which limit_type names), tenant_suspended (the tenant is suspended), ip_not_allowed (the key is restricted to certain IP addresses and this request came from another one). An endpoint may name other codes in its description.
  • 429 — Too many requests for this API key. Wait the number of seconds in the Retry-After header, then retry.
  • 500 — Internal Server Error

POST /policies/test

Test a policy (dry-run)

Requires permission: policies:write

Request body (request.TestPolicyRequest)

NameTypeRequiredDescription
inputobjectYesSample input for evaluation
rego_sourcestringYesOPA Rego policy source code

Responses

  • 200 — OK
    NameTypeRequiredDescription
    errorstringNo
    eval_duration_msintegerNo
    remediationstringNo
    violationbooleanNo
  • 400 — Bad Request
  • 401 — Authentication failed: the API key is missing, malformed, unknown, revoked or expired.
  • 403 — Forbidden. The code field says why: insufficient_permissions (the key lacks the permission named in x-api-key-permission), api_key_not_allowed (API keys cannot call this endpoint), plan_limit (the tenant's plan does not include API keys, and the body has no limit_type; or the request hit a feature or usage limit of the plan, which limit_type names), tenant_suspended (the tenant is suspended), ip_not_allowed (the key is restricted to certain IP addresses and this request came from another one). An endpoint may name other codes in its description.
  • 429 — Too many requests for this API key. Wait the number of seconds in the Retry-After header, then retry.
  • 500 — Internal Server Error

GET /policies/{id}

Get a policy

Requires permission: policies:read

Parameters

NameInTypeRequiredDescription
idpathstringYesPolicy ID

Responses

  • 200 — OK
    NameTypeRequiredDescription
    admin_console_pathstringNoPath in SaaS admin console for remediation
    categorystringNoPolicy category for grouping
    connector_typeentity.ConnectorTypeNoSaaS platform this policy applies to
    created_atstringNoCreation timestamp
    descriptionstringNoWhat this policy checks
    docs_urlstringNoVendor documentation link
    effective_severityentity.SeverityNo
    enabledbooleanNoWhether the policy is active
    estimated_fix_minutesintegerNoEstimated time to remediate in minutes
    fix_difficultystringNoRemediation difficulty: easy, medium, hard
    idstringNoUnique policy identifier
    impact_if_ignoredstringNoBusiness impact if finding is left unresolved
    is_defaultbooleanNoWhether this is a built-in default policy
    namestringNoHuman-readable policy name
    open_finding_countintegerNoNumber of open findings for this policy (populated on list)
    prerequisitesstringNoRequired admin role/permission
    rego_sourcestringNoOPA Rego policy source code
    remediation_stepsstring[]NoOrdered steps to remediate the finding
    resource_typestringNoResource type this policy evaluates
    rollback_riskstringNolow, medium, high — risk of remediation rollback
    root_causestringNoRoot cause explanation for campaign grouping
    severityentity.SeverityNoFinding severity when violated (critical, high, medium, low, info)
    sso_rolestringNoRelationship to federated login: substitutable, evidence, idp_critical
    summarystringNoOne-line remediation summary
    tier_tagsstring[]NoTags indicating which plan tiers include this policy
    updated_atstringNoLast update timestamp
    versionintegerNoOptimistic concurrency control version
  • 401 — Authentication failed: the API key is missing, malformed, unknown, revoked or expired.
  • 403 — Forbidden. The code field says why: insufficient_permissions (the key lacks the permission named in x-api-key-permission), api_key_not_allowed (API keys cannot call this endpoint), plan_limit (the tenant's plan does not include API keys, and the body has no limit_type; or the request hit a feature or usage limit of the plan, which limit_type names), tenant_suspended (the tenant is suspended), ip_not_allowed (the key is restricted to certain IP addresses and this request came from another one). An endpoint may name other codes in its description.
  • 404 — Not Found
  • 429 — Too many requests for this API key. Wait the number of seconds in the Retry-After header, then retry.
  • 500 — Internal Server Error

GET /policies/{id}/events

List policy events

Requires permission: policies:read

Parameters

NameInTypeRequiredDescription
idpathstringYesPolicy ID
connector_idquerystringNoFilter by connector ID
event_typequerystringNoFilter by event type (comma-separated)
sincequerystringNoStart time (RFC3339)
untilquerystringNoEnd time (RFC3339)
limitqueryintegerNoMax results per page
offsetqueryintegerNoPagination offset

Responses

  • 200 — OK
    NameTypeRequiredDescription
    dataentity.PolicyEvent[]No
    paginationentity.PaginationMetaNo
  • 401 — Authentication failed: the API key is missing, malformed, unknown, revoked or expired.
  • 403 — Forbidden. The code field says why: insufficient_permissions (the key lacks the permission named in x-api-key-permission), api_key_not_allowed (API keys cannot call this endpoint), plan_limit (the tenant's plan does not include API keys, and the body has no limit_type; or the request hit a feature or usage limit of the plan, which limit_type names), tenant_suspended (the tenant is suspended), ip_not_allowed (the key is restricted to certain IP addresses and this request came from another one). An endpoint may name other codes in its description.
  • 429 — Too many requests for this API key. Wait the number of seconds in the Retry-After header, then retry.
  • 500 — Internal Server Error

GET /policies/{id}/versions

List policy versions

Requires permission: policies:read

Parameters

NameInTypeRequiredDescription
idpathstringYesPolicy ID
limitqueryintegerNoItems per page (default 100, max 1000)
offsetqueryintegerNoNumber of items to skip

Responses

  • 200 — OK
    NameTypeRequiredDescription
    dataentity.PolicyVersion[]No
    paginationentity.PaginationMetaNo
  • 400 — Bad Request
  • 401 — Authentication failed: the API key is missing, malformed, unknown, revoked or expired.
  • 403 — Forbidden. The code field says why: insufficient_permissions (the key lacks the permission named in x-api-key-permission), api_key_not_allowed (API keys cannot call this endpoint), plan_limit (the tenant's plan does not include API keys, and the body has no limit_type; or the request hit a feature or usage limit of the plan, which limit_type names), tenant_suspended (the tenant is suspended), ip_not_allowed (the key is restricted to certain IP addresses and this request came from another one). An endpoint may name other codes in its description.
  • 429 — Too many requests for this API key. Wait the number of seconds in the Retry-After header, then retry.
  • 500 — Internal Server Error

Policy Overrides

GET /policy-overrides

List policy overrides

Requires permission: policies:read

Responses

  • 200 — OK
    NameTypeRequiredDescription
    created_atstringNo
    enabledbooleanNo
    policy_idstringNo
    tenant_idstringNo
  • 401 — Authentication failed: the API key is missing, malformed, unknown, revoked or expired.
  • 403 — Forbidden. The code field says why: insufficient_permissions (the key lacks the permission named in x-api-key-permission), api_key_not_allowed (API keys cannot call this endpoint), plan_limit (the tenant's plan does not include API keys, and the body has no limit_type; or the request hit a feature or usage limit of the plan, which limit_type names), tenant_suspended (the tenant is suspended), ip_not_allowed (the key is restricted to certain IP addresses and this request came from another one). An endpoint may name other codes in its description.
  • 429 — Too many requests for this API key. Wait the number of seconds in the Retry-After header, then retry.
  • 500 — Internal Server Error

PUT /policy-overrides/{id}

Set a policy override

Requires permission: policies:write

Parameters

NameInTypeRequiredDescription
idpathstringYesPolicy ID

Request body (request.SetPolicyOverrideRequest)

NameTypeRequiredDescription
enabledbooleanNo

Responses

  • 204 — No Content
  • 400 — Bad Request
  • 401 — Authentication failed: the API key is missing, malformed, unknown, revoked or expired.
  • 403 — Forbidden. The code field says why: insufficient_permissions (the key lacks the permission named in x-api-key-permission), api_key_not_allowed (API keys cannot call this endpoint), plan_limit (the tenant's plan does not include API keys, and the body has no limit_type; or the request hit a feature or usage limit of the plan, which limit_type names), tenant_suspended (the tenant is suspended), ip_not_allowed (the key is restricted to certain IP addresses and this request came from another one). An endpoint may name other codes in its description.
  • 429 — Too many requests for this API key. Wait the number of seconds in the Retry-After header, then retry.
  • 500 — Internal Server Error

DELETE /policy-overrides/{id}

Remove a policy override

Requires permission: policies:write

Parameters

NameInTypeRequiredDescription
idpathstringYesPolicy ID

Responses

  • 204 — No Content
  • 401 — Authentication failed: the API key is missing, malformed, unknown, revoked or expired.
  • 403 — Forbidden. The code field says why: insufficient_permissions (the key lacks the permission named in x-api-key-permission), api_key_not_allowed (API keys cannot call this endpoint), plan_limit (the tenant's plan does not include API keys, and the body has no limit_type; or the request hit a feature or usage limit of the plan, which limit_type names), tenant_suspended (the tenant is suspended), ip_not_allowed (the key is restricted to certain IP addresses and this request came from another one). An endpoint may name other codes in its description.
  • 429 — Too many requests for this API key. Wait the number of seconds in the Retry-After header, then retry.
  • 500 — Internal Server Error

Remediation

POST /agents/remediate

Run a remediation playbook

Requires permission: ai_governance:write

Request body (request.ExecuteRemediationRequest)

NameTypeRequiredDescription
agent_idsstring[]Yes
forcebooleanNo
playbook_idstringYes

Responses

  • 201 — Created
    NameTypeRequiredDescription
    actions_skippedintegerNo
    actions_totalintegerNo
    agent_countintegerNo
    run_idstringNo
    statusstringNo
  • 400 — Bad Request
  • 401 — Authentication failed: the API key is missing, malformed, unknown, revoked or expired.
  • 403 — Forbidden. The code field says why: insufficient_permissions (the key lacks the permission named in x-api-key-permission), api_key_not_allowed (API keys cannot call this endpoint), plan_limit (the tenant's plan does not include API keys, and the body has no limit_type; or the request hit a feature or usage limit of the plan, which limit_type names), tenant_suspended (the tenant is suspended), ip_not_allowed (the key is restricted to certain IP addresses and this request came from another one). An endpoint may name other codes in its description.
  • 404 — Not Found
  • 409 — Conflict
  • 429 — Too many requests for this API key. Wait the number of seconds in the Retry-After header, then retry.
  • 500 — Internal Server Error

GET /playbooks

List playbooks

Requires permission: ai_governance:read

Parameters

NameInTypeRequiredDescription
platformquerystringNoFilter by agent platform

Responses

  • 200 — OK
    NameTypeRequiredDescription
    actionsentity.PlaybookAction[]No
    descriptionstringNo
    idstringNo
    matchentity.PlaybookMatchNo
    namestringNo
    platformstringNo
  • 401 — Authentication failed: the API key is missing, malformed, unknown, revoked or expired.
  • 403 — Forbidden. The code field says why: insufficient_permissions (the key lacks the permission named in x-api-key-permission), api_key_not_allowed (API keys cannot call this endpoint), plan_limit (the tenant's plan does not include API keys, and the body has no limit_type; or the request hit a feature or usage limit of the plan, which limit_type names), tenant_suspended (the tenant is suspended), ip_not_allowed (the key is restricted to certain IP addresses and this request came from another one). An endpoint may name other codes in its description.
  • 429 — Too many requests for this API key. Wait the number of seconds in the Retry-After header, then retry.

GET /playbooks/{id}

Get a playbook

Requires permission: ai_governance:read

Parameters

NameInTypeRequiredDescription
idpathstringYesPlaybook ID

Responses

  • 200 — OK
    NameTypeRequiredDescription
    actionsentity.PlaybookAction[]No
    descriptionstringNo
    idstringNo
    matchentity.PlaybookMatchNo
    namestringNo
    platformstringNo
  • 401 — Authentication failed: the API key is missing, malformed, unknown, revoked or expired.
  • 403 — Forbidden. The code field says why: insufficient_permissions (the key lacks the permission named in x-api-key-permission), api_key_not_allowed (API keys cannot call this endpoint), plan_limit (the tenant's plan does not include API keys, and the body has no limit_type; or the request hit a feature or usage limit of the plan, which limit_type names), tenant_suspended (the tenant is suspended), ip_not_allowed (the key is restricted to certain IP addresses and this request came from another one). An endpoint may name other codes in its description.
  • 404 — Not Found
  • 429 — Too many requests for this API key. Wait the number of seconds in the Retry-After header, then retry.
  • 500 — Internal Server Error

POST /playbooks/{id}/preview

Preview a playbook

Requires permission: ai_governance:write

Parameters

NameInTypeRequiredDescription
idpathstringYesPlaybook ID

Request body (request.PreviewPlaybookRequest)

NameTypeRequiredDescription
agent_idsstring[]Yes

Responses

  • 200 — OK
    NameTypeRequiredDescription
    matchedentity.PlaybookPreviewMatch[]No
    skippedentity.PlaybookPreviewSkip[]No
  • 400 — Bad Request
  • 401 — Authentication failed: the API key is missing, malformed, unknown, revoked or expired.
  • 403 — Forbidden. The code field says why: insufficient_permissions (the key lacks the permission named in x-api-key-permission), api_key_not_allowed (API keys cannot call this endpoint), plan_limit (the tenant's plan does not include API keys, and the body has no limit_type; or the request hit a feature or usage limit of the plan, which limit_type names), tenant_suspended (the tenant is suspended), ip_not_allowed (the key is restricted to certain IP addresses and this request came from another one). An endpoint may name other codes in its description.
  • 404 — Not Found
  • 429 — Too many requests for this API key. Wait the number of seconds in the Retry-After header, then retry.
  • 500 — Internal Server Error

GET /remediation/runs

List remediation runs

Requires permission: ai_governance:read

Parameters

NameInTypeRequiredDescription
statusquerystringNoFilter by run status
limitqueryintegerNoItems per page
offsetqueryintegerNoNumber of items to skip

Responses

  • 200 — OK
    NameTypeRequiredDescription
    dataentity.RemediationRun[]No
    paginationentity.PaginationMetaNo
  • 401 — Authentication failed: the API key is missing, malformed, unknown, revoked or expired.
  • 403 — Forbidden. The code field says why: insufficient_permissions (the key lacks the permission named in x-api-key-permission), api_key_not_allowed (API keys cannot call this endpoint), plan_limit (the tenant's plan does not include API keys, and the body has no limit_type; or the request hit a feature or usage limit of the plan, which limit_type names), tenant_suspended (the tenant is suspended), ip_not_allowed (the key is restricted to certain IP addresses and this request came from another one). An endpoint may name other codes in its description.
  • 429 — Too many requests for this API key. Wait the number of seconds in the Retry-After header, then retry.
  • 500 — Internal Server Error

GET /remediation/runs/{id}

Get a remediation run

Requires permission: ai_governance:read

Parameters

NameInTypeRequiredDescription
idpathstringYesResource ID (UUID)

Responses

  • 200 — OK
    NameTypeRequiredDescription
    actionsentity.RemediationAction[]No
    agent_countintegerNo
    completed_atstringNo
    created_atstringNo
    governance_rule_idstringNo
    heartbeat_atstringNo
    idstringNo
    playbook_idstringNo
    statusentity.RemediationStatusNo
    target_idstringNo
    target_typestringNo
    tenant_idstringNo
    trigger_typestringNo
    triggered_bystringNo
  • 400 — Bad Request
  • 401 — Authentication failed: the API key is missing, malformed, unknown, revoked or expired.
  • 403 — Forbidden. The code field says why: insufficient_permissions (the key lacks the permission named in x-api-key-permission), api_key_not_allowed (API keys cannot call this endpoint), plan_limit (the tenant's plan does not include API keys, and the body has no limit_type; or the request hit a feature or usage limit of the plan, which limit_type names), tenant_suspended (the tenant is suspended), ip_not_allowed (the key is restricted to certain IP addresses and this request came from another one). An endpoint may name other codes in its description.
  • 404 — Not Found
  • 429 — Too many requests for this API key. Wait the number of seconds in the Retry-After header, then retry.
  • 500 — Internal Server Error

Reports

GET /reports

List reports

Requires permission: reports:read

Parameters

NameInTypeRequiredDescription
statusquerystringNoFilter by report status
minequerybooleanNoOnly reports created by the caller

Responses

  • 200 — OK
    NameTypeRequiredDescription
    completed_atstringNoWhen generation finished
    created_atstringNoCreation timestamp
    created_bystringNoIdentity that requested the report
    error_messagestringNoError details if generation failed
    expires_atstringNoWhen the report expires
    file_namestringNoDownload file name
    file_sizeintegerNoGenerated file size in bytes
    formatentity.ReportFormatNoOutput format
    framework_idstringNoCompliance framework (for compliance reports)
    idstringNoUnique report identifier
    record_countintegerNoNumber of records in the report
    scan_idsstring[]NoScans included in the report
    schedule_idstringNoAssociated report schedule
    statusentity.ReportStatusNoJob state
    tenant_idstringNoOwning tenant
  • 401 — Authentication failed: the API key is missing, malformed, unknown, revoked or expired.
  • 403 — Forbidden. The code field says why: insufficient_permissions (the key lacks the permission named in x-api-key-permission), api_key_not_allowed (API keys cannot call this endpoint), plan_limit (the tenant's plan does not include API keys, and the body has no limit_type; or the request hit a feature or usage limit of the plan, which limit_type names), tenant_suspended (the tenant is suspended), ip_not_allowed (the key is restricted to certain IP addresses and this request came from another one). An endpoint may name other codes in its description.
  • 429 — Too many requests for this API key. Wait the number of seconds in the Retry-After header, then retry.
  • 500 — Internal Server Error

POST /reports

Create a report

Requires permission: reports:generate

Request body (request.CreateReportRequest)

NameTypeRequiredDescription
as_ofstringNoidentity_population parameters. AsOf is a date-only "YYYY-MM-DD" (UTC): empty or today = current state from live data; a past date resolves to the nearest completed population snapshot. Malformed/future/pre-first-snapshot as_of are rejected synchronously (400/400/422) before the async job is enqueued. Status, IdentityType, and ConnectorID are optional scoping filters.
campaign_idstringNoAccess-review campaign (required for access_review reports)
connector_idstringNoOptional connector filter (identity_population)
formatstringYesReport format
framework_idstringNoCompliance framework (required for compliance reports)
fromstringNooffboarding_sla window. From/To are date-only "YYYY-MM-DD" (UTC) bounding the offboarding events included; both empty resolves to a trailing audit window. A malformed date or an inverted range is rejected synchronously (400) before the async job is enqueued.
identity_typestringNoOptional identity-type filter (identity_population)
scan_idsstring[]NoScans to include
statusstringNoOptional status filter (identity_population)
tostringNoWindow end (offboarding_sla)

Responses

  • 201 — Created
    NameTypeRequiredDescription
    completed_atstringNoWhen generation finished
    created_atstringNoCreation timestamp
    created_bystringNoIdentity that requested the report
    error_messagestringNoError details if generation failed
    expires_atstringNoWhen the report expires
    file_namestringNoDownload file name
    file_sizeintegerNoGenerated file size in bytes
    formatentity.ReportFormatNoOutput format
    framework_idstringNoCompliance framework (for compliance reports)
    idstringNoUnique report identifier
    record_countintegerNoNumber of records in the report
    scan_idsstring[]NoScans included in the report
    schedule_idstringNoAssociated report schedule
    statusentity.ReportStatusNoJob state
    tenant_idstringNoOwning tenant
  • 400 — Bad Request
  • 401 — Authentication failed: the API key is missing, malformed, unknown, revoked or expired.
  • 403 — Forbidden. The code field says why: insufficient_permissions (the key lacks the permission named in x-api-key-permission), api_key_not_allowed (API keys cannot call this endpoint), plan_limit (the tenant's plan does not include API keys, and the body has no limit_type; or the request hit a feature or usage limit of the plan, which limit_type names), tenant_suspended (the tenant is suspended), ip_not_allowed (the key is restricted to certain IP addresses and this request came from another one). An endpoint may name other codes in its description.
  • 429 — Too many requests for this API key. Wait the number of seconds in the Retry-After header, then retry.
  • 500 — Internal Server Error

GET /reports/{id}

Get a report

Requires permission: reports:read

Parameters

NameInTypeRequiredDescription
idpathstringYesReport ID

Responses

  • 200 — OK
    NameTypeRequiredDescription
    completed_atstringNoWhen generation finished
    created_atstringNoCreation timestamp
    created_bystringNoIdentity that requested the report
    error_messagestringNoError details if generation failed
    expires_atstringNoWhen the report expires
    file_namestringNoDownload file name
    file_sizeintegerNoGenerated file size in bytes
    formatentity.ReportFormatNoOutput format
    framework_idstringNoCompliance framework (for compliance reports)
    idstringNoUnique report identifier
    record_countintegerNoNumber of records in the report
    scan_idsstring[]NoScans included in the report
    schedule_idstringNoAssociated report schedule
    statusentity.ReportStatusNoJob state
    tenant_idstringNoOwning tenant
  • 401 — Authentication failed: the API key is missing, malformed, unknown, revoked or expired.
  • 403 — Forbidden. The code field says why: insufficient_permissions (the key lacks the permission named in x-api-key-permission), api_key_not_allowed (API keys cannot call this endpoint), plan_limit (the tenant's plan does not include API keys, and the body has no limit_type; or the request hit a feature or usage limit of the plan, which limit_type names), tenant_suspended (the tenant is suspended), ip_not_allowed (the key is restricted to certain IP addresses and this request came from another one). An endpoint may name other codes in its description.
  • 404 — Not Found
  • 429 — Too many requests for this API key. Wait the number of seconds in the Retry-After header, then retry.
  • 500 — Internal Server Error

GET /reports/{id}/download

Download a report

Requires permission: reports:read

Parameters

NameInTypeRequiredDescription
idpathstringYesReport ID

Responses

  • 200 — OK
  • 400 — Bad Request
  • 401 — Authentication failed: the API key is missing, malformed, unknown, revoked or expired.
  • 403 — Forbidden. The code field says why: insufficient_permissions (the key lacks the permission named in x-api-key-permission), api_key_not_allowed (API keys cannot call this endpoint), plan_limit (the tenant's plan does not include API keys, and the body has no limit_type; or the request hit a feature or usage limit of the plan, which limit_type names), tenant_suspended (the tenant is suspended), ip_not_allowed (the key is restricted to certain IP addresses and this request came from another one). An endpoint may name other codes in its description.
  • 404 — Not Found
  • 429 — Too many requests for this API key. Wait the number of seconds in the Retry-After header, then retry.
  • 500 — Internal Server Error

ReportSchedules

GET /report-schedules

List report schedules

Requires permission: reports:read

Responses

  • 200 — OK
    NameTypeRequiredDescription
    created_atstringNo
    created_bystringNo
    deliver_emailbooleanNo
    deliver_slackbooleanNo
    delivery_channelsentity.DeliveryChannel[]No
    enabledbooleanNo
    filtersentity.ReportFiltersNo
    idstringNo
    intervalentity.ScheduleIntervalNo
    last_run_atstringNo
    namestringNo
    next_run_atstringNo
    report_typestringNo
    tenant_idstringNo
    updated_atstringNo
  • 401 — Authentication failed: the API key is missing, malformed, unknown, revoked or expired.
  • 403 — Forbidden. The code field says why: insufficient_permissions (the key lacks the permission named in x-api-key-permission), api_key_not_allowed (API keys cannot call this endpoint), plan_limit (the tenant's plan does not include API keys, and the body has no limit_type; or the request hit a feature or usage limit of the plan, which limit_type names), tenant_suspended (the tenant is suspended), ip_not_allowed (the key is restricted to certain IP addresses and this request came from another one). An endpoint may name other codes in its description.
  • 429 — Too many requests for this API key. Wait the number of seconds in the Retry-After header, then retry.
  • 500 — Internal Server Error

POST /report-schedules

Create a report schedule

Requires permission: reports:write

Request body (request.CreateReportScheduleRequest)

NameTypeRequiredDescription
deliver_emailbooleanNo
deliver_slackbooleanNo
delivery_channelsentity.DeliveryChannel[]No
enabledbooleanNo
filtersentity.ReportFiltersNo
intervalstringYes
namestringYes
report_typestringYes

Responses

  • 201 — Created
    NameTypeRequiredDescription
    created_atstringNo
    created_bystringNo
    deliver_emailbooleanNo
    deliver_slackbooleanNo
    delivery_channelsentity.DeliveryChannel[]No
    enabledbooleanNo
    filtersentity.ReportFiltersNo
    idstringNo
    intervalentity.ScheduleIntervalNo
    last_run_atstringNo
    namestringNo
    next_run_atstringNo
    report_typestringNo
    tenant_idstringNo
    updated_atstringNo
  • 400 — Bad Request
  • 401 — Authentication failed: the API key is missing, malformed, unknown, revoked or expired.
  • 403 — Forbidden. The code field says why: insufficient_permissions (the key lacks the permission named in x-api-key-permission), api_key_not_allowed (API keys cannot call this endpoint), plan_limit (the tenant's plan does not include API keys, and the body has no limit_type; or the request hit a feature or usage limit of the plan, which limit_type names), tenant_suspended (the tenant is suspended), ip_not_allowed (the key is restricted to certain IP addresses and this request came from another one). An endpoint may name other codes in its description.
  • 429 — Too many requests for this API key. Wait the number of seconds in the Retry-After header, then retry.
  • 500 — Internal Server Error

GET /report-schedules/{id}

Get a report schedule

Requires permission: reports:read

Parameters

NameInTypeRequiredDescription
idpathstringYesReport Schedule ID

Responses

  • 200 — OK
    NameTypeRequiredDescription
    created_atstringNo
    created_bystringNo
    deliver_emailbooleanNo
    deliver_slackbooleanNo
    delivery_channelsentity.DeliveryChannel[]No
    enabledbooleanNo
    filtersentity.ReportFiltersNo
    idstringNo
    intervalentity.ScheduleIntervalNo
    last_run_atstringNo
    namestringNo
    next_run_atstringNo
    report_typestringNo
    tenant_idstringNo
    updated_atstringNo
  • 401 — Authentication failed: the API key is missing, malformed, unknown, revoked or expired.
  • 403 — Forbidden. The code field says why: insufficient_permissions (the key lacks the permission named in x-api-key-permission), api_key_not_allowed (API keys cannot call this endpoint), plan_limit (the tenant's plan does not include API keys, and the body has no limit_type; or the request hit a feature or usage limit of the plan, which limit_type names), tenant_suspended (the tenant is suspended), ip_not_allowed (the key is restricted to certain IP addresses and this request came from another one). An endpoint may name other codes in its description.
  • 404 — Not Found
  • 429 — Too many requests for this API key. Wait the number of seconds in the Retry-After header, then retry.
  • 500 — Internal Server Error

PUT /report-schedules/{id}

Update a report schedule

Requires permission: reports:write

Parameters

NameInTypeRequiredDescription
idpathstringYesReport Schedule ID

Request body (request.UpdateReportScheduleRequest)

NameTypeRequiredDescription
deliver_emailbooleanNo
deliver_slackbooleanNo
delivery_channelsentity.DeliveryChannel[]No
enabledbooleanNo
filtersentity.ReportFiltersNo
intervalstringNo
namestringNo
report_typestringNo

Responses

  • 204 — No Content
  • 400 — Bad Request
  • 401 — Authentication failed: the API key is missing, malformed, unknown, revoked or expired.
  • 403 — Forbidden. The code field says why: insufficient_permissions (the key lacks the permission named in x-api-key-permission), api_key_not_allowed (API keys cannot call this endpoint), plan_limit (the tenant's plan does not include API keys, and the body has no limit_type; or the request hit a feature or usage limit of the plan, which limit_type names), tenant_suspended (the tenant is suspended), ip_not_allowed (the key is restricted to certain IP addresses and this request came from another one). An endpoint may name other codes in its description.
  • 404 — Not Found
  • 429 — Too many requests for this API key. Wait the number of seconds in the Retry-After header, then retry.
  • 500 — Internal Server Error

DELETE /report-schedules/{id}

Delete a report schedule

Requires permission: reports:write

Parameters

NameInTypeRequiredDescription
idpathstringYesReport Schedule ID

Responses

  • 204 — No Content
  • 401 — Authentication failed: the API key is missing, malformed, unknown, revoked or expired.
  • 403 — Forbidden. The code field says why: insufficient_permissions (the key lacks the permission named in x-api-key-permission), api_key_not_allowed (API keys cannot call this endpoint), plan_limit (the tenant's plan does not include API keys, and the body has no limit_type; or the request hit a feature or usage limit of the plan, which limit_type names), tenant_suspended (the tenant is suspended), ip_not_allowed (the key is restricted to certain IP addresses and this request came from another one). An endpoint may name other codes in its description.
  • 404 — Not Found
  • 429 — Too many requests for this API key. Wait the number of seconds in the Retry-After header, then retry.
  • 500 — Internal Server Error

Resources

GET /resources

List resources

Requires permission: resources:read

Parameters

NameInTypeRequiredDescription
connector_idquerystringNoFilter by connector ID
connector_typequerystringNoFilter by connector type (e.g. okta, slack)
resource_typequerystringNoFilter by resource type; comma-separated for multiple types (e.g. api_token,personal_access_token)
statusquerystringNoResource status filter
queryquerystringNoSearch by resource name
owner_emailquerystringNoFilter by owner email
is_externally_sharedquerystringNoFilter externally shared (true/false)
has_findingsquerystringNoFilter resources with open findings (true/false)
last_seen_beforequerystringNoResources last seen before this timestamp (RFC3339)
last_seen_afterquerystringNoResources last seen after this timestamp (RFC3339)
first_discovered_afterquerystringNoResources first discovered after this timestamp (RFC3339)
include_facetsquerybooleanNoInclude aggregate facets in response
facet_owner_limitqueryintegerNoMax owner emails in facet (default 10, max 50)
max_severityquerystringNoFilter by max finding severity
risk_score_minquerynumberNoFilter by minimum priority score
sort_byquerystringNoSort field
limitqueryintegerNoItems per page (default 100, max 1000)
cursorquerystringNoOpaque keyset cursor for the next page (omit for first page)

Responses

  • 200 — OK
    NameTypeRequiredDescription
    dataentity.ResourceRecord[]No
    facetsentity.ResourceFacetsNo
    paginationentity.CursorMetaNo
  • 400 — Bad Request
  • 401 — Authentication failed: the API key is missing, malformed, unknown, revoked or expired.
  • 403 — Forbidden. The code field says why: insufficient_permissions (the key lacks the permission named in x-api-key-permission), api_key_not_allowed (API keys cannot call this endpoint), plan_limit (the tenant's plan does not include API keys, and the body has no limit_type; or the request hit a feature or usage limit of the plan, which limit_type names), tenant_suspended (the tenant is suspended), ip_not_allowed (the key is restricted to certain IP addresses and this request came from another one). An endpoint may name other codes in its description.
  • 429 — Too many requests for this API key. Wait the number of seconds in the Retry-After header, then retry.
  • 500 — Internal Server Error

GET /resources/summary

Get resource summary

Requires permission: resources:read

Responses

  • 200 — OK
    NameTypeRequiredDescription
    by_typeobjectNo
    externally_sharedintegerNo
    total_resourcesintegerNo
    with_open_findingsintegerNo
  • 401 — Authentication failed: the API key is missing, malformed, unknown, revoked or expired.
  • 403 — Forbidden. The code field says why: insufficient_permissions (the key lacks the permission named in x-api-key-permission), api_key_not_allowed (API keys cannot call this endpoint), plan_limit (the tenant's plan does not include API keys, and the body has no limit_type; or the request hit a feature or usage limit of the plan, which limit_type names), tenant_suspended (the tenant is suspended), ip_not_allowed (the key is restricted to certain IP addresses and this request came from another one). An endpoint may name other codes in its description.
  • 429 — Too many requests for this API key. Wait the number of seconds in the Retry-After header, then retry.
  • 500 — Internal Server Error

GET /resources/{id}

Get a resource

Requires permission: resources:read

Parameters

NameInTypeRequiredDescription
idpathstringYesResource ID

Responses

  • 200 — OK
    NameTypeRequiredDescription
    connector_idstringNo
    external_idstringNo
    first_discovered_atstringNo
    idstringNo
    is_externally_sharedbooleanNo
    last_changed_atstringNo
    last_scan_idstringNo
    last_seen_atstringNo
    max_priority_scorenumberNo
    max_severitystringNo
    open_finding_countintegerNo
    owner_emailstringNo
    propertiesobjectNo
    resource_namestringNo
    resource_typestringNo
    risk_factorsstring[]No
    statusstringNo
    tenant_idstringNo
  • 401 — Authentication failed: the API key is missing, malformed, unknown, revoked or expired.
  • 403 — Forbidden. The code field says why: insufficient_permissions (the key lacks the permission named in x-api-key-permission), api_key_not_allowed (API keys cannot call this endpoint), plan_limit (the tenant's plan does not include API keys, and the body has no limit_type; or the request hit a feature or usage limit of the plan, which limit_type names), tenant_suspended (the tenant is suspended), ip_not_allowed (the key is restricted to certain IP addresses and this request came from another one). An endpoint may name other codes in its description.
  • 404 — Not Found
  • 429 — Too many requests for this API key. Wait the number of seconds in the Retry-After header, then retry.
  • 500 — Internal Server Error

GET /resources/{id}/activity

Get resource activity

Requires permission: resources:read

Parameters

NameInTypeRequiredDescription
idpathstringYesResource ID
limitqueryintegerNoItems per page (default 100, max 1000)
offsetqueryintegerNoNumber of items to skip

Responses

  • 200 — OK
    NameTypeRequiredDescription
    dataentity.ResourceActivity[]No
    paginationentity.PaginationMetaNo
  • 401 — Authentication failed: the API key is missing, malformed, unknown, revoked or expired.
  • 403 — Forbidden. The code field says why: insufficient_permissions (the key lacks the permission named in x-api-key-permission), api_key_not_allowed (API keys cannot call this endpoint), plan_limit (the tenant's plan does not include API keys, and the body has no limit_type; or the request hit a feature or usage limit of the plan, which limit_type names), tenant_suspended (the tenant is suspended), ip_not_allowed (the key is restricted to certain IP addresses and this request came from another one). An endpoint may name other codes in its description.
  • 404 — Not Found
  • 429 — Too many requests for this API key. Wait the number of seconds in the Retry-After header, then retry.
  • 500 — Internal Server Error

GET /resources/{id}/identities

List resource identities

Requires permission: identities:read

Parameters

NameInTypeRequiredDescription
idpathstringYesResource ID

Responses

  • 200 — OK
    NameTypeRequiredDescription
    connector_idstringNo
    display_namestringNo
    emailstringNo
    external_idstringNo
    identity_idstringNo
    last_activity_atstringNo
    resource_idstringNo
    resource_namestringNo
    resource_typestringNo
    rolestringNo
  • 401 — Authentication failed: the API key is missing, malformed, unknown, revoked or expired.
  • 403 — Forbidden. The code field says why: insufficient_permissions (the key lacks the permission named in x-api-key-permission), api_key_not_allowed (API keys cannot call this endpoint), plan_limit (the tenant's plan does not include API keys, and the body has no limit_type; or the request hit a feature or usage limit of the plan, which limit_type names), tenant_suspended (the tenant is suspended), ip_not_allowed (the key is restricted to certain IP addresses and this request came from another one). An endpoint may name other codes in its description.
  • 404 — Not Found
  • 429 — Too many requests for this API key. Wait the number of seconds in the Retry-After header, then retry.
  • 500 — Internal Server Error

Scans

GET /scans

List scans

Requires permission: scans:read

Parameters

NameInTypeRequiredDescription
connector_idquerystringNoFilter by connector ID
statusquerystringNoFilter by scan status
statusesquerystringNoComma-separated status list (any-of). Takes precedence over status.

Responses

  • 200 — OK
    NameTypeRequiredDescription
    dataresponse.ScanResponse[]No
    paginationentity.PaginationMetaNo
  • 401 — Authentication failed: the API key is missing, malformed, unknown, revoked or expired.
  • 403 — Forbidden. The code field says why: insufficient_permissions (the key lacks the permission named in x-api-key-permission), api_key_not_allowed (API keys cannot call this endpoint), plan_limit (the tenant's plan does not include API keys, and the body has no limit_type; or the request hit a feature or usage limit of the plan, which limit_type names), tenant_suspended (the tenant is suspended), ip_not_allowed (the key is restricted to certain IP addresses and this request came from another one). An endpoint may name other codes in its description.
  • 429 — Too many requests for this API key. Wait the number of seconds in the Retry-After header, then retry.
  • 500 — Internal Server Error

POST /scans

Start a scan

Requires permission: scans:execute

Request body (request.StartScanRequest)

NameTypeRequiredDescription
connector_idstringYesConnector to scan
force_fullbooleanNoForce a full scan instead of delta
resource_typesstring[]NoResource types to include (empty = all)

Responses

  • 201 — Created
    NameTypeRequiredDescription
    cancelled_atstringNo
    cancelled_bystringNo
    completed_atstringNoWhen the scan finished
    connector_idstringNoConnector being scanned
    created_atstringNoCreation timestamp
    delta_resource_countintegerNoSet on delta scans only: resources the delta fetch returned, summed over all resource types, including types fetched in full
    error_messagestringNoError details if scan failed
    failed_resource_countintegerNoFailedResourceCount is the number of resource types whose fetch failed during the scan.
    failed_resource_typesstring[]NoFailedResourceTypes lists the specific resource types that failed to fetch (rate limit, 5xx, etc.). Serialized as JSONB; empty list for clean scans.
    fallback_from_edgebooleanNoWhether this scan fell back from edge to origin
    fallback_reasonstringNoReason for edge-to-origin fallback
    finalize_warningsentity.ScanWarning[]NoNon-fatal warnings emitted during scan finalization
    idstringNoUnique scan identifier
    is_deltabooleanNoWhether this was a delta/incremental scan
    partial_failure_ratenumberNo
    per_scan_detail_availablebooleanNoPerScanDetailAvailable is true when GET /scans/{scan_id}/findings lists the findings this scan observed, with their at-scan fields: a scan run since per-scan tracking, less than 30 days old.
    requested_resource_typesstring[]NoRequestedResourceTypes is the original set of resource types the scan was asked to cover, before any cooldown or other filtering. ResourceTypes is the subset that was actually scanned. When the two differ, the difference is "skipped" (e.g., drive_file cooldown).
    resource_fetch_resultsentity.ResourceFetchResult[]NoPer-resource-type fetch outcomes
    resource_typesstring[]NoResource types actually scanned (post-cooldown; see RequestedResourceTypes for pre-filter set)
    started_atstringNoWhen the scan started
    statusentity.ScanStatusNoScan state (pending, running, completed, failed)
    tenant_idstringNoOwning tenant
    total_findingsintegerNoNumber of findings produced
  • 400 — Bad Request
  • 401 — Authentication failed: the API key is missing, malformed, unknown, revoked or expired.
  • 403 — Forbidden. The code field says why: insufficient_permissions (the key lacks the permission named in x-api-key-permission), api_key_not_allowed (API keys cannot call this endpoint), plan_limit (the tenant's plan does not include API keys, and the body has no limit_type; or the request hit a feature or usage limit of the plan, which limit_type names), tenant_suspended (the tenant is suspended), ip_not_allowed (the key is restricted to certain IP addresses and this request came from another one). An endpoint may name other codes in its description.
  • 429 — Too many requests for this API key. Wait the number of seconds in the Retry-After header, then retry.
  • 500 — Internal Server Error

POST /scans/bulk-cancel

Bulk cancel scans

Requires permission: scans:execute

Request body (request.BulkCancelScanRequest)

NameTypeRequiredDescription
scan_idsstring[]Yes

Responses

  • 200 — OK
    NameTypeRequiredDescription
    errorstringNo
    scan_idstringNo
    statusstringNo
  • 400 — Bad Request
  • 401 — Authentication failed: the API key is missing, malformed, unknown, revoked or expired.
  • 403 — Forbidden. The code field says why: insufficient_permissions (the key lacks the permission named in x-api-key-permission), api_key_not_allowed (API keys cannot call this endpoint), plan_limit (the tenant's plan does not include API keys, and the body has no limit_type; or the request hit a feature or usage limit of the plan, which limit_type names), tenant_suspended (the tenant is suspended), ip_not_allowed (the key is restricted to certain IP addresses and this request came from another one). An endpoint may name other codes in its description.
  • 429 — Too many requests for this API key. Wait the number of seconds in the Retry-After header, then retry.
  • 500 — Internal Server Error

POST /scans/bulk-start

Bulk start scans

Requires permission: scans:execute

Request body (request.BulkStartScanRequest)

NameTypeRequiredDescription
connector_idsstring[]Yes
force_fullbooleanNo
resource_typesstring[]No

Responses

  • 201 — Created
    NameTypeRequiredDescription
    connector_idstringNo
    errorstringNo
    limit_typestringNo
    scanentity.ScanNo
  • 400 — Bad Request
  • 401 — Authentication failed: the API key is missing, malformed, unknown, revoked or expired.
  • 403 — Forbidden. The code field says why: insufficient_permissions (the key lacks the permission named in x-api-key-permission), api_key_not_allowed (API keys cannot call this endpoint), plan_limit (the tenant's plan does not include API keys, and the body has no limit_type; or the request hit a feature or usage limit of the plan, which limit_type names), tenant_suspended (the tenant is suspended), ip_not_allowed (the key is restricted to certain IP addresses and this request came from another one). An endpoint may name other codes in its description.
  • 429 — Too many requests for this API key. Wait the number of seconds in the Retry-After header, then retry.
  • 500 — Internal Server Error

GET /scans/compare

Compare two scans

Requires permission: scans:read

Parameters

NameInTypeRequiredDescription
aquerystringYesScan ID
bquerystringYesScan ID of the same connector
bucketquerystringNoBucket to list
limitqueryintegerNoPage size (default 100, max 1000)
offsetqueryintegerNoOffset (default 0)

Responses

  • 200 — OK
    NameTypeRequiredDescription
    bucketentity.CompareBucketNoThe bucket the items belong to
    countsentity.ScanCompareCountsNoThe size of every bucket
    itemsentity.ObservedFinding[]NoOne page of the bucket
    newer_scan_idstringNoThe current scan
    older_scan_idstringNoThe baseline scan
    totalintegerNoFindings in the whole bucket
    withheldintegerNoFindings of the bucket the plan's visible window hides
  • 400 — Bad Request
  • 401 — Authentication failed: the API key is missing, malformed, unknown, revoked or expired.
  • 403 — Forbidden. The code field says why: insufficient_permissions (the key lacks the permission named in x-api-key-permission), api_key_not_allowed (API keys cannot call this endpoint), plan_limit (the tenant's plan does not include API keys, and the body has no limit_type; or the request hit a feature or usage limit of the plan, which limit_type names), tenant_suspended (the tenant is suspended), ip_not_allowed (the key is restricted to certain IP addresses and this request came from another one). An endpoint may name other codes in its description.
  • 404 — Unknown scan, or another tenant's
  • 409 — per_scan_detail_unavailable: a scan from before per-scan tracking or older than 30 days
  • 422 — scans_not_comparable: the scans are not comparable: they must be two completed, full (non-delta) scans of the same connector that observed the same resource types
  • 429 — Too many requests for this API key. Wait the number of seconds in the Retry-After header, then retry.
  • 500 — Internal Server Error

GET /scans/{id}

Get a scan

Requires permission: scans:read

Parameters

NameInTypeRequiredDescription
idpathstringYesScan ID

Responses

  • 200 — OK
    NameTypeRequiredDescription
    cancelled_atstringNo
    cancelled_bystringNo
    completed_atstringNoWhen the scan finished
    connector_idstringNoConnector being scanned
    created_atstringNoCreation timestamp
    delta_resource_countintegerNoSet on delta scans only: resources the delta fetch returned, summed over all resource types, including types fetched in full
    error_messagestringNoError details if scan failed
    failed_resource_countintegerNoFailedResourceCount is the number of resource types whose fetch failed during the scan.
    failed_resource_typesstring[]NoFailedResourceTypes lists the specific resource types that failed to fetch (rate limit, 5xx, etc.). Serialized as JSONB; empty list for clean scans.
    fallback_from_edgebooleanNoWhether this scan fell back from edge to origin
    fallback_reasonstringNoReason for edge-to-origin fallback
    finalize_warningsentity.ScanWarning[]NoNon-fatal warnings emitted during scan finalization
    idstringNoUnique scan identifier
    is_deltabooleanNoWhether this was a delta/incremental scan
    partial_failure_ratenumberNo
    per_scan_detail_availablebooleanNoPerScanDetailAvailable is true when GET /scans/{scan_id}/findings lists the findings this scan observed, with their at-scan fields: a scan run since per-scan tracking, less than 30 days old.
    requested_resource_typesstring[]NoRequestedResourceTypes is the original set of resource types the scan was asked to cover, before any cooldown or other filtering. ResourceTypes is the subset that was actually scanned. When the two differ, the difference is "skipped" (e.g., drive_file cooldown).
    resource_fetch_resultsentity.ResourceFetchResult[]NoPer-resource-type fetch outcomes
    resource_typesstring[]NoResource types actually scanned (post-cooldown; see RequestedResourceTypes for pre-filter set)
    started_atstringNoWhen the scan started
    statusentity.ScanStatusNoScan state (pending, running, completed, failed)
    tenant_idstringNoOwning tenant
    total_findingsintegerNoNumber of findings produced
  • 401 — Authentication failed: the API key is missing, malformed, unknown, revoked or expired.
  • 403 — Forbidden. The code field says why: insufficient_permissions (the key lacks the permission named in x-api-key-permission), api_key_not_allowed (API keys cannot call this endpoint), plan_limit (the tenant's plan does not include API keys, and the body has no limit_type; or the request hit a feature or usage limit of the plan, which limit_type names), tenant_suspended (the tenant is suspended), ip_not_allowed (the key is restricted to certain IP addresses and this request came from another one). An endpoint may name other codes in its description.
  • 404 — Not Found
  • 429 — Too many requests for this API key. Wait the number of seconds in the Retry-After header, then retry.
  • 500 — Internal Server Error

POST /scans/{id}/cancel

Cancel a scan

Requires permission: scans:execute

Parameters

NameInTypeRequiredDescription
idpathstringYesScan ID

Responses

  • 200 — OK
    NameTypeRequiredDescription
    cancelled_atstringNo
    cancelled_bystringNo
    completed_atstringNoWhen the scan finished
    connector_idstringNoConnector being scanned
    created_atstringNoCreation timestamp
    delta_resource_countintegerNoSet on delta scans only: resources the delta fetch returned, summed over all resource types, including types fetched in full
    error_messagestringNoError details if scan failed
    failed_resource_countintegerNoFailedResourceCount is the number of resource types whose fetch failed during the scan.
    failed_resource_typesstring[]NoFailedResourceTypes lists the specific resource types that failed to fetch (rate limit, 5xx, etc.). Serialized as JSONB; empty list for clean scans.
    fallback_from_edgebooleanNoWhether this scan fell back from edge to origin
    fallback_reasonstringNoReason for edge-to-origin fallback
    finalize_warningsentity.ScanWarning[]NoNon-fatal warnings emitted during scan finalization
    idstringNoUnique scan identifier
    is_deltabooleanNoWhether this was a delta/incremental scan
    partial_failure_ratenumberNo
    per_scan_detail_availablebooleanNoPerScanDetailAvailable is true when GET /scans/{scan_id}/findings lists the findings this scan observed, with their at-scan fields: a scan run since per-scan tracking, less than 30 days old.
    requested_resource_typesstring[]NoRequestedResourceTypes is the original set of resource types the scan was asked to cover, before any cooldown or other filtering. ResourceTypes is the subset that was actually scanned. When the two differ, the difference is "skipped" (e.g., drive_file cooldown).
    resource_fetch_resultsentity.ResourceFetchResult[]NoPer-resource-type fetch outcomes
    resource_typesstring[]NoResource types actually scanned (post-cooldown; see RequestedResourceTypes for pre-filter set)
    started_atstringNoWhen the scan started
    statusentity.ScanStatusNoScan state (pending, running, completed, failed)
    tenant_idstringNoOwning tenant
    total_findingsintegerNoNumber of findings produced
  • 401 — Authentication failed: the API key is missing, malformed, unknown, revoked or expired.
  • 403 — Forbidden. The code field says why: insufficient_permissions (the key lacks the permission named in x-api-key-permission), api_key_not_allowed (API keys cannot call this endpoint), plan_limit (the tenant's plan does not include API keys, and the body has no limit_type; or the request hit a feature or usage limit of the plan, which limit_type names), tenant_suspended (the tenant is suspended), ip_not_allowed (the key is restricted to certain IP addresses and this request came from another one). An endpoint may name other codes in its description.
  • 404 — Not Found
  • 409 — Conflict
  • 429 — Too many requests for this API key. Wait the number of seconds in the Retry-After header, then retry.
  • 500 — Internal Server Error

GET /scans/{id}/progress

Get scan progress

Requires permission: scans:read

Parameters

NameInTypeRequiredDescription
idpathstringYesScan ID

Responses

  • 200 — OK
    NameTypeRequiredDescription
    fetchedintegerNo
    itemsentity.EdgeScanProgress[]No
    scan_idstringNo
    statusentity.ScanStatusNo
    totalintegerNo
  • 401 — Authentication failed: the API key is missing, malformed, unknown, revoked or expired.
  • 403 — Forbidden. The code field says why: insufficient_permissions (the key lacks the permission named in x-api-key-permission), api_key_not_allowed (API keys cannot call this endpoint), plan_limit (the tenant's plan does not include API keys, and the body has no limit_type; or the request hit a feature or usage limit of the plan, which limit_type names), tenant_suspended (the tenant is suspended), ip_not_allowed (the key is restricted to certain IP addresses and this request came from another one). An endpoint may name other codes in its description.
  • 404 — Not Found
  • 429 — Too many requests for this API key. Wait the number of seconds in the Retry-After header, then retry.
  • 500 — Internal Server Error

GET /scans/{scan_id}/findings

Get findings by scan

Requires permission: findings:read

Parameters

NameInTypeRequiredDescription
scan_idpathstringYesScan ID
limitqueryintegerNoPage size (default 100, max 1000)
offsetqueryintegerNoOffset (default 0)

Responses

  • 200 — OK
    NameTypeRequiredDescription
    itemsentity.ObservedFinding[]NoOne page of the scan's findings
    per_scan_detail_availablebooleanNoItems are what the scan observed, with their at-scan fields
    totalintegerNoFindings in the whole listing
    withheldintegerNoFindings the plan's visible window hides
  • 401 — Authentication failed: the API key is missing, malformed, unknown, revoked or expired.
  • 403 — Forbidden. The code field says why: insufficient_permissions (the key lacks the permission named in x-api-key-permission), api_key_not_allowed (API keys cannot call this endpoint), plan_limit (the tenant's plan does not include API keys, and the body has no limit_type; or the request hit a feature or usage limit of the plan, which limit_type names), tenant_suspended (the tenant is suspended), ip_not_allowed (the key is restricted to certain IP addresses and this request came from another one). An endpoint may name other codes in its description.
  • 404 — Not Found
  • 429 — Too many requests for this API key. Wait the number of seconds in the Retry-After header, then retry.
  • 500 — Internal Server Error

ScanSchedules

GET /scan-schedules

List scan schedules

Requires permission: scan_schedules:read

Parameters

NameInTypeRequiredDescription
connector_idquerystringNoFilter by connector ID
enabledquerystringNoFilter by enabled status

Responses

  • 200 — OK
    NameTypeRequiredDescription
    connector_idstringNoConnector to scan
    consecutive_failuresintegerNoNumber of consecutive trigger failures
    created_atstringNoCreation timestamp
    enabledbooleanNoWhether this schedule is active
    idstringNoUnique identifier
    intervalentity.ScheduleIntervalNoRecurring frequency
    last_errorstringNoLast trigger failure message
    last_run_atstringNoLast execution timestamp
    last_scan_idstringNoLast triggered scan ID
    managedbooleanNoPlatform-managed schedule (cannot be deleted by client)
    next_run_atstringNoNext scheduled execution
    resource_typesstring[]NoResource types to scan
    tenant_idstringNoOwning tenant
    updated_atstringNoLast update timestamp
  • 401 — Authentication failed: the API key is missing, malformed, unknown, revoked or expired.
  • 403 — Forbidden. The code field says why: insufficient_permissions (the key lacks the permission named in x-api-key-permission), api_key_not_allowed (API keys cannot call this endpoint), plan_limit (the tenant's plan does not include API keys, and the body has no limit_type; or the request hit a feature or usage limit of the plan, which limit_type names), tenant_suspended (the tenant is suspended), ip_not_allowed (the key is restricted to certain IP addresses and this request came from another one). An endpoint may name other codes in its description.
  • 429 — Too many requests for this API key. Wait the number of seconds in the Retry-After header, then retry.
  • 500 — Internal Server Error

POST /scan-schedules

Create a scan schedule

Requires permission: scan_schedules:write

Request body (request.CreateScanScheduleRequest)

NameTypeRequiredDescription
connector_idstringYesConnector to schedule
intervalstringYesRecurring frequency
resource_typesstring[]NoResource types to scan

Responses

  • 201 — Created
    NameTypeRequiredDescription
    connector_idstringNoConnector to scan
    consecutive_failuresintegerNoNumber of consecutive trigger failures
    created_atstringNoCreation timestamp
    enabledbooleanNoWhether this schedule is active
    idstringNoUnique identifier
    intervalentity.ScheduleIntervalNoRecurring frequency
    last_errorstringNoLast trigger failure message
    last_run_atstringNoLast execution timestamp
    last_scan_idstringNoLast triggered scan ID
    managedbooleanNoPlatform-managed schedule (cannot be deleted by client)
    next_run_atstringNoNext scheduled execution
    resource_typesstring[]NoResource types to scan
    tenant_idstringNoOwning tenant
    updated_atstringNoLast update timestamp
  • 400 — Bad Request
  • 401 — Authentication failed: the API key is missing, malformed, unknown, revoked or expired.
  • 403 — Forbidden. The code field says why: insufficient_permissions (the key lacks the permission named in x-api-key-permission), api_key_not_allowed (API keys cannot call this endpoint), plan_limit (the tenant's plan does not include API keys, and the body has no limit_type; or the request hit a feature or usage limit of the plan, which limit_type names), tenant_suspended (the tenant is suspended), ip_not_allowed (the key is restricted to certain IP addresses and this request came from another one). An endpoint may name other codes in its description.
  • 429 — Too many requests for this API key. Wait the number of seconds in the Retry-After header, then retry.
  • 500 — Internal Server Error

GET /scan-schedules/{id}

Get a scan schedule

Requires permission: scan_schedules:read

Parameters

NameInTypeRequiredDescription
idpathstringYesScan Schedule ID

Responses

  • 200 — OK
    NameTypeRequiredDescription
    connector_idstringNoConnector to scan
    consecutive_failuresintegerNoNumber of consecutive trigger failures
    created_atstringNoCreation timestamp
    enabledbooleanNoWhether this schedule is active
    idstringNoUnique identifier
    intervalentity.ScheduleIntervalNoRecurring frequency
    last_errorstringNoLast trigger failure message
    last_run_atstringNoLast execution timestamp
    last_scan_idstringNoLast triggered scan ID
    managedbooleanNoPlatform-managed schedule (cannot be deleted by client)
    next_run_atstringNoNext scheduled execution
    resource_typesstring[]NoResource types to scan
    tenant_idstringNoOwning tenant
    updated_atstringNoLast update timestamp
  • 401 — Authentication failed: the API key is missing, malformed, unknown, revoked or expired.
  • 403 — Forbidden. The code field says why: insufficient_permissions (the key lacks the permission named in x-api-key-permission), api_key_not_allowed (API keys cannot call this endpoint), plan_limit (the tenant's plan does not include API keys, and the body has no limit_type; or the request hit a feature or usage limit of the plan, which limit_type names), tenant_suspended (the tenant is suspended), ip_not_allowed (the key is restricted to certain IP addresses and this request came from another one). An endpoint may name other codes in its description.
  • 404 — Not Found
  • 429 — Too many requests for this API key. Wait the number of seconds in the Retry-After header, then retry.
  • 500 — Internal Server Error

PUT /scan-schedules/{id}

Update a scan schedule

Requires permission: scan_schedules:write

Parameters

NameInTypeRequiredDescription
idpathstringYesScan Schedule ID

Request body (request.UpdateScanScheduleRequest)

NameTypeRequiredDescription
enabledbooleanNoEnable or disable
intervalstringNoUpdated frequency
resource_typesstring[]NoUpdated resource types

Responses

  • 204 — No Content
  • 400 — Bad Request
  • 401 — Authentication failed: the API key is missing, malformed, unknown, revoked or expired.
  • 403 — Forbidden. The code field says why: insufficient_permissions (the key lacks the permission named in x-api-key-permission), api_key_not_allowed (API keys cannot call this endpoint), plan_limit (the tenant's plan does not include API keys, and the body has no limit_type; or the request hit a feature or usage limit of the plan, which limit_type names), tenant_suspended (the tenant is suspended), ip_not_allowed (the key is restricted to certain IP addresses and this request came from another one). An endpoint may name other codes in its description.
  • 429 — Too many requests for this API key. Wait the number of seconds in the Retry-After header, then retry.
  • 500 — Internal Server Error

DELETE /scan-schedules/{id}

Delete a scan schedule

Requires permission: scan_schedules:write

Parameters

NameInTypeRequiredDescription
idpathstringYesScan Schedule ID

Responses

  • 204 — No Content
  • 401 — Authentication failed: the API key is missing, malformed, unknown, revoked or expired.
  • 403 — Forbidden. The code field says why: insufficient_permissions (the key lacks the permission named in x-api-key-permission), api_key_not_allowed (API keys cannot call this endpoint), plan_limit (the tenant's plan does not include API keys, and the body has no limit_type; or the request hit a feature or usage limit of the plan, which limit_type names), tenant_suspended (the tenant is suspended), ip_not_allowed (the key is restricted to certain IP addresses and this request came from another one). An endpoint may name other codes in its description.
  • 429 — Too many requests for this API key. Wait the number of seconds in the Retry-After header, then retry.
  • 500 — Internal Server Error

Setup

GET /setup/guides

List connector setup guides

Requires permission: connectors:read

Responses

  • 200 — OK
    NameTypeRequiredDescription
    connector_typestringNo
    descriptionstringNo
    display_namestringNo
    doc_urlstringNo
    estimated_minutesintegerNo
    estimated_scan_minutesintegerNoEstimatedScanMinutes is the typical wall-clock of the first full scan, shown on the "scan running" step. 0 means unknown ("a few minutes").
    required_fieldsentity.GuideField[]No
    required_permissionsentity.GuidePermission[]No
    setup_stepsentity.GuideStep[]NoSetupSteps is the ordered, copy-paste-able credential walkthrough shown above the config form. Optional: guides without it render as before.
    setup_urlstringNo
  • 401 — Authentication failed: the API key is missing, malformed, unknown, revoked or expired.
  • 403 — Forbidden. The code field says why: insufficient_permissions (the key lacks the permission named in x-api-key-permission), api_key_not_allowed (API keys cannot call this endpoint), plan_limit (the tenant's plan does not include API keys, and the body has no limit_type; or the request hit a feature or usage limit of the plan, which limit_type names), tenant_suspended (the tenant is suspended), ip_not_allowed (the key is restricted to certain IP addresses and this request came from another one). An endpoint may name other codes in its description.
  • 429 — Too many requests for this API key. Wait the number of seconds in the Retry-After header, then retry.
  • 500 — Internal Server Error

GET /setup/integration-guides

List integration setup guides

Requires permission: connectors:read

Responses

  • 200 — OK
    NameTypeRequiredDescription
    descriptionstringNo
    display_namestringNo
    doc_urlstringNo
    estimated_minutesintegerNo
    integration_typestringNo
    permissionsentity.GuidePermission[]No
    prerequisitesstring[]No
    required_fieldsentity.GuideField[]No
    setup_stepsentity.GuideStep[]No
  • 401 — Authentication failed: the API key is missing, malformed, unknown, revoked or expired.
  • 403 — Forbidden. The code field says why: insufficient_permissions (the key lacks the permission named in x-api-key-permission), api_key_not_allowed (API keys cannot call this endpoint), plan_limit (the tenant's plan does not include API keys, and the body has no limit_type; or the request hit a feature or usage limit of the plan, which limit_type names), tenant_suspended (the tenant is suspended), ip_not_allowed (the key is restricted to certain IP addresses and this request came from another one). An endpoint may name other codes in its description.
  • 429 — Too many requests for this API key. Wait the number of seconds in the Retry-After header, then retry.
  • 500 — Internal Server Error

GET /setup/status

Get setup status

Requires permission: connectors:read

Responses

  • 200 — OK
    NameTypeRequiredDescription
    action_requiredentity.SetupActionNo
    first_scan_completedbooleanNo
    next_stepentity.SetupStepNo
    overall_progressnumberNo
    stepsentity.SetupStep[]No
  • 401 — Authentication failed: the API key is missing, malformed, unknown, revoked or expired.
  • 403 — Forbidden. The code field says why: insufficient_permissions (the key lacks the permission named in x-api-key-permission), api_key_not_allowed (API keys cannot call this endpoint), plan_limit (the tenant's plan does not include API keys, and the body has no limit_type; or the request hit a feature or usage limit of the plan, which limit_type names), tenant_suspended (the tenant is suspended), ip_not_allowed (the key is restricted to certain IP addresses and this request came from another one). An endpoint may name other codes in its description.
  • 429 — Too many requests for this API key. Wait the number of seconds in the Retry-After header, then retry.
  • 500 — Internal Server Error

Severity Overrides

GET /severity-overrides

List severity overrides

Requires permission: policies:read

Parameters

NameInTypeRequiredDescription
scopequerystringNoFilter by scope (policy or finding)
statusquerystringNoFilter by status
target_idquerystringNoFilter by target ID (UUID)
limitqueryintegerNoItems per page
offsetqueryintegerNoNumber of items to skip

Responses

  • 200 — OK
    NameTypeRequiredDescription
    dataentity.SeverityOverride[]No
    paginationentity.PaginationMetaNo
  • 400 — Bad Request
  • 401 — Authentication failed: the API key is missing, malformed, unknown, revoked or expired.
  • 403 — Forbidden. The code field says why: insufficient_permissions (the key lacks the permission named in x-api-key-permission), api_key_not_allowed (API keys cannot call this endpoint), plan_limit (the tenant's plan does not include API keys, and the body has no limit_type; or the request hit a feature or usage limit of the plan, which limit_type names), tenant_suspended (the tenant is suspended), ip_not_allowed (the key is restricted to certain IP addresses and this request came from another one). An endpoint may name other codes in its description.
  • 429 — Too many requests for this API key. Wait the number of seconds in the Retry-After header, then retry.
  • 500 — Internal Server Error

POST /severity-overrides

Create a severity override

Requires permission: policies:write

Request body (request.CreateSeverityOverrideRequest)

NameTypeRequiredDescription
expires_atstringNo
justificationstringYes
requested_severitystringYes
scopestringYes
target_idstringYes

Responses

  • 201 — Created
    NameTypeRequiredDescription
    approval_chain_idstringNo
    approved_by_emailstringNo
    connector_idstringNo
    created_atstringNo
    created_by_emailstringNo
    expires_atstringNo
    idstringNo
    justificationstringNo
    original_severityentity.SeverityNo
    policy_idstringNo
    requested_severityentity.SeverityNo
    resource_idstringNo
    resource_typestringNo
    revoked_atstringNo
    revoked_by_emailstringNo
    scopeentity.SeverityOverrideScopeNo
    statusentity.SeverityOverrideStatusNo
    target_idstringNo
    tenant_idstringNo
    updated_atstringNo
  • 400 — Bad Request
  • 401 — Authentication failed: the API key is missing, malformed, unknown, revoked or expired.
  • 403 — Forbidden. The code field says why: insufficient_permissions (the key lacks the permission named in x-api-key-permission), api_key_not_allowed (API keys cannot call this endpoint), plan_limit (the tenant's plan does not include API keys, and the body has no limit_type; or the request hit a feature or usage limit of the plan, which limit_type names), tenant_suspended (the tenant is suspended), ip_not_allowed (the key is restricted to certain IP addresses and this request came from another one). An endpoint may name other codes in its description.
  • 404 — Not Found
  • 409 — Conflict
  • 429 — Too many requests for this API key. Wait the number of seconds in the Retry-After header, then retry.
  • 500 — Internal Server Error

GET /severity-overrides/{id}

Get a severity override

Requires permission: policies:read

Parameters

NameInTypeRequiredDescription
idpathstringYesResource ID (UUID)

Responses

  • 200 — OK
    NameTypeRequiredDescription
    approval_chain_idstringNo
    approved_by_emailstringNo
    connector_idstringNo
    created_atstringNo
    created_by_emailstringNo
    expires_atstringNo
    idstringNo
    justificationstringNo
    original_severityentity.SeverityNo
    policy_idstringNo
    requested_severityentity.SeverityNo
    resource_idstringNo
    resource_typestringNo
    revoked_atstringNo
    revoked_by_emailstringNo
    scopeentity.SeverityOverrideScopeNo
    statusentity.SeverityOverrideStatusNo
    target_idstringNo
    tenant_idstringNo
    updated_atstringNo
  • 400 — Bad Request
  • 401 — Authentication failed: the API key is missing, malformed, unknown, revoked or expired.
  • 403 — Forbidden. The code field says why: insufficient_permissions (the key lacks the permission named in x-api-key-permission), api_key_not_allowed (API keys cannot call this endpoint), plan_limit (the tenant's plan does not include API keys, and the body has no limit_type; or the request hit a feature or usage limit of the plan, which limit_type names), tenant_suspended (the tenant is suspended), ip_not_allowed (the key is restricted to certain IP addresses and this request came from another one). An endpoint may name other codes in its description.
  • 404 — Not Found
  • 429 — Too many requests for this API key. Wait the number of seconds in the Retry-After header, then retry.
  • 500 — Internal Server Error

GET /severity-overrides/{id}/approvals

List severity override approvals

Requires permission: policies:read

Parameters

NameInTypeRequiredDescription
idpathstringYesResource ID (UUID)

Responses

  • 200 — OK
    NameTypeRequiredDescription
    approver_emailstringNo
    approver_idstringNo
    assigned_approver_emailstringNo
    assigned_delegate_emailstringNo
    commentstringNo
    created_atstringNo
    decided_atstringNo
    decisionstringNo
    delegated_atstringNo
    exception_idstringNo
    idstringNo
    is_delegatebooleanNo
    severity_override_idstringNo
    step_orderintegerNo
    tenant_idstringNo
  • 400 — Bad Request
  • 401 — Authentication failed: the API key is missing, malformed, unknown, revoked or expired.
  • 403 — Forbidden. The code field says why: insufficient_permissions (the key lacks the permission named in x-api-key-permission), api_key_not_allowed (API keys cannot call this endpoint), plan_limit (the tenant's plan does not include API keys, and the body has no limit_type; or the request hit a feature or usage limit of the plan, which limit_type names), tenant_suspended (the tenant is suspended), ip_not_allowed (the key is restricted to certain IP addresses and this request came from another one). An endpoint may name other codes in its description.
  • 404 — Not Found
  • 429 — Too many requests for this API key. Wait the number of seconds in the Retry-After header, then retry.
  • 500 — Internal Server Error

POST /severity-overrides/{id}/revoke

Revoke a severity override

Requires permission: policies:write

Parameters

NameInTypeRequiredDescription
idpathstringYesResource ID (UUID)

Request body (request.RevokeSeverityOverrideRequest)

NameTypeRequiredDescription
reasonstringNo

Responses

  • 204 — No Content
  • 400 — Bad Request
  • 401 — Authentication failed: the API key is missing, malformed, unknown, revoked or expired.
  • 403 — Forbidden. The code field says why: insufficient_permissions (the key lacks the permission named in x-api-key-permission), api_key_not_allowed (API keys cannot call this endpoint), plan_limit (the tenant's plan does not include API keys, and the body has no limit_type; or the request hit a feature or usage limit of the plan, which limit_type names), tenant_suspended (the tenant is suspended), ip_not_allowed (the key is restricted to certain IP addresses and this request came from another one). An endpoint may name other codes in its description.
  • 404 — Not Found
  • 409 — Conflict
  • 429 — Too many requests for this API key. Wait the number of seconds in the Retry-After header, then retry.
  • 500 — Internal Server Error

SLA Policies

GET /sla-policies

List SLA policies

Requires permission: sla_policies:read

Responses

  • 200 — OK
    NameTypeRequiredDescription
    created_atstringNo
    escalation_channelsstring[]No
    idstringNo
    is_activebooleanNo
    namestringNo
    rulesentity.SLARule[]No
    tenant_idstringNo
    updated_atstringNo
  • 401 — Authentication failed: the API key is missing, malformed, unknown, revoked or expired.
  • 403 — Forbidden. The code field says why: insufficient_permissions (the key lacks the permission named in x-api-key-permission), api_key_not_allowed (API keys cannot call this endpoint), plan_limit (the tenant's plan does not include API keys, and the body has no limit_type; or the request hit a feature or usage limit of the plan, which limit_type names), tenant_suspended (the tenant is suspended), ip_not_allowed (the key is restricted to certain IP addresses and this request came from another one). An endpoint may name other codes in its description.
  • 429 — Too many requests for this API key. Wait the number of seconds in the Retry-After header, then retry.
  • 500 — Internal Server Error

POST /sla-policies

Create an SLA policy

Requires permission: sla_policies:write

Request body (request.CreateSLAPolicyRequest)

NameTypeRequiredDescription
escalation_channelsstring[]No
namestringYes
rulesrequest.SLARuleInput[]Yes

Responses

  • 201 — Created
    NameTypeRequiredDescription
    created_atstringNo
    escalation_channelsstring[]No
    idstringNo
    is_activebooleanNo
    namestringNo
    rulesentity.SLARule[]No
    tenant_idstringNo
    updated_atstringNo
  • 400 — Bad Request
  • 401 — Authentication failed: the API key is missing, malformed, unknown, revoked or expired.
  • 403 — Forbidden. The code field says why: insufficient_permissions (the key lacks the permission named in x-api-key-permission), api_key_not_allowed (API keys cannot call this endpoint), plan_limit (the tenant's plan does not include API keys, and the body has no limit_type; or the request hit a feature or usage limit of the plan, which limit_type names), tenant_suspended (the tenant is suspended), ip_not_allowed (the key is restricted to certain IP addresses and this request came from another one). An endpoint may name other codes in its description.
  • 429 — Too many requests for this API key. Wait the number of seconds in the Retry-After header, then retry.
  • 500 — Internal Server Error

GET /sla-policies/{id}

Get an SLA policy

Requires permission: sla_policies:read

Parameters

NameInTypeRequiredDescription
idpathstringYesSLA Policy ID

Responses

  • 200 — OK
    NameTypeRequiredDescription
    created_atstringNo
    escalation_channelsstring[]No
    idstringNo
    is_activebooleanNo
    namestringNo
    rulesentity.SLARule[]No
    tenant_idstringNo
    updated_atstringNo
  • 401 — Authentication failed: the API key is missing, malformed, unknown, revoked or expired.
  • 403 — Forbidden. The code field says why: insufficient_permissions (the key lacks the permission named in x-api-key-permission), api_key_not_allowed (API keys cannot call this endpoint), plan_limit (the tenant's plan does not include API keys, and the body has no limit_type; or the request hit a feature or usage limit of the plan, which limit_type names), tenant_suspended (the tenant is suspended), ip_not_allowed (the key is restricted to certain IP addresses and this request came from another one). An endpoint may name other codes in its description.
  • 404 — Not Found
  • 429 — Too many requests for this API key. Wait the number of seconds in the Retry-After header, then retry.
  • 500 — Internal Server Error

PUT /sla-policies/{id}

Update an SLA policy

Requires permission: sla_policies:write

Parameters

NameInTypeRequiredDescription
idpathstringYesSLA Policy ID

Request body (request.UpdateSLAPolicyRequest)

NameTypeRequiredDescription
escalation_channelsstring[]No
namestringYes
rulesrequest.SLARuleInput[]Yes

Responses

  • 200 — OK
    NameTypeRequiredDescription
    created_atstringNo
    escalation_channelsstring[]No
    idstringNo
    is_activebooleanNo
    namestringNo
    rulesentity.SLARule[]No
    tenant_idstringNo
    updated_atstringNo
  • 400 — Bad Request
  • 401 — Authentication failed: the API key is missing, malformed, unknown, revoked or expired.
  • 403 — Forbidden. The code field says why: insufficient_permissions (the key lacks the permission named in x-api-key-permission), api_key_not_allowed (API keys cannot call this endpoint), plan_limit (the tenant's plan does not include API keys, and the body has no limit_type; or the request hit a feature or usage limit of the plan, which limit_type names), tenant_suspended (the tenant is suspended), ip_not_allowed (the key is restricted to certain IP addresses and this request came from another one). An endpoint may name other codes in its description.
  • 404 — Not Found
  • 429 — Too many requests for this API key. Wait the number of seconds in the Retry-After header, then retry.
  • 500 — Internal Server Error

DELETE /sla-policies/{id}

Delete an SLA policy

Requires permission: sla_policies:write

Parameters

NameInTypeRequiredDescription
idpathstringYesSLA Policy ID

Responses

  • 204 — No Content
  • 401 — Authentication failed: the API key is missing, malformed, unknown, revoked or expired.
  • 403 — Forbidden. The code field says why: insufficient_permissions (the key lacks the permission named in x-api-key-permission), api_key_not_allowed (API keys cannot call this endpoint), plan_limit (the tenant's plan does not include API keys, and the body has no limit_type; or the request hit a feature or usage limit of the plan, which limit_type names), tenant_suspended (the tenant is suspended), ip_not_allowed (the key is restricted to certain IP addresses and this request came from another one). An endpoint may name other codes in its description.
  • 404 — Not Found
  • 409 — Conflict
  • 429 — Too many requests for this API key. Wait the number of seconds in the Retry-After header, then retry.
  • 500 — Internal Server Error

PUT /sla-policies/{id}/activate

Activate an SLA policy

Requires permission: sla_policies:write

Parameters

NameInTypeRequiredDescription
idpathstringYesSLA Policy ID

Responses

  • 204 — No Content
  • 401 — Authentication failed: the API key is missing, malformed, unknown, revoked or expired.
  • 403 — Forbidden. The code field says why: insufficient_permissions (the key lacks the permission named in x-api-key-permission), api_key_not_allowed (API keys cannot call this endpoint), plan_limit (the tenant's plan does not include API keys, and the body has no limit_type; or the request hit a feature or usage limit of the plan, which limit_type names), tenant_suspended (the tenant is suspended), ip_not_allowed (the key is restricted to certain IP addresses and this request came from another one). An endpoint may name other codes in its description.
  • 404 — Not Found
  • 429 — Too many requests for this API key. Wait the number of seconds in the Retry-After header, then retry.
  • 500 — Internal Server Error

Tenant Policies

GET /tenant-policies

List tenant policies

Requires permission: policies:read

Parameters

NameInTypeRequiredDescription
connector_typequerystringNoFilter by connector type
resource_typequerystringNoFilter by resource type
has_findingsquerybooleanNoOnly tenant policies with at least one open finding
limitqueryintegerNoItems per page (default 100, max 1000)
offsetqueryintegerNoNumber of items to skip
sort_byquerystringNoSort column
sort_orderquerystringNoSort direction

Responses

  • 200 — OK
    NameTypeRequiredDescription
    dataentity.Policy[]No
    paginationentity.PaginationMetaNo
  • 400 — Bad Request
  • 401 — Authentication failed: the API key is missing, malformed, unknown, revoked or expired.
  • 403 — Forbidden. The code field says why: insufficient_permissions (the key lacks the permission named in x-api-key-permission), api_key_not_allowed (API keys cannot call this endpoint), plan_limit (the tenant's plan does not include API keys, and the body has no limit_type; or the request hit a feature or usage limit of the plan, which limit_type names), tenant_suspended (the tenant is suspended), ip_not_allowed (the key is restricted to certain IP addresses and this request came from another one). An endpoint may name other codes in its description.
  • 429 — Too many requests for this API key. Wait the number of seconds in the Retry-After header, then retry.
  • 500 — Internal Server Error

POST /tenant-policies

Create a tenant policy

Requires permission: policies:write

Request body (request.CreateTenantPolicyRequest)

NameTypeRequiredDescription
connector_typestringYes
descriptionstringNo
enabledbooleanNo
namestringYes
rego_sourcestringYes
resource_typestringYes
severitystringYes

Responses

  • 201 — Created
    NameTypeRequiredDescription
    connector_typeentity.ConnectorTypeNo
    created_atstringNo
    descriptionstringNo
    enabledbooleanNo
    idstringNo
    namestringNo
    rego_sourcestringNo
    resource_typestringNo
    severityentity.SeverityNo
    tenant_idstringNo
    updated_atstringNo
  • 400 — Bad Request
  • 401 — Authentication failed: the API key is missing, malformed, unknown, revoked or expired.
  • 403 — Forbidden. The code field says why: insufficient_permissions (the key lacks the permission named in x-api-key-permission), api_key_not_allowed (API keys cannot call this endpoint), plan_limit (the tenant's plan does not include API keys, and the body has no limit_type; or the request hit a feature or usage limit of the plan, which limit_type names), tenant_suspended (the tenant is suspended), ip_not_allowed (the key is restricted to certain IP addresses and this request came from another one). An endpoint may name other codes in its description.
  • 409 — Conflict
  • 429 — Too many requests for this API key. Wait the number of seconds in the Retry-After header, then retry.
  • 500 — Internal Server Error

GET /tenant-policies/{id}

Get a tenant policy

Requires permission: policies:read

Parameters

NameInTypeRequiredDescription
idpathstringYesTenant Policy ID

Responses

  • 200 — OK
    NameTypeRequiredDescription
    connector_typeentity.ConnectorTypeNo
    created_atstringNo
    descriptionstringNo
    enabledbooleanNo
    idstringNo
    namestringNo
    rego_sourcestringNo
    resource_typestringNo
    severityentity.SeverityNo
    tenant_idstringNo
    updated_atstringNo
  • 401 — Authentication failed: the API key is missing, malformed, unknown, revoked or expired.
  • 403 — Forbidden. The code field says why: insufficient_permissions (the key lacks the permission named in x-api-key-permission), api_key_not_allowed (API keys cannot call this endpoint), plan_limit (the tenant's plan does not include API keys, and the body has no limit_type; or the request hit a feature or usage limit of the plan, which limit_type names), tenant_suspended (the tenant is suspended), ip_not_allowed (the key is restricted to certain IP addresses and this request came from another one). An endpoint may name other codes in its description.
  • 404 — Not Found
  • 429 — Too many requests for this API key. Wait the number of seconds in the Retry-After header, then retry.
  • 500 — Internal Server Error

PUT /tenant-policies/{id}

Update a tenant policy

Requires permission: policies:write

Parameters

NameInTypeRequiredDescription
idpathstringYesTenant Policy ID

Request body (request.UpdateTenantPolicyRequest)

NameTypeRequiredDescription
descriptionstringNo
enabledbooleanNo
namestringNo
rego_sourcestringNo
resource_typestringNo
severitystringNo

Responses

  • 204 — No Content
  • 400 — Bad Request
  • 401 — Authentication failed: the API key is missing, malformed, unknown, revoked or expired.
  • 403 — Forbidden. The code field says why: insufficient_permissions (the key lacks the permission named in x-api-key-permission), api_key_not_allowed (API keys cannot call this endpoint), plan_limit (the tenant's plan does not include API keys, and the body has no limit_type; or the request hit a feature or usage limit of the plan, which limit_type names), tenant_suspended (the tenant is suspended), ip_not_allowed (the key is restricted to certain IP addresses and this request came from another one). An endpoint may name other codes in its description.
  • 429 — Too many requests for this API key. Wait the number of seconds in the Retry-After header, then retry.
  • 500 — Internal Server Error

DELETE /tenant-policies/{id}

Delete a tenant policy

Requires permission: policies:write

Parameters

NameInTypeRequiredDescription
idpathstringYesTenant Policy ID

Responses

  • 204 — No Content
  • 401 — Authentication failed: the API key is missing, malformed, unknown, revoked or expired.
  • 403 — Forbidden. The code field says why: insufficient_permissions (the key lacks the permission named in x-api-key-permission), api_key_not_allowed (API keys cannot call this endpoint), plan_limit (the tenant's plan does not include API keys, and the body has no limit_type; or the request hit a feature or usage limit of the plan, which limit_type names), tenant_suspended (the tenant is suspended), ip_not_allowed (the key is restricted to certain IP addresses and this request came from another one). An endpoint may name other codes in its description.
  • 429 — Too many requests for this API key. Wait the number of seconds in the Retry-After header, then retry.
  • 500 — Internal Server Error

GET /tenant-policies/{id}/events

List tenant policy events

Requires permission: policies:read

Parameters

NameInTypeRequiredDescription
idpathstringYesTenant Policy ID
connector_idquerystringNoFilter by connector ID
event_typequerystringNoFilter by event type (comma-separated)
sincequerystringNoStart time (RFC3339)
untilquerystringNoEnd time (RFC3339)
limitqueryintegerNoMax results per page
offsetqueryintegerNoPagination offset

Responses

  • 200 — OK
    NameTypeRequiredDescription
    dataentity.PolicyEvent[]No
    paginationentity.PaginationMetaNo
  • 401 — Authentication failed: the API key is missing, malformed, unknown, revoked or expired.
  • 403 — Forbidden. The code field says why: insufficient_permissions (the key lacks the permission named in x-api-key-permission), api_key_not_allowed (API keys cannot call this endpoint), plan_limit (the tenant's plan does not include API keys, and the body has no limit_type; or the request hit a feature or usage limit of the plan, which limit_type names), tenant_suspended (the tenant is suspended), ip_not_allowed (the key is restricted to certain IP addresses and this request came from another one). An endpoint may name other codes in its description.
  • 404 — Not Found
  • 429 — Too many requests for this API key. Wait the number of seconds in the Retry-After header, then retry.
  • 500 — Internal Server Error

Third-Party Apps

GET /third-party-apps

List third-party apps

Requires permission: third_party_apps:read

Parameters

NameInTypeRequiredDescription
connector_idquerystringNoFilter by connector ID
connector_typequerystringNoFilter by connector type
riskquerystringNoFilter by risk level
statusquerystringNoFilter by status
is_ai_appquerybooleanNoFilter to AI-detected apps only
ai_subcategoryquerystringNoFilter by AI subcategory
ai_trains_on_dataquerystringNoFilter by AI trains-on-data flag
ai_sourcequerystringNoFilter by AI tier source
limitqueryintegerNoItems per page (default 100, max 1000)
offsetqueryintegerNoNumber of items to skip
sort_byquerystringNoSort column
sort_orderquerystringNoSort direction

Responses

  • 200 — OK
    NameTypeRequiredDescription
    dataentity.ThirdPartyApp[]No
    paginationentity.PaginationMetaNo
  • 400 — Bad Request
  • 401 — Authentication failed: the API key is missing, malformed, unknown, revoked or expired.
  • 403 — Forbidden. The code field says why: insufficient_permissions (the key lacks the permission named in x-api-key-permission), api_key_not_allowed (API keys cannot call this endpoint), plan_limit (the tenant's plan does not include API keys, and the body has no limit_type; or the request hit a feature or usage limit of the plan, which limit_type names), tenant_suspended (the tenant is suspended), ip_not_allowed (the key is restricted to certain IP addresses and this request came from another one). An endpoint may name other codes in its description.
  • 429 — Too many requests for this API key. Wait the number of seconds in the Retry-After header, then retry.
  • 500 — Internal Server Error

GET /third-party-apps/ai-data-exposure

Get AI data exposure map

Requires permission: third_party_apps:read

Responses

  • 200 — OK
    NameTypeRequiredDescription
    appsentity.AIDataExposureApp[]No
    data_scopestringNo
  • 401 — Authentication failed: the API key is missing, malformed, unknown, revoked or expired.
  • 403 — Forbidden. The code field says why: insufficient_permissions (the key lacks the permission named in x-api-key-permission), api_key_not_allowed (API keys cannot call this endpoint), plan_limit (the tenant's plan does not include API keys, and the body has no limit_type; or the request hit a feature or usage limit of the plan, which limit_type names), tenant_suspended (the tenant is suspended), ip_not_allowed (the key is restricted to certain IP addresses and this request came from another one). An endpoint may name other codes in its description.
  • 429 — Too many requests for this API key. Wait the number of seconds in the Retry-After header, then retry.
  • 500 — Internal Server Error

POST /third-party-apps/bulk-revocation

Bulk request app revocation

Requires permission: third_party_apps:write

Request body (request.BulkRequestRevocationRequest)

NameTypeRequiredDescription
app_idsstring[]Yes

Responses

  • 200 — OK
  • 400 — Bad Request
  • 401 — Authentication failed: the API key is missing, malformed, unknown, revoked or expired.
  • 403 — Forbidden. The code field says why: insufficient_permissions (the key lacks the permission named in x-api-key-permission), api_key_not_allowed (API keys cannot call this endpoint), plan_limit (the tenant's plan does not include API keys, and the body has no limit_type; or the request hit a feature or usage limit of the plan, which limit_type names), tenant_suspended (the tenant is suspended), ip_not_allowed (the key is restricted to certain IP addresses and this request came from another one). An endpoint may name other codes in its description.
  • 429 — Too many requests for this API key. Wait the number of seconds in the Retry-After header, then retry.
  • 500 — Internal Server Error

POST /third-party-apps/bulk-status

Bulk update third-party app status

Requires permission: third_party_apps:write

Request body (request.BulkUpdateThirdPartyAppStatusRequest)

NameTypeRequiredDescription
app_idsstring[]Yes
statusstringYes

Responses

  • 200 — OK
  • 400 — Bad Request
  • 401 — Authentication failed: the API key is missing, malformed, unknown, revoked or expired.
  • 403 — Forbidden. The code field says why: insufficient_permissions (the key lacks the permission named in x-api-key-permission), api_key_not_allowed (API keys cannot call this endpoint), plan_limit (the tenant's plan does not include API keys, and the body has no limit_type; or the request hit a feature or usage limit of the plan, which limit_type names), tenant_suspended (the tenant is suspended), ip_not_allowed (the key is restricted to certain IP addresses and this request came from another one). An endpoint may name other codes in its description.
  • 429 — Too many requests for this API key. Wait the number of seconds in the Retry-After header, then retry.
  • 500 — Internal Server Error

GET /third-party-apps/coverage

Get OAuth discovery coverage

Requires permission: third_party_apps:read

Responses

  • 200 — OK
    NameTypeRequiredDescription
    connectorsentity.ConnectorCoverage[]No
    summaryentity.CoverageSummaryNo
    supported_connector_typesstring[]No
  • 401 — Authentication failed: the API key is missing, malformed, unknown, revoked or expired.
  • 403 — Forbidden. The code field says why: insufficient_permissions (the key lacks the permission named in x-api-key-permission), api_key_not_allowed (API keys cannot call this endpoint), plan_limit (the tenant's plan does not include API keys, and the body has no limit_type; or the request hit a feature or usage limit of the plan, which limit_type names), tenant_suspended (the tenant is suspended), ip_not_allowed (the key is restricted to certain IP addresses and this request came from another one). An endpoint may name other codes in its description.
  • 429 — Too many requests for this API key. Wait the number of seconds in the Retry-After header, then retry.
  • 500 — Internal Server Error

POST /third-party-apps/export

Create third-party app export

Requires permission: third_party_apps:read

Request body (request.CreateThirdPartyAppExportRequest)

NameTypeRequiredDescription
filtersrequest.ThirdPartyAppExportFiltersNoTyped export filters
formatstringYesExport format (csv or ndjson)

Responses

  • 201 — Created
    NameTypeRequiredDescription
    created_atstringNo
    error_messagestringNo
    expires_atstringNo
    file_namestringNo
    file_sizeintegerNo
    filtersobjectNo
    formatstringNo
    idstringNo
    record_countintegerNo
    statusentity.ThirdPartyAppExportStatusNo
    tenant_idstringNo
  • 400 — Bad Request
  • 401 — Authentication failed: the API key is missing, malformed, unknown, revoked or expired.
  • 403 — Forbidden. The code field says why: insufficient_permissions (the key lacks the permission named in x-api-key-permission), api_key_not_allowed (API keys cannot call this endpoint), plan_limit (the tenant's plan does not include API keys, and the body has no limit_type; or the request hit a feature or usage limit of the plan, which limit_type names), tenant_suspended (the tenant is suspended), ip_not_allowed (the key is restricted to certain IP addresses and this request came from another one). An endpoint may name other codes in its description.
  • 429 — Too many requests for this API key. Wait the number of seconds in the Retry-After header, then retry.
  • 500 — Internal Server Error

GET /third-party-apps/export/{id}

Get third-party app export status

Requires permission: third_party_apps:read

Parameters

NameInTypeRequiredDescription
idpathstringYesExport ID

Responses

  • 200 — OK
    NameTypeRequiredDescription
    created_atstringNo
    error_messagestringNo
    expires_atstringNo
    file_namestringNo
    file_sizeintegerNo
    filtersobjectNo
    formatstringNo
    idstringNo
    record_countintegerNo
    statusentity.ThirdPartyAppExportStatusNo
    tenant_idstringNo
  • 401 — Authentication failed: the API key is missing, malformed, unknown, revoked or expired.
  • 403 — Forbidden. The code field says why: insufficient_permissions (the key lacks the permission named in x-api-key-permission), api_key_not_allowed (API keys cannot call this endpoint), plan_limit (the tenant's plan does not include API keys, and the body has no limit_type; or the request hit a feature or usage limit of the plan, which limit_type names), tenant_suspended (the tenant is suspended), ip_not_allowed (the key is restricted to certain IP addresses and this request came from another one). An endpoint may name other codes in its description.
  • 404 — Not Found
  • 429 — Too many requests for this API key. Wait the number of seconds in the Retry-After header, then retry.
  • 500 — Internal Server Error

GET /third-party-apps/export/{id}/download

Download third-party app export

Requires permission: third_party_apps:read

Parameters

NameInTypeRequiredDescription
idpathstringYesExport ID

Responses

  • 200 — OK
  • 400 — Bad Request
  • 401 — Authentication failed: the API key is missing, malformed, unknown, revoked or expired.
  • 403 — Forbidden. The code field says why: insufficient_permissions (the key lacks the permission named in x-api-key-permission), api_key_not_allowed (API keys cannot call this endpoint), plan_limit (the tenant's plan does not include API keys, and the body has no limit_type; or the request hit a feature or usage limit of the plan, which limit_type names), tenant_suspended (the tenant is suspended), ip_not_allowed (the key is restricted to certain IP addresses and this request came from another one). An endpoint may name other codes in its description.
  • 404 — Not Found
  • 429 — Too many requests for this API key. Wait the number of seconds in the Retry-After header, then retry.
  • 500 — Internal Server Error
  • 503 — Service Unavailable

GET /third-party-apps/summary

Get third-party app summary

Requires permission: third_party_apps:read

Responses

  • 200 — OK
    NameTypeRequiredDescription
    ai_appsintegerNo
    approvedintegerNo
    blockedintegerNo
    confirmed_ai_appsintegerNo
    discoveredintegerNo
    distinct_appsintegerNo
    flaggedintegerNo
    high_risk_appsintegerNo
    suspected_ai_appsintegerNo
    total_appsintegerNo
  • 401 — Authentication failed: the API key is missing, malformed, unknown, revoked or expired.
  • 403 — Forbidden. The code field says why: insufficient_permissions (the key lacks the permission named in x-api-key-permission), api_key_not_allowed (API keys cannot call this endpoint), plan_limit (the tenant's plan does not include API keys, and the body has no limit_type; or the request hit a feature or usage limit of the plan, which limit_type names), tenant_suspended (the tenant is suspended), ip_not_allowed (the key is restricted to certain IP addresses and this request came from another one). An endpoint may name other codes in its description.
  • 429 — Too many requests for this API key. Wait the number of seconds in the Retry-After header, then retry.
  • 500 — Internal Server Error

GET /third-party-apps/{id}

Get a third-party app

Requires permission: third_party_apps:read

Parameters

NameInTypeRequiredDescription
idpathstringYesThird-party app ID

Responses

  • 200 — OK
    NameTypeRequiredDescription
    ai_data_scopesstring[]No
    ai_detection_reasonstringNo
    ai_publisherstringNoPublisher of the AI service. Set only when a single app is fetched.
    ai_risk_rationalestringNo
    ai_soc2_certifiedstringNo
    ai_sourcestringNo
    ai_stores_promptsstringNo
    ai_subcategorystringNo
    ai_trains_on_datastringNo
    app_idstringNo
    authorizer_countintegerNoBlast-radius metrics: token-theft reach computed after BulkUpsert; persisted for ranked views.
    authorizer_offboarded_countintegerNo
    authorizer_privileged_countintegerNo
    canonical_idstringNoCanonical app identity (Phase 0 schema; populated by reconcile / scanner in later phases). canonical_id + merge_locked* are reconcile-owned; vendor_external_id is scanner-owned.
    categoriesstring[]No
    connector_idstringNo
    connector_typeentity.ConnectorTypeNo
    created_atstringNo
    data_categoriesentity.DataCategoryAccess[]No
    data_category_countintegerNo
    enriched_scopesentity.EnrichedScope[]No
    first_seen_atstringNo
    governance_rule_idstringNo
    has_sensitive_scopesbooleanNo
    idstringNo
    is_ai_appbooleanNo
    last_activity_atstringNoLastActivityAt is the latest consent-change timestamp sourced from OAuth grant metadata (e.g. Okta grant LastUpdated/Created). NULL means unknown (no backfill). Semantics: last consent *change*, not last *use*; label accordingly in the UI.
    last_seen_atstringNo
    merge_lockedbooleanNo
    merge_locked_atstringNo
    merge_locked_bystringNo
    namestringNo
    publisherstringNo
    reach_scoreintegerNo
    review_reasonsstring[]NoWhy the app needs review. Set on review-queue and search results only.
    revocation_requested_atstringNo
    revocation_statusstringNo
    riskentity.ThirdPartyAppRiskNo
    scope_expanded_atstringNo
    scope_hashstringNo
    scopesstring[]No
    sensitive_scope_categoriesstring[]No
    statusentity.ThirdPartyAppStatusNo
    tenant_idstringNo
    updated_atstringNo
    user_countintegerNo
    usersstring[]No
    vendor_external_idstringNo
  • 401 — Authentication failed: the API key is missing, malformed, unknown, revoked or expired.
  • 403 — Forbidden. The code field says why: insufficient_permissions (the key lacks the permission named in x-api-key-permission), api_key_not_allowed (API keys cannot call this endpoint), plan_limit (the tenant's plan does not include API keys, and the body has no limit_type; or the request hit a feature or usage limit of the plan, which limit_type names), tenant_suspended (the tenant is suspended), ip_not_allowed (the key is restricted to certain IP addresses and this request came from another one). An endpoint may name other codes in its description.
  • 404 — Not Found
  • 429 — Too many requests for this API key. Wait the number of seconds in the Retry-After header, then retry.
  • 500 — Internal Server Error

GET /third-party-apps/{id}/blast-radius

Get integration blast-radius graph

Requires permission: third_party_apps:read

Parameters

NameInTypeRequiredDescription
idpathstringYesThird-party app ID

Responses

  • 200 — OK
    NameTypeRequiredDescription
    edgesentity.GraphEdge[]No
    nodesentity.GraphNode[]No
    reach_summaryentity.ReachSummaryNo
  • 401 — Authentication failed: the API key is missing, malformed, unknown, revoked or expired.
  • 403 — Forbidden. The code field says why: insufficient_permissions (the key lacks the permission named in x-api-key-permission), api_key_not_allowed (API keys cannot call this endpoint), plan_limit (the tenant's plan does not include API keys, and the body has no limit_type; or the request hit a feature or usage limit of the plan, which limit_type names), tenant_suspended (the tenant is suspended), ip_not_allowed (the key is restricted to certain IP addresses and this request came from another one). An endpoint may name other codes in its description.
  • 404 — Not Found
  • 429 — Too many requests for this API key. Wait the number of seconds in the Retry-After header, then retry.
  • 500 — Internal Server Error

POST /third-party-apps/{id}/request-revocation

Request app revocation

Requires permission: third_party_apps:write

Parameters

NameInTypeRequiredDescription
idpathstringYesThird-party app ID

Responses

  • 204 — No Content
  • 401 — Authentication failed: the API key is missing, malformed, unknown, revoked or expired.
  • 403 — Forbidden. The code field says why: insufficient_permissions (the key lacks the permission named in x-api-key-permission), api_key_not_allowed (API keys cannot call this endpoint), plan_limit (the tenant's plan does not include API keys, and the body has no limit_type; or the request hit a feature or usage limit of the plan, which limit_type names), tenant_suspended (the tenant is suspended), ip_not_allowed (the key is restricted to certain IP addresses and this request came from another one). An endpoint may name other codes in its description.
  • 404 — Not Found
  • 429 — Too many requests for this API key. Wait the number of seconds in the Retry-After header, then retry.
  • 500 — Internal Server Error

PATCH /third-party-apps/{id}/status

Update third-party app status

Requires permission: third_party_apps:write

Parameters

NameInTypeRequiredDescription
idpathstringYesThird-party app ID

Request body (request.UpdateThirdPartyAppStatusRequest)

NameTypeRequiredDescription
statusstringYesNew review status

Responses

  • 204 — No Content
  • 400 — Bad Request
  • 401 — Authentication failed: the API key is missing, malformed, unknown, revoked or expired.
  • 403 — Forbidden. The code field says why: insufficient_permissions (the key lacks the permission named in x-api-key-permission), api_key_not_allowed (API keys cannot call this endpoint), plan_limit (the tenant's plan does not include API keys, and the body has no limit_type; or the request hit a feature or usage limit of the plan, which limit_type names), tenant_suspended (the tenant is suspended), ip_not_allowed (the key is restricted to certain IP addresses and this request came from another one). An endpoint may name other codes in its description.
  • 404 — Not Found
  • 429 — Too many requests for this API key. Wait the number of seconds in the Retry-After header, then retry.
  • 500 — Internal Server Error

Ticketing

GET /findings/{id}/ticket

Get a finding ticket

Requires permission: ticketing:read

Parameters

NameInTypeRequiredDescription
idpathstringYesFinding ID

Responses

  • 200 — OK
    NameTypeRequiredDescription
    created_atstringNo
    external_keystringNo
    external_urlstringNo
    finding_idstringNo
    idstringNo
    last_sync_atstringNo
    last_sync_errorstringNo
    providerstringNo
    retry_countintegerNo
    sync_statusentity.TicketSyncStatusNo
    tenant_idstringNo
    updated_atstringNo
  • 401 — Authentication failed: the API key is missing, malformed, unknown, revoked or expired.
  • 403 — Forbidden. The code field says why: insufficient_permissions (the key lacks the permission named in x-api-key-permission), api_key_not_allowed (API keys cannot call this endpoint), plan_limit (the tenant's plan does not include API keys, and the body has no limit_type; or the request hit a feature or usage limit of the plan, which limit_type names), tenant_suspended (the tenant is suspended), ip_not_allowed (the key is restricted to certain IP addresses and this request came from another one). An endpoint may name other codes in its description.
  • 404 — Not Found
  • 429 — Too many requests for this API key. Wait the number of seconds in the Retry-After header, then retry.
  • 500 — Internal Server Error

POST /findings/{id}/ticket

Create a finding ticket

Requires permission: ticketing:write

Parameters

NameInTypeRequiredDescription
idpathstringYesFinding ID

Request body (request.CreateTicketRequest)

NameTypeRequiredDescription
assignee_idstringNo
issue_typestringYes

Responses

  • 201 — Created
    NameTypeRequiredDescription
    created_atstringNo
    external_keystringNo
    external_urlstringNo
    finding_idstringNo
    idstringNo
    last_sync_atstringNo
    last_sync_errorstringNo
    providerstringNo
    retry_countintegerNo
    sync_statusentity.TicketSyncStatusNo
    tenant_idstringNo
    updated_atstringNo
  • 400 — Bad Request
  • 401 — Authentication failed: the API key is missing, malformed, unknown, revoked or expired.
  • 403 — Forbidden. The code field says why: insufficient_permissions (the key lacks the permission named in x-api-key-permission), api_key_not_allowed (API keys cannot call this endpoint), plan_limit (the tenant's plan does not include API keys, and the body has no limit_type; or the request hit a feature or usage limit of the plan, which limit_type names), tenant_suspended (the tenant is suspended), ip_not_allowed (the key is restricted to certain IP addresses and this request came from another one). An endpoint may name other codes in its description.
  • 404 — Not Found
  • 409 — Conflict
  • 429 — Too many requests for this API key. Wait the number of seconds in the Retry-After header, then retry.
  • 500 — Internal Server Error

DELETE /findings/{id}/ticket

Unlink a finding ticket

Requires permission: ticketing:write

Parameters

NameInTypeRequiredDescription
idpathstringYesFinding ID

Responses

  • 204 — No Content
  • 401 — Authentication failed: the API key is missing, malformed, unknown, revoked or expired.
  • 403 — Forbidden. The code field says why: insufficient_permissions (the key lacks the permission named in x-api-key-permission), api_key_not_allowed (API keys cannot call this endpoint), plan_limit (the tenant's plan does not include API keys, and the body has no limit_type; or the request hit a feature or usage limit of the plan, which limit_type names), tenant_suspended (the tenant is suspended), ip_not_allowed (the key is restricted to certain IP addresses and this request came from another one). An endpoint may name other codes in its description.
  • 404 — Not Found
  • 429 — Too many requests for this API key. Wait the number of seconds in the Retry-After header, then retry.
  • 500 — Internal Server Error

POST /findings/{id}/ticket/sync

Sync a finding ticket

Requires permission: ticketing:write

Parameters

NameInTypeRequiredDescription
idpathstringYesFinding ID

Responses

  • 200 — OK
  • 401 — Authentication failed: the API key is missing, malformed, unknown, revoked or expired.
  • 403 — Forbidden. The code field says why: insufficient_permissions (the key lacks the permission named in x-api-key-permission), api_key_not_allowed (API keys cannot call this endpoint), plan_limit (the tenant's plan does not include API keys, and the body has no limit_type; or the request hit a feature or usage limit of the plan, which limit_type names), tenant_suspended (the tenant is suspended), ip_not_allowed (the key is restricted to certain IP addresses and this request came from another one). An endpoint may name other codes in its description.
  • 404 — Not Found
  • 429 — Too many requests for this API key. Wait the number of seconds in the Retry-After header, then retry.
  • 500 — Internal Server Error

GET /ticketing/issue-types

Fetch ticketing issue types

Requires permission: ticketing:write

Responses

  • 200 — OK
    NameTypeRequiredDescription
    idstringNo
    namestringNo
  • 401 — Authentication failed: the API key is missing, malformed, unknown, revoked or expired.
  • 403 — Forbidden. The code field says why: insufficient_permissions (the key lacks the permission named in x-api-key-permission), api_key_not_allowed (API keys cannot call this endpoint), plan_limit (the tenant's plan does not include API keys, and the body has no limit_type; or the request hit a feature or usage limit of the plan, which limit_type names), tenant_suspended (the tenant is suspended), ip_not_allowed (the key is restricted to certain IP addresses and this request came from another one). An endpoint may name other codes in its description.
  • 404 — Not Found
  • 429 — Too many requests for this API key. Wait the number of seconds in the Retry-After header, then retry.
  • 500 — Internal Server Error

GET /ticketing/users

Fetch ticketing users

Requires permission: ticketing:write

Parameters

NameInTypeRequiredDescription
queryquerystringNoSearch query for user lookup

Responses

  • 200 — OK
    NameTypeRequiredDescription
    account_idstringNo
    avatar_urlstringNo
    display_namestringNo
    emailstringNo
  • 401 — Authentication failed: the API key is missing, malformed, unknown, revoked or expired.
  • 403 — Forbidden. The code field says why: insufficient_permissions (the key lacks the permission named in x-api-key-permission), api_key_not_allowed (API keys cannot call this endpoint), plan_limit (the tenant's plan does not include API keys, and the body has no limit_type; or the request hit a feature or usage limit of the plan, which limit_type names), tenant_suspended (the tenant is suspended), ip_not_allowed (the key is restricted to certain IP addresses and this request came from another one). An endpoint may name other codes in its description.
  • 404 — Not Found
  • 429 — Too many requests for this API key. Wait the number of seconds in the Retry-After header, then retry.
  • 500 — Internal Server Error

Ready to secure your SaaS stack?

Start your free trial. No credit card required. Setup in about 15 minutes; first findings as soon as the first scan completes.

Start Free Trial