> For the complete documentation index, see [llms.txt](https://docs.meeco.me/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.meeco.me/openapi-docs/svx-api/issuer-credentials.md).

# Issuer Credentials

## List issued credentials

> Lists credentials that have been issued by this issuer instance. The list can be filtered, sorted, and paginated by using the available query parameters. Filtering by credential format is also supported to easily retrieve credentials of a specific format.<br>

```json
{"openapi":"3.1.0","info":{"title":"SVX Wallet API","version":"4.0.1"},"servers":[{"url":"https://zyfla-wallet-sandbox.meeco.cloud","description":"SVX Wallet deployment (relative)"}],"security":[{},{"bearerAuth":[]},{"mutualTLS":[]}],"components":{"securitySchemes":{"bearerAuth":{"bearerFormat":"JWT","scheme":"bearer","type":"http"},"mutualTLS":{"type":"mutualTLS"}},"schemas":{"IssuerCredentialsResponseDto":{"type":"object","properties":{"credentials":{"type":"array","items":{"$ref":"#/components/schemas/IssuerCredentialResponseDto"}},"meta":{"$ref":"#/components/schemas/PaginationMeta"}},"required":["credentials","meta"]},"IssuerCredentialResponseDto":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"credential":{"type":"string","description":"The issued credential. For `jwt_vc_json` and `dc+sd-jwt` formats this is a compact JWT string. For `mso_mdoc` it is a base64url-encoded CBOR-encoded IssuerSigned structure."},"format":{"type":"string","enum":["jwt_vc_json","dc+sd-jwt","mso_mdoc"]},"credential_configuration_id":{"type":"string"},"holder_binding":{"oneOf":[{"type":"object","description":"JWK holder binding","required":["jwk"],"properties":{"jwk":{"type":"object","description":"JSON Web Key representing the holder's public key","additionalProperties":true}}},{"type":"object","description":"DID holder binding","required":["did"],"properties":{"did":{"type":"string"}}},{"type":"null"}]},"created_at":{"type":"string","format":"date-time"}},"required":["id","credential","format","credential_configuration_id","created_at"]},"PaginationMeta":{"type":"object","properties":{"page":{"type":"integer"},"per_page":{"type":"integer"},"page_count":{"type":"integer"},"records_count":{"type":"integer"},"order":{"type":"string","enum":["ASC","DESC"]},"order_by":{"type":"string"},"order_from_params":{"type":"boolean"},"per_page_from_params":{"type":"boolean"}},"required":["page","per_page","page_count","records_count","order","order_by","order_from_params","per_page_from_params"]},"InvalidPaginationParamError":{"properties":{"error":{"description":"Unique error identifier","enum":["invalid_pagination_param"],"type":"string"},"extra_info":{"description":"Object that may contain more information about the error","type":"object"},"message":{"description":"User friendly error message","type":"string"}},"required":["error","message","extra_info"],"type":"object"}}},"paths":{"/issuer/credentials":{"get":{"summary":"List issued credentials","description":"Lists credentials that have been issued by this issuer instance. The list can be filtered, sorted, and paginated by using the available query parameters. Filtering by credential format is also supported to easily retrieve credentials of a specific format.\n","operationId":"IssuerCredentialsController_findAll","parameters":[{"in":"query","name":"order","required":false,"schema":{"type":"string","enum":["ASC","DESC"]}},{"in":"query","name":"order_by","required":false,"schema":{"type":"string","enum":["created_at"]}},{"in":"query","name":"per_page","required":false,"schema":{"type":"integer","minimum":1,"maximum":50,"default":50}},{"in":"query","name":"page","required":false,"schema":{"type":"integer","minimum":1}},{"in":"query","name":"format","required":false,"description":"Filter by credential format (Supported: `jwt_vc_json`, `dc+sd-jwt`, `mso_mdoc`)","schema":{"type":"string","enum":["jwt_vc_json","dc+sd-jwt","mso_mdoc"]}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/IssuerCredentialsResponseDto"}}},"description":"Credentials successfully loaded"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/InvalidPaginationParamError"}}},"description":"Invalid query params"}},"tags":["Issuer Credentials"]}}}}
```

## Issue ad-hoc credentials

> Protected endpoint for ad-hoc issuance of signed credentials by authorised service accounts of the organisation.\
> \
> A credential of the provided \`credential\_configuration\_id\` will be issued for each key provided (JWK) in \`binding\_keys\`.\
> The response follows the response of a successful issuance with the OID4VCI protocol.\
> Each credential will be returned in an array of objects.\
> \
> If \`binding\_keys\` is not provided, a single credential without holder binding will be issued.\
> \
> Example:\
> \- \`credentials: \[ { credential: 'ejy0...' } ]\`\
> \
> \`jwt\_vc\_json\` and \`dc+sd-jwt\` credentials will be returned as a base64url-encoded string of compact JWT.\
> \
> \`mso\_mdoc\` credentials will be returned as a base64url-encoded representation of the CBOR-encoded IssuerSigned structure.\
> \
> Proof of possesion of the \`binding\_keys\` is not checked.\
> \
> \## Supported Standards\
> \
> \- jwt\_vc\_json: \[W3C Verifiable Credentials Data Model 1.1]\(<https://www.w3.org/TR/vc-data-model-1.1)\\>
> \- dc+sd-jwt: \[SD-JWT-based Verifiable Digital Credentials]\(<https://datatracker.ietf.org/doc/draft-ietf-oauth-sd-jwt-vc)\\>
> \- mso\_mdoc: \[ISO 18013-5 Mobile Driving License (mDL) v1.0]\(<https://www.iso.org/standard/69084.html>)<br>

```json
{"openapi":"3.1.0","info":{"title":"SVX Wallet API","version":"4.0.1"},"servers":[{"url":"https://zyfla-wallet-sandbox.meeco.cloud","description":"SVX Wallet deployment (relative)"}],"security":[{},{"bearerAuth":[]},{"mutualTLS":[]}],"components":{"securitySchemes":{"bearerAuth":{"bearerFormat":"JWT","scheme":"bearer","type":"http"},"mutualTLS":{"type":"mutualTLS"}},"schemas":{"AdhocCredentialIssuanceRequest":{"type":"object","required":["credential_configuration_id","claims"],"properties":{"credential_configuration_id":{"type":"string","description":"ID of the credential configuration to use for issuance."},"claims":{"type":"object","additionalProperties":true,"description":"Claims to include in the issued credential."},"binding_keys":{"type":"array","description":"Array of JSON Web Keys (JWK). One credential will be issued per key. If omitted, a single credential without holder binding is issued. Server enforces a maximum array size via `credential_issuer.max_batch_credential_issuance_size` (configured per deployment, minimum 2).\n","minItems":1,"items":{"type":"object","additionalProperties":true,"description":"A JSON Web Key (RFC 7517)."}},"signing_kid":{"type":"string","description":"Optional key ID for the signing key to use. If omitted, the configured organisation wallet key is used."}}},"CredentialResponse":{"type":"object","required":["credentials"],"properties":{"credentials":{"type":"array","description":"Array of issued credentials. For `jwt_vc_json` and `dc+sd-jwt` formats, each credential is a compact JWT string. For `mso_mdoc`, it is a base64url-encoded CBOR-encoded IssuerSigned structure.\n","items":{"type":"object","required":["credential"],"properties":{"credential":{"type":"string","description":"The issued credential."}}}}}},"InvalidRequestError":{"properties":{"error":{"description":"Unique error identifier","enum":["invalid_request"],"type":"string"},"extra_info":{"description":"Object that may contain more information about the error","type":"object"},"message":{"description":"User friendly error message","type":"string"}},"required":["error","message","extra_info"],"type":"object"},"ServerErrorError":{"allOf":[{"$ref":"#/components/schemas/OAuthErrorResponse"},{"type":"object","properties":{"error":{"type":"string","enum":["server_error"]},"error_description":{"type":"string","description":"Server error.\n"}}}]},"OAuthErrorResponse":{"type":"object","required":["error","error_description"],"properties":{"error":{"type":"string","description":"A machine-readable error code."},"error_description":{"type":"string","description":"A human-readable description of the error providing additional information about the error."},"error_uri":{"type":"string","format":"uri","description":"A URI identifying a human-readable web page with information about the error."}}},"TemporarilyUnavailableError":{"allOf":[{"$ref":"#/components/schemas/OAuthErrorResponse"},{"type":"object","properties":{"error":{"type":"string","enum":["temporarily_unavailable"]},"error_description":{"type":"string","description":"The server is undergoing maintenance, or is otherwise unavailable.\n"}}}]}}},"paths":{"/issuer/credentials":{"post":{"summary":"Issue ad-hoc credentials","description":"Protected endpoint for ad-hoc issuance of signed credentials by authorised service accounts of the organisation.\n\nA credential of the provided `credential_configuration_id` will be issued for each key provided (JWK) in `binding_keys`.\nThe response follows the response of a successful issuance with the OID4VCI protocol.\nEach credential will be returned in an array of objects.\n\nIf `binding_keys` is not provided, a single credential without holder binding will be issued.\n\nExample:\n- `credentials: [ { credential: 'ejy0...' } ]`\n\n`jwt_vc_json` and `dc+sd-jwt` credentials will be returned as a base64url-encoded string of compact JWT.\n\n`mso_mdoc` credentials will be returned as a base64url-encoded representation of the CBOR-encoded IssuerSigned structure.\n\nProof of possesion of the `binding_keys` is not checked.\n\n## Supported Standards\n\n- jwt_vc_json: [W3C Verifiable Credentials Data Model 1.1](https://www.w3.org/TR/vc-data-model-1.1)\n- dc+sd-jwt: [SD-JWT-based Verifiable Digital Credentials](https://datatracker.ietf.org/doc/draft-ietf-oauth-sd-jwt-vc)\n- mso_mdoc: [ISO 18013-5 Mobile Driving License (mDL) v1.0](https://www.iso.org/standard/69084.html)\n","operationId":"IssuerCredentials","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdhocCredentialIssuanceRequest"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CredentialResponse"}}},"description":"OK"},"400":{"description":"The request could not be processed due to invalid input. Refer to the detailed error codes and descriptions for more information.","content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/InvalidRequestError"}]}}}},"500":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServerErrorError"}}}},"503":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TemporarilyUnavailableError"}}}}},"tags":["Issuer Credentials"]}}}}
```

## Verify credential

> Verify a credential provided in the request body. This endpoint performs\
> signature, format and optional revocation/schema checks and returns a\
> verification summary. Useful for issuer or operator tooling that needs\
> to verify credentials without a Wallet context.<br>

```json
{"openapi":"3.1.0","info":{"title":"SVX Wallet API","version":"4.0.1"},"servers":[{"url":"https://zyfla-wallet-sandbox.meeco.cloud","description":"SVX Wallet deployment (relative)"}],"security":[{},{"bearerAuth":[]},{"mutualTLS":[]}],"components":{"securitySchemes":{"bearerAuth":{"bearerFormat":"JWT","scheme":"bearer","type":"http"},"mutualTLS":{"type":"mutualTLS"}},"schemas":{"CredentialVerificationResponseDto":{"properties":{"checks":{"type":"array","items":{"type":"string","enum":["format","signature","expiration","nonce","schema","revocation_status"]}},"errors":{"items":{"$ref":"#/components/schemas/CredentialVerificationCheckModelDto"},"type":"array"},"id":{"type":"string"},"warnings":{"items":{"$ref":"#/components/schemas/CredentialVerificationCheckModelDto"},"type":"array"}},"required":["id","checks","warnings","errors"],"type":"object"},"CredentialVerificationCheckModelDto":{"properties":{"error":{"type":"string"},"extra_info":{"type":"object"},"message":{"type":"string"}},"required":["error","message","extra_info"],"type":"object"},"InvalidRequestError":{"properties":{"error":{"description":"Unique error identifier","enum":["invalid_request"],"type":"string"},"extra_info":{"description":"Object that may contain more information about the error","type":"object"},"message":{"description":"User friendly error message","type":"string"}},"required":["error","message","extra_info"],"type":"object"},"VerifyCredentialError":{"properties":{"error":{"description":"Unique error identifier","enum":["verify_credential_error"],"type":"string"},"extra_info":{"description":"Object that may contain more information about the error","type":"object"},"message":{"description":"User friendly error message","type":"string"}},"required":["error","message","extra_info"],"type":"object"}}},"paths":{"/issuer/credentials/verify":{"post":{"summary":"Verify credential","description":"Verify a credential provided in the request body. This endpoint performs\nsignature, format and optional revocation/schema checks and returns a\nverification summary. Useful for issuer or operator tooling that needs\nto verify credentials without a Wallet context.\n","operationId":"IssuerCredentialsController_verify","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"credential":{"type":"string","description":"Encoded credential (compact JWT or base64url mso_mdoc)"},"format":{"type":"string","enum":["dc+sd-jwt","jwt_vc_json","mso_mdoc"]}},"required":["credential"]}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CredentialVerificationResponseDto"}}},"description":"Credential verification complete"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/InvalidRequestError"}}},"description":""},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/VerifyCredentialError"}}},"description":""}},"tags":["Issuer Credentials"]}}}}
```

## Get issued credential

> Returns an issued credential if it exists by ID. The credential information includes the original credential content returned at the time of issuance and metadata such as the linked credential template, schema, and status list information if applicable. <br>

```json
{"openapi":"3.1.0","info":{"title":"SVX Wallet API","version":"4.0.1"},"servers":[{"url":"https://zyfla-wallet-sandbox.meeco.cloud","description":"SVX Wallet deployment (relative)"}],"security":[{},{"bearerAuth":[]},{"mutualTLS":[]}],"components":{"securitySchemes":{"bearerAuth":{"bearerFormat":"JWT","scheme":"bearer","type":"http"},"mutualTLS":{"type":"mutualTLS"}},"schemas":{"IssuerCredentialResponseDto":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"credential":{"type":"string","description":"The issued credential. For `jwt_vc_json` and `dc+sd-jwt` formats this is a compact JWT string. For `mso_mdoc` it is a base64url-encoded CBOR-encoded IssuerSigned structure."},"format":{"type":"string","enum":["jwt_vc_json","dc+sd-jwt","mso_mdoc"]},"credential_configuration_id":{"type":"string"},"holder_binding":{"oneOf":[{"type":"object","description":"JWK holder binding","required":["jwk"],"properties":{"jwk":{"type":"object","description":"JSON Web Key representing the holder's public key","additionalProperties":true}}},{"type":"object","description":"DID holder binding","required":["did"],"properties":{"did":{"type":"string"}}},{"type":"null"}]},"created_at":{"type":"string","format":"date-time"}},"required":["id","credential","format","credential_configuration_id","created_at"]},"InvalidPathParamError":{"properties":{"error":{"description":"Unique error identifier","enum":["invalid_path_param"],"type":"string"},"extra_info":{"description":"Object that may contain more information about the error","type":"object"},"message":{"description":"User friendly error message","type":"string"}},"required":["error","message","extra_info"],"type":"object"},"IssuerCredentialNotFoundError":{"type":"object","properties":{"error":{"type":"string","enum":["issuer_credential_not_found"]},"message":{"type":"string"}},"required":["error","message"]}}},"paths":{"/issuer/credentials/{id}":{"get":{"summary":"Get issued credential","description":"Returns an issued credential if it exists by ID. The credential information includes the original credential content returned at the time of issuance and metadata such as the linked credential template, schema, and status list information if applicable. \n","operationId":"IssuerCredentialsController_findOne","parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/IssuerCredentialResponseDto"}}},"description":"Credential successfully loaded"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/InvalidPathParamError"}}},"description":"Invalid path param"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/IssuerCredentialNotFoundError"}}},"description":"Credential not found"}},"tags":["Issuer Credentials"]}}}}
```

## Delete issued credential

> Deletes an issued credential record by ID. Deleted credentials can no longer be retrieved. Ensure to review the implications before deleting an issued credential, especially if it has been shared with holders or verifiers.<br>

```json
{"openapi":"3.1.0","info":{"title":"SVX Wallet API","version":"4.0.1"},"servers":[{"url":"https://zyfla-wallet-sandbox.meeco.cloud","description":"SVX Wallet deployment (relative)"}],"security":[{},{"bearerAuth":[]},{"mutualTLS":[]}],"components":{"securitySchemes":{"bearerAuth":{"bearerFormat":"JWT","scheme":"bearer","type":"http"},"mutualTLS":{"type":"mutualTLS"}},"schemas":{"InvalidPathParamError":{"properties":{"error":{"description":"Unique error identifier","enum":["invalid_path_param"],"type":"string"},"extra_info":{"description":"Object that may contain more information about the error","type":"object"},"message":{"description":"User friendly error message","type":"string"}},"required":["error","message","extra_info"],"type":"object"},"IssuerCredentialNotFoundError":{"type":"object","properties":{"error":{"type":"string","enum":["issuer_credential_not_found"]},"message":{"type":"string"}},"required":["error","message"]}}},"paths":{"/issuer/credentials/{id}":{"delete":{"summary":"Delete issued credential","description":"Deletes an issued credential record by ID. Deleted credentials can no longer be retrieved. Ensure to review the implications before deleting an issued credential, especially if it has been shared with holders or verifiers.\n","operationId":"IssuerCredentialsController_remove","parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"204":{"description":"Credential deleted"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/InvalidPathParamError"}}},"description":"Invalid path param"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/IssuerCredentialNotFoundError"}}},"description":"Credential not found"}},"tags":["Issuer Credentials"]}}}}
```

## Update credential status list entry

> Update credential status list entry for an issuer credential. This endpoint is used to update the revocation status of a credential by modifying the corresponding entry in the linked status list. The specific changes to the status list entry depend on the desired revocation status (e.g., revoked or active) and the implementation of the status list. Ensure to review the implications of changing a credential's revocation status, especially if it has been shared with holders or verifiers.\
> \
> \## Supported Standards\
> \
> \- \[W3C VC Bitstring Status List v1.0]\(<https://www.w3.org/TR/vc-bitstring-status-list/>)<br>

```json
{"openapi":"3.1.0","info":{"title":"SVX Wallet API","version":"4.0.1"},"servers":[{"url":"https://zyfla-wallet-sandbox.meeco.cloud","description":"SVX Wallet deployment (relative)"}],"security":[{},{"bearerAuth":[]},{"mutualTLS":[]}],"components":{"securitySchemes":{"bearerAuth":{"bearerFormat":"JWT","scheme":"bearer","type":"http"},"mutualTLS":{"type":"mutualTLS"}},"schemas":{"UpdateCredentialStatusRequestDto":{"type":"object","properties":{"credential_status":{"$ref":"#/components/schemas/UpdateCredentialStatusRequestStatusDto"}},"required":["credential_status"]},"UpdateCredentialStatusRequestStatusDto":{"type":"object","properties":{"type":{"$ref":"#/components/schemas/StatusListType"},"status":{"$ref":"#/components/schemas/RevocationStatusListValue"}},"required":["type","status"]},"StatusListType":{"type":"string","enum":["revocation","suspension"]},"RevocationStatusListValue":{"type":"string","enum":["0","1"]},"InvalidPathParamError":{"properties":{"error":{"description":"Unique error identifier","enum":["invalid_path_param"],"type":"string"},"extra_info":{"description":"Object that may contain more information about the error","type":"object"},"message":{"description":"User friendly error message","type":"string"}},"required":["error","message","extra_info"],"type":"object"},"InvalidRequestPayloadError":{"properties":{"error":{"description":"Unique error identifier","enum":["invalid_request_payload"],"type":"string"},"extra_info":{"description":"Object that may contain more information about the error","type":"object"},"message":{"description":"User friendly error message","type":"string"}},"required":["error","message","extra_info"],"type":"object"},"UnsupportedCredentialStatusListTypeError":{"properties":{"error":{"description":"Unique error identifier","enum":["unsupported_credential_status_list_type"],"type":"string"},"extra_info":{"description":"Object that may contain more information about the error","type":"object"},"message":{"description":"User friendly error message","type":"string"}},"required":["error","message","extra_info"],"type":"object"},"CredentialRevocationStatusValueInvalidError":{"properties":{"error":{"description":"Unique error identifier","enum":["credential_revocation_status_value_invalid"],"type":"string"},"extra_info":{"description":"Object that may contain more information about the error","type":"object"},"message":{"description":"User friendly error message","type":"string"}},"required":["error","message","extra_info"],"type":"object"},"CredentialRevocationStatusNotFoundError":{"properties":{"error":{"description":"Unique error identifier","enum":["credential_revocation_status_not_found"],"type":"string"},"extra_info":{"description":"Object that may contain more information about the error","type":"object"},"message":{"description":"User friendly error message","type":"string"}},"required":["error","message","extra_info"],"type":"object"}}},"paths":{"/issuer/credentials/{id}/status":{"patch":{"summary":"Update credential status list entry","description":"Update credential status list entry for an issuer credential. This endpoint is used to update the revocation status of a credential by modifying the corresponding entry in the linked status list. The specific changes to the status list entry depend on the desired revocation status (e.g., revoked or active) and the implementation of the status list. Ensure to review the implications of changing a credential's revocation status, especially if it has been shared with holders or verifiers.\n\n## Supported Standards\n\n- [W3C VC Bitstring Status List v1.0](https://www.w3.org/TR/vc-bitstring-status-list/)\n","operationId":"CredentialStatusController_update","parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string","format":"uuid"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateCredentialStatusRequestDto"}}},"required":true},"responses":{"204":{"description":"Credential status list entry updated"},"400":{"content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/InvalidPathParamError"},{"$ref":"#/components/schemas/InvalidRequestPayloadError"},{"$ref":"#/components/schemas/UnsupportedCredentialStatusListTypeError"},{"$ref":"#/components/schemas/CredentialRevocationStatusValueInvalidError"}]}}},"description":"Invalid path param or payload"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CredentialRevocationStatusNotFoundError"}}},"description":"Credential status not found"}},"tags":["Issuer Credentials"]}}}}
```
