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
}
Recorded, outside the signature
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 llm-proxy.lvyer.com — one env var. MCP: add mcp-proxy.lvyer.com as a single MCP server to get all assigned tools. HTTP: route any REST API through http-proxy.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.

And what isn't covered

Cost, duration and magnitude are recorded but sit outside the signature. We show you the boundary.

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 services with 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, service, date and outcome in the audit view.

agent.py
import anthropic

# One URL change — LVYER records the rest
client = anthropic.Anthropic(
    base_url="https://llm-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, wiring credentials and services, setting policy, 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 five steps

Register an agent, add a credential, define a service, assign it, and point your agent at the gateway.

Key concepts

Agents, credentials, upstreams and services — and how a policy attaches to each.

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.
UpstreamsExternal MCP servers or REST APIs LVYER proxies to. Registered by URL, transport, slug and optional credential.
ServicesA named configuration: an LLM provider or upstream, a credential, and policy constraints. Created once, assigned to agents or teams.

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://llm-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-proxy.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-proxy.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 and policy snapshot are signed. Cost, duration, magnitude and the denial reason are recorded outside it.

Handing a receipt to an auditor

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

Pricing

Priced on the size of your organisation, not your call volume

A flat platform subscription, banded on headcount. Agents generate many times the call volume of people, so per-seat pricing breaks and metered pricing punishes the governance you were asked to put in.

Evaluation

Free tier not yet defined. Registration is currently invitation-only. This column is blocked on the offering decision.

  • ·LLM, MCP and HTTP gateways
  • ·Signed, chained receipts
  • ·[Retention or volume cap — to be decided]
50 – 200 employees
$2,333per month, billed annually

$28,000 per year. Central posture.

  • Unlimited agents and unlimited governed calls
  • LLM, MCP and HTTP gateways
  • Ed25519-signed, hash-chained receipts
  • Per-agent spend caps, rate limits and access policies
  • Audit log with filtering by agent, source and outcome
200 – 1,000 employees
$4,583per month, billed annually

$55,000 per year.

  • Everything in the band below
  • Multiple teams with scoped policy
  • Priority support

Why headcount. The band is verifiable from your identity provider, so nobody has to argue about how many agents you are running or reconcile a bill against a log.

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.

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. The signed fields are fixed at call time — they cannot be changed without invalidating the signature. Fields outside the boundary are recorded but not attested to.

Showing the boundary explicitly is intentional. A receipt that claims to cover everything is harder to trust than one that is precise about what it covers.

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
Recorded, outside the signature
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.