> 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/verifiable-credential-issuance.md).

# Verifiable Credential Issuance

## Get credential receive states

> Get credential receive states.<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":{"CredentialReceiveStatesModelDto":{"type":"object","properties":{"states":{"type":"array","items":{"$ref":"#/components/schemas/CredentialReceiveStateModelDto"}},"meta":{"$ref":"#/components/schemas/Meta"}},"required":["states","meta"]},"CredentialReceiveStateModelDto":{"properties":{"access_token":{"type":"string"},"authorization_url":{"description":"The URL to open in a browser in order to complete the authorization with the Authorization Server.","type":"string"},"client_id":{"description":"Client identifier in OAuth 2.0","type":"string"},"credential_id":{"description":"Id under which the credential is stored in the wallet","type":"string"},"credential_ids":{"type":"array","items":{"type":"string","description":"Credential Ids that were issued using this receive state"}},"proofs":{"type":"object","properties":{"proof_type":{"type":"string"},"jwt":{"description":"Array of Compact JWT of proof JWT used to issue the credential","type":"array","items":{"type":"string"}}}},"credential_definition":{"oneOf":[{"properties":{"vct":{"type":"string"}},"type":"object"},{"properties":{"type":{"items":{"type":"string"},"type":"array"}},"type":"object"}]},"credential_endpoint":{"description":"Credential Issuer credential endpoint called","type":"string"},"credential_offer":{"$ref":"#/components/schemas/CredentialOfferDto"},"credential_offer_uri":{"type":"string"},"credential_offer_endpoint":{"type":"string"},"did":{"type":"string"},"format":{"enum":["dc+sd-jwt","vc+sd-jwt","jwt_vc_json","mso_mdoc"],"type":"string"},"kid":{"type":"string"},"refresh_token":{"type":"string"},"response_type":{"description":"This value is always `code`","enum":["code"],"type":"string"},"state":{"type":"string"},"token_endpoint":{"description":"Credential Issuer or Authorization Server token endpoint called","type":"string"},"transaction_id":{"description":"A string identifying a Deferred Issuance transaction. This claim is contained in the response if the Credential Issuer was unable to immediately issue the Credential","type":"string"},"meta":{"$ref":"#/components/schemas/OpenIdVCIStateMeta"}},"type":"object"},"CredentialOfferDto":{"properties":{"credential_issuer":{"type":"string"},"credential_configuration_ids":{"description":"Credential configuration identifiers included in the offer.","items":{"type":"string"},"type":"array"},"grants":{"$ref":"#/components/schemas/GrantDto"}},"type":"object"},"GrantDto":{"properties":{"authorization_code":{"properties":{"issuer_state":{"type":"string"}},"type":"object"},"urn:ietf:params:oauth:grant-type:pre-authorized_code":{"properties":{"pre-authorized_code":{"type":"string"},"tx_code":{"type":"object","properties":{"input_mode":{"type":"string","enum":["numeric","text"]},"length":{"type":"number"},"description":{"type":"string"}}}},"type":"object"}},"type":"object"},"OpenIdVCIStateMeta":{"type":"object","properties":{"created_at":{"format":"date-time","type":"string"},"updated_at":{"format":"date-time","type":"string"}}},"Meta":{"type":"object","properties":{"order_by":{"type":"string"},"order":{"type":"string","enum":["ASC","DESC"]},"order_from_params":{"type":"boolean"},"per_page":{"type":"number"},"per_page_from_params":{"type":"boolean"},"records_count":{"type":"number"},"page":{"type":"number"},"page_count":{"type":"number"}},"required":["order_by","order","order_from_params","per_page","per_page_from_params","records_count","page","page_count"]},"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"},"InvalidOrderFilterValueError":{"properties":{"error":{"description":"Unique error identifier","enum":["invalid_order_filter_value"],"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"},"InvalidPerPageFilterValueError":{"properties":{"error":{"description":"Unique error identifier","enum":["invalid_per_page_filter_value"],"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"},"WalletNotFoundError":{"properties":{"error":{"description":"Unique error identifier","enum":["wallet_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"},"LoadCredentialsError":{"properties":{"error":{"description":"Unique error identifier","enum":["load_credentials_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"},"InternalServerError":{"properties":{"error":{"description":"Unique error identifier","enum":["internal_server_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":{"/wallets/{walletId}/receive":{"get":{"summary":"Get credential receive states","description":"Get credential receive states.\n","operationId":"ReceiveController_findAll","parameters":[{"in":"path","name":"walletId","required":true,"schema":{"type":"string"}},{"name":"order","required":false,"in":"query","description":"Issuance state response order. Default ordering: `DESC` (Supported: `ASC`, `DESC`)","schema":{"enum":["ASC","DESC"],"type":"string"}},{"name":"order_by","required":false,"in":"query","description":"Order Issuance state by an attribute, defaults to: `created_at` (Supported: `created_at`)","schema":{"enum":["created_at"],"type":"string"}},{"name":"per_page","required":false,"in":"query","description":"Number of records per page","schema":{"type":"integer","minimum":1,"maximum":50}},{"name":"page","required":false,"in":"query","description":"Page number (starting from 1)","schema":{"type":"integer","minimum":1}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CredentialReceiveStatesModelDto"}}},"description":"Credential receive states successfully loaded"},"400":{"content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/InvalidPathParamError"},{"$ref":"#/components/schemas/InvalidOrderFilterValueError"},{"$ref":"#/components/schemas/InvalidPerPageFilterValueError"}]}}},"description":""},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WalletNotFoundError"}}},"description":""},"500":{"content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/LoadCredentialsError"},{"$ref":"#/components/schemas/InternalServerError"}]}}},"description":""}},"tags":["Verifiable Credential Issuance"]}}}}
```

## Register credential offer

> Credential offer is a JSON encoded object that the issuer uses to pass information to the wallet and initiate the issuance process.\
> This endpoint is used to validate, parse and extract the necessary information, leading to the next step in the process, getting an access token.\
> \
> For more information on the structure of the credential offer object, see section 4.1 in OpenID4VCI 1.0.\
> \
> The three supported methods for registering a credential offer are:\
> \- \`credential\_offer\`: Pass the JSON object by value\
> \- \`credential\_offer\_uri\`: Pass the JSON object by reference. The service performs a GET request to retrieve the object.\
> \- \`credential\_offer\_endpoint\` - Credential Offer sent by the issuer to the wallet credential offer endpoint. It contains a single URI query parameter, either credential\_offer or credential\_offer\_uri\
> \
> Note that the options above are mutually exclusive.\
> \
> After successfully registering the credential offer, a state is returned. This state is used as an identifier to link subsequent calls to receive endpoints.\
> \
> \### Next Step\
> \
> To continue the issuance process, call:\
> \
> \`\`\`POST /wallets/{walletId}/receive/get\_access\_token\`\`\`<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":{"CredentialReceiveRequestModelDto":{"properties":{"credential_offer":{"$ref":"#/components/schemas/CredentialOfferDto"},"credential_offer_uri":{"type":"string"},"credential_offer_endpoint":{"type":"string"},"protocol_version":{"description":"version of credential issuance protocol. Defaults to `openid4vci-v1`","enum":["openid4vci-v1"],"type":"string"}},"type":"object"},"CredentialOfferDto":{"properties":{"credential_issuer":{"type":"string"},"credential_configuration_ids":{"description":"Credential configuration identifiers included in the offer.","items":{"type":"string"},"type":"array"},"grants":{"$ref":"#/components/schemas/GrantDto"}},"type":"object"},"GrantDto":{"properties":{"authorization_code":{"properties":{"issuer_state":{"type":"string"}},"type":"object"},"urn:ietf:params:oauth:grant-type:pre-authorized_code":{"properties":{"pre-authorized_code":{"type":"string"},"tx_code":{"type":"object","properties":{"input_mode":{"type":"string","enum":["numeric","text"]},"length":{"type":"number"},"description":{"type":"string"}}}},"type":"object"}},"type":"object"},"CredentialReceiveResponseModelDto":{"properties":{"credential_offer":{"$ref":"#/components/schemas/CredentialOfferDto"},"credential_offer_uri":{"type":"string"},"credential_offer_endpoint":{"type":"string"},"state":{"type":"string"},"meta":{"$ref":"#/components/schemas/OpenIdVCIStateMeta"}},"type":"object"},"OpenIdVCIStateMeta":{"type":"object","properties":{"created_at":{"format":"date-time","type":"string"},"updated_at":{"format":"date-time","type":"string"}}},"InvalidCredentialOfferUrlError":{"properties":{"error":{"description":"Unique error identifier","enum":["invalid_credential_offer_url"],"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":{"/wallets/{walletId}/receive":{"post":{"summary":"Register credential offer","description":"Credential offer is a JSON encoded object that the issuer uses to pass information to the wallet and initiate the issuance process.\nThis endpoint is used to validate, parse and extract the necessary information, leading to the next step in the process, getting an access token.\n\nFor more information on the structure of the credential offer object, see section 4.1 in OpenID4VCI 1.0.\n\nThe three supported methods for registering a credential offer are:\n- `credential_offer`: Pass the JSON object by value\n- `credential_offer_uri`: Pass the JSON object by reference. The service performs a GET request to retrieve the object.\n- `credential_offer_endpoint` - Credential Offer sent by the issuer to the wallet credential offer endpoint. It contains a single URI query parameter, either credential_offer or credential_offer_uri\n\nNote that the options above are mutually exclusive.\n\nAfter successfully registering the credential offer, a state is returned. This state is used as an identifier to link subsequent calls to receive endpoints.\n\n### Next Step\n\nTo continue the issuance process, call:\n\n```POST /wallets/{walletId}/receive/get_access_token```\n","operationId":"ReceiveController_create","parameters":[{"in":"path","name":"walletId","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CredentialReceiveRequestModelDto"}}},"required":true},"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CredentialReceiveResponseModelDto"}}},"description":"Successful registration of the credential offer."},"400":{"content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/InvalidCredentialOfferUrlError"}]}}},"description":"Bad Request - The request was invalid or cannot be otherwise served."}},"tags":["Verifiable Credential Issuance"]}}}}
````

## Get access token

> The get access token endpoint ensures the wallet is able to retrieve a valid access token to go to the next step of actually getting the credential(s).\
> \
> \## Wallet initiated issuance\
> \
> For wallet initiated issuance, this endpoint is the entry point. Only Authorization Code Flow is supported.\
> \
> The following parameters are required:\
> \- \`credential\_issuer\`\
> \- \`scope\` (must be able to be looked up from the credential issuer metadata \`credential\_configurations\_supported\` property)\
> \- \`redirect\_uri\`\
> \- \`client\_id\`\
> \
> \## Issuer initiated issuance via credential offer\
> \
> For issuer initiated issuance, the issuer communicates a credential offer that is registered before acquiring an access token.\
> \
> Two flows that are supported are:\
> \- Pre-Authorized Code Flow\
> \- Authorization Code Flow\
> \
> \### Authorization Code Flow\
> \
> Uses the \`authorization\_code\` as defined in RFC6749 to issue access tokens.\
> \
> This is usually a two-step process, that involves authentication on the front channel (through a browser window) to be performed by the client.\
> \
> In step 1, a call to this endpoint returns the \`authorization\_url\`. This URL is what needs to be opened in a browser window and will authenticate the end-user to the service.\
> This includes a redirect\_uri responsible for receiving and storing the \`authorization\_code\`.\
> \
> In step 2, the service, exchanges the code for an access token by calling the Token Endpoint.\
> \
> \### Pre-Authorized Code Flow\
> \
> This flow is used when the issuer has already authenticated and authorized the end-user.\
> The issuer provides a Pre-Authorized Code in the credential offer which is used to exchange it for an access token in the Token Endpoint.\
> The Authorization Endpoint is not used in this flow.\
> \
> For more information, see section 3.5 in OpenID4VCI 1.0.\
> \
> \### Next Step\
> \
> To continue the issuance process, call:\
> \
> \`\`\`POST /wallets/{walletId}/receive/get\_credential\`\`\`<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":{"CredentialReceiveGetAccessTokenRequestModelDto":{"properties":{"authorization_code":{"description":"code claimed via authorization code flow. It can to be exchanged for the access token.","type":"string"},"authorization_details":{"description":"Contains details about the credentials the Wallet wants to obtain.","items":{"properties":{"type":{"enum":["openid_credential"],"type":"string"},"credential_configuration_id":{"type":"string"}},"required":["type","credential_configuration_id"],"type":"object"},"type":"array"},"client_id":{"description":"Client identifier in OAuth 2.0","type":"string"},"client_secret":{"type":"string"},"code_challenge":{"description":"Part of PKCE, used when calling the authorization endpoint.","type":"string"},"code_challenge_method":{"description":"Part of PKCE, used when calling the authorization endpoint.","type":"string"},"code_verifier":{"description":"Part of PKCE, used when calling the token endpoint, together with the authorization code","type":"string"},"credential_issuer":{"description":"The URL of the Credential Issuer from which the Wallet is requested to obtain one or more Credentials. The authorization server is determined based on the Credential Issuer Metadata.","type":"string"},"grant_type":{"description":"","enum":["authorization_code","urn:ietf:params:oauth:grant-type:pre-authorized_code"],"type":"string"},"issuer_state":{"description":"String value identifying a certain processing context at the Credential Issuer. This value is typically provided in the credential offer. When it is, the Wallet MUST send the value back to the Credential Issuer.","type":"string"},"protocol_version":{"description":"version of credential issuance protocol. Defaults to `openid4vci-v1`","enum":["openid4vci-v1"],"type":"string"},"pre-authorized_code":{"description":"The code representing the authorization to obtain Credentials of a certain type. This parameter MUST be present if the grant_type is urn:ietf:params:oauth:grant-type:pre-authorized_code. Typically provided by the Credential Issuer in the credential offer.","type":"string"},"redirect_uri":{"description":"Only relevant when the grant_type is authorization_code.","type":"string"},"scope":{"description":"Request credentials using OAuth 2.0 scope parameter","type":"string"},"state":{"type":"string"},"tx_code":{"description":"String value containing a Transaction Code. This value MUST be present if a tx_code object was present in the Credential Offer (including if the object was empty).  This parameter MUST only be used if the grant_type is urn:ietf:params:oauth:grant-type:pre-authorized_code.","type":"string"}},"type":"object"},"CredentialReceiveGetAccessTokenResponseModelDto":{"properties":{"access_token":{"type":"string"},"authorization_url":{"description":"The URL to open in a browser in order to complete the authorization with the Authorization Server.","type":"string"},"credential_definition":{"oneOf":[{"properties":{"vct":{"type":"string"}},"type":"object"},{"properties":{"type":{"items":{"type":"string"},"type":"array"}},"type":"object"}]},"client_id":{"description":"Client identifier in OAuth 2.0","type":"string"},"refresh_token":{"type":"string"},"state":{"type":"string"}},"type":"object"},"WalletNotFoundError":{"properties":{"error":{"description":"Unique error identifier","enum":["wallet_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":{"/wallets/{walletId}/receive/get_access_token":{"post":{"summary":"Get access token","description":"The get access token endpoint ensures the wallet is able to retrieve a valid access token to go to the next step of actually getting the credential(s).\n\n## Wallet initiated issuance\n\nFor wallet initiated issuance, this endpoint is the entry point. Only Authorization Code Flow is supported.\n\nThe following parameters are required:\n- `credential_issuer`\n- `scope` (must be able to be looked up from the credential issuer metadata `credential_configurations_supported` property)\n- `redirect_uri`\n- `client_id`\n\n## Issuer initiated issuance via credential offer\n\nFor issuer initiated issuance, the issuer communicates a credential offer that is registered before acquiring an access token.\n\nTwo flows that are supported are:\n- Pre-Authorized Code Flow\n- Authorization Code Flow\n\n### Authorization Code Flow\n\nUses the `authorization_code` as defined in RFC6749 to issue access tokens.\n\nThis is usually a two-step process, that involves authentication on the front channel (through a browser window) to be performed by the client.\n\nIn step 1, a call to this endpoint returns the `authorization_url`. This URL is what needs to be opened in a browser window and will authenticate the end-user to the service.\nThis includes a redirect_uri responsible for receiving and storing the `authorization_code`.\n\nIn step 2, the service, exchanges the code for an access token by calling the Token Endpoint.\n\n### Pre-Authorized Code Flow\n\nThis flow is used when the issuer has already authenticated and authorized the end-user.\nThe issuer provides a Pre-Authorized Code in the credential offer which is used to exchange it for an access token in the Token Endpoint.\nThe Authorization Endpoint is not used in this flow.\n\nFor more information, see section 3.5 in OpenID4VCI 1.0.\n\n### Next Step\n\nTo continue the issuance process, call:\n\n```POST /wallets/{walletId}/receive/get_credential```\n","operationId":"ReceiveController_getAccessToken","parameters":[{"in":"path","name":"walletId","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CredentialReceiveGetAccessTokenRequestModelDto"}}},"required":true},"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CredentialReceiveGetAccessTokenResponseModelDto"}}},"description":""},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WalletNotFoundError"}}},"description":""}},"tags":["Verifiable Credential Issuance"]}}}}
````

## Get verifiable credential

> Get credential from the issuer and perform key binding. A valid access token is required in order to call this endpoint.\
> \
> See section 7 in OpenID4VCI 1.0 for more information.\
> \
> \### Key Binding\
> \
> Key binding is performed by providing either\
> \
> \- \`kid\`: Public key is presented. Should be used when credential format is \`dc+sd-jwt\`.\
> \- \`did\`: DID is presented referencing one of the keys contained in the \`verificationMethod\` section of the DID document. Should be used when credential format is \`jwt\_vc\_json\`.\
> \
> Only one of the \`kid\` or \`did\` parameters must be present during the request.\
> \
> Both methods involve the wallet presenting key proof to the issuer to ensure control over cryptographic key material.\
> \
> See section 7.2.1 in OpenID4VCI 1.0 for more information.\
> \
> \### Not Supported Options\
> \
> Note that the following are not supported by the endpoint\
> \
> \- \`transaction\_id\`: Part of the deferred issuance flow, allows receiving a credential by referencing a \`transaction\_id\`\
> \- Receiving encrypted credentials\
> \- legacy format header typ \`vc+sd-jwt\`<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":{"CredentialReceiveGetCredentialRequestModelDto":{"properties":{"access_token":{"type":"string"},"credential_definition":{"oneOf":[{"properties":{"vct":{"type":"string"}},"type":"object"},{"properties":{"type":{"items":{"type":"string"},"type":"array"}},"type":"object"}]},"did":{"type":"string"},"kid":{"type":"string"},"state":{"type":"string"},"transaction_id":{"description":"A string identifying a Deferred Issuance transaction. This claim is contained in the response if the Credential Issuer was unable to immediately issue the Credential","type":"string"}},"type":"object"},"CredentialReceiveGetCredentialResponseModelDto":{"properties":{"id":{"description":"Internal reference to the credential record that later has to be used with other credential related endpoints","type":"string"},"credential":{"description":"Contains issued Credential. MUST be present when transaction_id is not returned. MAY be a string or an object, depending on the Credential format. See Appendix E for the Credential format specific encoding requirements.","type":"string"},"credential_id":{"description":"Id under which the credential is stored in the wallet","type":"string"},"state":{"type":"string"},"transaction_id":{"description":"A string identifying a Deferred Issuance transaction. This claim is contained in the response if the Credential Issuer was unable to immediately issue the Credential","type":"string"}},"required":["state"],"type":"object"},"WalletNotFoundError":{"properties":{"error":{"description":"Unique error identifier","enum":["wallet_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":{"/wallets/{walletId}/receive/get_credential":{"post":{"summary":"Get verifiable credential","description":"Get credential from the issuer and perform key binding. A valid access token is required in order to call this endpoint.\n\nSee section 7 in OpenID4VCI 1.0 for more information.\n\n### Key Binding\n\nKey binding is performed by providing either\n\n- `kid`: Public key is presented. Should be used when credential format is `dc+sd-jwt`.\n- `did`: DID is presented referencing one of the keys contained in the `verificationMethod` section of the DID document. Should be used when credential format is `jwt_vc_json`.\n\nOnly one of the `kid` or `did` parameters must be present during the request.\n\nBoth methods involve the wallet presenting key proof to the issuer to ensure control over cryptographic key material.\n\nSee section 7.2.1 in OpenID4VCI 1.0 for more information.\n\n### Not Supported Options\n\nNote that the following are not supported by the endpoint\n\n- `transaction_id`: Part of the deferred issuance flow, allows receiving a credential by referencing a `transaction_id`\n- Receiving encrypted credentials\n- legacy format header typ `vc+sd-jwt`\n","operationId":"ReceiveController_getCredential","parameters":[{"in":"path","name":"walletId","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CredentialReceiveGetCredentialRequestModelDto"}}},"required":true},"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CredentialReceiveGetCredentialResponseModelDto"}}},"description":"New credential successfully added to the Wallet"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WalletNotFoundError"}}},"description":""}},"tags":["Verifiable Credential Issuance"]}}}}
```

