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.

[CTA — pending offering decision]
Show a receipt for
receipt · seq 1042 permitted
Covered by the signature
agent_id  "reconciliation-bot"
sequence_number  1042
previous_receipt_hash  "9f2c…a71e"
source  "mcp"
action  "data.read"
authorized_result  "permitted"
requested_at  "2026-09-03T09:41:22Z"
policy_snapshot  {
spend_cap_usd  50,
rate_limit_rpm  60,
allowed_actions  ["data.read"]
}
Recorded, outside the signature
outcome_type  "mcp_tool"
outcome_magnitude  { records: 1284 }
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. An OpenAI-compatible LLM proxy at proxy.lvyer.io, an MCP aggregator at mcp.lvyer.io, and a REST proxy at http.lvyer.io. Agents change one URL.

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. Export what an auditor asks for.

agent.py
import anthropic

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

# ↑ authenticated · policy checked · receipt signed and chained

Changelog

DRAFT — confirm entries and dates with Justin
AUG 27, 2026

Brand identity across the dashboards

The cloud and admin dashboards now share one visual system.

AUG 17, 2026

HTTP gateway

Route plain REST calls through LVYER by prefixing requests with the upstream slug. Credentials injected server-side.

AUG 11, 2026

Signed, chained receipts

Ed25519 over a SHA-256 canonical hash, with per-agent sequence numbers and previous-receipt hashes.

Start building the record

The record compounds from the day you turn it on.

[CTA — pending decision]
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

Where LVYER sits in the call path and what happens to a request as it passes through.

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, service, date and outcome, and export a range.

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.
UpstreamsThe external servers LVYER proxies to. URL, transport, credential and injection format, set once.
ServicesA named configuration binding an upstream to a credential and a default policy.

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.io/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.

MCP_SERVER_URL=
https://mcp.lvyer.io
MCP_API_KEY=
lvyer_ak_xxxxxxxxx

HTTP Gateway

REST proxy. Prefix the request with the upstream slug; the credential is injected server-side.

# agent calls
https://http.lvyer.io/
  {upstream}/{path}

Reference

Agent keys

The lvyer_ak_ scheme, rotation, and revoking a single agent.

Credential injection

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

Policies

Spend caps, rate limits, allowed actions and approval thresholds, per agent per service.

Receipts API

Query, filter and export receipts. Verify a signature and walk the chain.

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.

data.accessRead or write, resource, scope, record count
messaging.sendTo whom, internal or external, channel type
paymentAmount, currency, direction, counterparty
code.executionWhat ran, where, as whom
state.mutationCreate, update or delete on a system of record
llm.inferenceModel, tokens, cost

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

Exporting a range, 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.

  • ·All three gateways
  • ·Signed, chained receipts
  • ·[Retention or volume cap — to be decided]
Request early access
50 – 200 employees
$2,333per month, billed annually

$28,000 per year. Central posture.

  • Unlimited agents and unlimited governed calls
  • All three gateways — LLM, MCP and HTTP
  • Ed25519-signed, hash-chained receipts
  • Per-agent spend caps, rate limits and access policies
  • Audit export and signature verification
200 – 1,000 employees
$4,583per month, billed annually

$55,000 per year.

  • Everything in the band below
  • Multiple teams with scoped policy
  • Single sign-on
  • 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_resultPermitted or denied
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.

data.accessRead or write, resource, scope, record count
messaging.sendTo whom, internal or external, channel type
paymentAmount, currency, direction, counterparty
code.executionWhat ran, where, as whom
state.mutationCreate, update or delete on a system of record
llm.inferenceModel, tokens, cost

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.