---
id: config-deploy-digital-wallet-open-id
title: "Deploy digital wallet"
description: "Deploys the OID4VC digital wallet for the organisation. The service registers the organisation with the OpenID wallet backend and returns the endpoints of the new deployment. Call this operation once, before you create a global configuration, a credential definition or a presentation definition."
sidebar_label: "Deploy digital wallet"
hide_title: true
hide_table_of_contents: true
api: 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
sidebar_class_name: "post api-method"
info_path: docs/openid4vc-api/igrant-io-api-documentation
custom_edit_url: null
---

> **Build this with an AI coding agent.** Install the iGrant.io Agent Skills, then ask your agent to build the integration:
>
> ```bash
> npx skills add L3-iGrant/skills
> ```


import ApiTabs from "@theme/ApiTabs";
import DiscriminatorTabs from "@theme/DiscriminatorTabs";
import MethodEndpoint from "@theme/ApiExplorer/MethodEndpoint";
import SecuritySchemes from "@theme/ApiExplorer/SecuritySchemes";
import MimeTabs from "@theme/MimeTabs";
import ParamsItem from "@theme/ParamsItem";
import ResponseSamples from "@theme/ResponseSamples";
import SchemaItem from "@theme/SchemaItem";
import SchemaTabs from "@theme/SchemaTabs";
import Markdown from "@theme/Markdown";
import OperationTabs from "@theme/OperationTabs";
import TabItem from "@theme/TabItem";

<h1 className={"openapi__heading"}>Deploy digital wallet</h1>

<MethodEndpoint method={"post"} path={"/v2/config/digital-wallet/openid"}></MethodEndpoint>



Deploys the OID4VC digital wallet for the organisation. The service registers the organisation with the OpenID wallet backend and returns the endpoints of the new deployment. Call this operation once, before you create a global configuration, a credential definition or a presentation definition.

The organisation must have no deployment yet. If a deployment exists or a deployment request is open, the service answers with HTTP 400. There is no operation that removes a deployment, so you cannot deploy the wallet a second time.

## Request

<MimeTabs className={"openapi-tabs__mime"}><TabItem label={"application/json"} value={"application/json-schema"}><details style={{}} className={"openapi-markdown__details mime"} data-collapsed={false} open={true}><summary style={{}} className={"openapi-markdown__details-summary-mime"}><h3 className={"openapi-markdown__details-summary-header-body"}>Body</h3></summary><div style={{"textAlign":"left","marginLeft":"1rem"}}><div style={{"marginTop":"1rem","marginBottom":"1rem"}}>

Optional seed for the key material of the wallet. Send an empty body to let the service make the deployment without a seed.

</div></div><ul style={{"marginLeft":"1rem"}}><SchemaItem collapsible={false} name={"cryptographicSeed"} required={false} schemaName={"string"} qualifierMessage={undefined} schema={{"type":"string","description":"Seed that the service uses for the key material of the wallet. This field is optional. The service uses the value only when it holds one character or more, and it sends no seed when you give an empty value or leave the field out. Treat this value as a secret: keep it out of logs and out of version control.","example":"0d1f2a3b4c5d6e7f8091a2b3c4d5e6f7"}}></SchemaItem></ul></details></TabItem></MimeTabs><div><div><ApiTabs label={undefined} id={undefined}><TabItem label={"200"} value={"200"}><div>

The service deployed the OpenID digital wallet and returned the deployment details.

