Skip to main content

Issue credential

POST 

/v2/config/digital-wallet/openid/sdjwt/credential/issue

Issues a Verifiable Credential to a holder using the OpenID for Verifiable Credentials Issuance (OID4VCI) protocol. Supports two issuance modes: InTime (credential issued immediately via the Credential Endpoint) and Deferred (credential issued later via the Deferred Credential Endpoint by calling the Issue deferred credential API). Supports W3C VC (JWT), IETF SD-JWT VC, and ISO 18013-5 mDoc/mDL credential formats.

Request​

Body

required

Issuance instruction. issuanceMode and credentialDefinitionId are mandatory. Send the claims in credential or credentials. The issuer uses the Pre-Authorized Code Flow when you send userPin (with a transaction code) or isPreAuthorised: true (without a transaction code), and the Authorization Code Flow when you send neither. The issuer refuses an unknown field (400, unknown field).

    anyOf
    issuanceMode stringrequired

    Possible values: [InTime, Deferred]

    Issuance mode. InTime issues the credential immediately through the OID4VCI Credential Endpoint. Deferred issues the credential later through the Deferred Credential Endpoint.

    urlScheme string

    Possible values: [openid-credential-offer://, haip://]

    Default value: openid-credential-offer://

    URL scheme for the credential offer deep link: openid-credential-offer:// (the standard OID4VCI scheme and the default) or haip:// (for HAIP wallets). The issuer refuses any other value.

    credentialDefinitionId uuidrequired

    Identifier of a credential definition. The issuer uses the format, type, claims structure and revocation settings of this credential definition. The value must be a valid UUID.

    userPin string

    Possible values: <= 12 characters, Value must match regular expression ^(.{4,12})?$

    Pre-Authorized Code Flow transaction code (tx_code). The wallet must include this value in the Token Request to obtain an access token. Give 4 to 12 characters; another length gives 400. When you send this field, the issuer uses the Pre-Authorized Code Flow. An empty string also selects that flow, with no transaction code. You cannot combine this field with presentationDefinitionId.

    isPreAuthorised boolean

    Default value: false

    When true, the issuer uses the Pre-Authorized Code Flow with no transaction code. Without userPin and without isPreAuthorised: true, the issuer uses the Authorization Code Flow.

    credentialOfferEndpoint string

    Credential offer endpoint URL of the wallet for issuer-initiated issuance. When you provide this URL, the issuer sends the OID4VCI Credential Offer directly to this endpoint.

    credential object

    Credential object containing the claims to be issued via the OpenID for Verifiable Credentials Issuance (OID4VCI) protocol. Structure varies by format: credentialSubject.credentialSubject for W3C VC (JWT), claims for IETF SD-JWT VC, and claims with the mDoc namespace as top key for ISO 18013-5 mDoc/mDL. The issuer sets type, vct and doctype from the credential configuration.

    credentialSubject object

    W3C VC (JWT) format (jwt_vc_json) only: the credential below $.vc. Put the subject claims in its member credentialSubject, at the paths of the configuration. The issuer refuses any other member, and it sets @context, type, issuer and the dates itself.

    credentialSubject object

    The subject claims as key-value pairs, for example identifier and legalName.

    property name* any

    The subject claims as key-value pairs, for example identifier and legalName.

    claims object

    Key-value pairs representing the credential claims for IETF SD-JWT VC (dc+sd-jwt) or ISO 18013-5 mDoc/mDL (mso_mdoc) formats.

    property name* any

    Key-value pairs representing the credential claims for IETF SD-JWT VC (dc+sd-jwt) or ISO 18013-5 mDoc/mDL (mso_mdoc) formats.

    id string

    The id field from a specific entry in the credentialDefinitions array of the create credential definition response.

    property name* any

    Credential object containing the claims to be issued via the OpenID for Verifiable Credentials Issuance (OID4VCI) protocol. Structure varies by format: credentialSubject.credentialSubject for W3C VC (JWT), claims for IETF SD-JWT VC, and claims with the mDoc namespace as top key for ISO 18013-5 mDoc/mDL. The issuer sets type, vct and doctype from the credential configuration.

    credentials object[]

    Array of credentials to issue in one exchange. Use this field when the credential definition contains more than one credential definition entry. Each entry must carry the id of the credential definition entry that it fills, because the issuer matches the entries by that value.

    presentationDefinitionId string

    Identifier of a presentation definition for a dynamic credential request. When set, the issuer requires the holder to present matching credentials through OpenID4VP before issuance continues. The credential definition must set supportInteractiveAuthorisationEndpoint to true, the presentation definition must not use a DC API response mode, and you cannot send userPin.

    transactionData object

    Transaction data to bind to the issuance, as defined in the OpenID4VP transaction data extension. Needs presentationDefinitionId, and must match one of the supported transaction data schemas.

    property name* any

    Transaction data to bind to the issuance, as defined in the OpenID4VP transaction data extension. Needs presentationDefinitionId, and must match one of the supported transaction data schemas.

    individualId string

    Optional. Non-OID4VCI extension. Identifier of a specific individual recipient. When you provide this value, the issuer sends the credential offer as a push notification to the registered device of the individual. You cannot combine this field with mapperId.

    mapperId string

    Optional. Non-OID4VCI extension. External reference that identifies the individual recipient. The issuer resolves the individual from this value and sends the credential offer as a push notification. You cannot combine this field with individualId.

    signatureStamp boolean

    When true, the issuer adds a visible signature stamp to the issued document.

    signatureCoordinate integer[]

    Possible values: >= 4, <= 4

    Position of the signature stamp on the document page. Give exactly four pixel coordinates. The issuer refuses any other number of values.

Responses​

The issuer created the credential exchange record and the credential offer. The response holds a single object when the issuer creates one exchange record, and an array when the credential definition creates more than one record. The issuer answers 200, not 201.

Response Headers
    Schema
      credentialHistory object

      Credential exchange record, or array of credential exchange records, created for this issuance.

      oneOf
      id stringrequired

      Identifier of the credential exchange record. This field holds the same value as CredentialExchangeId.

      CredentialExchangeId stringrequired

      Unique identifier for the credential exchange record, tracking the full lifecycle of a single OID4VCI credential issuance.

      credentialExchangeId stringrequired

      Camel-case alias of CredentialExchangeId. The server sets both fields to the same value. Use this field in new integrations.

      organisationId stringrequired

      Identifier of the organisation that issues the credential.

      openIdOrganisationId stringrequired

      Identifier of the OpenID wallet deployment that processes this exchange.

      dataAgreementId stringrequired

      Identifier of the data agreement that governs this issuance. The field is empty when the issuance uses a credential definition instead of a data agreement.

      dataAttributeValues object[]required

      Attribute values supplied for a data agreement based issuance. The field is null when the issuance uses a credential definition.

    • Array [
    • name stringrequired

      Name of the data attribute, as defined in the data agreement.

      value stringrequired

      Value of the data attribute for this holder.

      limitedDisclosure boolean

      When true, the issuer makes this attribute selectively disclosable.

    • ]
    • isAccessed booleanrequired

      Indicates whether the holder opened the credential offer.

      isTokenAccessed booleanrequired

      Indicates whether the holder called the OID4VCI Token Endpoint for this exchange.

      issuanceMode stringrequired

      Possible values: [``, InTime, Deferred]

      Issuance mode used for this exchange. InTime means the credential was issued immediately via the OID4VCI Credential Endpoint. Deferred means the credential is pending via the Deferred Credential Endpoint.

      isPreAuthorised booleanrequired

      When true, the issuance used the OID4VCI Pre-Authorized Code Flow. When false, the Authorization Code Flow was used.

      credentialOffer stringrequired

      The OID4VCI Credential Offer URI sent to the holder to start the issuance flow.

      credentialOfferEndpoint stringrequired

      Credential offer endpoint of the holder wallet. The issuer sends the Credential Offer to this URL for issuer-initiated issuance.

      credentialStatus stringrequired

      Possible values: [``, pending, ready]

      Processing status of the credential. pending means the credential is being prepared. ready means it is available for the holder to retrieve.

      status stringrequired

      Possible values: [``, offer_sent, offer_received, token_issued, credential_issued, credential_acked, credential_accepted, credential_deleted, issuance_denied]

      Lifecycle status of the credential exchange in the OID4VCI protocol flow: offer_sent (Credential Offer sent to holder), offer_received (holder scanned or received the offer), token_issued (issuer released an access token), credential_issued (credential issued via Credential Endpoint), credential_acked (holder acknowledged receipt), credential_accepted (holder accepted credential), credential_deleted (holder deleted credential), issuance_denied (issuer denied issuance).

      issuerState stringrequired

      Value of the OID4VCI issuer_state parameter. The issuer uses it to bind the Authorization Request to this exchange.

      authorisationRequestState stringrequired

      State value of the OAuth 2.0 Authorization Request that the wallet sent.

      authorisationCodeState stringrequired

      State value that the issuer returns together with the authorisation code.

      authorisationCode stringrequired

      OAuth 2.0 authorisation code issued for the Authorization Code Flow.

      preAuthorisedCode stringrequired

      Pre-authorised code issued for the OID4VCI Pre-Authorized Code Flow.

      acceptanceToken stringrequired

      Acceptance token that the holder uses to poll the OID4VCI Deferred Credential Endpoint.

      codeChallenge stringrequired

      PKCE code challenge that the wallet sent in the Authorization Request, as defined in RFC 7636.

      codeChallengeMethod stringrequired

      PKCE code challenge method, for example S256.

      redirectUri stringrequired

      Redirect URI that the wallet registered for the Authorization Code Flow.

      clientId stringrequired

      Client identifier of the holder's wallet, typically a DID or URL. Provided during the OID4VCI Token Request.

      did stringrequired

      Decentralized Identifier of the issuer that signs the credential.

      userPin stringrequired

      Transaction code (tx_code) for the Pre-Authorized Code Flow.

      createdAt integerrequired

      Unix timestamp (in seconds) when this exchange record was created.

      updatedAt integerrequired

      Unix timestamp (in seconds) when this exchange record was last modified.

      issuanceDate integer

      Unix timestamp (in seconds) when the issuer signed the credential of this record: the last re-issuance, else the first issuance. A record without a credential yet shows its last update. The list operation sorts on this field.

      limitedDisclosure booleanrequired

      When true, the issuer makes the data agreement attributes selectively disclosable in the issued credential.

      credential objectrequired

      The credential payload being issued. Contains type and credentialSubject for W3C VC (JWT) format, or vct/doctype and claims for IETF SD-JWT VC / ISO 18013-5 mDoc/mDL formats.

      property name* any

      The credential payload being issued. Contains type and credentialSubject for W3C VC (JWT) format, or vct/doctype and claims for IETF SD-JWT VC / ISO 18013-5 mDoc/mDL formats.

      disclosureMapping objectrequired

      Selective disclosure mapping for IETF SD-JWT VC credentials. Each entry maps a claim path to its disclosure setting.

      property name* any

      Selective disclosure mapping for IETF SD-JWT VC credentials. Each entry maps a claim path to its disclosure setting.

      credentialLabel stringrequired

      Label of the credential definition or data agreement that this issuance uses.

      credentialDefinitionId stringrequired

      Identifier of the credential definition that this issuance uses.

      credentialDefinitionUri stringrequired

      URL of an external credential definition that this issuance uses.

      presentationDefinitionId stringrequired

      Identifier of a presentation definition required for dynamic credential requests.

      presentationExchangeId stringrequired

      Identifier of the presentation exchange session linked to a dynamic credential request.

      holder objectrequired

      Metadata about the credential holder obtained during the OID4VCI exchange. The issuer returns only the name field. The default value before the holder starts the flow is Unknown.

      name stringrequired

      Identifier of the holder, typically a DID or display name resolved from wallet client metadata.

      credentialFormat stringrequired

      Possible values: [``, vc+sd-jwt, vp+sd-jwt, dc+sd-jwt, jwt_vc_json, jwt_vc, mso_mdoc]

      Credential format used for this issuance. jwt_vc_json is W3C VC (JWT). dc+sd-jwt is IETF SD-JWT VC. mso_mdoc is ISO 18013-5 mDoc/mDL. Records created by earlier releases can also hold the legacy values vc+sd-jwt, vp+sd-jwt and jwt_vc.

      supportRevocation booleanrequired

      Indicates whether revocation is enabled for the issued credential.

      revocationStatus stringrequired

      Possible values: [``, Operational, Revoked, Suspended]

      Current revocation status: Operational (valid), Revoked (permanently invalidated), Suspended (temporarily invalidated). The field is empty when the credential definition does not support revocation.

      clientAssertion stringrequired

      OAuth 2.0 client assertion JWT provided by the holder's wallet for client authentication.

      clientAssertionType stringrequired

      Type of the client assertion token, for example urn:ietf:params:oauth:client-assertion-type:jwt-bearer.

      clientAssertionVerified booleanrequired

      Indicates whether the holder's client assertion JWT was verified.

      walletUnitAttestation stringrequired

      Wallet Unit Attestation (WUA) credential presented by the holder, certifying the wallet instance is genuine.

      walletUnitAttestationPoP stringrequired

      Proof of Possession for the Wallet Unit Attestation.

      walletUnitAttestationVerified booleanrequired

      Indicates whether the Wallet Unit Attestation was verified.

      walletUnitValidity object[]required

      Array of wallet unit validity records containing attestation and proof of possession verification status.

    • Array [
    • attestation object

      Wallet unit attestation verification status.

      isExpired boolean

      Indicates whether the attestation has expired.

      isRevoked boolean

      Indicates whether the attestation has been revoked.

      isVerified boolean

      Indicates whether the attestation was verified.

      proofOfPossession object

      Proof of possession verification status.

      isExpired boolean

      Indicates whether the proof of possession has expired.

      isVerified boolean

      Indicates whether the proof of possession was verified.

      validatedAt integer

      Unix timestamp (in seconds) when the wallet unit validity was validated.

    • ]
    • credentialToken stringrequired

      The signed credential token (JWT, SD-JWT, or mDoc) issued to the holder.

      cnf objectrequired

      Confirmation claim (cnf) containing the holder's public key JWK for key binding.

      property name* any

      Confirmation claim (cnf) containing the holder's public key JWK for key binding.

      jti stringrequired

      JWT Token Identifier (jti), unique identifier for the issued credential token.

      proof stringrequired

      Proof JWT provided by the holder in the OID4VCI Credential Request, demonstrating key possession.

      proofType stringrequired

      Type of the proof provided in the Credential Request (e.g. jwt).

      proofVerified booleanrequired

      Indicates whether the issuer verified the holder's proof of key possession.

      decodedWalletUnitAttestation objectrequired

      Decoded payload of the holder's Wallet Unit Attestation credential.

      property name* any

      Decoded payload of the holder's Wallet Unit Attestation credential.

      keyAttestationResult object

      Result of the check of the key attestation that the holder sent, when there was one.

      property name* any

      Result of the check of the key attestation that the holder sent, when there was one.

      keyAttestationId string

      Identifier of the key attestation that the holder sent, when there was one.

      batchCredentials object[]

      The credentials of a batch issuance, one entry for each credential. The issuer leaves the field out when the record has no batch.

    • Array [
    • credentialToken string

      The signed credential.

      cnf object

      Confirmation claim with the holder key of this credential.

      property name* any

      Confirmation claim with the holder key of this credential.

      jti string

      Unique identifier of this credential.

      credentialRevocationStatusListId string

      Identifier of the status list that holds the status of this credential.

      credentialRevocationStatusListIndex integer

      Index of this credential in its status list.

      revocationStatus string

      Possible values: [Operational, Revoked, Suspended]

      Revocation status of this credential. Change it with batchIndex in the update credential revocation status operation.

      keyAttestationId string

      Identifier of the key attestation of this credential.

      notificationId string

      Identifier that the wallet sends to the OID4VCI Notification Endpoint for this credential.

      validFrom string

      Start of the validity of this credential.

      validUntil string

      End of the validity of this credential.

      archived boolean

      true for a credential of an earlier batch that a re-issuance replaced. The issuer leaves the field out when it is false.

    • ]
    • issuedAt integer

      Unix timestamp (in seconds) of the first issuance. 0 when it is not known.

      refreshCount integer

      Number of re-issuances of the credential of this record.

      lastRefreshedAt integer

      Unix timestamp (in seconds) of the last re-issuance. 0 when there is none.

      issuanceDeniedReason stringrequired

      Human-readable reason why the issuer denied the credential issuance request.

      expiredCredentialTokens string[]required

      Array of previously issued credential tokens that have expired.

      expiredCredentials object[]required

      Array of decoded expired credential payloads.

      transactionData object

      Transaction data bound to this issuance, as defined in the OpenID4VP transaction data extension. This is the only field that the issuer leaves out when it has no value.

      property name* any

      Transaction data bound to this issuance, as defined in the OpenID4VP transaction data extension. This is the only field that the issuer leaves out when it has no value.

      credentialResponseEncryption objectrequired

      Encryption parameters that the wallet requests for the OID4VCI Credential Response. The field is null when the wallet asks for a plain response.

      alg string

      JWE key management algorithm, for example ECDH-ES.

      enc string

      JWE content encryption algorithm, for example A128GCM.

      jwk object

      Public JSON Web Key that the issuer uses to encrypt the Credential Response.

      property name* any

      Public JSON Web Key that the issuer uses to encrypt the Credential Response.

      property name* any

      Encryption parameters that the wallet requests for the OID4VCI Credential Response. The field is null when the wallet asks for a plain response.

      issuerTrustServiceProvider objectrequired

      Trust service provider record of the issuer, resolved from the trust list.

      property name* any

      Trust service provider record of the issuer, resolved from the trust list.

      holderTrustServiceProvider objectrequired

      Trust service provider record of the holder, resolved from the trust list.

      property name* any

      Trust service provider record of the holder, resolved from the trust list.

      individualId stringrequired

      Identifier of the individual recipient the credential offer was sent to.

      mapperId stringrequired

      Mapper identifier linking the credential offer to an external individual record.

      credentialResponseInterval integerrequired

      Minimum polling interval (in seconds) for the OID4VCI Deferred Credential Endpoint.

      signatureStamp booleanrequired

      When true, the issuer adds a visible signature stamp to the issued document.

      signatureCoordinate integer[]required

      Possible values: >= 4, <= 4

      Position of the signature stamp on the document page, given as four pixel coordinates.

      cryptographicKeyIdentifier string

      Identifier of the key that signs the credential. The issuer leaves the field out when it has no value.

      cryptographicKeyFormat string

      Format of the signing key: x509 or did:key. The issuer leaves the field out when it has no value.

      credentialDefinitionSnapshot object

      Copy of the credential definition at the time of the issuance. The issuance uses this copy, so a later change of the credential definition does not change this exchange.

      property name* any

      Copy of the credential definition at the time of the issuance. The issuance uses this copy, so a later change of the credential definition does not change this exchange.

      oidcProviderId string

      Identifier of the external OpenID provider of the credential definition, when it has one.

      isWalletInitiated boolean

      true when a wallet started this issuance with a pushed authorisation request.

      reusedCredentialOfferId string

      Identifier of the reused credential offer that made this record, when the credential definition sets supportCredentialOfferReuse. Empty in other cases.

      userId string

      Identifier of the user that started this issuance, when known.

    Loading...