Over the past year, we have been building our wallet verification widget from a small, focused component into a flexible self-hosted wallet verification solution.
At the beginning, the goal was simple: help a user prove that they control a wallet. As usual, “simple” lasted until the first real customer use case. Then came different blockchains, different wallet apps, signature quirks, transaction monitoring, fallback flows, branding needs, dashboard requirements, webhooks, embedded integrations, and a few wallet behaviours that probably made sense to someone at the time.
The widget we have today has been shaped heavily by our customers. They brought us real production requirements, edge cases, and integration needs. We built around those needs, extended the product, and kept polishing the parts that matter most: speed, reliability, flexibility, and user experience.
We can now say, without adding too much marketing perfume, that we believe it is the best wallet verification tool on the market.
Multiple verification flows for real-world wallets
There is no single wallet verification method that works perfectly for every chain, wallet, user, and compliance process. A good verification product needs more than one path, and it needs to fall back gracefully when the preferred method is not available.
Our widget supports several verification flows.
The preferred method is cryptographic signature verification, where the user signs a message with their wallet app. This proves wallet ownership without requiring a transaction. In the widget, this appears as a simple “Sign with your wallet app” flow, but under the hood there is a lot of compatibility work to make it feel simple.
When signature verification is not available, we support the Satoshi test. The user sends a small transaction from their wallet to prove ownership. This is useful for wallet apps or chains where cryptographic signing is not supported or not reliable enough.
The widget also supports visual proof, including multiple images and videos. This gives teams another way to collect evidence when automated verification is not enough, or when manual review is part of the process.
Finally, there is self declaration as a fallback method. It is not the strongest proof, but fallback methods matter in real compliance workflows. The world is not perfectly standardised. This remains unfortunate, but we have decided to continue anyway.
You can see the currently supported blockchains for both cryptographic signature and Satoshi test verification in our supported blockchains documentation.
Fast and robust, because users do not enjoy waiting
A slow verification flow creates friction. Users start wondering whether they did something wrong, businesses receive more support questions, and compliance teams wait for results. None of this improves anyone’s day. Speed has been one of our main priorities.
For cryptographic signature verification, we have spent a lot of effort polishing and extending WalletConnect/Reown library capabilities. We have added additional blockchain support, built workarounds for wallet apps that do not support certain signature methods, and handled cases where wallets are sensitive about message content or signing formats.
In practice, the user should not need to know which signing method their wallet supports. They should open their wallet app, approve the signature request, and continue.
For Satoshi test verification, we use multiple blockchain monitoring tools to make detection as fast and reliable as possible. Our Bitcoin wallet verification, for example, detects the transaction instantly from the mempool. This means we do not need to wait for the transaction to be included in a block before recognising that the user has made the verification transaction.
For the user, this makes the process feel instant. For the business, it means fewer abandoned verifications and fewer confused customers. For us, it means we have spent a healthy amount of time thinking about mempools, which is one of the quieter forms of character building.
Verification results that are useful for compliance teams
Completing the verification is only one part of the process. Our clients also need reliable ways to receive, review, and act on the result.
The widget supports webhook notifications, so our clients can automatically receive verification updates in their own systems. Verifications can also be managed directly from the Client Dashboard, which is useful for reviewing cases, checking statuses, and working with submitted proof.
On the client side, verification results are enriched with wallet risk score data and additional data points where available. For example, we may detect signals that suggest a wallet is actually custodial, even if the user submitted it as a self-hosted wallet. This gives VASPs and compliance teams more context when making decisions, instead of treating wallet ownership verification as a simple yes/no box.

The goal is not only to verify control of the wallet, but to provide useful information around that verification.
Flexible integration: standalone or embedded
The wallet verification widget can be used together with our main Travel Rule messaging flow, but it can also be used as a standalone module. This was an important design decision.
Some customers want wallet verification as part of a larger Travel Rule process. Others want to verify a wallet separately, outside the main messaging flow. Both should be possible.
A customer can create a verification and share the generated URL directly with the user. The user completes the verification in a standalone flow, and the customer receives the result through webhooks or reviews it in the Client Dashboard.
Alternatively, the widget can be embedded directly into the customer’s own application as a web component. In that setup, the user never needs to leave the app, and wallet verification becomes part of the existing product experience.
You can find the technical integration details in our developer portal, and a broader product overview on our self-hosted wallet verification page.
Live widget preview
This is the actual widget running in preview mode. Feel free to play around with it, customise the appearance below, and go through the demo flows to see how the experience works in practice.
Customise the widget
Brand
Logo URL used for branding.
Brand
Logo URL used for branding.
Typography
Font family, weight, and base sizing.
Typography
Font family, weight, and base sizing.
Colors
Text, button, and widget background colors.
Colors
Text, button, and widget background colors.
Layout
Control flow selection order and how the available space is used.
Layout
Control flow selection order and how the available space is used.
Buttons
Shape and emphasis for primary actions.
Buttons
Shape and emphasis for primary actions.
Customisable by design
Every customer has a different product, brand, and user journey. A verification widget should not look like it was dropped into the page from another planet.
The widget can be customised with customer branding, including logos, icons, fonts, colours, and other styles. It can be adapted to match the surrounding product instead of feeling like a disconnected third-party tool.
The verification experience itself is configurable as well. Customers can enable or disable individual verification flows and control the order in which they appear. For example, one customer might want to show cryptographic signature verification first, followed by Satoshi test, visual proof, and self declaration. Another customer might disable self declaration entirely or prioritise a different method based on their risk model.
This flexibility matters because wallet verification is not one-size-fits-all. A crypto-native product, a regulated financial institution, and a Travel Rule provider may all need wallet verification, but they do not necessarily need the same flow.
Built with customers, shaped by production
The widget we have today was not designed in isolation. It has been shaped by customer needs over the past year.
Some customers needed broader blockchain support. Some needed faster Satoshi test detection. Some needed better result handling. Some wanted a standalone verification URL. Some wanted an embedded web component. Some needed more control over branding, flow order, and fallback methods.
We built, adjusted, and improved the widget around those real requirements. We continue to do so as new customer needs, wallet behaviours, and blockchain support requirements emerge.
That is why we are confident in the product. It is not based only on what we thought customers might need. It has been shaped by what customers actually needed when putting wallet verification into production.
The result is a wallet verification tool that is fast, simple, robust, and highly customisable. It supports cryptographic signatures, Satoshi test verification, visual proof, and self declaration. It works across major blockchains, supports standalone and embedded integrations, provides webhook and dashboard-based result handling, and enriches verifications with wallet risk data where available.
After a year of building, extending, polishing, and occasionally negotiating with wallet behaviour that no reasonable person would design on purpose, we are proud of where the widget has landed.
We think it is the best wallet verification tool on the market.
And because we are Estonian, you can assume we have already reduced that statement by 30% for modesty.