# eu-digital-identity-wallet/eudi-srv-verifier-endpoint architecture

> Architecture diagram of the GitHub repository eu-digital-identity-wallet/eudi-srv-verifier-endpoint, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-11-11). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/eu-digital-identity-wallet/eudi-srv-verifier-endpoint
- Repository: https://github.com/eu-digital-identity-wallet/eudi-srv-verifier-endpoint

## Overview

EUDI Verifier Endpoint is a REST backend implementing OpenID4VP. A verifier initiates a presentation transaction; the wallet retrieves the authorization request and posts a presentation response; the verifier validates it and the verifier can retrieve the result. The repository also includes DC API request/response handling, status checks, and scheduled presentation cleanup. The graph uses README-documented flows and relationships visible in sampled source or the source index; unsampled wiring is omitted where evidence is insufficient.

Main entry points: [`src/main/kotlin/eu/europa/ec/eudi/verifier/endpoint/VerifierContext.kt`](https://github.com/eu-digital-identity-wallet/eudi-srv-verifier-endpoint/blob/main/src/main/kotlin/eu/europa/ec/eudi/verifier/endpoint/VerifierContext.kt) (Application wiring), [`src/main/kotlin/eu/europa/ec/eudi/verifier/endpoint/adapter/input/web/VerifierApi.kt`](https://github.com/eu-digital-identity-wallet/eudi-srv-verifier-endpoint/blob/main/src/main/kotlin/eu/europa/ec/eudi/verifier/endpoint/adapter/input/web/VerifierApi.kt) (Verifier API), [`src/main/kotlin/eu/europa/ec/eudi/verifier/endpoint/adapter/input/web/WalletApi.kt`](https://github.com/eu-digital-identity-wallet/eudi-srv-verifier-endpoint/blob/main/src/main/kotlin/eu/europa/ec/eudi/verifier/endpoint/adapter/input/web/WalletApi.kt) (Wallet API), [`src/main/kotlin/eu/europa/ec/eudi/verifier/endpoint/port/input/RetrieveRequestObject.kt`](https://github.com/eu-digital-identity-wallet/eudi-srv-verifier-endpoint/blob/main/src/main/kotlin/eu/europa/ec/eudi/verifier/endpoint/port/input/RetrieveRequestObject.kt) (Request object)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_api["HTTP APIs"]
  node_verifier_api["Verifier API<br/>[VerifierApi.kt]"]
  node_wallet_api["Wallet API<br/>[WalletApi.kt]"]
end

subgraph group_flow["Presentation workflow"]
  node_init["Initialize transaction<br/>[InitTransaction.kt]"]
  node_request["Request object"]
  node_post_response["Post wallet response"]
  node_get_response["Get wallet response"]
  node_dc_api["DC API retrieval"]
end

subgraph group_checks["Credential validation"]
  node_vp_validation["VP validation"]
  node_mdoc_validation["MDoc validation"]
  node_document_validation["Document checks"]
  node_sdjwt_validation["SD-JWT VC checks"]
  node_status_validation["Status checks"]
end

subgraph group_state["State and runtime"]
  node_presentation["Presentation model<br/>[Presentation.kt]"]
  node_events["Presentation events"]
  node_event_publisher["Event publisher port"]
  node_repository[("Presentation repository")]
  node_context["Application wiring<br/>[VerifierContext.kt]"]
  node_config["Verifier configuration<br/>[VerifierConfig.kt]"]
end

node_verifier(("Verifier"))
node_wallet(("Wallet"))

node_verifier -->|"initiates and queries"| node_verifier_api
node_verifier_api -->|"invokes"| node_init
node_verifier_api -->|"invokes"| node_get_response
node_wallet -->|"retrieves and posts"| node_wallet_api
node_wallet_api -->|"retrieves request"| node_request
node_wallet_api -->|"posts response"| node_post_response
node_verifier_api -->|"routes retrieval"| node_dc_api
node_request -->|"loads and stores"| node_repository
node_request -->|"advances state"| node_presentation
node_dc_api -->|"checks state"| node_presentation
node_dc_api -->|"reads events"| node_events
node_vp_validation -->|"validates SD-JWT"| node_sdjwt_validation
node_vp_validation -->|"validates MDoc"| node_mdoc_validation
node_document_validation -->|"checks status"| node_status_validation
node_context -->|"configures"| node_repository
node_context -->|"configures"| node_vp_validation
node_context -.->|"loads settings"| node_config
node_context -.->|"wires events"| node_event_publisher

click node_verifier_api "https://github.com/eu-digital-identity-wallet/eudi-srv-verifier-endpoint/blob/main/src/main/kotlin/eu/europa/ec/eudi/verifier/endpoint/adapter/input/web/VerifierApi.kt"
click node_wallet_api "https://github.com/eu-digital-identity-wallet/eudi-srv-verifier-endpoint/blob/main/src/main/kotlin/eu/europa/ec/eudi/verifier/endpoint/adapter/input/web/WalletApi.kt"
click node_init "https://github.com/eu-digital-identity-wallet/eudi-srv-verifier-endpoint/blob/main/src/main/kotlin/eu/europa/ec/eudi/verifier/endpoint/port/input/InitTransaction.kt"
click node_request "https://github.com/eu-digital-identity-wallet/eudi-srv-verifier-endpoint/blob/main/src/main/kotlin/eu/europa/ec/eudi/verifier/endpoint/port/input/RetrieveRequestObject.kt"
click node_post_response "https://github.com/eu-digital-identity-wallet/eudi-srv-verifier-endpoint/blob/main/src/main/kotlin/eu/europa/ec/eudi/verifier/endpoint/port/input/PostWalletResponse.kt"
click node_get_response "https://github.com/eu-digital-identity-wallet/eudi-srv-verifier-endpoint/blob/main/src/main/kotlin/eu/europa/ec/eudi/verifier/endpoint/port/input/GetWalletResponse.kt"
click node_dc_api "https://github.com/eu-digital-identity-wallet/eudi-srv-verifier-endpoint/blob/main/src/main/kotlin/eu/europa/ec/eudi/verifier/endpoint/port/input/RetrieveDcApiPresentationRequest.kt"
click node_vp_validation "https://github.com/eu-digital-identity-wallet/eudi-srv-verifier-endpoint/blob/main/src/main/kotlin/eu/europa/ec/eudi/verifier/endpoint/adapter/out/presentation/ValidateSdJwtVcOrMsoMdocVerifiablePresentation.kt"
click node_mdoc_validation "https://github.com/eu-digital-identity-wallet/eudi-srv-verifier-endpoint/blob/main/src/main/kotlin/eu/europa/ec/eudi/verifier/endpoint/adapter/out/mso/DeviceResponseValidator.kt"
click node_document_validation "https://github.com/eu-digital-identity-wallet/eudi-srv-verifier-endpoint/blob/main/src/main/kotlin/eu/europa/ec/eudi/verifier/endpoint/adapter/out/mso/DocumentValidator.kt"
click node_sdjwt_validation "https://github.com/eu-digital-identity-wallet/eudi-srv-verifier-endpoint/blob/main/src/main/kotlin/eu/europa/ec/eudi/verifier/endpoint/adapter/out/sdjwtvc/SdJwtVcValidator.kt"
click node_status_validation "https://github.com/eu-digital-identity-wallet/eudi-srv-verifier-endpoint/blob/main/src/main/kotlin/eu/europa/ec/eudi/verifier/endpoint/adapter/out/tokenstatuslist/StatusListTokenValidator.kt"
click node_presentation "https://github.com/eu-digital-identity-wallet/eudi-srv-verifier-endpoint/blob/main/src/main/kotlin/eu/europa/ec/eudi/verifier/endpoint/domain/Presentation.kt"
click node_events "https://github.com/eu-digital-identity-wallet/eudi-srv-verifier-endpoint/blob/main/src/main/kotlin/eu/europa/ec/eudi/verifier/endpoint/port/out/persistence/PresentationEvent.kt"
click node_event_publisher "https://github.com/eu-digital-identity-wallet/eudi-srv-verifier-endpoint/blob/main/src/main/kotlin/eu/europa/ec/eudi/verifier/endpoint/port/out/persistence/PublishPresentationEvent.kt"
click node_repository "https://github.com/eu-digital-identity-wallet/eudi-srv-verifier-endpoint/blob/main/src/main/kotlin/eu/europa/ec/eudi/verifier/endpoint/adapter/out/persistence/PresentationInMemoryRepo.kt"
click node_context "https://github.com/eu-digital-identity-wallet/eudi-srv-verifier-endpoint/blob/main/src/main/kotlin/eu/europa/ec/eudi/verifier/endpoint/VerifierContext.kt"
click node_config "https://github.com/eu-digital-identity-wallet/eudi-srv-verifier-endpoint/blob/main/src/main/kotlin/eu/europa/ec/eudi/verifier/endpoint/domain/VerifierConfig.kt"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_verifier_api,node_wallet_api toneBlue
class node_init,node_request,node_post_response,node_get_response,node_dc_api toneAmber
class node_vp_validation,node_mdoc_validation,node_document_validation,node_sdjwt_validation,node_status_validation toneMint
class node_presentation,node_events,node_event_publisher,node_repository,node_context,node_config toneRose
class node_verifier,node_wallet toneIndigo
```

## Components

### HTTP APIs

- [Verifier API](https://github.com/eu-digital-identity-wallet/eudi-srv-verifier-endpoint/blob/main/src/main/kotlin/eu/europa/ec/eudi/verifier/endpoint/adapter/input/web/VerifierApi.kt): `src/main/kotlin/eu/europa/ec/eudi/verifier/endpoint/adapter/input/web/VerifierApi.kt`
- [Wallet API](https://github.com/eu-digital-identity-wallet/eudi-srv-verifier-endpoint/blob/main/src/main/kotlin/eu/europa/ec/eudi/verifier/endpoint/adapter/input/web/WalletApi.kt): `src/main/kotlin/eu/europa/ec/eudi/verifier/endpoint/adapter/input/web/WalletApi.kt`

### Presentation workflow

- [Initialize transaction](https://github.com/eu-digital-identity-wallet/eudi-srv-verifier-endpoint/blob/main/src/main/kotlin/eu/europa/ec/eudi/verifier/endpoint/port/input/InitTransaction.kt): `src/main/kotlin/eu/europa/ec/eudi/verifier/endpoint/port/input/InitTransaction.kt`
- [Request object](https://github.com/eu-digital-identity-wallet/eudi-srv-verifier-endpoint/blob/main/src/main/kotlin/eu/europa/ec/eudi/verifier/endpoint/port/input/RetrieveRequestObject.kt): `src/main/kotlin/eu/europa/ec/eudi/verifier/endpoint/port/input/RetrieveRequestObject.kt`
- [Post wallet response](https://github.com/eu-digital-identity-wallet/eudi-srv-verifier-endpoint/blob/main/src/main/kotlin/eu/europa/ec/eudi/verifier/endpoint/port/input/PostWalletResponse.kt): `src/main/kotlin/eu/europa/ec/eudi/verifier/endpoint/port/input/PostWalletResponse.kt`
- [Get wallet response](https://github.com/eu-digital-identity-wallet/eudi-srv-verifier-endpoint/blob/main/src/main/kotlin/eu/europa/ec/eudi/verifier/endpoint/port/input/GetWalletResponse.kt): `src/main/kotlin/eu/europa/ec/eudi/verifier/endpoint/port/input/GetWalletResponse.kt`
- [DC API retrieval](https://github.com/eu-digital-identity-wallet/eudi-srv-verifier-endpoint/blob/main/src/main/kotlin/eu/europa/ec/eudi/verifier/endpoint/port/input/RetrieveDcApiPresentationRequest.kt): `src/main/kotlin/eu/europa/ec/eudi/verifier/endpoint/port/input/RetrieveDcApiPresentationRequest.kt`

### Credential validation

- [VP validation](https://github.com/eu-digital-identity-wallet/eudi-srv-verifier-endpoint/blob/main/src/main/kotlin/eu/europa/ec/eudi/verifier/endpoint/adapter/out/presentation/ValidateSdJwtVcOrMsoMdocVerifiablePresentation.kt): `src/main/kotlin/eu/europa/ec/eudi/verifier/endpoint/adapter/out/presentation/ValidateSdJwtVcOrMsoMdocVerifiablePresentation.kt`
- [MDoc validation](https://github.com/eu-digital-identity-wallet/eudi-srv-verifier-endpoint/blob/main/src/main/kotlin/eu/europa/ec/eudi/verifier/endpoint/adapter/out/mso/DeviceResponseValidator.kt): `src/main/kotlin/eu/europa/ec/eudi/verifier/endpoint/adapter/out/mso/DeviceResponseValidator.kt`
- [Document checks](https://github.com/eu-digital-identity-wallet/eudi-srv-verifier-endpoint/blob/main/src/main/kotlin/eu/europa/ec/eudi/verifier/endpoint/adapter/out/mso/DocumentValidator.kt): `src/main/kotlin/eu/europa/ec/eudi/verifier/endpoint/adapter/out/mso/DocumentValidator.kt`
- [SD-JWT VC checks](https://github.com/eu-digital-identity-wallet/eudi-srv-verifier-endpoint/blob/main/src/main/kotlin/eu/europa/ec/eudi/verifier/endpoint/adapter/out/sdjwtvc/SdJwtVcValidator.kt): `src/main/kotlin/eu/europa/ec/eudi/verifier/endpoint/adapter/out/sdjwtvc/SdJwtVcValidator.kt`
- [Status checks](https://github.com/eu-digital-identity-wallet/eudi-srv-verifier-endpoint/blob/main/src/main/kotlin/eu/europa/ec/eudi/verifier/endpoint/adapter/out/tokenstatuslist/StatusListTokenValidator.kt): `src/main/kotlin/eu/europa/ec/eudi/verifier/endpoint/adapter/out/tokenstatuslist/StatusListTokenValidator.kt`

### State and runtime

- [Presentation model](https://github.com/eu-digital-identity-wallet/eudi-srv-verifier-endpoint/blob/main/src/main/kotlin/eu/europa/ec/eudi/verifier/endpoint/domain/Presentation.kt): `src/main/kotlin/eu/europa/ec/eudi/verifier/endpoint/domain/Presentation.kt`
- [Presentation events](https://github.com/eu-digital-identity-wallet/eudi-srv-verifier-endpoint/blob/main/src/main/kotlin/eu/europa/ec/eudi/verifier/endpoint/port/out/persistence/PresentationEvent.kt): `src/main/kotlin/eu/europa/ec/eudi/verifier/endpoint/port/out/persistence/PresentationEvent.kt`
- [Event publisher port](https://github.com/eu-digital-identity-wallet/eudi-srv-verifier-endpoint/blob/main/src/main/kotlin/eu/europa/ec/eudi/verifier/endpoint/port/out/persistence/PublishPresentationEvent.kt): `src/main/kotlin/eu/europa/ec/eudi/verifier/endpoint/port/out/persistence/PublishPresentationEvent.kt`
- [Presentation repository](https://github.com/eu-digital-identity-wallet/eudi-srv-verifier-endpoint/blob/main/src/main/kotlin/eu/europa/ec/eudi/verifier/endpoint/adapter/out/persistence/PresentationInMemoryRepo.kt): `src/main/kotlin/eu/europa/ec/eudi/verifier/endpoint/adapter/out/persistence/PresentationInMemoryRepo.kt`
- [Application wiring](https://github.com/eu-digital-identity-wallet/eudi-srv-verifier-endpoint/blob/main/src/main/kotlin/eu/europa/ec/eudi/verifier/endpoint/VerifierContext.kt): `src/main/kotlin/eu/europa/ec/eudi/verifier/endpoint/VerifierContext.kt`
- [Verifier configuration](https://github.com/eu-digital-identity-wallet/eudi-srv-verifier-endpoint/blob/main/src/main/kotlin/eu/europa/ec/eudi/verifier/endpoint/domain/VerifierConfig.kt): `src/main/kotlin/eu/europa/ec/eudi/verifier/endpoint/domain/VerifierConfig.kt`

### Other components

- **Verifier**
- **Wallet**

## Connections

- Verifier → Verifier API: initiates and queries (evidence: `README.md`)
- Verifier API → Initialize transaction: invokes (evidence: `src/main/kotlin/eu/europa/ec/eudi/verifier/endpoint/adapter/input/web/VerifierApi.kt`)
- Verifier API → Get wallet response: invokes (evidence: `src/main/kotlin/eu/europa/ec/eudi/verifier/endpoint/adapter/input/web/VerifierApi.kt`)
- Wallet → Wallet API: retrieves and posts (evidence: `README.md`)
- Wallet API → Request object: retrieves request (evidence: `README.md`)
- Wallet API → Post wallet response: posts response (evidence: `README.md`)
- Verifier API → DC API retrieval: routes retrieval (evidence: `src/main/kotlin/eu/europa/ec/eudi/verifier/endpoint/adapter/input/web/VerifierApi.kt`)
- Request object → Presentation repository: loads and stores (evidence: `src/main/kotlin/eu/europa/ec/eudi/verifier/endpoint/port/input/RetrieveRequestObject.kt`)
- Request object → Presentation model: advances state (evidence: `src/main/kotlin/eu/europa/ec/eudi/verifier/endpoint/port/input/RetrieveRequestObject.kt`)
- DC API retrieval → Presentation model: checks state (evidence: `src/main/kotlin/eu/europa/ec/eudi/verifier/endpoint/port/input/RetrieveDcApiPresentationRequest.kt`)
- DC API retrieval → Presentation events: reads events (evidence: `src/main/kotlin/eu/europa/ec/eudi/verifier/endpoint/port/input/RetrieveDcApiPresentationRequest.kt`)
- VP validation → SD-JWT VC checks: validates SD-JWT (evidence: `src/main/kotlin/eu/europa/ec/eudi/verifier/endpoint/adapter/out/presentation/ValidateSdJwtVcOrMsoMdocVerifiablePresentation.kt`)
- VP validation → MDoc validation: validates MDoc (evidence: `src/main/kotlin/eu/europa/ec/eudi/verifier/endpoint/adapter/out/presentation/ValidateSdJwtVcOrMsoMdocVerifiablePresentation.kt`)
- Document checks → Status checks: checks status (evidence: `src/main/kotlin/eu/europa/ec/eudi/verifier/endpoint/adapter/out/mso/DocumentValidator.kt`)
- Application wiring → Presentation repository: configures (evidence: `src/main/kotlin/eu/europa/ec/eudi/verifier/endpoint/VerifierContext.kt`)
- Application wiring → VP validation: configures (evidence: `src/main/kotlin/eu/europa/ec/eudi/verifier/endpoint/VerifierContext.kt`)
- Application wiring → Verifier configuration: loads settings (evidence: `src/main/kotlin/eu/europa/ec/eudi/verifier/endpoint/VerifierContext.kt`)
- Application wiring → Event publisher port: wires events
