The platform
Six modules that carry a payment all the way.
Most payment tooling stops at the transfer. Payvol covers what comes before it and what comes after: the ask, the check, the path, the sighting, and the record that closes the loop.
Pick what you need
Each one stands alone. Together they close the loop.
Adopt the request format and nothing else. Or skip straight to reconciliation over settlements you already have. Nothing forces the whole stack.
Request
Create a request once and share it as a QR, a link or a tap.
Available Explore RequestVerify
Check a request rule by rule, and say which rule each verdict came from.
Available Explore VerifyRoute
Express how a request may be settled, without naming one way.
In development Explore RouteObserve
Watch settlements arrive on your own participant.
In development Explore ObserveReconcile
Match a payment to the invoice that asked for it.
In development Explore ReconcileConnect
Reach the systems that already run finance.
Planned Explore ConnectWhere the work goes
Three ways to get a payment closed on Canton.
The transfer is the easy part. This table is about everything else, and who ends up owning it.
| Responsibility | Build it yourself | One vendor's stack | Payvol |
|---|---|---|---|
| Request format | Yours to invent | Theirs, closed | Open profile |
| Wallet compatibility | One wallet at a time | Their wallet | Any conforming wallet |
| Settlement | Token Standard | Through them | Token Standard, directly |
| Who sees your payments | You | You and them | Payer, payee and the instrument registry |
| Reconciliation rules | Written twice, differently | Opaque | Fixtures you can read |
| If you leave | Nothing to leave | Rewrite | Keep the format |
The payer, the payee and the instrument registry can read the identifier. A party that took no part reads nothing. The registry is a signatory of the template, so this is structural rather than a choice of ours.
Underneath
One profile, or none of this works.
Every module reads the same canonical bytes and the same identifier. That is what lets one team adopt Request, another adopt Reconcile, and their systems still agree about what a payment was.
The format and the conformance suite are open. Build your own implementation and check it against the same vectors we run.
import { encode } from '@payvol/core'
import { payloadDigest } from '@payvol/core/draft02'
// the same bytes, whoever produced them
const uri = encode(request)
const identifier = payloadDigest(payload)
// every module downstream reads that identifier and no other Start with one module.
Most teams start with Request, because it changes nothing else about how they work. The six are 6 stages of one payment, not a stack you have to buy.