---
id: config-digital-wallet-open-id-test-key-store
title: "Test key store"
description: "Does a connection test of a key store, then saves the result in `lastCheckedAt` and `lastCheckResult`, and sets `status` to `active` or `error`. The request has no body."
sidebar_label: "Test key store"
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"}>Test key store</h1>

<MethodEndpoint method={"post"} path={"/v2/config/digital-wallet/openid/key-management/key-stores/{keyStoreId}/test"}></MethodEndpoint>



Does a connection test of a key store, then saves the result in `lastCheckedAt` and `lastCheckResult`, and sets `status` to `active` or `error`. The request has no body.

| Type | Test |
|---|---|
| `local` | The health check of the key store of the installation. |
| `vault` | Log in with the authentication method, read the health of the vault and list the keys of the Transit mount. When the key store has a key of the organisation, also sign a test message and verify the signature with the stored public key. |
| `gcp-kms` | List the keys of the key ring. When the key store has a key of the organisation, also sign and verify as for `vault`. |
| `aws-kms` | List the keys of the region. When the key store has a key of the organisation, also sign and verify. |
| `azure-key-vault` | Get a token of the application and list the keys of the vault. When the key store has a key of the organisation, also sign and verify. |
| `dpod` | Check that the partition is active on the HSM signer, and sign and verify with a session key that does not stay in the partition. When the key store has a key of the organisation, also sign and verify. When the partition is not active, `message` tells its state, for example a wrong PIN. |
| `csc` | Get an OAuth 2.0 token and list the credentials. The test does not sign: a signature needs the PIN and an authorisation. |

The answer is `200 OK` also when the test fails: then `ok` is `false` and `message` tells why, as a safe text.

For a key store of a provider with `qualified` `true` (category `qtsp`), the operation also checks each key of the organisation in the key store against the EU trusted lists again, also when the connection test fails. The result is in `trust` of the key and in `qualifiedStatus` of the key store.


## Request

<details style={{"marginBottom":"1rem"}} className={"openapi-markdown__details"} data-collapsed={false} open={true}><summary style={{}}><h3 className={"openapi-markdown__details-summary-header-params"}>Path Parameters</h3></summary><div><ul><ParamsItem className={"paramsItem"} param={{"description":"Unique identifier of the key store. `local-openbao`, `local-database` or `local-hsm` for a key store of the installation, else the identifier that the create key store operation returned.","in":"path","name":"keyStoreId","required":true,"schema":{"type":"string","maxLength":64},"example":"local-openbao"}}></ParamsItem></ul></div></details><div><div><ApiTabs label={undefined} id={undefined}><TabItem label={"200"} value={"200"}><div>

The service did the connection test and returned the result.

</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={"ok"} required={true} schemaName={"boolean"} qualifierMessage={undefined} schema={{"type":"boolean","description":"Shows `true` when the connection test passed.","example":true}}></SchemaItem><SchemaItem collapsible={false} name={"message"} required={true} schemaName={"string"} qualifierMessage={undefined} schema={{"type":"string","nullable":true,"description":"Why the connection test failed, as a safe text. It never has a secret or the detail of the provider. `null` when the test passed.","example":null}}></SchemaItem><SchemaItem collapsible={false} name={"checkedAt"} required={true} schemaName={"string"} qualifierMessage={undefined} schema={{"type":"string","nullable":true,"description":"Time of the connection test, in UTC.","example":"2026-10-20T10:05:00Z"}}></SchemaItem></ul></details></TabItem><TabItem label={"Example (from schema)"} value={"Example (from schema)"}><ResponseSamples responseExample={"{\n  \"ok\": true,\n  \"message\": null,\n  \"checkedAt\": \"2026-10-20T10:05:00Z\"\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={"404"} value={"404"}><div>

The organisation has no key store with this ID.

</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>
      