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
| Name | In | Type | Required | Description |
|---|---|---|---|---|
status | query | string | No | Filter by status |
limit | query | integer | No | Items per page (default 100, max 1000) |
offset | query | integer | No | Number of items to skip |
Responses
- 200 — OK
Name Type Required Description 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
| Name | In | Type | Required | Description |
|---|---|---|---|---|
id | path | string | Yes | Campaign ID |
Responses
- 200 — OK
Name Type Required Description 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
| Name | In | Type | Required | Description |
|---|---|---|---|---|
id | path | string | Yes | Campaign ID |
Responses
- 200 — OK
Name Type Required Description 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
| Name | In | Type | Required | Description |
|---|---|---|---|---|
id | path | string | Yes | Campaign ID |
decision | query | string | No | Filter by decision |
connector_id | query | string | No | Filter by connector ID |
grant_id | query | string | No | Filter by reviewer grant ID |
verification_status | query | string | No | Filter by verification status |
limit | query | integer | No | Items per page (default 100, max 1000) |
offset | query | integer | No | Number of items to skip |
Responses
- 200 — OK
Name Type Required Description 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
| Name | In | Type | Required | Description |
|---|---|---|---|---|
id | path | string | Yes | Campaign ID |
Responses
- 200 — OK
Name Type Required Description 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
| Name | In | Type | Required | Description |
|---|---|---|---|---|
limit | query | integer | No | Items per page |
offset | query | integer | No | Number of items to skip |
Responses
- 200 — OK
Name Type Required Description 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)
| Name | Type | Required | Description |
|---|---|---|---|
cooldown_hours | integer | No | |
description | string | No | |
enabled | boolean | No | |
expression | string | Yes | |
name | string | Yes | |
playbook_id | string | Yes |
Responses
- 201 — Created
Name Type Required Description 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
| Name | In | Type | Required | Description |
|---|---|---|---|---|
id | path | string | Yes | Resource ID (UUID) |
Responses
- 200 — OK
Name Type Required Description 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
| Name | In | Type | Required | Description |
|---|---|---|---|---|
id | path | string | Yes | Resource ID (UUID) |
Request body (request.UpdateAgentGovernanceRuleRequest)
| Name | Type | Required | Description |
|---|---|---|---|
cooldown_hours | integer | No | |
description | string | No | |
enabled | boolean | No | |
expression | string | No | |
name | string | No | |
playbook_id | string | No |
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
| Name | In | Type | Required | Description |
|---|---|---|---|---|
id | path | string | Yes | Resource 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
| Name | In | Type | Required | Description |
|---|---|---|---|---|
id | path | string | Yes | Resource ID (UUID) |
Responses
- 200 — OK
Name Type Required Description 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
| Name | In | Type | Required | Description |
|---|---|---|---|---|
platform | query | string | No | Filter by agent platform |
status | query | string | No | Filter by review status |
autonomy_level | query | string | No | Filter by autonomy level |
owner_id | query | string | No | Filter by owner ID (UUID) |
connector_id | query | string | No | Filter by connector ID (UUID) |
q | query | string | No | Full-text search |
include | query | string | No | Comma-separated extras; supports last_remediated |
limit | query | integer | No | Items per page |
offset | query | integer | No | Number of items to skip |
sort_by | query | string | No | Sort column |
sort_order | query | string | No | Sort direction |
Responses
- 200 — OK
Name Type Required Description 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)
| Name | Type | Required | Description |
|---|---|---|---|
agent_ids | string[] | Yes | |
owner_email | string | No | |
owner_id | string | No |
Responses
- 200 — OK
Name Type Required Description 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)
| Name | Type | Required | Description |
|---|---|---|---|
agent_ids | string[] | Yes | |
status | string | Yes |
Responses
- 200 — OK
Name Type Required Description 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
Name Type Required Description 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
| Name | In | Type | Required | Description |
|---|---|---|---|---|
id | path | string | Yes | Resource ID (UUID) |
Responses
- 200 — OK
Name Type Required Description 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_atstringNo LastRemediatedAt 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
| Name | In | Type | Required | Description |
|---|---|---|---|---|
id | path | string | Yes | Resource ID (UUID) |
Request body (request.UpdateAgentOwnerRequest)
| Name | Type | Required | Description |
|---|---|---|---|
owner_email | string | No | |
owner_id | string | No |
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
| Name | In | Type | Required | Description |
|---|---|---|---|---|
id | path | string | Yes | Resource ID (UUID) |
Responses
- 200 — OK
Name Type Required Description 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
| Name | In | Type | Required | Description |
|---|---|---|---|---|
id | path | string | Yes | Resource ID (UUID) |
Responses
- 200 — OK
Name Type Required Description 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
| Name | In | Type | Required | Description |
|---|---|---|---|---|
id | path | string | Yes | Resource ID (UUID) |
Request body (request.UpdateAgentStatusRequest)
| Name | Type | Required | Description |
|---|---|---|---|
status | string | 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.
- 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
| Name | In | Type | Required | Description |
|---|---|---|---|---|
status | query | string | No | Filter by status |
object_type | query | string | No | Filter by object type |
provider | query | string | No | Filter by provider |
owner_id | query | string | No | Filter by owner ID (UUID) |
reason | query | string | No | Filter by priority reason |
ai_source | query | string | No | Filter shadow-AI items by tier |
q | query | string | No | Full-text search (title, subtitle) |
changed_only | query | boolean | No | Show only items changed since last review |
show_archived | query | boolean | No | Include archived items |
stale_only | query | boolean | No | Show only stale items |
overdue_only | query | boolean | No | Show only overdue items |
min_priority | query | integer | No | Minimum priority score |
limit | query | integer | No | Items per page (default 100) |
offset | query | integer | No | Number of items to skip |
sort_by | query | string | No | Sort column |
sort_order | query | string | No | Sort 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)
| Name | Type | Required | Description |
|---|---|---|---|
evidence | object | No | |
object_type | string | Yes | |
priority_reasons | string[] | No | |
provider | string | No | |
subtitle | string | No | |
title | string | Yes |
Responses
- 201 — Created
Name Type Required Description 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)
| Name | Type | Required | Description |
|---|---|---|---|
item_ids | string[] | Yes | |
owner_email | string | No | |
owner_id | string | No |
Responses
- 200 — OK
Name Type Required Description 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)
| Name | Type | Required | Description |
|---|---|---|---|
decision_reason | string | No | |
item_ids | string[] | Yes | |
status | string | Yes |
Responses
- 200 — OK
Name Type Required Description 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
| Name | In | Type | Required | Description |
|---|---|---|---|---|
id | path | string | Yes | Resource ID (UUID) |
Responses
- 200 — OK
Name Type Required Description 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
| Name | In | Type | Required | Description |
|---|---|---|---|---|
id | path | string | Yes | Resource ID (UUID) |
Responses
- 200 — OK
Name Type Required Description 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
| Name | In | Type | Required | Description |
|---|---|---|---|---|
id | path | string | Yes | Resource ID (UUID) |
Request body (request.UpdateAIReviewOwnerRequest)
| Name | Type | Required | Description |
|---|---|---|---|
owner_email | string | No | |
owner_id | string | No |
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
| Name | In | Type | Required | Description |
|---|---|---|---|---|
id | path | string | Yes | Resource 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
| Name | In | Type | Required | Description |
|---|---|---|---|---|
id | path | string | Yes | Resource ID (UUID) |
Request body (request.UpdateAIReviewStatusRequest)
| Name | Type | Required | Description |
|---|---|---|---|
decision_reason | string | No | |
status | string | 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.
- 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
Name Type Required Description 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
| Name | In | Type | Required | Description |
|---|---|---|---|---|
type | query | string | No | Filter by alert type |
Responses
- 200 — OK
Name Type Required Description 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[]No TriggerEvents 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)
| Name | Type | Required | Description |
|---|---|---|---|
connector_ids | string[] | No | |
deliver_email | boolean | No | |
deliver_slack | boolean | No | |
expression | string | No | |
name | string | Yes | |
policy_categories | string[] | No | |
severity_threshold | string | Yes | |
trigger_events | string[] | No |
Responses
- 201 — Created
Name Type Required Description 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[]No TriggerEvents 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
| Name | In | Type | Required | Description |
|---|---|---|---|---|
id | path | string | Yes | Alert Rule ID |
Responses
- 200 — OK
Name Type Required Description 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[]No TriggerEvents 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
| Name | In | Type | Required | Description |
|---|---|---|---|---|
id | path | string | Yes | Alert Rule ID |
Request body (request.UpdateAlertRuleRequest)
| Name | Type | Required | Description |
|---|---|---|---|
connector_ids | string[] | No | |
deliver_email | boolean | No | |
deliver_slack | boolean | No | |
enabled | boolean | No | |
expression | string | No | |
name | string | No | |
policy_categories | string[] | No | |
severity_threshold | string | No | |
trigger_events | string[] | No | |
version | integer | No |
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
| Name | In | Type | Required | Description |
|---|---|---|---|---|
id | path | string | Yes | Alert 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
| Name | In | Type | Required | Description |
|---|---|---|---|---|
id | path | string | Yes | Alert 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
| Name | In | Type | Required | Description |
|---|---|---|---|---|
status | query | string | No | Comma-separated statuses |
severity | query | string | No | Comma-separated severities |
connector_id | query | string | No | Filter by connector ID |
alert_rule_id | query | string | No | Filter by alert rule ID |
group_by | query | string | No | Group by dimension |
sort | query | string | No | Sort field |
order | query | string | No | Sort direction |
limit | query | integer | No | Items per page (default 100, max 1000) |
offset | query | integer | No | Number of items to skip |
Responses
- 200 — OK
Name Type Required Description 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)
| Name | Type | Required | Description |
|---|---|---|---|
ids | string[] | 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)
| Name | Type | Required | Description |
|---|---|---|---|
ids | string[] | 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
Name Type Required Description 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
| Name | In | Type | Required | Description |
|---|---|---|---|---|
id | path | string | Yes | Alert ID |
Responses
- 200 — OK
Name Type Required Description 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
| Name | In | Type | Required | Description |
|---|---|---|---|---|
id | path | string | Yes | Alert 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
| Name | In | Type | Required | Description |
|---|---|---|---|---|
id | path | string | Yes | Alert 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
| Name | In | Type | Required | Description |
|---|---|---|---|---|
id | path | string | Yes | Alert ID |
Request body (request.SnoozeAlertRequest)
| Name | Type | Required | Description |
|---|---|---|---|
mode | string | Yes | |
until | string | No |
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
Name Type Required Description 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)
| Name | Type | Required | Description |
|---|---|---|---|
action | string | Yes | |
auto_create_finding | boolean | No | |
enabled | boolean | No | |
expression | string | No | |
match_type | string | No | |
match_value | string | No | |
name | string | Yes | |
notify_channels | string[] | No | |
notify_on_discovery | boolean | No |
Responses
- 201 — Created
Name Type Required Description 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
| Name | In | Type | Required | Description |
|---|---|---|---|---|
id | path | string | Yes | Governance Rule ID |
Responses
- 200 — OK
Name Type Required Description 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
| Name | In | Type | Required | Description |
|---|---|---|---|---|
id | path | string | Yes | Governance Rule ID |
Request body (request.UpdateAppGovernanceRuleRequest)
| Name | Type | Required | Description |
|---|---|---|---|
action | string | No | |
auto_create_finding | boolean | No | |
enabled | boolean | No | |
expression | string | No | |
match_type | string | No | |
match_value | string | No | |
name | string | No | |
notify_channels | string[] | No | |
notify_on_discovery | boolean | No |
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
| Name | In | Type | Required | Description |
|---|---|---|---|---|
id | path | string | Yes | Governance 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
Name Type Required Description 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
| Name | In | Type | Required | Description |
|---|---|---|---|---|
severity | query | string | Yes | Finding severity to match against |
request_type | query | string | No | Request that would be gated (default exceptions) |
Responses
- 200 — OK
Name Type Required Description 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
| Name | In | Type | Required | Description |
|---|---|---|---|---|
id | path | string | Yes | Approval Chain ID |
Responses
- 200 — OK
Name Type Required Description 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
| Name | In | Type | Required | Description |
|---|---|---|---|---|
actor_id | query | string | No | Filter by actor ID |
action | query | string | No | Filter by action |
resource_type | query | string | No | Filter by resource type |
since | query | string | No | Start of date range (RFC3339) |
until | query | string | No | End of date range (RFC3339) |
limit | query | integer | No | Page size (default 100, max 1000) |
offset | query | integer | No | Page offset (default 0) |
sort_by | query | string | No | Sort field (created_at, action, resource_type, actor_email) |
sort_order | query | string | No | Sort direction (asc, desc) |
Responses
- 200 — OK
Name Type Required Description 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)
| Name | Type | Required | Description |
|---|---|---|---|
action | string | No | |
actor_id | string | No | |
resource_type | string | No | |
since | string | No | |
until | string | No |
Responses
- 201 — Created
Name Type Required Description 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
| Name | In | Type | Required | Description |
|---|---|---|---|---|
id | path | string | Yes | Export ID |
Responses
- 200 — OK
Name Type Required Description 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
| Name | In | Type | Required | Description |
|---|---|---|---|---|
id | path | string | Yes | Export 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
Name Type Required Description 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
| Name | In | Type | Required | Description |
|---|---|---|---|---|
category | path | string | Yes | Policy category slug |
Responses
- 200 — OK
Name Type Required Description 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
| Name | In | Type | Required | Description |
|---|---|---|---|---|
source | query | string | No | Filter by group source |
risk | query | string | No | Filter by max risk |
q | query | string | No | Case-insensitive substring match on display_name |
limit | query | integer | No | Items per page (default 100, max 1000) |
offset | query | integer | No | Number of items to skip |
sort_by | query | string | No | Sort column |
sort_order | query | string | No | Sort direction |
Responses
- 200 — OK
Name Type Required Description 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
Name Type Required Description 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
| Name | In | Type | Required | Description |
|---|---|---|---|---|
id | path | string | Yes | Canonical app ID |
Responses
- 200 — OK
Name Type Required Description connectorsstring[]No Connectors is the deduped union of member connector types. display_namestringNo idstringNo membersresponse.CanonicalAppDetailMember[]No reach_unavailable_sourcesintegerNo ReachUnavailableSources 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[]No Scopes is the deduped union of OAuth scopes across all members. sourcestringNo user_reachintegerNo UserReach 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
| Name | In | Type | Required | Description |
|---|---|---|---|---|
id | path | string | Yes | Control ID |
Responses
- 200 — OK
Name Type Required Description childrenentity.ComplianceControl[]No control_idstringNo descriptionstringNo framework_idstringNo idstringNo mapping_overriddenbooleanNo MappingOverridden 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
| Name | In | Type | Required | Description |
|---|---|---|---|---|
id | path | string | Yes | Control ID |
Request body (request.UpdateControlRequest)
| Name | Type | Required | Description |
|---|---|---|---|
description | string | No | |
name | string | No | |
sort_order | integer | No |
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
| Name | In | Type | Required | Description |
|---|---|---|---|---|
id | path | string | Yes | Control 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
| Name | In | Type | Required | Description |
|---|---|---|---|---|
id | path | string | Yes | Control ID |
Responses
- 200 — OK
Name Type Required Description 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
| Name | In | Type | Required | Description |
|---|---|---|---|---|
id | path | string | Yes | Control 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
| Name | In | Type | Required | Description |
|---|---|---|---|---|
id | path | string | Yes | Control ID |
Request body (request.SetControlPoliciesRequest)
| Name | Type | Required | Description |
|---|---|---|---|
policy_ids | string[] | 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
| Name | In | Type | Required | Description |
|---|---|---|---|---|
id | path | string | Yes | Control 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
Name Type Required Description attestedintegerNo audit_datestringNo blocking_controlsentity.ControlStub[]No days_until_auditintegerNo domainsentity.ControlPosture[]No failed_controlsintegerNo framework_idstringNo framework_namestringNo not_assessedintegerNo overall_scorenumberNo nil 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
Name Type Required Description audit_datestringNo Target audit date; drives DaysUntilAudit on enriched summary created_atstringNo descriptionstringNo enabledbooleanNo idstringNo namestringNo tenant_idstringNo Owning 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)
| Name | Type | Required | Description |
|---|---|---|---|
description | string | No | |
name | string | Yes | |
version | string | Yes |
Responses
- 201 — Created
Name Type Required Description audit_datestringNo Target audit date; drives DaysUntilAudit on enriched summary created_atstringNo descriptionstringNo enabledbooleanNo idstringNo namestringNo tenant_idstringNo Owning 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
| Name | In | Type | Required | Description |
|---|---|---|---|---|
id | path | string | Yes | Framework ID |
Responses
- 200 — OK
Name Type Required Description audit_datestringNo Target audit date; drives DaysUntilAudit on enriched summary created_atstringNo descriptionstringNo enabledbooleanNo idstringNo namestringNo tenant_idstringNo Owning 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
| Name | In | Type | Required | Description |
|---|---|---|---|---|
id | path | string | Yes | Framework ID |
Request body (request.UpdateFrameworkRequest)
| Name | Type | Required | Description |
|---|---|---|---|
audit_date | string | No | |
description | string | No | |
name | string | No | |
version | string | No |
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
| Name | In | Type | Required | Description |
|---|---|---|---|---|
id | path | string | Yes | Framework 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
| Name | In | Type | Required | Description |
|---|---|---|---|---|
id | path | string | Yes | Source Framework ID |
Request body (request.CloneFrameworkRequest)
| Name | Type | Required | Description |
|---|---|---|---|
name | string | Yes |
Responses
- 201 — Created
Name Type Required Description audit_datestringNo Target audit date; drives DaysUntilAudit on enriched summary created_atstringNo descriptionstringNo enabledbooleanNo idstringNo namestringNo tenant_idstringNo Owning 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
| Name | In | Type | Required | Description |
|---|---|---|---|---|
id | path | string | Yes | Framework ID |
Request body (request.CreateControlRequest)
| Name | Type | Required | Description |
|---|---|---|---|
control_id | string | Yes | |
description | string | No | |
name | string | Yes | |
parent_id | string | No | |
sort_order | integer | No |
Responses
- 201 — Created
Name Type Required Description childrenentity.ComplianceControl[]No control_idstringNo descriptionstringNo framework_idstringNo idstringNo mapping_overriddenbooleanNo MappingOverridden 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
| Name | In | Type | Required | Description |
|---|---|---|---|---|
id | path | string | Yes | Framework ID |
Responses
- 200 — OK
Name Type Required Description coverage_scorenumberNo mapped leaf controls / total leaf * 100 framework_idstringNo framework_namestringNo mapped_controlsintegerNo persistent_failuresentity.PersistentFailure[]No posture_scorenumberNo passed / assessed * 100; nil when nothing is assessed readiness_scorenumberNo coverage * 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
| Name | In | Type | Required | Description |
|---|---|---|---|---|
id | path | string | Yes | Framework ID |
connector_id | query | string | No | Filter by connector ID (omit for the tenant-wide scope) |
since | query | string | No | Start time (RFC3339, default 365 days before until, clamped to 365 days) |
until | query | string | No | End time (RFC3339) |
Responses
- 200 — OK
Name Type Required Description attestedintegerNo captured_atstringNo category_scoresobjectNo connector_idstringNo failed_controlsintegerNo framework_idstringNo idstringNo not_assessedintegerNo overall_scorenumberNo nil 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
| Name | In | Type | Required | Description |
|---|---|---|---|---|
id | path | string | Yes | Framework ID |
connector_id | query | string | No | Optional connector ID for per-connector posture |
Responses
- 200 — OK
Name Type Required Description attestedintegerNo domainsentity.ControlPosture[]No failed_controlsintegerNo framework_idstringNo framework_namestringNo not_assessedintegerNo overall_scorenumberNo nil 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
| Name | In | Type | Required | Description |
|---|---|---|---|---|
id | path | string | Yes | Framework ID |
period | query | string | No | Period: 30d, 90d (default), 1y |
connector_id | query | string | No | Optional connector ID to scope trends |
Responses
- 200 — OK
Name Type Required Description category_trendsobjectNo control_deltasentity.ControlDelta[]No data_pointsentity.TrendPoint[]No directionstringNo improving, 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
Name Type Required Description attestedintegerNo domainsentity.ControlPosture[]No failed_controlsintegerNo framework_idstringNo framework_namestringNo not_assessedintegerNo overall_scorenumberNo nil 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
| Name | In | Type | Required | Description |
|---|---|---|---|---|
type | query | string | No | Filter by connector type |
status | query | string | No | Filter by status |
Responses
- 200 — OK
Name Type Required Description created_atstringNo Creation timestamp data_regionstringNo Data residency region (eu, us, ap, global) dpa_signed_atstringNo When the DPA/BAA was signed dpa_statusstringNo DPA/BAA status (signed, pending, not_required) fetch_modeentity.FetchModeNo Where resource fetching runs (origin or edge) idstringNo Unique identifier last_health_check_atstringNo Timestamp of the last health check last_health_errorstringNo Last health check error (nil = healthy) last_sync_atstringNo Timestamp of the last successful sync modeentity.ConnectorModeNo namestringNo Human-readable connector name paused_by_systembooleanNo System-paused due to plan downgrade over-limit posture_scorenumberNo Policy pass rate: percentage of enabled policies with no open findings statusentity.ConnectorStatusNo Operational state (active, inactive, error, configuring) tenant_idstringNo Tenant that owns this connector typeentity.ConnectorTypeNo SaaS platform type (okta, cloudflare, gcp, workspace) updated_atstringNo Last update timestamp versionintegerNo Optimistic 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)
| Name | Type | Required | Description |
|---|---|---|---|
config | object | Yes | Provider-specific configuration (JSON object) |
fetch_mode | string | No | Where resource fetching runs (origin or edge) |
mode | string | No | Read/write mode; read_only is default |
name | string | Yes | Human-readable name |
type | string | Yes | SaaS platform type |
Responses
- 201 — Created
Name Type Required Description created_atstringNo Creation timestamp data_regionstringNo Data residency region (eu, us, ap, global) dpa_signed_atstringNo When the DPA/BAA was signed dpa_statusstringNo DPA/BAA status (signed, pending, not_required) edge_supportresponse.EdgeSupportNo fetch_modeentity.FetchModeNo Where resource fetching runs (origin or edge) idstringNo Unique identifier last_health_check_atstringNo Timestamp of the last health check last_health_errorstringNo Last health check error (nil = healthy) last_sync_atstringNo Timestamp of the last successful sync login_sourceresponse.LoginSourceInfoNo modeentity.ConnectorModeNo namestringNo Human-readable connector name onboarding_scan_idstringNo OnboardingScanID is set only by POST /connectors when Create auto-started a scan. open_finding_countintegerNo paused_by_systembooleanNo System-paused due to plan downgrade over-limit posture_scorenumberNo Policy pass rate: percentage of enabled policies with no open findings statusentity.ConnectorStatusNo Operational state (active, inactive, error, configuring) tenant_idstringNo Tenant that owns this connector typeentity.ConnectorTypeNo SaaS platform type (okta, cloudflare, gcp, workspace) updated_atstringNo Last update timestamp versionintegerNo Optimistic 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)
| Name | Type | Required | Description |
|---|---|---|---|
connector_ids | string[] | 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
| Name | In | Type | Required | Description |
|---|---|---|---|---|
id | path | string | Yes | Connector ID |
include | query | string | No | Include additional data (config) |
Responses
- 200 — OK
Name Type Required Description created_atstringNo Creation timestamp data_regionstringNo Data residency region (eu, us, ap, global) dpa_signed_atstringNo When the DPA/BAA was signed dpa_statusstringNo DPA/BAA status (signed, pending, not_required) fetch_modeentity.FetchModeNo Where resource fetching runs (origin or edge) idstringNo Unique identifier last_health_check_atstringNo Timestamp of the last health check last_health_errorstringNo Last health check error (nil = healthy) last_sync_atstringNo Timestamp of the last successful sync modeentity.ConnectorModeNo namestringNo Human-readable connector name paused_by_systembooleanNo System-paused due to plan downgrade over-limit posture_scorenumberNo Policy pass rate: percentage of enabled policies with no open findings statusentity.ConnectorStatusNo Operational state (active, inactive, error, configuring) tenant_idstringNo Tenant that owns this connector typeentity.ConnectorTypeNo SaaS platform type (okta, cloudflare, gcp, workspace) updated_atstringNo Last update timestamp versionintegerNo Optimistic 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
| Name | In | Type | Required | Description |
|---|---|---|---|---|
id | path | string | Yes | Connector 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
| Name | In | Type | Required | Description |
|---|---|---|---|---|
id | path | string | Yes | Connector ID |
Responses
- 200 — OK
Name Type Required Description 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
| Name | In | Type | Required | Description |
|---|---|---|---|---|
id | path | string | Yes | Connector ID |
status | query | string | No | Filter by status |
email | query | string | No | Filter by email |
role | query | string | No | Filter by role |
identity_type | query | string | No | Filter by identity type (human, service_account, bot, api_key, oauth_app) |
is_non_human | query | boolean | No | Filter non-human identities only |
search | query | string | No | Search by name or email |
limit | query | integer | No | Page size |
offset | query | integer | No | Page offset |
Responses
- 200 — OK
Name Type Required Description 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
| Name | In | Type | Required | Description |
|---|---|---|---|---|
id | path | string | Yes | Connector ID |
Responses
- 200 — OK
Name Type Required Description 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
| Name | In | Type | Required | Description |
|---|---|---|---|---|
id | path | string | Yes | Connector ID |
Responses
- 200 — OK
Name Type Required Description 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
| Name | In | Type | Required | Description |
|---|---|---|---|---|
id | path | string | Yes | Connector ID |
status | query | string | No | Filter by scan status |
limit | query | integer | No | Items per page (default 100, max 1000) |
offset | query | integer | No | Number of items to skip |
Responses
- 200 — OK
Name Type Required Description 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
| Name | In | Type | Required | Description |
|---|---|---|---|---|
id | path | string | Yes | Connector 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
Name Type Required Description 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
Name Type Required Description 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
Name Type Required Description 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
Name Type Required Description 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
| Name | In | Type | Required | Description |
|---|---|---|---|---|
window | query | integer | No | Window in days (default 14, max 90) |
Responses
- 200 — OK
Name Type Required Description 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
Name Type Required Description change_percentnumberNo Percentage change (negative = improving) current_scorenumberNo Most recent aggregate score directionstringNo Overall trend: improving, stable, degrading high_risk_changeintegerNo Change in high-risk identity count pointsentity.RiskTrendPoint[]No Daily trend data points previous_scorenumberNo Score 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
| Name | In | Type | Required | Description |
|---|---|---|---|---|
since | query | string | No | Start date (RFC3339) |
Responses
- 200 — OK
Name Type Required Description daystringNo YYYY-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
Name Type Required Description 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
| Name | In | Type | Required | Description |
|---|---|---|---|---|
since | query | string | No | Start date (RFC3339) |
connector_id | query | string | No | Filter by connector ID |
Responses
- 200 — OK
Name Type Required Description captured_atstringNo compliance_scorenumberNo findings_openintegerNo framework_namestringNo FrameworkName 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_scorenumberNo OverallScore 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)
| Name | Type | Required | Description |
|---|---|---|---|
disposition | string | Yes | |
ids | string[] | Yes | |
note | string | No |
Responses
- 200 — OK
Name Type Required Description 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)
| Name | Type | Required | Description |
|---|---|---|---|
ids | string[] | Yes |
Responses
- 200 — OK
Name Type Required Description 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
| Name | In | Type | Required | Description |
|---|---|---|---|---|
id | path | string | Yes | Identity or resource ID (UUID) |
Request body (request.SetDispositionRequest)
| Name | Type | Required | Description |
|---|---|---|---|
disposition | string | Yes | |
note | string | No | |
version | integer | No |
Responses
- 200 — OK
Name Type Required Description 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)
| Name | Type | Required | Description |
|---|---|---|---|
disposition | string | Yes | |
ids | string[] | Yes | |
note | string | No |
Responses
- 200 — OK
Name Type Required Description 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)
| Name | Type | Required | Description |
|---|---|---|---|
ids | string[] | Yes |
Responses
- 200 — OK
Name Type Required Description 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
| Name | In | Type | Required | Description |
|---|---|---|---|---|
id | path | string | Yes | Identity or resource ID (UUID) |
Request body (request.SetDispositionRequest)
| Name | Type | Required | Description |
|---|---|---|---|
disposition | string | Yes | |
note | string | No | |
version | integer | No |
Responses
- 200 — OK
Name Type Required Description 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
| Name | In | Type | Required | Description |
|---|---|---|---|---|
finding_id | query | string | No | Filter by finding ID |
status | query | string | No | Filter by status |
Responses
- 200 — OK
Name Type Required Description approval_chain_idstringNo Optional approval chain reference approved_bystringNo Person who approved the exception created_atstringNo When the exception was created created_by_emailstringNo Who created the exception: the creator's email, or `API key <name>` when an API key created it expires_atstringNo When the exception expires finding_idstringNo Associated finding idstringNo Unique exception identifier justificationstringNo Reason for the exception revoked_atstringNo When the exception was revoked (null if not revoked) statusentity.ExceptionStatusNo Lifecycle state (active, expired, revoked) tenant_idstringNo Owning tenant updated_atstringNo When the exception was last updated versionintegerNo Optimistic 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)
| Name | Type | Required | Description |
|---|---|---|---|
approved_by | string | No | Person who approved (optional when approval chain applies) |
expires_at | string | Yes | Expiration date (RFC3339) |
finding_id | string | Yes | Associated finding |
justification | string | Yes | Reason for the exception |
Responses
- 201 — Created
Name Type Required Description approval_chain_idstringNo Optional approval chain reference approved_bystringNo Person who approved the exception created_atstringNo When the exception was created created_by_emailstringNo Who created the exception: the creator's email, or `API key <name>` when an API key created it expires_atstringNo When the exception expires finding_idstringNo Associated finding idstringNo Unique exception identifier justificationstringNo Reason for the exception revoked_atstringNo When the exception was revoked (null if not revoked) statusentity.ExceptionStatusNo Lifecycle state (active, expired, revoked) tenant_idstringNo Owning tenant updated_atstringNo When the exception was last updated versionintegerNo Optimistic 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
| Name | In | Type | Required | Description |
|---|---|---|---|---|
id | path | string | Yes | Exception ID |
Responses
- 200 — OK
Name Type Required Description approval_chain_idstringNo Optional approval chain reference approved_bystringNo Person who approved the exception created_atstringNo When the exception was created created_by_emailstringNo Who created the exception: the creator's email, or `API key <name>` when an API key created it expires_atstringNo When the exception expires finding_idstringNo Associated finding idstringNo Unique exception identifier justificationstringNo Reason for the exception revoked_atstringNo When the exception was revoked (null if not revoked) statusentity.ExceptionStatusNo Lifecycle state (active, expired, revoked) tenant_idstringNo Owning tenant updated_atstringNo When the exception was last updated versionintegerNo Optimistic 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
| Name | In | Type | Required | Description |
|---|---|---|---|---|
id | path | string | Yes | Exception ID |
Responses
- 200 — OK
Name Type Required Description 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
| Name | In | Type | Required | Description |
|---|---|---|---|---|
id | path | string | Yes | Exception 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
| Name | In | Type | Required | Description |
|---|---|---|---|---|
connector_id | query | string | No | Filter by connector ID (comma-separated for multiple) |
scan_id | query | string | No | Filter by scan ID |
severity | query | string | No | Filter by severity (comma-separated) |
status | query | string | No | Filter by status (comma-separated) |
policy_id | query | string | No | Filter by policy ID (comma-separated for multiple) |
resource_type | query | string | No | Filter by resource type (comma-separated for multiple) |
framework_id | query | string | No | Filter by compliance framework ID |
control_id | query | string | No | Filter by compliance control ID |
q | query | string | No | Text search across title, resource_name, description |
assignee_id | query | string | No | Filter by assignee: a team member ID, or 'unassigned' for findings with no assignee |
category | query | string | No | Filter by policy category (comma-separated for multiple) |
connector_type | query | string | No | Filter by connector type |
resource_id | query | string | No | Filter by resource ID |
priority_min | query | number | No | Minimum priority score (0-100) |
priority_max | query | number | No | Maximum priority score (0-100) |
first_seen_after | query | string | No | Findings first seen after (RFC 3339) |
first_seen_before | query | string | No | Findings first seen before (RFC 3339) |
last_seen_after | query | string | No | Findings last seen after (RFC 3339) |
last_seen_before | query | string | No | Findings last seen before (RFC 3339) |
resolved_after | query | string | No | Findings resolved after (RFC 3339) |
resolved_before | query | string | No | Findings resolved before (RFC 3339) |
drift | query | string | No | Filter for drifted findings |
drifted | query | string | No | Alias for drift |
overdue | query | string | No | Filter for SLA-overdue findings |
suppression_source | query | string | No | Filter by suppression source; empty matches never-suppressed findings |
group_by | query | string | No | Group findings by dimension |
limit | query | integer | No | Items per page (default 100, max 1000) |
cursor | query | string | No | Opaque keyset cursor for the next page (omit for first page) |
sort_by | query | string | No | Sort column |
sort_order | query | string | No | Sort direction |
Responses
- 200 — Cursor-paginated findings (FindingGroupPagedResult when group_by is set)
Name Type Required Description dataentity.Finding[]No paginationentity.CursorMetaNo withheldentity.SeverityCountsNo set 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)
| Name | Type | Required | Description |
|---|---|---|---|
action | string | Yes | |
connector_id | string | Yes | |
policy_id | string | Yes | |
severity | entity.Severity | No |
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)
| Name | Type | Required | Description |
|---|---|---|---|
finding_ids | string[] | Yes | Finding IDs to update |
status | string | Yes |
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
| Name | In | Type | Required | Description |
|---|---|---|---|---|
connector_id | query | string | No | Filter by connector ID (comma-separated for multiple) |
severity | query | string | No | Filter by severity (comma-separated) |
status | query | string | No | Filter by status (comma-separated) |
policy_id | query | string | No | Filter by policy ID (comma-separated for multiple) |
resource_type | query | string | No | Filter by resource type (comma-separated for multiple) |
framework_id | query | string | No | Filter by compliance framework ID |
control_id | query | string | No | Filter by compliance control ID |
q | query | string | No | Text search |
assignee_id | query | string | No | Filter by assignee: a team member ID, or 'unassigned' for findings with no assignee |
category | query | string | No | Filter by policy category (comma-separated for multiple) |
connector_type | query | string | No | Filter by connector type |
resource_id | query | string | No | Filter by resource ID |
priority_min | query | number | No | Minimum priority score (0-100) |
priority_max | query | number | No | Maximum priority score (0-100) |
first_seen_after | query | string | No | Findings first seen after (RFC 3339) |
first_seen_before | query | string | No | Findings first seen before (RFC 3339) |
last_seen_after | query | string | No | Findings last seen after (RFC 3339) |
last_seen_before | query | string | No | Findings last seen before (RFC 3339) |
resolved_after | query | string | No | Findings resolved after (RFC 3339) |
resolved_before | query | string | No | Findings resolved before (RFC 3339) |
drift | query | string | No | Filter for drifted findings |
drifted | query | string | No | Alias for drift |
overdue | query | string | No | Filter for SLA-overdue findings |
Responses
- 200 — total count
Name Type Required Description 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)
| Name | Type | Required | Description |
|---|---|---|---|
filters | request.FindingExportFilters | No | Typed export filters |
format | string | Yes | Export format (csv or ndjson) |
Responses
- 201 — Created
Name Type Required Description 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
| Name | In | Type | Required | Description |
|---|---|---|---|---|
id | path | string | Yes | Export ID |
Responses
- 200 — OK
Name Type Required Description 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
| Name | In | Type | Required | Description |
|---|---|---|---|---|
id | path | string | Yes | Export 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
| Name | In | Type | Required | Description |
|---|---|---|---|---|
id | path | string | Yes | Finding ID |
Responses
- 200 — OK
Name Type Required Description assigned_atstringNo When the finding was assigned assignee_idstringNo Assigned team member ID categorystringNo Category of the policy that raised the finding (e.g. mfa). Omitted where the response does not include it. compliance_refsentity.ComplianceRef[]No Mapped compliance framework controls — populated by a separate code path, not in findingColumns connector_idstringNo Connector where the finding was detected descriptionstringNo Detailed explanation driftedbooleanNo True only when the latest scan that saw this finding re-opened it after resolution (configuration drift); regression_count counts every re-open first_seen_atstringNo When the finding was first detected idstringNo Unique finding identifier last_resolved_atstringNo When this finding was last resolved before the current regression last_seen_atstringNo When the finding was last observed policy_idstringNo Policy that triggered the finding policy_uuidstringNo Native UUID copy of PolicyID for index-only policy joins; NULL for non-UUID policy IDs priority_factorsstring[]No Contributing factors (e.g. "severity:critical", "privileged_user") priority_scorenumberNo Composite priority score (0-99.99) regression_countintegerNo Number of times this finding has drifted back to open remediation_infoentity.RemediationInfoNo Unified remediation payload — populated by scanner, consumed by all delivery channels resolved_atstringNo When the finding was resolved (null if still open) resource_idstringNo Identifier of the affected resource resource_namestringNo Human-readable name of the affected resource resource_typestringNo Type of affected resource scan_idstringNo Scan that produced this finding severityentity.SeverityNo Severity level (critical, high, medium, low, info) statusentity.FindingStatusNo Lifecycle state (open, resolved, suppressed, accepted) suppression_sourcestringNo 'sso_coverage' when the overlay suppressed this finding; empty for a human's manual suppression tenant_idstringNo Owning tenant titlestringNo Short summary of the finding verification_requested_atstringNo When "I fixed this" was clicked versionintegerNo Optimistic 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
| Name | In | Type | Required | Description |
|---|---|---|---|---|
id | path | string | Yes | Finding ID |
Request body (request.AssignFindingRequest)
| Name | Type | Required | Description |
|---|---|---|---|
assignee_id | string | No | Team 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
| Name | In | Type | Required | Description |
|---|---|---|---|---|
id | path | string | Yes | Finding ID |
Responses
- 200 — OK
Name Type Required Description 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
| Name | In | Type | Required | Description |
|---|---|---|---|---|
id | path | string | Yes | Finding ID |
Responses
- 200 — OK
Name Type Required Description 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
| Name | In | Type | Required | Description |
|---|---|---|---|---|
id | path | string | Yes | Finding ID |
Responses
- 200 — OK
Name Type Required Description 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
| Name | In | Type | Required | Description |
|---|---|---|---|---|
id | path | string | Yes | Finding ID |
Responses
- 200 — OK
Name Type Required Description 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
| Name | In | Type | Required | Description |
|---|---|---|---|---|
id | path | string | Yes | Finding ID |
Responses
- 202 — Verification scan started
Name Type Required Description cancelled_atstringNo cancelled_bystringNo completed_atstringNo When the scan finished connector_idstringNo Connector being scanned created_atstringNo Creation timestamp delta_resource_countintegerNo Set on delta scans only: resources the delta fetch returned, summed over all resource types, including types fetched in full error_messagestringNo Error details if scan failed failed_resource_countintegerNo FailedResourceCount is the number of resource types whose fetch failed during the scan. failed_resource_typesstring[]No FailedResourceTypes lists the specific resource types that failed to fetch (rate limit, 5xx, etc.). Serialized as JSONB; empty list for clean scans. fallback_from_edgebooleanNo Whether this scan fell back from edge to origin fallback_reasonstringNo Reason for edge-to-origin fallback finalize_warningsentity.ScanWarning[]No Non-fatal warnings emitted during scan finalization idstringNo Unique scan identifier is_deltabooleanNo Whether this was a delta/incremental scan requested_resource_typesstring[]No RequestedResourceTypes 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[]No Per-resource-type fetch outcomes resource_typesstring[]No Resource types actually scanned (post-cooldown; see RequestedResourceTypes for pre-filter set) started_atstringNo When the scan started statusentity.ScanStatusNo Scan state (pending, running, completed, failed) tenant_idstringNo Owning tenant total_findingsintegerNo Number 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
| Name | In | Type | Required | Description |
|---|---|---|---|---|
id | path | string | Yes | Finding ID |
Request body (request.UpdateFindingStatusRequest)
| Name | Type | Required | Description |
|---|---|---|---|
status | string | Yes | New 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
| Name | In | Type | Required | Description |
|---|---|---|---|---|
id | path | string | Yes | Finding 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
| Name | In | Type | Required | Description |
|---|---|---|---|---|
from | query | string | No | Range start (RFC3339 or YYYY-MM-DD); defaults to 30 days ago |
to | query | string | No | Range end (RFC3339 or YYYY-MM-DD); defaults to now |
Responses
- 200 — OK
Name Type Required Description 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
| Name | In | Type | Required | Description |
|---|---|---|---|---|
identity_id | query | string | No | Resolved identity UUID |
email | query | string | No | Login email, across all connectors |
country | query | string | No | ISO alpha-2 country code |
from | query | string | No | Range start (RFC3339 or YYYY-MM-DD); country filter only |
to | query | string | No | Range end (RFC3339 or YYYY-MM-DD); country filter only |
Responses
- 200 — OK
Name Type Required Description 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
Name Type Required Description 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)
| Name | Type | Required | Description |
|---|---|---|---|
country_codes | string[] | No | |
enabled | boolean | No | |
mode | string | Yes | |
severity | string | Yes |
Responses
- 200 — OK
Name Type Required Description 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
| Name | In | Type | Required | Description |
|---|---|---|---|---|
connector_id | query | string | No | Filter by connector ID |
status | query | string | No | Filter by status |
email | query | string | No | Filter by email |
role | query | string | No | Filter by role |
is_admin | query | boolean | No | Filter by privileged identities (is_privileged; deprovisioned included) |
identity_type | query | string | No | Filter by identity type (human, service_account, bot, api_key, oauth_app) |
is_non_human | query | boolean | No | Filter non-human identities only |
search | query | string | No | Search by name or email |
sort_by | query | string | No | Sort field (email, display_name, role, status, created_at, finding_count, risk_score) |
sort_order | query | string | No | Sort direction (asc, desc) |
limit | query | integer | No | Page size |
cursor | query | string | No | Opaque keyset cursor for the next page (omit for first page) |
Responses
- 200 — OK
Name Type Required Description 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
Name Type Required Description by_connectorentity.NHIConnectorSummary[]No Per-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
Name Type Required Description active_api_key_listentity.IdentityStub[]No ActiveAPIKeyList enumerates api_key-type NHIs owned by the leaver (created_by_external_id). ActiveAPIKeys mirrors len(ActiveAPIKeyList). active_api_keysintegerNo active_oauth_grantsentity.ThirdPartyAppStub[]No ActiveOAuthGrants surfaces third-party apps still authorized by a deprovisioned user. canonical_person_idstringNo CanonicalPersonID 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
| Name | In | Type | Required | Description |
|---|---|---|---|---|
search | query | string | No | Case-insensitive name/email substring search |
sort_by | query | string | No | Sort column (max_risk_score, display_name) |
sort_order | query | string | No | Sort direction (asc, desc) |
limit | query | integer | No | Items per page (default 100, max 1000) |
cursor | query | string | No | Opaque keyset cursor for the next page (omit for first page) |
Responses
- 200 — OK
Name Type Required Description 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
Name Type Required Description average_person_risknumberNo by_risk_bandobjectNo critical/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
| Name | In | Type | Required | Description |
|---|---|---|---|---|
id | path | string | Yes | Canonical person ID |
Responses
- 200 — OK
Name Type Required Description 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
| Name | In | Type | Required | Description |
|---|---|---|---|---|
connector_id | query | string | No | Filter by connector ID |
identity_id | query | string | No | One identity's series (omit for the connector aggregate rows) |
since | query | string | No | Start date (RFC3339, default 30 days ago, clamped to 365 days) |
until | query | string | No | End date (RFC3339) |
Responses
- 200 — OK
Name Type Required Description 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
| Name | In | Type | Required | Description |
|---|---|---|---|---|
connector_id | query | string | Yes | Connector ID (required) |
limit | query | integer | No | Items per page (default 100, max 1000) |
cursor | query | string | No | Opaque keyset cursor for the next page (omit for first page) |
Responses
- 200 — OK
Name Type Required Description 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
| Name | In | Type | Required | Description |
|---|---|---|---|---|
id | path | string | Yes | Identity ID |
Responses
- 200 — OK
Name Type Required Description canonical_identity_idstringNo connector_idstringNo created_atstringNo created_by_external_idstringNo deprovisioned_atstringNo display_namestringNo emailstringNo expires_atstringNo external_idstringNo finding_countintegerNo Number of open findings on this identity, as returned by the identity list; 0 on other reads. idstringNo identity_typeentity.IdentityTypeNo is_privilegedbooleanNo Whether 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
| Name | In | Type | Required | Description |
|---|---|---|---|---|
id | path | string | Yes | Identity ID |
Responses
- 200 — OK
Name Type Required Description active_api_key_listentity.IdentityStub[]No ActiveAPIKeyList enumerates api_key-type NHIs owned by the leaver (created_by_external_id). ActiveAPIKeys mirrors len(ActiveAPIKeyList). active_api_keysintegerNo active_oauth_grantsentity.ThirdPartyAppStub[]No ActiveOAuthGrants surfaces third-party apps still authorized by a deprovisioned user. canonical_person_idstringNo CanonicalPersonID 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
| Name | In | Type | Required | Description |
|---|---|---|---|---|
id | path | string | Yes | Identity ID |
Responses
- 200 — OK
Name Type Required Description 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
| Name | In | Type | Required | Description |
|---|---|---|---|---|
id | path | string | Yes | Identity ID |
Responses
- 200 — OK
Name Type Required Description 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
Name Type Required Description 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
| Name | In | Type | Required | Description |
|---|---|---|---|---|
id | path | string | Yes | Connector ID |
Request body (request.DeclareLoginSourceRequest)
| Name | Type | Required | Description |
|---|---|---|---|
idp_connector_id | string | Yes | Connector ID of the declared identity provider |
Responses
- 200 — OK
Name Type Required Description changedbooleanNo createdbooleanNo login_sourceresponse.LoginSourceInfoNo previous_idp_connector_idstringNo reconciliation_pendingbooleanNo restoredintegerNo suppressedintegerNo - 202 — Accepted — reconciliation pending
Name Type Required Description 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
| Name | In | Type | Required | Description |
|---|---|---|---|---|
id | path | string | Yes | Connector ID |
Responses
- 200 — OK
Name Type Required Description reconciliation_pendingbooleanNo restoredintegerNo suppressedintegerNo - 202 — Accepted — reconciliation pending
Name Type Required Description 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
| Name | In | Type | Required | Description |
|---|---|---|---|---|
status | query | string | No | Filter by delivery status |
exclude_in_app | query | boolean | No | Leave out in_app rows (the SLA escalation's per-finding tracking rows); only the value true applies |
limit | query | integer | No | Items per page (default 100, max 1000) |
offset | query | integer | No | Number of items to skip |
Responses
- 200 — OK
Name Type Required Description 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
| Name | In | Type | Required | Description |
|---|---|---|---|---|
status | query | string | No | Filter by delivery status (pending, success, failed, exhausted) |
channel_type | query | string | No | Filter by channel type (slack, email, in_app) |
source_type | query | string | No | Filter by source type (alert, exception, digest, report) |
source_id | query | string | No | Filter by source ID |
from | query | string | No | Start of date range (RFC3339) |
to | query | string | No | End of date range (RFC3339) |
limit | query | integer | No | Page size (default 100, max 1000) |
offset | query | integer | No | Page offset (default 0) |
Responses
- 200 — OK
Name Type Required Description 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
| Name | In | Type | Required | Description |
|---|---|---|---|---|
id | path | string | Yes | Identity ID (UUID) |
Responses
- 202 — Accepted
Name Type Required Description 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
| Name | In | Type | Required | Description |
|---|---|---|---|---|
limit | query | integer | No | Items per page |
offset | query | integer | No | Number of items to skip |
Responses
- 200 — OK
Name Type Required Description 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
| Name | In | Type | Required | Description |
|---|---|---|---|---|
id | path | string | Yes | Resource ID (UUID) |
Responses
- 200 — OK
Name Type Required Description 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
| Name | In | Type | Required | Description |
|---|---|---|---|---|
id | path | string | Yes | Resource 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
Name Type Required Description 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)
| Name | Type | Required | Description |
|---|---|---|---|
auto_send | boolean | No | |
orchestration_enabled | boolean | No |
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
| Name | In | Type | Required | Description |
|---|---|---|---|---|
source | query | string | No | Filter by source: audit, policy |
event_type | query | string | No | Filter by event type(s), comma-separated |
resource_type | query | string | No | Filter by resource type |
actor | query | string | No | Filter by actor email |
connector_id | query | string | No | Filter by connector ID (UUID) |
since | query | string | No | Start of time range (RFC3339). Default: 7 days ago. |
until | query | string | No | End of time range (RFC3339). Default: now. |
page | query | integer | No | Page number (default: 1) |
per_page | query | integer | No | Items per page (default: 50, max: 100) |
Responses
- 200 — OK
Name Type Required Description 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
| Name | In | Type | Required | Description |
|---|---|---|---|---|
since | query | string | No | Start time (RFC3339). Defaults to 30 days ago. |
until | query | string | No | End time (RFC3339). Defaults to now. |
Responses
- 200 — OK
Name Type Required Description 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
| Name | In | Type | Required | Description |
|---|---|---|---|---|
connector_type | query | string | No | Filter by connector type |
resource_type | query | string | No | Filter by resource type |
category | query | string | No | Filter by policy category |
has_findings | query | boolean | No | Only policies with at least one open finding |
limit | query | integer | No | Items per page (default 100, max 1000) |
offset | query | integer | No | Number of items to skip |
sort_by | query | string | No | Sort column |
sort_order | query | string | No | Sort direction |
Responses
- 200 — OK
Name Type Required Description 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)
| Name | Type | Required | Description |
|---|---|---|---|
input | object | Yes | Sample input for evaluation |
rego_source | string | Yes | OPA Rego policy source code |
Responses
- 200 — OK
Name Type Required Description 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
| Name | In | Type | Required | Description |
|---|---|---|---|---|
id | path | string | Yes | Policy ID |
Responses
- 200 — OK
Name Type Required Description admin_console_pathstringNo Path in SaaS admin console for remediation categorystringNo Policy category for grouping connector_typeentity.ConnectorTypeNo SaaS platform this policy applies to created_atstringNo Creation timestamp descriptionstringNo What this policy checks docs_urlstringNo Vendor documentation link effective_severityentity.SeverityNo enabledbooleanNo Whether the policy is active estimated_fix_minutesintegerNo Estimated time to remediate in minutes fix_difficultystringNo Remediation difficulty: easy, medium, hard idstringNo Unique policy identifier impact_if_ignoredstringNo Business impact if finding is left unresolved is_defaultbooleanNo Whether this is a built-in default policy namestringNo Human-readable policy name open_finding_countintegerNo Number of open findings for this policy (populated on list) prerequisitesstringNo Required admin role/permission rego_sourcestringNo OPA Rego policy source code remediation_stepsstring[]No Ordered steps to remediate the finding resource_typestringNo Resource type this policy evaluates rollback_riskstringNo low, medium, high — risk of remediation rollback root_causestringNo Root cause explanation for campaign grouping severityentity.SeverityNo Finding severity when violated (critical, high, medium, low, info) sso_rolestringNo Relationship to federated login: substitutable, evidence, idp_critical summarystringNo One-line remediation summary tier_tagsstring[]No Tags indicating which plan tiers include this policy updated_atstringNo Last update timestamp versionintegerNo Optimistic 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
| Name | In | Type | Required | Description |
|---|---|---|---|---|
id | path | string | Yes | Policy ID |
connector_id | query | string | No | Filter by connector ID |
event_type | query | string | No | Filter by event type (comma-separated) |
since | query | string | No | Start time (RFC3339) |
until | query | string | No | End time (RFC3339) |
limit | query | integer | No | Max results per page |
offset | query | integer | No | Pagination offset |
Responses
- 200 — OK
Name Type Required Description 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
| Name | In | Type | Required | Description |
|---|---|---|---|---|
id | path | string | Yes | Policy ID |
limit | query | integer | No | Items per page (default 100, max 1000) |
offset | query | integer | No | Number of items to skip |
Responses
- 200 — OK
Name Type Required Description 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
Name Type Required Description 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
| Name | In | Type | Required | Description |
|---|---|---|---|---|
id | path | string | Yes | Policy ID |
Request body (request.SetPolicyOverrideRequest)
| Name | Type | Required | Description |
|---|---|---|---|
enabled | boolean | No |
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
| Name | In | Type | Required | Description |
|---|---|---|---|---|
id | path | string | Yes | 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
Remediation
POST /agents/remediate
Run a remediation playbook
Requires permission: ai_governance:write
Request body (request.ExecuteRemediationRequest)
| Name | Type | Required | Description |
|---|---|---|---|
agent_ids | string[] | Yes | |
force | boolean | No | |
playbook_id | string | Yes |
Responses
- 201 — Created
Name Type Required Description 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
| Name | In | Type | Required | Description |
|---|---|---|---|---|
platform | query | string | No | Filter by agent platform |
Responses
- 200 — OK
Name Type Required Description 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
| Name | In | Type | Required | Description |
|---|---|---|---|---|
id | path | string | Yes | Playbook ID |
Responses
- 200 — OK
Name Type Required Description 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
| Name | In | Type | Required | Description |
|---|---|---|---|---|
id | path | string | Yes | Playbook ID |
Request body (request.PreviewPlaybookRequest)
| Name | Type | Required | Description |
|---|---|---|---|
agent_ids | string[] | Yes |
Responses
- 200 — OK
Name Type Required Description 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
| Name | In | Type | Required | Description |
|---|---|---|---|---|
status | query | string | No | Filter by run status |
limit | query | integer | No | Items per page |
offset | query | integer | No | Number of items to skip |
Responses
- 200 — OK
Name Type Required Description 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
| Name | In | Type | Required | Description |
|---|---|---|---|---|
id | path | string | Yes | Resource ID (UUID) |
Responses
- 200 — OK
Name Type Required Description 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
| Name | In | Type | Required | Description |
|---|---|---|---|---|
status | query | string | No | Filter by report status |
mine | query | boolean | No | Only reports created by the caller |
Responses
- 200 — OK
Name Type Required Description completed_atstringNo When generation finished created_atstringNo Creation timestamp created_bystringNo Identity that requested the report error_messagestringNo Error details if generation failed expires_atstringNo When the report expires file_namestringNo Download file name file_sizeintegerNo Generated file size in bytes formatentity.ReportFormatNo Output format framework_idstringNo Compliance framework (for compliance reports) idstringNo Unique report identifier record_countintegerNo Number of records in the report scan_idsstring[]No Scans included in the report schedule_idstringNo Associated report schedule statusentity.ReportStatusNo Job state tenant_idstringNo Owning 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)
| Name | Type | Required | Description |
|---|---|---|---|
as_of | string | No | identity_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_id | string | No | Access-review campaign (required for access_review reports) |
connector_id | string | No | Optional connector filter (identity_population) |
format | string | Yes | Report format |
framework_id | string | No | Compliance framework (required for compliance reports) |
from | string | No | offboarding_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_type | string | No | Optional identity-type filter (identity_population) |
scan_ids | string[] | No | Scans to include |
status | string | No | Optional status filter (identity_population) |
to | string | No | Window end (offboarding_sla) |
Responses
- 201 — Created
Name Type Required Description completed_atstringNo When generation finished created_atstringNo Creation timestamp created_bystringNo Identity that requested the report error_messagestringNo Error details if generation failed expires_atstringNo When the report expires file_namestringNo Download file name file_sizeintegerNo Generated file size in bytes formatentity.ReportFormatNo Output format framework_idstringNo Compliance framework (for compliance reports) idstringNo Unique report identifier record_countintegerNo Number of records in the report scan_idsstring[]No Scans included in the report schedule_idstringNo Associated report schedule statusentity.ReportStatusNo Job state tenant_idstringNo Owning 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
| Name | In | Type | Required | Description |
|---|---|---|---|---|
id | path | string | Yes | Report ID |
Responses
- 200 — OK
Name Type Required Description completed_atstringNo When generation finished created_atstringNo Creation timestamp created_bystringNo Identity that requested the report error_messagestringNo Error details if generation failed expires_atstringNo When the report expires file_namestringNo Download file name file_sizeintegerNo Generated file size in bytes formatentity.ReportFormatNo Output format framework_idstringNo Compliance framework (for compliance reports) idstringNo Unique report identifier record_countintegerNo Number of records in the report scan_idsstring[]No Scans included in the report schedule_idstringNo Associated report schedule statusentity.ReportStatusNo Job state tenant_idstringNo Owning 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
| Name | In | Type | Required | Description |
|---|---|---|---|---|
id | path | string | Yes | Report 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
Name Type Required Description 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)
| Name | Type | Required | Description |
|---|---|---|---|
deliver_email | boolean | No | |
deliver_slack | boolean | No | |
delivery_channels | entity.DeliveryChannel[] | No | |
enabled | boolean | No | |
filters | entity.ReportFilters | No | |
interval | string | Yes | |
name | string | Yes | |
report_type | string | Yes |
Responses
- 201 — Created
Name Type Required Description 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
| Name | In | Type | Required | Description |
|---|---|---|---|---|
id | path | string | Yes | Report Schedule ID |
Responses
- 200 — OK
Name Type Required Description 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
| Name | In | Type | Required | Description |
|---|---|---|---|---|
id | path | string | Yes | Report Schedule ID |
Request body (request.UpdateReportScheduleRequest)
| Name | Type | Required | Description |
|---|---|---|---|
deliver_email | boolean | No | |
deliver_slack | boolean | No | |
delivery_channels | entity.DeliveryChannel[] | No | |
enabled | boolean | No | |
filters | entity.ReportFilters | No | |
interval | string | No | |
name | string | No | |
report_type | string | No |
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
| Name | In | Type | Required | Description |
|---|---|---|---|---|
id | path | string | Yes | Report 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
| Name | In | Type | Required | Description |
|---|---|---|---|---|
connector_id | query | string | No | Filter by connector ID |
connector_type | query | string | No | Filter by connector type (e.g. okta, slack) |
resource_type | query | string | No | Filter by resource type; comma-separated for multiple types (e.g. api_token,personal_access_token) |
status | query | string | No | Resource status filter |
query | query | string | No | Search by resource name |
owner_email | query | string | No | Filter by owner email |
is_externally_shared | query | string | No | Filter externally shared (true/false) |
has_findings | query | string | No | Filter resources with open findings (true/false) |
last_seen_before | query | string | No | Resources last seen before this timestamp (RFC3339) |
last_seen_after | query | string | No | Resources last seen after this timestamp (RFC3339) |
first_discovered_after | query | string | No | Resources first discovered after this timestamp (RFC3339) |
include_facets | query | boolean | No | Include aggregate facets in response |
facet_owner_limit | query | integer | No | Max owner emails in facet (default 10, max 50) |
max_severity | query | string | No | Filter by max finding severity |
risk_score_min | query | number | No | Filter by minimum priority score |
sort_by | query | string | No | Sort field |
limit | query | integer | No | Items per page (default 100, max 1000) |
cursor | query | string | No | Opaque keyset cursor for the next page (omit for first page) |
Responses
- 200 — OK
Name Type Required Description 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
Name Type Required Description 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
| Name | In | Type | Required | Description |
|---|---|---|---|---|
id | path | string | Yes | Resource ID |
Responses
- 200 — OK
Name Type Required Description 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
| Name | In | Type | Required | Description |
|---|---|---|---|---|
id | path | string | Yes | Resource ID |
limit | query | integer | No | Items per page (default 100, max 1000) |
offset | query | integer | No | Number of items to skip |
Responses
- 200 — OK
Name Type Required Description 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
| Name | In | Type | Required | Description |
|---|---|---|---|---|
id | path | string | Yes | Resource ID |
Responses
- 200 — OK
Name Type Required Description 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
| Name | In | Type | Required | Description |
|---|---|---|---|---|
connector_id | query | string | No | Filter by connector ID |
status | query | string | No | Filter by scan status |
statuses | query | string | No | Comma-separated status list (any-of). Takes precedence over status. |
Responses
- 200 — OK
Name Type Required Description 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)
| Name | Type | Required | Description |
|---|---|---|---|
connector_id | string | Yes | Connector to scan |
force_full | boolean | No | Force a full scan instead of delta |
resource_types | string[] | No | Resource types to include (empty = all) |
Responses
- 201 — Created
Name Type Required Description cancelled_atstringNo cancelled_bystringNo completed_atstringNo When the scan finished connector_idstringNo Connector being scanned created_atstringNo Creation timestamp delta_resource_countintegerNo Set on delta scans only: resources the delta fetch returned, summed over all resource types, including types fetched in full error_messagestringNo Error details if scan failed failed_resource_countintegerNo FailedResourceCount is the number of resource types whose fetch failed during the scan. failed_resource_typesstring[]No FailedResourceTypes lists the specific resource types that failed to fetch (rate limit, 5xx, etc.). Serialized as JSONB; empty list for clean scans. fallback_from_edgebooleanNo Whether this scan fell back from edge to origin fallback_reasonstringNo Reason for edge-to-origin fallback finalize_warningsentity.ScanWarning[]No Non-fatal warnings emitted during scan finalization idstringNo Unique scan identifier is_deltabooleanNo Whether this was a delta/incremental scan partial_failure_ratenumberNo per_scan_detail_availablebooleanNo PerScanDetailAvailable 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[]No RequestedResourceTypes 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[]No Per-resource-type fetch outcomes resource_typesstring[]No Resource types actually scanned (post-cooldown; see RequestedResourceTypes for pre-filter set) started_atstringNo When the scan started statusentity.ScanStatusNo Scan state (pending, running, completed, failed) tenant_idstringNo Owning tenant total_findingsintegerNo Number 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)
| Name | Type | Required | Description |
|---|---|---|---|
scan_ids | string[] | Yes |
Responses
- 200 — OK
Name Type Required Description 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)
| Name | Type | Required | Description |
|---|---|---|---|
connector_ids | string[] | Yes | |
force_full | boolean | No | |
resource_types | string[] | No |
Responses
- 201 — Created
Name Type Required Description 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
| Name | In | Type | Required | Description |
|---|---|---|---|---|
a | query | string | Yes | Scan ID |
b | query | string | Yes | Scan ID of the same connector |
bucket | query | string | No | Bucket to list |
limit | query | integer | No | Page size (default 100, max 1000) |
offset | query | integer | No | Offset (default 0) |
Responses
- 200 — OK
Name Type Required Description bucketentity.CompareBucketNo The bucket the items belong to countsentity.ScanCompareCountsNo The size of every bucket itemsentity.ObservedFinding[]No One page of the bucket newer_scan_idstringNo The current scan older_scan_idstringNo The baseline scan totalintegerNo Findings in the whole bucket withheldintegerNo Findings 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
| Name | In | Type | Required | Description |
|---|---|---|---|---|
id | path | string | Yes | Scan ID |
Responses
- 200 — OK
Name Type Required Description cancelled_atstringNo cancelled_bystringNo completed_atstringNo When the scan finished connector_idstringNo Connector being scanned created_atstringNo Creation timestamp delta_resource_countintegerNo Set on delta scans only: resources the delta fetch returned, summed over all resource types, including types fetched in full error_messagestringNo Error details if scan failed failed_resource_countintegerNo FailedResourceCount is the number of resource types whose fetch failed during the scan. failed_resource_typesstring[]No FailedResourceTypes lists the specific resource types that failed to fetch (rate limit, 5xx, etc.). Serialized as JSONB; empty list for clean scans. fallback_from_edgebooleanNo Whether this scan fell back from edge to origin fallback_reasonstringNo Reason for edge-to-origin fallback finalize_warningsentity.ScanWarning[]No Non-fatal warnings emitted during scan finalization idstringNo Unique scan identifier is_deltabooleanNo Whether this was a delta/incremental scan partial_failure_ratenumberNo per_scan_detail_availablebooleanNo PerScanDetailAvailable 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[]No RequestedResourceTypes 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[]No Per-resource-type fetch outcomes resource_typesstring[]No Resource types actually scanned (post-cooldown; see RequestedResourceTypes for pre-filter set) started_atstringNo When the scan started statusentity.ScanStatusNo Scan state (pending, running, completed, failed) tenant_idstringNo Owning tenant total_findingsintegerNo Number 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
| Name | In | Type | Required | Description |
|---|---|---|---|---|
id | path | string | Yes | Scan ID |
Responses
- 200 — OK
Name Type Required Description cancelled_atstringNo cancelled_bystringNo completed_atstringNo When the scan finished connector_idstringNo Connector being scanned created_atstringNo Creation timestamp delta_resource_countintegerNo Set on delta scans only: resources the delta fetch returned, summed over all resource types, including types fetched in full error_messagestringNo Error details if scan failed failed_resource_countintegerNo FailedResourceCount is the number of resource types whose fetch failed during the scan. failed_resource_typesstring[]No FailedResourceTypes lists the specific resource types that failed to fetch (rate limit, 5xx, etc.). Serialized as JSONB; empty list for clean scans. fallback_from_edgebooleanNo Whether this scan fell back from edge to origin fallback_reasonstringNo Reason for edge-to-origin fallback finalize_warningsentity.ScanWarning[]No Non-fatal warnings emitted during scan finalization idstringNo Unique scan identifier is_deltabooleanNo Whether this was a delta/incremental scan partial_failure_ratenumberNo per_scan_detail_availablebooleanNo PerScanDetailAvailable 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[]No RequestedResourceTypes 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[]No Per-resource-type fetch outcomes resource_typesstring[]No Resource types actually scanned (post-cooldown; see RequestedResourceTypes for pre-filter set) started_atstringNo When the scan started statusentity.ScanStatusNo Scan state (pending, running, completed, failed) tenant_idstringNo Owning tenant total_findingsintegerNo Number 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
| Name | In | Type | Required | Description |
|---|---|---|---|---|
id | path | string | Yes | Scan ID |
Responses
- 200 — OK
Name Type Required Description 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
| Name | In | Type | Required | Description |
|---|---|---|---|---|
scan_id | path | string | Yes | Scan ID |
limit | query | integer | No | Page size (default 100, max 1000) |
offset | query | integer | No | Offset (default 0) |
Responses
- 200 — OK
Name Type Required Description itemsentity.ObservedFinding[]No One page of the scan's findings per_scan_detail_availablebooleanNo Items are what the scan observed, with their at-scan fields totalintegerNo Findings in the whole listing withheldintegerNo Findings 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
| Name | In | Type | Required | Description |
|---|---|---|---|---|
connector_id | query | string | No | Filter by connector ID |
enabled | query | string | No | Filter by enabled status |
Responses
- 200 — OK
Name Type Required Description connector_idstringNo Connector to scan consecutive_failuresintegerNo Number of consecutive trigger failures created_atstringNo Creation timestamp enabledbooleanNo Whether this schedule is active idstringNo Unique identifier intervalentity.ScheduleIntervalNo Recurring frequency last_errorstringNo Last trigger failure message last_run_atstringNo Last execution timestamp last_scan_idstringNo Last triggered scan ID managedbooleanNo Platform-managed schedule (cannot be deleted by client) next_run_atstringNo Next scheduled execution resource_typesstring[]No Resource types to scan tenant_idstringNo Owning tenant updated_atstringNo Last 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)
| Name | Type | Required | Description |
|---|---|---|---|
connector_id | string | Yes | Connector to schedule |
interval | string | Yes | Recurring frequency |
resource_types | string[] | No | Resource types to scan |
Responses
- 201 — Created
Name Type Required Description connector_idstringNo Connector to scan consecutive_failuresintegerNo Number of consecutive trigger failures created_atstringNo Creation timestamp enabledbooleanNo Whether this schedule is active idstringNo Unique identifier intervalentity.ScheduleIntervalNo Recurring frequency last_errorstringNo Last trigger failure message last_run_atstringNo Last execution timestamp last_scan_idstringNo Last triggered scan ID managedbooleanNo Platform-managed schedule (cannot be deleted by client) next_run_atstringNo Next scheduled execution resource_typesstring[]No Resource types to scan tenant_idstringNo Owning tenant updated_atstringNo Last 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
| Name | In | Type | Required | Description |
|---|---|---|---|---|
id | path | string | Yes | Scan Schedule ID |
Responses
- 200 — OK
Name Type Required Description connector_idstringNo Connector to scan consecutive_failuresintegerNo Number of consecutive trigger failures created_atstringNo Creation timestamp enabledbooleanNo Whether this schedule is active idstringNo Unique identifier intervalentity.ScheduleIntervalNo Recurring frequency last_errorstringNo Last trigger failure message last_run_atstringNo Last execution timestamp last_scan_idstringNo Last triggered scan ID managedbooleanNo Platform-managed schedule (cannot be deleted by client) next_run_atstringNo Next scheduled execution resource_typesstring[]No Resource types to scan tenant_idstringNo Owning tenant updated_atstringNo Last 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
| Name | In | Type | Required | Description |
|---|---|---|---|---|
id | path | string | Yes | Scan Schedule ID |
Request body (request.UpdateScanScheduleRequest)
| Name | Type | Required | Description |
|---|---|---|---|
enabled | boolean | No | Enable or disable |
interval | string | No | Updated frequency |
resource_types | string[] | No | Updated 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
| Name | In | Type | Required | Description |
|---|---|---|---|---|
id | path | string | Yes | Scan 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
Name Type Required Description connector_typestringNo descriptionstringNo display_namestringNo doc_urlstringNo estimated_minutesintegerNo estimated_scan_minutesintegerNo EstimatedScanMinutes 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[]No SetupSteps 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
Name Type Required Description 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
Name Type Required Description 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
| Name | In | Type | Required | Description |
|---|---|---|---|---|
scope | query | string | No | Filter by scope (policy or finding) |
status | query | string | No | Filter by status |
target_id | query | string | No | Filter by target ID (UUID) |
limit | query | integer | No | Items per page |
offset | query | integer | No | Number of items to skip |
Responses
- 200 — OK
Name Type Required Description 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)
| Name | Type | Required | Description |
|---|---|---|---|
expires_at | string | No | |
justification | string | Yes | |
requested_severity | string | Yes | |
scope | string | Yes | |
target_id | string | Yes |
Responses
- 201 — Created
Name Type Required Description 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
| Name | In | Type | Required | Description |
|---|---|---|---|---|
id | path | string | Yes | Resource ID (UUID) |
Responses
- 200 — OK
Name Type Required Description 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
| Name | In | Type | Required | Description |
|---|---|---|---|---|
id | path | string | Yes | Resource ID (UUID) |
Responses
- 200 — OK
Name Type Required Description 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
| Name | In | Type | Required | Description |
|---|---|---|---|---|
id | path | string | Yes | Resource ID (UUID) |
Request body (request.RevokeSeverityOverrideRequest)
| Name | Type | Required | Description |
|---|---|---|---|
reason | string | No |
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
Name Type Required Description 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)
| Name | Type | Required | Description |
|---|---|---|---|
escalation_channels | string[] | No | |
name | string | Yes | |
rules | request.SLARuleInput[] | Yes |
Responses
- 201 — Created
Name Type Required Description 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
| Name | In | Type | Required | Description |
|---|---|---|---|---|
id | path | string | Yes | SLA Policy ID |
Responses
- 200 — OK
Name Type Required Description 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
| Name | In | Type | Required | Description |
|---|---|---|---|---|
id | path | string | Yes | SLA Policy ID |
Request body (request.UpdateSLAPolicyRequest)
| Name | Type | Required | Description |
|---|---|---|---|
escalation_channels | string[] | No | |
name | string | Yes | |
rules | request.SLARuleInput[] | Yes |
Responses
- 200 — OK
Name Type Required Description 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
| Name | In | Type | Required | Description |
|---|---|---|---|---|
id | path | string | Yes | SLA 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
| Name | In | Type | Required | Description |
|---|---|---|---|---|
id | path | string | Yes | SLA 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
| Name | In | Type | Required | Description |
|---|---|---|---|---|
connector_type | query | string | No | Filter by connector type |
resource_type | query | string | No | Filter by resource type |
has_findings | query | boolean | No | Only tenant policies with at least one open finding |
limit | query | integer | No | Items per page (default 100, max 1000) |
offset | query | integer | No | Number of items to skip |
sort_by | query | string | No | Sort column |
sort_order | query | string | No | Sort direction |
Responses
- 200 — OK
Name Type Required Description 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)
| Name | Type | Required | Description |
|---|---|---|---|
connector_type | string | Yes | |
description | string | No | |
enabled | boolean | No | |
name | string | Yes | |
rego_source | string | Yes | |
resource_type | string | Yes | |
severity | string | Yes |
Responses
- 201 — Created
Name Type Required Description 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
| Name | In | Type | Required | Description |
|---|---|---|---|---|
id | path | string | Yes | Tenant Policy ID |
Responses
- 200 — OK
Name Type Required Description 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
| Name | In | Type | Required | Description |
|---|---|---|---|---|
id | path | string | Yes | Tenant Policy ID |
Request body (request.UpdateTenantPolicyRequest)
| Name | Type | Required | Description |
|---|---|---|---|
description | string | No | |
enabled | boolean | No | |
name | string | No | |
rego_source | string | No | |
resource_type | string | No | |
severity | string | No |
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
| Name | In | Type | Required | Description |
|---|---|---|---|---|
id | path | string | Yes | Tenant 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
| Name | In | Type | Required | Description |
|---|---|---|---|---|
id | path | string | Yes | Tenant Policy ID |
connector_id | query | string | No | Filter by connector ID |
event_type | query | string | No | Filter by event type (comma-separated) |
since | query | string | No | Start time (RFC3339) |
until | query | string | No | End time (RFC3339) |
limit | query | integer | No | Max results per page |
offset | query | integer | No | Pagination offset |
Responses
- 200 — OK
Name Type Required Description 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
| Name | In | Type | Required | Description |
|---|---|---|---|---|
connector_id | query | string | No | Filter by connector ID |
connector_type | query | string | No | Filter by connector type |
risk | query | string | No | Filter by risk level |
status | query | string | No | Filter by status |
is_ai_app | query | boolean | No | Filter to AI-detected apps only |
ai_subcategory | query | string | No | Filter by AI subcategory |
ai_trains_on_data | query | string | No | Filter by AI trains-on-data flag |
ai_source | query | string | No | Filter by AI tier source |
limit | query | integer | No | Items per page (default 100, max 1000) |
offset | query | integer | No | Number of items to skip |
sort_by | query | string | No | Sort column |
sort_order | query | string | No | Sort direction |
Responses
- 200 — OK
Name Type Required Description 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
Name Type Required Description 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)
| Name | Type | Required | Description |
|---|---|---|---|
app_ids | string[] | 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)
| Name | Type | Required | Description |
|---|---|---|---|
app_ids | string[] | Yes | |
status | string | 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 /third-party-apps/coverage
Get OAuth discovery coverage
Requires permission: third_party_apps:read
Responses
- 200 — OK
Name Type Required Description 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)
| Name | Type | Required | Description |
|---|---|---|---|
filters | request.ThirdPartyAppExportFilters | No | Typed export filters |
format | string | Yes | Export format (csv or ndjson) |
Responses
- 201 — Created
Name Type Required Description 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
| Name | In | Type | Required | Description |
|---|---|---|---|---|
id | path | string | Yes | Export ID |
Responses
- 200 — OK
Name Type Required Description 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
| Name | In | Type | Required | Description |
|---|---|---|---|---|
id | path | string | Yes | Export 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
Name Type Required Description 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
| Name | In | Type | Required | Description |
|---|---|---|---|---|
id | path | string | Yes | Third-party app ID |
Responses
- 200 — OK
Name Type Required Description ai_data_scopesstring[]No ai_detection_reasonstringNo ai_publisherstringNo Publisher 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_countintegerNo Blast-radius metrics: token-theft reach computed after BulkUpsert; persisted for ranked views. authorizer_offboarded_countintegerNo authorizer_privileged_countintegerNo canonical_idstringNo Canonical 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_atstringNo LastActivityAt 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[]No Why 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
| Name | In | Type | Required | Description |
|---|---|---|---|---|
id | path | string | Yes | Third-party app ID |
Responses
- 200 — OK
Name Type Required Description 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
| Name | In | Type | Required | Description |
|---|---|---|---|---|
id | path | string | Yes | Third-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
| Name | In | Type | Required | Description |
|---|---|---|---|---|
id | path | string | Yes | Third-party app ID |
Request body (request.UpdateThirdPartyAppStatusRequest)
| Name | Type | Required | Description |
|---|---|---|---|
status | string | Yes | New 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
| Name | In | Type | Required | Description |
|---|---|---|---|---|
id | path | string | Yes | Finding ID |
Responses
- 200 — OK
Name Type Required Description 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
| Name | In | Type | Required | Description |
|---|---|---|---|---|
id | path | string | Yes | Finding ID |
Request body (request.CreateTicketRequest)
| Name | Type | Required | Description |
|---|---|---|---|
assignee_id | string | No | |
issue_type | string | Yes |
Responses
- 201 — Created
Name Type Required Description 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
| Name | In | Type | Required | Description |
|---|---|---|---|---|
id | path | string | Yes | Finding 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
| Name | In | Type | Required | Description |
|---|---|---|---|---|
id | path | string | Yes | Finding 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
Name Type Required Description 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
| Name | In | Type | Required | Description |
|---|---|---|---|---|
query | query | string | No | Search query for user lookup |
Responses
- 200 — OK
Name Type Required Description 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