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).
| email required | string <email> |
| password required | string <password> |
{- "email": "user@example.com",
- "password": "pa$$word"
}{- "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 |
| limit | integer <= 1000 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,
- "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",
- "created_at": "2019-08-24T14:15:22Z",
- "updated_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
}| 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,
- "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",
- "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 |
{- "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,
- "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",
- "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 |
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,
- "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",
- "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 |
[- {
- "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"
}
]| 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"
]
}
]
}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"
}| 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"
}
]| 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"
}| 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"
}| 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"
}| 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,
- "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",
- "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 |
| host_id required | string <uuid> |
{- "host_id": "eb4e20fc-2b4a-4d0c-811f-48abcf12b89b"
}{- "error": "string",
- "request_id": "string"
}| id required | string <uuid> |
| limit | integer <= 1000 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 <= 1000 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",
- "created_at": "2019-08-24T14:15:22Z"
}
]| id required | string <uuid> |
| start | string <date-time> |
| end | string <date-time> |
| limit | integer <= 1000 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",
- "created_at": "2019-08-24T14:15:22Z"
}
]| id required | string <uuid> |
| start | string <date-time> |
| end | string <date-time> |
| limit | integer <= 1000 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,
- "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,
- "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": { },
- "confirm_match_all": true,
- "current_version": 0,
- "created_at": "2019-08-24T14:15:22Z",
- "updated_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": { },
- "confirm_match_all": true,
- "current_version": 0,
- "created_at": "2019-08-24T14:15:22Z",
- "updated_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": { },
- "confirm_match_all": true,
- "current_version": 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 |
| description | string |
| priority | integer |
| selector | object |
Array of objects (CreateRuleRequest) | |
| 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
}
], - "confirm_match_all": true
}{- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "tenant_id": "34f5c98e-f430-457b-a812-92637d0c6fd0",
- "name": "string",
- "description": "string",
- "priority": 0,
- "selector": { },
- "confirm_match_all": true,
- "current_version": 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 |
[- {
- "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. 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. 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": { },
- "created_by": "string",
- "created_at": "2019-08-24T14:15:22Z"
}
]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> |
| v required | integer |
| 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": { },
- "confirm_match_all": true,
- "current_version": 0,
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}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"
}
]| 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"
}| 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"
}| 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"
}| 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 <= 1000 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"
}
]| email required | string <email> |
| password required | string <password> |
| role required | string Enum: "admin" "editor" "auditor" |
{- "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"
}{- "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"
}| 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"
}| 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",
- "expires_at": "2019-08-24T14:15:22Z",
- "last_used_at": "2019-08-24T14:15:22Z",
- "created_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",
- "expires_at": "2019-08-24T14:15:22Z",
- "last_used_at": "2019-08-24T14:15:22Z",
- "created_at": "2019-08-24T14:15:22Z",
- "token": "string"
}