---
id: config-create-digital-wallet-open-id-oidc-provider
title: "Create external OpenID provider"
description: "Adds an external OpenID provider to the organisation. In an authorisation code issuance of a credential definition that names the provider (`externalOpenidProviderId`, OpenID4VCI 1.0 definitions only), the holder logs in at this provider, and the API exchanges the code with the client ID and the client secret. With `claimsGatheringCallbackUri`, a deferred issuance gets its claims from that URL."
sidebar_label: "Create external OpenID provider"
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"}>Create external OpenID provider</h1>

<MethodEndpoint method={"post"} path={"/v4/config/ows/issuer/openid-providers"}></MethodEndpoint>



Adds an external OpenID provider to the organisation. In an authorisation code issuance of a credential definition that names the provider (`externalOpenidProviderId`, OpenID4VCI 1.0 definitions only), the holder logs in at this provider, and the API exchanges the code with the client ID and the client secret. With `claimsGatheringCallbackUri`, a deferred issuance gets its claims from that URL.

The client secret is write-only: the response has `clientSecretConfigured`, never the secret.


## 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><strong className={"openapi-schema__required"}>required</strong></summary><div style={{"textAlign":"left","marginLeft":"1rem"}}></div><ul style={{"marginLeft":"1rem"}}><SchemaItem collapsible={false} name={"name"} required={false} schemaName={"string"} qualifierMessage={"**Possible values:** `<= 255 characters`"} schema={{"type":"string","maxLength":255,"description":"The name of the provider. Required.","example":"Example Bank login"}}></SchemaItem><SchemaItem collapsible={false} name={"issuer"} required={false} schemaName={"string"} qualifierMessage={"**Possible values:** `<= 2048 characters`"} schema={{"type":"string","maxLength":2048,"description":"The issuer identifier of the provider: an http(s) URL. A trailing `/` is removed. Required.","example":"https://login.example-bank.com"}}></SchemaItem><SchemaItem collapsible={false} name={"clientId"} required={false} schemaName={"string"} qualifierMessage={"**Possible values:** `<= 255 characters`"} schema={{"type":"string","maxLength":255,"description":"The client ID of the issuer at the provider. Required.","example":"igrant-issuer"}}></SchemaItem><SchemaItem collapsible={false} name={"clientSecret"} required={false} schemaName={"string"} qualifierMessage={"**Possible values:** `<= 4096 characters`"} schema={{"type":"string","maxLength":4096,"description":"The client secret of the issuer at the provider, for its token endpoint. Required to create a provider. In an update, leave it out (or send an empty text) to keep the stored secret.","example":"<client-secret>"}}></SchemaItem><SchemaItem collapsible={false} name={"scopes"} required={false} schemaName={"string"} qualifierMessage={"**Possible values:** `<= 255 characters`"} schema={{"type":"string","maxLength":255,"default":"openid profile email","description":"The scopes to ask for at the provider, separated by spaces. The API adds `openid` when it is missing. Empty or left out: `openid profile email`.","example":"openid profile email"}}></SchemaItem><SchemaItem collapsible={false} name={"claimsGatheringCallbackUri"} required={false} schemaName={"string"} qualifierMessage={"**Possible values:** `<= 2048 characters`"} schema={{"type":"string","maxLength":2048,"description":"An http(s) URL where the API gets the claims of a deferred issuance. The API calls it with the access token of the holder from the provider as bearer token, and the URL answers `{\"claims\": {...}}`, `{\"interval\": <seconds>}` (not ready yet) or `{\"issuanceDenied\": true, \"issuanceDeniedReason\": \"...\"}`. In an update, leave it out (or send an empty text) to remove the stored URL.","example":"https://issuer.example-bank.com/claims"}}></SchemaItem></ul></details></TabItem></MimeTabs><div><div><ApiTabs label={undefined} id={undefined}><TabItem label={"201"} value={"201"}><div>

The provider is stored.

</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={true} className={"schemaItem"}><details style={{}} className={"openapi-markdown__details"}><summary style={{}}><span className={"openapi-schema__container"}><strong className={"openapi-schema__property"}>oidcProvider</strong><span className={"openapi-schema__name"}> object</span><span className={"openapi-schema__divider"}></span><span className={"openapi-schema__required"}>required</span></span></summary><div style={{"marginLeft":"1rem"}}><div style={{"marginTop":".5rem","marginBottom":".5rem"}}>

An external OpenID provider of the organisation: the OpenID Connect provider where the holder logs in during an authorisation code issuance of a credential definition that names it (`externalOpenidProviderId`). The client secret is write-only: the response only says whether one is stored (`clientSecretConfigured`).

