About
We built the verifier we could not find.
Tessio is age and identity verification for the EU Digital Identity Wallet, built in Stockholm. It started as one client's problem, became an open source .NET package and grew into a product.
How it started
A client came to us with an ordinary requirement: verify age in Sweden, inside the .NET stack they already ran, so we went looking for something to integrate.
There was a hole where that component should have been. The open source verifier tooling is Kotlin, Rust and TypeScript, so a .NET team either ports it or runs a service in another language beside everything else they own. The hosted vendors solved a different problem, and solved it by collecting a passport scan or a selfie. Either route left our client holding identity data they never asked for.
So we wrote the verifier ourselves, and we open sourced it. Tessio.Verifier went on NuGet in July 2026 under Apache-2.0: five packages covering OpenID4VP 1.0 with DCQL, SD-JWT VC and ISO 18013-5 mdoc, with the COSE, CBOR and X.509 chain work underneath.
Why it became a product
While we were building it, the wallet stopped looking like a distant problem. Regulation (EU) 2024/1183 makes all 27 member states issue a Digital Identity Wallet, and from December 2027 makes relying parties bound to strong user authentication, micro and small enterprises aside, accept it when a user asks. Every operator running an age gate in Europe has the same piece of work ahead of it either way: iGaming, age restricted retail, dating, adult platforms.
Most of them do not want to run a verifier, they want an API call. The age verification products already on the market were still asking people for documents and selfies, which was the model we had just built our way around.
So we spun the library out into a product of its own. Tessio.Cloud went live at the end of July 2026: the same open source verifier underneath, hosted by us, with API keys, webhooks, a dashboard and an audit log around it. Taking the package and running it yourself stays a first class option, it is how Tessio started.
What we build
One core, three ways to use it.
Hosted · live now
Tessio.Cloud
The hosted API and dashboard. You start a check, the person answers it from their wallet, and a signed result lands on your webhook. Keys, webhooks, usage analytics and an audit log are in production today.
Sign in →Open source · Apache-2.0
Tessio.Verifier
The ASP.NET Core verifier underneath, and the package this all started as. Five packages on NuGet for .NET 8 to 10, covering OpenID4VP 1.0 with DCQL, SD-JWT VC and ISO 18013-5 mdoc. It passes the OpenID Foundation conformance suite for HAIP verifiers in both formats.
Get it on NuGet →Free · no signup
Tessio.Labs
Five validators for the EU identity ecosystem: SD-JWT VC, mdoc, eIDAS signatures, the EU trusted lists and the wallet trust anchors. Nothing you paste is stored.
Open Tessio.Labs →How we work
Four rules we hold ourselves to, in the product and on this site.
Prove the claim, not the person
We ask a wallet for one boolean and take nothing else. There is no document store to breach, because the identity data never crosses the wire.
Unanswerable is its own state
A check that cannot be answered says so, rather than guessing. The worst thing a verification product can do is invent a pass.
Publish what is not ready
Our security page carries a section listing what we do not have yet. A prospect who finds out later is worse than one who knew up front.
Read the code, not the promise
The verifier is open source and tested against an external conformance suite that plays the wallet and attacks us, so you can check our work rather than take our word for it.
Where we are today
Tessio.Cloud runs in production. Signup is open and a test project works as soon as you create one. You can integrate and test end to end against our sandbox now.
Age checks from the EU age verification app work in production today. One completed against our live API on 25 August 2026, with the attestation checked against the age verification trusted list the Commission publishes. Live checks are anchored on the Commission's production list and test checks on its acceptance list, and the security page says what that means for you.
The EU Digital Identity Wallet is a separate path and it is still gated. That wallet checks who is asking before it releases anything, so it needs a relying party access certificate, which we applied for on 5 August 2026 and do not yet hold. Every relying party in Europe sits behind that same gate, incumbents included.
So one of the two paths is open and the other is not, which is further than we were a month ago and still short of finished. Build the integration now, against an API that is stable, and turn the second path on when the certificate lands. The full list of what we do not have yet is on the security page.
Built in Sweden
Tessio is built and maintained by Triple Down AB, a small software company in Stockholm, Sweden (org. no. 559333-6091, Skeppargatan 55, 114 59 Stockholm). We build our own products and take on client work, which is where this one came from.
Sweden is not decoration on this page, it is the market whose rules we had to satisfy first and the reason the product reads the way it does. Production runs on dedicated hardware in Helsinki, Finland, so it is EU built and EU hosted, and the data stays in the EU.
We are a lean team, so an email to hello@tessio.eu reaches the people who wrote the code. Tell us what you are building and we will tell you plainly whether Tessio fits it yet.
Working on age or identity verification?
Let's talk
We are talking to operators running age assurance pilots, integrators planning their 2027 rollout and member state teams looking for an EU aligned reference stack. If that is you, get in touch.