Platform API — JWT Authentication
All Platform API requests require a valid JWT passed in a custom header. The API supports multiple authentication providers — your platform administrator configures which provider to use.Making Authenticated Requests
Pass the JWT from your auth provider in thex-juno-jwt header:
x-juno-orgid header:
The x-juno-orgid Header
Multi-tenant integrations identify both the organisation and the environment a request belongs to using a single header value formatted as <org-id>:<env-id>.
Both halves are required, even if your organisation only has a single environment — Sumvin always resolves auth configuration per environment, so the env half pins the request to the correct provider credentials.
A complete header looks like this:
401 Unauthorized and error code USR-401-002:
Supported Auth Providers
Which providers are active is configured per environment in the SIS Dashboard. Your platform is configured with one or more providers — refer to your provider’s SDK documentation for how to obtain JWTs.
Token Requirements
Sumvin verifies the JWT signature against the configured provider’s JWKS endpoint (or pinned verification key) and reads the following standard claims from the payload:
A Privy identity token decoded payload looks roughly like this:
401 Unauthorized and error code USR-401-001.
Privy: Identity Tokens vs Access Tokens
When your environment is configured in App ID only mode, Sumvin verifies Privy identity tokens. Identity tokens carry user claims (linked accounts, wallets, email) directly in the JWT — Privy access tokens do not, and will fail verification.Privy identity token ≠ Sigil. The Privy identity token authenticates the end-user’s linked accounts (wallets, email, OAuth) to Privy’s system and is the credential Sumvin uses to establish a session. It tells the API who the user is, but carries no KYC or personhood verification. Sigil is Sumvin’s portable Proof of Personhood — a separate product layer provisioned after KYC passes and onboarding completes. A valid Privy identity token is a prerequisite for reaching the Sumvin API, but it does not constitute a Sigil. The identity token is a standard JWT issued by Privy’s client SDK and carries the user’s linked-account claims directly; refer to Privy’s documentation for the token-issuance mechanics.
useIdentityToken React hook:
getIdentityToken() from the headless SDK returns the same value if you’re not using React. See the Privy documentation for setup details — in the Privy console, identity tokens must be enabled under User management → Authentication → Advanced → Return user data in an identity token.
Token Freshness
Privy identity tokens follow the JWT lifetime configured in the Privy console (typically one hour for identity tokens; access tokens are shorter-lived). The token Sumvin verifies must be fresh on every request.useIdentityTokenre-fetches when the underlying session refreshes — readidentityTokenper request rather than caching the value.- For long-lived sessions (dashboards, background tasks), refresh proactively before
expto avoid silent401s. Privy’s React SDK refreshes in the background as long asusePrivyis mounted. - Once
exphas passed, Sumvin returns401withUSR-401-001. Treat this as a signal to refresh and retry once.
User Identity
The API resolves user identity from the JWT — you never passuser_id in URLs or request bodies. Endpoints scoped to “the current user” derive identity from the token rather than a path parameter. For example:
GET /v0/user/me — Fetch the current user.
POST /v0/user/me/onboarding/steps — Submit onboarding for the current user.
On first request, if no user exists for the JWT’s sub claim, you must create one:
401:
SIS API — API Key Authentication
This surface is how you query — Sumvin’s portable, KYC-verified Proof of Personhood. On the wire, Sigil is the SRI identity system: theSRI identifiers, identity tokens, scopes, and KYC verification status you read through the endpoints below.
The Sumvin Identity Service (SIS) uses API key authentication via the Authorization: Bearer header.
Scopes & partitions
SIS keys are scoped at mint time. Each key carries an explicit set of scopes drawn from a dotted-namespace catalogue. A key’s partition — public-safe vs server-only — is derived from the namespace prefix of its scopes.Scope catalogue
Partitions
Thesis and rpc namespaces sit in two distinct partitions. A key cannot span both.
Partition is fixed post-mint. A key’s partition is determined by the namespace of its scopes at mint time and cannot be changed. To move a key between partitions, revoke and mint a new one. Within a partition, scopes are mutable (a future PATCH endpoint will let you grant additional same-partition scopes — not yet shipped).
The mint response surfaces
partition ("public" or "server") and the verbatim scopes array, so dashboards and ops tooling can render badges without a second round-trip.
Minting a key
The request body takes ascopes array. The partition is derived from the namespaces of the scopes you request — mixing sis.* and rpc.* in the same request is rejected with 422 SIS-422-006.
Minting keys is a dashboard-admin operation on the SIS host (sis.sumvin.com), authenticated with your dashboard session token via the Authorization: Bearer header. The organisation is taken from the <org_id> path segment.
201 Created
201 Created — same shape plus an rpc_docs HAL link:
key is returned once — store it immediately. Subsequent reads do not return the plaintext.
Public-partition keys carry both rpc_endpoint (the RPC base URL the key authenticates against) and rpc_docs (the RPC method reference) HAL links. Server-partition keys carry neither.
Validation errors
For more on the SIS API and identity concepts, see Identity & PINTs.