---
title: "Poll a presentation request (holder + status)"
method: GET
path: "/v1/presentations/{uuid}"
tags: ["OpenID4VP Verification"]
---

# Poll a presentation request (holder + status)

`GET /v1/presentations/{uuid}`

Public, unauthenticated poll endpoint for a presentation request — the request `uuid` is itself the capability, so any holder/wallet that received the request can read it without an API key. Returns the request management fields (DCQL, nonce, status) enriched with a holder-facing view: who is asking (`requester`), the human-labelled `claims` being requested with their selective-disclosure flags, and — once a presentation has been verified — a `result` object with the verdict and disclosed claims. Holders poll this to render the consent screen and to observe the verification outcome.

## Path parameters

- `uuid` string, uuid, required

## Response `200`

The presentation request in its holder-facing shape: the request fields plus `requester`, `claims`, and (once verified) `result`.

- object
  - `uuid` string, uuid — Unique identifier of the presentation request.
  - `transaction_id` string, uuid — Transaction identifier binding the holder's presentation to this request.
  - `dcql` object — The OpenID4VP DCQL query the wallet evaluates to build the presentation (same structure returned at creation).
  - `requested_vct` string — The Verifiable Credential Type required by this request.
  - `requested_claims` string[] — Raw claim names the verifier requested.
  - `aud` string — The verifier audience (client_id / origin) bound into the request.
  - `nonce` string — Single-use nonce the holder signs into the KB-JWT.
  - `status` 'pending' | 'presented' | 'verified' | 'failed' — Lifecycle state of the presentation request.
  - `created_at` string, date-time — ISO 8601 timestamp when the request was created.
  - `requester` object — Holder-facing description of the relying party asking for the presentation, used to render the wallet consent screen.
    - `id` string — Identifier of the requester. In this slice always the literal `relying-party`.
    - `name` string — Display name of the relying party — the request's `aud` value, or `Relying party` when `aud` is blank.
    - `did` string — The relying party's decentralized identifier, derived from the tenant slug as `did:web:{slug}.didit.test`.
    - `purpose` string — Human-readable reason the credential is being requested, shown to the holder on the consent screen.
  - `claims` object[] — Holder-facing list of the requested claims, one entry per requested claim name, with a human label and selective-disclosure metadata for the consent UI.
    - `name` string — The raw claim name (the disclosure key in the SD-JWT VC).
    - `label` string — Human-readable label derived from the claim name (underscores replaced with spaces, title-cased) for display in the wallet.
    - `requested` boolean — Whether this claim is being requested. Always true for claims listed here.
    - `selective_disclosure` boolean — Whether the claim is disclosed selectively (the holder reveals it on a per-claim basis rather than the whole credential). Always true on this endpoint.
  - `result` object, nullable — The verification result. Present only once a presentation has been submitted and verified (a one-to-one record per request); absent while the request is still pending.
    - `uuid` string, uuid — Unique identifier of the verification result record.
    - `verdict` 'verified' | 'failed' — Outcome of verifying the presented vp_token: `verified` if every cryptographic and policy check passed, `failed` otherwise.
    - `disclosed_claims` object — Map of the claims the holder actually disclosed (claim name to value). Only the requested, consented claims appear; reserved SD-JWT registered claims (iss, vct, iat, exp, cnf, status, _sd, _sd_alg) are stripped out. Empty when the verdict is `failed`.
    - `checks` object — Per-check boolean results of verification. Fully populated on a `verified` result; an empty object on a `failed` result (the failing check is captured in `error`).
      - `signature` boolean — The issuer's signature over the SD-JWT is valid, verified with the issuer key resolved by `kid` (supports key rotation).
      - `key_binding` boolean — The Key-Binding JWT (KB-JWT) is present and signed by the holder key bound in the credential's `cnf` claim — proving holder possession.
      - `aud` boolean — The audience in the KB-JWT matches the verifier audience (`aud`) on the presentation request.
      - `nonce` boolean — The nonce in the KB-JWT matches the single-use nonce issued with the request, and the nonce had not been consumed or expired (anti-replay).
      - `alg_allowlist` boolean — Every signing algorithm used in the presentation is on the allow-list (ES256), enforced with a defense-in-depth re-assertion after parsing.
      - `not_expired` boolean — The credential's `exp` claim is in the future (the library does not enforce expiry, so it is checked explicitly).
      - `not_revoked` boolean — The credential is not marked revoked or suspended in its IETF Token Status List (checked when the credential carries a `status` claim).
    - `error` string — Failure reason as `ExceptionType: message` when the verdict is `failed`; empty string on success.

## Changes

- **2026-06-30** `1ee4908e9af4` — 1 info
  - added the media type `application/json` for the response with the status `200`

[Change history](https://skmtc.dev/didit-protocol/apis/didit-credentials-api/changes/v1/presentations/:uuid/get.md)

---

[API](https://skmtc.dev/didit-protocol/apis/didit-credentials-api.md) · [All operations](https://skmtc.dev/didit-protocol/apis/didit-credentials-api/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/didit-protocol/didit-credentials-api/revisions/2eeb13158ffa/schema)
