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 · reference receiptready
$ vrfy check rcpt_41c7
verdict unknown
retained after answer: 0 bytes
break a receipt

Change one number. Watch it fail. preview

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

receipts · reference set3 receipts
receiptrailamountverdict
receipts are illustrative · 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 · reference 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 a reference one. The check runs in this page. Nothing is sent and nothing is kept.

receipt.json
verdictunknown
unknown
hand it a receipt

reference field · keys and receipts are illustrative · 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
reference receipt · illustrative keys · 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 · reference 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.

reference issuer · illustrative keys · 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 issuerreference
signing keys
signings a month
    plan
    a month
    cost to serve
    margin
    anchorspublic list prices
    • Key service elsewhere, per key$1 / mo
    • Key service elsewhere, requests$0.03 / 10k
    • vrfy, extra key with rotation$10 / mo
    • Checking a receipt, anywhere$0

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

    every line, with its cost
    linepricecost to servemarginstate
    The checkEvery verdict, for anyone, always.$0 · foreverfractions of a cent / M-SET
    Issuer tooling, indie1 hosted key and 1M signings a month, libraries, the test bench.$99 / mo$496%SET
    Issuer tooling, team5 keys and 10M signings a month, shared keys, the test bench for everyone.$499 / mo$3593%SET
    Extra key hostingEach key past your plan, with rotation and history.$10 / key / mo$280%SET
    Extra signingsSignings past your plan.$0.10 / 10k$0.03 / 10k70%SET
    Verified-issuer markAn automated key binding plus one review, each year.$249 / yr~$4.1798%SET
    AssuranceUptime terms and support, in an enterprise contract.from $12k / yr--SET
    reference issuer · illustrative · cost to serve is an estimate from public vendor rates · margin bar ticks at 60%
    brand

    The mark answers.

    The green square, stamped with the check. Drawn at every size, never scaled down from the wordmark.

    favicon · 64 / 32 / 16 · drawnnever animates
    64
    32
    16
    browser tab16px in place
    vrfy · don't trust, verify.
    new tab
    navmark left of the word
    buttons + verdict chipsverdicts are rendered, never clicked
    defaulthovercheck a receiptvalidnot validlistedunknown
    the check draws itselfon resolve only · tap to replay
    marks96 / 48 / 22
    colorverdict colors only, never decoration
    vrfy.sh/live · reference 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
    reference feed · illustrative receipts · 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
    reference receipts · illustrative · field mapping from the x402 payment response preview
    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
    reference · illustrative · 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 · reference keys · digests are real sha-256 · signing is simulated · commands shown are a preview
    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

    reference issuer · illustrative keys and times · 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.
    reference issuers · illustrative · mark design preview
    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
    reference checks · illustrative · 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.

    reference sign-in · illustrative · 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 · reference 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
    reference batch · illustrative receipts · 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.

    reference sign-up · nothing is sent · already an issuer? sign in
    vrfy.sh/status · reference · 30 days to 2026-09-21

    Is it answering? Every part, every day.

    Every part of vrfy, day by day. When a part ran slow or stopped, it gets a plain note: what happened, what the answers lost, and what they kept. vrfy keeps nothing, so the answer to the last one is always the same.

    answering
    every part running · checked 2026-09-21 18:00
    parts
    days
    notes
    wrong answers
    0
    show
    reference status · illustrative days and notes · not a live availability claim · nothing is checked or sent
    notes · last 30 days
    Unknown, never wrong.When vrfy can't be sure, it says unknown. A slow day never turns into a wrong valid.
    Nothing to lose.vrfy keeps no receipts, so no day can lose one. Retained is 0 bytes, every day.
    Check it yourself.The keys are public and the offline kit needs nothing from us. A stopped vrfy never stops you.
    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