Skip to main content
Audact
See the offer

Authority before action. Proof through finality.

This page describes the shape of the system. It is written for someone who will read the response body, not the brochure.

A request is evaluated against a mandate before anything happens outside the model. The evaluation returns one of three answers, and each of the three writes a compliance receipt. What a third party can recompute from that receipt (without a key, without an account and without access to our systems) is set out below, field by field. This page describes the shape in which your own system calls the gate; in the managed voice application Audact operates the path and the same evaluation sits inside it. The three answers and the receipt do not change between the two.

01. The path of a request

From arrival to receipt

Seven steps. The one that matters is the fourth: the check runs before the effect leaves the boundary, not after it has landed. A system that reviews afterwards can tell you what went wrong. A system that checks first can keep it from going wrong. Everything else on this page follows from that ordering.

The path of a request

The check sits before the action, not after it.

  1. 01

    Request arrives

    A voice turn, a chat turn or an agent tool call asks for something with an effect outside the model.

  2. 02

    The mandate is resolved

    Tenant, agent and country decide which mandate and which policy set apply to this one request. Nothing is evaluated against a general rule when a specific one exists.

  3. 03

    The effect is described

    The intended effect is put into a structured form: what, for whom, how much, under which rules. At this point it is described. It has not been performed.

  4. 04

    The check runs

    That description is evaluated against the mandate (ceiling, scope, expiry) and against the policy set for the country. This is the step that sits before the action, and it is the whole difference.

  5. 05

    One of three answers returns

    Allow, escalate or refuse. There is no fourth answer and no partial answer.

  6. 06

    Only allow crosses the boundary

    On allow, your systems carry the action out inside the bounds that were checked. On the other two answers it is not carried out at all.

  7. 07

    The receipt is written

    Input hash, output hash, the link to the receipt before it, and the entry that goes into the Merkle tree. This happens after every one of the three answers.

02. The gate

One call. Three answers. A receipt after each.

The gate is a single call your system makes at the point where an effect would otherwise begin. It answers with one of three outcomes, and it returns a compliance receipt whichever outcome it answers with. Nothing about the answer changes whether a receipt is written.

The three outcomes of one gate call

Three answers, one artefact.

The three outcomes
  • Outcome
    Allow
    What happens to the action
    Carried out by your systems, inside the bounds that were checked.
    What comes back
    Compliance receipt
  • Outcome
    Escalate
    What happens to the action
    Held. It goes to a person, and that person decides.
    What comes back
    Compliance receipt
  • Outcome
    Refuse
    What happens to the action
    Not carried out.
    What comes back
    Compliance receipt

A refusal produces the same artefact as an allowance. That symmetry is the point: the record is not a list of the things that went well.

The shape of the call

Shown for orientation, not as a specification. The field-by-field reference lives in the API documentation.

Request

POST /v1/gate/evaluate

{
  "tenant":  "acme-emea",
  "agent":   "renewals-emea",
  "intent":  "commit.discount",
  "country": "DE",
  "amount": {
    "value":    1240,
    "currency": "EUR"
  }
}

Response

200 OK

{
  "outcome": "escalate",
  "reason":  "above the agent ceiling",
  "receipt": {
    "id":          "rcpt_01J8...",
    "input_hash":  "sha256:9f2a...",
    "output_hash": "sha256:41c7...",
    "prev":        "sha256:0b8e...",
    "auth":        "hmac-sha256",
    "merkle": {
      "root": "sha256:77d1...",
      "path": 4
    }
  }
}
Governance Gate API

Where an escalation stops

  1. Completed: Mandate

    Set by a person.

  2. Completed: Authority

    Bounded, not open.

  3. Needs a person: Clearance

    This one is over the line.

  4. Not started: Effect

    What it would cause.

  5. Not started: Obligation

    What follows from it.

  6. Not started: Finality

    Follows closure evidence from an authorised source, and is re-checkable afterwards.

An escalation does not fail and it does not silently pass. It halts at the point where a person is the only thing that can move it forward. These six stations order the screen and the conversation; they are a way of reading the state, not a mechanism claimed as such.

03. Failure behaviour

What happens when the governance layer cannot be reached

Every design of this kind has to answer one question honestly: what does the system do when the part that grants permission is not there? There are two possible answers, and only one of them keeps the record meaningful.

Behaviour when the governance layer is reachable and when it is not

No answer is treated as no permission.

Normal

The gate answers

One of the three outcomes comes back inside the evaluation window. The action follows the answer, and a receipt is written.

Fail-closed

The gate does not answer

