Authlete Verifiable Credential Issuer API
API endpoints for implementing and running a Verifiable Credential Issuer (VCI).
API endpoints for implementing and running a Verifiable Credential Issuer (VCI).
Every API here is available over the APIs.io API and to AI agents over MCP.
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
find_apisBrowse and filter every API in the catalog.get_api_artifactsOne API's artifacts, grouped by type.get_openapiThe primary OpenAPI for this API.find_similar_apisAPIs that look like this one.apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.resolveTurn a domain, URL or GitHub org into the provider it belongs to.find_cohortsEvery scored population of providers in the catalog.curl "https://apis.io/api/v1/apis/authlete-verifiable-credential-issuer-api"
curl "https://apis.io/api/v1/apis?limit=25"
Discovery needs no key. Ratings and market analysis are Pro.
Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.
A second provider on the same verified email joins the account you already have.
openapi: 3.2.0
info:
title: Authlete Verifiable Credential Issuer API
description: Welcome to the **Authlete API documentation**.
version: 3.0.16
license:
name: Apache 2.0
url: https://www.apache.org/licenses/LICENSE-2.0.html
servers:
- description: 🇺🇸 US Cluster
url: https://us.authlete.com
- description: 🇯🇵 Japan Cluster
url: https://jp.authlete.com
- description: 🇪🇺 Europe Cluster
url: https://eu.authlete.com
- description: 🇧🇷 Brazil Cluster
url: https://br.authlete.com
security:
- bearer: []
tags:
- name: Verifiable Credential Issuer
description: API endpoints for implementing and running a Verifiable Credential Issuer (VCI).
x-tag-expanded: false
paths:
/api/{serviceId}/vci/metadata:
post:
summary: Get Verifiable Credential Issuer Metadata
description: Get verifiable credential issuer metadata
parameters:
- in: path
name: serviceId
description: A service ID.
required: true
schema:
type: string
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/vci_metadata_request'
application/x-www-form-urlencoded:
schema:
$ref: '#/components/schemas/vci_metadata_request'
responses:
'200':
description: VCI metadata retrieved successfully
content:
application/json:
schema:
$ref: '#/components/schemas/vci_metadata_response'
links:
vci_offer_create:
$ref: '#/components/links/vci_offer_create'
vci_vp_metadata:
$ref: '#/components/links/vci_vp_metadata'
'400':
$ref: '#/components/responses/400'
'401':
$ref: '#/components/responses/401'
'403':
$ref: '#/components/responses/403'
'500':
$ref: '#/components/responses/500'
operationId: vci_metadata_api
tags:
- Verifiable Credential Issuer
/api/{serviceId}/vci/jwtissuer:
post:
summary: Get JWT Issuer Information
description: Get JWT issuer information for VCI
parameters:
- in: path
name: serviceId
description: A service ID.
required: true
schema:
type: string
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/vci_jwtissuer_request'
application/x-www-form-urlencoded:
schema:
$ref: '#/components/schemas/vci_jwtissuer_request'
responses:
'200':
description: ''
content:
application/json:
schema:
$ref: '#/components/schemas/vci_jwtissuer_response'
'400':
$ref: '#/components/responses/400'
'401':
$ref: '#/components/responses/401'
'403':
$ref: '#/components/responses/403'
'500':
$ref: '#/components/responses/500'
operationId: vci_jwtissuer_api
tags:
- Verifiable Credential Issuer
/api/{serviceId}/vci/jwks:
post:
summary: Get JSON Web Key Set
description: Get JSON Web Key Set for VCI
parameters:
- in: path
name: serviceId
description: A service ID.
required: true
schema:
type: string
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/vci_jwks_request'
application/x-www-form-urlencoded:
schema:
$ref: '#/components/schemas/vci_jwks_request'
responses:
'200':
description: ''
content:
application/json:
schema:
$ref: '#/components/schemas/vci_jwks_response'
'400':
$ref: '#/components/responses/400'
'401':
$ref: '#/components/responses/401'
'403':
$ref: '#/components/responses/403'
'500':
$ref: '#/components/responses/500'
operationId: vci_jwks_api
tags:
- Verifiable Credential Issuer
/api/{serviceId}/vci/offer/create:
post:
summary: Create Credential Offer
description: Create a verifiable credential offer
parameters:
- in: path
name: serviceId
description: A service ID.
required: true
schema:
type: string
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/vci_offer_create_request'
application/x-www-form-urlencoded:
schema:
$ref: '#/components/schemas/vci_offer_create_request'
responses:
'200':
description: ''
content:
application/json:
schema:
$ref: '#/components/schemas/vci_offer_create_response'
'400':
$ref: '#/components/responses/400'
'401':
$ref: '#/components/responses/401'
'403':
$ref: '#/components/responses/403'
'500':
$ref: '#/components/responses/500'
operationId: vci_offer_create_api
tags:
- Verifiable Credential Issuer
/api/{serviceId}/vci/offer/info:
post:
summary: Get Credential Offer Information
description: Get information about a verifiable credential offer
parameters:
- in: path
name: serviceId
description: A service ID.
required: true
schema:
type: string
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/vci_offer_info_request'
application/x-www-form-urlencoded:
schema:
$ref: '#/components/schemas/vci_offer_info_request'
responses:
'200':
description: Credential offer info retrieved successfully
content:
application/json:
schema:
$ref: '#/components/schemas/vci_offer_info_response'
'400':
$ref: '#/components/responses/400'
'401':
$ref: '#/components/responses/401'
'403':
$ref: '#/components/responses/403'
'500':
$ref: '#/components/responses/500'
operationId: vci_offer_info_api
tags:
- Verifiable Credential Issuer
/api/{serviceId}/vci/single/parse:
post:
summary: Parse Single Credential
description: Parse a single verifiable credential
parameters:
- in: path
name: serviceId
description: A service ID.
required: true
schema:
type: string
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/vci_single_parse_request'
application/x-www-form-urlencoded:
schema:
$ref: '#/components/schemas/vci_single_parse_request'
responses:
'200':
description: ''
content:
application/json:
schema:
$ref: '#/components/schemas/vci_single_parse_response'
'400':
$ref: '#/components/responses/400'
'401':
$ref: '#/components/responses/401'
'403':
$ref: '#/components/responses/403'
'500':
$ref: '#/components/responses/500'
operationId: vci_single_parse_api
tags:
- Verifiable Credential Issuer
/api/{serviceId}/vci/single/issue:
post:
summary: Issue Single Credential
description: Issue a single verifiable credential
parameters:
- in: path
name: serviceId
description: A service ID.
required: true
schema:
type: string
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/vci_single_issue_request'
responses:
'200':
description: ''
content:
application/json:
schema:
$ref: '#/components/schemas/vci_single_issue_response'
'400':
$ref: '#/components/responses/400'
'401':
$ref: '#/components/responses/401'
'403':
$ref: '#/components/responses/403'
'500':
$ref: '#/components/responses/500'
operationId: vci_single_issue_api
tags:
- Verifiable Credential Issuer
/api/{serviceId}/vci/batch/parse:
post:
summary: Parse Batch Credentials
description: Parse multiple verifiable credentials in batch
parameters:
- in: path
name: serviceId
description: A service ID.
required: true
schema:
type: string
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/vci_batch_parse_request'
application/x-www-form-urlencoded:
schema:
$ref: '#/components/schemas/vci_batch_parse_request'
responses:
'200':
description: Batch credential parsing completed successfully
content:
application/json:
schema:
$ref: '#/components/schemas/vci_batch_parse_response'
'400':
$ref: '#/components/responses/400'
'401':
$ref: '#/components/responses/401'
'403':
$ref: '#/components/responses/403'
'500':
$ref: '#/components/responses/500'
operationId: vci_batch_parse_api
tags:
- Verifiable Credential Issuer
/api/{serviceId}/vci/batch/issue:
post:
summary: Issue Batch Credentials
description: Issue multiple verifiable credentials in batch
parameters:
- in: path
name: serviceId
description: A service ID.
required: true
schema:
type: string
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/vci_batch_issue_request'
responses:
'200':
description: Batch credential issuance completed successfully
content:
application/json:
schema:
$ref: '#/components/schemas/vci_batch_issue_response'
'400':
$ref: '#/components/responses/400'
'401':
$ref: '#/components/responses/401'
'403':
$ref: '#/components/responses/403'
'500':
$ref: '#/components/responses/500'
operationId: vci_batch_issue_api
tags:
- Verifiable Credential Issuer
/api/{serviceId}/vci/deferred/parse:
post:
summary: Parse Deferred Credential
description: Parse a deferred verifiable credential
parameters:
- in: path
name: serviceId
description: A service ID.
required: true
schema:
type: string
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/vci_deferred_parse_request'
application/x-www-form-urlencoded:
schema:
$ref: '#/components/schemas/vci_deferred_parse_request'
responses:
'200':
description: ''
content:
application/json:
schema:
$ref: '#/components/schemas/vci_deferred_parse_response'
'400':
$ref: '#/components/responses/400'
'401':
$ref: '#/components/responses/401'
'403':
$ref: '#/components/responses/403'
'500':
$ref: '#/components/responses/500'
operationId: vci_deferred_parse_api
tags:
- Verifiable Credential Issuer
/api/{serviceId}/vci/deferred/issue:
post:
summary: Issue Deferred Credential
description: Issue a deferred verifiable credential
parameters:
- in: path
name: serviceId
description: A service ID.
required: true
schema:
type: string
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/vci_deferred_issue_request'
responses:
'200':
description: ''
content:
application/json:
schema:
$ref: '#/components/schemas/vci_deferred_issue_response'
'400':
$ref: '#/components/responses/400'
'401':
$ref: '#/components/responses/401'
'403':
$ref: '#/components/responses/403'
'500':
$ref: '#/components/responses/500'
operationId: vci_deferred_issue_api
tags:
- Verifiable Credential Issuer
components:
links:
vci_vp_metadata:
operationId: vci_jwtissuer_api
parameters:
serviceId: $request.path.serviceId
vci_offer_create:
operationId: vci_offer_create_api
parameters:
serviceId: $request.path.serviceId
responses:
'400':
description: ''
content:
application/json:
schema:
$ref: '#/components/schemas/result'
example:
resultCode: A001201
resultMessage: '[A001201] /auth/authorization, TLS must be used.'
'500':
description: ''
content:
application/json:
schema:
$ref: '#/components/schemas/result'
example:
resultCode: A001101
resultMessage: '[A001101] /auth/authorization, Authlete Server error.'
'401':
description: ''
content:
application/json:
schema:
$ref: '#/components/schemas/result'
example:
resultCode: A001202
resultMessage: '[A001202] /auth/authorization, Authorization header is missing.'
'403':
description: ''
content:
application/json:
schema:
$ref: '#/components/schemas/result'
example:
resultCode: A001215
resultMessage: '[A001215] /auth/authorization, The client (ID = 26837717140341) is locked.'
schemas:
vci_single_issue_request:
type: object
properties:
accessToken:
type: string
description: The access token that came along with the credential request.
order:
$ref: '#/components/schemas/credential_issuance_order'
result:
type: object
properties:
resultCode:
type: string
description: The code which represents the result of the API call.
resultMessage:
type: string
description: A short message which explains the result of the API call.
vci_offer_info_response:
type: object
properties:
resultCode:
type: string
description: The code which represents the result of the API call.
resultMessage:
type: string
description: A short message which explains the result of the API call.
action:
type: string
enum:
- OK
- FORBIDDEN
- NOT_FOUND
- CALLER_ERROR
- AUTHLETE_ERROR
description: The result of the `/vci/offer/info` API call.
info:
$ref: '#/components/schemas/credential_offer_info'
vci_metadata_response:
type: object
properties:
resultCode:
type: string
description: The code which represents the result of the API call.
resultMessage:
type: string
description: A short message which explains the result of the API call.
action:
type: string
enum:
- OK
- NOT_FOUND
- INTERNAL_SERVER_ERROR
description: 'The next action that the implementation of the credential issuer
metadata endpoint (`/.well-known/openid-credential-issuer`)
should take after getting a response from Authlete''s
`/vci/metadata` API.
'
responseContent:
type: string
description: 'Get the content that the implementation of the credential issuer
metadata endpoint should use when it constructs a response.
'
vci_deferred_issue_request:
type: object
properties:
order:
$ref: '#/components/schemas/credential_issuance_order'
vci_offer_create_request:
type: object
properties:
authorizationCodeGrantIncluded:
type: boolean
description: 'The flag indicating whether the `authorization_code` object is
included in the `grants` object.
'
issuerStateIncluded:
type: boolean
description: 'The flag indicating whether the `issuer_state` property is
included in the `authorization_code` object in the `grants`
object.
'
preAuthorizedCodeGrantIncluded:
type: boolean
description: 'The flag to include the
`urn:ietf:params:oauth:grant-type:pre-authorized_code` object
in the `grants` object.
'
subject:
type: string
description: The subject associated with the credential offer.
duration:
type: integer
format: int64
description: The duration of the credential offer.
context:
type: string
description: The general-purpose arbitrary string.
properties:
type: array
items:
$ref: '#/components/schemas/property'
description: Extra properties to associate with the credential offer.
jwtAtClaims:
type: string
description: 'Additional claims that are added to the payload part of the JWT
access token.
'
authTime:
type: integer
format: int64
description: 'The time at which the user authentication was performed during
the course of issuing the credential offer.
'
acr:
type: string
description: 'The Authentication Context Class Reference of the user authentication
performed during the course of issuing the credential offer.
'
credentialConfigurationIds:
type: array
items:
type: string
description: 'The value of the `credential_configuration_ids` array.
'
x-mint:
metadata:
description: The value of the `credential_configuration_ids` array.
content: "<Accordion title=\"Full description\" defaultOpen={false}>\n```\n{\n \"credential_issuer\": \"...\",\n \"credential_configuration_ids\": [ ... ],\n \"grants\": { ... }\n}\n```\n\nThis property is mandatory.\n</Accordion>\n"
txCode:
type: string
description: 'The transaction code that should be associated with the credential offer.
'
x-mint:
metadata:
description: The transaction code that should be associated with the credential offer.
content: "<Accordion title=\"Full description\" defaultOpen={false}>\nIf this parameter is not empty and the `preAuthorizedCodeGrantIncluded` parameter is `true`, the\n`urn:ietf:params:oauth:grant-type:pre-authorized_code` object will include the `tx_code` object.\n\nThe length of the value of this parameter will be used as the value of the `length` property in\nthe `tx_code` object.\n\n```\n{\n \"credential_issuer\": \"...\",\n \"credential_configuration_ids\": [ ... ],\n \"grants\": {\n \"urn:ietf:params:oauth:grant-type:pre-authorized_code\": {\n \"pre-authorized_code\": \"...\",\n \"tx_code\": {\n \"length\": length\n }\n }\n }\n}\n```\n</Accordion>\n"
txCodeInputMode:
type: string
description: 'The input mode of the transaction code.
'
x-mint:
metadata:
description: The input mode of the transaction code.
content: "<Accordion title=\"Full description\" defaultOpen={false}>\nThe value of this property will be used as the value of the `input_mode` property in the `tx_code`\nobject.\n\n```\n{\n \"credential_issuer\": \"...\",\n \"credential_configuration_ids\": [ ... ],\n \"grants\": {\n \"urn:ietf:params:oauth:grant-type:pre-authorized_code\": {\n \"pre-authorized_code\": \"...\",\n \"tx_code\": {\n \"length\": length,\n \"input_mode\": \"...\"\n }\n }\n }\n}\n```\n</Accordion>\n"
txCodeDescription:
type: string
description: 'The description of the transaction code.
'
x-mint:
metadata:
description: The description of the transaction code.
content: "<Accordion title=\"Full description\" defaultOpen={false}>\nThe value of this property will be used as the value of the `description` property in the `tx_code`\nobject.\n\n```\n{\n \"credential_issuer\": \"...\",\n \"credential_configuration_ids\": [ ... ],\n \"grants\": {\n \"urn:ietf:params:oauth:grant-type:pre-authorized_code\": {\n \"pre-authorized_code\": \"...\",\n \"tx_code\": {\n \"length\": length,\n \"description\": \"...\"\n }\n }\n }\n}\n```\n</Accordion>\n"
vci_batch_parse_request:
type: object
properties:
accessToken:
type: string
description: The access token that came along with the credential request.
requestContent:
type: string
description: The message body of the batch credential request.
credential_issuance_order:
type: object
properties:
requestIdentifier:
type: string
description: The identifier of a credential request.
credentialPayload:
type: string
description: The additional payload that will be added into a credential to be issued.
issuanceDeferred:
type: boolean
description: The flag indicating whether to defer credential issuance.
credentialDuration:
type: integer
format: int64
description: The duration of a credential to be issued.
signingKeyId:
type: string
description: 'The key ID of a private key that should be used for signing a credential
to be issued.
'
vci_offer_create_response:
type: object
properties:
resultCode:
type: string
description: The code which represents the result of the API call.
resultMessage:
type: string
description: A short message which explains the result of the API call.
action:
type: string
enum:
- CREATED
- FORBIDDEN
- CALLER_ERROR
- AUTHLETE_ERROR
description: The result of the `/vci/offer/create` API call.
info:
$ref: '#/components/schemas/credential_offer_info'
vci_batch_parse_response:
type: object
properties:
resultCode:
type: string
description: The code which represents the result of the API call.
resultMessage:
type: string
description: A short message which explains the result of the API call.
action:
type: string
enum:
- OK
- BAD_REQUEST
- UNAUTHORIZED
- FORBIDDEN
- INTERNAL_SERVER_ERROR
description: The next action that the batch credential endpoint should take.
responseContent:
type: string
description: The content of the response to the request sender.
info:
type: array
items:
$ref: '#/components/schemas/credential_request_info'
description: 'Information about the credential requests in the batch credential
request.
'
vci_jwtissuer_response:
type: object
properties:
resultCode:
type: string
description: The code which represents the result of the API call.
resultMessage:
type: string
description: A short message which explains the result of the API call.
action:
type: string
enum:
- OK
- NOT_FOUND
- INTERNAL_SERVER_ERROR
description: 'The next action that the implementation of the JWT issuer metadata
endpoint (`/.well-known/jwt-issuer`) should take after getting
a response from Authlete''s `/vci/jwtissuer` API.
'
responseContent:
type: string
description: 'Get the content that the implementation of the credential issuer
metadata endpoint should use when it constructs a response.
'
vci_jwtissuer_request:
type: object
required:
- pretty
properties:
pretty:
type: boolean
description: 'The flag indicating whether the metadata is written in the pretty
format or not.
'
vci_batch_issue_response:
type: object
properties:
resultCode:
type: string
description: The code which represents the result of the API call.
resultMessage:
type: string
description: A short message which explains the result of the API call.
action:
type: string
enum:
- OK
- UNAUTHORIZED
- FORBIDDEN
- INTERNAL_SERVER_ERROR
- CALLER_ERROR
description: 'The next action that the implementation of the batch credential
endpoint should take.
'
responseContent:
type: string
description: 'The content of the response that the implementation of the batch
credential endpoint should return.
'
vci_offer_info_request:
type: object
properties:
identifier:
type: string
description: The identifier of the credential offer.
vci_single_issue_response:
type: object
properties:
resultCode:
type: string
description: The code which represents the result of the API call.
resultMessage:
type: string
description: A short message which explains the result of the API call.
action:
type: string
enum:
- OK
- ACCEPTED
- UNAUTHORIZED
- FORBIDDEN
- INTERNAL_SERVER_ERROR
- CALLER_ERROR
description: 'The next action that the implementation of the credential endpoint
should take.
'
responseContent:
type: string
description: 'The content of the response that the implementation of the credential
endpoint should return.
'
transactionId:
type: string
description: 'The issued transaction ID.
'
vci_single_parse_response:
type: object
properties:
resultCode:
type: string
description: The code which represents the result of the API call.
resultMessage:
type: string
description: A short message which explains the result of the API call.
action:
type: string
enum:
- OK
- BAD_REQUEST
- UNAUTHORIZED
- FORBIDDEN
- INTERNAL_SERVER_ERROR
description: The next action that the credential endpoint should take.
responseContent:
type: string
description: The content of the response to the request sender.
info:
$ref: '#/components/schemas/credential_request_info'
vci_jwks_response:
type: object
properties:
resultCode:
type: string
description: The code which represents the result of the API call.
resultMessage:
type: string
description: A short message which explains the result of the API call.
action:
type: string
enum:
- OK
- NOT_FOUND
- INTERNAL_SERVER_ERROR
description: 'The next action that the implementation of the JWK Set document
endpoint of the credential issuer should take after getting a
response from Authlete''s `/vci/jwks` API.
'
responseContent:
type: string
description: 'Get the content that the implementation of the credential issuer
metadata endpoint should use when it constructs a response.
'
credential_request_info:
type: object
properties:
identifier:
type: string
description: The identifier of the credential offer.
format:
type: string
description: The value of the format parameter in the credential request.
bindingKey:
type: string
description: The binding key specified by the proof in the credential request.
bindingKeys:
type: array
items:
type: string
description: The binding keys specified by the proofs in the credential request.
details:
type: string
description: The details about the credential request.
vci_jwks_request:
type: object
required:
- pretty
properties:
pretty:
type: boolean
description: 'The flag indicating whether the metadata is written in the pretty
format or not.
'
vci_deferred_parse_request:
type: object
properties:
accessToken:
type: string
description: The access token that came along with the deferred credential request.
requestContent:
type: string
description: The message body of the deferred credential request.
vci_deferred_issue_response:
type: object
properties:
resultCode:
type: string
description: The code which represents the result of the API call.
resultMessage:
type: string
description: A short message which explains the result of the API call.
action:
type: string
enum:
- OK
- FORBIDDEN
- INTERNAL_SERVER_ERROR
- CALLER_ERROR
description: 'The next action that the implementation of the deferred credential
endpoint should take.
'
responseContent:
type: string
description: 'The content of the response that the implementation of the deferred
credential endpoint should return.
'
vci_single_parse_request:
type: object
properties:
accessToken:
type: string
description: The access token that came along with the credential request.
requestContent:
type: string
description: The message body of the credential request.
vci_deferred_parse_response:
type: object
properties:
resultCode:
type: string
description: The code which represents the result of the API call.
resultMessage:
type: string
description: A short message which explains the result of the API call.
action:
type: string
enum:
- OK
- BAD_REQUEST
- UNAUTHORIZED
- FORBIDDEN
- INTERNAL_SERVER_ERROR
description: The next action that the deferred credential endpoint should take.
responseContent:
type: string
description: The content of the response to the request sender.
info:
$ref: '#/components/schemas/credential_request_info'
description: Information about the credential request bound to the transaction ID.
credential_
# --- truncated at 32 KB (37 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/authlete/refs/heads/main/openapi/authlete-verifiable-credential-issuer-api-openapi.yml