</div><SchemaItem collapsible={false} name={"id"} required={true} schemaName={"uuid"} qualifierMessage={undefined} schema={{"type":"string","format":"uuid","description":"The ID of the provider. Use it as `providerId` in the path, and as `externalOpenidProviderId` of a credential definition.","example":"3f6c2a9e-7b1d-4c58-9e2f-1a4b6d8c0e57"}}></SchemaItem><SchemaItem collapsible={false} name={"name"} required={true} schemaName={"string"} qualifierMessage={undefined} schema={{"type":"string","description":"The name of the provider.","example":"Example Bank login"}}></SchemaItem><SchemaItem collapsible={false} name={"issuer"} required={true} schemaName={"string"} qualifierMessage={undefined} schema={{"type":"string","description":"The issuer identifier of the provider, an http(s) URL without a trailing `/`. The API reads the discovery document from `<issuer>/.well-known/openid-configuration` when a holder logs in.","example":"https://login.example-bank.com"}}></SchemaItem><SchemaItem collapsible={false} name={"clientId"} required={true} schemaName={"string"} qualifierMessage={undefined} schema={{"type":"string","description":"The client ID of the issuer at the provider.","example":"igrant-issuer"}}></SchemaItem><SchemaItem collapsible={false} name={"clientSecretConfigured"} required={true} schemaName={"boolean"} qualifierMessage={undefined} schema={{"type":"boolean","description":"`true` when a client secret is stored. The API never returns the secret.","example":true}}></SchemaItem><SchemaItem collapsible={false} name={"scopes"} required={true} schemaName={"string"} qualifierMessage={undefined} schema={{"type":"string","description":"The scopes that the API asks for at the provider, separated by spaces. Always starts with `openid`.","example":"openid profile email"}}></SchemaItem><SchemaItem collapsible={false} name={"claimsGatheringCallbackUri"} required={true} schemaName={"string"} qualifierMessage={undefined} schema={{"type":"string","nullable":true,"description":"The URL where the API gets the claims of a deferred issuance, with the access token of the holder from the provider as bearer token. `null` when the provider has none.","example":"https://issuer.example-bank.com/claims"}}></SchemaItem><SchemaItem collapsible={false} name={"isBuiltInConformance"} required={true} schemaName={"boolean"} qualifierMessage={undefined} schema={{"type":"boolean","description":"`true` for the built-in OpenID Conformance login provider (conformance tests only, not for production). The OpenID Conformance extension creates and removes it; you cannot change or delete it, and only the credential definitions of that extension can use it.","example":false}}></SchemaItem><SchemaItem collapsible={false} name={"createdAt"} required={true} schemaName={"integer"} qualifierMessage={undefined} schema={{"type":"integer","description":"The time of the creation, in Unix seconds.","example":1794365298}}></SchemaItem><SchemaItem collapsible={false} name={"updatedAt"} required={true} schemaName={"integer"} qualifierMessage={undefined} schema={{"type":"integer","description":"The time of the last change, in Unix seconds.","example":1794365298}}></SchemaItem></div></details></SchemaItem></ul></details></TabItem><TabItem label={"Example (from schema)"} value={"Example (from schema)"}><ResponseSamples responseExample={"{\n  \"oidcProvider\": {\n    \"id\": \"3f6c2a9e-7b1d-4c58-9e2f-1a4b6d8c0e57\",\n    \"name\": \"Example Bank login\",\n    \"issuer\": \"https://login.example-bank.com\",\n    \"clientId\": \"igrant-issuer\",\n    \"clientSecretConfigured\": true,\n    \"scopes\": \"openid profile email\",\n    \"claimsGatheringCallbackUri\": \"https://issuer.example-bank.com/claims\",\n    \"isBuiltInConformance\": false,\n    \"createdAt\": 1794365298,\n    \"updatedAt\": 1794365298\n  }\n}"} language={"json"}></ResponseSamples></TabItem><TabItem label={"Example"} value={"Example"}><ResponseSamples responseExample={"{\n  \"oidcProvider\": {\n    \"id\": \"3f6c2a9e-7b1d-4c58-9e2f-1a4b6d8c0e57\",\n    \"name\": \"Example Bank login\",\n    \"issuer\": \"https://login.example-bank.com\",\n    \"clientId\": \"igrant-issuer\",\n    \"clientSecretConfigured\": true,\n    \"scopes\": \"openid profile email\",\n    \"claimsGatheringCallbackUri\": \"https://issuer.example-bank.com/claims\",\n    \"isBuiltInConformance\": false,\n    \"createdAt\": 1794365298,\n    \"updatedAt\": 1794365298\n  }\n}"} language={"json"}></ResponseSamples></TabItem></SchemaTabs></TabItem></MimeTabs></div></TabItem><TabItem label={"400"} value={"400"}><div>

