Skip to content

For developers

Build on Thoryn with open, standards-first APIs.

W3C VC 2.0, OID4VP, OID4VCI, Status List 2021, EUDI ARF. Five minutes from clone to signed credential.

Quickstart

Zero to a signed credential in under 15 minutes.

Five shell steps against the public sandbox. No card, no signup form, no waiting list.

  1. Install the CLI

    Pull the native binary. Linux and macOS supported; Windows preview lands with the next CLI minor.

    step-1.sh
    # 1. Install the thoryn CLI (Homebrew on macOS, curl on Linux).
    brew install thoryn-io/tap/thoryn
    
    # Verify the install.
    thoryn --version
  2. Authenticate against the sandbox

    Opens a browser, runs OAuth 2.0 + PKCE against sandbox.thoryn.org, stores a refresh token under your XDG config dir.

    step-2.sh
    # 2. Authenticate against the sandbox tenant.
    # Opens a browser to https://sandbox.thoryn.org/oauth2/authorize and
    # stores a refresh token under ~/.config/thoryn/credentials.
    thoryn login --hub https://sandbox.thoryn.org
  3. Register a client

    Each relying party gets its own OAuth client with explicit redirect URIs and scopes.

    step-3.sh
    # 3. Register an OAuth client for your local relying party.
    thoryn clients create \
      --name "My quickstart app" \
      --redirect-uri http://127.0.0.1:8888/login/oauth2/code/sandbox \
      --grant-types authorization_code,refresh_token \
      --scopes openid,profile
  4. Issue a test credential

    The sandbox issuer-bridge signs a W3C VC 2.0 with the tenant's Vault Transit key and returns the compact JWS.

    step-4.sh
    # 4. Mint a test credential against the sandbox issuer-bridge.
    curl -X POST https://sandbox.thoryn.org/broker/issue \
      -H "Authorization: Bearer $(thoryn token --scope broker:issue)" \
      -H "Content-Type: application/json" \
      -d '{
        "credentialType": "TestSustainabilityCertification",
        "subject": { "id": "did:example:holder", "name": "Acme Co." },
        "validFrom": "2026-01-01T00:00:00Z",
        "validUntil": "2027-01-01T00:00:00Z"
      }'
  5. Verify it end to end

    Pipe the JWS into /broker/verify/walletless. The verdict + audit row id come back in under 200ms.

    step-5.sh
    # 5. Verify the credential round-trips end to end.
    # Pipe the compact JWS from step 4 into the verify endpoint.
    curl -X POST https://sandbox.thoryn.org/broker/verify/walletless \
      -H "Content-Type: application/json" \
      -d '{ "credentialJws": "<paste the JWS from step 4>" }'
    
    # Expected response:
    # { "verdict": "VALID", "policyVersion": "walletless-v1", ... }

SDKs

Libraries for the stacks we see in the wild.

Each SDK wraps the same broker API. Pick the one your stack uses; every example on this page is a thin shell over those calls.

  • Java

    v0.1.0 · preview

    Java 21+

    Spring-Boot-friendly. Bring your own WebClient or RestClient.

    install
    <dependency>
      <groupId>io.thoryn</groupId>
      <artifactId>thoryn-sdk</artifactId>
      <version>0.1.0</version>
    </dependency>
    View on GitHub
  • Kotlin

    v0.1.0 · preview

    Kotlin 2.1+

    Coroutine-first. Suspend functions everywhere; no reactive bridge.

    install
    implementation("io.thoryn:thoryn-sdk-kotlin:0.1.0")
    View on GitHub
  • Node.js

    v0.1.0 · preview

    Node 20+

    TypeScript types ship in the package. ESM + CJS dual build.

    install
    npm install @thoryn/sdk
    View on GitHub
  • Python

    Coming soon

    Python 3.11+

    Async-first. asyncio + httpx; ETA aligned with the public sandbox launch.

    install
    pip install thoryn-sdk

    Repo coming soon

  • Rust

    Coming soon

    Rust 1.78+

    Static binaries for verifier-only deployments at the edge.

    install
    cargo add thoryn

    Repo coming soon

API overview

Four endpoints cover the core flow.

Verify, issue, revoke, replay. Every call below targets sandbox.thoryn.org so you can paste and run.

POST/broker/verify/walletless

Verify a compact-JWS credential against the trust registry, JWKS, and Status List 2021. Returns verdict + audit row id.

POST /broker/verify/walletless
curl -X POST https://sandbox.thoryn.org/broker/verify/walletless \
  -H "Content-Type: application/json" \
  -d '{
    "credentialJws": "eyJhbGciOiJFUzI1NiIsImtpZCI6Im1wcy0yMDI2In0..."
  }'

# Returns { verdict, policyVersion, credentialClaims, auditRowId }

POST/broker/issue

Mint a W3C VC 2.0 credential signed with the tenant's Vault Transit key. Status List entry returned alongside the JWS.

POST /broker/issue
curl -X POST https://sandbox.thoryn.org/broker/issue \
  -H "Authorization: Bearer $ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "credentialType": "FSISustainabilityCertification",
    "subject": { "id": "did:example:holder" },
    "validFrom": "2026-05-12T00:00:00Z",
    "validUntil": "2027-05-12T00:00:00Z"
  }'

# Returns { credentialJws, auditRowId, statusListEntry }

POST/broker/revoke

Flip the credential's bit in the broker-hosted Status List. DAG descendants are marked revoked-via-parent automatically.

POST /broker/revoke
curl -X POST https://sandbox.thoryn.org/broker/revoke \
  -H "Authorization: Bearer $ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "credentialId": "urn:thoryn:cred:01HZ0...",
    "reason": "key_compromise"
  }'

# Flips the Status List 2021 bit and propagates to DAG descendants.

GET/broker/audit-replay

Replay a past verification using the historical JWKS as it stood at that moment. Anchors the seven-year audit chain.

GET /broker/audit-replay
curl https://sandbox.thoryn.org/broker/audit-replay \
  -H "Authorization: Bearer $ACCESS_TOKEN" \
  --get \
  --data-urlencode "auditRowId=01HZ0X..." \
  --data-urlencode "asOf=2026-05-01T00:00:00Z"

# Replays the verification as it would have run on asOf —
# uses historical JWKS + Status List bit at that moment.

Full OpenAPI reference and per-endpoint guides live on docs.thoryn.org.

Public sandbox

Verify any credential. No account needed.

The sandbox runs the production broker against a separate tenant. Issue, verify, revoke, replay — all signed by the same Vault Transit pipeline.

Standards

Standards we implement.

Each row reflects what is live in code today. Roadmap items are flagged so you can plan against them.

Specifications implemented by Thoryn, with current rollout status and version.
SpecificationStatusVersion
W3C Verifiable CredentialsProduction2.0
OID4VPStagingdraft-23
OID4VCIStagingdraft-15
W3C Status List 2021Live1.0
C2PARoadmap1.3
EUDI ARFAligned1.4

Status reflects the broker, not every SDK. SDK conformance is tracked per release.

Architecture

How the pieces fit.

Broker, issuer-bridges, holder portal, audit chain, trust registry — laid out on one diagram.

Read the platform overview