vrfy · the public checker

don't trust,
verify.

Hand vrfy a receipt. It checks the signature, the issuer key and the numbers, gives one answer, and keeps nothing.

public check · example receiptready
$ vrfy check rcpt_41c7
verdict unknown
retained after answer: 0 bytes
break a receipt

Change one number. Watch it fail. example · not live yet

Pick a receipt, edit any field, and vrfy recomputes the digest the issuer signed. One changed character and the math stops matching.

receipts · example set3 receipts
receiptrailamountverdict
example · not live yet · digests are real sha-256 computed in this page
rcpt_41c7
signed digest
recomputed here

checks live

It answers, then forgets.

Every check lands, resolves to one word, and the oldest row falls off. The log never grows. There is no directory to search.

checks live · example feedretained: 0
01 · receipts only

Receipts, never people.

vrfy checks the object you hand it. It has no lookup by name, account or wallet.

02 · same answer anywhere

You can check the checker.

Receipt bytes plus the issuer's public key give the same verdict on any machine, without vrfy.

03 · the law

The check is free. Forever.

A paid checker is a conflict. The money lives around the answer, never on the verdict.

vrfy.sh/check

Check a receipt.

Paste a receipt or load an example one. The check runs in this page. Nothing is sent and nothing is kept.

receipt.json
verdictunknown
unknown
hand it a receipt

example · not live yet · digests are real sha-256 · signature check is simulated against the published key list
vrfy.sh/offline

Pull the network. The check still answers.

The check is math on the receipt you hold and the public keys. Turn the network off, then check. Nothing leaves the tab, nothing is looked up, nothing is kept. Change one character and it fails, still offline.

this tabnetwork on
network
receipt you hold
the check needswhere it is
the receiptin your hand
vrfy-keys.jsonin this tab · 3 keys
a servernot needed
verdictunknown
unknown
pick a receipt, then check
during the check
example · not live yet · digests are real sha-256 computed in this tab · signature check simulated against the published key list
check it yourself

The keys are public.

You don't need to trust the issuer to check the issuer. Fetch the key file yourself, then check any receipt you hold.

GET issuer.example/vrfy-keys.json200

published keys · example issuer
keyalgstatusreceipts it signed

Tap a key to retire it. Receipts signed after a key retires stop holding. Receipts signed before still check, because the math has not changed.

example · not live yet · toggling here changes only this page
docs

One call. One word back.

vrfy has one job, so it has one endpoint. Send the receipt, get the verdict and the reasons.

Quickstart

$ curl -X POST vrfy.sh/v1/check -d @receipt.json
{
  "verdict": "valid",
  "checks": { "signature": "ok", "issuer_key": "ok", "digest": "ok", "chain": "ok" },
  "stored": false
}
$

No key, no account. The check is open to anyone who holds a receipt.

Verdicts

verdictmeans
validThe signature, key, digest and chain all hold.
not validAt least one check failed. The response names which.
listedThe receipt records a counterparty that was listed at screening time.
clearThe receipt records screening that came back clear.
unknownNot enough to answer. Never shown as red, never as green.

Receipt shape


The issuer signs the digest. The digest covers every other field. Change any field and the digest moves.

What is kept

Nothing from the receipt. vrfy caches public keys, which are public already. Every response carries "stored": false.

pricing

The check is free. Forever.

A paid checker is a conflict. Anyone can check any receipt they hold, at no cost. The money lives around the answer.

the check
$0

Every verdict, for anyone, always.

$99

A month, 1 key, 1M signings. Team is $499 with 5 keys and 10M.

$10

Per extra key a month. Extra signings $0.10 per 10k.

$249

A year. The issuer mark, backed by a key check.

$12k

From, a year, in an enterprise contract.

every line
lineprice
The checkEvery verdict, for anyone, always.$0 · forever
Issuer tooling, indie1 hosted key and 1M signings a month, libraries, the test bench.$99 / mo
Issuer tooling, team5 keys and 10M signings a month, shared keys, the test bench for everyone.$499 / mo
Extra key hostingEach key past your plan, with rotation and history.$10 / key / mo
Extra signingsSignings past your plan.$0.10 / 10k
Verified-issuer markAn automated key binding plus one review, each year.$249 / yr
AssuranceUptime terms and support, in an enterprise contract.from $12k / yr
vrfy.sh/live · example feed

Answered. Then forgotten.

Checks arrive, get one word back, and leave nothing behind. Each row keeps its verdict for three seconds, then the receipt is gone from this page too.

answered
0
not valid
0
retained
0 bytes
checks · newest first
timereceiptrailverdictkept
example · not live yet · verdicts are computed in this page from real sha-256 digests
any rail · x402 and wave

The whole rail. Not just ours.

vrfy checks standard x402 receipts the same way it checks WAVE's. Same four checks, same one word back. The rail is a field, not a favor.

receipt

verdictunknown
unknown
checkx402wave
example · not live yet · field mapping from the x402 payment response
vrfy attests · WAVE enforces

The gateway acts. vrfy proves it did.

Protection and screening happen in the gateway, before anything moves. vrfy never blocks anyone. It checks the receipt that says the stream was protected or the counterparty was screened.

