programId, the fields to disclose, and a nonce; the SDK handles credential discovery, consent, and result handling.
Most programs accept SD-JWT VC credentials, the default format. Iden3 programs add zero-knowledge proofs and on-chain verification; see Iden3 credentials.
Verification flow
- Start verification — the verifier starts a session with a
programId. The program defines what to check and how. - Consent + discovery — the SDK requests the holder’s consent and loads the matching encrypted credential from DStorage.
- Presentation — the holder decrypts the credential and discloses only the requested claims. For SD-JWT credentials with a holder key, the holder also signs a key-binding JWT over your
nonce. Iden3 programs generate a zero-knowledge proof instead where required. - Verification — the presentation is checked against the program’s settings off-chain. Iden3 programs can also record the proof on-chain.
- Result — on success the SDK returns a W3C Verifiable Presentation containing the disclosed credential. Verify it again on your backend before you act on it.
Verifier integration checklist
- Create or select a Verification Program in the Developer Dashboard (Verifier → Program).
- Configure the program:
- Accepted proof type:
SD_JWT_VC(default), orBJJ_SIG_2021for Iden3 programs - Requested claims and whether selective disclosure is required
- Whether to check issuer revocation status
- The Issuer’s DID to constrain trusted issuers (optional)
- For Iden3 programs only: whether a ZKP is required, and off-chain vs on-chain verification
- Accepted proof type:
- Publish the program and take note of the
programId. - Integrate the AIR Verifier SDK.
- Start verification with the
programId. - Handle outcomes: Compliant, Non-compliant, No matching credential, User declined consent, or proof/verification failure.
- On success, send the returned Verifiable Presentation to your backend and verify it there before granting access or rewards.
The dashboard link above uses Sandbox for development. For production launches, use the production Developer Dashboard. Moca Chain mainnet is live, and SD-JWT verification programs are self-serve in production. See Production mainnet access.
Start verification
Generate a Partner JWT withscope=verify and a fresh nonce on your backend, then start verification with the SDK. The credential format and requested claims come from the program configuration, so your call stays minimal.
- Web
- Flutter
Input parameters
Response
The function returns aPromise<CredentialVerificationResult>, a discriminated union on status.For non-compliant statuses ("Non-Compliant", "Pending", "Revoking", "Revoked", "Expired", "NotFound"):For compliant status (
"Compliant"):Inside the presentation:
For an
SD_JWT_VC program, the presentation looks like this: