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 · 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.

price an issuerexample
signing keys
signings a month
    plan
    a month
    • vrfy, extra key with rotation$10 / mo
    • Checking a receipt, anywhere$0

    The check never costs anything. The prices are for issuers who sign.

    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 · commands shown are examples
    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

    We email you a 6-digit code. No password.

    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
    $ vrfy check rcpt_41c7VERIFIED
    same answer · retained after answer: 0 bytes · example receipt
    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

    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 receipt / key-window check
    404

    Nothing here to check.

    check a receipt