OpenID4VCI Protocol
Credential endpoint (holder proof-of-possession → SD-JWT VC)
OpenID4VCI credential endpoint. Exchanges a Bearer access token (from POST /v1/oauth/token) plus a holder proof-of-possession JWT for the issued SD-JWT VC. Requires Authorization: Bearer <access_token>. The proof JWT (typ openid4vci-proof+jwt) carries the holder's public key and must include the c_nonce minted by POST /v1/nonce as its nonce claim and the issuer's credential_issuer identifier as its aud. On success the access token, c_nonce, and offer are all consumed (single-use), the credential is bound to the holder key, and the SD-JWT VC is returned. Returns 401 if the Authorization header is missing/not Bearer, and 400 if the proof is missing or invalid (expired token/nonce, bad signature, wrong audience, etc.).
post/v1/credential
Request body
Example request
{
"proof": {
"proof_type": "jwt",
"jwt": "eyJ0eXAiOiJvcGVuaWQ0dmNpLXByb29mK2p3dCIsImFsZyI6IkVTMjU2IiwiandrIjp7Li4ufX0.eyJub25jZSI6Ik5LUVJZWC4uLiIsImF1ZCI6Imh0dHBzOi8vaWQuZGlkaXQubWUvdjEvaXNzdWVycy9haXJsaW5lLWRlbW8iLCJpYXQiOjE3MTk3NjUwMDB9.<signature>"
}
}Response
The issued SD-JWT VC.
Example response
{
"credential": "eyJhbGciOiJFUzI1NiIsInR5cCI6ImRjK3NkLWp3dCJ9.eyJ2Y3QiOiJBaXJsaW5lTG95YWx0eSIsImlzcyI6Imh0dHBzOi8vaWQuZGlkaXQubWUvdjEvaXNzdWVycy9haXJsaW5lLWRlbW8iLC4uLn0.<signature>~WyJzYWx0IiwgImdpdmVuX25hbWUiLCAiQWRhIl0~WyJzYWx0IiwgInRpZXIiLCAiZ29sZCJd~",
"vct": "AirlineLoyalty"
}