Download OpenAPI specification:Download
REST API for the qf host-based firewall control plane.
Authentication: Most endpoints require either a JWT cookie (qf_token, set by POST /auth/login)
or an Authorization: Bearer <token> header (JWT or opaque API token).
Tenant: Protected endpoints require the X-Tenant-ID header (UUID of the tenant).
RS256 public key set. Operator access tokens are RSA-signed by the CP; verifiers (the CP itself and the analytics service) check signatures with this key without holding the signing key. Served only when a signing key is configured.
{- "keys": [
- { }
]
}| username required | string |
| password required | string <password> |
{- "username": "string",
- "password": "pa$$word"
}{- "error": "string",
- "request_id": "string"
}{- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "username": "string",
- "email": "string",
- "role": "string",
- "tenant_id": "34f5c98e-f430-457b-a812-92637d0c6fd0",
- "access_ttl_seconds": 0
}JWT authentication only; OIDC accounts cannot change a password here.
| current_password required | string <password> |
| new_password required | string <password> [ 8 .. 72 ] characters |
{- "current_password": "pa$$word",
- "new_password": "pa$$word"
}{- "error": "string",
- "request_id": "string"
}| X-Tenant-ID required | string <uuid> Tenant UUID |
{- "version": "string",
- "git_sha": "string",
- "git_branch": "string",
- "build_time": "string",
- "go_version": "string",
- "hostname": "string",
- "started_at": "2019-08-24T14:15:22Z",
- "uptime_seconds": 0,
- "tenant_id": "34f5c98e-f430-457b-a812-92637d0c6fd0"
}| changed_since | string <date-time> Reconnect-backfill delta cursor (UI live-sync). When present, the endpoint returns ONLY rows changed at or after |
| limit | integer <= 10000 Default: 500 |
| before | string <date-time> Cursor — return hosts with created_at strictly before this RFC3339 timestamp (newest first). |
| cap | string Enum: "32" "2048" "other" VIZ-02 rule-cap drill-down filter — return only hosts whose resolved rule-cap tier equals this value. The resolved cap is metrics.rules_cap, falling back to capabilities.ruleCap; a host with no resolvable used+cap is excluded when this filter is set. |
| rules_min | integer VIZ-02 drill-down filter — only hosts whose metrics.rules_used is ≥ this value (inclusive). |
| rules_max | integer VIZ-02 drill-down filter — only hosts whose metrics.rules_used is ≤ this value (inclusive). |
| X-Tenant-ID required | string <uuid> Tenant UUID |
[- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "tenant_id": "34f5c98e-f430-457b-a812-92637d0c6fd0",
- "hostname": "string",
- "labels": {
- "property1": "string",
- "property2": "string"
}, - "effective_labels": {
- "property1": "string",
- "property2": "string"
}, - "status": "enrolling",
- "current_generation": 0,
- "desired_generation": 0,
- "last_confirmed_generation": 0,
- "last_confirmed_at": "2019-08-24T14:15:22Z",
- "config_version": 0,
- "flow_events_enabled": true,
- "last_heartbeat_at": "2019-08-24T14:15:22Z",
- "agent_version": "string",
- "kernel_version": "string",
- "last_seen_ip": "string",
- "interfaces": [
- { }
], - "capabilities": { },
- "isolation": {
- "supported": true,
- "revision": 0,
- "desired": {
- "mode": "none",
- "exceptions": [
- {
- "direction": "ingress",
- "protocol": "tcp",
- "port_start": 1,
- "port_end": 1
}
]
}, - "applied": {
- "mode": "none",
- "exceptions": [
- {
- "direction": "ingress",
- "protocol": "tcp",
- "port_start": 1,
- "port_end": 1
}
], - "revision": 0,
- "generation": 0,
- "at": "2019-08-24T14:15:22Z"
}, - "status": "pending",
- "target_generation": 0,
- "error": "string",
- "requested_at": "2019-08-24T14:15:22Z"
}, - "metrics": { },
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z",
- "archived_at": "2019-08-24T14:15:22Z"
}
]| X-Tenant-ID required | string <uuid> Tenant UUID |
| hostname required | string |
object | |
| status | string Default: "enrolling" |
{- "hostname": "string",
- "labels": {
- "property1": "string",
- "property2": "string"
}, - "status": "enrolling"
}{- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "tenant_id": "34f5c98e-f430-457b-a812-92637d0c6fd0",
- "hostname": "string",
- "labels": {
- "property1": "string",
- "property2": "string"
}, - "effective_labels": {
- "property1": "string",
- "property2": "string"
}, - "status": "enrolling",
- "current_generation": 0,
- "desired_generation": 0,
- "last_confirmed_generation": 0,
- "last_confirmed_at": "2019-08-24T14:15:22Z",
- "config_version": 0,
- "flow_events_enabled": true,
- "last_heartbeat_at": "2019-08-24T14:15:22Z",
- "agent_version": "string",
- "kernel_version": "string",
- "last_seen_ip": "string",
- "interfaces": [
- { }
], - "capabilities": { },
- "isolation": {
- "supported": true,
- "revision": 0,
- "desired": {
- "mode": "none",
- "exceptions": [
- {
- "direction": "ingress",
- "protocol": "tcp",
- "port_start": 1,
- "port_end": 1
}
]
}, - "applied": {
- "mode": "none",
- "exceptions": [
- {
- "direction": "ingress",
- "protocol": "tcp",
- "port_start": 1,
- "port_end": 1
}
], - "revision": 0,
- "generation": 0,
- "at": "2019-08-24T14:15:22Z"
}, - "status": "pending",
- "target_generation": 0,
- "error": "string",
- "requested_at": "2019-08-24T14:15:22Z"
}, - "metrics": { },
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z",
- "archived_at": "2019-08-24T14:15:22Z"
}VIZ-02 fleet rule-cap pressure, aggregated server-side so the dashboard widget does not fetch the whole fleet. Hosts are grouped by resolved rule-cap tier (2048 bpf_loop / other), then bucketed into utilization cohorts (over/saturated/near/mid/low). Scoped to the caller's tenant.
| X-Tenant-ID required | string <uuid> Tenant UUID |
{- "tiers": [
- {
- "key": "32",
- "cap": 0,
- "is_other": true,
- "total": 0,
- "cohorts": {
- "property1": 0,
- "property2": 0
}
}
], - "no_metrics": 0
}| keys required | Array of strings [ 1 .. 5 ] items unique |
| X-Tenant-ID required | string <uuid> Tenant UUID |
[- {
- "key": "string",
- "value": "string",
- "count": 0,
- "children": [
- { }
]
}
]| keys required | Array of strings [ 1 .. 5 ] items unique |
| path | Array of strings <= 5 items |
| X-Tenant-ID required | string <uuid> Tenant UUID |
[- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "tenant_id": "34f5c98e-f430-457b-a812-92637d0c6fd0",
- "hostname": "string",
- "labels": {
- "property1": "string",
- "property2": "string"
}, - "effective_labels": {
- "property1": "string",
- "property2": "string"
}, - "status": "enrolling",
- "current_generation": 0,
- "desired_generation": 0,
- "last_confirmed_generation": 0,
- "last_confirmed_at": "2019-08-24T14:15:22Z",
- "config_version": 0,
- "flow_events_enabled": true,
- "last_heartbeat_at": "2019-08-24T14:15:22Z",
- "agent_version": "string",
- "kernel_version": "string",
- "last_seen_ip": "string",
- "interfaces": [
- { }
], - "capabilities": { },
- "isolation": {
- "supported": true,
- "revision": 0,
- "desired": {
- "mode": "none",
- "exceptions": [
- {
- "direction": "ingress",
- "protocol": "tcp",
- "port_start": 1,
- "port_end": 1
}
]
}, - "applied": {
- "mode": "none",
- "exceptions": [
- {
- "direction": "ingress",
- "protocol": "tcp",
- "port_start": 1,
- "port_end": 1
}
], - "revision": 0,
- "generation": 0,
- "at": "2019-08-24T14:15:22Z"
}, - "status": "pending",
- "target_generation": 0,
- "error": "string",
- "requested_at": "2019-08-24T14:15:22Z"
}, - "metrics": { },
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z",
- "archived_at": "2019-08-24T14:15:22Z"
}
]| X-Tenant-ID required | string <uuid> Tenant UUID |
[- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "tenant_id": "34f5c98e-f430-457b-a812-92637d0c6fd0",
- "hostname": "string",
- "labels": {
- "property1": "string",
- "property2": "string"
}, - "effective_labels": {
- "property1": "string",
- "property2": "string"
}, - "status": "enrolling",
- "current_generation": 0,
- "desired_generation": 0,
- "last_confirmed_generation": 0,
- "last_confirmed_at": "2019-08-24T14:15:22Z",
- "config_version": 0,
- "flow_events_enabled": true,
- "last_heartbeat_at": "2019-08-24T14:15:22Z",
- "agent_version": "string",
- "kernel_version": "string",
- "last_seen_ip": "string",
- "interfaces": [
- { }
], - "capabilities": { },
- "isolation": {
- "supported": true,
- "revision": 0,
- "desired": {
- "mode": "none",
- "exceptions": [
- {
- "direction": "ingress",
- "protocol": "tcp",
- "port_start": 1,
- "port_end": 1
}
]
}, - "applied": {
- "mode": "none",
- "exceptions": [
- {
- "direction": "ingress",
- "protocol": "tcp",
- "port_start": 1,
- "port_end": 1
}
], - "revision": 0,
- "generation": 0,
- "at": "2019-08-24T14:15:22Z"
}, - "status": "pending",
- "target_generation": 0,
- "error": "string",
- "requested_at": "2019-08-24T14:15:22Z"
}, - "metrics": { },
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z",
- "archived_at": "2019-08-24T14:15:22Z"
}
]| id required | string <uuid> |
| X-Tenant-ID required | string <uuid> Tenant UUID |
{- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "tenant_id": "34f5c98e-f430-457b-a812-92637d0c6fd0",
- "hostname": "string",
- "labels": {
- "property1": "string",
- "property2": "string"
}, - "effective_labels": {
- "property1": "string",
- "property2": "string"
}, - "status": "enrolling",
- "current_generation": 0,
- "desired_generation": 0,
- "last_confirmed_generation": 0,
- "last_confirmed_at": "2019-08-24T14:15:22Z",
- "config_version": 0,
- "flow_events_enabled": true,
- "last_heartbeat_at": "2019-08-24T14:15:22Z",
- "agent_version": "string",
- "kernel_version": "string",
- "last_seen_ip": "string",
- "interfaces": [
- { }
], - "capabilities": { },
- "isolation": {
- "supported": true,
- "revision": 0,
- "desired": {
- "mode": "none",
- "exceptions": [
- {
- "direction": "ingress",
- "protocol": "tcp",
- "port_start": 1,
- "port_end": 1
}
]
}, - "applied": {
- "mode": "none",
- "exceptions": [
- {
- "direction": "ingress",
- "protocol": "tcp",
- "port_start": 1,
- "port_end": 1
}
], - "revision": 0,
- "generation": 0,
- "at": "2019-08-24T14:15:22Z"
}, - "status": "pending",
- "target_generation": 0,
- "error": "string",
- "requested_at": "2019-08-24T14:15:22Z"
}, - "metrics": { },
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z",
- "archived_at": "2019-08-24T14:15:22Z"
}| id required | string <uuid> |
| X-Tenant-ID required | string <uuid> Tenant UUID |
object | |
| status | string |
| flow_events_enabled | boolean |
{- "labels": {
- "property1": "string",
- "property2": "string"
}, - "status": "string",
- "flow_events_enabled": true
}{- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "tenant_id": "34f5c98e-f430-457b-a812-92637d0c6fd0",
- "hostname": "string",
- "labels": {
- "property1": "string",
- "property2": "string"
}, - "effective_labels": {
- "property1": "string",
- "property2": "string"
}, - "status": "enrolling",
- "current_generation": 0,
- "desired_generation": 0,
- "last_confirmed_generation": 0,
- "last_confirmed_at": "2019-08-24T14:15:22Z",
- "config_version": 0,
- "flow_events_enabled": true,
- "last_heartbeat_at": "2019-08-24T14:15:22Z",
- "agent_version": "string",
- "kernel_version": "string",
- "last_seen_ip": "string",
- "interfaces": [
- { }
], - "capabilities": { },
- "isolation": {
- "supported": true,
- "revision": 0,
- "desired": {
- "mode": "none",
- "exceptions": [
- {
- "direction": "ingress",
- "protocol": "tcp",
- "port_start": 1,
- "port_end": 1
}
]
}, - "applied": {
- "mode": "none",
- "exceptions": [
- {
- "direction": "ingress",
- "protocol": "tcp",
- "port_start": 1,
- "port_end": 1
}
], - "revision": 0,
- "generation": 0,
- "at": "2019-08-24T14:15:22Z"
}, - "status": "pending",
- "target_generation": 0,
- "error": "string",
- "requested_at": "2019-08-24T14:15:22Z"
}, - "metrics": { },
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z",
- "archived_at": "2019-08-24T14:15:22Z"
}| id required | string <uuid> |
| X-Tenant-ID required | string <uuid> Tenant UUID |
{- "error": "string",
- "request_id": "string"
}| id required | string <uuid> |
| X-Tenant-ID required | string <uuid> Tenant UUID |
{- "supported": true,
- "revision": 7,
- "desired": {
- "mode": "partial",
- "exceptions": [
- {
- "direction": "egress",
- "protocol": "tcp",
- "port_start": 443,
- "port_end": 443
}
]
}, - "applied": {
- "revision": 7,
- "mode": "partial",
- "exceptions": [
- {
- "direction": "egress",
- "protocol": "tcp",
- "port_start": 443,
- "port_end": 443
}
], - "generation": 18,
- "at": "2026-08-30T16:00:00Z"
}, - "status": "applied",
- "target_generation": 18,
- "error": null,
- "requested_at": "2026-08-30T15:59:58Z"
}Idempotent by canonical desired representation. A new target or retry of a failed target returns 202. A request equal to an already pending/applied target returns 200 without a generation bump. Only admin and editor may call this operation.
| id required | string <uuid> |
| X-Tenant-ID required | string <uuid> Tenant UUID |
| mode required | string Enum: "full" "partial" |
Array of objects (IsolationException) Must be absent or empty for full mode and contain at least one item for partial mode. Exact duplicates are normalized. Each item permits the initiated flow and only its conntrack-confirmed response. |
{- "mode": "full",
- "exceptions": [
- {
- "direction": "ingress",
- "protocol": "tcp",
- "port_start": 1,
- "port_end": 1
}
]
}{- "supported": true,
- "revision": 0,
- "desired": {
- "mode": "none",
- "exceptions": [
- {
- "direction": "ingress",
- "protocol": "tcp",
- "port_start": 1,
- "port_end": 1
}
]
}, - "applied": {
- "mode": "none",
- "exceptions": [
- {
- "direction": "ingress",
- "protocol": "tcp",
- "port_start": 1,
- "port_end": 1
}
], - "revision": 0,
- "generation": 0,
- "at": "2019-08-24T14:15:22Z"
}, - "status": "pending",
- "target_generation": 0,
- "error": "string",
- "requested_at": "2019-08-24T14:15:22Z"
}Idempotent. A new restore target or retry returns 202. If desired and applied state are already none, returns 200 without a generation bump. Only admin and editor may call this operation.
| id required | string <uuid> |
| X-Tenant-ID required | string <uuid> Tenant UUID |
{- "supported": true,
- "revision": 0,
- "desired": {
- "mode": "none",
- "exceptions": [
- {
- "direction": "ingress",
- "protocol": "tcp",
- "port_start": 1,
- "port_end": 1
}
]
}, - "applied": {
- "mode": "none",
- "exceptions": [
- {
- "direction": "ingress",
- "protocol": "tcp",
- "port_start": 1,
- "port_end": 1
}
], - "revision": 0,
- "generation": 0,
- "at": "2019-08-24T14:15:22Z"
}, - "status": "pending",
- "target_generation": 0,
- "error": "string",
- "requested_at": "2019-08-24T14:15:22Z"
}| id required | string <uuid> |
| X-Tenant-ID required | string <uuid> Tenant UUID |
[- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "tenant_id": "34f5c98e-f430-457b-a812-92637d0c6fd0",
- "name": "string",
- "labels": {
- "property1": "string",
- "property2": "string"
}, - "priority": 0,
- "member_count": 0,
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z",
- "archived_at": "2019-08-24T14:15:22Z"
}
]| id required | string <uuid> |
| X-Tenant-ID required | string <uuid> Tenant UUID |
{- "host_id": "eb4e20fc-2b4a-4d0c-811f-48abcf12b89b",
- "default_ingress": "allow",
- "default_egress": "allow",
- "rules": [
- {
- "rule_id": "728c1541-d6d1-4290-9a53-cdf01dd32d60",
- "rule_name": "string",
- "policy_id": "ee9b03e0-6495-427a-85a5-34444d24ae04",
- "policy_name": "string",
- "priority": 0,
- "direction": "ingress",
- "action": "allow",
- "protocol": "string",
- "src_cidrs": [
- "string"
], - "dst_cidrs": [
- "string"
], - "src_ports": [
- "string"
], - "dst_ports": [
- "string"
], - "unresolved": [
- {
- "slot": "match",
- "error": "string"
}
]
}
]
}Bumps desired_generation and re-pushes the host's current bundle, overwriting any manual datapath drift. Requires admin or editor.
| id required | string <uuid> |
| X-Tenant-ID required | string <uuid> Tenant UUID |
{- "error": "string",
- "request_id": "string"
}| id required | string <uuid> |
| X-Tenant-ID required | string <uuid> Tenant UUID |
{- "error": "string",
- "request_id": "string"
}| id required | string <uuid> |
| X-Tenant-ID required | string <uuid> Tenant UUID |
[- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "version": 0,
- "content": { },
- "status": "applied",
- "content_version": 0,
- "is_deletion": true,
- "created_by": "string",
- "created_at": "2019-08-24T14:15:22Z"
}
]| id required | string <uuid> |
| v required | integer >= 1 |
| X-Tenant-ID required | string <uuid> Tenant UUID |
{- "error": "string",
- "request_id": "string"
}| id required | string <uuid> |
| X-Tenant-ID required | string <uuid> Tenant UUID |
[- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "content": { },
- "content_version": 0,
- "is_deletion": true,
- "created_by": "string",
- "created_at": "2019-08-24T14:15:22Z"
}
]| id required | string <uuid> |
| X-Tenant-ID required | string <uuid> Tenant UUID |
{ }{- "error": "string",
- "request_id": "string"
}| id required | string <uuid> |
| draftID required | string <uuid> |
| X-Tenant-ID required | string <uuid> Tenant UUID |
{- "error": "string",
- "request_id": "string"
}| id required | string <uuid> |
| draftID required | string <uuid> |
| X-Tenant-ID required | string <uuid> Tenant UUID |
{- "blast": {
- "affected_count": 0,
- "host_ids": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "hosts": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "hostname": "string",
- "added": [
- "string"
], - "removed": [
- "string"
], - "changed": [
- "string"
], - "changed_detail": [
- {
- "rule_id": "728c1541-d6d1-4290-9a53-cdf01dd32d60",
- "name": "string",
- "fields": [
- {
- "field": "string",
- "before": "string",
- "after": "string"
}
]
}
], - "added_detail": [
- {
- "rule_id": "string",
- "name": "string",
- "fields": [
- {
- "field": "string",
- "value": "string"
}
]
}
], - "removed_detail": [
- {
- "rule_id": "string",
- "name": "string",
- "fields": [
- {
- "field": "string",
- "value": "string"
}
]
}
], - "removed_ids": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
]
}
]
}, - "traffic": [
- {
- "rule_id": "728c1541-d6d1-4290-9a53-cdf01dd32d60",
- "decisions": 0
}
], - "window": {
- "from": "2019-08-24T14:15:22Z",
- "to": "2019-08-24T14:15:22Z"
}
}| id required | string <uuid> |
| draftID required | string <uuid> |
| X-Tenant-ID required | string <uuid> Tenant UUID |
{- "error": "string",
- "request_id": "string"
}| changed_since | string <date-time> Reconnect-backfill delta cursor (UI live-sync). When present, the endpoint returns ONLY rows changed at or after |
| X-Tenant-ID required | string <uuid> Tenant UUID |
[- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "tenant_id": "34f5c98e-f430-457b-a812-92637d0c6fd0",
- "name": "string",
- "labels": {
- "property1": "string",
- "property2": "string"
}, - "priority": 0,
- "member_count": 0,
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z",
- "archived_at": "2019-08-24T14:15:22Z"
}
]| X-Tenant-ID required | string <uuid> Tenant UUID |
| name required | string |
object | |
| priority | integer Default: 100 |
{- "name": "string",
- "labels": {
- "property1": "string",
- "property2": "string"
}, - "priority": 100
}{- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "tenant_id": "34f5c98e-f430-457b-a812-92637d0c6fd0",
- "name": "string",
- "labels": {
- "property1": "string",
- "property2": "string"
}, - "priority": 0,
- "member_count": 0,
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z",
- "archived_at": "2019-08-24T14:15:22Z"
}| X-Tenant-ID required | string <uuid> Tenant UUID |
[- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "tenant_id": "34f5c98e-f430-457b-a812-92637d0c6fd0",
- "name": "string",
- "labels": {
- "property1": "string",
- "property2": "string"
}, - "priority": 0,
- "member_count": 0,
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z",
- "archived_at": "2019-08-24T14:15:22Z"
}
]| id required | string <uuid> |
| X-Tenant-ID required | string <uuid> Tenant UUID |
{- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "tenant_id": "34f5c98e-f430-457b-a812-92637d0c6fd0",
- "name": "string",
- "labels": {
- "property1": "string",
- "property2": "string"
}, - "priority": 0,
- "member_count": 0,
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z",
- "archived_at": "2019-08-24T14:15:22Z"
}| id required | string <uuid> |
| X-Tenant-ID required | string <uuid> Tenant UUID |
| name | string |
object | |
| priority | integer |
{- "name": "string",
- "labels": {
- "property1": "string",
- "property2": "string"
}, - "priority": 0
}{- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "tenant_id": "34f5c98e-f430-457b-a812-92637d0c6fd0",
- "name": "string",
- "labels": {
- "property1": "string",
- "property2": "string"
}, - "priority": 0,
- "member_count": 0,
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z",
- "archived_at": "2019-08-24T14:15:22Z"
}| id required | string <uuid> |
| X-Tenant-ID required | string <uuid> Tenant UUID |
[- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "tenant_id": "34f5c98e-f430-457b-a812-92637d0c6fd0",
- "hostname": "string",
- "labels": {
- "property1": "string",
- "property2": "string"
}, - "effective_labels": {
- "property1": "string",
- "property2": "string"
}, - "status": "enrolling",
- "current_generation": 0,
- "desired_generation": 0,
- "last_confirmed_generation": 0,
- "last_confirmed_at": "2019-08-24T14:15:22Z",
- "config_version": 0,
- "flow_events_enabled": true,
- "last_heartbeat_at": "2019-08-24T14:15:22Z",
- "agent_version": "string",
- "kernel_version": "string",
- "last_seen_ip": "string",
- "interfaces": [
- { }
], - "capabilities": { },
- "isolation": {
- "supported": true,
- "revision": 0,
- "desired": {
- "mode": "none",
- "exceptions": [
- {
- "direction": "ingress",
- "protocol": "tcp",
- "port_start": 1,
- "port_end": 1
}
]
}, - "applied": {
- "mode": "none",
- "exceptions": [
- {
- "direction": "ingress",
- "protocol": "tcp",
- "port_start": 1,
- "port_end": 1
}
], - "revision": 0,
- "generation": 0,
- "at": "2019-08-24T14:15:22Z"
}, - "status": "pending",
- "target_generation": 0,
- "error": "string",
- "requested_at": "2019-08-24T14:15:22Z"
}, - "metrics": { },
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z",
- "archived_at": "2019-08-24T14:15:22Z"
}
]| id required | string <uuid> |
| X-Tenant-ID required | string <uuid> Tenant UUID |
| host_id required | string <uuid> |
{- "host_id": "eb4e20fc-2b4a-4d0c-811f-48abcf12b89b"
}{- "error": "string",
- "request_id": "string"
}| id required | string <uuid> |
| X-Tenant-ID required | string <uuid> Tenant UUID |
[- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "version": 0,
- "content": { },
- "status": "applied",
- "content_version": 0,
- "is_deletion": true,
- "created_by": "string",
- "created_at": "2019-08-24T14:15:22Z"
}
]| id required | string <uuid> |
| v required | integer >= 1 |
| X-Tenant-ID required | string <uuid> Tenant UUID |
{- "error": "string",
- "request_id": "string"
}| id required | string <uuid> |
| X-Tenant-ID required | string <uuid> Tenant UUID |
[- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "content": { },
- "content_version": 0,
- "is_deletion": true,
- "created_by": "string",
- "created_at": "2019-08-24T14:15:22Z"
}
]| id required | string <uuid> |
| X-Tenant-ID required | string <uuid> Tenant UUID |
{ }{- "error": "string",
- "request_id": "string"
}| id required | string <uuid> |
| draftID required | string <uuid> |
| X-Tenant-ID required | string <uuid> Tenant UUID |
{- "error": "string",
- "request_id": "string"
}| id required | string <uuid> |
| draftID required | string <uuid> |
| X-Tenant-ID required | string <uuid> Tenant UUID |
{- "blast": {
- "affected_count": 0,
- "host_ids": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "hosts": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "hostname": "string",
- "added": [
- "string"
], - "removed": [
- "string"
], - "changed": [
- "string"
], - "changed_detail": [
- {
- "rule_id": "728c1541-d6d1-4290-9a53-cdf01dd32d60",
- "name": "string",
- "fields": [
- {
- "field": "string",
- "before": "string",
- "after": "string"
}
]
}
], - "added_detail": [
- {
- "rule_id": "string",
- "name": "string",
- "fields": [
- {
- "field": "string",
- "value": "string"
}
]
}
], - "removed_detail": [
- {
- "rule_id": "string",
- "name": "string",
- "fields": [
- {
- "field": "string",
- "value": "string"
}
]
}
], - "removed_ids": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
]
}
]
}, - "traffic": [
- {
- "rule_id": "728c1541-d6d1-4290-9a53-cdf01dd32d60",
- "decisions": 0
}
], - "window": {
- "from": "2019-08-24T14:15:22Z",
- "to": "2019-08-24T14:15:22Z"
}
}| id required | string <uuid> |
| draftID required | string <uuid> |
| X-Tenant-ID required | string <uuid> Tenant UUID |
{- "error": "string",
- "request_id": "string"
}| id required | string <uuid> |
| limit | integer <= 10000 Default: 500 |
| X-Tenant-ID required | string <uuid> Tenant UUID |
[- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "host_id": "eb4e20fc-2b4a-4d0c-811f-48abcf12b89b",
- "event_type": "datapath_drift",
- "severity": "info",
- "detail": "string",
- "ts": "2019-08-24T14:15:22Z"
}
]| id required | string <uuid> |
| start | string <date-time> |
| end | string <date-time> |
| limit | integer <= 10000 Default: 500 |
| rule_id | string <uuid> |
| action | string Enum: "allow" "deny" "log" |
| X-Tenant-ID required | string <uuid> Tenant UUID |
[- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "host_id": "eb4e20fc-2b4a-4d0c-811f-48abcf12b89b",
- "rule_id": "728c1541-d6d1-4290-9a53-cdf01dd32d60",
- "policy_id": "ee9b03e0-6495-427a-85a5-34444d24ae04",
- "rule_name": "string",
- "policy_name": "string",
- "direction": "ingress",
- "action": "allow",
- "protocol": 0,
- "src_ip": "string",
- "src_port": 0,
- "dst_ip": "string",
- "dst_port": 0,
- "packet_size": 0,
- "tcp_flags": 0,
- "ct_state": "string",
- "interface": "string",
- "created_at": "2019-08-24T14:15:22Z"
}
]| id required | string <uuid> |
| start | string <date-time> |
| end | string <date-time> |
| limit | integer <= 10000 Default: 500 |
| X-Tenant-ID required | string <uuid> Tenant UUID |
[- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "host_id": "eb4e20fc-2b4a-4d0c-811f-48abcf12b89b",
- "protocol": 0,
- "src_ip": "string",
- "src_port": 0,
- "dst_ip": "string",
- "dst_port": 0,
- "bytes_orig": 0,
- "bytes_reply": 0,
- "packets_orig": 0,
- "packets_reply": 0,
- "final_state": "string",
- "started_at": "2019-08-24T14:15:22Z",
- "ended_at": "2019-08-24T14:15:22Z",
- "interface": "string",
- "created_at": "2019-08-24T14:15:22Z"
}
]| id required | string <uuid> |
| group_by | string Default: "by-dst" Enum: "by-dst" "by-proto" "by-src-dst" |
| from | string <date-time> |
| to | string <date-time> |
| limit | integer <= 10000 Default: 500 |
| X-Tenant-ID required | string <uuid> Tenant UUID |
{- "group_by": "by-dst",
- "window": {
- "from": "2019-08-24T14:15:22Z",
- "to": "2019-08-24T14:15:22Z"
}, - "rows": [
- {
- "protocol": 0,
- "src_ip": "string",
- "dst_ip": "string",
- "dst_port": 0,
- "total_bytes": 0,
- "total_packets": 0,
- "flow_count": 0
}
]
}| id required | string <uuid> |
| start | string <date-time> |
| end | string <date-time> |
| limit | integer <= 10000 Default: 500 |
| rule_id | string <uuid> |
| X-Tenant-ID required | string <uuid> Tenant UUID |
[- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "host_id": "eb4e20fc-2b4a-4d0c-811f-48abcf12b89b",
- "rule_id": "728c1541-d6d1-4290-9a53-cdf01dd32d60",
- "policy_id": "ee9b03e0-6495-427a-85a5-34444d24ae04",
- "packets": 0,
- "bytes": 0,
- "interface": "string",
- "ts": "2019-08-24T14:15:22Z"
}
]| id required | string <uuid> |
| X-Tenant-ID required | string <uuid> Tenant UUID |
[- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "host_id": "eb4e20fc-2b4a-4d0c-811f-48abcf12b89b",
- "rule_id": "728c1541-d6d1-4290-9a53-cdf01dd32d60",
- "policy_id": "ee9b03e0-6495-427a-85a5-34444d24ae04",
- "packets": 0,
- "bytes": 0,
- "interface": "string",
- "ts": "2019-08-24T14:15:22Z"
}
]Tenant-scoped rollup over the partitioned log_events table. group_by selects one closed preset (by-rule / by-host / timeline) — the string only SELECTS a static named query and is NEVER interpolated into SQL; an unknown non-empty value → 400. by-rule and timeline are host-scoped (host_id required); by-host aggregates top denying hosts across the whole tenant. The [from,to) window defaults to 24h and is capped 7d server-side so the scan stays partition-pruned. Read tier.
| group_by | string Enum: "by-rule" "by-host" "timeline" Aggregate preset; omitted = by-rule. Unknown value → 400. |
| host_id | string <uuid> Required for by-rule/timeline; ignored for by-host. |
| from | string <date-time> Inclusive lower bound on created_at (RFC3339); default now-24h. |
| to | string <date-time> Exclusive upper bound on created_at (RFC3339); default now. |
| limit | integer Max rows for by-rule/by-host (default 500, capped 10000). Ignored by timeline. |
| X-Tenant-ID required | string <uuid> Tenant UUID |
{- "group_by": "string",
- "window": {
- "from": "2019-08-24T14:15:22Z",
- "to": "2019-08-24T14:15:22Z"
}, - "rows": [
- {
- "rule_id": "728c1541-d6d1-4290-9a53-cdf01dd32d60",
- "rule_name": "string",
- "host_id": "eb4e20fc-2b4a-4d0c-811f-48abcf12b89b",
- "hostname": "string",
- "bucket": "2019-08-24T14:15:22Z",
- "total": 0,
- "deny_count": 0
}
]
}| changed_since | string <date-time> Reconnect-backfill delta cursor (UI live-sync). When present, the endpoint returns ONLY rows changed at or after |
| X-Tenant-ID required | string <uuid> Tenant UUID |
[- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "tenant_id": "34f5c98e-f430-457b-a812-92637d0c6fd0",
- "name": "string",
- "description": "string",
- "priority": 0,
- "selector": { },
- "interface_names": [
- "string"
], - "confirm_match_all": true,
- "current_version": 0,
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z",
- "archived_at": "2019-08-24T14:15:22Z"
}
]| X-Tenant-ID required | string <uuid> Tenant UUID |
| name required | string |
| description | string |
| priority | integer Default: 0 |
| selector | object |
{- "name": "string",
- "description": "string",
- "priority": 0,
- "selector": { }
}{- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "tenant_id": "34f5c98e-f430-457b-a812-92637d0c6fd0",
- "name": "string",
- "description": "string",
- "priority": 0,
- "selector": { },
- "interface_names": [
- "string"
], - "confirm_match_all": true,
- "current_version": 0,
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z",
- "archived_at": "2019-08-24T14:15:22Z"
}| X-Tenant-ID required | string <uuid> Tenant UUID |
[- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "tenant_id": "34f5c98e-f430-457b-a812-92637d0c6fd0",
- "name": "string",
- "description": "string",
- "priority": 0,
- "selector": { },
- "interface_names": [
- "string"
], - "confirm_match_all": true,
- "current_version": 0,
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z",
- "archived_at": "2019-08-24T14:15:22Z"
}
]Returns a bucket-aggregated view of which hosts each policy currently reaches, so the node count is bounded by policy×bucket instead of policy×host. Every edge carries a matched_hosts coverage count and every bucket a total_hosts denominator, both computed over the same active-host set (revoked and enrolling hosts are excluded), so matched_hosts is always less than or equal to total_hosts. The group_by parameter selects the bucket dimension.
| group_by | string Default: "hostgroup" Example: group_by=label:env Bucket dimension. |
| X-Tenant-ID required | string <uuid> Tenant UUID |
{- "policies": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "name": "string",
- "priority": 0
}
], - "buckets": [
- {
- "id": "string",
- "name": "string",
- "kind": "group",
- "total_hosts": 0
}
], - "edges": [
- {
- "policy_id": "ee9b03e0-6495-427a-85a5-34444d24ae04",
- "bucket_id": "string",
- "matched_hosts": 0
}
], - "meta": {
- "label_keys": [
- "string"
], - "group_by": "string",
- "node_count": 0
}
}Returns one row per policy with its active-host reach split by HOW a host is targeted, plus its rule count — the data behind the policies-list columns and the derived active/inert status. direct_hosts counts hosts matched by a direct block (a pinned host or a bare label/expression block); group_hosts counts hosts matched by a host-group block; total_hosts is the distinct hosts matched either way. A host can match both ways, so direct_hosts + group_hosts can exceed total_hosts — total_hosts is the true blast radius. Counts are over the active-host set (revoked and enrolling hosts excluded). rules_count is the policy's live rule count; a policy is considered inert when it reaches no host or carries no rule.
| X-Tenant-ID required | string <uuid> Tenant UUID |
[- {
- "policy_id": "ee9b03e0-6495-427a-85a5-34444d24ae04",
- "direct_hosts": 0,
- "group_hosts": 0,
- "total_hosts": 0,
- "rules_count": 0
}
]| id required | string <uuid> |
| X-Tenant-ID required | string <uuid> Tenant UUID |
{- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "tenant_id": "34f5c98e-f430-457b-a812-92637d0c6fd0",
- "name": "string",
- "description": "string",
- "priority": 0,
- "selector": { },
- "interface_names": [
- "string"
], - "confirm_match_all": true,
- "current_version": 0,
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z",
- "archived_at": "2019-08-24T14:15:22Z"
}| id required | string <uuid> |
| X-Tenant-ID required | string <uuid> Tenant UUID |
| name required | string |
| description | string |
| priority | integer |
| selector | object |
Array of objects | |
| confirm_match_all | boolean |
{- "name": "string",
- "description": "string",
- "priority": 0,
- "selector": { },
- "rules": [
- {
- "name": "string",
- "priority": 0,
- "direction": "ingress",
- "match": {
- "protocol": "tcp",
- "src_cidrs": [
- "string"
], - "dst_cidrs": [
- "string"
], - "src_ports": [
- "string"
], - "dst_ports": [
- "string"
], - "src_ip_set_ids": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "dst_ip_set_ids": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "src_port_set_ids": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "dst_port_set_ids": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "src_host_set_ids": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "dst_host_set_ids": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "src_ip_set_id": "2cec430c-4e57-445b-9ee4-4456027e9f74",
- "dst_ip_set_id": "b3baa8af-31da-491b-baf6-08f020b9f3d5",
- "src_port_set_id": "825f48db-cfc7-43ac-a854-f19de90e9851",
- "dst_port_set_id": "76c876f9-8a1a-423d-81bb-e91ddc4078f7",
- "src_host_set_id": "700402f6-9e4e-4340-a780-6ceaa5f67b4a",
- "dst_host_set_id": "46f5a812-c3b1-47fb-bece-e907b48f2096",
- "tcp_flags_mask": 0,
- "tcp_flags_match": 0
}, - "state": "string",
- "states": [
- "new"
], - "action": "allow",
- "log": false,
- "silent": true,
- "notrack": false,
- "log_rate_limit_per_sec": 0,
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08"
}
], - "confirm_match_all": true
}{- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "tenant_id": "34f5c98e-f430-457b-a812-92637d0c6fd0",
- "name": "string",
- "description": "string",
- "priority": 0,
- "selector": { },
- "interface_names": [
- "string"
], - "confirm_match_all": true,
- "current_version": 0,
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z",
- "archived_at": "2019-08-24T14:15:22Z"
}| id required | string <uuid> |
| X-Tenant-ID required | string <uuid> Tenant UUID |
[- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "policy_id": "ee9b03e0-6495-427a-85a5-34444d24ae04",
- "name": "string",
- "priority": 0,
- "direction": "ingress",
- "match": {
- "protocol": "tcp",
- "src_cidrs": [
- "string"
], - "dst_cidrs": [
- "string"
], - "src_ports": [
- "string"
], - "dst_ports": [
- "string"
], - "src_ip_set_ids": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "dst_ip_set_ids": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "src_port_set_ids": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "dst_port_set_ids": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "src_host_set_ids": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "dst_host_set_ids": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "src_ip_set_id": "2cec430c-4e57-445b-9ee4-4456027e9f74",
- "dst_ip_set_id": "b3baa8af-31da-491b-baf6-08f020b9f3d5",
- "src_port_set_id": "825f48db-cfc7-43ac-a854-f19de90e9851",
- "dst_port_set_id": "76c876f9-8a1a-423d-81bb-e91ddc4078f7",
- "src_host_set_id": "700402f6-9e4e-4340-a780-6ceaa5f67b4a",
- "dst_host_set_id": "46f5a812-c3b1-47fb-bece-e907b48f2096",
- "tcp_flags_mask": 0,
- "tcp_flags_match": 0
}, - "state": "string",
- "states": [
- "new"
], - "action": "allow",
- "log": true,
- "silent": true,
- "notrack": true,
- "log_rate_limit_per_sec": 0,
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}
]| id required | string <uuid> |
| X-Tenant-ID required | string <uuid> Tenant UUID |
| name required | string |
| priority | integer Default: 0 |
| direction | string Default: "ingress" Enum: "ingress" "egress" |
object (RuleMatch) BPF match criteria. Unknown keys and unsupported protocol values are
rejected with HTTP 400. Object-group references use arrays so every
reference is stored in policy versions and restored atomically. Legacy
singular | |
| state | string or null Deprecated |
| states | Array of strings Items Enum: "new" "established" "related" "invalid" Set of conntrack states this rule matches (any of). Empty = stateless. |
| action | string Default: "deny" Enum: "allow" "deny" "log" |
| log | boolean Default: false |
| silent | boolean |
| notrack | boolean Default: false Skip conntrack insert for flows this rule ALLOWs (saves LRU slots on high-volume stateless traffic). Does not change the verdict. |
| log_rate_limit_per_sec | integer <int32> Default: 0 Per-rule log token bucket, events/sec. 0 means "use the fleet default" (AgentConfig.default_log_rate_limit_per_sec, 100/s) — NOT "no logging". The datapath field is 16-bit, so values above 65535 truncate. |
{- "name": "string",
- "priority": 0,
- "direction": "ingress",
- "match": {
- "protocol": "tcp",
- "src_cidrs": [
- "string"
], - "dst_cidrs": [
- "string"
], - "src_ports": [
- "string"
], - "dst_ports": [
- "string"
], - "src_ip_set_ids": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "dst_ip_set_ids": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "src_port_set_ids": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "dst_port_set_ids": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "src_host_set_ids": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "dst_host_set_ids": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "src_ip_set_id": "2cec430c-4e57-445b-9ee4-4456027e9f74",
- "dst_ip_set_id": "b3baa8af-31da-491b-baf6-08f020b9f3d5",
- "src_port_set_id": "825f48db-cfc7-43ac-a854-f19de90e9851",
- "dst_port_set_id": "76c876f9-8a1a-423d-81bb-e91ddc4078f7",
- "src_host_set_id": "700402f6-9e4e-4340-a780-6ceaa5f67b4a",
- "dst_host_set_id": "46f5a812-c3b1-47fb-bece-e907b48f2096",
- "tcp_flags_mask": 0,
- "tcp_flags_match": 0
}, - "state": "string",
- "states": [
- "new"
], - "action": "allow",
- "log": false,
- "silent": true,
- "notrack": false,
- "log_rate_limit_per_sec": 0
}{- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "policy_id": "ee9b03e0-6495-427a-85a5-34444d24ae04",
- "name": "string",
- "priority": 0,
- "direction": "ingress",
- "match": {
- "protocol": "tcp",
- "src_cidrs": [
- "string"
], - "dst_cidrs": [
- "string"
], - "src_ports": [
- "string"
], - "dst_ports": [
- "string"
], - "src_ip_set_ids": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "dst_ip_set_ids": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "src_port_set_ids": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "dst_port_set_ids": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "src_host_set_ids": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "dst_host_set_ids": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "src_ip_set_id": "2cec430c-4e57-445b-9ee4-4456027e9f74",
- "dst_ip_set_id": "b3baa8af-31da-491b-baf6-08f020b9f3d5",
- "src_port_set_id": "825f48db-cfc7-43ac-a854-f19de90e9851",
- "dst_port_set_id": "76c876f9-8a1a-423d-81bb-e91ddc4078f7",
- "src_host_set_id": "700402f6-9e4e-4340-a780-6ceaa5f67b4a",
- "dst_host_set_id": "46f5a812-c3b1-47fb-bece-e907b48f2096",
- "tcp_flags_mask": 0,
- "tcp_flags_match": 0
}, - "state": "string",
- "states": [
- "new"
], - "action": "allow",
- "log": true,
- "silent": true,
- "notrack": true,
- "log_rate_limit_per_sec": 0,
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}| id required | string <uuid> |
| ruleID required | string <uuid> |
| X-Tenant-ID required | string <uuid> Tenant UUID |
{- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "policy_id": "ee9b03e0-6495-427a-85a5-34444d24ae04",
- "name": "string",
- "priority": 0,
- "direction": "ingress",
- "match": {
- "protocol": "tcp",
- "src_cidrs": [
- "string"
], - "dst_cidrs": [
- "string"
], - "src_ports": [
- "string"
], - "dst_ports": [
- "string"
], - "src_ip_set_ids": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "dst_ip_set_ids": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "src_port_set_ids": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "dst_port_set_ids": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "src_host_set_ids": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "dst_host_set_ids": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "src_ip_set_id": "2cec430c-4e57-445b-9ee4-4456027e9f74",
- "dst_ip_set_id": "b3baa8af-31da-491b-baf6-08f020b9f3d5",
- "src_port_set_id": "825f48db-cfc7-43ac-a854-f19de90e9851",
- "dst_port_set_id": "76c876f9-8a1a-423d-81bb-e91ddc4078f7",
- "src_host_set_id": "700402f6-9e4e-4340-a780-6ceaa5f67b4a",
- "dst_host_set_id": "46f5a812-c3b1-47fb-bece-e907b48f2096",
- "tcp_flags_mask": 0,
- "tcp_flags_match": 0
}, - "state": "string",
- "states": [
- "new"
], - "action": "allow",
- "log": true,
- "silent": true,
- "notrack": true,
- "log_rate_limit_per_sec": 0,
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}| id required | string <uuid> |
| ruleID required | string <uuid> |
| X-Tenant-ID required | string <uuid> Tenant UUID |
| name required | string |
| priority | integer Default: 0 |
| direction | string Default: "ingress" Enum: "ingress" "egress" |
object (RuleMatch) BPF match criteria. Unknown keys and unsupported protocol values are
rejected with HTTP 400. Object-group references use arrays so every
reference is stored in policy versions and restored atomically. Legacy
singular | |
| state | string or null Deprecated |
| states | Array of strings Items Enum: "new" "established" "related" "invalid" Set of conntrack states this rule matches (any of). Empty = stateless. |
| action | string Default: "deny" Enum: "allow" "deny" "log" |
| log | boolean Default: false |
| silent | boolean |
| notrack | boolean Default: false Skip conntrack insert for flows this rule ALLOWs (saves LRU slots on high-volume stateless traffic). Does not change the verdict. |
| log_rate_limit_per_sec | integer <int32> Default: 0 Per-rule log token bucket, events/sec. 0 means "use the fleet default" (AgentConfig.default_log_rate_limit_per_sec, 100/s) — NOT "no logging". The datapath field is 16-bit, so values above 65535 truncate. |
{- "name": "string",
- "priority": 0,
- "direction": "ingress",
- "match": {
- "protocol": "tcp",
- "src_cidrs": [
- "string"
], - "dst_cidrs": [
- "string"
], - "src_ports": [
- "string"
], - "dst_ports": [
- "string"
], - "src_ip_set_ids": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "dst_ip_set_ids": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "src_port_set_ids": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "dst_port_set_ids": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "src_host_set_ids": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "dst_host_set_ids": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "src_ip_set_id": "2cec430c-4e57-445b-9ee4-4456027e9f74",
- "dst_ip_set_id": "b3baa8af-31da-491b-baf6-08f020b9f3d5",
- "src_port_set_id": "825f48db-cfc7-43ac-a854-f19de90e9851",
- "dst_port_set_id": "76c876f9-8a1a-423d-81bb-e91ddc4078f7",
- "src_host_set_id": "700402f6-9e4e-4340-a780-6ceaa5f67b4a",
- "dst_host_set_id": "46f5a812-c3b1-47fb-bece-e907b48f2096",
- "tcp_flags_mask": 0,
- "tcp_flags_match": 0
}, - "state": "string",
- "states": [
- "new"
], - "action": "allow",
- "log": false,
- "silent": true,
- "notrack": false,
- "log_rate_limit_per_sec": 0
}{- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "policy_id": "ee9b03e0-6495-427a-85a5-34444d24ae04",
- "name": "string",
- "priority": 0,
- "direction": "ingress",
- "match": {
- "protocol": "tcp",
- "src_cidrs": [
- "string"
], - "dst_cidrs": [
- "string"
], - "src_ports": [
- "string"
], - "dst_ports": [
- "string"
], - "src_ip_set_ids": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "dst_ip_set_ids": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "src_port_set_ids": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "dst_port_set_ids": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "src_host_set_ids": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "dst_host_set_ids": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "src_ip_set_id": "2cec430c-4e57-445b-9ee4-4456027e9f74",
- "dst_ip_set_id": "b3baa8af-31da-491b-baf6-08f020b9f3d5",
- "src_port_set_id": "825f48db-cfc7-43ac-a854-f19de90e9851",
- "dst_port_set_id": "76c876f9-8a1a-423d-81bb-e91ddc4078f7",
- "src_host_set_id": "700402f6-9e4e-4340-a780-6ceaa5f67b4a",
- "dst_host_set_id": "46f5a812-c3b1-47fb-bece-e907b48f2096",
- "tcp_flags_mask": 0,
- "tcp_flags_match": 0
}, - "state": "string",
- "states": [
- "new"
], - "action": "allow",
- "log": true,
- "silent": true,
- "notrack": true,
- "log_rate_limit_per_sec": 0,
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}| id required | string <uuid> |
| X-Tenant-ID required | string <uuid> Tenant UUID |
required | Array of objects (DryRunRuleSpec) | ||||||||||||||||||||||||
Array
| |||||||||||||||||||||||||
{- "rules": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "name": "string",
- "priority": 0,
- "direction": "ingress",
- "match": {
- "protocol": "tcp",
- "src_cidrs": [
- "string"
], - "dst_cidrs": [
- "string"
], - "src_ports": [
- "string"
], - "dst_ports": [
- "string"
], - "src_ip_set_ids": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "dst_ip_set_ids": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "src_port_set_ids": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "dst_port_set_ids": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "src_host_set_ids": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "dst_host_set_ids": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "src_ip_set_id": "2cec430c-4e57-445b-9ee4-4456027e9f74",
- "dst_ip_set_id": "b3baa8af-31da-491b-baf6-08f020b9f3d5",
- "src_port_set_id": "825f48db-cfc7-43ac-a854-f19de90e9851",
- "dst_port_set_id": "76c876f9-8a1a-423d-81bb-e91ddc4078f7",
- "src_host_set_id": "700402f6-9e4e-4340-a780-6ceaa5f67b4a",
- "dst_host_set_id": "46f5a812-c3b1-47fb-bece-e907b48f2096",
- "tcp_flags_mask": 0,
- "tcp_flags_match": 0
}, - "state": "string",
- "states": [
- "new"
], - "action": "allow",
- "log": true,
- "silent": true,
- "notrack": true,
- "log_rate_limit_per_sec": 0
}
]
}{- "affected_count": 0,
- "hosts": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "hostname": "string",
- "added": [
- "string"
], - "removed": [
- "string"
], - "changed": [
- "string"
], - "changed_detail": [
- {
- "rule_id": "728c1541-d6d1-4290-9a53-cdf01dd32d60",
- "name": "string",
- "fields": [
- {
- "field": "string",
- "before": "string",
- "after": "string"
}
]
}
], - "added_detail": [
- {
- "rule_id": "string",
- "name": "string",
- "fields": [
- {
- "field": "string",
- "value": "string"
}
]
}
], - "removed_detail": [
- {
- "rule_id": "string",
- "name": "string",
- "fields": [
- {
- "field": "string",
- "value": "string"
}
]
}
], - "removed_ids": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
]
}
]
}| id required | string <uuid> |
| X-Tenant-ID required | string <uuid> Tenant UUID |
[- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "version": 0,
- "content": { },
- "status": "applied",
- "content_version": 0,
- "is_deletion": true,
- "created_by": "string",
- "created_at": "2019-08-24T14:15:22Z"
}
]| id required | string <uuid> |
| X-Tenant-ID required | string <uuid> Tenant UUID |
[- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "content": { },
- "content_version": 0,
- "is_deletion": true,
- "created_by": "string",
- "created_at": "2019-08-24T14:15:22Z"
}
]| id required | string <uuid> |
| X-Tenant-ID required | string <uuid> Tenant UUID |
{ }{- "error": "string",
- "request_id": "string"
}| id required | string <uuid> |
| draftId required | string <uuid> |
| X-Tenant-ID required | string <uuid> Tenant UUID |
{- "error": "string",
- "request_id": "string"
}Computes the affected-host impact of a staged draft WITHOUT writing, enriched with the observed traffic (decisions) for the affected before-side rules over a bounded window. Read tier (writes nothing) — POST because it echoes the projected draft content. The identical route is mounted on object_groups and host_groups (shared version registrar). Optional from/to bound the traffic window (default 24h, capped 7d server-side, partition-pruned).
| id required | string <uuid> |
| draftId required | string <uuid> |
| from | string <date-time> Traffic window start (RFC3339); defaulted/capped server-side. |
| to | string <date-time> Traffic window end (RFC3339); defaults to now. |
| X-Tenant-ID required | string <uuid> Tenant UUID |
{- "blast": {
- "affected_count": 0,
- "host_ids": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "hosts": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "hostname": "string",
- "added": [
- "string"
], - "removed": [
- "string"
], - "changed": [
- "string"
], - "changed_detail": [
- {
- "rule_id": "728c1541-d6d1-4290-9a53-cdf01dd32d60",
- "name": "string",
- "fields": [
- {
- "field": "string",
- "before": "string",
- "after": "string"
}
]
}
], - "added_detail": [
- {
- "rule_id": "string",
- "name": "string",
- "fields": [
- {
- "field": "string",
- "value": "string"
}
]
}
], - "removed_detail": [
- {
- "rule_id": "string",
- "name": "string",
- "fields": [
- {
- "field": "string",
- "value": "string"
}
]
}
], - "removed_ids": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
]
}
]
}, - "traffic": [
- {
- "rule_id": "728c1541-d6d1-4290-9a53-cdf01dd32d60",
- "decisions": 0
}
], - "window": {
- "from": "2019-08-24T14:15:22Z",
- "to": "2019-08-24T14:15:22Z"
}
}| id required | string <uuid> |
| draftId required | string <uuid> |
| confirm_match_all | boolean Default: false |
| X-Tenant-ID required | string <uuid> Tenant UUID |
{- "error": "string",
- "request_id": "string"
}| id required | string <uuid> |
| v required | integer |
| confirm_match_all | boolean Default: false |
| X-Tenant-ID required | string <uuid> Tenant UUID |
{- "status": "reverted",
- "version": 0
}Tenant-scoped cross-entity browse of applied config_versions (policy, objectgroup, host_group, host_labels). Filter by optional entity type + created_at range; newest-first, LIMIT-capped. The display name is resolved from the version's content snapshot as-of that version (no JOIN). Read tier.
| type | string Enum: "policy" "objectgroup" "host_group" "host_labels" Filter by entity type; omitted = all types. Unknown value → 400. |
| from | string <date-time> Inclusive lower bound on created_at (RFC3339). |
| to | string <date-time> Exclusive upper bound on created_at (RFC3339). |
| limit | integer Max rows (default 200, capped 1000). |
| X-Tenant-ID required | string <uuid> Tenant UUID |
[- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "entity_type": "string",
- "entity_id": "8161163a-f227-466f-bc01-090a01e80165",
- "name": "string",
- "version": 0,
- "status": "string",
- "content_version": 0,
- "is_deletion": true,
- "content": { },
- "created_by": "string",
- "created_at": "2019-08-24T14:15:22Z"
}
]Read-only combined impact preview for a SET of selected applied versions, in a single round-trip. Runs the per-host match-aware blast once per version and returns ONE observed-traffic aggregate over the UNION of their before-side rule ids over a bounded window (default 24h, capped 7d server-side, partition-pruned) — so a rule observed by two selected versions over the shared window is counted exactly once (no cross-version double-count) and N HTTP round-trips collapse to one. Preview-only — stages/applies/signs nothing. Repeated ids param (NOT comma-joined). A cross-tenant/missing/malformed id is silently OMITTED from the batch (partial results are valid), never a 404. An absent ids param is a 400.
| ids required | Array of strings <uuid> [ items <uuid > ] Applied-version ids to combine — repeated once per version ( |
| from | string <date-time> Traffic window start (RFC3339); defaulted/capped server-side. |
| to | string <date-time> Traffic window end (RFC3339); defaults to now. |
| X-Tenant-ID required | string <uuid> Tenant UUID |
{- "versions": [
- {
- "version_id": "9e94c502-ca41-4342-a7f7-af96b444512c",
- "entity_type": "string",
- "entity_id": "8161163a-f227-466f-bc01-090a01e80165",
- "version": 0,
- "blast": { }
}
], - "traffic": [
- {
- "rule_id": "728c1541-d6d1-4290-9a53-cdf01dd32d60",
- "decisions": 0
}
], - "window": {
- "from": "2019-08-24T14:15:22Z",
- "to": "2019-08-24T14:15:22Z"
}
}Read-only impact preview for a selected applied version. Computes the per-host match-aware before/after ruleset diff (before = current effective ruleset, after = the version's snapshot) and attaches observed log_events traffic (decisions) for the affected BEFORE-side rule ids over a bounded window (default 24h, capped 7d server-side, partition-pruned). Preview-only — it stages/applies/signs nothing. A cross-tenant/missing id returns 404.
| versionID required | string <uuid> |
| from | string <date-time> Traffic window start (RFC3339); defaulted/capped server-side. |
| to | string <date-time> Traffic window end (RFC3339); defaults to now. |
| breakdown_by | string Default: "port" Enum: "port" "peer" "port_peer" B-09 traffic breakdown preset. Whitelisted; default |
| X-Tenant-ID required | string <uuid> Tenant UUID |
{- "version_id": "9e94c502-ca41-4342-a7f7-af96b444512c",
- "entity_type": "string",
- "entity_id": "8161163a-f227-466f-bc01-090a01e80165",
- "version": 0,
- "blast": { },
- "traffic": [
- {
- "rule_id": "728c1541-d6d1-4290-9a53-cdf01dd32d60",
- "decisions": 0
}
], - "breakdown": [
- {
- "rule_id": "728c1541-d6d1-4290-9a53-cdf01dd32d60",
- "protocol": 0,
- "dst_port": 0,
- "peer_ip": "string",
- "decisions": 0,
- "approx_bytes": 0,
- "packets": 0
}
], - "window": {
- "from": "2019-08-24T14:15:22Z",
- "to": "2019-08-24T14:15:22Z"
}
}Read-only TWO-POINT comparison of versions A (past) and B (future) of the SAME entity. Unlike /versions/{id}/impact (which always diffs against the current live ruleset), compare diffs two arbitrary snapshots directly. For a policy it returns the OG-AWARE spec-level field diff (added/removed/changed with per-field before→after on resolved src/dst CIDRs, ports, protocol, tcp_flags, state, action) — object-group references are expanded so a rule differing only in a referenced group's membership classifies changed, not "No changes". For object_group/host_group/host_labels it returns the member set-diff (members_added/members_removed) with an empty diff. Both snapshots are upgraded via ToCurrent before diffing so an older content_version on A is not mis-diffed against a newer B. Side semantics: added = present in B not A; removed = in A not B; compare(A,B) and compare(B,A) are mirror images. Traffic (decisions) is attached for the A-SIDE rule ids over a bounded window and is empty when snapshot A carries no stable rule ids. Preview-only — it stages/applies/signs nothing. A and B MUST belong to the same entity (else 400); a missing/cross-tenant version returns 404.
| a required | string <uuid> Version id of side A (the "past" snapshot). |
| b required | string <uuid> Version id of side B (the "future"/other snapshot). |
| from | string <date-time> Traffic window start (RFC3339); defaulted/capped server-side. |
| to | string <date-time> Traffic window end (RFC3339); defaults to now. |
| X-Tenant-ID required | string <uuid> Tenant UUID |
{- "entity_type": "string",
- "entity_id": "8161163a-f227-466f-bc01-090a01e80165",
- "a": {
- "version_id": "9e94c502-ca41-4342-a7f7-af96b444512c",
- "version": 0,
- "created_at": "2019-08-24T14:15:22Z",
- "name": "string"
}, - "b": {
- "version_id": "9e94c502-ca41-4342-a7f7-af96b444512c",
- "version": 0,
- "created_at": "2019-08-24T14:15:22Z",
- "name": "string"
}, - "diff": { },
- "members_added": [
- "string"
], - "members_removed": [
- "string"
], - "traffic": [
- {
- "rule_id": "728c1541-d6d1-4290-9a53-cdf01dd32d60",
- "decisions": 0
}
], - "window": {
- "from": "2019-08-24T14:15:22Z",
- "to": "2019-08-24T14:15:22Z"
}
}| changed_since | string <date-time> Reconnect-backfill delta cursor (UI live-sync). When present, the endpoint returns ONLY rows changed at or after |
| type | string Enum: "ipset" "portset" "hostset" |
| X-Tenant-ID required | string <uuid> Tenant UUID |
[- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "tenant_id": "34f5c98e-f430-457b-a812-92637d0c6fd0",
- "type": "ipset",
- "name": "string",
- "spec": { },
- "resolved_at": "2019-08-24T14:15:22Z",
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z",
- "archived_at": "2019-08-24T14:15:22Z"
}
]| X-Tenant-ID required | string <uuid> Tenant UUID |
| type required | string Enum: "ipset" "portset" "hostset" |
| name required | string |
| spec | object |
{- "type": "ipset",
- "name": "string",
- "spec": { }
}{- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "tenant_id": "34f5c98e-f430-457b-a812-92637d0c6fd0",
- "type": "ipset",
- "name": "string",
- "spec": { },
- "resolved_at": "2019-08-24T14:15:22Z",
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z",
- "archived_at": "2019-08-24T14:15:22Z"
}| id required | string <uuid> |
| X-Tenant-ID required | string <uuid> Tenant UUID |
{- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "tenant_id": "34f5c98e-f430-457b-a812-92637d0c6fd0",
- "type": "ipset",
- "name": "string",
- "spec": { },
- "resolved_at": "2019-08-24T14:15:22Z",
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z",
- "archived_at": "2019-08-24T14:15:22Z"
}| id required | string <uuid> |
| X-Tenant-ID required | string <uuid> Tenant UUID |
| spec required | object |
{- "spec": { }
}{- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "tenant_id": "34f5c98e-f430-457b-a812-92637d0c6fd0",
- "type": "ipset",
- "name": "string",
- "spec": { },
- "resolved_at": "2019-08-24T14:15:22Z",
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z",
- "archived_at": "2019-08-24T14:15:22Z"
}| X-Tenant-ID required | string <uuid> Tenant UUID |
[- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "tenant_id": "34f5c98e-f430-457b-a812-92637d0c6fd0",
- "type": "ipset",
- "name": "string",
- "spec": { },
- "resolved_at": "2019-08-24T14:15:22Z",
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z",
- "archived_at": "2019-08-24T14:15:22Z"
}
]| id required | string <uuid> |
| X-Tenant-ID required | string <uuid> Tenant UUID |
[- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "version": 0,
- "content": { },
- "status": "applied",
- "content_version": 0,
- "is_deletion": true,
- "created_by": "string",
- "created_at": "2019-08-24T14:15:22Z"
}
]| id required | string <uuid> |
| v required | integer >= 1 |
| X-Tenant-ID required | string <uuid> Tenant UUID |
{- "error": "string",
- "request_id": "string"
}| id required | string <uuid> |
| X-Tenant-ID required | string <uuid> Tenant UUID |
[- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "content": { },
- "content_version": 0,
- "is_deletion": true,
- "created_by": "string",
- "created_at": "2019-08-24T14:15:22Z"
}
]| id required | string <uuid> |
| X-Tenant-ID required | string <uuid> Tenant UUID |
{ }{- "error": "string",
- "request_id": "string"
}| id required | string <uuid> |
| draftID required | string <uuid> |
| X-Tenant-ID required | string <uuid> Tenant UUID |
{- "error": "string",
- "request_id": "string"
}| id required | string <uuid> |
| draftID required | string <uuid> |
| X-Tenant-ID required | string <uuid> Tenant UUID |
{- "blast": {
- "affected_count": 0,
- "host_ids": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "hosts": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "hostname": "string",
- "added": [
- "string"
], - "removed": [
- "string"
], - "changed": [
- "string"
], - "changed_detail": [
- {
- "rule_id": "728c1541-d6d1-4290-9a53-cdf01dd32d60",
- "name": "string",
- "fields": [
- {
- "field": "string",
- "before": "string",
- "after": "string"
}
]
}
], - "added_detail": [
- {
- "rule_id": "string",
- "name": "string",
- "fields": [
- {
- "field": "string",
- "value": "string"
}
]
}
], - "removed_detail": [
- {
- "rule_id": "string",
- "name": "string",
- "fields": [
- {
- "field": "string",
- "value": "string"
}
]
}
], - "removed_ids": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
]
}
]
}, - "traffic": [
- {
- "rule_id": "728c1541-d6d1-4290-9a53-cdf01dd32d60",
- "decisions": 0
}
], - "window": {
- "from": "2019-08-24T14:15:22Z",
- "to": "2019-08-24T14:15:22Z"
}
}| id required | string <uuid> |
| draftID required | string <uuid> |
| X-Tenant-ID required | string <uuid> Tenant UUID |
{- "error": "string",
- "request_id": "string"
}| changed_since | string <date-time> Reconnect-backfill delta cursor (UI live-sync). When present, the endpoint returns ONLY rows changed at or after |
| X-Tenant-ID required | string <uuid> Tenant UUID |
[- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "tenant_id": "34f5c98e-f430-457b-a812-92637d0c6fd0",
- "type": "single_host",
- "target_host_id": "5fa08e70-cef9-414c-b387-7bde7b6f4011",
- "target_group_id": "efc47beb-e46d-465e-921d-3e02578ccf22",
- "label_template": {
- "property1": "string",
- "property2": "string"
}, - "max_uses": 0,
- "uses_count": 0,
- "expires_at": "2019-08-24T14:15:22Z",
- "token": "string"
}
]| X-Tenant-ID required | string <uuid> Tenant UUID |
| type required | string Enum: "single_host" "bulk" |
| target_host_id | string <uuid> Required when type=single_host |
| target_group_id | string <uuid> bulk only — auto-add the enrolling host to this host-group (must be in tenant) |
object | |
| ttl_seconds | integer Default: 3600 |
| max_uses | integer Default: 1 |
{- "type": "single_host",
- "target_host_id": "5fa08e70-cef9-414c-b387-7bde7b6f4011",
- "target_group_id": "efc47beb-e46d-465e-921d-3e02578ccf22",
- "label_template": {
- "property1": "string",
- "property2": "string"
}, - "ttl_seconds": 3600,
- "max_uses": 1
}{- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "tenant_id": "34f5c98e-f430-457b-a812-92637d0c6fd0",
- "type": "single_host",
- "target_host_id": "5fa08e70-cef9-414c-b387-7bde7b6f4011",
- "target_group_id": "efc47beb-e46d-465e-921d-3e02578ccf22",
- "label_template": {
- "property1": "string",
- "property2": "string"
}, - "max_uses": 0,
- "uses_count": 0,
- "expires_at": "2019-08-24T14:15:22Z",
- "token": "string"
}| start | string <date-time> |
| end | string <date-time> |
| limit | integer <= 10000 Default: 500 |
| actor_type | Array of strings Items Enum: "user" "api_token" "system" "agent" Actor kind(s) to include. Repeatable (?actor_type=user&actor_type=agent) — values are unioned server-side (OR). A single value stays valid. |
| actor_id | Array of strings <uuid> [ items <uuid > ] Actor UUID(s) to include. Repeatable (?actor_id=a&actor_id=b) — values are unioned server-side (OR). A single value stays valid (backward-compatible). |
| object_type | string |
| object_id | string <uuid> |
| q | string Free-text filter — case-insensitive substring match over the action string. |
| X-Tenant-ID required | string <uuid> Tenant UUID |
[- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "tenant_id": "34f5c98e-f430-457b-a812-92637d0c6fd0",
- "actor_type": "string",
- "actor_id": "04f37679-bfbf-4906-b749-01756515cecf",
- "actor_username": "string",
- "action": "string",
- "object_type": "string",
- "object_id": "463a83d0-a816-4902-abba-2486e0c0a0bb",
- "before": { },
- "after": { },
- "created_at": "2019-08-24T14:15:22Z"
}
]| changed_since | string <date-time> Reconnect-backfill delta cursor (UI live-sync). When present, the endpoint returns ONLY rows changed at or after |
[- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "username": "string",
- "email": "string",
- "status": "active",
- "role": "admin",
- "is_oidc": true,
- "last_login_at": "2019-08-24T14:15:22Z",
- "created_at": "2019-08-24T14:15:22Z",
- "archived_at": "2019-08-24T14:15:22Z"
}
]| username required | string |
| email required | string <email> |
| password required | string <password> |
| role required | string Enum: "admin" "editor" "auditor" |
{- "username": "string",
- "email": "user@example.com",
- "password": "pa$$word",
- "role": "admin"
}{- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "username": "string",
- "email": "string",
- "status": "active",
- "role": "admin",
- "is_oidc": true,
- "last_login_at": "2019-08-24T14:15:22Z",
- "created_at": "2019-08-24T14:15:22Z",
- "archived_at": "2019-08-24T14:15:22Z"
}[- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "username": "string",
- "email": "string",
- "status": "active",
- "role": "admin",
- "is_oidc": true,
- "last_login_at": "2019-08-24T14:15:22Z",
- "created_at": "2019-08-24T14:15:22Z",
- "archived_at": "2019-08-24T14:15:22Z"
}
]{- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "username": "string",
- "email": "string",
- "status": "active",
- "role": "admin",
- "is_oidc": true,
- "last_login_at": "2019-08-24T14:15:22Z",
- "created_at": "2019-08-24T14:15:22Z",
- "archived_at": "2019-08-24T14:15:22Z"
}| id required | string <uuid> |
| status | string Enum: "active" "suspended" |
| password | string <password> |
{- "status": "active",
- "password": "pa$$word"
}{- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "username": "string",
- "email": "string",
- "status": "active",
- "role": "admin",
- "is_oidc": true,
- "last_login_at": "2019-08-24T14:15:22Z",
- "created_at": "2019-08-24T14:15:22Z",
- "archived_at": "2019-08-24T14:15:22Z"
}| id required | string <uuid> |
| role required | string Enum: "admin" "editor" "auditor" |
{- "role": "admin"
}{- "user_id": "a169451c-8525-4352-b8ca-070dd449a1a5",
- "role": "admin"
}| changed_since | string <date-time> Reconnect-backfill delta cursor (UI live-sync). When present, the endpoint returns ONLY rows changed at or after |
[- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "tenant_id": "34f5c98e-f430-457b-a812-92637d0c6fd0",
- "name": "string",
- "role": "admin",
- "created_by": "ee824cad-d7a6-4f48-87dc-e8461a9201c4",
- "expires_at": "2019-08-24T14:15:22Z",
- "last_used_at": "2019-08-24T14:15:22Z",
- "created_at": "2019-08-24T14:15:22Z",
- "archived_at": "2019-08-24T14:15:22Z",
- "token": "string"
}
]| name required | string |
| role required | string Enum: "admin" "editor" "auditor" |
| expires_at | string or null <date-time> |
{- "name": "string",
- "role": "admin",
- "expires_at": "2019-08-24T14:15:22Z"
}{- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "tenant_id": "34f5c98e-f430-457b-a812-92637d0c6fd0",
- "name": "string",
- "role": "admin",
- "created_by": "ee824cad-d7a6-4f48-87dc-e8461a9201c4",
- "expires_at": "2019-08-24T14:15:22Z",
- "last_used_at": "2019-08-24T14:15:22Z",
- "created_at": "2019-08-24T14:15:22Z",
- "archived_at": "2019-08-24T14:15:22Z",
- "token": "string"
}[- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "tenant_id": "34f5c98e-f430-457b-a812-92637d0c6fd0",
- "name": "string",
- "role": "admin",
- "created_by": "ee824cad-d7a6-4f48-87dc-e8461a9201c4",
- "expires_at": "2019-08-24T14:15:22Z",
- "last_used_at": "2019-08-24T14:15:22Z",
- "created_at": "2019-08-24T14:15:22Z",
- "archived_at": "2019-08-24T14:15:22Z",
- "token": "string"
}
]| X-Tenant-ID required | string <uuid> Tenant UUID |
[- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "tenant_id": "34f5c98e-f430-457b-a812-92637d0c6fd0",
- "user_id": "a169451c-8525-4352-b8ca-070dd449a1a5",
- "name": "string",
- "keys": [
- "string"
], - "is_system": true,
- "created_at": "2019-08-24T14:15:22Z"
}
]| X-Tenant-ID required | string <uuid> Tenant UUID |
| name required | string |
| keys required | Array of strings [ 1 .. 5 ] items unique |
{- "name": "string",
- "keys": [
- "string"
]
}{- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "tenant_id": "34f5c98e-f430-457b-a812-92637d0c6fd0",
- "user_id": "a169451c-8525-4352-b8ca-070dd449a1a5",
- "name": "string",
- "keys": [
- "string"
], - "is_system": true,
- "created_at": "2019-08-24T14:15:22Z"
}