---
title: "Verifying Verifiable Credentials (W3C) via OID4VP"
description: "Learn how to request and verify Verifiable Credentials (W3C) via OID4VP using the walt.id Enterprise Verifier2 Service."
stack: "Enterprise Stack (commercial) — version 0.21.0"
stack_version: "0.21.0"
stack_comparison: https://docs.walt.id/community-vs-enterprise.md
canonical_url: https://docs.walt.id/enterprise-stack/services/verifier2-service/credential-verification/vc-oid4vp
generated: 2026-07-20
---
# Verifying Verifiable Credentials (W3C) via OID4VP

This guide shows you how to verify a W3C Verifiable Credential using the walt.id Enterprise Verifier2 Service and the OID4VP protocol. The verification process sends a credential request to a holder's wallet, receives the credential presentation, and validates it against your policies.

[**Verifiable Credential (VC)**](https://docs.walt.id/concepts/digital-credentials/verifiable-credentials-w3c.md): A digital equivalent of physical credentials such as a driver's license or university degree. VCs are cryptographically secure, privacy-respecting, and instantly verifiable.

[**OID4VP**](https://docs.walt.id/concepts/data-exchange-protocols/openid4vp.md): A protocol specifying how parties can present VCs in a way that's consistent and secure across platforms ensuring interoperability.

## Prerequisites

Before you begin, ensure you have:

- **Enterprise Verifier2 Service setup** — Follow the [Setup](https://docs.walt.id/enterprise-stack/services/verifier2-service/setup.md) guide
- **Valid authentication token** — Obtain a JWT token with appropriate permissions for your organization and tenant
- **A test wallet with credentials** — Use the [walt.id Wallet](https://docs.walt.id/enterprise-stack/services/wallet-service/overview.md) for testing, or any OID4VP-compatible wallet

**Note:**

**Enterprise Architecture:** The Enterprise Verifier2 Service runs as a dedicated microservice within your organization's infrastructure. All requests are scoped to `{organizationID}.{tenantID}.{verifierServiceID}` for multi-tenancy isolation.

---

## Example 1: Basic Verification

This example requests a single W3C Verifiable Credential (UniversityDegree) and verifies its cryptographic signature using the default signature policy.

**Option: CURL**

**Endpoint:** `POST /v1/{target}/verifier2-service-api/verification-session/create` | [API Reference](https://enterprise.sandbox.walt.id/swagger/index.html#/Service%20%7C%20Verifier2%20Service%20-%20Verification%20Sessions/post_v1__target__verifier2_service_api_verification_session_create)

##### Example Request

```bash
curl -X 'POST' \
  'https://{orgID}.enterprise-sandbox.waltid.dev/v1/{target}/verifier2-service-api/verification-session/create' \
  -H 'accept: */*' \
  -H 'Authorization: Bearer {yourToken}' \
  -H 'Content-Type: application/json' \
  -d '{
  "flow_type": "cross_device",
  "core_flow": {
    "dcql_query": {
      "credentials": [
        {
          "id": "example_university_degree_jwt_vc",
          "format": "jwt_vc_json",
          "meta": {
            "type_values": [
              [
                "VerifiableCredential",
                "UniversityDegree"
              ]
            ]
          }
        }
      ]
    }
  }
}'
```

**Path Parameters**

- **orgID**: _String_ (required) - Your organization's Base URL. For example, if your organization is named `test`, your default Base URL will be `test.enterprise-sandbox.waltid.dev` when using the sandbox environment.

- **target**: _String_ (required) - The target resource identifier specifying the organization, tenant, and verifier service with which to execute the credential verification. Format: `{organizationID}.{tenantID}.{verifierServiceID}`, e.g. `waltid.tenant1.verifier1`

**Header Parameters**

- **Authorization**: _String_ (required) - Bearer token obtained from your Enterprise authentication. Format: `Bearer {token}`.

**Body Parameters**

- **flow_type**: _String_ (required) - Specifies how the credential request will be delivered to the holder's wallet. Options:
  - `"cross_device"` — User scans a QR code on a different device (e.g. desktop browser → phone wallet)
  - `"same_device"` — User clicks a deep link on the same device (e.g. phone browser → wallet app on same phone)
  - `"dc_api"` — Browser/OS-native Digital Credentials API (Chrome, Safari, iOS/Android native) over OpenID4VP 1.0 (Annex D).
  - `"dc_api-annex-c"` — Browser/OS-native Digital Credentials API (Chrome, Safari, iOS/Android native) over 18013-7 (Annex C).

- **core_flow**: _Object_ (required) - Defines what credentials to request and which policies to apply. Contains:
  - **dcql_query**: _Object_ (required) - Specifies the credential type, format, and claims to request using the [DCQL query language](https://identity.foundation/credential-query-language/). You can also use the DCQL builder [here](https://dcql.walt.id/).
    - **credentials**: _Array_ - List of credential queries. Each credential query contains:
      - **id**: _String_ - Unique identifier for this credential in the request (used in policy results)
      - **format**: _String_ - Credential format. For W3C VCs, use `"jwt_vc_json"` (JWT format).
      - **meta.type_values**: _Array_ - List of acceptable credential type arrays. The credential must match at least one type array. Example: `[["VerifiableCredential", "OpenBadgeCredential"]]`.
      - **claims**: _Array_ (optional) - Specific claims to request from the credential. Each claim has a `path` (JSON path to the claim). If omitted, all claims that are non-selectively disclosable are provided by the wallet.
  - **policies**: _Object_ (optional) - Validation rules applied to the received credential. Defaults to signature verification only if omitted.
    - **vc_policies**: _Array_ - Policies applied to individual credentials. Each policy has a `policy` field specifying the policy name. Available policies: `signature`, `expired`, `not-before`, `revoked-status-list`, `schema`, and more. See [Policies](https://docs.walt.id/enterprise-stack/services/verifier2-service/policies/overview.md) for the complete list.
    - **vp_policies**: _Array_ (optional) - Policies applied to the entire presentation (not shown in this example)
  - **signed_request**: _Boolean_ (optional) - Whether to sign the authorization request JWT. Required for HAIP profile compliance and DC API Annex C (ISO 18013-7) flows. Defaults to `false`. See [Signed Requests](#signed-requests) to learn more.
  - **encrypted_response**: _Boolean_ (optional) - Whether the wallet should encrypt the VP token response. Defaults to `false`. See [Encrypted Responses](#encrypted-responses) to learn more.
  - **key**: _Object_ (optional) - Signing key for this verification session. Overrides the service-wide default `key` configured during [verifier2 service creation](https://docs.walt.id/enterprise-stack/services/verifier2-service/setup.md#body-parameters). Must be a serialized key in the format `{"type":"jwk","jwk":{...}}`. Required when `signed_request: true` or `encrypted_response: true` and no service-wide default is configured. See [Signed Requests](#signed-requests) and [Encrypted Responses](#encrypted-responses) for when this is needed.
  - **x5c**: _Array of Strings_ (optional) - X.509 certificate chain for this verification session. Overrides the service-wide default `x5c` configured during [verifier2 service creation](https://docs.walt.id/enterprise-stack/services/verifier2-service/setup.md#body-parameters). Must be an ordered chain in DER-encoded, Base64-encoded format where the first certificate corresponds to the `key`. Required for X.509-based client authentication (`x509_san_dns:` or `x509_hash:` as `clientId`) and signed Annex C requests. See [Signed Requests](#signed-requests) to learn more.
  - **verifier_info**: _Object_ (optional) - An array of attestations about the Verifier relevant to the Credential Request. Each object is a JSON object with the following fields:
    - **format**: _String_ - The format of the attestation. Currently only `"jwt"` is supported.
    - **data**: _String_ - The attestation data in JWT format.
    - **credential_ids**: _Array_ (optional) - Specifies which credentials in your DCQL query this attestation applies to. References the `id` fields from your `credentials` array in the DCQL query. If omitted, the attestation applies to all requested credentials.
  - **expiration_duration**: _String_ (optional) - ISO-8601 duration specifying how long the verification session remains valid. Defaults to 10 minutes (`PT10M`). Example: `"PT1H"` for 1 hour, `"PT30M"` for 30 minutes.
  - **expiration_date**: _String_ (optional) - ISO-8601 datetime specifying the exact time when the session expires. Takes precedence over `expiration_duration` if both are set. Example: `"2026-05-21T15:00:00Z"`. Session expires if left unused (no presentation pushed). Once a presentation is received, the session is no longer eligible for expiry.

- **url_config**: _Object_ (optional) - URL configuration for this session. Only applies to `cross_device` and `same_device` flows (not `dc_api`).
  - **url_prefix**: _String_ (optional) - The publicly accessible base URL where the wallet will fetch the authorization request and post its response.
    - The service constructs: Request URI: `{urlPrefix}/{target}/verifier2-service-api/{sessionId}/request` and Response URI: `{urlPrefix}/{target}/verifier2-service-api/{sessionId}/response`
    - **Must be reachable by the wallet** (use ngrok or public URL for local development)
  - **url_host**: _String_ (optional) - The base URL used to construct the authorization request link. Can be set as a service-wide default during [verifier2 service creation](https://docs.walt.id/enterprise-stack/services/verifier2-service/setup.md#body-parameters) and overridden per-session here.
    - For standard OID4VP flows, use `"openid4vp://authorize"` (default)
    - For custom authorization endpoints (e.g. conformance testing), provide a full HTTPS URL

- **redirects**: _Object_ (optional) - Success and error redirect URLs (only for `cross_device` and `same_device` flows)
  - **successRedirectUrl**: _String_ - URL to redirect the user after successful verification
  - **errorRedirectUrl**: _String_ - URL to redirect the user if verification fails

**Note:**

  **Service-Level Defaults:** The `key`, `x5c`, and `url_host` parameters can be configured as service-wide defaults during [verifier2 service creation](https://docs.walt.id/enterprise-stack/services/verifier2-service/setup.md#body-parameters). Request-level parameters provided here override these defaults for that specific session only.

---

##### Example Response

The response contains the session ID and authorization URLs to present to the user.

```json
{
  "sessionId": "ed593e34-9e86-4144-87c1-de6d5ae9beb4",
  "bootstrapAuthorizationRequestUrl": "openid4vp://authorize?request_uri=https%3A%2F%2F{orgID}.enterprise-sandbox.waltid.dev%2Fv1%2Fwaltid.tenant1.verifier1%2Fverifier2-service-api%2Fed593e34-9e86-4144-87c1-de6d5ae9beb4%2Frequest",
  "fullAuthorizationRequestUrl": "openid4vp://authorize?response_type=vp_token&state=a65f02bd-c7f0-4094-932f-555ddce1b32f&response_mode=direct_post&nonce=f9b57ec3-c852-49ad-9537-2e1820f23ad9&response_uri=https%3A%2F%2F{orgID}.enterprise-sandbox.waltid.dev%2Fv1%2Fwaltid.tenant1.verifier1%2Fverifier2-service-api%2Fed593e34-9e86-4144-87c1-de6d5ae9beb4%2Fresponse&dcql_query=%7B%22credentials%22%3A%5B%7B%22id%22%3A%22example_university_degree_jwt_vc%22%2C%22format%22%3A%22jwt_vc_json%22%2C%22meta%22%3A%7B%22type_values%22%3A%5B%5B%22VerifiableCredential%22%2C%22UniversityDegree%22%5D%5D%7D%7D%5D%7D&client_metadata=%7B%22vp_formats_supported%22%3A%7B%22mso_mdoc%22%3A%7B%22issuerauth_alg_values%22%3A%5B-7%2C-9%2C-50%5D%2C%22deviceauth_alg_values%22%3A%5B-7%2C-9%2C-50%2C-65537%5D%7D%7D%2C%22client_name%22%3A%22Verifier%22%7D",
  "creationTarget": "waltid.tenant1.verifier1.ed593e34-9e86-4144-87c1-de6d5ae9beb4"
}
```

**Response Fields:**

- **sessionId**: _String_ - The unique ID of this verification session. Use this to query the session status.
- **bootstrapAuthorizationRequestUrl**: _String_ - Shortened URL using `request_uri` by reference. **Use this for QR codes** to minimize QR code density.
- **fullAuthorizationRequestUrl**: _String_ - Complete URL with all parameters embedded. Use this if the wallet doesn't support `request_uri` (rare).
- **creationTarget**: _String_ - The full resource path including the session ID. Use this as the `{creationTarget}` path parameter when querying session info.

---

## Presenting the Request to the User

After creating the session, you need to present the authorization request to the user based on the flow type you chose.

### Cross-Device Flow (QR Code)

1. **Generate a QR code** from the `bootstrapAuthorizationRequestUrl`
2. **Display the QR code** to the user on your web page or application
3. **User scans the QR code** with their wallet app
4. **Wallet presents the credential** and posts the response to your verifier
5. **Monitor the session status** by polling the session endpoint or using SSE/callbacks (see below)

### Same-Device Flow (Deep Link)

1. **Redirect the user** to the `bootstrapAuthorizationRequestUrl`
2. **User's wallet app opens** automatically (via deep link)
3. **Wallet presents the credential** and posts the response to your verifier
4. **User is redirected** to your `successRedirectUrl` or `errorRedirectUrl`
5. **Query the session status** to retrieve the verification results

---

## Checking Verification Results

You can query the verification session to check if the user has presented their credential and whether validation succeeded.

**Option: CURL**

**Endpoint:** `GET /v1/{creationTarget}/verifier2-service-api/verification-session/info` | [API Reference](https://enterprise.sandbox.walt.id/swagger/index.html#/Service%20%7C%20Verifier2%20Service%20-%20Verification%20Sessions/get_v1__target__verifier2_service_api_verification_session_info)

##### Example Request

```bash
curl -X 'GET' \
  'https://{orgID}.enterprise-sandbox.waltid.dev/v1/{creationTarget}/verifier2-service-api/verification-session/info' \
  -H 'accept: application/json' \
  -H 'Authorization: Bearer {yourToken}'
```

**Path Parameters**

- **orgID**: _String_ (required) - Your organization's Base URL. For example, if your organization is named `test`, your default Base URL will be `test.enterprise-sandbox.waltid.dev` when using the sandbox environment.

- **creationTarget**: _String_ (required) - The target creation target returned when creating the verification session. It is a concatenation of the target resource and the session ID (e.g., `org.tenant.verifier.ff4f0c86-56ce-4e4a-a137-dd5569049ff3`).

**Header Parameters**

- **Authorization**: _String_ (required) - Bearer token obtained from your Enterprise authentication. Format: `Bearer {token}`.

---

##### Example Response

The response contains the complete session information including setup, status, policy results, and presented credentials.

```json
{
  "_id": "waltid.tenant1.verifier1.ed593e34-9e86-4144-87c1-de6d5ae9beb4",
  "session": {
    "id": "ed593e34-9e86-4144-87c1-de6d5ae9beb4",
    "setup": {
      "flow_type": "cross_device",
      "core_flow": {
        "dcql_query": {
          "credentials": [
            {
              "id": "example_university_degree_jwt_vc",
              "format": "jwt_vc_json",
              "multiple": false,
              "meta": {
                "type_values": [
                  [
                    "VerifiableCredential",
                    "UniversityDegree"
                  ]
                ],
                "format": "jwt_vc_json"
              },
              "require_cryptographic_holder_binding": true
            }
          ]
        },
        "signed_request": false,
        "encrypted_response": false,
        "policies": {}
      },
      "url_config": {}
    },
    "creationDate": "2026-05-20T11:36:36.742929808Z",
    "expirationDate": "2026-05-20T11:47:15.747252763Z",
    "retentionDate": "2036-05-20T11:36:36.742929808Z",
    "status": "SUCCESSFUL",
    "attempted": true,
    "reattemptable": true,
    "bootstrapAuthorizationRequest": {
      "response_type": "vp_token",
      "request_uri": "https://waltid.testing-0-20-0.enterprise.test.waltid.cloud/v1/waltid.tenant1.verifier1/verifier2-service-api/ed593e34-9e86-4144-87c1-de6d5ae9beb4/request"
    },
    "bootstrapAuthorizationRequestUrl": "openid4vp://authorize?request_uri=https%3A%2F%2Fwaltid.testing-0-20-0.enterprise.test.waltid.cloud%2Fv1%2Fwaltid.tenant1.verifier1%2Fverifier2-service-api%2Fed593e34-9e86-4144-87c1-de6d5ae9beb4%2Frequest",
    "authorizationRequest": {
      "response_type": "vp_token",
      "state": "a65f02bd-c7f0-4094-932f-555ddce1b32f",
      "response_mode": "direct_post",
      "nonce": "f9b57ec3-c852-49ad-9537-2e1820f23ad9",
      "response_uri": "https://waltid.testing-0-20-0.enterprise.test.waltid.cloud/v1/waltid.tenant1.verifier1/verifier2-service-api/ed593e34-9e86-4144-87c1-de6d5ae9beb4/response",
      "dcql_query": {
        "credentials": [
          {
            "id": "example_university_degree_jwt_vc",
            "format": "jwt_vc_json",
            "multiple": false,
            "meta": {
              "type_values": [
                [
                  "VerifiableCredential",
                  "UniversityDegree"
                ]
              ],
              "format": "jwt_vc_json"
            },
            "require_cryptographic_holder_binding": true
          }
        ]
      },
      "client_metadata": {
        "vp_formats_supported": {
          "mso_mdoc": {
            "issuerauth_alg_values": [
              -7,
              -9,
              -50
            ],
            "deviceauth_alg_values": [
              -7,
              -9,
              -50,
              -65537
            ]
          }
        },
        "client_name": "Verifier"
      }
    },
    "authorizationRequestUrl": "openid4vp://authorize?response_type=vp_token&state=a65f02bd-c7f0-4094-932f-555ddce1b32f&response_mode=direct_post&nonce=f9b57ec3-c852-49ad-9537-2e1820f23ad9&response_uri=https%3A%2F%2Fwaltid.testing-0-20-0.enterprise.test.waltid.cloud%2Fv1%2Fwaltid.tenant1.verifier1%2Fverifier2-service-api%2Fed593e34-9e86-4144-87c1-de6d5ae9beb4%2Fresponse&dcql_query=%7B%22credentials%22%3A%5B%7B%22id%22%3A%22example_university_degree_jwt_vc%22%2C%22format%22%3A%22jwt_vc_json%22%2C%22meta%22%3A%7B%22type_values%22%3A%5B%5B%22VerifiableCredential%22%2C%22UniversityDegree%22%5D%5D%7D%7D%5D%7D&client_metadata=%7B%22vp_formats_supported%22%3A%7B%22mso_mdoc%22%3A%7B%22issuerauth_alg_values%22%3A%5B-7%2C-9%2C-50%5D%2C%22deviceauth_alg_values%22%3A%5B-7%2C-9%2C-50%2C-65537%5D%7D%7D%2C%22client_name%22%3A%22Verifier%22%7D",
    "requestMode": "REQUEST_URI",
    "policies": {
      "vp_policies": {
        "jwt_vc_json": [
          "jwt_vc_json/audience-check",
          "jwt_vc_json/nonce-check",
          "jwt_vc_json/envelope_signature"
        ],
        "dc+sd-jwt": [
          "dc+sd-jwt/audience-check",
          "dc+sd-jwt/kb-jwt_signature",
          "dc+sd-jwt/nonce-check",
          "dc+sd-jwt/sd_hash-check"
        ],
        "mso_mdoc": [
          "mso_mdoc/device-auth",
          "mso_mdoc/device_key_auth",
          "mso_mdoc/issuer_auth",
          "mso_mdoc/issuer_signed_integrity",
          "mso_mdoc/mso"
        ]
      },
      "vc_policies": [
        {
          "policy": "signature",
          "id": "signature"
        }
      ]
    },
    "policy_results": {
      "vp_policies": {
        "example_university_degree_jwt_vc": {
          "jwt_vc_json/audience-check": {
            "policy_executed": {
              "policy": "jwt_vc_json/audience-check",
              "id": "jwt_vc_json/audience-check",
              "description": "Check if presentation audience matches expected audience for session"
            },
            "success": true,
            "results": {
              "presentation_audience": ""
            },
            "errors": [],
            "execution_time": "PT0.010967155S"
          },
          "jwt_vc_json/nonce-check": {
            "policy_executed": {
              "policy": "jwt_vc_json/nonce-check",
              "id": "jwt_vc_json/nonce-check",
              "description": "Check if presentation nonce matches expected nonce for session"
            },
            "success": true,
            "results": {},
            "errors": [],
            "execution_time": "PT0.011009056S"
          },
          "jwt_vc_json/envelope_signature": {
            "policy_executed": {
              "policy": "jwt_vc_json/envelope_signature",
              "id": "jwt_vc_json/envelope_signature",
              "description": "Verify signature using holders public key"
            },
            "success": true,
            "results": {
              "issuer": "did:key:zDnaeau98xnt9awckNpEq34Cw2LbfpEiggJc43uwMh8uAa8B3",
              "holder_key_jwk": {
                "kty": "EC",
                "crv": "P-256",
                "x": "m4r2Sf0jYK3OXLPrdrwC2OSSkwCBUVNJH-kpIlzmBzo",
                "y": "Uqa4uWu4rgrm3Cj9wugwYIig5ZS9DkLKxKnGk8sYr1o"
              },
              "verified_vp_jwt_content": {
                "sub": "did:key:zDnaeau98xnt9awckNpEq34Cw2LbfpEiggJc43uwMh8uAa8B3",
                "nbf": 1779276975,
                "iat": 1779277035,
                "jti": "urn:uuid:7da432ef-bc20-42dc-94e5-f5c0bd702711",
                "iss": "did:key:zDnaeau98xnt9awckNpEq34Cw2LbfpEiggJc43uwMh8uAa8B3",
                "nonce": "f9b57ec3-c852-49ad-9537-2e1820f23ad9",
                "aud": "",
                "vp": {
                  "@context": [
                    "https://www.w3.org/2018/credentials/v1"
                  ],
                  "type": [
                    "VerifiablePresentation"
                  ],
                  "id": "urn:uuid:7da432ef-bc20-42dc-94e5-f5c0bd702711",
                  "holder": "did:key:zDnaeau98xnt9awckNpEq34Cw2LbfpEiggJc43uwMh8uAa8B3",
                  "verifiableCredential": [
                    "eyJraWQiOiJkaWQ6andrOmV5SnJkSGtpT2lKUFMxQWlMQ0pqY25ZaU9pSkZaREkxTlRFNUlpd2lhMmxrSWpvaWFVcE5VelZpYTFwV1NXeHVZMlp4WDB4bVgxTjFlRW95U25SUk5VaDJZWG8zZEZkUWJrRnFWVlZrY3lJc0luZ2lPaUpHV21SMmQwTTRZVWRvVW5keGVsZHdkR1ZxTUU1YVozUjNXVUZKTVZONVJtY3hiVXRFUlZSUFpuRkZJbjAjaUpNUzVia1pWSWxuY2ZxX0xmX1N1eEoySnRRNUh2YXo3dFdQbkFqVVVkcyIsInR5cCI6IkpXVCIsImFsZyI6IkVkRFNBIn0.eyJpc3MiOiJkaWQ6andrOmV5SnJkSGtpT2lKUFMxQWlMQ0pqY25ZaU9pSkZaREkxTlRFNUlpd2lhMmxrSWpvaWFVcE5VelZpYTFwV1NXeHVZMlp4WDB4bVgxTjFlRW95U25SUk5VaDJZWG8zZEZkUWJrRnFWVlZrY3lJc0luZ2lPaUpHV21SMmQwTTRZVWRvVW5keGVsZHdkR1ZxTUU1YVozUjNXVUZKTVZONVJtY3hiVXRFUlZSUFpuRkZJbjAiLCJzdWIiOiJkaWQ6a2V5OnpEbmFlYXU5OHhudDlhd2NrTnBFcTM0Q3cyTGJmcEVpZ2dKYzQzdXdNaDh1QWE4QjMiLCJ2YyI6eyJAY29udGV4dCI6WyJodHRwczovL3d3dy53My5vcmcvMjAxOC9jcmVkZW50aWFscy92MSIsImh0dHBzOi8vd3d3LnczLm9yZy8yMDE4L2NyZWRlbnRpYWxzL2V4YW1wbGVzL3YxIl0sImlkIjoidXJuOnV1aWQ6NzE4OTU5MjYtZjRiYy00OGNhLTk3MmQtMjExODM4MjgzMmJkIiwidHlwZSI6WyJWZXJpZmlhYmxlQ3JlZGVudGlhbCIsIlVuaXZlcnNpdHlEZWdyZWUiXSwiaXNzdWVyIjp7ImlkIjoiZGlkOmp3azpleUpyZEhraU9pSlBTMUFpTENKamNuWWlPaUpGWkRJMU5URTVJaXdpYTJsa0lqb2lhVXBOVXpWaWExcFdTV3h1WTJaeFgweG1YMU4xZUVveVNuUlJOVWgyWVhvM2RGZFFia0ZxVlZWa2N5SXNJbmdpT2lKR1dtUjJkME00WVVkb1VuZHhlbGR3ZEdWcU1FNWFaM1IzV1VGSk1WTjVSbWN4YlV0RVJWUlBabkZGSW4wIn0sImlzc3VhbmNlRGF0ZSI6IjIwMjYtMDUtMjBUMTE6Mjc6NDAuNzkyMTAzOTEzWiIsImNyZWRlbnRpYWxTdWJqZWN0Ijp7ImlkIjoiZGlkOmtleTp6RG5hZWF1OTh4bnQ5YXdja05wRXEzNEN3MkxiZnBFaWdnSmM0M3V3TWg4dUFhOEIzIiwiZGVncmVlIjp7InR5cGUiOiJCYWNoZWxvckRlZ3JlZSIsIm5hbWUiOiJCYWNoZWxvciBvZiBTY2llbmNlIGFuZCBBcnRzIn19LCJleHBpcmF0aW9uRGF0ZSI6IjIwMjctMDUtMjBUMTE6Mjc6NDAuNzkyMTM3NjE0WiJ9LCJqdGkiOiJ1cm46dXVpZDo3MTg5NTkyNi1mNGJjLTQ4Y2EtOTcyZC0yMTE4MzgyODMyYmQiLCJleHAiOjE4MTA4MTI0NjAsImlhdCI6MTc3OTI3NjQ2MCwibmJmIjoxNzc5Mjc2NDYwfQ._oWIQARZvoTP71K2JxbnDpUaA9tfBxMBM6e3kjlATffqwpV5_rHgmYEYgZNrQ1aK7idlXCbsyxtHiUrVgR54Ag"
                  ]
                }
              }
            },
            "errors": [],
            "execution_time": "PT0.030289930S"
          }
        }
      },
      "vc_policies": [
        {
          "policy": {
            "policy": "signature",
            "id": "signature"
          },
          "success": true,
          "result": {
            "verification_result": true,
            "signed_credential": "eyJraWQiOiJkaWQ6andrOmV5SnJkSGtpT2lKUFMxQWlMQ0pqY25ZaU9pSkZaREkxTlRFNUlpd2lhMmxrSWpvaWFVcE5VelZpYTFwV1NXeHVZMlp4WDB4bVgxTjFlRW95U25SUk5VaDJZWG8zZEZkUWJrRnFWVlZrY3lJc0luZ2lPaUpHV21SMmQwTTRZVWRvVW5keGVsZHdkR1ZxTUU1YVozUjNXVUZKTVZONVJtY3hiVXRFUlZSUFpuRkZJbjAjaUpNUzVia1pWSWxuY2ZxX0xmX1N1eEoySnRRNUh2YXo3dFdQbkFqVVVkcyIsInR5cCI6IkpXVCIsImFsZyI6IkVkRFNBIn0.eyJpc3MiOiJkaWQ6andrOmV5SnJkSGtpT2lKUFMxQWlMQ0pqY25ZaU9pSkZaREkxTlRFNUlpd2lhMmxrSWpvaWFVcE5VelZpYTFwV1NXeHVZMlp4WDB4bVgxTjFlRW95U25SUk5VaDJZWG8zZEZkUWJrRnFWVlZrY3lJc0luZ2lPaUpHV21SMmQwTTRZVWRvVW5keGVsZHdkR1ZxTUU1YVozUjNXVUZKTVZONVJtY3hiVXRFUlZSUFpuRkZJbjAiLCJzdWIiOiJkaWQ6a2V5OnpEbmFlYXU5OHhudDlhd2NrTnBFcTM0Q3cyTGJmcEVpZ2dKYzQzdXdNaDh1QWE4QjMiLCJ2YyI6eyJAY29udGV4dCI6WyJodHRwczovL3d3dy53My5vcmcvMjAxOC9jcmVkZW50aWFscy92MSIsImh0dHBzOi8vd3d3LnczLm9yZy8yMDE4L2NyZWRlbnRpYWxzL2V4YW1wbGVzL3YxIl0sImlkIjoidXJuOnV1aWQ6NzE4OTU5MjYtZjRiYy00OGNhLTk3MmQtMjExODM4MjgzMmJkIiwidHlwZSI6WyJWZXJpZmlhYmxlQ3JlZGVudGlhbCIsIlVuaXZlcnNpdHlEZWdyZWUiXSwiaXNzdWVyIjp7ImlkIjoiZGlkOmp3azpleUpyZEhraU9pSlBTMUFpTENKamNuWWlPaUpGWkRJMU5URTVJaXdpYTJsa0lqb2lhVXBOVXpWaWExcFdTV3h1WTJaeFgweG1YMU4xZUVveVNuUlJOVWgyWVhvM2RGZFFia0ZxVlZWa2N5SXNJbmdpT2lKR1dtUjJkME00WVVkb1VuZHhlbGR3ZEdWcU1FNWFaM1IzV1VGSk1WTjVSbWN4YlV0RVJWUlBabkZGSW4wIn0sImlzc3VhbmNlRGF0ZSI6IjIwMjYtMDUtMjBUMTE6Mjc6NDAuNzkyMTAzOTEzWiIsImNyZWRlbnRpYWxTdWJqZWN0Ijp7ImlkIjoiZGlkOmtleTp6RG5hZWF1OTh4bnQ5YXdja05wRXEzNEN3MkxiZnBFaWdnSmM0M3V3TWg4dUFhOEIzIiwiZGVncmVlIjp7InR5cGUiOiJCYWNoZWxvckRlZ3JlZSIsIm5hbWUiOiJCYWNoZWxvciBvZiBTY2llbmNlIGFuZCBBcnRzIn19LCJleHBpcmF0aW9uRGF0ZSI6IjIwMjctMDUtMjBUMTE6Mjc6NDAuNzkyMTM3NjE0WiJ9LCJqdGkiOiJ1cm46dXVpZDo3MTg5NTkyNi1mNGJjLTQ4Y2EtOTcyZC0yMTE4MzgyODMyYmQiLCJleHAiOjE4MTA4MTI0NjAsImlhdCI6MTc3OTI3NjQ2MCwibmJmIjoxNzc5Mjc2NDYwfQ._oWIQARZvoTP71K2JxbnDpUaA9tfBxMBM6e3kjlATffqwpV5_rHgmYEYgZNrQ1aK7idlXCbsyxtHiUrVgR54Ag",
            "credential_signature": {
              "type": "signature-jwt",
              "signature": "_oWIQARZvoTP71K2JxbnDpUaA9tfBxMBM6e3kjlATffqwpV5_rHgmYEYgZNrQ1aK7idlXCbsyxtHiUrVgR54Ag",
              "jwtHeader": {
                "kid": "did:jwk:eyJrdHkiOiJPS1AiLCJjcnYiOiJFZDI1NTE5Iiwia2lkIjoiaUpNUzVia1pWSWxuY2ZxX0xmX1N1eEoySnRRNUh2YXo3dFdQbkFqVVVkcyIsIngiOiJGWmR2d0M4YUdoUndxeldwdGVqME5aZ3R3WUFJMVN5RmcxbUtERVRPZnFFIn0#iJMS5bkZVIlncfq_Lf_SuxJ2JtQ5Hvaz7tWPnAjUUds",
                "typ": "JWT",
                "alg": "EdDSA"
              }
            },
            "verified_data": {
              "iss": "did:jwk:eyJrdHkiOiJPS1AiLCJjcnYiOiJFZDI1NTE5Iiwia2lkIjoiaUpNUzVia1pWSWxuY2ZxX0xmX1N1eEoySnRRNUh2YXo3dFdQbkFqVVVkcyIsIngiOiJGWmR2d0M4YUdoUndxeldwdGVqME5aZ3R3WUFJMVN5RmcxbUtERVRPZnFFIn0",
              "sub": "did:key:zDnaeau98xnt9awckNpEq34Cw2LbfpEiggJc43uwMh8uAa8B3",
              "vc": {
                "@context": [
                  "https://www.w3.org/2018/credentials/v1",
                  "https://www.w3.org/2018/credentials/examples/v1"
                ],
                "id": "urn:uuid:71895926-f4bc-48ca-972d-2118382832bd",
                "type": [
                  "VerifiableCredential",
                  "UniversityDegree"
                ],
                "issuer": {
                  "id": "did:jwk:eyJrdHkiOiJPS1AiLCJjcnYiOiJFZDI1NTE5Iiwia2lkIjoiaUpNUzVia1pWSWxuY2ZxX0xmX1N1eEoySnRRNUh2YXo3dFdQbkFqVVVkcyIsIngiOiJGWmR2d0M4YUdoUndxeldwdGVqME5aZ3R3WUFJMVN5RmcxbUtERVRPZnFFIn0"
                },
                "issuanceDate": "2026-05-20T11:27:40.792103913Z",
                "credentialSubject": {
                  "id": "did:key:zDnaeau98xnt9awckNpEq34Cw2LbfpEiggJc43uwMh8uAa8B3",
                  "degree": {
                    "type": "BachelorDegree",
                    "name": "Bachelor of Science and Arts"
                  }
                },
                "expirationDate": "2027-05-20T11:27:40.792137614Z"
              },
              "jti": "urn:uuid:71895926-f4bc-48ca-972d-2118382832bd",
              "exp": 1810812460,
              "iat": 1779276460,
              "nbf": 1779276460
            },
            "successful_issuer_public_key": {
              "kty": "OKP",
              "crv": "Ed25519",
              "kid": "iJMS5bkZVIlncfq_Lf_SuxJ2JtQ5Hvaz7tWPnAjUUds",
              "x": "FZdvwC8aGhRwqzWptej0NZgtwYAI1SyFg1mKDETOfqE"
            },
            "successful_issuer_public_key_id": "iJMS5bkZVIlncfq_Lf_SuxJ2JtQ5Hvaz7tWPnAjUUds"
          }
        }
      ],
      "specific_vc_policies": {},
      "overallSuccess": true
    },
    "presentation_validation_results": {
      "example_university_degree_jwt_vc": {
        "jwt_vc_json/audience-check": {
          "policy_executed": {
            "policy": "jwt_vc_json/audience-check",
            "id": "jwt_vc_json/audience-check",
            "description": "Check if presentation audience matches expected audience for session"
          },
          "success": true,
          "results": {
            "presentation_audience": ""
          },
          "errors": [],
          "execution_time": "PT0.010967155S"
        },
        "jwt_vc_json/nonce-check": {
          "policy_executed": {
            "policy": "jwt_vc_json/nonce-check",
            "id": "jwt_vc_json/nonce-check",
            "description": "Check if presentation nonce matches expected nonce for session"
          },
          "success": true,
          "results": {},
          "errors": [],
          "execution_time": "PT0.011009056S"
        },
        "jwt_vc_json/envelope_signature": {
          "policy_executed": {
            "policy": "jwt_vc_json/envelope_signature",
            "id": "jwt_vc_json/envelope_signature",
            "description": "Verify signature using holders public key"
          },
          "success": true,
          "results": {
            "issuer": "did:key:zDnaeau98xnt9awckNpEq34Cw2LbfpEiggJc43uwMh8uAa8B3",
            "holder_key_jwk": {
              "kty": "EC",
              "crv": "P-256",
              "x": "m4r2Sf0jYK3OXLPrdrwC2OSSkwCBUVNJH-kpIlzmBzo",
              "y": "Uqa4uWu4rgrm3Cj9wugwYIig5ZS9DkLKxKnGk8sYr1o"
            },
            "verified_vp_jwt_content": {
              "sub": "did:key:zDnaeau98xnt9awckNpEq34Cw2LbfpEiggJc43uwMh8uAa8B3",
              "nbf": 1779276975,
              "iat": 1779277035,
              "jti": "urn:uuid:7da432ef-bc20-42dc-94e5-f5c0bd702711",
              "iss": "did:key:zDnaeau98xnt9awckNpEq34Cw2LbfpEiggJc43uwMh8uAa8B3",
              "nonce": "f9b57ec3-c852-49ad-9537-2e1820f23ad9",
              "aud": "",
              "vp": {
                "@context": [
                  "https://www.w3.org/2018/credentials/v1"
                ],
                "type": [
                  "VerifiablePresentation"
                ],
                "id": "urn:uuid:7da432ef-bc20-42dc-94e5-f5c0bd702711",
                "holder": "did:key:zDnaeau98xnt9awckNpEq34Cw2LbfpEiggJc43uwMh8uAa8B3",
                "verifiableCredential": [
                  "eyJraWQiOiJkaWQ6andrOmV5SnJkSGtpT2lKUFMxQWlMQ0pqY25ZaU9pSkZaREkxTlRFNUlpd2lhMmxrSWpvaWFVcE5VelZpYTFwV1NXeHVZMlp4WDB4bVgxTjFlRW95U25SUk5VaDJZWG8zZEZkUWJrRnFWVlZrY3lJc0luZ2lPaUpHV21SMmQwTTRZVWRvVW5keGVsZHdkR1ZxTUU1YVozUjNXVUZKTVZONVJtY3hiVXRFUlZSUFpuRkZJbjAjaUpNUzVia1pWSWxuY2ZxX0xmX1N1eEoySnRRNUh2YXo3dFdQbkFqVVVkcyIsInR5cCI6IkpXVCIsImFsZyI6IkVkRFNBIn0.eyJpc3MiOiJkaWQ6andrOmV5SnJkSGtpT2lKUFMxQWlMQ0pqY25ZaU9pSkZaREkxTlRFNUlpd2lhMmxrSWpvaWFVcE5VelZpYTFwV1NXeHVZMlp4WDB4bVgxTjFlRW95U25SUk5VaDJZWG8zZEZkUWJrRnFWVlZrY3lJc0luZ2lPaUpHV21SMmQwTTRZVWRvVW5keGVsZHdkR1ZxTUU1YVozUjNXVUZKTVZONVJtY3hiVXRFUlZSUFpuRkZJbjAiLCJzdWIiOiJkaWQ6a2V5OnpEbmFlYXU5OHhudDlhd2NrTnBFcTM0Q3cyTGJmcEVpZ2dKYzQzdXdNaDh1QWE4QjMiLCJ2YyI6eyJAY29udGV4dCI6WyJodHRwczovL3d3dy53My5vcmcvMjAxOC9jcmVkZW50aWFscy92MSIsImh0dHBzOi8vd3d3LnczLm9yZy8yMDE4L2NyZWRlbnRpYWxzL2V4YW1wbGVzL3YxIl0sImlkIjoidXJuOnV1aWQ6NzE4OTU5MjYtZjRiYy00OGNhLTk3MmQtMjExODM4MjgzMmJkIiwidHlwZSI6WyJWZXJpZmlhYmxlQ3JlZGVudGlhbCIsIlVuaXZlcnNpdHlEZWdyZWUiXSwiaXNzdWVyIjp7ImlkIjoiZGlkOmp3azpleUpyZEhraU9pSlBTMUFpTENKamNuWWlPaUpGWkRJMU5URTVJaXdpYTJsa0lqb2lhVXBOVXpWaWExcFdTV3h1WTJaeFgweG1YMU4xZUVveVNuUlJOVWgyWVhvM2RGZFFia0ZxVlZWa2N5SXNJbmdpT2lKR1dtUjJkME00WVVkb1VuZHhlbGR3ZEdWcU1FNWFaM1IzV1VGSk1WTjVSbWN4YlV0RVJWUlBabkZGSW4wIn0sImlzc3VhbmNlRGF0ZSI6IjIwMjYtMDUtMjBUMTE6Mjc6NDAuNzkyMTAzOTEzWiIsImNyZWRlbnRpYWxTdWJqZWN0Ijp7ImlkIjoiZGlkOmtleTp6RG5hZWF1OTh4bnQ5YXdja05wRXEzNEN3MkxiZnBFaWdnSmM0M3V3TWg4dUFhOEIzIiwiZGVncmVlIjp7InR5cGUiOiJCYWNoZWxvckRlZ3JlZSIsIm5hbWUiOiJCYWNoZWxvciBvZiBTY2llbmNlIGFuZCBBcnRzIn19LCJleHBpcmF0aW9uRGF0ZSI6IjIwMjctMDUtMjBUMTE6Mjc6NDAuNzkyMTM3NjE0WiJ9LCJqdGkiOiJ1cm46dXVpZDo3MTg5NTkyNi1mNGJjLTQ4Y2EtOTcyZC0yMTE4MzgyODMyYmQiLCJleHAiOjE4MTA4MTI0NjAsImlhdCI6MTc3OTI3NjQ2MCwibmJmIjoxNzc5Mjc2NDYwfQ._oWIQARZvoTP71K2JxbnDpUaA9tfBxMBM6e3kjlATffqwpV5_rHgmYEYgZNrQ1aK7idlXCbsyxtHiUrVgR54Ag"
                ]
              }
            }
          },
          "errors": [],
          "execution_time": "PT0.030289930S"
        }
      }
    },
    "presented_raw_data": {
      "vpToken": {
        "example_university_degree_jwt_vc": [
          "eyJraWQiOiJkaWQ6a2V5OnpEbmFlYXU5OHhudDlhd2NrTnBFcTM0Q3cyTGJmcEVpZ2dKYzQzdXdNaDh1QWE4QjMjekRuYWVhdTk4eG50OWF3Y2tOcEVxMzRDdzJMYmZwRWlnZ0pjNDN1d01oOHVBYThCMyIsInR5cCI6IkpXVCIsImFsZyI6IkVTMjU2In0.eyJzdWIiOiJkaWQ6a2V5OnpEbmFlYXU5OHhudDlhd2NrTnBFcTM0Q3cyTGJmcEVpZ2dKYzQzdXdNaDh1QWE4QjMiLCJuYmYiOjE3NzkyNzY5NzUsImlhdCI6MTc3OTI3NzAzNSwianRpIjoidXJuOnV1aWQ6N2RhNDMyZWYtYmMyMC00MmRjLTk0ZTUtZjVjMGJkNzAyNzExIiwiaXNzIjoiZGlkOmtleTp6RG5hZWF1OTh4bnQ5YXdja05wRXEzNEN3MkxiZnBFaWdnSmM0M3V3TWg4dUFhOEIzIiwibm9uY2UiOiJmOWI1N2VjMy1jODUyLTQ5YWQtOTUzNy0yZTE4MjBmMjNhZDkiLCJhdWQiOiIiLCJ2cCI6eyJAY29udGV4dCI6WyJodHRwczovL3d3dy53My5vcmcvMjAxOC9jcmVkZW50aWFscy92MSJdLCJ0eXBlIjpbIlZlcmlmaWFibGVQcmVzZW50YXRpb24iXSwiaWQiOiJ1cm46dXVpZDo3ZGE0MzJlZi1iYzIwLTQyZGMtOTRlNS1mNWMwYmQ3MDI3MTEiLCJob2xkZXIiOiJkaWQ6a2V5OnpEbmFlYXU5OHhudDlhd2NrTnBFcTM0Q3cyTGJmcEVpZ2dKYzQzdXdNaDh1QWE4QjMiLCJjbmYiOm51bGwsInZlcmlmaWFibGVDcmVkZW50aWFsIjpbImV5SnJhV1FpT2lKa2FXUTZhbmRyT21WNVNuSmtTR3RwVDJsS1VGTXhRV2xNUTBwcVkyNVphVTlwU2taYVJFa3hUbFJGTlVscGQybGhNbXhyU1dwdmFXRlZjRTVWZWxacFlURndWMU5YZUhWWk1scDRXREI0YlZneFRqRmxSVzk1VTI1U1VrNVZhREpaV0c4elpFWmtVV0pyUm5GV1ZsWnJZM2xKYzBsdVoybFBhVXBIVjIxU01tUXdUVFJaVldSdlZXNWtlR1ZzWkhka1IxWnhUVVUxWVZvelVqTlhWVVpLVFZaT05WSnRZM2hpVlhSRlVsWlNVRnB1UmtaSmJqQWphVXBOVXpWaWExcFdTV3h1WTJaeFgweG1YMU4xZUVveVNuUlJOVWgyWVhvM2RGZFFia0ZxVlZWa2N5SXNJblI1Y0NJNklrcFhWQ0lzSW1Gc1p5STZJa1ZrUkZOQkluMC5leUpwYzNNaU9pSmthV1E2YW5kck9tVjVTbkprU0d0cFQybEtVRk14UVdsTVEwcHFZMjVaYVU5cFNrWmFSRWt4VGxSRk5VbHBkMmxoTW14clNXcHZhV0ZWY0U1VmVsWnBZVEZ3VjFOWGVIVlpNbHA0V0RCNGJWZ3hUakZsUlc5NVUyNVNVazVWYURKWldHOHpaRVprVVdKclJuRldWbFpyWTNsSmMwbHVaMmxQYVVwSFYyMVNNbVF3VFRSWlZXUnZWVzVrZUdWc1pIZGtSMVp4VFVVMVlWb3pVak5YVlVaS1RWWk9OVkp0WTNoaVZYUkZVbFpTVUZwdVJrWkpiakFpTENKemRXSWlPaUprYVdRNmEyVjVPbnBFYm1GbFlYVTVPSGh1ZERsaGQyTnJUbkJGY1RNMFEzY3lUR0ptY0VWcFoyZEtZelF6ZFhkTmFEaDFRV0U0UWpNaUxDSjJZeUk2ZXlKQVkyOXVkR1Y0ZENJNld5Sm9kSFJ3Y3pvdkwzZDNkeTUzTXk1dmNtY3ZNakF4T0M5amNtVmtaVzUwYVdGc2N5OTJNU0lzSW1oMGRIQnpPaTh2ZDNkM0xuY3pMbTl5Wnk4eU1ERTRMMk55WldSbGJuUnBZV3h6TDJWNFlXMXdiR1Z6TDNZeElsMHNJbWxrSWpvaWRYSnVPblYxYVdRNk56RTRPVFU1TWpZdFpqUmlZeTAwT0dOaExUazNNbVF0TWpFeE9ETTRNamd6TW1Ka0lpd2lkSGx3WlNJNld5SldaWEpwWm1saFlteGxRM0psWkdWdWRHbGhiQ0lzSWxWdWFYWmxjbk5wZEhsRVpXZHlaV1VpWFN3aWFYTnpkV1Z5SWpwN0ltbGtJam9pWkdsa09tcDNhenBsZVVweVpFaHJhVTlwU2xCVE1VRnBURU5LYW1OdVdXbFBhVXBHV2tSSk1VNVVSVFZKYVhkcFlUSnNhMGxxYjJsaFZYQk9WWHBXYVdFeGNGZFRWM2gxV1RKYWVGZ3dlRzFZTVU0eFpVVnZlVk51VWxKT1ZXZ3lXVmh2TTJSR1pGRmlhMFp4VmxaV2EyTjVTWE5KYm1kcFQybEtSMWR0VWpKa01FMDBXVlZrYjFWdVpIaGxiR1IzWkVkV2NVMUZOV0ZhTTFJelYxVkdTazFXVGpWU2JXTjRZbFYwUlZKV1VsQmFia1pHU1c0d0luMHNJbWx6YzNWaGJtTmxSR0YwWlNJNklqSXdNall0TURVdE1qQlVNVEU2TWpjNk5EQXVOemt5TVRBek9URXpXaUlzSW1OeVpXUmxiblJwWVd4VGRXSnFaV04wSWpwN0ltbGtJam9pWkdsa09tdGxlVHA2Ukc1aFpXRjFPVGg0Ym5RNVlYZGphMDV3UlhFek5FTjNNa3hpWm5CRmFXZG5TbU0wTTNWM1RXZzRkVUZoT0VJeklpd2laR1ZuY21WbElqcDdJblI1Y0dVaU9pSkNZV05vWld4dmNrUmxaM0psWlNJc0ltNWhiV1VpT2lKQ1lXTm9aV3h2Y2lCdlppQlRZMmxsYm1ObElHRnVaQ0JCY25SekluMTlMQ0psZUhCcGNtRjBhVzl1UkdGMFpTSTZJakl3TWpjdE1EVXRNakJVTVRFNk1qYzZOREF1TnpreU1UTTNOakUwV2lKOUxDSnFkR2tpT2lKMWNtNDZkWFZwWkRvM01UZzVOVGt5TmkxbU5HSmpMVFE0WTJFdE9UY3laQzB5TVRFNE16Z3lPRE15WW1RaUxDSmxlSEFpT2pFNE1UQTRNVEkwTmpBc0ltbGhkQ0k2TVRjM09USTNOalEyTUN3aWJtSm1Jam94TnpjNU1qYzJORFl3ZlEuX29XSVFBUlp2b1RQNzFLMkp4Ym5EcFVhQTl0ZkJ4TUJNNmUza2psQVRmZnF3cFY1X3JIZ21ZRVlnWk5yUTFhSzdpZGxYQ2JzeXh0SGlVclZnUjU0QWciXX19.D6w2TPAx92_FGTH64K7ANrir6aJRRvyhicT1q5fJVuIy8M5EVjDWDM3sOibTHgDcmr3-EM-fv2WmTiY7YUpU2Q"
        ]
      },
      "state": "a65f02bd-c7f0-4094-932f-555ddce1b32f"
    },
    "presented_presentations": {
      "example_university_degree_jwt_vc": {
        "type": "jwt_vc_json",
        "format": "jwt_vc_json",
        "jwt": "eyJraWQiOiJkaWQ6a2V5OnpEbmFlYXU5OHhudDlhd2NrTnBFcTM0Q3cyTGJmcEVpZ2dKYzQzdXdNaDh1QWE4QjMjekRuYWVhdTk4eG50OWF3Y2tOcEVxMzRDdzJMYmZwRWlnZ0pjNDN1d01oOHVBYThCMyIsInR5cCI6IkpXVCIsImFsZyI6IkVTMjU2In0.eyJzdWIiOiJkaWQ6a2V5OnpEbmFlYXU5OHhudDlhd2NrTnBFcTM0Q3cyTGJmcEVpZ2dKYzQzdXdNaDh1QWE4QjMiLCJuYmYiOjE3NzkyNzY5NzUsImlhdCI6MTc3OTI3NzAzNSwianRpIjoidXJuOnV1aWQ6N2RhNDMyZWYtYmMyMC00MmRjLTk0ZTUtZjVjMGJkNzAyNzExIiwiaXNzIjoiZGlkOmtleTp6RG5hZWF1OTh4bnQ5YXdja05wRXEzNEN3MkxiZnBFaWdnSmM0M3V3TWg4dUFhOEIzIiwibm9uY2UiOiJmOWI1N2VjMy1jODUyLTQ5YWQtOTUzNy0yZTE4MjBmMjNhZDkiLCJhdWQiOiIiLCJ2cCI6eyJAY29udGV4dCI6WyJodHRwczovL3d3dy53My5vcmcvMjAxOC9jcmVkZW50aWFscy92MSJdLCJ0eXBlIjpbIlZlcmlmaWFibGVQcmVzZW50YXRpb24iXSwiaWQiOiJ1cm46dXVpZDo3ZGE0MzJlZi1iYzIwLTQyZGMtOTRlNS1mNWMwYmQ3MDI3MTEiLCJob2xkZXIiOiJkaWQ6a2V5OnpEbmFlYXU5OHhudDlhd2NrTnBFcTM0Q3cyTGJmcEVpZ2dKYzQzdXdNaDh1QWE4QjMiLCJjbmYiOm51bGwsInZlcmlmaWFibGVDcmVkZW50aWFsIjpbImV5SnJhV1FpT2lKa2FXUTZhbmRyT21WNVNuSmtTR3RwVDJsS1VGTXhRV2xNUTBwcVkyNVphVTlwU2taYVJFa3hUbFJGTlVscGQybGhNbXhyU1dwdmFXRlZjRTVWZWxacFlURndWMU5YZUhWWk1scDRXREI0YlZneFRqRmxSVzk1VTI1U1VrNVZhREpaV0c4elpFWmtVV0pyUm5GV1ZsWnJZM2xKYzBsdVoybFBhVXBIVjIxU01tUXdUVFJaVldSdlZXNWtlR1ZzWkhka1IxWnhUVVUxWVZvelVqTlhWVVpLVFZaT05WSnRZM2hpVlhSRlVsWlNVRnB1UmtaSmJqQWphVXBOVXpWaWExcFdTV3h1WTJaeFgweG1YMU4xZUVveVNuUlJOVWgyWVhvM2RGZFFia0ZxVlZWa2N5SXNJblI1Y0NJNklrcFhWQ0lzSW1Gc1p5STZJa1ZrUkZOQkluMC5leUpwYzNNaU9pSmthV1E2YW5kck9tVjVTbkprU0d0cFQybEtVRk14UVdsTVEwcHFZMjVaYVU5cFNrWmFSRWt4VGxSRk5VbHBkMmxoTW14clNXcHZhV0ZWY0U1VmVsWnBZVEZ3VjFOWGVIVlpNbHA0V0RCNGJWZ3hUakZsUlc5NVUyNVNVazVWYURKWldHOHpaRVprVVdKclJuRldWbFpyWTNsSmMwbHVaMmxQYVVwSFYyMVNNbVF3VFRSWlZXUnZWVzVrZUdWc1pIZGtSMVp4VFVVMVlWb3pVak5YVlVaS1RWWk9OVkp0WTNoaVZYUkZVbFpTVUZwdVJrWkpiakFpTENKemRXSWlPaUprYVdRNmEyVjVPbnBFYm1GbFlYVTVPSGh1ZERsaGQyTnJUbkJGY1RNMFEzY3lUR0ptY0VWcFoyZEtZelF6ZFhkTmFEaDFRV0U0UWpNaUxDSjJZeUk2ZXlKQVkyOXVkR1Y0ZENJNld5Sm9kSFJ3Y3pvdkwzZDNkeTUzTXk1dmNtY3ZNakF4T0M5amNtVmtaVzUwYVdGc2N5OTJNU0lzSW1oMGRIQnpPaTh2ZDNkM0xuY3pMbTl5Wnk4eU1ERTRMMk55WldSbGJuUnBZV3h6TDJWNFlXMXdiR1Z6TDNZeElsMHNJbWxrSWpvaWRYSnVPblYxYVdRNk56RTRPVFU1TWpZdFpqUmlZeTAwT0dOaExUazNNbVF0TWpFeE9ETTRNamd6TW1Ka0lpd2lkSGx3WlNJNld5SldaWEpwWm1saFlteGxRM0psWkdWdWRHbGhiQ0lzSWxWdWFYWmxjbk5wZEhsRVpXZHlaV1VpWFN3aWFYTnpkV1Z5SWpwN0ltbGtJam9pWkdsa09tcDNhenBsZVVweVpFaHJhVTlwU2xCVE1VRnBURU5LYW1OdVdXbFBhVXBHV2tSSk1VNVVSVFZKYVhkcFlUSnNhMGxxYjJsaFZYQk9WWHBXYVdFeGNGZFRWM2gxV1RKYWVGZ3dlRzFZTVU0eFpVVnZlVk51VWxKT1ZXZ3lXVmh2TTJSR1pGRmlhMFp4VmxaV2EyTjVTWE5KYm1kcFQybEtSMWR0VWpKa01FMDBXVlZrYjFWdVpIaGxiR1IzWkVkV2NVMUZOV0ZhTTFJelYxVkdTazFXVGpWU2JXTjRZbFYwUlZKV1VsQmFia1pHU1c0d0luMHNJbWx6YzNWaGJtTmxSR0YwWlNJNklqSXdNall0TURVdE1qQlVNVEU2TWpjNk5EQXVOemt5TVRBek9URXpXaUlzSW1OeVpXUmxiblJwWVd4VGRXSnFaV04wSWpwN0ltbGtJam9pWkdsa09tdGxlVHA2Ukc1aFpXRjFPVGg0Ym5RNVlYZGphMDV3UlhFek5FTjNNa3hpWm5CRmFXZG5TbU0wTTNWM1RXZzRkVUZoT0VJeklpd2laR1ZuY21WbElqcDdJblI1Y0dVaU9pSkNZV05vWld4dmNrUmxaM0psWlNJc0ltNWhiV1VpT2lKQ1lXTm9aV3h2Y2lCdlppQlRZMmxsYm1ObElHRnVaQ0JCY25SekluMTlMQ0psZUhCcGNtRjBhVzl1UkdGMFpTSTZJakl3TWpjdE1EVXRNakJVTVRFNk1qYzZOREF1TnpreU1UTTNOakUwV2lKOUxDSnFkR2tpT2lKMWNtNDZkWFZwWkRvM01UZzVOVGt5TmkxbU5HSmpMVFE0WTJFdE9UY3laQzB5TVRFNE16Z3lPRE15WW1RaUxDSmxlSEFpT2pFNE1UQTRNVEkwTmpBc0ltbGhkQ0k2TVRjM09USTNOalEyTUN3aWJtSm1Jam94TnpjNU1qYzJORFl3ZlEuX29XSVFBUlp2b1RQNzFLMkp4Ym5EcFVhQTl0ZkJ4TUJNNmUza2psQVRmZnF3cFY1X3JIZ21ZRVlnWk5yUTFhSzdpZGxYQ2JzeXh0SGlVclZnUjU0QWciXX19.D6w2TPAx92_FGTH64K7ANrir6aJRRvyhicT1q5fJVuIy8M5EVjDWDM3sOibTHgDcmr3-EM-fv2WmTiY7YUpU2Q",
        "payload": {
          "sub": "did:key:zDnaeau98xnt9awckNpEq34Cw2LbfpEiggJc43uwMh8uAa8B3",
          "nbf": 1779276975,
          "iat": 1779277035,
          "jti": "urn:uuid:7da432ef-bc20-42dc-94e5-f5c0bd702711",
          "iss": "did:key:zDnaeau98xnt9awckNpEq34Cw2LbfpEiggJc43uwMh8uAa8B3",
          "nonce": "f9b57ec3-c852-49ad-9537-2e1820f23ad9",
          "aud": "",
          "vp": {
            "@context": [
              "https://www.w3.org/2018/credentials/v1"
            ],
            "type": [
              "VerifiablePresentation"
            ],
            "id": "urn:uuid:7da432ef-bc20-42dc-94e5-f5c0bd702711",
            "holder": "did:key:zDnaeau98xnt9awckNpEq34Cw2LbfpEiggJc43uwMh8uAa8B3",
            "verifiableCredential": [
              "eyJraWQiOiJkaWQ6andrOmV5SnJkSGtpT2lKUFMxQWlMQ0pqY25ZaU9pSkZaREkxTlRFNUlpd2lhMmxrSWpvaWFVcE5VelZpYTFwV1NXeHVZMlp4WDB4bVgxTjFlRW95U25SUk5VaDJZWG8zZEZkUWJrRnFWVlZrY3lJc0luZ2lPaUpHV21SMmQwTTRZVWRvVW5keGVsZHdkR1ZxTUU1YVozUjNXVUZKTVZONVJtY3hiVXRFUlZSUFpuRkZJbjAjaUpNUzVia1pWSWxuY2ZxX0xmX1N1eEoySnRRNUh2YXo3dFdQbkFqVVVkcyIsInR5cCI6IkpXVCIsImFsZyI6IkVkRFNBIn0.eyJpc3MiOiJkaWQ6andrOmV5SnJkSGtpT2lKUFMxQWlMQ0pqY25ZaU9pSkZaREkxTlRFNUlpd2lhMmxrSWpvaWFVcE5VelZpYTFwV1NXeHVZMlp4WDB4bVgxTjFlRW95U25SUk5VaDJZWG8zZEZkUWJrRnFWVlZrY3lJc0luZ2lPaUpHV21SMmQwTTRZVWRvVW5keGVsZHdkR1ZxTUU1YVozUjNXVUZKTVZONVJtY3hiVXRFUlZSUFpuRkZJbjAiLCJzdWIiOiJkaWQ6a2V5OnpEbmFlYXU5OHhudDlhd2NrTnBFcTM0Q3cyTGJmcEVpZ2dKYzQzdXdNaDh1QWE4QjMiLCJ2YyI6eyJAY29udGV4dCI6WyJodHRwczovL3d3dy53My5vcmcvMjAxOC9jcmVkZW50aWFscy92MSIsImh0dHBzOi8vd3d3LnczLm9yZy8yMDE4L2NyZWRlbnRpYWxzL2V4YW1wbGVzL3YxIl0sImlkIjoidXJuOnV1aWQ6NzE4OTU5MjYtZjRiYy00OGNhLTk3MmQtMjExODM4MjgzMmJkIiwidHlwZSI6WyJWZXJpZmlhYmxlQ3JlZGVudGlhbCIsIlVuaXZlcnNpdHlEZWdyZWUiXSwiaXNzdWVyIjp7ImlkIjoiZGlkOmp3azpleUpyZEhraU9pSlBTMUFpTENKamNuWWlPaUpGWkRJMU5URTVJaXdpYTJsa0lqb2lhVXBOVXpWaWExcFdTV3h1WTJaeFgweG1YMU4xZUVveVNuUlJOVWgyWVhvM2RGZFFia0ZxVlZWa2N5SXNJbmdpT2lKR1dtUjJkME00WVVkb1VuZHhlbGR3ZEdWcU1FNWFaM1IzV1VGSk1WTjVSbWN4YlV0RVJWUlBabkZGSW4wIn0sImlzc3VhbmNlRGF0ZSI6IjIwMjYtMDUtMjBUMTE6Mjc6NDAuNzkyMTAzOTEzWiIsImNyZWRlbnRpYWxTdWJqZWN0Ijp7ImlkIjoiZGlkOmtleTp6RG5hZWF1OTh4bnQ5YXdja05wRXEzNEN3MkxiZnBFaWdnSmM0M3V3TWg4dUFhOEIzIiwiZGVncmVlIjp7InR5cGUiOiJCYWNoZWxvckRlZ3JlZSIsIm5hbWUiOiJCYWNoZWxvciBvZiBTY2llbmNlIGFuZCBBcnRzIn19LCJleHBpcmF0aW9uRGF0ZSI6IjIwMjctMDUtMjBUMTE6Mjc6NDAuNzkyMTM3NjE0WiJ9LCJqdGkiOiJ1cm46dXVpZDo3MTg5NTkyNi1mNGJjLTQ4Y2EtOTcyZC0yMTE4MzgyODMyYmQiLCJleHAiOjE4MTA4MTI0NjAsImlhdCI6MTc3OTI3NjQ2MCwibmJmIjoxNzc5Mjc2NDYwfQ._oWIQARZvoTP71K2JxbnDpUaA9tfBxMBM6e3kjlATffqwpV5_rHgmYEYgZNrQ1aK7idlXCbsyxtHiUrVgR54Ag"
            ]
          }
        },
        "issuer": "did:key:zDnaeau98xnt9awckNpEq34Cw2LbfpEiggJc43uwMh8uAa8B3",
        "audience": "",
        "nonce": "f9b57ec3-c852-49ad-9537-2e1820f23ad9",
        "vp": {
          "@context": [
            "https://www.w3.org/2018/credentials/v1"
          ],
          "type": [
            "VerifiablePresentation"
          ],
          "id": "urn:uuid:7da432ef-bc20-42dc-94e5-f5c0bd702711",
          "holder": "did:key:zDnaeau98xnt9awckNpEq34Cw2LbfpEiggJc43uwMh8uAa8B3",
          "verifiableCredential": [
            "eyJraWQiOiJkaWQ6andrOmV5SnJkSGtpT2lKUFMxQWlMQ0pqY25ZaU9pSkZaREkxTlRFNUlpd2lhMmxrSWpvaWFVcE5VelZpYTFwV1NXeHVZMlp4WDB4bVgxTjFlRW95U25SUk5VaDJZWG8zZEZkUWJrRnFWVlZrY3lJc0luZ2lPaUpHV21SMmQwTTRZVWRvVW5keGVsZHdkR1ZxTUU1YVozUjNXVUZKTVZONVJtY3hiVXRFUlZSUFpuRkZJbjAjaUpNUzVia1pWSWxuY2ZxX0xmX1N1eEoySnRRNUh2YXo3dFdQbkFqVVVkcyIsInR5cCI6IkpXVCIsImFsZyI6IkVkRFNBIn0.eyJpc3MiOiJkaWQ6andrOmV5SnJkSGtpT2lKUFMxQWlMQ0pqY25ZaU9pSkZaREkxTlRFNUlpd2lhMmxrSWpvaWFVcE5VelZpYTFwV1NXeHVZMlp4WDB4bVgxTjFlRW95U25SUk5VaDJZWG8zZEZkUWJrRnFWVlZrY3lJc0luZ2lPaUpHV21SMmQwTTRZVWRvVW5keGVsZHdkR1ZxTUU1YVozUjNXVUZKTVZONVJtY3hiVXRFUlZSUFpuRkZJbjAiLCJzdWIiOiJkaWQ6a2V5OnpEbmFlYXU5OHhudDlhd2NrTnBFcTM0Q3cyTGJmcEVpZ2dKYzQzdXdNaDh1QWE4QjMiLCJ2YyI6eyJAY29udGV4dCI6WyJodHRwczovL3d3dy53My5vcmcvMjAxOC9jcmVkZW50aWFscy92MSIsImh0dHBzOi8vd3d3LnczLm9yZy8yMDE4L2NyZWRlbnRpYWxzL2V4YW1wbGVzL3YxIl0sImlkIjoidXJuOnV1aWQ6NzE4OTU5MjYtZjRiYy00OGNhLTk3MmQtMjExODM4MjgzMmJkIiwidHlwZSI6WyJWZXJpZmlhYmxlQ3JlZGVudGlhbCIsIlVuaXZlcnNpdHlEZWdyZWUiXSwiaXNzdWVyIjp7ImlkIjoiZGlkOmp3azpleUpyZEhraU9pSlBTMUFpTENKamNuWWlPaUpGWkRJMU5URTVJaXdpYTJsa0lqb2lhVXBOVXpWaWExcFdTV3h1WTJaeFgweG1YMU4xZUVveVNuUlJOVWgyWVhvM2RGZFFia0ZxVlZWa2N5SXNJbmdpT2lKR1dtUjJkME00WVVkb1VuZHhlbGR3ZEdWcU1FNWFaM1IzV1VGSk1WTjVSbWN4YlV0RVJWUlBabkZGSW4wIn0sImlzc3VhbmNlRGF0ZSI6IjIwMjYtMDUtMjBUMTE6Mjc6NDAuNzkyMTAzOTEzWiIsImNyZWRlbnRpYWxTdWJqZWN0Ijp7ImlkIjoiZGlkOmtleTp6RG5hZWF1OTh4bnQ5YXdja05wRXEzNEN3MkxiZnBFaWdnSmM0M3V3TWg4dUFhOEIzIiwiZGVncmVlIjp7InR5cGUiOiJCYWNoZWxvckRlZ3JlZSIsIm5hbWUiOiJCYWNoZWxvciBvZiBTY2llbmNlIGFuZCBBcnRzIn19LCJleHBpcmF0aW9uRGF0ZSI6IjIwMjctMDUtMjBUMTE6Mjc6NDAuNzkyMTM3NjE0WiJ9LCJqdGkiOiJ1cm46dXVpZDo3MTg5NTkyNi1mNGJjLTQ4Y2EtOTcyZC0yMTE4MzgyODMyYmQiLCJleHAiOjE4MTA4MTI0NjAsImlhdCI6MTc3OTI3NjQ2MCwibmJmIjoxNzc5Mjc2NDYwfQ._oWIQARZvoTP71K2JxbnDpUaA9tfBxMBM6e3kjlATffqwpV5_rHgmYEYgZNrQ1aK7idlXCbsyxtHiUrVgR54Ag"
          ]
        },
        "credentials": [
          {
            "type": "vc-w3c_1_1",
            "disclosables": {},
            "credentialData": {
              "@context": [
                "https://www.w3.org/2018/credentials/v1",
                "https://www.w3.org/2018/credentials/examples/v1"
              ],
              "id": "urn:uuid:71895926-f4bc-48ca-972d-2118382832bd",
              "type": [
                "VerifiableCredential",
                "UniversityDegree"
              ],
              "issuer": {
                "id": "did:jwk:eyJrdHkiOiJPS1AiLCJjcnYiOiJFZDI1NTE5Iiwia2lkIjoiaUpNUzVia1pWSWxuY2ZxX0xmX1N1eEoySnRRNUh2YXo3dFdQbkFqVVVkcyIsIngiOiJGWmR2d0M4YUdoUndxeldwdGVqME5aZ3R3WUFJMVN5RmcxbUtERVRPZnFFIn0"
              },
              "issuanceDate": "2026-05-20T11:27:40.792103913Z",
              "credentialSubject": {
                "id": "did:key:zDnaeau98xnt9awckNpEq34Cw2LbfpEiggJc43uwMh8uAa8B3",
                "degree": {
                  "type": "BachelorDegree",
                  "name": "Bachelor of Science and Arts"
                }
              },
              "expirationDate": "2027-05-20T11:27:40.792137614Z"
            },
            "issuer": "did:jwk:eyJrdHkiOiJPS1AiLCJjcnYiOiJFZDI1NTE5Iiwia2lkIjoiaUpNUzVia1pWSWxuY2ZxX0xmX1N1eEoySnRRNUh2YXo3dFdQbkFqVVVkcyIsIngiOiJGWmR2d0M4YUdoUndxeldwdGVqME5aZ3R3WUFJMVN5RmcxbUtERVRPZnFFIn0",
            "subject": "did:key:zDnaeau98xnt9awckNpEq34Cw2LbfpEiggJc43uwMh8uAa8B3",
            "signature": {
              "type": "signature-jwt",
              "signature": "_oWIQARZvoTP71K2JxbnDpUaA9tfBxMBM6e3kjlATffqwpV5_rHgmYEYgZNrQ1aK7idlXCbsyxtHiUrVgR54Ag",
              "jwtHeader": {
                "kid": "did:jwk:eyJrdHkiOiJPS1AiLCJjcnYiOiJFZDI1NTE5Iiwia2lkIjoiaUpNUzVia1pWSWxuY2ZxX0xmX1N1eEoySnRRNUh2YXo3dFdQbkFqVVVkcyIsIngiOiJGWmR2d0M4YUdoUndxeldwdGVqME5aZ3R3WUFJMVN5RmcxbUtERVRPZnFFIn0#iJMS5bkZVIlncfq_Lf_SuxJ2JtQ5Hvaz7tWPnAjUUds",
                "typ": "JWT",
                "alg": "EdDSA"
              }
            },
            "signed": "eyJraWQiOiJkaWQ6andrOmV5SnJkSGtpT2lKUFMxQWlMQ0pqY25ZaU9pSkZaREkxTlRFNUlpd2lhMmxrSWpvaWFVcE5VelZpYTFwV1NXeHVZMlp4WDB4bVgxTjFlRW95U25SUk5VaDJZWG8zZEZkUWJrRnFWVlZrY3lJc0luZ2lPaUpHV21SMmQwTTRZVWRvVW5keGVsZHdkR1ZxTUU1YVozUjNXVUZKTVZONVJtY3hiVXRFUlZSUFpuRkZJbjAjaUpNUzVia1pWSWxuY2ZxX0xmX1N1eEoySnRRNUh2YXo3dFdQbkFqVVVkcyIsInR5cCI6IkpXVCIsImFsZyI6IkVkRFNBIn0.eyJpc3MiOiJkaWQ6andrOmV5SnJkSGtpT2lKUFMxQWlMQ0pqY25ZaU9pSkZaREkxTlRFNUlpd2lhMmxrSWpvaWFVcE5VelZpYTFwV1NXeHVZMlp4WDB4bVgxTjFlRW95U25SUk5VaDJZWG8zZEZkUWJrRnFWVlZrY3lJc0luZ2lPaUpHV21SMmQwTTRZVWRvVW5keGVsZHdkR1ZxTUU1YVozUjNXVUZKTVZONVJtY3hiVXRFUlZSUFpuRkZJbjAiLCJzdWIiOiJkaWQ6a2V5OnpEbmFlYXU5OHhudDlhd2NrTnBFcTM0Q3cyTGJmcEVpZ2dKYzQzdXdNaDh1QWE4QjMiLCJ2YyI6eyJAY29udGV4dCI6WyJodHRwczovL3d3dy53My5vcmcvMjAxOC9jcmVkZW50aWFscy92MSIsImh0dHBzOi8vd3d3LnczLm9yZy8yMDE4L2NyZWRlbnRpYWxzL2V4YW1wbGVzL3YxIl0sImlkIjoidXJuOnV1aWQ6NzE4OTU5MjYtZjRiYy00OGNhLTk3MmQtMjExODM4MjgzMmJkIiwidHlwZSI6WyJWZXJpZmlhYmxlQ3JlZGVudGlhbCIsIlVuaXZlcnNpdHlEZWdyZWUiXSwiaXNzdWVyIjp7ImlkIjoiZGlkOmp3azpleUpyZEhraU9pSlBTMUFpTENKamNuWWlPaUpGWkRJMU5URTVJaXdpYTJsa0lqb2lhVXBOVXpWaWExcFdTV3h1WTJaeFgweG1YMU4xZUVveVNuUlJOVWgyWVhvM2RGZFFia0ZxVlZWa2N5SXNJbmdpT2lKR1dtUjJkME00WVVkb1VuZHhlbGR3ZEdWcU1FNWFaM1IzV1VGSk1WTjVSbWN4YlV0RVJWUlBabkZGSW4wIn0sImlzc3VhbmNlRGF0ZSI6IjIwMjYtMDUtMjBUMTE6Mjc6NDAuNzkyMTAzOTEzWiIsImNyZWRlbnRpYWxTdWJqZWN0Ijp7ImlkIjoiZGlkOmtleTp6RG5hZWF1OTh4bnQ5YXdja05wRXEzNEN3MkxiZnBFaWdnSmM0M3V3TWg4dUFhOEIzIiwiZGVncmVlIjp7InR5cGUiOiJCYWNoZWxvckRlZ3JlZSIsIm5hbWUiOiJCYWNoZWxvciBvZiBTY2llbmNlIGFuZCBBcnRzIn19LCJleHBpcmF0aW9uRGF0ZSI6IjIwMjctMDUtMjBUMTE6Mjc6NDAuNzkyMTM3NjE0WiJ9LCJqdGkiOiJ1cm46dXVpZDo3MTg5NTkyNi1mNGJjLTQ4Y2EtOTcyZC0yMTE4MzgyODMyYmQiLCJleHAiOjE4MTA4MTI0NjAsImlhdCI6MTc3OTI3NjQ2MCwibmJmIjoxNzc5Mjc2NDYwfQ._oWIQARZvoTP71K2JxbnDpUaA9tfBxMBM6e3kjlATffqwpV5_rHgmYEYgZNrQ1aK7idlXCbsyxtHiUrVgR54Ag",
            "format": "jwt_vc_json"
          }
        ]
      }
    },
    "presented_credentials": {
      "example_university_degree_jwt_vc": [
        {
          "type": "vc-w3c_1_1",
          "disclosables": {},
          "credentialData": {
            "@context": [
              "https://www.w3.org/2018/credentials/v1",
              "https://www.w3.org/2018/credentials/examples/v1"
            ],
            "id": "urn:uuid:71895926-f4bc-48ca-972d-2118382832bd",
            "type": [
              "VerifiableCredential",
              "UniversityDegree"
            ],
            "issuer": {
              "id": "did:jwk:eyJrdHkiOiJPS1AiLCJjcnYiOiJFZDI1NTE5Iiwia2lkIjoiaUpNUzVia1pWSWxuY2ZxX0xmX1N1eEoySnRRNUh2YXo3dFdQbkFqVVVkcyIsIngiOiJGWmR2d0M4YUdoUndxeldwdGVqME5aZ3R3WUFJMVN5RmcxbUtERVRPZnFFIn0"
            },
            "issuanceDate": "2026-05-20T11:27:40.792103913Z",
            "credentialSubject": {
              "id": "did:key:zDnaeau98xnt9awckNpEq34Cw2LbfpEiggJc43uwMh8uAa8B3",
              "degree": {
                "type": "BachelorDegree",
                "name": "Bachelor of Science and Arts"
              }
            },
            "expirationDate": "2027-05-20T11:27:40.792137614Z"
          },
          "issuer": "did:jwk:eyJrdHkiOiJPS1AiLCJjcnYiOiJFZDI1NTE5Iiwia2lkIjoiaUpNUzVia1pWSWxuY2ZxX0xmX1N1eEoySnRRNUh2YXo3dFdQbkFqVVVkcyIsIngiOiJGWmR2d0M4YUdoUndxeldwdGVqME5aZ3R3WUFJMVN5RmcxbUtERVRPZnFFIn0",
          "subject": "did:key:zDnaeau98xnt9awckNpEq34Cw2LbfpEiggJc43uwMh8uAa8B3",
          "signature": {
            "type": "signature-jwt",
            "signature": "_oWIQARZvoTP71K2JxbnDpUaA9tfBxMBM6e3kjlATffqwpV5_rHgmYEYgZNrQ1aK7idlXCbsyxtHiUrVgR54Ag",
            "jwtHeader": {
              "kid": "did:jwk:eyJrdHkiOiJPS1AiLCJjcnYiOiJFZDI1NTE5Iiwia2lkIjoiaUpNUzVia1pWSWxuY2ZxX0xmX1N1eEoySnRRNUh2YXo3dFdQbkFqVVVkcyIsIngiOiJGWmR2d0M4YUdoUndxeldwdGVqME5aZ3R3WUFJMVN5RmcxbUtERVRPZnFFIn0#iJMS5bkZVIlncfq_Lf_SuxJ2JtQ5Hvaz7tWPnAjUUds",
              "typ": "JWT",
              "alg": "EdDSA"
            }
          },
          "signed": "eyJraWQiOiJkaWQ6andrOmV5SnJkSGtpT2lKUFMxQWlMQ0pqY25ZaU9pSkZaREkxTlRFNUlpd2lhMmxrSWpvaWFVcE5VelZpYTFwV1NXeHVZMlp4WDB4bVgxTjFlRW95U25SUk5VaDJZWG8zZEZkUWJrRnFWVlZrY3lJc0luZ2lPaUpHV21SMmQwTTRZVWRvVW5keGVsZHdkR1ZxTUU1YVozUjNXVUZKTVZONVJtY3hiVXRFUlZSUFpuRkZJbjAjaUpNUzVia1pWSWxuY2ZxX0xmX1N1eEoySnRRNUh2YXo3dFdQbkFqVVVkcyIsInR5cCI6IkpXVCIsImFsZyI6IkVkRFNBIn0.eyJpc3MiOiJkaWQ6andrOmV5SnJkSGtpT2lKUFMxQWlMQ0pqY25ZaU9pSkZaREkxTlRFNUlpd2lhMmxrSWpvaWFVcE5VelZpYTFwV1NXeHVZMlp4WDB4bVgxTjFlRW95U25SUk5VaDJZWG8zZEZkUWJrRnFWVlZrY3lJc0luZ2lPaUpHV21SMmQwTTRZVWRvVW5keGVsZHdkR1ZxTUU1YVozUjNXVUZKTVZONVJtY3hiVXRFUlZSUFpuRkZJbjAiLCJzdWIiOiJkaWQ6a2V5OnpEbmFlYXU5OHhudDlhd2NrTnBFcTM0Q3cyTGJmcEVpZ2dKYzQzdXdNaDh1QWE4QjMiLCJ2YyI6eyJAY29udGV4dCI6WyJodHRwczovL3d3dy53My5vcmcvMjAxOC9jcmVkZW50aWFscy92MSIsImh0dHBzOi8vd3d3LnczLm9yZy8yMDE4L2NyZWRlbnRpYWxzL2V4YW1wbGVzL3YxIl0sImlkIjoidXJuOnV1aWQ6NzE4OTU5MjYtZjRiYy00OGNhLTk3MmQtMjExODM4MjgzMmJkIiwidHlwZSI6WyJWZXJpZmlhYmxlQ3JlZGVudGlhbCIsIlVuaXZlcnNpdHlEZWdyZWUiXSwiaXNzdWVyIjp7ImlkIjoiZGlkOmp3azpleUpyZEhraU9pSlBTMUFpTENKamNuWWlPaUpGWkRJMU5URTVJaXdpYTJsa0lqb2lhVXBOVXpWaWExcFdTV3h1WTJaeFgweG1YMU4xZUVveVNuUlJOVWgyWVhvM2RGZFFia0ZxVlZWa2N5SXNJbmdpT2lKR1dtUjJkME00WVVkb1VuZHhlbGR3ZEdWcU1FNWFaM1IzV1VGSk1WTjVSbWN4YlV0RVJWUlBabkZGSW4wIn0sImlzc3VhbmNlRGF0ZSI6IjIwMjYtMDUtMjBUMTE6Mjc6NDAuNzkyMTAzOTEzWiIsImNyZWRlbnRpYWxTdWJqZWN0Ijp7ImlkIjoiZGlkOmtleTp6RG5hZWF1OTh4bnQ5YXdja05wRXEzNEN3MkxiZnBFaWdnSmM0M3V3TWg4dUFhOEIzIiwiZGVncmVlIjp7InR5cGUiOiJCYWNoZWxvckRlZ3JlZSIsIm5hbWUiOiJCYWNoZWxvciBvZiBTY2llbmNlIGFuZCBBcnRzIn19LCJleHBpcmF0aW9uRGF0ZSI6IjIwMjctMDUtMjBUMTE6Mjc6NDAuNzkyMTM3NjE0WiJ9LCJqdGkiOiJ1cm46dXVpZDo3MTg5NTkyNi1mNGJjLTQ4Y2EtOTcyZC0yMTE4MzgyODMyYmQiLCJleHAiOjE4MTA4MTI0NjAsImlhdCI6MTc3OTI3NjQ2MCwibmJmIjoxNzc5Mjc2NDYwfQ._oWIQARZvoTP71K2JxbnDpUaA9tfBxMBM6e3kjlATffqwpV5_rHgmYEYgZNrQ1aK7idlXCbsyxtHiUrVgR54Ag",
          "format": "jwt_vc_json"
        }
      ]
    }
  },
  "timestamp": 1779276996743,
  "parent": "waltid.tenant1.verifier1"
}
```

**Key Response Fields:**

- **id**: _String_ - The verification session ID
- **setup**: _Object_ - The complete session configuration that was used to create this verification session
- **creationDate**: _String_ - ISO 8601 timestamp when the session was created
- **expirationDate**: _String_ - ISO 8601 timestamp when the session expires (default: 10 minutes after creation). Session will expire if left unused (no presentation pushed). Once a presentation is received, the session is no longer eligible for expiry.
- **status**: _String_ - The current status of the verification session. Possible values:
  - `"UNKNOWN"` — Session ended up in unknown flow (should be avoided)
  - `"ACTIVE"` — Session was created and is active (can be used)
  - `"UNUSED"` — Session was not used yet, but not expired (can be used)
  - `"IN_USE"` — AuthorizationRequest was requested by wallet
  - `"VALIDATING_RECEIVED_REQUEST"` — Checking if received presentation will be processed
  - `"PROCESSING_FLOW"` — Received presentation is being processed (validation + policy execution)
  - `"EXPIRED"` — Verification request expired without being utilized
  - `"SUCCESSFUL"` — Verification completed fully successfully (all validation & policies passed)
  - `"FAILED"` — Verification was unsuccessful (presentation validation or policies failed)
- **attempted**: _Boolean_ - Whether the wallet has attempted to respond to the verification request
- **reattemptable**: _Boolean_ - Whether the user can retry this verification session if it failed
- **policies**: _Object_ - The policies configured for this session:
  - **vp_policies**: _Object_ (optional) - Policies to run on presentations
  - **vc_policies**: _Array_ (optional) - Policies to run on credentials
  - **specific_vc_policies**: _Object_ (optional) - Policies to run on specific credential IDs
- **policy_results**: _Object_ (optional) - Detailed results for all policies applied to the verification (only present after presentation is received):
  - **vp_policies**: _Object_ - Results for presentation-level policies (audience check, nonce check, envelope signature), organized by credential ID. Structure: `{ "credential_id": { "policy_name": { ... } } }`
  - **vc_policies**: _Array_ - Results for credential-level policies (signature, expiry, schema, etc.). Each item contains `policy`, `success`, and `result`.
  - **specific_vc_policies**: _Object_ - Results for credential-specific policies
  - **overallSuccess**: _Boolean_ (computed) - Whether all policies passed
- **presented_credentials**: _Object_ (optional) - The parsed credentials presented by the user, organized by credential ID

**Note:**

Instead of polling the session status, you can use **callbacks** or **Server Sent Events (SSE)** to be notified when the verification completes. See [Callbacks & SSE](https://docs.walt.id/enterprise-stack/services/verifier2-service/callback-and-sse.md) for details (Enterprise implementation may differ).

---

## Example 2: Requesting Multiple Credentials

You can request multiple credentials in a single verification session. The wallet will present all matching credentials, and policies will be applied to each one.

This example requests both an OpenBadgeCredential and a VerifiableId in JWT format.

**Option: CURL**

**Endpoint:** `POST /v1/{target}/verifier2-service-api/verification-session/create` | [API Reference](https://enterprise.sandbox.walt.id/swagger/index.html#/Service%20%7C%20Verifier2%20Service%20-%20Verification%20Sessions/post_v1__target__verifier2_service_api_verification_session_create)

##### Example Request

```bash
curl -X 'POST' \
  'https://{orgID}.enterprise-sandbox.waltid.dev/v1/{target}/verifier2-service-api/verification-session/create' \
  -H 'accept: */*' \
  -H 'Authorization: Bearer {yourToken}' \
  -H 'Content-Type: application/json' \
  -d '{
  "flow_type": "cross_device",
  "core_flow": {
    "dcql_query": {
      "credentials": [
        {
          "id": "example_openbadge_jwt_vc",
          "format": "jwt_vc_json",
          "meta": {
            "type_values": [
              [
                "VerifiableCredential",
                "OpenBadgeCredential"
              ]
            ]
          },
          "claims": [
            {
              "path": [
                "name"
              ]
            }
          ]
        },
        {
          "id": "example_verifiableid_jwt_vc",
          "format": "jwt_vc_json",
          "meta": {
            "type_values": [
              [
                "VerifiableCredential",
                "VerifiableAttestation",
                "VerifiableId"
              ]
            ]
          },
          "claims": [
            {
              "path": [
                "issuanceDate"
              ]
            }
          ]
        }        
      ]
    },
    "policies": {
      "vc_policies": [
        {
          "policy": "signature"
        }
      ]
    }
  }
}'
```

The wallet will present both credentials (if available), and the signature policy will be applied to each one. The `policy_results` in the session info response will contain separate results for each credential using their `id` values.

---

## Understanding Flow Types and Core Concepts

Now that you've seen verification in action, let's understand the underlying structure.

### Verification Session Structure

A `VerificationSession` defines the full lifecycle: authorization request → user presentation → policy validation → final result.

Every verification request follows this structure:

```json
{
  "flow_type": "cross_device | same_device | dc_api",
  "core_flow": { /* common to all flows */ },
  "url_config": { /* specific to cross_device and same_device */ },
  "redirects": { /* optional */ }
}
```

**Why this structure?**

- **flow_type** determines how the credential request is delivered (QR code vs deep link vs browser API)
- **core_flow** contains the credential query and policies (same regardless of delivery method)
- **url_config** and **redirects** are flow-specific attributes

This separation makes it easy to switch between flows without changing your credential requirements.

### Flow Type Comparison

| Flow Type | Use Case | Required Attributes | User Experience |
|-----------|----------|---------------------|-----------------|
| `cross_device` | User scans QR code from desktop | None beyond core flow | Desktop shows QR → User scans with phone → Phone wallet opens |
| `same_device` | User clicks link on mobile | `redirects` (success/error URLs) | Browser redirects to wallet → Wallet opens → User returns to browser |
| `dc_api` | Browser-native credential exchange | `expectedOrigins` (array of allowed origins) | Browser shows native credential picker → User selects → Instant return |

---

## Advanced Options

### Signed Requests

Sign the authorization request JWT using a verifier signing key. This is required for:

- **HAIP profile** compliance
- **DC API Annex C** (ISO 18013-7) flows

Enable by setting `signed_request: true` in the request body.

**Key Configuration Required:** Signed requests require a signing key (`key`) to be configured. You can either:
- Set the `key` parameter during [verifier2 service creation](https://docs.walt.id/enterprise-stack/services/verifier2-service/setup.md#body-parameters) as a service-wide default
- Override or provide the `key` directly in the verification request body

**Certificate Chain (`x5c`) Required for:**
- X.509-based client authentication when using `x509_san_dns:` or `x509_hash:` as the `clientId` format
- Signed Annex C (ISO 18013-7) requests

The `x5c` parameter can be configured the same way as `key` — as a service-wide default or per-session override.

### Encrypted Responses

The wallet can encrypt the VP token response. Enable by setting `encrypted_response: true` in the request body.

**Key Configuration Required:** Encrypted responses require a key (`key`) for decrypting the VP token response. Configure it during [verifier2 service creation](https://docs.walt.id/enterprise-stack/services/verifier2-service/setup.md#body-parameters) or provide it in the verification request body.

### Custom Policies

Beyond signature verification, you can apply additional policies:

```json
"policies": {
  "vc_policies": [
    { "policy": "signature" },
    { "policy": "expired" },
    { "policy": "not-before" },
    { "policy": "schema" }
  ]
}
```

See [Policies](https://docs.walt.id/enterprise-stack/services/verifier2-service/policies/overview.md) for the complete list and configuration options.

---

## Next Steps

- **Apply custom policies** — See [Policies](https://docs.walt.id/enterprise-stack/services/verifier2-service/policies/overview.md) for validation rules beyond signature verification
- **Verify other credential types** — Try [SD-JWT VC](https://docs.walt.id/enterprise-stack/services/verifier2-service/credential-verification/sd-jwt-vc-oid4vp.md) or [mDL](https://docs.walt.id/enterprise-stack/services/verifier2-service/credential-verification/mdl-oid4vp.md)
- **Use DC API** — Try the [Digital Credentials API](https://docs.walt.id/enterprise-stack/services/verifier2-service/credential-verification/dc-api.md) for browser-native credential exchange
