Verifiable credentials, signed by you.
Issue standards-based credentials signed by your organisation. Compatible with the EU Architecture & Reference Framework and any SD-JWT-VC wallet.
Read the docsWhat it is
Each primitive is independently deployable. Use them together for a complete identity stack, or pick one to slot into the system you already have.
Issue standards-based credentials signed by your organisation. Compatible with the EU Architecture & Reference Framework and any SD-JWT-VC wallet.
Read the docsCompose new verification flows from a library of primitives. Age, residency, accreditation, membership, without writing cryptography yourself.
Read the docsAdapters for the EU Digital Identity Wallet and the SD-JWT-VC standard. Optional: bring your own wallet, or skip the wallet layer entirely.
Read the docsBuild your own flow
Two opinionated flows we've built on top of the platform. Best when the use case matches: guest check-in or age-gating.
See productsBuild a flow we haven't shipped yet: accreditation, residency, professional licensing, membership, custom regulatory checks. Same primitives, your shape.
Talk to usExamples
Two SDK calls cover most of what the platform does. Full reference and language-specific examples on docs.partisia.com .
import { issue } from '@partisia/sdk';
const credential = await issue({
subject: '[subject_id]',
claims: { age: 19, country: 'DK' },
signer: process.env.PARTISIA_SIGNER,
});
// Hand the credential to the user's wallet,
// or store it under your own custody. import com.partisia.sdk.Partisia;
import com.partisia.sdk.Credential;
import java.util.Map;
Credential credential = Partisia.issue()
.subject("[subject_id]")
.claims(Map.of("age", 19, "country", "DK"))
.signer(System.getenv("PARTISIA_SIGNER"))
.execute();
// Hand the credential to the user's wallet,
// or store it under your own custody. import "github.com/partisia/sdk-go"
credential, err := partisia.Issue(ctx, partisia.IssueRequest{
Subject: "[subject_id]",
Claims: map[string]any{"age": 19, "country": "DK"},
Signer: os.Getenv("PARTISIA_SIGNER"),
})
// Hand the credential to the user's wallet,
// or store it under your own custody. from partisia import issue
import os
credential = issue(
subject="[subject_id]",
claims={"age": 19, "country": "DK"},
signer=os.environ["PARTISIA_SIGNER"],
)
# Hand the credential to the user's wallet,
# or store it under your own custody. import { verify } from '@partisia/sdk';
const result = await verify({
proof: request.body.proof,
require: { ageAbove: 18 },
issuer: '[trusted_issuer_id]',
});
if (result.ok) grantAccess();
else denyWithReason(result.reason); import com.partisia.sdk.Partisia;
import com.partisia.sdk.VerifyResult;
import java.util.Map;
VerifyResult result = Partisia.verify()
.proof(request.body().proof())
.require(Map.of("ageAbove", 18))
.issuer("[trusted_issuer_id]")
.execute();
if (result.ok()) grantAccess();
else denyWithReason(result.reason()); result, err := partisia.Verify(ctx, partisia.VerifyRequest{
Proof: req.Body.Proof,
Require: partisia.Requirements{AgeAbove: 18},
Issuer: "[trusted_issuer_id]",
})
if result.Ok {
grantAccess()
} else {
denyWithReason(result.Reason)
} from partisia import verify
result = verify(
proof=request.json["proof"],
require={"age_above": 18},
issuer="[trusted_issuer_id]",
)
if result.ok:
grant_access()
else:
deny_with_reason(result.reason) Deploy
Managed by us, in the region you choose.
A single image. Bring your own Kubernetes.
Inside your VPC. No Partisia servers in the data path.
Control plane in cloud, data plane on-prem. Documented.