Trustgate
AuthZEN 1.0W3C VCAP2x402MCPRFC 6962

Provable constraints for AI agents

Every agent invocation checked, settled, and written to a signed evidence log — anchored on-chain so anyone can verify independently.

How it works

1

Every agent belongs to someone

Owner registers with KYC/KYA binding

2

Set policy before the call

Per-call caps, allowlists, escalation thresholds

3

Agent calls the tool

Request flows through the PEP gateway

4

Policy evaluated in real time

PDP checks Cedar policy before settlement

5

Settle on permit

Payment settled, decision written to evidence log

6

Verify independently

RFC 6962 Merkle proof anchored on Base

Chapter 1

Identity: every agent provably belongs to someone

Before an agent can call a tool, a verifiable chain runs from the owning organisation’s KYB attestation down to the credential in the JWT header. Every step is a signed artifact — not a config flag.

1

Organisation identity

Org identity is anchored in three checks: ① Authorised representative verified — live via Sumsub KYC (FATF-aligned, sandbox simulated here). ② Company registry check — production slot (Sumsub Business Verification or registry APIs). ③ UBO screening — production slot. Production also slots eIDAS 2.0 / EU Digital Identity Wallet credentials. The attestation is stored in the owner record and hashed into every decision record.

Owner KYB recordSUMSUB (REP-KYC LIVE · REGISTRY + UBO PRODUCTION SLOTS)
{
  "provider":   "sumsub",
  "status":     "representative_verified",
  "scope":      "authorized_representative",
  "components": {
    "representative_kyc": { "status": "verified",          "provider": "sumsub" },
    "company_registry":   { "status": "production_slot" },
    "ubo_screening":      { "status": "production_slot" }
  },
  "attested_at": "2026-06-11T09:00:00Z"
}
2

Org key fingerprint

TrustGate mints a key pair for the org and stores a SHA-256 fingerprint of the public key.

Owner record (datastore)
{
  "owner_id":  "own_01KTTTWKC4Y6P",
  "domain":    "acme.com",
  "pub_key":   "sha256:4e9d2f7a1b3c8d5e...",
  "demo":      false
}
3

Agent credential issued

TrustGate issues an ES256-signed JWT. The subject is a W3C DID binding the agent to the org key.

JWT payload (decoded)SELF-ISSUED
{
  "iss":      "self:trustgate",
  "sub":      "did:web:acme.com:agents:agt_01KTTTWKC...",
  "agent_id": "agt_01KTTTWKC4Y6P",
  "iat":      1749632400,
  "exp":      1749639600
}
4

Agent register

The agent is written to the registry as ACTIVE. Every status change (including revocation) is auditable.

Agent register (excerpt)
agent_idowner_idstatusissued_at
agt_01KTT…WKCown_01KTT…4Y6PACTIVE2026-06-11T09:00:00Z
agt_01KTT…OLDown_01KTT…4Y6PREVOKED2026-05-01T08:00:00Z
5

Runtime binding check

On every invocation the gateway verifies the full chain — before any policy is evaluated.

Binding checklist
  • Owner found in datastore
  • Agent status is ACTIVE
  • Policy loaded for owner
  • Credential signature valid (ES256)
Chapter 2

Transaction: every action through the filter, into the log

A single invocation — agent_7 → get_quote → €12.50 — runs through every policy rule in sequence. The decision is deterministic: all rules pass, PERMIT fires.

Worked example: get_quote €12.50

RuleConfiguredRequest valueVerdict
Per-call cap≤ €100.00€12.50PASS
Daily cap≤ €5,000.00€0.00 spent todayPASS
Tool categorymarket-datamarket-dataPASS
Publisher KYBrequiredkyb_verified: truePASS
All rules passed →PERMIT
Evidence log record (signed)LIVE SYSTEM
{
  "record_id":    "rec_01KTTTWKC4Y6P",
  "seq":          1,
  "agent_id":     "agt_01KTTTWKC...",
  "tool":         "get_quote",
  "amount_minor": 1250,
  "decision":     "permit",
  "signed_at":    "2026-06-11T09:00:01Z",
  "anchor":       "pending (HH:00 batch)"
}

Verify a real record live →

Escalation scenario: place_order €600.00

When the request amount exceeds the per-call cap, the gateway routes the action to the owner for approval rather than denying outright.

RuleConfiguredRequest valueVerdict
Per-call cap≤ €100.00€600.00ESCALATE
Daily cap≤ €5,000.00€12.50 spent todayPASS
Tool categorymarket-datamarket-dataPASS
Publisher KYBrequiredkyb_verified: truePASS
Cap exceeded →ESCALATE

Owner approves via the portal → two records written: one for the escalation event, one for the final permit decision. Both carry the same request_id so the chain is auditable.

Built for every agentic workflow

Live in demo

Trading bots with spend limits

Enforce per-call and daily caps before settlement — not after.

Social media automation

Category allowlists prevent agents calling out-of-scope tools.

AI purchasing agents

Escalation thresholds route high-value orders to owner approval.

Enterprise AI governance

Every action traces to a verified owner identity and policy snapshot.

Multi-agent pipelines

Each agent in a chain carries its own credential and constraints.

MCP tool marketplace

Publishers require KYB verification before agents can call their tools.

Why this design

Liability needs attribution

When an agent causes harm, someone is accountable. Every action traces to a verified owner identity — before the call, not after.

Open standards, end to end

AuthZEN 1.0, W3C VCs, AP2, x402, MCP, RFC 6962. No proprietary lock-in — verify with any compatible tool.

The deny is the product

A constraint that can be bypassed is decoration. The deny fires before settlement — enforcement, not an audit trail.

See it run against a live system

Three acts, real policy decisions, signed evidence — nothing simulated.

Run the live demo →