openapi: 3.1.0
info:
title: Issuer Service API
description: Generic swiyu Issuer Service service
servers:
- url: http://localhost:8080
description: Generated server url
tags:
- name: Credential Metadata API
description: "Provide metadata related to verifiable credentials, including credential\
\ type metadata, JSON schemas, and Overlays Capture Architecture (OCA) data. (IF-110)"
- name: Issuer OID4VCI API
description: "Public OpenID for Verifiable Credential Issuance (OID4VCI) API endpoints,\
\ including issuing OAuth tokens for credential requests, issuing verifiable credentials,\
\ and supporting deferred credential issuance (IF-111)"
- name: Actuator
description: Monitor and interact
externalDocs:
description: Spring Boot Actuator Web API Documentation
url: https://docs.spring.io/spring-boot/docs/current/actuator-api/html/
- name: Credential API
description: "Exposes API endpoints for managing credential offers and their statuses.\
\ Supports creating new credential offers, retrieving offer data and deeplinks,\
\ and updating or querying the status of offers and issued verifiable credentials.\
\ (IF-114)"
- name: Status List API
description: Exposes API endpoints for managing status lists used in verifiable
credential status tracking. Supports creating and initializing new status lists
and retrieving status list information by ID. Ensures status list configuration
is immutable after initialization. Manual status list updates can optionally persist
a configuration override used for signing. (IF-113)
- name: Well-known endpoints API
description: "Exposes OpenID .well-known endpoints for issuer configuration and\
\ credential metadata as required by the OID4VCI specification. Provides endpoints\
\ for OpenID Connect issuer configuration, OAuth authorization server information,\
\ and issuer metadata describing supported verifiable credentials (IF-112)"
paths:
/oid4vci/api/token:
post:
tags:
- Issuer OID4VCI API
summary: Submit form data
operationId: oauthTokenEndpoint
parameters:
- name: DPoP
in: header
required: false
schema:
type: string
requestBody:
description: OAuth 2.0 access token request to be submitted
content:
application/x-www-form-urlencoded:
schema:
$ref: "#/components/schemas/OauthAccessTokenRequest"
required: true
responses:
"200":
description: OK
content:
application/json:
schema:
$ref: "#/components/schemas/OAuthToken"
/oid4vci/api/nonce:
post:
tags:
- Issuer OID4VCI API
summary: Provide a self-contained nonce in a publicly accessible endpoint.
description: |
Provide nonces for proof of possessions in a manner not requiring the service to save it.
The nonce should be used only once. The nonce has a (very) limit lifetime.
The response should not be cached.
For more information see OID4VCI Nonce Endpoint specification
Also provides a DPoP nonce. For more details towards demonstrating proof of possession refer to RFC9449
operationId: createNonce
responses:
"200":
description: OK
content:
application/json:
schema:
$ref: "#/components/schemas/NonceResponse"
/oid4vci/api/deferred_credential:
post:
tags:
- Issuer OID4VCI API
summary: Collect credential associated with the bearer token and the transaction
id. This endpoint is used for deferred issuance.
description: Issues a credential for a deferred transaction. Requires a valid
bearer token and transaction details in the request body.
operationId: createDeferredCredential
parameters:
- name: Authorization
in: header
description: Bearer token for authentication
required: true
schema:
type: string
- name: DPoP
in: header
required: false
schema:
type: string
requestBody:
content:
application/json:
schema:
$ref: "#/components/schemas/DeferredCredentialEndpointRequest"
application/jwt:
schema:
type: string
description: |
An encoded JWT as described in RFC7519, with the claims as found in the unencrypted request
required: true
responses:
"200":
description: Credential issued successfully
content:
application/json:
schema:
$ref: "#/components/schemas/CredentialEndpointResponse"
"202":
description: Credential issuance still pending — retry with the transaction_id
content:
application/json:
schema:
$ref: "#/components/schemas/DeferredCredentialPendingResponse"
"400":
description: Invalid request or validation error
content:
application/json:
schema:
$ref: "#/components/schemas/ApiError"
"401":
description: Unauthorized
content:
application/json:
schema:
type: string
application/jwt:
schema:
type: string
security:
- bearer-jwt: []
/oid4vci/api/credential:
post:
tags:
- Issuer OID4VCI API
summary: Collect credential associated with the bearer token with the requested
credential properties.
description: Issues a credential for a given bearer token and credential request.
Supports API versioning via SWIYU-API-Version header. Returns the issued credential
in JSON or JWT format.
operationId: createCredential
parameters:
- name: Authorization
in: header
description: "Bearer token for authentication. Format: 'Bearer ..."
required: true
schema:
type: string
- name: DPoP
in: header
required: false
schema:
type: string
requestBody:
content:
application/json:
schema:
$ref: "#/components/schemas/CreateCredentialRequest"
application/jwt:
schema:
type: string
description: |
An encoded JWT as described in RFC7519, with the claims as found in the unencrypted request
required: true
responses:
"200":
description: Credential issued successfully.
content:
application/json:
schema:
$ref: "#/components/schemas/CredentialEndpointResponse"
"202":
description: Successful deferred credential. The credential will be issued
later
content:
application/json:
schema:
$ref: "#/components/schemas/DeferredCredentialPendingResponse"
"400":
description: Invalid request or validation error
content:
application/json:
schema:
$ref: "#/components/schemas/ApiError"
security:
- bearer-jwt: []
/management/api/status-list:
post:
tags:
- Status List API
summary: Create and initialize a new status list.
description: "Initialize and link a status list slot to to this service. This\
\ process can be only done once per status list! Status List type, configuration\
\ or length can not be changed after initialization!"
operationId: createStatusList
requestBody:
content:
application/json:
schema:
$ref: "#/components/schemas/StatusListCreate"
required: true
responses:
"200":
description: OK
content:
'*/*':
schema:
$ref: "#/components/schemas/StatusList"
/management/api/status-list/{statusListId}:
get:
tags:
- Status List API
summary: Get the status information of a status list.
operationId: getStatusListInformation
parameters:
- name: statusListId
in: path
required: true
schema:
type: string
format: uuid
responses:
"200":
description: OK
content:
'*/*':
schema:
$ref: "#/components/schemas/StatusList"
post:
tags:
- Status List API
summary: Update the status list registry entry manually.
description: "Update the status list registry entry manually. Optionally accepts\
\ configuration overrides to control key material selection for this update.\
\ If provided, the override will be persisted on the status list and used\
\ for subsequent publications. This endpoint can also be used in automatic\
\ synchronization mode to update the configuration override."
operationId: updateStatusListRegistryEntry
parameters:
- name: statusListId
in: path
required: true
schema:
type: string
format: uuid
requestBody:
content:
application/json:
schema:
$ref: "#/components/schemas/StatusListUpdate"
responses:
"200":
description: OK
content:
'*/*':
schema:
$ref: "#/components/schemas/StatusList"
/management/api/credentials:
post:
tags:
- Credential API
summary: Create a generic credential offer with the given content
description: |
Create a new credential offer, which can then be collected by the holder.
The returned deep link has to be provided to the holder through another channel, for example as QR-Code.
The credentialSubjectData can be a json object or a JWT, if the signer has been configured to perform data integrity checks.
Returns both the ID used to interact with the offer and later issued VC, and the deep link to be provided to
operationId: createCredential_1
requestBody:
content:
application/json:
schema:
$ref: "#/components/schemas/CreateCredentialOfferRequest"
required: true
responses:
"200":
description: Credential offer created
content:
'*/*':
schema:
$ref: "#/components/schemas/CredentialWithDeeplinkResponse"
"400":
description: |
Bad request due to user content or internal call to external service like statuslist
content:
'*/*':
schema:
type: string
/management/api/credentials/{credentialManagementId}:
get:
tags:
- Credential API
summary: "Get the offer data, if any is still cached"
operationId: getCredentialInformation
parameters:
- name: credentialManagementId
in: path
required: true
schema:
type: string
format: uuid
responses:
"200":
description: Credential offer found
content:
'*/*':
schema:
$ref: "#/components/schemas/CredentialManagementDto"
patch:
tags:
- Credential API
summary: Update the status of an offer or the verifiable credential associated
with the id. This is only for deferred flows. The status is set to ready for
issuance
operationId: updateCredentialForDeferredFlow
parameters:
- name: credentialManagementId
in: path
required: true
schema:
type: string
format: uuid
requestBody:
content:
application/json:
schema:
type: string
required: true
responses:
"200":
description: Credential status updated
content:
'*/*':
schema:
$ref: "#/components/schemas/UpdateStatusResponse"
"400":
description: Bad request due to user content or internal call to external
service like statuslist
content:
'*/*':
schema:
type: string
/management/api/credentials/{credentialManagementId}/status:
get:
tags:
- Credential API
summary: "Get the current status of an offer or the verifiable credential, if\
\ already issued."
operationId: getCredentialStatus
parameters:
- name: credentialManagementId
in: path
required: true
schema:
type: string
format: uuid
responses:
"200":
description: OK
content:
'*/*':
schema:
$ref: "#/components/schemas/StatusResponse"
patch:
tags:
- Credential API
summary: Set the status of an offer or the verifiable credential associated
with the id.
operationId: updateCredentialStatus
parameters:
- name: credentialManagementId
in: path
required: true
schema:
type: string
format: uuid
- name: credentialStatus
in: query
required: true
schema:
$ref: "#/components/schemas/UpdateCredentialStatusRequestType"
responses:
"200":
description: OK
content:
'*/*':
schema:
$ref: "#/components/schemas/UpdateStatusResponse"
/oid4vci/vct/{metadataKey}:
get:
tags:
- Credential Metadata API
operationId: getCredentialTypeMetadata
parameters:
- name: metadataKey
in: path
required: true
schema:
type: string
responses:
"200":
description: OK
content:
application/json: {}
/oid4vci/oca/{ocaKey}:
get:
tags:
- Credential Metadata API
operationId: getOverlaysCaptureArchitecture
parameters:
- name: ocaKey
in: path
required: true
schema:
type: string
responses:
"200":
description: OK
content:
application/json: {}
/oid4vci/json-schema/{schemaKey}:
get:
tags:
- Credential Metadata API
operationId: getJsonSchema
parameters:
- name: schemaKey
in: path
required: true
schema:
type: string
responses:
"200":
description: OK
content:
application/schema+json:
schema:
type: string
/management/api/credentials/{credentialManagementId}/offers/{offerId}:
get:
tags:
- Credential API
summary: "Get a specific offer data, if it is still cached"
operationId: getCredentialOfferInformation
parameters:
- name: credentialManagementId
in: path
required: true
schema:
type: string
format: uuid
- name: offerId
in: path
required: true
schema:
type: string
format: uuid
responses:
"200":
description: Credential offer found
content:
'*/*':
schema:
$ref: "#/components/schemas/CredentialInfoResponse"
/management/api/credentials/{credentialManagementId}/offers/{offerId}/status:
get:
tags:
- Credential API
summary: Get the current status of a specific offer.
operationId: getCredentialStatus_1
parameters:
- name: credentialManagementId
in: path
required: true
schema:
type: string
format: uuid
- name: offerId
in: path
required: true
schema:
type: string
format: uuid
responses:
"200":
description: OK
content:
'*/*':
schema:
$ref: "#/components/schemas/StatusResponse"
/actuator:
get:
tags:
- Actuator
summary: Actuator root web endpoint
operationId: links
responses:
"200":
description: OK
content:
application/vnd.spring-boot.actuator.v3+json:
schema:
type: object
additionalProperties:
type: object
additionalProperties:
$ref: "#/components/schemas/Link"
application/vnd.spring-boot.actuator.v2+json:
schema:
type: object
additionalProperties:
type: object
additionalProperties:
$ref: "#/components/schemas/Link"
application/json:
schema:
type: object
additionalProperties:
type: object
additionalProperties:
$ref: "#/components/schemas/Link"
/actuator/prometheus:
get:
tags:
- Actuator
summary: Actuator web endpoint 'prometheus'
operationId: scrape
parameters:
- name: format
in: query
schema:
type: string
enum:
- CONTENT_TYPE_004
- CONTENT_TYPE_OPENMETRICS_100
- CONTENT_TYPE_PROTOBUF
- name: includedNames
in: query
schema:
type: string
responses:
"200":
description: OK
content:
text/plain;version=0.0.4;charset=utf-8:
schema:
type: object
application/openmetrics-text;version=1.0.0;charset=utf-8:
schema:
type: object
application/vnd.google.protobuf;proto=io.prometheus.client.MetricFamily;encoding=delimited:
schema:
type: object
/actuator/info:
get:
tags:
- Actuator
summary: Actuator web endpoint 'info'
operationId: info
responses:
"200":
description: OK
content:
application/vnd.spring-boot.actuator.v3+json:
schema:
type: object
application/vnd.spring-boot.actuator.v2+json:
schema:
type: object
application/json:
schema:
type: object
/actuator/health:
get:
tags:
- Actuator
summary: Actuator web endpoint 'health'
operationId: health
responses:
"200":
description: OK
content:
application/vnd.spring-boot.actuator.v3+json:
schema:
type: object
application/vnd.spring-boot.actuator.v2+json:
schema:
type: object
application/json:
schema:
type: object
/actuator/env:
get:
tags:
- Actuator
summary: Actuator web endpoint 'env'
operationId: environment
parameters:
- name: pattern
in: query
schema:
type: string
responses:
"200":
description: OK
content:
application/vnd.spring-boot.actuator.v3+json:
schema:
type: object
application/vnd.spring-boot.actuator.v2+json:
schema:
type: object
application/json:
schema:
type: object
/actuator/env/{toMatch}:
get:
tags:
- Actuator
summary: Actuator web endpoint 'env-toMatch'
operationId: environmentEntry
parameters:
- name: toMatch
in: path
required: true
schema:
type: string
responses:
"200":
description: OK
content:
application/vnd.spring-boot.actuator.v3+json:
schema:
type: object
application/vnd.spring-boot.actuator.v2+json:
schema:
type: object
application/json:
schema:
type: object
"404":
description: Not Found
/.well-known/openid-credential-issuer/{tenantId}:
get:
tags:
- Well-known endpoints API
summary: Information about credentials which can be issued.
operationId: getIssuerMetadataByTenantId
parameters:
- name: tenantId
in: path
required: true
schema:
type: string
format: uuid
- name: Accept
in: header
required: true
schema:
type: string
responses:
"200":
description: OK
content:
'*/*':
schema:
type: object
/.well-known/openid-credential-issuer/oid4vci/{tenantId}:
get:
tags:
- Well-known endpoints API
summary: Information about credentials which can be issued.
operationId: getIssuerMetadataByTenantId_1
parameters:
- name: tenantId
in: path
required: true
schema:
type: string
format: uuid
- name: Accept
in: header
required: true
schema:
type: string
responses:
"200":
description: OK
content:
'*/*':
schema:
type: object
/{tenantId}/.well-known/openid-credential-issuer:
get:
tags:
- Well-known endpoints API
summary: Information about credentials which can be issued.
operationId: getIssuerMetadataByTenantId_2
parameters:
- name: tenantId
in: path
required: true
schema:
type: string
format: uuid
- name: Accept
in: header
required: true
schema:
type: string
responses:
"200":
description: OK
content:
'*/*':
schema:
type: object
/oid4vci/{tenantId}/.well-known/openid-credential-issuer:
get:
tags:
- Well-known endpoints API
summary: Information about credentials which can be issued.
operationId: getIssuerMetadataByTenantId_3
parameters:
- name: tenantId
in: path
required: true
schema:
type: string
format: uuid
- name: Accept
in: header
required: true
schema:
type: string
responses:
"200":
description: OK
content:
'*/*':
schema:
type: object
/.well-known/openid-credential-issuer/oid4vci:
get:
tags:
- Well-known endpoints API
summary: Information about credentials which can be issued.
operationId: getIssuerMetadata
parameters:
- name: Accept
in: header
required: true
schema:
type: string
responses:
"200":
description: Credential Issuer Metadata
content:
application/json:
schema:
$ref: "#/components/schemas/IssuerMetadata"
application/jwt:
schema:
type: string
description: Signed issuer metadata as JWT
/oid4vci/.well-known/openid-credential-issuer:
get:
tags:
- Well-known endpoints API
summary: Information about credentials which can be issued.
operationId: getIssuerMetadata_1
parameters:
- name: Accept
in: header
required: true
schema:
type: string
responses:
"200":
description: Credential Issuer Metadata
content:
application/json:
schema:
$ref: "#/components/schemas/IssuerMetadata"
application/jwt:
schema:
type: string
description: Signed issuer metadata as JWT
/.well-known/openid-credential-issuer:
get:
tags:
- Well-known endpoints API
summary: Information about credentials which can be issued.
operationId: getIssuerMetadata_2
parameters:
- name: Accept
in: header
required: true
schema:
type: string
responses:
"200":
description: Credential Issuer Metadata
content:
application/json:
schema:
$ref: "#/components/schemas/IssuerMetadata"
application/jwt:
schema:
type: string
description: Signed issuer metadata as JWT
/oid4vci/{tenantId}/.well-known/oauth-authorization-server:
get:
tags:
- Well-known endpoints API
summary: Retrieve tenant-specific OAuth 2.0 Authorization Server Metadata
description: "Returns the Authorization Server configuration metadata for the\
\ given tenant in accordance with RFC 8414. Depending on the 'Accept' header,\
\ the response is provided either as an unsigned JSON document or as a signed\
\ JWT. The metadata includes issuer information, endpoint URLs (e.g., token\
\ endpoint), supported grant types and extensions required for OpenID for\
\ Verifiable Credential Issuance (OID4VCI) and DPoP."
operationId: getAuthorizationServerMetadataByTenantId
parameters:
- name: tenantId
in: path
required: true
schema:
type: string
format: uuid
- name: Accept
in: header
required: true
schema:
type: string
responses:
"200":
description: OK
content:
'*/*':
schema:
type: object
/{tenantId}/.well-known/oauth-authorization-server/oid4vci:
get:
tags:
- Well-known endpoints API
summary: Retrieve tenant-specific OAuth 2.0 Authorization Server Metadata
description: "Returns the Authorization Server configuration metadata for the\
\ given tenant in accordance with RFC 8414. Depending on the 'Accept' header,\
\ the response is provided either as an unsigned JSON document or as a signed\
\ JWT. The metadata includes issuer information, endpoint URLs (e.g., token\
\ endpoint), supported grant types and extensions required for OpenID for\
\ Verifiable Credential Issuance (OID4VCI) and DPoP."
operationId: getAuthorizationServerMetadataByTenantId_1
parameters:
- name: tenantId
in: path
required: true
schema:
type: string
format: uuid
- name: Accept
in: header
required: true
schema:
type: string
responses:
"200":
description: OK
content:
'*/*':
schema:
type: object
/oid4vci/{tenantId}/.well-known/openid-configuration:
get:
tags:
- Well-known endpoints API
summary: Retrieve tenant-specific OAuth 2.0 Authorization Server Metadata
description: "Returns the Authorization Server configuration metadata for the\
\ given tenant in accordance with RFC 8414. Depending on the 'Accept' header,\
\ the response is provided either as an unsigned JSON document or as a signed\
\ JWT. The metadata includes issuer information, endpoint URLs (e.g., token\
\ endpoint), supported grant types and extensions required for OpenID for\
\ Verifiable Credential Issuance (OID4VCI) and DPoP."
operationId: getAuthorizationServerMetadataByTenantId_2
parameters:
- name: tenantId
in: path
required: true
schema:
type: string
format: uuid
- name: Accept
in: header
required: true
schema:
type: string
responses:
"200":
description: OK
content:
'*/*':
schema:
type: object
/{tenantId}/.well-known/oauth-authorization-server:
get:
tags:
- Well-known endpoints API
summary: Retrieve tenant-specific OAuth 2.0 Authorization Server Metadata
description: "Returns the Authorization Server configuration metadata for the\
\ given tenant in accordance with RFC 8414. Depending on the 'Accept' header,\
\ the response is provided either as an unsigned JSON document or as a signed\
\ JWT. The metadata includes issuer information, endpoint URLs (e.g., token\
\ endpoint), supported grant types and extensions required for OpenID for\
\ Verifiable Credential Issuance (OID4VCI) and DPoP."
operationId: getAuthorizationServerMetadataByTenantId_3
parameters:
- name: tenantId
in: path
required: true
schema:
type: string
format: uuid
- name: Accept
in: header
required: true
schema:
type: string
responses:
"200":
description: OK
content:
'*/*':
schema:
type: object
/.well-known/oauth-authorization-server/{tenantId}:
get:
tags:
- Well-known endpoints API
summary: Retrieve tenant-specific OAuth 2.0 Authorization Server Metadata
description: "Returns the Authorization Server configuration metadata for the\
\ given tenant in accordance with RFC 8414. Depending on the 'Accept' header,\
\ the response is provided either as an unsigned JSON document or as a signed\
\ JWT. The metadata includes issuer information, endpoint URLs (e.g., token\
\ endpoint), supported grant types and extensions required for OpenID for\
\ Verifiable Credential Issuance (OID4VCI) and DPoP."
operationId: getAuthorizationServerMetadataByTenantId_4
parameters:
- name: tenantId
in: path
required: true
schema:
type: string
format: uuid
- name: Accept
in: header
required: true
schema:
type: string
responses:
"200":
description: OK
content:
'*/*':
schema:
type: object
/{tenantId}/.well-known/openid-configuration:
get:
tags:
- Well-known endpoints API
summary: Retrieve tenant-specific OAuth 2.0 Authorization Server Metadata
description: "Returns the Authorization Server configuration metadata for the\
\ given tenant in accordance with RFC 8414. Depending on the 'Accept' header,\
\ the response is provided either as an unsigned JSON document or as a signed\
\ JWT. The metadata includes issuer information, endpoint URLs (e.g., token\
\ endpoint), supported grant types and extensions required for OpenID for\
\ Verifiable Credential Issuance (OID4VCI) and DPoP."
operationId: getAuthorizationServerMetadataByTenantId_5
parameters:
- name: tenantId
in: path
required: true
schema:
type: string
format: uuid
- name: Accept
in: header
required: true
schema:
type: string
responses:
"200":
description: OK
content:
'*/*':
schema:
type: object
/.well-known/oauth-authorization-server/{tenantId}/oid4vci:
get:
tags:
- Well-known endpoints API
summary: Retrieve tenant-specific OAuth 2.0 Authorization Server Metadata
description: "Returns the Authorization Server configuration metadata for the\
\ given tenant in accordance with RFC 8414. Depending on the 'Accept' header,\
\ the response is provided either as an unsigned JSON document or as a signed\
\ JWT. The metadata includes issuer information, endpoint URLs (e.g., token\
\ endpoint), supported grant types and extensions required for OpenID for\
\ Verifiable Credential Issuance (OID4VCI) and DPoP."
operationId: getAuthorizationServerMetadataByTenantId_6
parameters:
- name: tenantId
in: path
required: true
schema:
type: string
format: uuid
- name: Accept
in: header
required: true
schema:
type: string
responses:
"200":
description: OK
content:
'*/*':
schema:
type: object
/.well-known/openid-configuration:
get:
tags:
- Well-known endpoints API
summary: Retrieve OAuth 2.0 Authorization Server Metadata
description: "Returns the configuration metadata of the Authorization Server\
\ in accordance with RFC 8414. This includes URLs to endpoints (e.g., token\
\ endpoint), supported grant types, as well as extensions for OpenID for Verifiable\
\ Credential Issuance (OID4VCI) and DPoP."
operationId: getAuthorizationServerMetadata
responses:
"200":
description: OK
content:
application/json:
schema:
$ref: "#/components/schemas/OAuthAuthorizationServerMetadata"
/.well-known/oauth-authorization-server/oid4vci:
get:
tags:
- Well-known endpoints API
summary: Retrieve OAuth 2.0 Authorization Server Metadata
description: "Returns the configuration metadata of the Authorization Server\
\ in accordance with RFC 8414. This includes URLs to endpoints (e.g., token\
\ endpoint), supported grant types, as well as extensions for OpenID for Verifiable\
\ Credential Issuance (OID4VCI) and DPoP."
operationId: getAuthorizationServerMetadata_1
responses:
"200":
description: OK
content:
application/json:
schema:
$ref: "#/components/schemas/OAuthAuthorizationServerMetadata"
/.well-known/oauth-authorization-server:
get:
tags:
- Well-known endpoints API
summary: Retrieve OAuth 2.0 Authorization Server Metadata
description: "Returns the configuration metadata of the Authorization Server\
\ in accordance with RFC 8414. This includes URLs to endpoints (e.g., token\
\ endpoint), supported grant types, as well as extensions for OpenID for Verifiable\
\ Credential Issuance (OID4VCI) and DPoP."
operationId: getAuthorizationServerMetadata_2
responses:
"200":
description: OK
content:
application/json:
schema:
$ref: "#/components/schemas/OAuthAuthorizationServerMetadata"
/oid4vci/.well-known/oauth-authorization-server:
get:
tags:
- Well-known endpoints API
summary: Retrieve OAuth 2.0 Authorization Server Metadata
description: "Returns the configuration metadata of the Authorization Server\
\ in accordance with RFC 8414. This includes URLs to endpoints (e.g., token\
\ endpoint), supported grant types, as well as extensions for OpenID for Verifiable\
\ Credential Issuance (OID4VCI) and DPoP."
operationId: getAuthorizationServerMetadata_3
responses:
"200":
description: OK
content:
application/json:
schema:
$ref: "#/components/schemas/OAuthAuthorizationServerMetadata"
/oid4vci/.well-known/openid-configuration:
get:
tags:
- Well-known endpoints API
summary: Retrieve OAuth 2.0 Authorization Server Metadata
description: "Returns the configuration metadata of the Authorization Server\
\ in accordance with RFC 8414. This includes URLs to endpoints (e.g., token\
\ endpoint), supported grant types, as well as extensions for OpenID for Verifiable\
\ Credential Issuance (OID4VCI) and DPoP."
operationId: getAuthorizationServerMetadata_4
responses:
"200":
description: OK
content:
application/json:
schema:
$ref: "#/components/schemas/OAuthAuthorizationServerMetadata"
components:
schemas:
ApiError:
type: object
description: Error response object
properties:
error:
type: string
error_description:
type: string
detail:
type: string
trace_id:
type: string
required:
- error
BatchCredentialIssuance:
type: object
properties:
batch_size:
type: integer
format: int32
minimum: 10
required:
- batch_size
ClientAgentInfoDto:
type: object
properties:
remoteAddr:
type: string
user-agent:
type: string
accept-language:
type: string
accept-encoding:
type: string
ConfigurationOverride:
type: object
description: Override for configuration to be use for the created entity
properties:
issuer_did:
type: string
description: Override to be used in place of the ISSUER_ID
verification_method:
type: string
description: "Override for the verification method that is looked up in\
\ the did document during verification of the entity. Most often the full\
\ did and a unique id after #"
key_id:
type: string
description: ID of the key in the HSM
key_pin:
type: string
description: "The pin which protects the key in the hsm, if any. Note that\
\ this only the key pin, not hsm password or partition pin."
CreateCredentialOfferRequest:
type: object
description: Initial credential creation request to start the offering process.
properties:
metadata_credential_supported_id:
type: array
description: ID linking the offer to the issuer metadata.
items:
type: string
minItems: 1
credential_subject_data:
additionalProperties: true
description: |2
The user data to be written in the verifiable credential. Can be a json object or a JWT.
credentialSubjectData": {"lastName": "Example","firstName": "Edward"}
When using data integrity JWT the value are as claims inside the JWT.
"credentialSubjectData": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJsYXN0TmFtZSI6IkV4YW1wbGUiLCJmaXJzdE5hbWUiOiJFZHdhcmQiLCJkYXRlT2ZCaXJ0aCI6IjEuMS4xOTcwIn0.2VMjj1RpJ7jUjn1SJHDwwzqx3kygn88UxSsG5j1uXG8"
example:
lastName: Example
firstName: Edward
credential_metadata:
$ref: "#/components/schemas/CredentialOfferMetadataDto"
description: |
Various metadata to be used for credential creation.
example:
deferred: false
offer_validity_seconds:
type: integer
format: int32
description: how long the offer should be usable in seconds. Example is
1 Day.
example: 86400
deferred_offer_validity_seconds:
type: integer
format: int32
description: how long the offer should be valid after it reached the deferred
state in seconds. Example is 7 Days.
example: 604800
credential_valid_until:
type: string
format: date-time
description: Setting for until when the VC shall be valid. XMLSchema dateTimeStamp
https://www.w3.org/TR/xmlschema11-2/#dateTimeStamp
example: 2010-01-01T19:23:24Z
credential_valid_from:
type: string
format: date-time
description: Setting for from when the VC shall be valid. XMLSchema dateTimeStamp
https://www.w3.org/TR/xmlschema11-2/#dateTimeStamp
example: 2010-01-01T18:23:24Z
status_lists:
type: array
description: List of URIs of the status lists to be used with the credential.
Status Lists must be initialized. Can provide multiple status lists to
have multiple status sources.
items:
type: string
configuration_override:
$ref: "#/components/schemas/ConfigurationOverride"
description: "Optional Parameter to override configured parameters, such\
\ as the DID used or the HSM key used in singing the request object"
required:
- metadata_credential_supported_id
CreateCredentialRequest:
type: object
description: Request to the Credential Endpoint as defined in OID4VCI 1.0 specification
properties:
credential_configuration_id:
type: string
description: |
String that uniquely identifies one of the keys in the name/value pairs stored in
the credential_configurations_supported Credential Issuer metadata.
Only used if a credential_identifiers parameter was not returned from the Token Response as part of the authorization_details parameter.
It MUST NOT be used otherwise.
example: university_example_sd_jwt
minLength: 1
proofs:
$ref: "#/components/schemas/ProofsDto"
description: |
Optional object providing 1+ proof of possessions of the cryptographic key material to
which the issued Credential instances will be bound to
example:
jwt:
- eyJ0eXAiOiJvcGVuaWQ0dmNpLXByb29mK2p3dCIsImFsZyI6IkVTMjU2IiwiandrIjp7Imt0eSI6IkVDIiwidXNlIjoic2lnIiwiY3J2IjoiUC0yNTYiLCJraWQiOiJUZXN0LUtleSIsIngiOiJrdHFJRFpoUjFmY2NlM3VGanpxdDdLRVlEdVdweFJoX3pqdkszanZsS2k4IiwieSI6Ik1UV2ZObTJ6dy1CbklqM2szbW0xZVB3Q3hqTm9DSEowdXN6V25MeHVDemsiLCJpYXQiOjE3NTMyNjkyNzZ9fQ.eyJhdWQiOiJodHRwOi8vbG9jYWxob3N0OjgwODAvb2lkNHZjaSIsIm5vbmNlIjoiY2U5YzEzNzgtODc2Yi00OGUyLTg0ZmUtOGE0ZjUwZGFkZmJmIiwiaWF0IjoxNzUzMjY5Mjc2fQ.ck-6Oq6IAav1VdFOkq9Qh7tzrl52jJvFBU3aPcZ_20oE73Cf4izN0ECmmiJm_qUMvYJlykQFsX2sW43gFC6vCw
credential_response_encryption:
$ref: "#/components/schemas/CredentialResponseEncryption"
description: |
Optional object providing information how to encrypt the Credential Response, if present.
example: |
{
"enc": "A128GCM",
"jwk": {"kty":"EC", "alg": "ECDH-ES","crv":"P-256","kid":"transportEncKeyEC","x":"DTaouFJpyVkLvfhoOvuTDR6_nmTt7YTvEHsHzK0Ingk","y":"vOipfo61Sy64XpneRyR5g6NCGXLv_Q7f3-kEDMT-G9U"
}
required:
- credential_configuration_id
CredentialConfiguration:
type: object
properties:
format:
type: string
pattern: "^[dv]c\\+sd-jwt$"
vct:
type: string
description: |
String designating the type of the Credential, as defined in sd-jwt-vc
vct_metadata_uri:
type: string
description: |
Allowing for an indirection if using urn:vct resolver
vct_metadata_uri#integrity:
type: string
description: |
Allowing for validating content received from vct_metadata_uri as defined in W3C SRI (Subresource Integrity)
vct_version:
type: string
description: |
The vct_version indicates the version of the vct. It is recommended to use semver-notation
vct_subtype:
type: string
description: |
An optional value that can describe an adaption of the vct.
This value can then be used by verifiers who require the adoption of the vct standard.
vct_subtype_version:
type: string
description: |
The vct_subtype_version indicates the version of the vct_subtype. It is recommended to use semver-notation
cryptographic_binding_methods_supported:
type: array
description: |2
A non-empty array of case sensitive strings that identify the representation of the cryptographic key material that the issued Credential is bound.
If missing, credential will be issued as unbound VC.
items:
type: string
description: |2
A non-empty array of case sensitive strings that identify the representation of the cryptographic key material that the issued Credential is bound.
If missing, credential will be issued as unbound VC.
pattern: ^jwk$
credential_signing_alg_values_supported:
type: array
items:
type: string
pattern: ^ES256|Ed25519$
proof_types_supported:
type: object
additionalProperties:
$ref: "#/components/schemas/SupportedProofType"
display:
type: array
items:
$ref: "#/components/schemas/MetadataCredentialDisplayInfo"
credential_metadata:
$ref: "#/components/schemas/CredentialConfigurationMetadata"
protected_issuance_authorization_trust_statement:
type: string
description: Protected Issuance Authorization Trust Statement (piaTS) JWT
proving issuance authorization for protected VC formats.
required:
- format
- vct
CredentialConfigurationMetadata:
type: object
description: |
Object containing information relevant to the usage and display of issued Credentials.
Credential Format-specific mechanisms can overwrite the information in this object to convey
Credential metadata. Format-specific mechanisms, such as SD-JWT VC display metadata are always
preferred by the Wallet over the information in this object, which serves as the default fallback.
properties:
display:
type: array
items:
$ref: "#/components/schemas/MetadataCredentialDisplayInfo"
claims:
type: array
items:
$ref: "#/components/schemas/MetadataClaimDescriptor"
CredentialEndpointResponse:
type: object
properties:
credentials:
type: array
items:
$ref: "#/components/schemas/CredentialObjectDto"
CredentialInfoResponse:
type: object
properties:
status:
$ref: "#/components/schemas/CredentialStatusType"
metadata_credential_supported_id:
type: array
items:
type: string
credential_metadata:
$ref: "#/components/schemas/CredentialOfferMetadataDto"
holder_jwks:
type: array
items:
type: string
key_attestations:
type: array
items:
type: string
client_agent_info:
$ref: "#/components/schemas/ClientAgentInfoDto"
offer_expiration_timestamp:
type: integer
format: int64
deferred_offer_expiration_seconds:
type: integer
format: int32
credential_valid_from:
type: string
format: date-time
credential_valid_until:
type: string
format: date-time
offer_deeplink:
type: string
vc_hash:
type: array
items:
type: string
CredentialManagementDto:
type: object
properties:
id:
type: string
format: uuid
status:
$ref: "#/components/schemas/CredentialStatusType"
renewal_request_count:
type: integer
format: int32
renewal_response_count:
type: integer
format: int32
credential_offers:
type: array
items:
$ref: "#/components/schemas/CredentialInfoResponse"
dpop_key:
type: string
CredentialObjectDto:
type: object
properties:
credential:
type: string
description: |
One sdjwt credential as string, if multiple credentials are issued each is wrapped in
a separate CredentialObjectDto object.
CredentialOfferMetadataDto:
type: object
properties:
deferred:
type: boolean
vct_metadata_uri:
type: string
maxLength: 2147483647
minLength: 1
vct_metadata_uri#integrity:
type: string
maxLength: 2147483647
minLength: 1
CredentialResponseEncryption:
type: object
properties:
jwk:
type: object
additionalProperties: {}
enc:
type: string
required:
- enc
- jwk
CredentialStatusType:
type: string
description: |2
Status for the full lifecycle of a verifiable credential.
OFFERED - an offer link has been created, and not yet redeemed by a holder.
CANCELLED - the VC was revoked before being claimed.
IN_PROGRESS - very short lived state, if the Holder has redeemed the one-time-code, but not yet gotten their credential. To allow a holder to retry fetching the vc set the state to offered.
DEFERRED - the offer has been used and all necessary data from the wallet has been received but the credential is not yet issued. To use this state the credential metadata entry has to have deferred set to true.
READY - Status set by the business issuer to continue the issuance of the credential for the deferred flow.
ISSUED - the VC has been collected by the holder and is valid.
SUSPENDED - the VC has been temporarily suspended. To unsuspend change state to issued.
REVOKED - the VC has been revoked. This state is final and can not be changed.
EXPIRED - the lifetime of the VC expired (not used yet)
enum:
- INIT
- OFFERED
- CANCELLED
- IN_PROGRESS
- DEFERRED
- READY
- ISSUED
- SUSPENDED
- REVOKED
- REQUESTED
- EXPIRED
example: SUSPENDED
CredentialWithDeeplinkResponse:
type: object
properties:
management_id:
type: string
format: uuid
offer_id:
type: string
format: uuid
offer_deeplink:
type: string
DeferredCredentialEndpointRequest:
type: object
description: Request to the deferred credential endpoint.
properties:
transaction_id:
type: string
format: uuid
description: Id received from the create credential request for the deferred
flow.
credential_response_encryption:
$ref: "#/components/schemas/CredentialResponseEncryption"
description: |
Note that this object will be used for encrypting the response, regardless of what was sent in the initial Credential Request.
If this parameter is missing, the credential_response_encryption sent in the credential request will be used.
required:
- transaction_id
DeferredCredentialPendingResponse:
type: object
properties:
transaction_id:
type: string
description: String identifying the Deferred Issuance transaction for subsequent
polling.
interval:
type: integer
format: int64
description: Minimum number of seconds the Wallet MUST wait before polling
again.
required:
- interval
- transaction_id
IssuerCredentialRequestEncryption:
type: object
properties:
enc_values_supported:
type: array
description: List of supported JWE encryption algorithms
items:
type: string
description: List of supported JWE encryption algorithms
pattern: ^(A128GCM|A256GCM)$
minItems: 1
zip_values_supported:
type: array
description: If present must be a non-empty array of JWE compression algorithms
items:
type: string
description: If present must be a non-empty array of JWE compression algorithms
encryption_required:
type: boolean
description: Boolean value specifying whether the Credential Issuer requires
the additional encryption on top of TLS
jwks:
type: object
additionalProperties:
type: object
description: "A JSON Web Key Set that contains one or more public keys,\
\ to be used by the Wallet as an input to a key agreement for encryption\
\ of the Credential Request."
example:
keys:
- kty: EC
crv: P-256
kid: ec91e148-974d-47f1-9891-4b89d8bad57c
x: rm2YkWAJ2V84gS00DqeGR6MXHgW3FWISG45Vop0cWv4
"y": ktSScp7s2fWSdq_7c6iOUI9AYFwQahXG60Nr9SL68mY
description: "A JSON Web Key Set that contains one or more public keys,\
\ to be used by the Wallet as an input to a key agreement for encryption\
\ of the Credential Request."
example:
keys:
- kty: EC
crv: P-256
kid: ec91e148-974d-47f1-9891-4b89d8bad57c
x: rm2YkWAJ2V84gS00DqeGR6MXHgW3FWISG45Vop0cWv4
"y": ktSScp7s2fWSdq_7c6iOUI9AYFwQahXG60Nr9SL68mY
required:
- enc_values_supported
- encryption_required
IssuerCredentialResponseEncryption:
type: object
properties:
enc_values_supported:
type: array
description: List of supported JWE encryption algorithms
items:
type: string
description: List of supported JWE encryption algorithms
pattern: ^(A128GCM|A256GCM)$
minItems: 1
zip_values_supported:
type: array
description: If present must be a non-empty array of JWE compression algorithms
items:
type: string
description: If present must be a non-empty array of JWE compression algorithms
encryption_required:
type: boolean
description: Boolean value specifying whether the Credential Issuer requires
the additional encryption on top of TLS
alg_values_supported:
type: array
items:
type: string
pattern: ^ECDH-ES$
minItems: 1
required:
- alg_values_supported
- enc_values_supported
- encryption_required
IssuerMetadata:
type: object
description: |
The OID4VCI Credential Issuer Metadata contains information on the Credential Issuer's technical capabilities,
supported Credentials, and (internationalized) display information.
properties:
credential_issuer:
type: string
description: The Credential Issuer's identifier
authorization_servers:
type: array
items:
type: string
credential_endpoint:
type: string
description: |
Information for the holder where to get the credential.
pattern: ^.+/credential$
nonce_endpoint:
type: string
description: |
Nonce for proof of possessions. Required for VCs to be bound to a holder.
pattern: ^.+/nonce$
deferred_credential_endpoint:
type: string
credential_configurations_supported:
type: object
additionalProperties:
$ref: "#/components/schemas/CredentialConfiguration"
credential_request_encryption:
$ref: "#/components/schemas/IssuerCredentialRequestEncryption"
credential_response_encryption:
$ref: "#/components/schemas/IssuerCredentialResponseEncryption"
batch_credential_issuance:
$ref: "#/components/schemas/BatchCredentialIssuance"
display:
type: array
description: "Array of objects, where each object contains display properties\
\ of a Credential Issuer for a certain language"
items:
$ref: "#/components/schemas/MetadataIssuerDisplayInfo"
profile_version:
type: string
credential_issuer_identity_trust_statement:
type: string
description: Identity Trust Statement (idTS) JWT proving the issuer's identity
within the Swiss Trust ecosystem.
required:
- credential_configurations_supported
- credential_endpoint
- credential_issuer
- nonce_endpoint
KeyAttestationRequirement:
type: object
properties:
key_storage:
type: array
items:
type: string
enum:
- iso_18045_high
- iso_18045_enhanced-basic
required:
- key_storage
Link:
type: object
properties:
href:
type: string
templated:
type: boolean
MetadataClaimDescriptor:
type: object
description: |
A claims description object as used in the Credential Issuer metadata is an object used to describe
how a certain claim in the Credential is displayed to the End-User.
properties:
path:
type: array
items:
type: object
minItems: 1
mandatory:
type: boolean
display:
type: array
items:
$ref: "#/components/schemas/MetadataDisplayInfo"
maxItems: 2147483647
minItems: 1
required:
- path
MetadataCredentialDisplayInfo:
type: object
properties:
locale:
type: string
description: |
String value that identifies the language of this object represented as a language tag taken
from values defined in BCP47 [RFC5646]. There MUST be only one object for each language identifier.
example: de-CH
name:
type: string
minLength: 1
logo:
$ref: "#/components/schemas/MetadataLogo"
description:
type: string
background_color:
type: string
description: |-
String value of a background color of the Credential represented as numerical color values defined
in CSS Color Module Level 3
background_image:
$ref: "#/components/schemas/MetadataImage"
text_color:
type: string
deprecated: true
description: |
Not supported in swiss-profile-issuance 1.0. Wallets may choose ignored to ignore this value.
String with information in which colour to display texts.
required:
- name
MetadataDisplayInfo:
type: object
properties:
locale:
type: string
description: |
String value that identifies the language of this object represented as a language tag taken
from values defined in BCP47 [RFC5646]. There MUST be only one object for each language identifier.
example: de-CH
name:
type: string
minLength: 1
required:
- name
MetadataImage:
type: object
properties:
uri:
type: string
description: |-
String value that contains a data URL containing the logo of the Credential Issuer.
The Wallet needs to determine the scheme, since the URI value could use the https: scheme, the data: scheme, etc.
pattern: "^data:image/(png|jpeg);base64,.*$"
required:
- uri
MetadataIssuerDisplayInfo:
type: object
properties:
locale:
type: string
description: |
String value that identifies the language of this object represented as a language tag taken
from values defined in BCP47 [RFC5646]. There MUST be only one object for each language identifier.
example: de-CH
name:
type: string
minLength: 1
logo:
$ref: "#/components/schemas/MetadataLogo"
required:
- name
MetadataLogo:
type: object
properties:
uri:
type: string
description: |-
String value that contains a data URL containing the logo of the Credential Issuer.
The Wallet needs to determine the scheme, since the URI value could use the https: scheme, the data: scheme, etc.
pattern: "^data:image/(png|jpeg);base64,.*$"
alt_text:
type: string
description: String value of the alternative text for the logo image
required:
- uri
NonceResponse:
type: object
properties:
c_nonce:
type: string
description: String containing an unpredictable challenge to be used when
creating a proof of possession of the key.
required:
- c_nonce
OAuthAuthorizationServerMetadata:
type: object
properties:
issuer:
type: string
description: The Issuer Identifier
token_endpoint:
type: string
description: URL of the OAuth 2.0 Token Endpoint
dpop_signing_alg_values_supported:
type: array
items:
type: string
profile_version:
type: string
pre-authorized_grant_anonymous_access_supported:
type: boolean
required:
- issuer
- token_endpoint
OAuthToken:
type: object
properties:
scope:
type: string
access_token:
type: string
refresh_token:
type: string
token_type:
type: string
expires_in:
type: integer
format: int64
required:
- access_token
OauthAccessTokenRequest:
type: object
properties:
grant_type:
type: string
default: urn:ietf:params:oauth:grant-type:pre-authorized_code
description: The type of grant being requested. Must be 'urn:ietf:params:oauth:grant-type:pre-authorized_code'
or 'refresh_token.
minLength: 1
pre-authorized_code:
type: string
refresh_token:
type: string
required:
- grant_type
ProofsDto:
type: object
properties:
jwt:
type: array
description: |
ProofsDto represents the proofs object in the OID4VCI Credential Request.
example: jwt
items:
type: string
minItems: 1
required:
- jwt
StatusList:
type: object
properties:
id:
type: string
format: uuid
description: Id of the status list used by the business issuer.
statusRegistryUrl:
type: string
description: URI of the status list used by registry.
maxListEntries:
type: integer
format: int32
description: How many status entries can be part of the status list. The
memory size of the status list is depending on the type and the config
of the status list.
example: 100000
remainingListEntries:
type: integer
format: int32
description: How many status entries are not used in the status list.
example: 12
config:
type: object
additionalProperties: {}
description: |2
Additional config parameters, depending on the status list type. For Example
{"bits": 2}
for token status list with revocation & suspension
{"purpose": "suspension"}
for a bit string status list for suspension
example:
bits: 2
StatusListCreate:
type: object
properties:
type:
type: string
description: "[DEPRECATED] This parameter is deprecated and should not be\
\ sent in future requests."
maxLength:
type: integer
format: int32
description: How many status entries can be part of the status list. The
memory size of the status list is depending on the type and the config
of the status list.
example: 100000
minimum: 1
config:
$ref: "#/components/schemas/StatusListCreateConfig"
description: |2
Additional config parameters, depending on the status list type. For Example
{"bits": 2}
for token status list with revocation & suspension
{"purpose": "suspension"}
for a bit string status list for suspension
example:
bits: 2
configuration_override:
$ref: "#/components/schemas/ConfigurationOverride"
description: "Optional Parameter to override configured parameters, such\
\ as the DID used or the HSM key used in singing the request object"
required:
- config
- maxLength
StatusListCreateConfig:
type: object
properties:
purpose:
type: string
bits:
type: integer
format: int32
description: "The number of bits used per Referenced Token. More bits allow\
\ additional states. 1 bit is only revocation, 2 bits is revocation and\
\ suspension of a credential. Possible values are 1, 2, 4, 8."
example: 2
required:
- bits
StatusListUpdate:
type: object
description: Optional overrides for status list updates.
properties:
configuration_override:
$ref: "#/components/schemas/ConfigurationOverride"
description: "Optional Parameter to override configured parameters, such\
\ as the DID used or the HSM key used in signing the status list"
StatusResponse:
type: object
properties:
status:
$ref: "#/components/schemas/CredentialStatusType"
SupportedProofType:
type: object
properties:
proof_signing_alg_values_supported:
type: array
items:
type: string
pattern: ^ES256|Ed25519$
key_attestations_required:
$ref: "#/components/schemas/KeyAttestationRequirement"
UpdateCredentialStatusRequestType:
type: string
description: |2
Status for the full lifecycle of a verifiable credential.
CANCELLED - the VC was revoked before being claimed.
READY - Status set by the business issuer to continue the issuance of the credential for the deferred flow
SUSPENDED - the VC has been temporarily suspended. To unsuspend change state to issued.
REVOKED - the VC has been revoked. This state is final and can not be changed.
enum:
- CANCELLED
- READY
- ISSUED
- SUSPENDED
- REVOKED
example: SUSPENDED
UpdateStatusResponse:
type: object
properties:
id:
type: string
format: uuid
status:
$ref: "#/components/schemas/CredentialStatusType"
status_lists:
type: array
items:
type: string
format: uuid
WebhookCallback:
type: object
description: Callback transmitting information about an event which occurred.
properties:
subject_id:
type: string
format: uuid
event_type:
type: string
enum:
- VC_STATUS_CHANGED
- VC_DEFERRED
- ISSUANCE_ERROR
event:
type: string
event_description:
type: string
event_trigger:
type: string
enum:
- CREDENTIAL_MANAGEMENT
- CREDENTIAL_OFFER
timestamp:
type: string
format: date-time
securitySchemes:
bearer-jwt:
type: http
scheme: bearer
bearerFormat: JWT