## Get credential receive state

> Get credential receive state.<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":{"CredentialReceiveStateModelDto":{"properties":{"access_token":{"type":"string"},"authorization_url":{"description":"The URL to open in a browser in order to complete the authorization with the Authorization Server.","type":"string"},"client_id":{"description":"Client identifier in OAuth 2.0","type":"string"},"credential_id":{"description":"Id under which the credential is stored in the wallet","type":"string"},"credential_ids":{"type":"array","items":{"type":"string","description":"Credential Ids that were issued using this receive state"}},"proofs":{"type":"object","properties":{"proof_type":{"type":"string"},"jwt":{"description":"Array of Compact JWT of proof JWT used to issue the credential","type":"array","items":{"type":"string"}}}},"credential_definition":{"oneOf":[{"properties":{"vct":{"type":"string"}},"type":"object"},{"properties":{"type":{"items":{"type":"string"},"type":"array"}},"type":"object"}]},"credential_endpoint":{"description":"Credential Issuer credential endpoint called","type":"string"},"credential_offer":{"$ref":"#/components/schemas/CredentialOfferDto"},"credential_offer_uri":{"type":"string"},"credential_offer_endpoint":{"type":"string"},"did":{"type":"string"},"format":{"enum":["dc+sd-jwt","vc+sd-jwt","jwt_vc_json","mso_mdoc"],"type":"string"},"kid":{"type":"string"},"refresh_token":{"type":"string"},"response_type":{"description":"This value is always `code`","enum":["code"],"type":"string"},"state":{"type":"string"},"token_endpoint":{"description":"Credential Issuer or Authorization Server token endpoint called","type":"string"},"transaction_id":{"description":"A string identifying a Deferred Issuance transaction. This claim is contained in the response if the Credential Issuer was unable to immediately issue the Credential","type":"string"},"meta":{"$ref":"#/components/schemas/OpenIdVCIStateMeta"}},"type":"object"},"CredentialOfferDto":{"properties":{"credential_issuer":{"type":"string"},"credential_configuration_ids":{"description":"Credential configuration identifiers included in the offer.","items":{"type":"string"},"type":"array"},"grants":{"$ref":"#/components/schemas/GrantDto"}},"type":"object"},"GrantDto":{"properties":{"authorization_code":{"properties":{"issuer_state":{"type":"string"}},"type":"object"},"urn:ietf:params:oauth:grant-type:pre-authorized_code":{"properties":{"pre-authorized_code":{"type":"string"},"tx_code":{"type":"object","properties":{"input_mode":{"type":"string","enum":["numeric","text"]},"length":{"type":"number"},"description":{"type":"string"}}}},"type":"object"}},"type":"object"},"OpenIdVCIStateMeta":{"type":"object","properties":{"created_at":{"format":"date-time","type":"string"},"updated_at":{"format":"date-time","type":"string"}}},"WalletNotFoundError":{"properties":{"error":{"description":"Unique error identifier","enum":["wallet_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"},"InternalServerError":{"properties":{"error":{"description":"Unique error identifier","enum":["internal_server_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":{"/wallets/{walletId}/receive/{state}":{"get":{"summary":"Get credential receive state","description":"Get credential receive state.\n","operationId":"ReceiveController_getInfo","parameters":[{"in":"path","name":"walletId","required":true,"schema":{"type":"string"}},{"in":"path","name":"state","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CredentialReceiveStateModelDto"}}},"description":"Credential receive state successfully loaded"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WalletNotFoundError"}}},"description":""},"500":{"content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/InternalServerError"}]}}},"description":""}},"tags":["Verifiable Credential Issuance"]}}}}
```

## Delete receive credential state

> Delete state of a receive credential flow.<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":{"DeleteReceiveStateError":{"properties":{"error":{"description":"Unique error identifier","enum":["delete_presentation_state_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":{"/wallets/{walletId}/receive/{state}":{"delete":{"summary":"Delete receive credential state","description":"Delete state of a receive credential flow.\n","operationId":"ReceiveController_deleteOne","parameters":[{"in":"path","name":"walletId","required":true,"schema":{"type":"string"}},{"in":"path","name":"state","required":true,"schema":{"type":"string"}}],"responses":{"500":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeleteReceiveStateError"}}}}},"tags":["Verifiable Credential Issuance"]}}}}
```

