Skip to main content
POST
Enforce Content
Send content to Anchor, the compliance enforcement model, and get a verdict. Requests require mode and model_engine. With mode: "async", the endpoint returns a job_id you poll via Get Verdict. Set mode: "sync" to run enforcement inline and receive the completed result in a single response. Pick Mini, Flagship, or Max with model_engine. Flagship is anchor_3_0 (the default; older notes called this Base). See Choose a model for when to use each tier, and the Anchor 3.0 benchmark for quality and latency. Custom rules run on Max (anchor_3_0_max). A scope-less Flagship (anchor_3_0) request stays on Flagship and checks the active managed catalog; activated custom rules are not evaluated. If a Flagship request explicitly names a cust_* rule, the API upgrades that request to Max. See Custom rules.

Request Body

string
required
Plain text to enforce.
string
default:"anchor_3_0"
required
Enforcement model. anchor_3_0_mini (Mini): detection-only yes/no plus a whole-message flagged_rules list — no per-line violations, rewrite, or validation_scope. anchor_3_0 (Flagship, default): per-line violations plus rewrite; managed packs and trained adapters. anchor_3_0_max (Max): per-line violations, no rewrite; managed and custom rule text at inference. Ask for Max explicitly to enforce activated custom rules. See Choose a model.
string
required
Execution mode: async returns 202 with a job_id to poll; sync runs inline for short content and returns the completed result with 200, falling back to async if it would exceed the inline budget.
object
Optional metadata merged into the job.
The API currently forces metadata.document_type to email, even when a different value is submitted. Do not use that metadata field to distinguish chat, agent, or document traffic.
object
Optional nested form to narrow live enforcement to a subset of already-active rules, rule packs, and imports. Resolve IDs from the Policy API — see Rule and rulepack IDs. A scope-less Flagship call defaults to the active managed catalog. Explicitly naming a custom rule upgrades Flagship to Max.

Response

Returns 202 Accepted for async submissions. Poll Get Verdict for the verdict.
string
Always v3.
string
Unique identifier for the enforcement job.
string
queued for async submissions. For sync responses the completed result envelope is returned inline with status: completed and the verdict nested under result.
string
Mode the request was actually processed in: async or sync. A sync request that fell back returns async.
string
Time when the job was submitted.
string
Engine that served the request: anchor_3_0_mini (Mini), anchor_3_0 (Flagship), or anchor_3_0_max (Max). This can differ from the request when the API upgrades a Flagship call that named custom rules. See Choose a model.
string
Present when a Flagship request explicitly named custom rule text or a cust_* rule and was upgraded to Max. A scope-less Flagship call does not upgrade merely because the workspace has activated custom rules.
object
Counts for the scope the job ran against: source plus rules_count, rulepacks_count, or imports_count. The API does not echo the full rule ID list. A scope-less Flagship call reports source: "request" because the server supplies its managed-only default.
object
Where to poll for the result (async only).
For the sync response body (HTTP 200), read the verdict from result. The same nested envelope is returned by Get Verdict for async jobs, with "mode": "async". Public responses report billed result.units and result.cost, not raw token counts.

Custom rules

Untrained custom rules (created with Create Custom Rule or activated from an import) run on Max when Max is requested. A scope-less Flagship request checks the managed catalog only, even when custom rules are active. Flagship can check a custom policy through a trained adapter.
Max detects, it does not rewrite. A Max verdict carries a rule’s own fix note when that rule has one, so violations[].fix.suggested_text is empty for most rules and custom rules never return a rewritten line. Treat an empty suggested_text as Escalate — see Act on Each Verdict. Flagship is the tier that returns a rewrite; to get one for an uploaded policy, train an adapter and scope the request to its import.
Max billing for custom rules is in Pricing.

Rule and rulepack IDs

The Policy API returns the IDs validation_scope expects. Copy them from these endpoints rather than from the Command network panel. Custom rule IDs look like cust_{customer_id}_{slug} — for example cust_abc123_required_terms. Rulepack IDs look like zd-us-securities.

Example

Enforce one custom rule on Max. This example checks whether a financial advisor improperly disclaims fiduciary responsibility. Set CUSTOM_RULE_ID from List Rules; custom rule IDs are workspace-specific.
A Flagship request that names the same custom rule is upgraded to Max and can be accepted as async. Poll until status is completed or failed:

Error Responses