The body is not a JSON object, has a member that it does not declare (`<name>: unknown field`) or a member of the wrong JSON type (`<name>: invalid type`); `name`, `issuer`, `clientId` or `clientSecret` is missing or empty (`Missing mandatory param <name>`); `issuer` or `claimsGatheringCallbackUri` is not an http(s) URL (`issuer must be an http(s) URL`); or a text is longer than its limit. Also when the organisation is unknown (`Organisation not found`) or has no deployed wallet.

</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><SchemaItem collapsible={false} name={"errorKey"} required={false} schemaName={"string"} qualifierMessage={undefined} schema={{"type":"string","description":"A text code of the refusal that does not change when the text changes. Only some refusals have it, for example `organisation_suspended`, `feature_disabled` or `purpose_exists`."}}></SchemaItem></ul></details></TabItem><TabItem label={"Example (from schema)"} value={"Example (from schema)"}><ResponseSamples responseExample={"{\n  \"errorCode\": 400,\n  \"errorDescription\": \"Bad input parameter\",\n  \"errorKey\": \"string\"\n}"} language={"json"}></ResponseSamples></TabItem></SchemaTabs></TabItem></MimeTabs></div></TabItem><TabItem label={"401"} value={"401"}><div>

The `Authorization` header is missing, or the API key or token is not valid.

</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><SchemaItem collapsible={false} name={"errorKey"} required={false} schemaName={"string"} qualifierMessage={undefined} schema={{"type":"string","description":"A text code of the refusal that does not change when the text changes. Only some refusals have it, for example `organisation_suspended`, `feature_disabled` or `purpose_exists`."}}></SchemaItem></ul></details></TabItem><TabItem label={"Example (from schema)"} value={"Example (from schema)"}><ResponseSamples responseExample={"{\n  \"errorCode\": 400,\n  \"errorDescription\": \"Bad input parameter\",\n  \"errorKey\": \"string\"\n}"} language={"json"}></ResponseSamples></TabItem></SchemaTabs></TabItem></MimeTabs></div></TabItem><TabItem label={"403"} value={"403"}><div>

The API key or token does not allow this call. An API key without the scope of the operation gets the older body `{"Code", "Message"}`. An `X-SandboxOrgId` header that names another sandbox organisation than the one of the API key gets `{"errorCode", "errorDescription"}`. When a platform admin has turned off the feature of the operation for the organisation, the answer has `errorKey` `feature_disabled` and the member `feature` (the name of the feature).

</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"}}><div><span className={"badge badge--info"}>anyOf</span><SchemaTabs><TabItem label={"MOD1"} value={"0-item-properties"}><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><SchemaItem collapsible={false} name={"errorKey"} required={false} schemaName={"string"} qualifierMessage={undefined} schema={{"type":"string","description":"A text code of the refusal that does not change when the text changes. Only some refusals have it, for example `organisation_suspended`, `feature_disabled` or `purpose_exists`."}}></SchemaItem></TabItem><TabItem label={"Older error body"} value={"1-item-properties"}><SchemaItem collapsible={false} name={"Code"} required={true} schemaName={"integer"} qualifierMessage={undefined} schema={{"type":"integer","description":"The HTTP status.","example":403}}></SchemaItem><SchemaItem collapsible={false} name={"Message"} required={true} schemaName={"string"} qualifierMessage={undefined} schema={{"type":"string","description":"What went wrong.","example":"Unauthorized access;User doesn't have enough permissions;"}}></SchemaItem></TabItem></SchemaTabs></div></ul></details></TabItem><TabItem label={"Example (from schema)"} value={"Example (from schema)"}><ResponseSamples responseExample={"{}"} language={"json"}></ResponseSamples></TabItem><TabItem label={"Example"} value={"Example"}><ResponseSamples responseExample={"{\n  \"Code\": 403,\n  \"Message\": \"Unauthorized access;User doesn't have enough permissions;\"\n}"} language={"json"}></ResponseSamples></TabItem></SchemaTabs></TabItem></MimeTabs></div></TabItem><TabItem label={"500"} value={"500"}><div>

Unexpected 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><SchemaItem collapsible={false} name={"errorKey"} required={false} schemaName={"string"} qualifierMessage={undefined} schema={{"type":"string","description":"A text code of the refusal that does not change when the text changes. Only some refusals have it, for example `organisation_suspended`, `feature_disabled` or `purpose_exists`."}}></SchemaItem></ul></details></TabItem><TabItem label={"Example (from schema)"} value={"Example (from schema)"}><ResponseSamples responseExample={"{\n  \"errorCode\": 400,\n  \"errorDescription\": \"Bad input parameter\",\n  \"errorKey\": \"string\"\n}"} language={"json"}></ResponseSamples></TabItem></SchemaTabs></TabItem></MimeTabs></div></TabItem></ApiTabs></div></div>
      