Skip to content

List security logs

GET
/clusters/{cluster_id}/security-logs
curl --request GET \
  --url 'http://localhost:8000/clusters/2489E9AD-2EE2-8E00-8EC9-32D5F69181C0/security-logs?limit=100&offset=0&type=waf&action=detect&order=desc' \
  --header 'API-Key: <API-Key>' \
  --header 'API-Version: 2026-06-01.beta'

Returns WAF, bot detection, geo-blocking, rate limiting, and IP access control events for the cluster, sorted by created_at (newest first by default).

When neither start_time nor end_time is provided the query covers the last hour. The maximum date range is 90 days.

Required scope: clusters:logs:read

cluster_id
required
string format: uuid
limit
integer
>= 1 <= 1000

Maximum number of results to return.

offset
integer

Number of results to skip from the start.

start_time
string format: date-time

Inclusive start time (ISO 8601). Defaults to one hour ago when omitted.

end_time
string format: date-time

Inclusive end time (ISO 8601). Defaults to the current time when omitted.

type

Category of security event.

string
Allowed values: waf bot geo_block rate_limit ip_block captcha

Filter by event type.

action
string
Allowed values: detect block

Filter by action taken on the request.

source_ip
string
<= 45 characters

Filter by exact source IP address (IPv4 or IPv6).

country
string
>= 2 characters <= 2 characters /^[A-Z]{2}$/

Filter by ISO 3166-1 alpha-2 country code (uppercase).

search
string
>= 1 characters <= 256 characters

Case-insensitive substring match on message and uri.

order
string
Allowed values: asc desc

Sort order by created_at. Defaults to desc (newest first).

API-Version
required
string
Allowed values: 2026-06-01.beta

The request has succeeded.

Media typeapplication/json
Array<object>

A security event recorded for this cluster.

object
id
required
string
timestamp
required
string format: date-time
type
required

Category of security event.

string
Allowed values: waf bot geo_block rate_limit ip_block captcha
action
required
string
Allowed values: detect block
source_ip
required

Client IP address.

string
uri
required

Request path and query string.

string
method
required

HTTP method.

string
message
required
string
attack_type
required

Primary OWASP attack category. Present for waf events only.

string
nullable
severity
required

OWASP CRS severity level (e.g. CRITICAL, ERROR, WARNING, NOTICE). Present for waf events only.

string
nullable
anomaly_score
required

Cumulative WAF anomaly score. Present for waf events only.

integer
nullable
response_code
required

HTTP response code returned to the client.

integer
nullable
country
required

ISO 3166-1 alpha-2 country code resolved from the client IP.

string
nullable
matched_rules
required

All OWASP CRS rules matched for this request, aggregated from related WAF events.

Array<object>

An OWASP CRS rule that matched an incoming request.

object
rule_id
required

OWASP CRS rule identifier.

string
attack_type
required

OWASP attack category.

string
message
required
string

Example

[
  {
    "type": "waf",
    "action": "detect",
    "method": "POST",
    "country": "US",
    "matched_rules": [
      {
        "rule_id": "942100",
        "attack_type": "sqli"
      }
    ]
  }
]
Total-Count
required
integer

Total number of results across all pages, before pagination is applied.

Link
string

RFC 8288 Link header containing next, prev, first, and last relations.

The server could not understand the request due to invalid syntax.

Media typeapplication/problem+json

RFC 9457 Problem Details object.

object
type
required
string format: uri
title
required
string
status
required
integer
detail
required
string
instance
string format: uri

Example generated

{
  "type": "https://example.com",
  "title": "example",
  "status": 1,
  "detail": "example",
  "instance": "https://example.com"
}

Access is unauthorized.

Media typeapplication/problem+json

RFC 9457 Problem Details object.

object
type
required
string format: uri
title
required
string
status
required
integer
detail
required
string
instance
string format: uri

Example generated

{
  "type": "https://example.com",
  "title": "example",
  "status": 1,
  "detail": "example",
  "instance": "https://example.com"
}

Client error

Media typeapplication/problem+json

Returned when a workspace plan quota would be exceeded. required_plan indicates the minimum plan needed to complete the request.

object
type
required
string format: uri
title
required
string
status
required
integer
detail
required
string
instance
string format: uri
current_plan
required
string
required_plan
required
string
code

Machine-readable identifier of the quota that was hit, so a client can tell quotas apart without parsing detail. Known values include cluster_limit (the workspace’s total cluster allowance), cluster_size_quota (the allowance for the requested cluster size) and cluster_size (the requested size is not offered on the plan at all). New values may be added.

string
current_usage

How many of the resource the workspace currently has.

integer
current_limit

Maximum allowed by the current plan. 0 means the plan does not include the resource at all.

integer

Example generated

{
  "type": "https://example.com",
  "title": "example",
  "status": 1,
  "detail": "example",
  "instance": "https://example.com",
  "current_plan": "example",
  "required_plan": "example",
  "code": "example",
  "current_usage": 1,
  "current_limit": 1
}

The server cannot find the requested resource.

Media typeapplication/problem+json

RFC 9457 Problem Details object.

object
type
required
string format: uri
title
required
string
status
required
integer
detail
required
string
instance
string format: uri

Example generated

{
  "type": "https://example.com",
  "title": "example",
  "status": 1,
  "detail": "example",
  "instance": "https://example.com"
}

Client error

Media typeapplication/problem+json
object
type
required
string format: uri
title
required
string
status
required
integer
detail
required
string
instance
string format: uri
errors
required
Array<object>
>= 1 items
object
field
required
string
detail
required
string
code
string
value

Example generated

{
  "type": "https://example.com",
  "title": "example",
  "status": 1,
  "detail": "example",
  "instance": "https://example.com",
  "errors": [
    {
      "field": "example",
      "detail": "example",
      "code": "example",
      "value": "example"
    }
  ]
}

Client error

Media typeapplication/problem+json

RFC 9457 Problem Details object.

object
type
required
string format: uri
title
required
string
status
required
integer
detail
required
string
instance
string format: uri

Example generated

{
  "type": "https://example.com",
  "title": "example",
  "status": 1,
  "detail": "example",
  "instance": "https://example.com"
}
Retry-After
integer
RateLimit-Limit
integer
RateLimit-Remaining
integer
RateLimit-Reset
integer
X-RateLimit-Limit-Second
integer
X-RateLimit-Remaining-Second
integer
X-RateLimit-Limit-Minute
integer
X-RateLimit-Remaining-Minute
integer
X-RateLimit-Limit-Hour
integer
X-RateLimit-Remaining-Hour
integer
X-RateLimit-Limit-Day
integer
X-RateLimit-Remaining-Day
integer

Server error

Media typeapplication/problem+json

RFC 9457 Problem Details object.

object
type
required
string format: uri
title
required
string
status
required
integer
detail
required
string
instance
string format: uri

Example generated

{
  "type": "https://example.com",
  "title": "example",
  "status": 1,
  "detail": "example",
  "instance": "https://example.com"
}

Server error

Media typeapplication/problem+json

RFC 9457 Problem Details object.

object
type
required
string format: uri
title
required
string
status
required
integer
detail
required
string
instance
string format: uri

Example generated

{
  "type": "https://example.com",
  "title": "example",
  "status": 1,
  "detail": "example",
  "instance": "https://example.com"
}