---
title: "Isolated Flow"
description: "Drive OID4VP credential presentation step by step: consent preview, build VP token, send or reject, plus advanced resolve/match endpoints."
stack: "Community Stack (open source) — version 1.1.1"
stack_version: "1.1.1"
stack_comparison: https://docs.walt.id/community-vs-enterprise.md
canonical_url: https://docs.walt.id/community-stack/wallet2/credential-presenting/isolated-flow
generated: 2026-10-01
---
# Isolated Flow

The [full-flow endpoint](https://docs.walt.id/community-stack/wallet2/credential-presenting/overview.md) matches and submits a presentation in a single call. When you're building a wallet UI and need to show the user what will be shared, let them choose credentials and claim disclosures, or present a credential that isn't stored in the wallet, drive the **isolated endpoints** shown on this page yourself.

For holder consent UIs, start with **preview**: one call resolves and validates the request, matches wallet credentials, and returns verifier metadata plus selectable credentials and claim options. After the user chooses, call **build-vp-token**, then **send-response**. To decline, call **reject** with the same `requestUrl`. Resolve and match remain available when you already have an authorization request or credentials outside the wallet.

All endpoints on this page are rooted at `/wallet/{walletId}/credentials/present`. The examples use `http://localhost:7006` as the base URL (Verifier2 defaults to `7004`).

## Prerequisites

Before you begin, ensure you have:

- **Wallet API v2 running** — Follow the [Setup](https://docs.walt.id/community-stack/wallet2/setup.md) guide.
- **A wallet holding credentials** — Receive credentials first, or prepare inline credentials in the wallet's JSON representation.
- **A presentation request** — Use an `openid4vp://` URL or inline request object from a verifier such as [Verifier2](https://docs.walt.id/community-stack/verifier2/getting-started.md).

---

## When to Use the Isolated Flow

Generally speaking, you should use the isolated flow when building any form of wallet user interface leveraging the wallet API v2. This allows you to properly step through the presentation process and build the necessary UI elements accordingly.

| You want to… | Use |
|---|---|
| Present in one call | [Full flow](https://docs.walt.id/community-stack/wallet2/credential-presenting/overview.md) |
| Show a consent preview (verifier + matches + claims) | [Preview the presentation](#preview-the-presentation) |
| Build a VP token from selected credentials / disclosures | [Build the VP Token](#build-the-vp-token) |
| Submit a manually built response | [Send the Response](#send-the-response) |
| Decline the presentation request | [Reject the presentation](#reject-the-presentation) |
| Read what the verifier is asking for (advanced) | [Resolve the request](#advanced-resolve-the-request) |
| DCQL-match without the full consent preview (advanced) | [Match from the wallet stores](#match-from-the-wallet-stores) |
| Present a credential not held by the wallet | [Present inline credentials](#present-inline-credentials) |

### Consent UI flow

```text
1. Preview  →  2. Build VP Token  →  3. Send Response
                 ↘ Reject (with the same requestUrl)
```

Preview is **stateless**: the wallet does not retain a preview handle. Keep the original `requestUrl` and pass it to **build-vp-token**, **send-response**, and **reject**. The wallet re-resolves and revalidates that URL on each sensitive step. The preview `authorizationRequest` is for display / technical details only.

Any verifier trust configuration you've supplied to the wallet — X.509 trust anchors, verifier-attestation issuers, and pre-registered clients — is applied consistently across preview, build-vp-token, send-response, and reject, so the isolated flow validates the verifier the same way the full flow does. Configure those anchors in [`wallet-service.conf`](https://docs.walt.id/community-stack/wallet2/configurations/config-files/wallet-service.md#clientidtrust).

---

## Preview the Presentation

Resolve and validate the OpenID4VP request, match the wallet's stored credentials, and return everything a consent UI needs — verifier display metadata, matched credential options, per-claim selective-disclosure flags, and any credential-set requirements.

**Option: CURL**

**Endpoint:** `POST /wallet/{walletId}/credentials/present/preview` | [API Reference](https://docs.walt.id/community-stack/wallet2/full-api-reference.md)

##### Example Request

```bash
curl -X POST http://localhost:7006/wallet/{walletId}/credentials/present/preview \
  -H 'Content-Type: application/json' \
  -d '{
    "requestUrl": "openid4vp://authorize?client_id=x509_san_dns%3Averifier.example.org&request_uri=http%3A%2F%2Flocalhost%3A7004%2Fopenid4vc%2Frequest%2Fabc123"
  }'
```

**Path Parameters**

- **walletId**: _String_ (required) - The wallet handling the presentation. See [how to obtain it](https://docs.walt.id/community-stack/wallet2/wallets.md).

**Body Parameters**

- **requestUrl**: _String_ (required) - The OID4VP authorization request URL.
- **keyId**: _String_ (optional) - Signing key used for wallet capability advertisement and request validation during preview. Defaults to the wallet's default signing key. The Ready response echoes this back as `keyId` — pass the same value to [Build the VP Token](#build-the-vp-token) so preview and build agree on key capabilities (e.g. supported algorithms).

---

##### Example Response

```json
{
  "authorizationRequest": {
    "nonce": "n-0S6_WzA2Mj",
    "client_id": "x509_san_dns:verifier.example.org",
    "response_uri": "http://localhost:7004/openid4vc/response",
    "dcql_query": {
      "credentials": [
        {
          "id": "identity_credential",
          "format": "dc+sd-jwt",
          "claims": [
            { "path": ["given_name"] },
            { "path": ["family_name"] }
          ]
        }
      ]
    }
  },
  "valid": true,
  "keyId": "6ba7b810-9dad-11d1-80b4-preview-key",
  "clientId": "x509_san_dns:verifier.example.org",
  "verifier": {
    "name": "Example Verifier",
    "locale": "en-US",
    "logoUri": "https://verifier.example.org/logo.png",
    "clientUri": "https://verifier.example.org",
    "policyUri": null,
    "termsOfServiceUri": null
  },
  "responseUri": "http://localhost:7004/openid4vc/response",
  "state": "af0ifjsldkj",
  "nonce": "n-0S6_WzA2Mj",
  "responseEncryption": {
    "required": false
  },
  "transactionData": [],
  "credentialOptions": [
    {
      "queryId": "identity_credential",
      "credentialId": "6ba7b810-9dad-11d1-80b4-00c04fd430c8",
      "multiple": false,
      "format": "dc+sd-jwt",
      "issuer": "http://localhost:7005/openid4vci",
      "subject": "did:key:z6Mk…",
      "label": null,
      "credentialData": {
        "given_name": "Ada",
        "family_name": "Lovelace",
        "vct": "https://issuer.example.com/identity_credential"
      },
      "disclosures": [
        {
          "path": "given_name",
          "name": "given_name",
          "value": "Ada",
          "selectivelyDisclosable": true,
          "required": true,
          "selectable": false
        },
        {
          "path": "family_name",
          "name": "family_name",
          "value": "Lovelace",
          "selectivelyDisclosable": true,
          "required": false,
          "selectable": true
        }
      ]
    }
  ],
  "credentialRequirements": [],
  "error": null
}
```

**Response Fields**

- **authorizationRequest**: _Object_ - Resolved authorization request for display / technical details only.
- **valid**: _Boolean_ - Whether the request passed wallet validation. When `false`, inspect **error** and optionally [reject](#reject-the-presentation) with that error.
- **keyId**: _String_ (Ready only) - Signing key the preview used for wallet capability advertisement and validation. Pass this back as `keyId` to [Build the VP Token](#build-the-vp-token) so preview and build stay consistent.
- **clientId**: _String_ - The verifier's client identifier.
- **verifier**: _Object_ (optional) - Localized verifier display metadata from `client_metadata` (`name`, `locale`, `logoUri`, `clientUri`, `policyUri`, `termsOfServiceUri`). Supplied by the verifier — not evidence of trust on its own.
- **responseUri** / **state** / **nonce**: Request metadata projected for the UI.
- **responseEncryption**: _Object_ - Whether response encryption is required and related algorithms/keys when present.
- **transactionData**: _Array_ - Decoded `transaction_data` items attached to the request (`type`, `credentialQueryIds`, `rawJson`, `details`). Types must be registered in [`transaction-data-profiles.conf`](https://docs.walt.id/community-stack/wallet2/configurations/config-files/transaction-data-profiles.md); discover them via `GET /transaction-data-profiles`.
- **credentialOptions**: _Array_ - Wallet credentials that satisfy a DCQL credential query. Each entry includes:
  - **queryId** / **credentialId** — DCQL query id and wallet credential id (use these in build selections).
  - **multiple** / **format** / **issuer** / **subject** / **label** / **credentialData** — display and matching context.
  - **disclosures** — claims that may be shared (`path`, `name`, `value`, `selectivelyDisclosable`, `required`, `selectable`).
- **credentialRequirements**: _Array_ - When DCQL credential sets apply: each item has `options` (a list of query-id combinations); at least one combination must be satisfied.
- **error**: _Object_ (optional) - When `valid` is `false`: `code` and optional `message`.

---

## Build the VP Token

Build and sign a `vp_token` from the credentials (and optional claim disclosures) the user selected after preview or match. The wallet re-resolves and revalidates `requestUrl` first, then uses that fresh authorization request for DCQL matching and signing. This step does not send anything to the verifier.

**Option: CURL**

**Endpoint:** `POST /wallet/{walletId}/credentials/present/build-vp-token` | [API Reference](https://docs.walt.id/community-stack/wallet2/full-api-reference.md)

##### Example Request (after preview)

```bash
curl -X POST http://localhost:7006/wallet/{walletId}/credentials/present/build-vp-token \
  -H 'Content-Type: application/json' \
  -d '{
    "requestUrl": "openid4vp://authorize?client_id=x509_san_dns%3Averifier.example.org&request_uri=http%3A%2F%2Flocalhost%3A7004%2Fopenid4vc%2Frequest%2Fabc123",
    "selectedCredentialOptions": [
      {
        "queryId": "identity_credential",
        "credentialId": "6ba7b810-9dad-11d1-80b4-00c04fd430c8"
      }
    ],
    "selectedDisclosureOptions": [
      {
        "queryId": "identity_credential",
        "credentialId": "6ba7b810-9dad-11d1-80b4-00c04fd430c8",
        "path": "family_name"
      }
    ]
  }'
```

##### Example Request (legacy IDs after match)

```bash
curl -X POST http://localhost:7006/wallet/{walletId}/credentials/present/build-vp-token \
  -H 'Content-Type: application/json' \
  -d '{
    "requestUrl": "openid4vp://authorize?client_id=x509_san_dns%3Averifier.example.org&request_uri=http%3A%2F%2Flocalhost%3A7004%2Fopenid4vc%2Frequest%2Fabc123",
    "selectedCredentialIds": {
      "identity_credential": ["6ba7b810-9dad-11d1-80b4-00c04fd430c8"]
    }
  }'
```

**Path Parameters**

- **walletId**: _String_ (required) - The wallet holding the selected credentials.

**Body Parameters**

- **requestUrl**: _String_ (required) - The same OID4VP authorization request URL used for [Preview](#preview-the-presentation) (or [Resolve the Request](#advanced-resolve-the-request)). Re-resolved and revalidated on every call.
- **selectedCredentialOptions**: _Array_ (optional) - Preferred for consent UIs. List of `{ queryId, credentialId }` from `credentialOptions`. When non-empty, takes precedence over `selectedCredentialIds`.
- **selectedDisclosureOptions**: _Array_ (optional) - Selectively disclosable claim paths to include: `{ queryId, credentialId, path }` (paths from that option's `disclosures`). Omit to keep the default disclosure set for the selection (required claims plus matcher defaults). When provided as an empty list, optional selectively disclosable claims are not added beyond what the protocol still requires.
- **selectedCredentialIds**: _Object_ (optional) - Legacy map of DCQL query ID to wallet credential IDs (from [Match from the wallet stores](#match-from-the-wallet-stores)). Used when `selectedCredentialOptions` is empty.
- **key**: _Object_ (optional) - Inline key used to sign the VP token. Takes precedence over `keyId`.
- **keyId**: _String_ (optional) - Key used to sign the VP token. Defaults to the wallet's default key. When you drove the flow through [Preview](#preview-the-presentation) with a specific `keyId`, pass the same value (returned as `keyId` in the Ready response) here so preview and build use the same signing key.
- **did**: _String_ (optional) - DID for holder binding. Defaults to the wallet's default DID.

---

##### Example Response

```json
{
  "vpToken": "{\"identity_credential\":\"eyJhbGciOiJFUzI1NiIs...\"}",
  "idToken": null
}
```

**Response Fields**

- **vpToken**: _String_ - Serialized `vp_token` JSON string.
- **idToken**: _String_ (optional) - Self-issued ID token for SIOPv2 flows, when one is required.

---

## Send the Response

Send the built VP token to the verifier. The wallet re-resolves and revalidates `requestUrl` first, then transmits according to the response mode / URI / encryption from that freshly resolved request.

**Option: CURL**

**Endpoint:** `POST /wallet/{walletId}/credentials/present/send-response` | [API Reference](https://docs.walt.id/community-stack/wallet2/full-api-reference.md)

##### Example Request

```bash
curl -X POST http://localhost:7006/wallet/{walletId}/credentials/present/send-response \
  -H 'Content-Type: application/json' \
  -d '{
    "requestUrl": "openid4vp://authorize?client_id=x509_san_dns%3Averifier.example.org&request_uri=http%3A%2F%2Flocalhost%3A7004%2Fopenid4vc%2Frequest%2Fabc123",
    "vpToken": "{\"identity_credential\":\"eyJhbGciOiJFUzI1NiIs...\"}",
    "idToken": null
  }'
```

**Body Parameters**

- **requestUrl**: _String_ (required) - The same OID4VP authorization request URL used for [Preview](#preview-the-presentation). Re-resolved and revalidated on every call.
- **vpToken**: _String_ (required) - The `vpToken` returned by [Build the VP Token](#build-the-vp-token).
- **idToken**: _String_ (optional) - The `idToken` returned by [Build the VP Token](#build-the-vp-token), when present.

---

##### Example Response

Returns the same shape as the [full presentation flow](https://docs.walt.id/community-stack/wallet2/credential-presenting/overview.md) — `transmission_success`, `verifier_response`, and optionally `redirect_to`.

---

## Reject the Presentation

Decline the presentation request. The wallet re-resolves the original `requestUrl` and returns an OpenID4VP error response to the verifier when a response channel is available. No prior preview is required.

**Option: CURL**

**Endpoint:** `POST /wallet/{walletId}/credentials/present/reject` | [API Reference](https://docs.walt.id/community-stack/wallet2/full-api-reference.md)

##### Example Request

```bash
curl -X POST http://localhost:7006/wallet/{walletId}/credentials/present/reject \
  -H 'Content-Type: application/json' \
  -d '{
    "requestUrl": "openid4vp://authorize?client_id=x509_san_dns%3Averifier.example.org&request_uri=http%3A%2F%2Flocalhost%3A7004%2Fopenid4vc%2Frequest%2Fabc123",
    "errorCode": "access_denied",
    "errorDescription": "User declined"
  }'
```

**Body Parameters**

- **requestUrl**: _String_ (required) - The same OID4VP authorization request URL used for preview.
- **errorCode**: _String_ (optional) - OpenID4VP error code. Defaults to `access_denied`.
- **errorDescription**: _String_ (optional) - Human-readable description sent to the verifier.

---

##### Example Response

Returns the same `WalletPresentResult` shape as [Send the Response](#send-the-response) (for example `transmission_success` and any redirect URL produced by the reject handling).

---

## Advanced: Resolve the Request

Parse the verifier's authorization request to read who is asking and what they want, without matching credentials. Prefer [Preview](#preview-the-presentation) for consent UIs.

**Option: CURL**

**Endpoint:** `POST /wallet/{walletId}/credentials/present/resolve-request` | [API Reference](https://docs.walt.id/community-stack/wallet2/full-api-reference.md)

##### Example Request

```bash
curl -X POST http://localhost:7006/wallet/{walletId}/credentials/present/resolve-request \
  -H 'Content-Type: application/json' \
  -d '{
    "requestUrl": "openid4vp://authorize?client_id=x509_san_dns%3Averifier.example.org&request_uri=http%3A%2F%2Flocalhost%3A7004%2Fopenid4vc%2Frequest%2Fabc123"
  }'
```

**Path Parameters**

- **walletId**: _String_ (required) - The wallet handling the presentation. See [how to obtain it](https://docs.walt.id/community-stack/wallet2/wallets.md).

**Body Parameters**

- **requestUrl**: _String_ (required) - The OID4VP authorization request URL.

---

##### Example Response

```json
{
  "authorizationRequest": {
    "nonce": "n-0S6_WzA2Mj",
    "client_id": "x509_san_dns:verifier.example.org",
    "response_uri": "http://localhost:7004/openid4vc/response",
    "dcql_query": {
      "credentials": [
        {
          "id": "identity_credential",
          "format": "dc+sd-jwt"
        }
      ]
    }
  },
  "nonce": "n-0S6_WzA2Mj",
  "clientId": "x509_san_dns:verifier.example.org",
  "responseUri": "http://localhost:7004/openid4vc/response",
  "hasRequestUri": true,
  "dcqlQuery": {
    "credentials": [
      {
        "id": "identity_credential",
        "format": "dc+sd-jwt"
      }
    ]
  }
}
```

**Response Fields**

- **authorizationRequest**: _Object_ - Resolved authorization request for inspection / display.
- **nonce**: _String_ - The verifier's nonce, which the presentation must be bound to.
- **clientId**: _String_ - The verifier's client identifier.
- **responseUri**: _String_ - Where the presentation will be submitted.
- **hasRequestUri**: _Boolean_ - Whether the request was fetched from a `request_uri` (vs supplied inline).
- **dcqlQuery**: _Object_ - The verifier's DCQL query, ready to pass to [Match from the Wallet Stores](#match-from-the-wallet-stores) or [Match Inline Credentials](#match-inline-credentials).

---

## Match from the Wallet Stores

Run the `dcqlQuery` returned by [Resolve the Request](#advanced-resolve-the-request) against the wallet's stored credentials to see what would satisfy it — without submitting anything. For a full consent preview (verifier display + claim options), use [Preview](#preview-the-presentation) instead.

**Option: CURL**

**Endpoint:** `POST /wallet/{walletId}/credentials/present/match-credentials-from-store` | [API Reference](https://docs.walt.id/community-stack/wallet2/full-api-reference.md)

##### Example Request

```bash
curl -X POST http://localhost:7006/wallet/{walletId}/credentials/present/match-credentials-from-store \
  -H 'Content-Type: application/json' \
  -d '{
    "dcqlQuery": {
      "credentials": [
        {
          "id": "identity_credential",
          "format": "dc+sd-jwt",
          "meta": { "vct_values": ["https://issuer.example.com/identity_credential"] },
          "claims": [
            { "path": ["given_name"] },
            { "path": ["family_name"] }
          ]
        }
      ]
    }
  }'
```

**Path Parameters**

- **walletId**: _String_ (required) - The wallet whose stored credentials are matched.

**Body Parameters**

- **dcqlQuery**: _Object_ (required) - The verifier's DCQL query returned by [Resolve the Request](#advanced-resolve-the-request).

---

##### Example Response

```json
{
  "matchedQueryIds": ["credential_1"],
  "matchCount": 2,
  "matchedCredentialIds": {
    "credential_1": ["6ba7b810-9dad-11d1-80b4-00c04fd430c8"]
  }
}
```

**Response Fields**

- **matchedQueryIds**: _String[]_ - The DCQL credential-query IDs that were satisfied.
- **matchCount**: _Number_ - Total number of matching credentials.
- **matchedCredentialIds**: _Object_ - Map of DCQL query ID to wallet-assigned credential IDs. Use these IDs with [Build the VP Token](#build-the-vp-token) via `selectedCredentialIds`.

After the user consents, complete the manual presentation with [Build the VP Token](#build-the-vp-token) and [Send the Response](#send-the-response), or use the [full-flow endpoint](https://docs.walt.id/community-stack/wallet2/credential-presenting/overview.md) to match and submit in one call.

## Match Inline Credentials

Run a DCQL query against credentials you supply in the request, rather than the wallet's credential stores. Useful for testing a query, or matching credentials held outside the wallet.

**Option: CURL**

**Endpoint:** `POST /wallet/{walletId}/credentials/present/match-credentials` | [API Reference](https://docs.walt.id/community-stack/wallet2/full-api-reference.md)

##### Example Request

```bash
curl -X POST http://localhost:7006/wallet/{walletId}/credentials/present/match-credentials \
  -H 'Content-Type: application/json' \
  -d '{
    "dcqlQuery": { "credentials": [ { "id": "credential_1", "format": "dc+sd-jwt", "meta": { "vct_values": ["https://issuer.example.com/identity_credential"] }, "claims": [ { "path": ["given_name"] } ] } ] },
    "credentials": [
      { "id": "inline-1", "credential": { "type": "vc-sd_jwt", "dmtype": "sdjwtvcdm", "signedWithDisclosures": "eyJ...~WyJ...~", "credentialData": { "vct": "https://issuer.example.com/identity_credential", "given_name": "John" } } }
    ]
  }'
```

**Body Parameters**

- **dcqlQuery**: _Object_ (required) - The DCQL query to match against.
- **credentials**: _Array_ (required) - The credentials to match. Each entry has an `id` (your own label, echoed back in the result) and a `credential`: the credential in the wallet's own JSON representation — **not** a raw credential string. Its `type` field marks the format (`vc-sd_jwt`, `vc-w3c_2`, or `mso_mdoc`); the shape beyond that is internal to each format (for `vc-sd_jwt`: `dmtype`, `signedWithDisclosures`, `credentialData`, and — only when the credential has selectively disclosable claims — `disclosables`, `disclosures`, and `originalCredentialData`). Don't hand-construct this object — the simplest and most reliable way to get one in the right shape is to copy the `credential` object from a [`GET /wallet/{walletId}/credentials/{id}`](https://docs.walt.id/community-stack/wallet2/credential-management.md) response.

---

##### Example Response

Returns the same `MatchCredentialsResult` shape as [Match from the wallet stores](#match-from-the-wallet-stores).

---

## Present Inline Credentials

Present a credential that isn't stored in the wallet — you supply it directly in the request. The wallet resolves the request, builds and signs the presentation from the inline credential, and submits it.

**Option: CURL**

**Endpoint:** `POST /wallet/{walletId}/credentials/present/isolated` | [API Reference](https://docs.walt.id/community-stack/wallet2/full-api-reference.md)

##### Example Request

```bash
curl -X POST http://localhost:7006/wallet/{walletId}/credentials/present/isolated \
  -H 'Content-Type: application/json' \
  -d '{
    "requestUrl": "openid4vp://authorize?client_id=verifier2&request_uri=http%3A%2F%2Flocalhost%3A7004%2Fverification-session%2Fabc123%2Frequest",
    "credentials": [
      { "id": "inline-1", "credential": { "type": "vc-sd_jwt", "dmtype": "sdjwtvcdm", "signedWithDisclosures": "eyJ...~WyJ...~", "credentialData": { "vct": "https://issuer.example.com/identity_credential", "given_name": "John" } } }
    ],
    "keyId": "my-holder-key"
  }'
```

**Body Parameters**

- **requestUrl**: _String_ (required) - The OID4VP authorization request URL.
- **credentials**: _Array_ (required) - The credentials to present. Each entry has an `id` and a `credential`: the credential in the wallet's own JSON representation (same field structure as [Match Inline Credentials](#match-inline-credentials) above), **not** a raw credential string. Unlike matching, actually building and signing a presentation needs the **complete** object — copy it as-is from a [`GET /wallet/{walletId}/credentials/{id}`](https://docs.walt.id/community-stack/wallet2/credential-management.md) response rather than trimming fields; for an SD-JWT VC with selectively disclosable claims this includes `signature`, `signed`, `disclosables`, `disclosures`, and `originalCredentialData` alongside the fields shown above.
- **keyId**: _String_ (optional) - Key used to sign the presentation. Must be the holder key the inline credential is bound to. Defaults to the wallet's default key.
- **did**: _String_ (optional) - DID for the presenter identity. Defaults to the wallet's default DID.

---

##### Example Response

Returns the same shape as the [full presentation flow](https://docs.walt.id/community-stack/wallet2/credential-presenting/overview.md) — `transmission_success`, `verifier_response`, and optionally `redirect_to`.

---

## Endpoint Reference

| Endpoint | Method | Description |
|----------|--------|-------------|
| `/wallet/{walletId}/credentials/present` | POST | Full presentation flow (match from stores, sign, submit) |
| `/wallet/{walletId}/credentials/present/preview` | POST | Consent preview: resolve, validate, match, claim options |
| `/wallet/{walletId}/credentials/present/build-vp-token` | POST | Re-resolve `requestUrl`, then build and sign a VP token from selected stored credentials |
| `/wallet/{walletId}/credentials/present/send-response` | POST | Re-resolve `requestUrl`, then send a manually built VP response to the verifier |
| `/wallet/{walletId}/credentials/present/reject` | POST | Reject a presentation request (re-resolve `requestUrl`) |
| `/wallet/{walletId}/credentials/present/isolated` | POST | Present inline credentials |
| `/wallet/{walletId}/credentials/present/resolve-request` | POST | Parse a VP authorization request (advanced) |
| `/wallet/{walletId}/credentials/present/match-credentials-from-store` | POST | DCQL-match the wallet's stored credentials (advanced) |
| `/wallet/{walletId}/credentials/present/match-credentials` | POST | DCQL-match inline credentials |