No answer inside the window is treated as no permission. The action is not carried out, the caller gets a refusal rather than a silence that reads like a yes, and the unavailability itself is recorded so the gap is visible afterwards instead of invisible.

The word for this is fail-closed, and it is the right default for an action that commits money or makes a promise. It is not the right answer for every action: reading a record and booking an appointment do not carry the same consequence, and a failure contract that treats them alike either blocks harmless work or lets consequential work through. Which class falls back how is a decision per action class, made with the customer and written into the contract, not a switch we set for everyone. The opposite arrangement (proceed now, reconcile later) is the one that makes an outage indistinguishable from an approval, and that is the arrangement this design gives up. That is a deliberate trade: availability is spent so the record keeps its meaning.

04. The evidence chain

The receipt as a data structure

A receipt is not a log line with a nicer name. It is five fields, and three of them can be recomputed by anyone holding nothing but the receipt: no key, no account, no access to our systems. A fourth, the Merkle path, needs a published root; that publication and the open endpoint for it are in development. Read field by field, it says exactly what the artefact carries.

Receipt chain and Merkle tree

Each receipt links backwards and upwards: to the one before it, and into the root whose publication is in development.

The fields of a receipt
  • Field
    input_hash
    What it holds
    The request exactly as it was evaluated.
    Recomputable by a third party
    Without a key
  • Field
    output_hash
    What it holds
    The effect exactly as it was recorded.
    Recomputable by a third party
    Without a key
  • Field
    prev
    What it holds
    The hash of the receipt before this one in the same chain.
    Recomputable by a third party
    Without a key
  • Field
    merkle
    What it holds
    The path from this receipt to the Merkle root.
    Recomputable by a third party
    Once the roots are published
  • Field
    auth
    What it holds
    HMAC-SHA256 under a symmetric key held per tenant.
    Recomputable by a third party
    Key needed

Three fields, recomputable by anyone

Input hash, output hash and the link to the receipt before it: three fields, recomputable with nothing but the receipt. No key, no account, no access to our systems. A fourth, the receipt's place in the Merkle root, needs a published root to be set against. That publication and the open endpoint for it are in development. The fifth field, the authentication code, is computed under the symmetric key held for that tenant and authenticates the receipt against it.

That recomputation is what makes a later change to a receipt, or a reordering of the chain, detectable: the recomputed root stops matching the stored one.

Open the receipt explorer

05. Where the data sits

Hosting, in the order that matters

Primary application hosting is Frankfurt. The table says, layer by layer, where each part of the system runs and where each vendor processes.

Where each layer runs
  • Layer
    Application and API
    Where
    Frankfurt
    Note
    Primary application hosting.
  • Layer
    Evidence chain and receipts
    Where
    Frankfurt
    Note
    Stored with the tenant they belong to.
  • Layer
    Speech, model and telephony vendors
    Where
    Per vendor
    Note
    Some process outside the EU under standard contractual clauses.
  • Layer
    Merkle roots (publication in development)
    Where
    Public endpoint
    Note
    Hashes only, no personal data.

The authoritative list

The Trust Center names every subprocessor and where it processes, including the ones that process in the United States under standard contractual clauses. That list is kept current, it is the authority on this question, and this page follows it.

View current product status

06. What it is not

Three things this is not, and the misreadings they prevent

These are the three assumptions that cost the most when they go unchallenged: each one sounds like a compliment, and each one describes a different product.

Not an interception layer

Not this

Nothing described on this page is placed in front of your network, and nothing here reads a stream of yours on its own initiative.

The gate described here is a call your system makes, at a point in your own code that you choose. If your system does not call it, nothing is evaluated — and nothing is recorded either. Coverage is a property of where you place the call, not something the network grants you. The managed voice application is the other shape: there the speech stack is run by Audact, so the check sits inside a path we operate rather than at a call you place. Which of the two applies is settled per deployment.

Not a keystore for your systems

Not this

Audact does not hold, rotate or hand out the credentials your systems use with one another, and it is not somewhere to park a key you would rather not manage.

One key is held per tenant: the one under which the authentication code on the receipt is computed. What that key covers is set out field by field in section 04 above.

Not a ledger

Not this

The chain is not a book of account. It holds no balances, it moves no money, and it does not net a position between two parties.

It records what was decided and what followed from it. Where money moves, it moves in your own systems; the receipt says what was permitted and what was recorded, and it stays out of the accounting.

Next

Recompute it yourself

The fastest way to judge this architecture is not to read further. Take a receipt, recompute the chain field by field, and see for yourself that it matches.

The mechanisms described on this page belong to a patent-pending governance stack (UK IPO).