Infra
The Infra endpoints of the Kenso API.
Count the workspace's open infra findings
/v1/infra/summaryinfra.summaryNeeds the infra_findings feature on your workspace. Until it is on, calls answer 404.
openCount and bySeverity count open findings; snoozedCount the snoozed ones. byKind lists each kind with open findings, with what its subjects cost a month where Kenso knows the price, and monthlyCostAtStake sums it. Money is { amount (cents), currency: "usd" }. Needs Delivery view and the infra_findings flag.
Parameters
400 workspace_required).Response 200
data is a InfraSummaryModel.
curl -X GET "https://api.ken.so/v1/infra/summary" \ -H "Authorization: Bearer $KEN_API_KEY" \ -H "Ken-Version: 2026-11-02" \ -H "X-Ken-Workspace-Id: $KEN_WORKSPACE_ID"
{
"success": true,
"data": {
"openCount": 1,
"snoozedCount": 1,
"bySeverity": {
"critical": 1,
"warning": 1,
"info": 1
},
"byKind": [
{
"kind": "string",
"openCount": 1,
"critical": 1,
"warning": 1,
"info": 1,
"monthlyCost": {
"amount": 1,
"currency": "string"
}
}
],
"monthlyCostAtStake": {
"amount": 1,
"currency": "string"
},
"lastSweep": {
"sweepId": 812,
"trigger": "string",
"status": "string",
"startedAt": "2026-09-23T15:02:11Z",
"finishedAt": "2026-09-23T15:02:11Z",
"detectors": [
{
"kind": "string",
"subjectType": "string",
"outcome": "string",
"found": 1,
"opened": 1,
"resolved": 1,
"error": "string"
}
],
"error": "string"
}
}
}List the workspace's infra findings, newest first
/v1/infra/findingsinfra.findingsNeeds the infra_findings feature on your workspace. Until it is on, calls answer 404.
kind: billing_leak, provider_cancelled, warmup_missing, idle_domain, domain_expiring, inbox_no_domain, disconnected_inbox. status: open (the default), snoozed, ignored, resolved. severity: critical, warning, info. Each filter is comma-separated and its values OR together. evidence holds what the detector saw; suggestedAction names the fix. Needs Delivery view and the infra_findings flag.
Parameters
billing_leak,idle_domain.open (the default), snoozed, ignored, resolved.critical, warning, info.400 workspace_required).Response 200
data is a list of InfraFindingModel. Each item has these fields. The response also carries pagination.
inbox:123 or registrar_domain:porkbun:example.com.curl -X GET "https://api.ken.so/v1/infra/findings" \ -H "Authorization: Bearer $KEN_API_KEY" \ -H "Ken-Version: 2026-11-02" \ -H "X-Ken-Workspace-Id: $KEN_WORKSPACE_ID"
{
"success": true,
"data": [
{
"id": 812,
"workspaceId": 812,
"workspaceName": "string",
"kind": "string",
"subjectType": "string",
"subjectId": 812,
"subjectKey": "string",
"provider": "string",
"severity": "string",
"status": "string",
"title": "string",
"evidence": null,
"suggestedAction": "string",
"monthlyCost": {
"amount": 1,
"currency": "string"
},
"firstSeenAt": "2026-09-23T15:02:11Z",
"lastSeenAt": "2026-09-23T15:02:11Z",
"resolvedAt": "2026-09-23T15:02:11Z",
"snoozedUntil": "2026-09-23T15:02:11Z"
}
],
"pagination": {
"nextCursor": "eyJpZCI6ODE1fQ",
"hasMore": true,
"total": 1,
"isTotalCapped": true
}
}Snooze, ignore or reopen one of the workspace's infra findings
/v1/infra/findings/{findingId}infra.update-findingNeeds the infra_findings feature on your workspace. Until it is on, calls answer 404.
Body: status is snoozed (with snoozedUntil, ISO 8601 UTC, in the future and at most a year ahead), ignored or open (reopen). A snoozed finding opens again on the first sweep after snoozedUntil; an ignored one stays ignored until reopened, and the sweep never resolves it. A resolved finding refuses (409 invalid_state); another workspace's finding is 404. A billing_leak cannot be snoozed or ignored here (403): Kenso pays it and fixes it, and only Kenso staff change it. Records who changed it and an audit line in the workspace; changes nothing at a provider. Returns the finding. Needs Delivery edit and the infra_findings flag.
Parameters
400 workspace_required).Request body
application/json, optional.
open (reopen), snoozed or ignored. Required.snoozed, refused with the other statuses.Response 200
data is a InfraFindingModel.
inbox:123 or registrar_domain:porkbun:example.com.curl -X PATCH "https://api.ken.so/v1/infra/findings/812" \
-H "Authorization: Bearer $KEN_API_KEY" \
-H "Ken-Version: 2026-11-02" \
-H "X-Ken-Workspace-Id: $KEN_WORKSPACE_ID" \
-H "Content-Type: application/json" \
-d '{
"status": "string",
"snoozedUntil": "2026-09-23T15:02:11Z"
}'{
"success": true,
"data": {
"id": 812,
"workspaceId": 812,
"workspaceName": "string",
"kind": "string",
"subjectType": "string",
"subjectId": 812,
"subjectKey": "string",
"provider": "string",
"severity": "string",
"status": "string",
"title": "string",
"evidence": null,
"suggestedAction": "string",
"monthlyCost": {
"amount": 1,
"currency": "string"
},
"firstSeenAt": "2026-09-23T15:02:11Z",
"lastSeenAt": "2026-09-23T15:02:11Z",
"resolvedAt": "2026-09-23T15:02:11Z",
"snoozedUntil": "2026-09-23T15:02:11Z"
}
}