Table of Contents

Class AvPresentationRequest

Namespace
Tessio.Verifier.OpenId4Vp
Assembly
Tessio.Verifier.OpenId4Vp.dll

A built EU Age Verification authorization request, ready to be delivered to the Age Verification App. Its parameters ride directly in AuthorizationRequestUri; there is no request object.

public sealed record AvPresentationRequest : IEquatable<AvPresentationRequest>
Inheritance
AvPresentationRequest
Implements
Inherited Members

Remarks

Deliberately a sibling of PresentationRequest rather than a third shape within it. PresentationRequest is a frozen contract (contracts-v0) describing "a sealed hierarchy with exactly two concrete shapes", and every one of its shapes carries a required SignedRequestObject. An AV request has none, so it cannot be expressed there without either breaking exhaustive pattern matching for existing consumers or storing an empty string in a property the next reader would trust.

The overlap with PresentationRequest is therefore structural, not accidental: this type is what remains once the JAR is removed. Keep it that way. If a future profile needs a third variation, that is the signal to design a common abstraction, not to widen this one.

Properties

AuthorizationRequestUri

Wallet-facing URI carrying every request parameter in its query string. Encode as a QR code or deep link.

public required Uri AuthorizationRequestUri { get; init; }

Property Value

Uri

ClientId

Verifier identifier echoed from ClientId. Under this profile it takes the form redirect_uri:<response_uri>.

public required string ClientId { get; init; }

Property Value

string

ExpiresAt

Absolute expiration of this request (UTC), for session cleanup.

public required DateTimeOffset ExpiresAt { get; init; }

Property Value

DateTimeOffset

Remarks

Advisory, and more so than under the JAR profiles. A signed request carries an exp claim, so a conformant wallet declines to answer a stale one. This profile has no request object and therefore no exp, so nothing on the wallet side prevents a late answer. Whether one is accepted is entirely the consuming verifier's decision, and this type does not make it: a verifier that grants access on a completed check should compare this value against arrival time itself.

Nonce

Per-request nonce echoed from Nonce. The verifier retains this to check the nonce the wallet commits to in its device signature.

public required string Nonce { get; init; }

Property Value

string

State

Optional state echoed from State.

public string? State { get; init; }

Property Value

string

Remarks

Optional in the profile, but it is how a verifier with a fixed response_uri correlates the response to its session. Omit it only if correlation is carried some other way.