## Handle holder receive callback

> \`authorization\_code\` redirect uri that was started via \`/receive\` endpoint.\
> \`state\` and \`code\` come as a query parameters.\
> \`code\` is exchanged for the \`access\_token\` so client can call \`POST /wallets/{walletId}/receive/get\_credential\` endpoint right away.<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":[],"paths":{"/wallets/receive/callback":{"get":{"summary":"Handle holder receive callback","description":"`authorization_code` redirect uri that was started via `/receive` endpoint.\n`state` and `code` come as a query parameters.\n`code` is exchanged for the `access_token` so client can call `POST /wallets/{walletId}/receive/get_credential` endpoint right away.\n","parameters":[{"description":"Error code","in":"query","name":"error","required":false,"schema":{"type":"string"}},{"description":"Error description","in":"query","name":"error_description","required":false,"schema":{"type":"string"}},{"description":"Error URI","in":"query","name":"error_uri","required":false,"schema":{"type":"string"}},{"description":"Authorization code","in":"query","name":"code","required":false,"schema":{"type":"string"}},{"description":"Authorization state","in":"query","name":"state","required":false,"schema":{"type":"string"}},{"description":"Access token issuer","in":"query","name":"iss","required":false,"schema":{"type":"string"}}],"operationId":"ReceiveController_callback","responses":{"302":{"description":"Issuer response captured and processed - redirect back to the client Wallet"}},"tags":["Verifiable Credential Issuance"]}}}}
```
