Rule Packs
curl --request GET \
--url https://api.zerodrift.ai/api/rulepacks/ \
--header 'x-api-key: <api-key>'import requests
url = "https://api.zerodrift.ai/api/rulepacks/"
headers = {"x-api-key": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'x-api-key': '<api-key>'}};
fetch('https://api.zerodrift.ai/api/rulepacks/', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.zerodrift.ai/api/rulepacks/",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"x-api-key: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.zerodrift.ai/api/rulepacks/"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("x-api-key", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.zerodrift.ai/api/rulepacks/")
.header("x-api-key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.zerodrift.ai/api/rulepacks/")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["x-api-key"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"data": [
{
"id": "zd-us-securities",
"name": "US Securities and Investment Communications",
"description": "SEC and FINRA communication compliance",
"type": "managed",
"engine": "anchor_3_0",
"active": true,
"total_rules": 72,
"active_rules": 72,
"inactive_rules": 0,
"publisher": "ZeroDrift",
"version": "3.0.0",
"domain": "securities",
"jurisdictions": ["US"],
"last_updated": "2026-07-28"
}
],
"meta": {
"current_page": 1,
"per_page": 15,
"total": 13,
"last_page": 1
}
}
Rule Packs
Rule Packs
Query the normalized policy catalog of managed and custom rule packs
GET
/
api
/
rulepacks
/
Rule Packs
curl --request GET \
--url https://api.zerodrift.ai/api/rulepacks/ \
--header 'x-api-key: <api-key>'import requests
url = "https://api.zerodrift.ai/api/rulepacks/"
headers = {"x-api-key": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'x-api-key': '<api-key>'}};
fetch('https://api.zerodrift.ai/api/rulepacks/', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.zerodrift.ai/api/rulepacks/",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"x-api-key: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.zerodrift.ai/api/rulepacks/"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("x-api-key", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.zerodrift.ai/api/rulepacks/")
.header("x-api-key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.zerodrift.ai/api/rulepacks/")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["x-api-key"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"data": [
{
"id": "zd-us-securities",
"name": "US Securities and Investment Communications",
"description": "SEC and FINRA communication compliance",
"type": "managed",
"engine": "anchor_3_0",
"active": true,
"total_rules": 72,
"active_rules": 72,
"inactive_rules": 0,
"publisher": "ZeroDrift",
"version": "3.0.0",
"domain": "securities",
"jurisdictions": ["US"],
"last_updated": "2026-07-28"
}
],
"meta": {
"current_page": 1,
"per_page": 15,
"total": 13,
"last_page": 1
}
}
Returns the normalized policy catalog for the active authenticated customer.
Managed entries reflect the Anchor v3 runtime vocabulary. Custom entries are
v2_frontier imports that have been activated at least once, including entries
that are currently inactive. Supplying id selects detail and requires type.
Query Parameters
string
Rulepack ID for detail lookup; requires
typestring
managed or custom. Filter list results or disambiguate a detail IDinteger
default:"1"
One-based result page
integer
default:"15"
Results per page (1–100)
string
Case-insensitive match against ID, name, or description
string
Filter by current runtime active state:
'true' or 'false'Response - List
When called withoutid, returns paginated summaries under data.
array
Rulepack summaries
Show summary properties
Show summary properties
string
Rulepack identifier (e.g.,
zd-us-securities)string
Human-readable rulepack name
string
Rulepack description (nullable)
string
managed or customstring
Runtime engine vocabulary:
anchor_3_0 or v2_frontierboolean
Whether the rulepack is currently active for this customer
integer
Total rules in the rulepack
integer
Currently active rules
integer
Currently inactive rules
string
Publisher (nullable)
string
Rulepack version (nullable)
string
Compliance domain (nullable)
array
Applicable jurisdictions
string
Last update date (nullable)
object
{
"data": [
{
"id": "zd-us-securities",
"name": "US Securities and Investment Communications",
"description": "SEC and FINRA communication compliance",
"type": "managed",
"engine": "anchor_3_0",
"active": true,
"total_rules": 72,
"active_rules": 72,
"inactive_rules": 0,
"publisher": "ZeroDrift",
"version": "3.0.0",
"domain": "securities",
"jurisdictions": ["US"],
"last_updated": "2026-07-28"
}
],
"meta": {
"current_page": 1,
"per_page": 15,
"total": 13,
"last_page": 1
}
}
Response - Detail
When called withid and type, returns one detailed rulepack under data,
including its rules.
object
All summary fields, plus:
Show rule properties
Show rule properties
array
Rules in the rulepack
Show rule entry properties
Show rule entry properties
string
Rule identifier
string
Human-readable rule name
string
Rule description (nullable)
string
AI_SIGNAL, REGEX, COMPOSITE, LEXICON, REQUIRE_NEAR, or CUSTOMstring
Rule severity (nullable)
string
do_not_send or send_with_cautionboolean
Whether the rule is currently active
object
Lifecycle detail (nullable):
status, effective_from, last_reviewedarray
Regulatory citations with
framework, cite, and jurisdictionsobject
Remediation guidance with
kind and note{
"data": {
"id": "zd-us-securities",
"name": "US Securities and Investment Communications",
"type": "managed",
"engine": "anchor_3_0",
"active": true,
"total_rules": 72,
"active_rules": 72,
"inactive_rules": 0,
"rules": [
{
"id": "guarantee_of_returns",
"name": "Promissory Tone",
"description": "Promissory words are risky",
"type": "AI_SIGNAL",
"severity": "major",
"verdict": "do_not_send",
"active": true,
"lifecycle": {
"status": "in_force",
"last_reviewed": "2026-07-28"
},
"citations": [
{
"framework": "FINRA Rule 2210",
"jurisdictions": ["US"]
}
],
"remediation": {
"kind": "rewrite",
"note": "Review with compliance"
}
}
]
}
}
Errors
| Status | Meaning |
|---|---|
400 | Invalid pagination, filter, or detail selector |
403 | Forbidden — missing, invalid, inactive, or unresolved API key |
404 | Rulepack not found or not accessible to this customer |
500 | Catalog backend read failed or stored catalog data is inconsistent |
Example
curl -X GET "https://api.zerodrift.ai/api/rulepacks/?per_page=15&active=true" \
-H "x-api-key: YOUR_API_KEY"
curl -X GET "https://api.zerodrift.ai/api/rulepacks/?id=zd-us-securities&type=managed" \
-H "x-api-key: YOUR_API_KEY"
import requests
API_KEY = "YOUR_API_KEY"
API_BASE = "https://api.zerodrift.ai"
headers = {"x-api-key": API_KEY}
# List rulepacks
response = requests.get(f"{API_BASE}/api/rulepacks/", headers=headers)
catalog = response.json()
print(catalog["data"])
# Get one rulepack's detail (id requires type)
response = requests.get(
f"{API_BASE}/api/rulepacks/",
headers=headers,
params={"id": "zd-us-securities", "type": "managed"}
)
rulepack = response.json()
print(rulepack["data"]["rules"])
const axios = require('axios');
const API_KEY = 'YOUR_API_KEY';
const API_BASE = 'https://api.zerodrift.ai';
const headers = { 'x-api-key': API_KEY };
// List rulepacks
const listResponse = await axios.get(`${API_BASE}/api/rulepacks/`, { headers });
console.log(listResponse.data.data);
// Get one rulepack's detail (id requires type)
const detailResponse = await axios.get(`${API_BASE}/api/rulepacks/`, {
headers,
params: { id: 'zd-us-securities', type: 'managed' }
});
console.log(detailResponse.data.data.rules);
⌘I