what happened at the gateway
whodoes
WAVE gatewayprotects the stream, screens the counterparty
vrfychecks the receipt that says so
the receipt vrfy checks
unknown
example · not live yet · vrfy keeps nothing and blocks no one
for issuers · tooling

Sign it here. Check it here.

Build a receipt, sign it with your key, and run the same check anyone will run on it. Break it on purpose and see what they'd see.

new receiptkey k1_9f2a
sign a receipt to see it
what anyone seesunknown
unknown nothing signed yet
checkresult
$ vrfy sign receipt.json --key k1_9f2a
$ vrfy check receipt.json
test bench · example · not live yet · digests are real sha-256 · signing is simulated
indie
1 key

One issuer, libraries, the test bench.

see pricing

team
5 keys

Several signers, shared keys, the test bench for everyone.

see pricing

for issuers · key hosting

Rotate a key. Old receipts still hold.

Your key file is served at your own address, with every change kept. Rotate and watch which receipts still check.

issuer.example/vrfy-keys.jsonversion 1

history1 change
versiontimechange
receipts you already handed out
receiptkeysignedverdict

example · not live yet · verdicts computed in this page
for issuers · verified issuer

The mark says who. The math says yes.

A verified issuer has shown it serves its key file from its own domain. The mark names the issuer. It never changes a verdict.

two valid receipts
valid

how an issuer gets verified
stepwhat vrfy checks
01 domainthe key file is served from the issuer's own domain
02 keysthe keys in that file sign the issuer's receipts
03 historyevery rotation is kept, so old receipts still check
04 recheckthe file is read again on every check, nothing is cached
An unverified issuer's receipt still checks the same way. It is valid or not valid on the math alone.
example · not live yet
for teams · assurance

Assurance buys uptime. Never a different answer.

Teams that check at volume can pay for uptime terms and support. The verdict is the same one anyone gets for free. Pick a receipt and check it both ways.

one receipt · two checks
free check
valid
check under assurance
valid
same verdict · same digest
what assurance addsterms
uptime terms for the check endpointwith assurance
support for teams that check at volumewith assurance
a different verdict, or a softer onenever
example · not live yet · the verdict is computed the same way for everyone
vrfy.sh · sign in

Sign in to vrfy.

For issuers. Checking a receipt never needs an account.

Just checking a receipt?No account, no sign-in. Paste it and get the answer.
check a receipt

Sign in with your vrfy account

example · not live yet · nothing is sent · new issuer? start here
what the account is forissuers
  • issuer toolingSign receipts and test them on the bench.
  • key hostingPublish and rotate your vrfy-keys.json, with history.
  • verified issuerThe issuer mark on your receipts, backed by a key check.
  • assuranceUptime terms and support for teams that check at volume.
the same check either wayrcpt_41c7
signed out
$ vrfy check rcpt_41c7VERIFIED
signed in · example
$ vrfy check rcpt_41c7VERIFIED
same answer · retained after answer: 0 bytes · example · not live yet
vrfy.sh/batch

A thousand receipts. One word each.

Hand vrfy a whole batch. Every receipt gets its own answer, the same one it would get alone. The tally is the sum of the rows, and nothing is kept.

the batch
example · not live yet · each answer is the one a single check gives · nothing is kept
vrfy.sh · for issuers

Put your key where anyone can check it.

An issuer account hosts your key file at your own address. Checking a receipt still never needs an account.

example · not live yet · nothing is sent · already an issuer? sign in
vrfy / issuer.example / key history · example · not live yet

Keys rotate.
Old windows remain.

Rotate the issuer key. Select a receipt to see whether it was signed inside that key's published window.

published versionsv1
issuer key file09:00 UTC
kA_51e0

Published

current signer
historical keys retained
issuer.example/vrfy-keys.json
receipt checks / selected version
selected receipt / key-window check
vrfy.sh / proof checker · example keys / signature not verified

Drop the receipt.
Read the checks.

A receipt carries its fields, digest and issuer key. Watch each local check answer. A matching digest is not a verified signature.

receipt.jsonno file selected
local checkready
result
not checked

No receipt has been checked.

vrfy.sh / issuer.example / example key set

Keys have windows.
Receipts have times.

Inspect the three keys used by the receipt checker. The retirement boundary changes which sample receipts pass the key-window check.

issuer keys
selected key
issuer.example

algorithm label
example status
known retirement
sample receipts

example key fieldslocal only
sample receipts / key-window check
Example keys and receipts, not live yet. Material shown is not a public key file. This page checks key IDs and retirement times locally; it does not verify Ed25519 signatures, publish a key, or alter the receipt checker.
vrfy.sh / example receipts / local proof bundle

Put the checks
beside the claim.

Choose an existing example receipt. Package its fields, digest comparison and key-window result. A bundle makes the limits visible: the example signature cannot be verified here.

source receiptlocal example

Source: the receipt checker and the registry's k1_9f2a, k2_77d0 and retired k0_1c3e keys. No new receipt is issued.

proof packetnot assembled
what this packet can show
proof_bundle.jsonlocal · unsigned
Choose an example receipt and assemble a local packet.
No proof bundle is signed, stored, transmitted or registered here. Digest comparison is not a signature verification; an issuer's original public key and real signature verification are required for that claim.
404

Nothing here to check.

check a receipt