Skip to content

Credential APIs

The credential APIs behind everything we ship.

Issuance, verification, and wallet integration, delivered as APIs and SDKs you deploy inside your own infrastructure. Organisations run their own identity flows on them. VisitorPass and AgeVerify are two of those flows that we productised.

What you get

Three APIs. Use one, or all three.

Each is independently deployable. Use them together for a complete identity stack, or pick one to slot into the system you already have.

Issuance

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 issuance docs
Verification

A library of zero-knowledge proofs.

Compose new verification flows from a library of primitives. Age, residency, accreditation, membership, without writing cryptography yourself.

Read the verification docs
Wallet integration

Plug into the wallet your users already have.

Adapters 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 wallet integration docs

Deploy

Runs where your security review puts it.

Cloud

Managed by us, in the region you choose.

Docker

A single image. Bring your own Kubernetes.

On-prem

Inside your VPC. No Partisia servers in the data path.

Hybrid

Control plane in cloud, data plane on-prem. Documented.

Examples

Issue a credential. Verify it. That's the loop.

Two SDK calls cover most of what the APIs do. Full reference and language-specific examples on docs.partisia.com .

issue.ts Issue.java issue.go issue.py
Issue
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.
verify.ts Verify.java verify.go verify.py
Verify
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)

What teams build

Two ways in, and they run on the same APIs.

Build your own

Credentials for whatever you verify

Accreditation, residency, professional licensing, membership, workforce access, custom regulatory checks. Same primitives, your shape, inside your own infrastructure.

Talk to us
Ready-made

VisitorPass & AgeVerify

Two flows we productised on these APIs. Start there when the use case matches and skip the build.

See applications

Read the docs.
Or talk to the team that built it.