</div><details style={{"textAlign":"left","marginBottom":"1rem"}} className={"openapi-markdown__details"} data-collaposed={true} open={false}><summary style={{}}><strong>Response Headers</strong></summary><ul style={{"marginLeft":"1rem"}}></ul></details><div><MimeTabs className={"openapi-tabs__mime"} schemaType={"response"}><TabItem label={"application/json"} value={"application/json"}><SchemaTabs className={"openapi-tabs__schema"}><TabItem label={"Schema"} value={"Schema"}><details style={{}} className={"openapi-markdown__details response"} data-collapsed={false} open={true}><summary style={{}} className={"openapi-markdown__details-summary-response"}><strong>Schema</strong></summary><div style={{"textAlign":"left","marginLeft":"1rem"}}></div><ul style={{"marginLeft":"1rem"}}><SchemaItem collapsible={false} name={"agentServiceEndpoint"} required={true} schemaName={"string"} qualifierMessage={undefined} schema={{"type":"string","description":"Base URL of the OID4VCI and OpenID4VP service of the organisation.","example":"https://api.igrant.io/v2/organisation/62d9e0b9e5b1a80001d0f8b1/service"}}></SchemaItem><SchemaItem collapsible={false} name={"credentialOfferEndpoint"} required={true} schemaName={"string"} qualifierMessage={undefined} schema={{"type":"string","description":"URL of the OID4VCI Credential Offer endpoint.","example":"https://api.igrant.io/v2/organisation/62d9e0b9e5b1a80001d0f8b1/service/credential-offer"}}></SchemaItem><SchemaItem collapsible={false} name={"version"} required={true} schemaName={"string"} qualifierMessage={undefined} schema={{"type":"string","description":"Software version of the deployed agent.","example":"1.0.0"}}></SchemaItem><SchemaItem collapsible={false} name={"status"} required={true} schemaName={"integer"} qualifierMessage={"**Possible values:** [`2`]"} schema={{"type":"integer","description":"Deployment status of the agent. A successful deploy always sets the status to Deployed, so this operation always gives `2`.","enum":[2],"example":2}}></SchemaItem><SchemaItem collapsible={false} name={"statusStr"} required={true} schemaName={"string"} qualifierMessage={"**Possible values:** [`Deployed`]"} schema={{"type":"string","description":"Deployment status of the agent as text. This operation always gives `Deployed`.","enum":["Deployed"],"example":"Deployed"}}></SchemaItem><SchemaItem collapsible={false} name={"ledgerName"} required={true} schemaName={"string"} qualifierMessage={undefined} schema={{"type":"string","description":"Name of the distributed ledger that the agent uses for DID registration.","example":"European Blockchain Services Infrastructure"}}></SchemaItem><SchemaItem collapsible={false} name={"ledgerURL"} required={true} schemaName={"string"} qualifierMessage={undefined} schema={{"type":"string","description":"URL of the distributed ledger.","example":"https://hub.ebsi.eu/"}}></SchemaItem><SchemaItem collapsible={false} name={"ledgerID"} required={true} schemaName={"integer"} qualifierMessage={undefined} schema={{"type":"integer","description":"Identifier of the ledger network. The service does not set this field and always returns `0`.","example":0}}></SchemaItem><SchemaItem collapsible={false} name={"infrastructureProvider"} required={true} schemaName={"string"} qualifierMessage={undefined} schema={{"type":"string","description":"Infrastructure provider that hosts the agent.","example":"iGrant.io"}}></SchemaItem><SchemaItem collapsible={false} name={"deploymentRegion"} required={true} schemaName={"string"} qualifierMessage={undefined} schema={{"type":"string","description":"Geographic region of the agent deployment.","example":"Europe: Frankfurt"}}></SchemaItem><SchemaItem collapsible={false} name={"isWalletProvider"} required={true} schemaName={"boolean"} qualifierMessage={undefined} schema={{"type":"boolean","description":"When `true`, the organisation is a wallet provider and can issue Wallet Unit Attestations. A new deployment always returns `false`. Use the update operation on this path to enable the capability.","example":false}}></SchemaItem></ul></details></TabItem><TabItem label={"Example (from schema)"} value={"Example (from schema)"}><ResponseSamples responseExample={"{\n  \"agentServiceEndpoint\": \"https://api.igrant.io/v2/organisation/62d9e0b9e5b1a80001d0f8b1/service\",\n  \"credentialOfferEndpoint\": \"https://api.igrant.io/v2/organisation/62d9e0b9e5b1a80001d0f8b1/service/credential-offer\",\n  \"version\": \"1.0.0\",\n  \"status\": 2,\n  \"statusStr\": \"Deployed\",\n  \"ledgerName\": \"European Blockchain Services Infrastructure\",\n  \"ledgerURL\": \"https://hub.ebsi.eu/\",\n  \"ledgerID\": 0,\n  \"infrastructureProvider\": \"iGrant.io\",\n  \"deploymentRegion\": \"Europe: Frankfurt\",\n  \"isWalletProvider\": false\n}"} language={"json"}></ResponseSamples></TabItem></SchemaTabs></TabItem></MimeTabs></div></TabItem><TabItem label={"400"} value={"400"}><div>

The organisation is unknown, the organisation already has a deployment, a deployment request is already open, or the wallet backend refused the registration.

