Pre-launch preview. Payments run in test mode, so nothing is really charged, and models aren't kept running.

abliterate

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: policy and shown in X-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_failed rather 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.