---
id: create-oidc-client
title: "Create OIDC Client"
description: "Creates an OpenID Connect client. The client enables passwordless login with EUDI Wallet by requesting verifications from individuals. During client creation, a presentation definition specifies which credentials to request - appearing as a QR code or deep link on the authentication page."
sidebar_label: "Create OIDC Client"
hide_title: true
hide_table_of_contents: true
api: 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
sidebar_class_name: "post api-method"
info_path: docs/extensions-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 OIDC Client</h1>

<MethodEndpoint method={"post"} path={"/v3/config/extension/oidc/client"}></MethodEndpoint>



Creates an OpenID Connect client. The client enables passwordless login with EUDI Wallet by requesting verifications from individuals. During client creation, a presentation definition specifies which credentials to request - appearing as a QR code or deep link on the authentication page.

## 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><ul style={{"marginLeft":"1rem"}}><SchemaItem collapsible={false} name={"presentationDefinitionId"} required={true} schemaName={"string"} qualifierMessage={undefined} schema={{"type":"string","description":"The ID of the presentation definition to use for this client"}}></SchemaItem><SchemaItem collapsible={false} name={"name"} required={true} schemaName={"string"} qualifierMessage={undefined} schema={{"type":"string","description":"The name of the client"}}></SchemaItem><SchemaItem collapsible={false} name={"redirectURIs"} required={false} schemaName={"string[]"} qualifierMessage={undefined} schema={{"type":"array","items":{"type":"string"},"description":"The redirect URIs for the client"}}></SchemaItem><SchemaItem collapsible={false} name={"allowedOrigins"} required={false} schemaName={"string[]"} qualifierMessage={undefined} schema={{"type":"array","items":{"type":"string"},"description":"The origins for the client"}}></SchemaItem><SchemaItem collapsible={true} className={"schemaItem"}><details style={{}} className={"openapi-markdown__details"}><summary style={{}}><span className={"openapi-schema__container"}><strong className={"openapi-schema__property"}>identityMatchingAttributes</strong><span className={"openapi-schema__name"}> object</span></span></summary><div style={{"marginLeft":"1rem"}}><div style={{"marginTop":".5rem","marginBottom":".5rem"}}>

A map of VCTs (verifiable credential types) to claim paths used as linking values for identity matching. Each key is the VCT of a credential, and the value is the dot-separated path to the claim within that credential to use as the linking value. Example: `{"https://example.com/vct/drivers-license": "email"}` maps the `email` claim from the drivers license credential for identity matching.


</div><SchemaItem name={"property name*"} required={false} schemaName={"string"} qualifierMessage={undefined} schema={{"type":"string"}} collapsible={false} discriminator={false}></SchemaItem></div></details></SchemaItem><SchemaItem collapsible={false} name={"callbackURI"} required={false} schemaName={"string"} qualifierMessage={undefined} schema={{"type":"string","description":"The URI at which a `sub` value will be calculated and returned according to the sent presentation.\n"}}></SchemaItem><SchemaItem collapsible={false} name={"callbackSecret"} required={false} schemaName={"string"} qualifierMessage={undefined} schema={{"type":"string","description":"The secret used to access the `callbackURI`. Required when `callbackURI` is set."}}></SchemaItem><SchemaItem collapsible={false} name={"transactionDataAction"} required={false} schemaName={"string"} qualifierMessage={undefined} schema={{"type":"string","description":"The configured action for the transaction data, e.g. \"login\" or \"verify\"\n"}}></SchemaItem></ul></details></TabItem></MimeTabs><div><div><ApiTabs label={undefined} id={undefined}><TabItem label={"201"} value={"201"}><div>

Client created

</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"}}><li className={"schemaItem"}><summary style={{}}><strong>Cache-Control</strong><span style={{"opacity":"0.6"}}> string</span></summary><div><div style={{"marginTop":".5rem","marginBottom":".5rem"}}>

Indicates that the response should not be cached.

</div></div></li></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={"clientId"} required={false} schemaName={"string"} qualifierMessage={undefined} schema={{"type":"string","description":"The ID of the created client"}}></SchemaItem><SchemaItem collapsible={false} name={"clientSecret"} required={false} schemaName={"string"} qualifierMessage={undefined} schema={{"type":"string","description":"The secret of the created client"}}></SchemaItem></ul></details></TabItem><TabItem label={"Example (from schema)"} value={"Example (from schema)"}><ResponseSamples responseExample={"{\n  \"clientId\": \"string\",\n  \"clientSecret\": \"string\"\n}"} language={"json"}></ResponseSamples></TabItem></SchemaTabs></TabItem></MimeTabs></div></TabItem></ApiTabs></div></div>
      