API · Governance Gate
One call, before the words leave the building.
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.
Related
All six APIs Article 50 Attestation The disclosure, recorded.
Evidence Vault Where the receipts land.
Architecture Request path and failure behaviour.
The policy engine How a bundle is written.
Brand governance The commercial case for the same gate.
