Signed receipts for AI agents

Not just what your agent did.
Why it was allowed to.

Every platform can route agent calls and cap the spend. That's now a commodity. What nobody produces is the record of why an action was allowed — and that record is what a compliance team, an auditor, and eventually an insurer relies on, because it doesn't come from the platform being questioned.

One URL change. The gateway is the delivery mechanism. The receipt is the product.

Create an account

Access is currently limited.

Show a receipt for
receipt · seq 1042 allowed
Covered by the signature
agent_id  "reconciliation-bot"
sequence_number  1042
previous_receipt_hash  "9f2c…a71e"
source  "mcp_gateway"
action  "stripe__list_payments"
authorized_result  "allowed"
requested_at  "2026-09-03T09:41:22Z"
policy_snapshot  {
rate_limit_rpm  60
}
outcome_type  "mcp_tool"
outcome_magnitude  { tool: "stripe__list_payments", output_bytes: 8419 }
duration_ms  412
ed25519 · sha-256 · chained3f9a…c8d1

Receipt

Each action produces a record carrying the authorising policy and the constraints that permitted it. Ed25519 signature over a SHA-256 hash, with a per-agent sequence number and the previous receipt's hash, so entries cannot be reordered.

Govern

Per-agent spend caps, rate limits, and service access policies. Set once on a service, enforced on every call. Changes propagate to all assigned agents instantly.

Integrate

Three gateways. LLM: point your SDK at proxy.lvyer.com — one env var. MCP: add mcp.lvyer.com as a single MCP server to get all assigned tools. HTTP: route any REST API through http.lvyer.com/{slug} — one slug per registered upstream, same agent key for all.

Why a separate record

The platform cannot be the witness for itself

Existing governance tools capture what happened. LVYER captures why it was authorised to happen — and the value of that record rests on where it comes from. A platform attesting to its own conduct is self-reporting, and the more of the stack it owns, the less its attestation is worth.

Our thesis is that this separation is what makes the record defensible. It is a positioning argument, and it is what our discovery conversations are testing.

What was authorised

Who acted, under which policy, and whether it was permitted — all inside the signature.

In order, provably

Each receipt carries a sequence number and the hash of the one before it. Entries cannot be reordered.

The full outcome is signed

Outcome type, magnitude, duration, and any denial reason are inside the signature. The complete picture of what happened is attested, not just whether it was permitted.

How it works

Drop in. Keep the record.

No SDK changes. No architecture rewrites. Every registered agent's calls pass the gateway and produce a receipt.

01

Register the agent

Name it in the dashboard and get a lvyer_ak_ key back. Shown once, never stored. Assign tools with per-agent spend caps and rate limits.

02

Point it at LVYER

Set one environment variable. Works with the Anthropic SDK, the OpenAI SDK, or any MCP-compatible client. The request format never changes.

03

Read the receipts

Every call is authenticated, policy-checked and receipted. Filter by agent, source and outcome in the audit view.

agent.py
import anthropic

# One URL change — LVYER records the rest
client = anthropic.Anthropic(
    base_url="https://proxy.lvyer.com/anthropic",
    api_key="lvyer_ak_••••••••••••",
)

# ↑ authenticated · policy checked · receipt signed and chained

Start building the record

The record compounds from the day you turn it on.

Create an account
Search the docs

LVYER Docs

Using the dashboard. Registering agents, creating LLM, MCP and HTTP tools, setting per-assignment limits, and reading the audit view.

Start here

How it works

Three gateways sit in front of your agents' calls — LLM, MCP and HTTP. Each call is authenticated against a named agent, policy-checked, and receipted before the response returns.

Setup in four steps

Vault a credential, create LLM/MCP/HTTP tools, register an agent, assign tools with limits.

Key concepts

Agents, credentials and tools — and how limits attach at assignment time.

Monitoring

Reading the audit view: filter by agent, source (llm_proxy, mcp_gateway, http_gateway) and outcome.

What you configure

AgentsEvery entity making calls through LVYER. Each gets a lvyer_ak_… key, shown once.
CredentialsYour provider keys and upstream tokens, encrypted at rest. Agents never see these values.
ToolsLLM, MCP, or HTTP — a named configuration linking an provider or upstream to a credential. Created once, assigned to agents or teams with per-assignment limits.

Three gateways

LLM Proxy

OpenAI-compatible. Works with any SDK that respects a base URL override — Claude Code, LangChain, the OpenAI Python SDK.

ANTHROPIC_BASE_URL=
https://proxy.lvyer.com/anthropic
ANTHROPIC_API_KEY=
lvyer_ak_xxxxxxxxx

MCP Gateway

One unified tool list assembled from every upstream the agent can reach. Agents never hold credentials.

# e.g. .claude/settings.json
"url": "https://mcp.lvyer.com"
"Authorization": "Bearer lvyer_ak_..."

HTTP Gateway

REST proxy. Register any upstream API, assign it to an agent as a service. Credential is injected server-side; the agent never sees it.

# agent calls
https://http.lvyer.com/
  {slug}/{path}

Reference

Agent keys

The lvyer_ak_… scheme. Disabling or deleting an agent immediately invalidates its key and stops all gateway calls.

Credential injection

Bearer, apikey, or any custom header scheme the upstream requires.