</div><details style={{"textAlign":"left","marginBottom":"1rem"}} className={"openapi-markdown__details"} data-collaposed={true} open={false}><summary style={{}}><strong>Response Headers</strong></summary><ul style={{"marginLeft":"1rem"}}></ul></details><div><MimeTabs className={"openapi-tabs__mime"} schemaType={"response"}><TabItem label={"application/json"} value={"application/json"}><SchemaTabs className={"openapi-tabs__schema"}><TabItem label={"Schema"} value={"Schema"}><details style={{}} className={"openapi-markdown__details response"} data-collapsed={false} open={true}><summary style={{}} className={"openapi-markdown__details-summary-response"}><strong>Schema</strong></summary><div style={{"textAlign":"left","marginLeft":"1rem"}}></div><ul style={{"marginLeft":"1rem"}}><SchemaItem collapsible={false} name={"errorCode"} required={true} schemaName={"integer"} qualifierMessage={undefined} schema={{"type":"integer","example":400}}></SchemaItem><SchemaItem collapsible={false} name={"errorDescription"} required={true} schemaName={"string"} qualifierMessage={undefined} schema={{"type":"string","example":"Bad input parameter"}}></SchemaItem></ul></details></TabItem><TabItem label={"Example (from schema)"} value={"Example (from schema)"}><ResponseSamples responseExample={"{\n  \"errorCode\": 400,\n  \"errorDescription\": \"Bad input parameter\"\n}"} language={"json"}></ResponseSamples></TabItem></SchemaTabs></TabItem></MimeTabs></div></TabItem><TabItem label={"401"} value={"401"}><div>

Unauthorized

</div><details style={{"textAlign":"left","marginBottom":"1rem"}} className={"openapi-markdown__details"} data-collaposed={true} open={false}><summary style={{}}><strong>Response Headers</strong></summary><ul style={{"marginLeft":"1rem"}}></ul></details><div><MimeTabs className={"openapi-tabs__mime"} schemaType={"response"}><TabItem label={"application/json"} value={"application/json"}><SchemaTabs className={"openapi-tabs__schema"}><TabItem label={"Schema"} value={"Schema"}><details style={{}} className={"openapi-markdown__details response"} data-collapsed={false} open={true}><summary style={{}} className={"openapi-markdown__details-summary-response"}><strong>Schema</strong></summary><div style={{"textAlign":"left","marginLeft":"1rem"}}></div><ul style={{"marginLeft":"1rem"}}><SchemaItem collapsible={false} name={"errorCode"} required={true} schemaName={"integer"} qualifierMessage={undefined} schema={{"type":"integer","example":400}}></SchemaItem><SchemaItem collapsible={false} name={"errorDescription"} required={true} schemaName={"string"} qualifierMessage={undefined} schema={{"type":"string","example":"Bad input parameter"}}></SchemaItem></ul></details></TabItem><TabItem label={"Example (from schema)"} value={"Example (from schema)"}><ResponseSamples responseExample={"{\n  \"errorCode\": 400,\n  \"errorDescription\": \"Bad input parameter\"\n}"} language={"json"}></ResponseSamples></TabItem></SchemaTabs></TabItem></MimeTabs></div></TabItem><TabItem label={"500"} value={"500"}><div>

Internal server error

</div><details style={{"textAlign":"left","marginBottom":"1rem"}} className={"openapi-markdown__details"} data-collaposed={true} open={false}><summary style={{}}><strong>Response Headers</strong></summary><ul style={{"marginLeft":"1rem"}}></ul></details><div><MimeTabs className={"openapi-tabs__mime"} schemaType={"response"}><TabItem label={"application/json"} value={"application/json"}><SchemaTabs className={"openapi-tabs__schema"}><TabItem label={"Schema"} value={"Schema"}><details style={{}} className={"openapi-markdown__details response"} data-collapsed={false} open={true}><summary style={{}} className={"openapi-markdown__details-summary-response"}><strong>Schema</strong></summary><div style={{"textAlign":"left","marginLeft":"1rem"}}></div><ul style={{"marginLeft":"1rem"}}><SchemaItem collapsible={false} name={"errorCode"} required={true} schemaName={"integer"} qualifierMessage={undefined} schema={{"type":"integer","example":400}}></SchemaItem><SchemaItem collapsible={false} name={"errorDescription"} required={true} schemaName={"string"} qualifierMessage={undefined} schema={{"type":"string","example":"Bad input parameter"}}></SchemaItem></ul></details></TabItem><TabItem label={"Example (from schema)"} value={"Example (from schema)"}><ResponseSamples responseExample={"{\n  \"errorCode\": 400,\n  \"errorDescription\": \"Bad input parameter\"\n}"} language={"json"}></ResponseSamples></TabItem></SchemaTabs></TabItem></MimeTabs></div></TabItem></ApiTabs></div></div>
      