Issuer Configuration Reference
Every setting the credential issuance service accepts. A minimal configuration with only the required settings is in Install the issuance service.
server.json
{
"port": 8079, // (1)!
"baseUrl": "http://localhost:8079", // (2)!
"database": { // (3)!
"persistenceUnitName": "model",
"driver": "org.postgresql.Driver",
"url": "jdbc:postgresql://postgres:5432/issuer",
"user": "postgres",
"password": "postgres"
},
"issuer": { // (4)!
"id": "issuer.example.org",
"display": {
"name": "Example University",
"logoFile": "conf/static/logo.png"
}
},
"signing": { // (5)!
"keyFile": "conf/signing-key/issuer.key",
"certificateFiles": [
"conf/signing-key/issuer.pem",
"conf/signing-key/intermediate.pem"
]
},
"integrations": { // (6)!
"authentication": {
"veUpCKs6U62JYBy9n7v8ZKZUYDIeBCXQ1A8hlR57p4cLKayiAd9nKfI9NXuE9Fna": "Calling application name"
}
},
"authorizationServer": { // (7)!
"baseUrl": "https://auth.example.org"
},
"sessionCallback": { // (8)!
"targetUrl": "https://example-application.com/issued-credential",
"bearerToken": "<a secret your application checks>"
},
"credentialOfferPrefix": "haip-vci://", // (9)!
"statusListTtl": 600 // (10)!
}
- Required. REST endpoint port.
- Required. The address this service advertises to wallets. The wallet uses it to fetch the credential offer, the issuer metadata and the credential itself, so it must be reachable by the wallet — see Going to production.
- Required. PostgreSQL connection. See Database.
- Required. Information about the issuer.
id— required. Becomes theissclaim of every credential issued. A plain identifier string; it is not a key or an address.display.name— optional. An issuer-level display name a wallet may show alongside credentials.display.logoFile— optional. Path to a logo inside the container, included in credential metadata for wallets to fetch.
- Required. Signing key and certificate chain, leaf first. Emitted as the
x5cheader of every credential. See Signing certificates. - Required. API keys for the administrative endpoints. The JSON key is the token, the value a label. See API keys.
- Optional. An external OAuth 2.0 authorization server. Omit it and the issuance service acts as the authorization server itself. Setting it changes how issuances start — see OAuth 2.0 integration.
- Optional. Where a copy of each issued credential is pushed. See Receive the issued credential.
- Optional. The scheme of the credential offer deep link handed to wallets. Defaults to
haip-vci://. Change it only to match a wallet that registers a different scheme. The verifier has an equivalent,uri_prefix, set per verification query and defaulting tohaip-vp://. - Optional. How long, in seconds, a published status list token stays valid. Defaults to
600. See Revocation.
Paths are relative to the container
keyFile, certificateFiles and logoFile are resolved against the container's working directory, /app.
Mount your configuration directory there — ./issuer/conf:/app/conf:ro — so conf/signing-key/issuer.key
refers to issuer/conf/signing-key/issuer.key on the host.
A misspelled setting stops the service
An unrecognized key fails startup and is named in the error, so a typo surfaces immediately rather than silently doing nothing.