Every API here is available over the APIs.io API and to AI agents over MCP.
openapi: 3.1.0
info:
title: Dynamic Client Registration
description: On-board to Barclays API Exchange using an EIDAS certificate, and retrieve credentials to consume our PSD2
APIs.
version: v1.10
x-method: searched
x-source: https://developer.barclays.com/api/apis/versions/ace18310-2523-49f0-a66d-4c6e37aae59f.bdn/design?specification=oas31
x-harvested: '2026-09-04'
x-harvested-note: Verbatim OpenAPI 3.1 design export from the Barclays API Exchange registry (developer.barclays.com), fetched
anonymously. The untouched export is in openapi/_original/barclays-dynamic-client-registration-openapi.json. The UK Open
Banking documents carry OBIE (openbanking.org.uk) in info.contact/termsOfService because they are the OBIE standard contract
as Barclays implements and publishes it — the API, the registry record and the host are Barclays'.
paths:
/register:
post:
description: This endpoint enables a TPP to submit a request to Barclays, for the purpose of creating OAuth clients,
that are registered with Barclays Authorization server.
operationId: post_register
parameters:
- name: Correlation-ID
in: header
description: An identifier for the current call chain that can be used to tie together log entries on multiple layers
(e.g. client, server, mainframe). This identifier must be designed to be unique across all applications in the bank.
required: true
schema:
type: string
description: An identifier for the current call chain that can be used to tie together log entries on multiple layers
(e.g. client, server, mainframe). This identifier must be designed to be unique across all applications in the
bank.
maxLength: 64
minLength: 16
pattern: ^[a-zA-Z0-9-+/=_]{16,64}$
- name: X-Forwarded-For
in: header
description: IP Address of requesting client
required: false
schema:
type: string
description: IP Address of requesting client
maxLength: 4094
minLength: 7
pattern: ^(?!\s)([0-9a-z.,:\s]{7,4094})$
- name: X-SSLClientCert
in: header
description: EIDAS client certificate from Mutual TLS
required: false
schema:
type: string
description: EIDAS client certificate from Mutual TLS
maxLength: 8192
minLength: 1
pattern: ^(?!\s)([a-zA-Z0-9-+\/=]{1,8192})$
- name: X-SSLClientCertDN
in: header
description: EIDAS certificate DN
required: true
schema:
type: string
description: EIDAS certificate DN
maxLength: 1024
minLength: 1
pattern: ^(?!\s)([a-zA-Z0-9-.,@_%\/=\s]{1,1024})$
- name: X-SSLClientCertIssuerDN
in: header
description: EIDAS certificate Issuer DN
required: true
schema:
type: string
description: EIDAS certificate Issuer DN
maxLength: 1024
minLength: 1
pattern: ^(?!\s)([a-zA-Z0-9-.,@_%\/=\s\\]{1,1024})$
- name: X-SSLClientCertSN
in: header
description: EIDAS certificate Serial Number
required: true
schema:
type: string
description: EIDAS certificate Serial Number
maxLength: 256
minLength: 1
pattern: ^(?!\s)([\w.:\s]{1,256})$
- name: X-SSLClientCertChain
in: header
description: EIDAS certificate chain as it received as part of Mutual TLS
required: false
schema:
type: string
description: EIDAS certificate chain as it received as part of Mutual TLS
maxLength: 8192
minLength: 1
pattern: ^(?!\s)([a-zA-Z0-9-+\/=\s]{1,8192})$
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/DCRRequestType'
example: null
responses:
'201':
description: ''
content:
application/json:
schema:
$ref: '#/components/schemas/DCRResponseType'
example: null
'400':
description: ''
content:
application/json:
schema:
$ref: '#/components/schemas/PostRegister400Response'
example: null
'500':
description: ''
content:
application/json:
schema:
$ref: '#/components/schemas/PostRegister500Response'
example: null
'503':
description: ''
content:
application/json:
example: null
'429':
description: ''
content:
application/json:
schema:
$ref: '#/components/schemas/PostRegister429Response'
example: null
components:
schemas:
PostRegister400Response:
type: object
properties:
error_description:
type: string
error:
type: string
required:
- error
JWKSObjectType:
type: object
properties:
keys:
type: array
items: {}
maxItems: 100
minItems: 1
required:
- keys
PostRegister500Response:
type: object
properties:
error_description:
type: string
error:
type: string
required:
- error
PostRegister429Response:
type: object
properties:
error_description:
type: string
error:
type: string
required:
- error
SYMKEYType:
type: object
properties:
kty:
type: string
enum:
- RSA
- EC
- oct
x5t#S256:
type: string
maxLength: 128
minLength: 1
pattern: ^(?!\s)([\w=\/+-]{1,128})$
use:
type: string
maxLength: 16
minLength: 1
pattern: ^(?!\s)([\w-]{1,16})$
x5t:
type: string
maxLength: 128
minLength: 1
pattern: ^(?!\s)([\w=\/+-]{1,128})$
x5c:
type: array
items:
type: string
maxLength: 4096
minLength: 1
pattern: ^(?!\s)([a-zA-Z0-9-+\/=]{1,4096})$
maxItems: 10
minItems: 1
kid:
type: string
maxLength: 512
minLength: 1
pattern: ^(?!\s)([\w=\/+-]{1,512})$
key_ops:
type: array
items:
type: string
maxLength: 16
minLength: 1
pattern: ^(?!\s)([\w-]{1,16})$
maxItems: 10
minItems: 1
x5t#256:
type: string
maxLength: 128
minLength: 1
pattern: ^(?!\s)([\w=\/+-]{1,128})$
x5u:
type: string
maxLength: 263
minLength: 9
pattern: ^(?!\s)(https\:\/\/[A-Za-z0-9.#&=%\?\-:\/_\s]{1,255})$
k:
type: string
maxLength: 2048
minLength: 1
pattern: ^(?!\s)([\w=\/+-]{1,2048})$
alg:
type: string
maxLength: 32
minLength: 1
pattern: ^(?!\s)([\w+-]{1,32})$
required:
- k
- kid
- kty
- use
- x5c
DCRRequestType:
type: object
properties:
token_endpoint_auth_signing_alg:
type: string
enum:
- PS256
client_uri:
type: string
maxLength: 263
minLength: 9
pattern: ^(?!\s)(https\:\/\/[A-Za-z0-9.#&=%\?\-:\/_\s]{1,255})$
jwks:
$ref: '#/components/schemas/JWKSObjectType'
grant_types:
type: array
items:
type: string
enum:
- client_credentials
- authorization_code
- implicit
- refresh_token
- urn:ietf:params:oauth:grant-type:jwt-bearer
maxItems: 10
minItems: 1
application_type:
type: string
enum:
- web
- mobile
logo_uri:
type: string
maxLength: 263
minLength: 9
pattern: ^(?!\s)(https\:\/\/[A-Za-z0-9.#&=%\?\-:\/_\s]{1,255})$
tls_client_auth_subject_dn:
type: string
maxLength: 128
minLength: 1
pattern: ^(?!\s)([a-zA-Z0-9.\-\s]{1,128})$
redirect_uris:
type: array
items:
type: string
maxLength: 263
minLength: 8
pattern: ^(?!\s)(https|http)(\:\/\/)([A-Za-z0-9.#&=%\?\-:\/_\s]{1,255})$
maxItems: 10
minItems: 1
token_endpoint_auth_method:
type: string
enum:
- private_key_jwt
software_id:
type: string
maxLength: 22
minLength: 1
pattern: ^(?!\s)([\w]{1,22})$
scope:
type: string
maxLength: 256
minLength: 1
pattern: ^(?!\s)([a-zA-Z0-9.\-\s]{1,256})$
jwks_uri:
type: string
maxLength: 263
minLength: 9
pattern: ^(?!\s)(https\:\/\/[A-Za-z0-9.#&=%\?\-:\/_\s]{1,255})$
tos_uri:
type: string
maxLength: 263
minLength: 9
pattern: ^(?!\s)(https\:\/\/[A-Za-z0-9.#&=%\?\-:\/_\s]{1,255})$
software_version:
type: string
maxLength: 128
minLength: 1
pattern: ^(?!\s)([a-zA-Z0-9.\-\s]{1,128})$
request_object_signing_alg:
type: string
enum:
- PS256
client_name:
type: string
maxLength: 64
minLength: 1
pattern: ^(?!\s)([\w\s$£"ÖÄÜß"öäü!@#,.§$-]{1,64})$
contacts:
type: array
items:
type: string
maxLength: 256
minLength: 5
pattern: ^(?=.{1,256}$)^([a-zA-Z0-9.!#$%&'*+\/=?^_`~-]{1,64})@(([a-zA-Z0-9-]{1,180}(\.[a-zA-Z0-9-]{1,62}){1,9}))$
maxItems: 10
minItems: 1
policy_uri:
type: string
maxLength: 263
minLength: 9
pattern: ^(?!\s)(https\:\/\/[A-Za-z0-9.#&=%\?\-:\/_\s]{1,255})$
response_types:
type: array
items:
type: string
enum:
- code
- token
- id_token
- id_token token
- code id_token
- code token
- code id_token token
- none
maxItems: 10
minItems: 1
id_token_signed_response_alg:
type: string
enum:
- PS256
required:
- client_name
- contacts
- grant_types
- redirect_uris
- response_types
- scope
- token_endpoint_auth_method
RSAKEYType:
type: object
properties:
oth:
type: array
items:
type: object
properties:
r:
type: string
maxLength: 2048
minLength: 0
pattern: ^(?!\s)([\w=\/+-]{0,2048})$
d:
type: string
maxLength: 2048
minLength: 0
pattern: ^(?!\s)([\w=\/+-]{0,2048})$
t:
type: string
maxLength: 2048
minLength: 0
pattern: ^(?!\s)([\w=\/+-]{0,2048})$
d:
type: string
maxLength: 2048
minLength: 0
pattern: ^(?!\s)([\w=\/+-]{0,2048})$
e:
type: string
maxLength: 16
minLength: 1
pattern: ^(?!\s)([\w=\/+-]{1,16})$
use:
type: string
maxLength: 16
minLength: 1
pattern: ^(?!\s)([\w-]{1,16})$
x5c:
type: array
items:
type: string
maxLength: 4096
minLength: 1
pattern: ^(?!\s)([a-zA-Z0-9-+\/=]{1,4096})$
maxItems: 10
minItems: 1
kid:
type: string
maxLength: 512
minLength: 1
pattern: ^(?!\s)([\w=\/+-]{1,512})$
x5t#256:
type: string
maxLength: 128
minLength: 1
pattern: ^(?!\s)([\w=\/+-]{1,128})$
dp:
type: string
maxLength: 2048
minLength: 0
pattern: ^(?!\s)([\w=\/+-]{0,2048})$
dq:
type: string
maxLength: 2048
minLength: 0
pattern: ^(?!\s)([\w=\/+-]{0,2048})$
n:
type: string
maxLength: 2048
minLength: 1
pattern: ^(?!\s)([\w=\/+-]{1,2048})$
p:
type: string
maxLength: 2048
minLength: 0
pattern: ^(?!\s)([\w=\/+-]{0,2048})$
kty:
type: string
enum:
- RSA
- EC
- oct
x5t#S256:
type: string
maxLength: 128
minLength: 1
pattern: ^(?!\s)([\w=\/+-]{1,128})$
q:
type: string
maxLength: 2048
minLength: 0
pattern: ^(?!\s)([\w=\/+-]{0,2048})$
x5t:
type: string
maxLength: 128
minLength: 1
pattern: ^(?!\s)([\w=\/+-]{1,128})$
key_ops:
type: array
items:
type: string
maxLength: 16
minLength: 1
pattern: ^(?!\s)([\w-]{1,16})$
maxItems: 10
minItems: 1
qi:
type: string
maxLength: 2048
minLength: 0
pattern: ^(?!\s)([\w=\/+-]{0,2048})$
x5u:
type: string
maxLength: 263
minLength: 9
pattern: ^(?!\s)(https\:\/\/[A-Za-z0-9.#&=%\?\-:\/_\s]{1,255})$
alg:
type: string
maxLength: 32
minLength: 1
pattern: ^(?!\s)([\w+-]{1,32})$
required:
- e
- kid
- kty
- n
- use
- x5c
ECKEYType:
type: object
properties:
d:
type: string
maxLength: 512
minLength: 0
pattern: ^(?!\s)([\w]{0,512})$
use:
type: string
maxLength: 16
minLength: 1
pattern: ^(?!\s)([\w-]{1,16})$
crv:
type: string
enum:
- P-256
- P-384
- P-521
x5c:
type: array
items:
type: string
maxLength: 4096
minLength: 1
pattern: ^(?!\s)([a-zA-Z0-9-+\/=]{1,4096})$
maxItems: 10
minItems: 1
kid:
type: string
maxLength: 512
minLength: 1
pattern: ^(?!\s)([\w=\/+-]{1,512})$
x5t#256:
type: string
maxLength: 128
minLength: 1
pattern: ^(?!\s)([\w=\/+-]{1,128})$
kty:
type: string
enum:
- RSA
- EC
- oct
x5t#S256:
type: string
maxLength: 128
minLength: 1
pattern: ^(?!\s)([\w=\/+-]{1,128})$
x5t:
type: string
maxLength: 128
minLength: 1
pattern: ^(?!\s)([\w=\/+-]{1,128})$
key_ops:
type: array
items:
type: string
maxLength: 16
minLength: 1
pattern: ^(?!\s)([\w-]{1,16})$
maxItems: 10
minItems: 1
x:
type: string
maxLength: 512
minLength: 1
pattern: ^(?!\s)([\w]{1,512})$
x5u:
type: string
maxLength: 263
minLength: 9
pattern: ^(?!\s)(https\:\/\/[A-Za-z0-9.#&=%\?\-:\/_\s]{1,255})$
y:
type: string
maxLength: 512
minLength: 1
pattern: ^(?!\s)([\w]{1,512})$
alg:
type: string
maxLength: 32
minLength: 1
pattern: ^(?!\s)([\w+-]{1,32})$
required:
- crv
- kid
- kty
- use
- x
- x5c
- y
DCRResponseType:
type: object
properties:
token_endpoint_auth_signing_alg:
type: string
enum:
- PS256
client_uri:
type: string
jwks:
$ref: '#/components/schemas/JWKSObjectType'
grant_types:
type: array
items:
type: string
enum:
- client_credentials
- authorization_code
- implicit
- refresh_token
- urn:ietf:params:oauth:grant-type:jwt-bearer
application_type:
type: string
enum:
- web
- mobile
logo_uri:
type: string
tls_client_auth_subject_dn:
type: string
redirect_uris:
type: array
items:
type: string
token_endpoint_auth_method:
type: string
enum:
- private_key_jwt
client_id:
type: string
software_id:
type: string
client_secret_expires_at:
type: number
scope:
type: string
jwks_uri:
type: string
tos_uri:
type: string
software_version:
type: string
request_object_signing_alg:
type: string
enum:
- PS256
client_secret:
type: string
client_id_issued_at:
type: number
client_name:
type: string
contacts:
type: array
items:
type: string
policy_uri:
type: string
response_types:
type: array
items:
type: string
enum:
- code
- token
- id_token
- id_token token
- code id_token
- code token
- code id_token token
- none
id_token_signed_response_alg:
type: string
enum:
- PS256
required:
- client_id
- client_name
- contacts
- grant_types
- redirect_uris
- response_types
- scope
- token_endpoint_auth_method