PBN.LTD API docs
View as Markdown

Website firewall

The firewall in front of every site: whether it is on, and what it recently blocked.

Website firewall of a site

GET/api/v1/sites/{site_id}/firewall

Scope sites:read

The same as the site's "Website firewall" tab: whether the firewall is on for this site, and the requests it recently refused (when, what was asked for, why, and the reference number the visitor was shown). Signing in, editing, uploads, plugin installs, the database tool and the file manager are never blocked. If something ordinary was blocked, open a ticket with its reference number. Switching the firewall off for a site is done by support.

Parameters

NameInTypeRequiredDescription
site_idpathintegeryesThe site id (see GET /sites).
limitqueryintegernoHow many recent blocks to return (newest first). Default: 25.

Example

curl -s "https://app.pbn.ltd/api/v1/sites/123/firewall" \
  -H "Authorization: Bearer $PBN_API_KEY"
import os
import requests

headers = {"Authorization": "Bearer " + os.environ["PBN_API_KEY"]}
r = requests.get("https://app.pbn.ltd/api/v1/sites/123/firewall", headers=headers, timeout=120)
print(r.status_code, r.json())
const res = await fetch("https://app.pbn.ltd/api/v1/sites/123/firewall", {
  method: "GET",
  headers: {Authorization: `Bearer ${process.env.PBN_API_KEY}`}
});
console.log(res.status, await res.json());

Response

200

{
  "data": {
    "enabled": true,
    "recent": [
      {
        "when": "Thu Sep 24 21:46:47 2026",
        "method": "GET",
        "path": "/.env",
        "why": [
          "Restricted File Access Attempt"
        ],
        "reference": "462fee8ae8421f81e28f69c998e90369",
        "signed_in_visitor": false
      }
    ]
  }
}

Errors: not_found, rate_limited, scope_missing, unauthorized