About
We built the verifier we could not find.
Tessio is age verification using EU wallet credentials, 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.
The verifier code turned out to be the smaller part of it. Most of the EU's reference implementations are in Kotlin, Swift and Python. Whichever library a .NET team picks, someone still has to keep the trust lists current, hold the signing keys and keep evidence of each check. The hosted vendors we looked at asked for a passport scan or a selfie, which was the data our client wanted to avoid.
So we did both: we wrote a verifier for their stack and open sourced it, and we run the trust layer around it as Tessio.Cloud. 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.
For an operator who would rather make an API call than run a verifier, that is what Tessio.Cloud is. Nothing in it asks anyone for a document or a selfie.
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 the EU age verification app 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
Validators for the EU identity ecosystem: SD-JWT VC, mdoc, eIDAS signatures, the EU trusted lists, the wallet trust anchors and the C2PA trust lists. 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 that wants to use that wallet has to register first and then identify itself to the wallet with such a certificate, incumbents included (Article 5b of Regulation (EU) 2024/1183 and Article 7 of Implementing Regulation (EU) 2025/848).
So one of the two paths is open and the other is not yet. Build the integration now against the same API the second path will use. You 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 the market whose rules we had to satisfy first, and it shaped how the product reads. Production runs on dedicated hardware in Helsinki, Finland, so it is EU built and EU hosted. 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 whether Tessio fits it yet.
Working on age verification?
Let's talk
If you run an age assurance pilot, are planning a 2027 rollout or work in a member state team that wants an EU aligned reference stack, get in touch.