---
id: config-digital-wallet-open-id-upload-certificate-chain
title: "Upload certificate chain"
description: "Uploads a certificate chain file to associate with a specific key, completing the key provisioning process for qualified electronic signatures."
sidebar_label: "Upload certificate chain"
hide_title: true
hide_table_of_contents: true
api: eJzlV1tv2zYU/isHfIoB2XLcpNiEoljitJvbrgmaNBkQGA0tHdtcJJIhqSSeof8+HFKW5UvaPexhwJ4sSzy371y+wyXL0KZGaCeUZAn7qnPFMwscUjROTEXKHUI650LCVOQITgG3VqWC3j8JNwcOVmNKR+EeFxGkqtA5OiFn4OZI70Ab9SisUJJeaqNStBamysBDyXMxFZgB5pg6o6RIwYqZ5K40aHssYkqj4eTdKGMJS5WcitmZmAnH8xue5+jONcpRFhwfrp0eks8sYpobXqBDY1lyu9wOV4qHEkFkKEkODajpymsWMUFnNHdzFjHJC2QJu8fFKGMRM/hQCoMZS5wpMWI2nWPBWbJkbqHpoHVGyBmrqnE4jNadqmxBJ1IlHUpHj0WZO6G5cfFUmaKbced1rLVpQwA4gdZLruP7RunYtRcxUsQdS9hESG4ojM2Yr+b4UnIPhl+uIMh3KNOlBxW4zLaTvsKoqtpQ3O46OI5WDqrJn5g6VlVBxmolbYhq0O/Tz6abLGrjxLXOSatQMv7T0oGXQbrHxTeR7YPmnyff/+6i9MTtGonMQ8GqqB21/ZaqMvhcWxfS4QzNjvnPZTEJNtviIKS3HaDHLBgmI8/H7scx/dE77v+84bibl8VEGyEdHFz+dtI97ERwyi2+PipN3kWZqgyzWv83Ozh+/W8YGRy/3m+m2lMOEZsjz3yDLunfUf9wq0u+n/12/aExygxVhiwKz2ctz3dqMdqqnLX0vvThM6fJxpKjfr/ao34Pbo0IO+UZCKlLB81A8q1Q7VYlL91cGfEX0pzZhOY4dMr/FJqRdGgkz8GieUQD3swWRlXELKalEW7h5/2JFh+RHsdVtGSnyA2ak9LN/RuKms+IGFhNKRA4BQ48q5wdXQ87LGIfcQG/c8lnWBDs44gV6OaKCEkr68EikkhY/DiIA0XFWVDYffIKY6VRiiy+x0W3aDTRXxsvPadUcauhumnNXiHSfdR1hoWqgWARK03OEjZ3TtskjjMsVJdr0RMzw6XrCcUo+k0FF0ZlZUp/XlLzIw2Xjs+I0V8Qt+HztiPjdYYuqVBDfa3y1BQKDy9qEg4pXtPwSd0jvvB3BtTJxcgPceokGu6hP3pA1PfI8xJXk/5uQ88dBDNQlNbBBEEbnIrnetDDXfAR7uBAKj/0EJzhIvcYaJ5iJwLszXpbahOoBd8sVGkIju49Lt7e9WjqtityySb+3/sVg3+4udqNLfXbk1P3KEFza1fuBU21z0QjG05Ag6CfDoRhMMaazqe8+Qkt5FStxgxP/ZjBggvKrS21Vsb9ss5nkxLx6/rVZiG0a2grmkYo7IgZ+tUzbJAIgn6pUUIIddJCa/r98RqNmAo+yRGGBj2R89zCyNqSyxTh4Nz38Kjjd5j9ghcGbWOi6fuLDnnkVKpyS4UjLFBVoSQZC8rMuKyhpWSAsLbECOYqzyJv7JEsLKAeA5C23CutrxjHZcZNZrs+XsGlg2munmxIZ4209/bm1RCuh3Dw4eaqE8Ho3dV7uDzrfri5guthsDa6PIfDn/qHr7rHUJypNC7OPrVs1kudX6hzkaK0fo6vmknzdI4w6PV3Uvf09NTj/nNPmVlcy9r402j47vPluy7JEKcLl2/UgAcrU2nZZI9FjCZZSPugPzjqveodkixN0ILLlj9hl99dv7Z7oUWE/8GLS91VDp9drPN6ifPoLmu6uGWPg7DmToXfsjYoI9x9pKAtYJM2wgvLIpasriO73DGO2Jy4Kblly+WEW/xq8qqi1w8lGs+IEXvkxjdB4Bdh6TljyZTnFr8D9sGXeq/owA9uUHtBWE14SSf8PA77PomsbljVuNkLvXPh2zC40L0iDWvZfbcooqsgRBNTu9bxnZ2pajP6xfklTd1JfVkr/M7jb1Veb7R+9EsF4/XsXvNWCL1+IOf3BrxNYU303vW9Im+oqz7i4m1zPHx5UaAZ+uE0wT+uqupvagGMMQ==
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"}>Upload certificate chain</h1>

<MethodEndpoint method={"post"} path={"/v2/config/digital-wallet/openid/key-management/keys/{keyId}/certificate-chain"}></MethodEndpoint>



Uploads a certificate chain file to associate with a specific key, completing the key provisioning process for qualified electronic signatures.

## 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","in":"path","name":"keyId","required":true,"schema":{"type":"string"}}}></ParamsItem></ul></div></details><MimeTabs className={"openapi-tabs__mime"}><TabItem label={"multipart/form-data"} value={"multipart/form-data-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><ul style={{"marginLeft":"1rem"}}><SchemaItem collapsible={false} name={"certificate_file"} required={true} schemaName={"binary"} qualifierMessage={undefined} schema={{"type":"string","format":"binary","description":"The certificate chain file (CRT format) to upload and associate with the key"}}></SchemaItem></ul></details></TabItem></MimeTabs><div><div><ApiTabs label={undefined} id={undefined}><TabItem label={"200"} value={"200"}><div></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={"key_id"} required={false} schemaName={"string"} qualifierMessage={undefined} schema={{"type":"string","description":"Unique identifier of the key the certificate chain was associated with"}}></SchemaItem><SchemaItem collapsible={false} name={"certificates_count"} required={false} schemaName={"integer"} qualifierMessage={undefined} schema={{"type":"integer","description":"Number of certificates in the uploaded chain"}}></SchemaItem><SchemaItem collapsible={false} name={"x5t"} required={false} schemaName={"string"} qualifierMessage={undefined} schema={{"type":"string","description":"X.509 certificate thumbprint (SHA-1), Base64url-encoded"}}></SchemaItem><SchemaItem collapsible={false} name={"x5t_s256"} required={false} schemaName={"string"} qualifierMessage={undefined} schema={{"type":"string","description":"X.509 certificate thumbprint (SHA-256), Base64url-encoded"}}></SchemaItem></ul></details></TabItem><TabItem label={"Example (from schema)"} value={"Example (from schema)"}><ResponseSamples responseExample={"{\n  \"key_id\": \"string\",\n  \"certificates_count\": 0,\n  \"x5t\": \"string\",\n  \"x5t_s256\": \"string\"\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>
      