Skip to main content
Audact
See the offer

One call, before the words leave the building.

Public API host: In development

POST https://api.audact.ai/v1/governance/gate

The public API host. The code examples document the intended interface and the endpoints used within the current product.

No public API is served on this host yet, apart from the published Merkle roots at /v1/metachain. The endpoints used inside the product are not the same thing as a public API.

Why this status
Claim
In development · By application
Scope
The public API host. The code examples document the intended interface and the endpoints used within the current product.
Ground
No public API is served on this host yet, apart from the published Merkle roots at /v1/metachain. The endpoints used inside the product are not the same thing as a public API.
What it does not establish
That any individual endpoint works today. That is confirmed per endpoint, and the confirmation is open.
What you can get today
Production access sits inside an applicable paid agreement. Endpoints are not priced separately.
Last checked
5 October 2026
Where to check it
/apis

Governance Gate: In controlled testing

You send the candidate response before it is spoken or sent. The gate answers allow, modify or block, gives the reason as structured data rather than prose, and returns a receipt either way — including for a block, which is the case most systems forget to record. Where it blocks it also offers a rewrite, so the conversation continues instead of dying.

POST /v1/governance/gate

curl -X POST https://api.audact.ai/v1/governance/gate \
  -H "Authorization: Bearer $AUDACT_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "agent_id": "agent_dental_intake_v2",
    "candidate_response": "Sure, I can offer 50% off the implant package.",
    "policy_bundle": "dental_de_brand_v3",
    "context": {
      "caller_role": "patient",
      "session_id": "sess_8h2k9d7"
    }
  }'

One request per candidate utterance. Idempotent on session_id plus payload hash.

200 OK · verdict and rewrite

{
  "verdict": "BLOCK",
  "reasons": [
    {
      "policy": "commercial_commitment",
      "rule": "no_discount_without_authorization",
      "severity": "hard"
    },
    {
      "policy": "brand_governance",
      "rule": "approved_pricing_only",
      "severity": "hard"
    }
  ],
  "rewrite_suggestion": "I can connect you with our scheduling team.",
  "call_id": "7f3c2a1e-0000-4000-8000-000000000000"
}

Three verdicts: allow, modify, block. Every one of them writes a receipt.

What the gate decides on

Brand governance: approved messaging, tone and claims. No off-script discount, no invented feature.
In controlled testing
Commercial validation: price, term and commitment checked before the caller hears a number.
In controlled testing
Scope-of-practice: medical, legal and financial advice routed to a qualified person when the model strays.
In controlled testing
Identifier detection (BSN, IBAN, card): recognised in the segment before it leaves the gate. Redaction per your data-processing agreement; crypto-shredding on erasure is coming soon.
In controlled testing
Latency on the Go hot path.
Target p99 under 10 ms

Position

Before the action, not after the log.

The distinction that matters is where the check sits. A monitor reads what was said and tells you afterwards; a gate decides whether it is said at all. Everything downstream (the receipt, the export, the answer to an auditor) is worth what that position is worth.

It costs you a round trip on the hot path. That is the honest trade, and it is why the target is expressed as p99 rather than as an average: an average hides exactly the calls that hurt.

Failure behaviour

What happens when the gate cannot be reached is a contract term, not a product setting.

There is no single answer, and a page that gives you one is selling you a setting that does not exist. The failure contract differs per action class: an utterance that commits money or makes a promise should not go out unchecked, while reading back an opening time or booking an appointment does not carry the same consequence. Which class falls back which way is agreed with you and written into the contract.

The argument for holding an utterance rather than letting it through is worth stating on its own: an unchecked utterance that goes out while the checker is down turns every receipt in the chain into a statement about a system that sometimes was not running. That is the cost side of the trade, and it is why the question belongs in a contract rather than in a default.

Questions

Does it change what the model says?
It does not rewrite anything on its own. It returns a verdict and, on a block, a suggested replacement your agent may use. What is spoken remains your decision; what is recorded is that the decision was checked.
Where do the rules come from?
A policy bundle you configure. The bundle name travels in the request; the receipt carries a policy_version field. In development.
Is a block recorded?
Yes, and that is the point. A system that only records what happened cannot show what it prevented.

The same decision, in a conversation

Control is the product view of this endpoint: what the AI is allowed to cause, who may widen it, and what a refusal looks like from the caller's side.

How Control works

Related