Policies

Spend caps and rate limits, per agent per service.

Audit log

Query and filter by agent, source or outcome. Verify a receipt signature and walk the chain to show nothing was reordered.

The taxonomy

Receipts are typed by action, not by tool

Treating every tool generically captures nothing about severity. Building a schema per tool is a maintenance treadmill against every vendor's release cycle. Typing by action avoids both, and it produces the categories an auditor actually asks about.

A tool that changes its schema downgrades to a generic receipt rather than breaking the call.

inferenceModel, provider, tokens in/out, cost
mcp_toolTool name, upstream server, input and output hashes
paymentAmount, currency, direction, counterparty
data_accessResource, operation, record count
communicationChannel, recipient type, direction
shell_executionCommand, working directory, exit code
file_operationPath, operation, size in bytes
http_callMethod, upstream, status code

Understanding the record

Anatomy of a receipt

Every field, what it means, and where it comes from in the call path.

What the signature covers

Identity, sequence, previous hash, action, authorisation result, policy snapshot, outcome type, magnitude, duration, and denial reason are all signed. The full picture of what happened is attested.

Handing a receipt to an auditor

Verifying a signature, and walking the chain to show nothing was reordered.

Pricing

Simple, usage-based pricing

Pay for what you govern. No seat limits, no agent caps — every plan includes unlimited agents and teams. Scale your governance without scaling your bill.

Free
$0forever

Get started with no commitment.

  • ✓10,000 governed calls per month
  • ✓Unlimited agents & teams
  • ✓LLM, MCP and HTTP gateways
  • ✓Ed25519-signed, hash-chained receipts
  • ✓30-day audit log
  • ✓Community support
Pro
$29/month

For teams running agents in production.

  • ✓500,000 governed calls per month
  • ✓Unlimited agents & teams
  • ✓LLM, MCP and HTTP gateways
  • ✓Ed25519-signed, hash-chained receipts
  • ✓1-year audit log
  • ✓$2 per 100k additional calls
  • ✓Email support
Enterprise
$149/month

For organisations with high call volumes.

  • ✓5,000,000 governed calls per month
  • ✓Unlimited agents & teams
  • ✓LLM, MCP and HTTP gateways
  • ✓Ed25519-signed, hash-chained receipts
  • ✓1-year audit log
  • ✓$1.50 per 100k additional calls
  • ✓Priority support

Calls are never blocked on Pro and Enterprise. Once you exceed your monthly allowance, additional calls are billed at the overage rate. You'll receive an email warning at 80% of your limit so there are no surprises.

Both allowed and denied calls are governed decisions. A blocked call produces a receipt too, and the record of what your agents were stopped from doing is the half an auditor asks for first.

No seat limits, ever. Governance should scale with your agents, not create a perverse incentive to run fewer of them.

Security

A record you can hand to an auditor

The value of a receipt depends entirely on what it covers, how it is signed, and whether it can be independently verified. LVYER makes every boundary explicit.

The signature boundary

What is signed and what is not

Ed25519 over a SHA-256 canonical hash. All material fields — identity, sequence, action, authorisation result, policy, outcome type, magnitude, duration and denial reason — are fixed at call time. Changing any of them invalidates the signature.

Making the scope explicit is intentional. A receipt that is precise about what it covers is more useful to an auditor than one that claims everything without detail.

Inside the signature
agent_idWho acted
sequence_numberPosition in the per-agent chain
previous_receipt_hashBinds this entry to its predecessor
actionWhat was requested
authorized_resultallowed, blocked, or error
policy_snapshotThe exact constraints that applied
outcome_typeinference, mcp_tool, payment, http_call, …
outcome_magnitudeCost, tokens, records returned
duration_msCall duration
block_reasonHuman-readable denial explanation
The taxonomy

Receipts are typed by action, not by tool

Treating every tool generically captures nothing about severity. Typing by action produces the categories an auditor actually asks about, and a tool that changes its schema downgrades to a generic receipt rather than breaking the call.

inferenceModel, provider, tokens in/out, cost
mcp_toolTool name, upstream server, input and output hashes
paymentAmount, currency, direction, counterparty
data_accessResource, operation, record count
communicationChannel, recipient type, direction
shell_executionCommand, working directory, exit code
file_operationPath, operation, size in bytes
http_callMethod, upstream, status code

Credentials never leave the vault

Provider API keys and upstream tokens are encrypted at rest with AES-256-GCM under a key hierarchy that requires the server-side pepper to derive. Gateway workers read a short-lived decrypted bundle from KV — they never derive keys or access the encryption layer.

Two-path key hierarchy

A password-derived KEK protects credentials during account operations. A separate server-side KEK — derived from a secret that never leaves lvyer-api — is used to build the gateway bundle. A database breach alone cannot decrypt credentials.

Agent keys, not provider keys

Agents hold lvyer_ak_ keys — never real API keys. The real key is substituted at the gateway. Revoking an agent key immediately invalidates its bundle. Agents cannot escalate to other agents' credentials.

Immutable receipts

Database triggers block UPDATE and DELETE on the receipts table. The chain cannot be edited — only appended. Each receipt's signature can be independently verified using the published Ed25519 public key.

Contact

Get in touch

For early access, partnership enquiries, or anything else.