Policies
A policy is a rule you write as a yes-or-no question. It reads requests, replies or both. In monitor mode it only records what it finds. In enforce mode it stops anything that matches.
curl https://api.abliterate.tech/v1/policies \
-H "Authorization: Bearer $ADMIN_KEY" \
-H "Content-Type: application/json" \
-d '{"name": "No card numbers",
"question": "Does this text contain a credit card number?",
"direction": "both", "mode": "enforce", "threshold": 0.7}'Try a rule first with POST /v1/policies/evaluate, which returns its probability of "yes" on your sample text. A rule matches at threshold: raise it to catch less and block fewer good requests. Editing a rule publishes a new version, and older ones stay readable. project_ids limits a rule to some projects. With "applies_by_default": false a rule runs only on requests that name it in policy_ids.
What to expect
- Cost: each check is a small paid request, recorded in usage with
route: policyand shown inX-Policy-Cost-USD. Its credit is reserved with the request. - Speed: enforcing request rules run before the model starts. Monitoring rules run afterwards and don't slow anything.
- Streams: an enforcing response rule has to read the whole reply first, so a stream holds its text back until the rule has passed, sending keep-alives in the meantime.
- Failures: if an enforcing check can't finish, the request stops with 503
policy_evaluation_failedrather than going through unchecked. - Which model: checks run on
qwen3-1.7b-abliterated, whichever model the request uses, and are billed at its prices, including its start and idle fees. On a quiet system, a request to another model may wait for both to start. - Accuracy: rules are read by a small model, which makes mistakes. Test yours on real examples before enforcing, and see the measured accuracy. Simple, literal questions work best.
- Length: a check reads up to 6,000 characters, from the start and end of a longer text. Over 1,500 characters it reads overlapping sections, for one charge, and the highest score counts.
Decision records
GET /v1/policies/decisions lists what checks decided, as JSON or as JSONL for a logging system. Records hold scores and outcomes, never your text.
The platform rule
One rule is always on: sexual content involving minors. Nothing else is refused unless you write a rule for it. A quick scan picks out text that could fall under it, and a model then reads only that text, at no charge to you. If it matches, the request stops with 403 platform_policy_violation and pays for that check. Accounts that keep hitting this rule may be suspended. Text mostly in a non-Latin script always goes to that check, because the scan can't read it, and those requests stop with a 503 if the check can't run.