---
title: "Create an OpenID4VP presentation request (DCQL)"
method: POST
path: "/v1/presentations/request"
tags: ["OpenID4VP Verification"]
---

# Create an OpenID4VP presentation request (DCQL)

`POST /v1/presentations/request`

Create an OpenID4VP presentation request: the verifier (relying party) declares the credential type and the specific claims it wants disclosed, and the service returns a request object containing a DCQL (Digital Credentials Query Language) query, a single-use nonce, and a transaction id to bind the holder's presentation to this exact request. The holder wallet (or the demo present/response flow) presents an SD-JWT VC against this request; the returned `uuid` is the public capability the holder polls via GET /v1/presentations/{uuid} and answers via POST /v1/presentations/{uuid}/response. The nonce has a 300-second TTL and is consumed atomically on first verification (replay is rejected). Authenticated with the tenant API key (Bearer).

## Request body

- object
  - `requested_vct` string, required — The Verifiable Credential Type (`vct`) the verifier requires the holder to present. Must match the `vct` of a credential schema the holder holds; it is embedded into the DCQL query's `meta.vct_values` so wallets filter to matching credentials.
  - `requested_claims` string[] — The list of claim names the verifier asks the holder to selectively disclose (each becomes a DCQL claim path). Only these claims are returned in `disclosed_claims` after a successful presentation; everything else stays hidden under selective disclosure. Defaults to an empty list (no specific claims requested).
  - `aud` string, required — The verifier's audience identifier — its OpenID4VP client_id or web origin. It is bound into the request and must match the `aud` the holder signs into the Key-Binding JWT (KB-JWT) of the presentation; a mismatch fails the `aud` check. Also surfaced as the relying-party name on the public poll endpoint.
  - `trusted_iss` string — Optional. The issuer identifier (`iss`) the verifier is willing to trust for this presentation. When omitted or blank, it defaults to the tenant's own issuer identifier (`tenant.issuer_iss`). At verification time the presented credential's `iss` is checked against the tenant's trusted-issuer registry; an untrusted issuer fails verification.

## Response `200`

No response body

## Other responses

- `201` — The presentation request was created. Returns the request object the holder/wallet uses to build a presentation, including the DCQL query and the single-use nonce.

## Changes

- **2026-06-30** `1ee4908e9af4` — 1 breaking
  - request body became required

[Change history](https://skmtc.dev/didit-protocol/apis/didit-credentials-api/changes/v1/presentations/request/post.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/1ee4908e9af4/schema)
