{
"openapi" : "3.0.3",
"info" : {
"contact" : {
"email" : "contact@dsb.gov.au",
"name" : "Data Standards Body",
"url" : "https://dsb.gov.au/"
},
"description" : "Specifications for Dynamic Client Registration endpoints applicable to all data holders (except secondary data holders).",
"title" : "CDR Dynamic Client Registration API",
"version" : "1.36.0"
},
"servers" : [ {
"description" : "MTLS",
"url" : "https://mtls.dh.example.com/cds-au/v1"
} ],
"tags" : [ {
"description" : "Data Holder Client Registration endpoints",
"name" : "Data Holder Client Registration",
"x-shortName" : "Client Registration"
} ],
"paths" : {
"/register" : {
"post" : {
"description" : "Register a client using a CDR Register issued Software Statement Assertion. \n\nThis endpoint does not require [CORS](#cors).",
"operationId" : "postClientRegistration",
"requestBody" : {
"$ref" : "#/components/requestBodies/RequestClientRegistration"
},
"responses" : {
"201" : {
"content" : {
"application/json" : {
"schema" : {
"$ref" : "#/components/schemas/RegistrationProperties"
}
}
},
"description" : "Client registration success"
},
"400" : {
"content" : {
"application/json" : {
"schema" : {
"$ref" : "#/components/schemas/RegistrationError"
}
}
},
"description" : "Request failed due to client error"
}
},
"summary" : "Register Data Recipient oAuth Client",
"tags" : [ "Data Holder Client Registration" ]
}
},
"/register/{ClientId}" : {
"delete" : {
"description" : "Delete a Client Registration for a given Client ID.",
"operationId" : "deleteClientRegistration",
"parameters" : [ {
"description" : "The client ID issued by the target Data Holder.",
"explode" : false,
"in" : "path",
"name" : "ClientId",
"required" : true,
"schema" : {
"type" : "string"
},
"style" : "simple"
}, {
"description" : "An Authorisation Token as per **[[RFC6750]](#nref-RFC6750)**.",
"explode" : false,
"in" : "header",
"name" : "Authorization",
"required" : true,
"schema" : {
"type" : "string"
},
"style" : "simple",
"x-cds-type" : "ExternalRef"
} ],
"responses" : {
"204" : {
"description" : "Client deleted"
},
"401" : {
"description" : "Request failed due to unknown or invalid Client or invalid access token",
"headers" : {
"WWW-Authenticate" : {
"description" : "The Response Header Field as per **[[RFC6750]](#nref-RFC6750)**.",
"explode" : false,
"schema" : {
"type" : "string"
},
"style" : "simple",
"x-cds-type" : "ExternalRef"
}
}
},
"403" : {
"description" : "The client does not have permission to read, update or delete the Client"
},
"405" : {
"description" : "Method Not Allowed. The requested method is unsupported"
}
},
"summary" : "Delete Data Recipient oAuth Client Registration",
"tags" : [ "Data Holder Client Registration" ],
"x-scopes" : [ "cdr:registration" ]
},
"get" : {
"description" : "Get a Client Registration for a given Client ID.",
"operationId" : "getClientRegistration",
"parameters" : [ {
"description" : "The client ID issued by the target Data Holder.",
"explode" : false,
"in" : "path",
"name" : "ClientId",
"required" : true,
"schema" : {
"type" : "string"
},
"style" : "simple"
}, {
"description" : "An Authorisation Token as per **[[RFC6750]](#nref-RFC6750)**.",
"explode" : false,
"in" : "header",
"name" : "Authorization",
"required" : true,
"schema" : {
"type" : "string"
},
"style" : "simple",
"x-cds-type" : "ExternalRef"
} ],
"responses" : {
"200" : {
"content" : {
"application/json" : {
"schema" : {
"$ref" : "#/components/schemas/RegistrationProperties"
}
}
},
"description" : "Client registration retrieval success"
},
"401" : {
"description" : "Request failed due to unknown or invalid Client or invalid access token",
"headers" : {
"WWW-Authenticate" : {
"description" : "The Response Header Field as per **[[RFC6750]](#nref-RFC6750)**.",
"explode" : false,
"schema" : {
"type" : "string"
},
"style" : "simple",
"x-cds-type" : "ExternalRef"
}
}
},
"403" : {
"description" : "The client does not have permission to read, update or delete the Client"
}
},
"summary" : "Get oAuth Client Registration",
"tags" : [ "Data Holder Client Registration" ],
"x-scopes" : [ "cdr:registration" ]
},
"put" : {
"description" : "Update a Client Registration for a given Client ID.",
"operationId" : "putClientRegistration",
"parameters" : [ {
"description" : "The client ID issued by the target Data Holder.",
"explode" : false,
"in" : "path",
"name" : "ClientId",
"required" : true,
"schema" : {
"type" : "string"
},
"style" : "simple"
}, {
"description" : "An Authorisation Token as per **[[RFC6750]](#nref-RFC6750)**.",
"explode" : false,
"in" : "header",
"name" : "Authorization",
"required" : true,
"schema" : {
"type" : "string"
},
"style" : "simple",
"x-cds-type" : "ExternalRef"
} ],
"requestBody" : {
"$ref" : "#/components/requestBodies/RequestClientRegistration"
},
"responses" : {
"200" : {
"content" : {
"application/json" : {
"schema" : {
"$ref" : "#/components/schemas/RegistrationProperties"
}
}
},
"description" : "Client registration update success"
},
"400" : {
"content" : {
"application/json" : {
"schema" : {
"$ref" : "#/components/schemas/RegistrationError"
}
}
},
"description" : "Request failed due to client error"
},
"401" : {
"description" : "Request failed due to unknown or invalid Client or invalid access token",
"headers" : {
"WWW-Authenticate" : {
"description" : "The Response Header Field as per **[[RFC6750]](#nref-RFC6750)**.",
"explode" : false,
"schema" : {
"type" : "string"
},
"style" : "simple",
"x-cds-type" : "ExternalRef"
}
}
},
"403" : {
"description" : "The client does not have permission to read, update or delete the Client"
}
},
"summary" : "Update Data Recipient Registration",
"tags" : [ "Data Holder Client Registration" ],
"x-scopes" : [ "cdr:registration" ]
}
}
},
"components" : {
"parameters" : {
"HeaderAuthorization" : {
"description" : "An Authorisation Token as per **[[RFC6750]](#nref-RFC6750)**.",
"explode" : false,
"in" : "header",
"name" : "Authorization",
"required" : true,
"schema" : {
"type" : "string"
},
"style" : "simple",
"x-cds-type" : "ExternalRef"
},
"PathClientId" : {
"description" : "The client ID issued by the target Data Holder.",
"explode" : false,
"in" : "path",
"name" : "ClientId",
"required" : true,
"schema" : {
"type" : "string"
},
"style" : "simple"
}
},
"requestBodies" : {
"RequestClientRegistration" : {
"content" : {
"application/jwt" : {
"schema" : {
"$ref" : "#/components/schemas/ClientRegistrationRequestV1"
}
}
},
"description" : "The registration request JWT to be used to register with a Data Holder.",
"required" : true
}
},
"responses" : {
"PostClientRegistration201" : {
"content" : {
"application/json" : {
"schema" : {
"$ref" : "#/components/schemas/RegistrationProperties"
}
}
},
"description" : "Client registration success"
},
"GetClientRegistration200" : {
"content" : {
"application/json" : {
"schema" : {
"$ref" : "#/components/schemas/RegistrationProperties"
}
}
},
"description" : "Client registration retrieval success"
},
"PutClientRegistration200" : {
"content" : {
"application/json" : {
"schema" : {
"$ref" : "#/components/schemas/RegistrationProperties"
}
}
},
"description" : "Client registration update success"
},
"DCRGeneric400" : {
"content" : {
"application/json" : {
"schema" : {
"$ref" : "#/components/schemas/RegistrationError"
}
}
},
"description" : "Request failed due to client error"
},
"DCRGeneric401" : {
"description" : "Request failed due to unknown or invalid Client or invalid access token",
"headers" : {
"WWW-Authenticate" : {
"description" : "The Response Header Field as per **[[RFC6750]](#nref-RFC6750)**.",
"explode" : false,
"schema" : {
"type" : "string"
},
"style" : "simple",
"x-cds-type" : "ExternalRef"
}
}
},
"DCRGeneric403" : {
"description" : "The client does not have permission to read, update or delete the Client"
},
"DCRGeneric405" : {
"description" : "Method Not Allowed. The requested method is unsupported"
}
},
"schemas" : {
"ClientRegistrationRequestV1" : {
"description" : "The registration request JWT to be used to register with a Data Holder. The schema of the payload section of the decoded string(JWT) is defined in [ClientRegistration](#cdr-dynamic-client-registration-api_schemas_tocSclientregistration).",
"example" : "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
"format" : "JWT",
"type" : "string"
},
"RegistrationProperties" : {
"properties" : {
"client_id" : {
"description" : "Data Holder issued client identifier string.",
"example" : "2cfefa98-7d4a-4bcb-95da-47063b84d410",
"type" : "string"
},
"client_id_issued_at" : {
"description" : "Time at which the client identifier was issued expressed as seconds since 1970-01-01T00:00:00Z as measured in UTC.",
"example" : 1574398833,
"type" : "integer",
"x-cds-type" : "ExternalRef"
},
"client_name" : {
"description" : "Human-readable string name of the software product to be presented to the end-user during authorization.",
"example" : "Mock Software",
"type" : "string"
},
"client_description" : {
"description" : "Human-readable string name of the software product description to be presented to the end user during authorization.",
"example" : "A mock software product",
"type" : "string"
},
"client_uri" : {
"description" : "URL string of a web page providing information about the client.",
"example" : "https://adr.example.com",
"type" : "string",
"x-cds-type" : "URIString"
},
"legal_entity_id" : {
"description" : "A unique identifier string assigned by the CDR Register that identifies the Accredited Data Recipient Legal Entity.",
"example" : "3B0B0A7B-3E7B-4A2C-9497-E357A71D07C7",
"type" : "string"
},
"legal_entity_name" : {
"description" : "Human-readable string name of the Accredited Data Recipient Legal Entity.",
"example" : "Mock Company Pty Ltd.",
"type" : "string"
},
"org_id" : {
"description" : "A unique identifier string assigned by the CDR Register that identifies the Accredited Data Recipient Brand.",
"example" : "3B0B0A7B-3E7B-4A2C-9497-E357A71D07C8",
"type" : "string"
},
"org_name" : {
"description" : "Human-readable string name of the Accredited Data Recipient to be presented to the end user during authorization.",
"example" : "Mock Company Brand",
"type" : "string"
},
"redirect_uris" : {
"description" : "Array of redirection URI strings for use in redirect-based flows. If used, _redirect_uris_ **MUST** match or be a subset of the _redirect_uris_ as defined in the SSA.",
"example" : [ "https://adr.example.com/redirects/redirect1", "https://adr.example.com/redirects/redirect2" ],
"items" : {
"type" : "string",
"x-cds-type" : "URIString"
},
"type" : "array"
},
"sector_identifier_uri" : {
"description" : "URL string referencing the client sector identifier URI, used as an optional input to the Pairwise Identifier.",
"example" : "https://adr.example.com/sector_identifier.json",
"type" : "string",
"x-cds-type" : "URIString"
},
"logo_uri" : {
"description" : "URL string that references a logo for the client. If present, the server **SHOULD** display this image to the end-user during approval.",
"example" : "https://adr.example.com/logos/logo1.png",
"type" : "string",
"x-cds-type" : "URIString"
},
"tos_uri" : {
"description" : "URL string that points to a human-readable terms of service document for the Software Product.",
"example" : "https://adr.example.com/tos.html",
"type" : "string",
"x-cds-type" : "URIString"
},
"policy_uri" : {
"description" : "URL string that points to a human-readable policy document for the Software Product.",
"example" : "https://adr.example.com/policy.html",
"type" : "string",
"x-cds-type" : "URIString"
},
"jwks_uri" : {
"description" : "URL string referencing the client JSON Web Key (JWK) Set **[[RFC7517]](#nref-RFC7517)** document, which contains the client public keys.",
"example" : "https://adr.example.com/jwks",
"type" : "string",
"x-cds-type" : "URIString"
},
"revocation_uri" : {
"description" : "URI string that references the location of the Software Product consent revocation endpoint.",
"example" : "https://adr.example.com/revocation",
"type" : "string",
"x-cds-type" : "URIString"
},
"recipient_base_uri" : {
"description" : "Base URI for the Consumer Data Standard Data Recipient endpoints. This should be the base to provide reference to all other Data Recipient Endpoints.",
"example" : "https://adr.example.com",
"type" : "string",
"x-cds-type" : "URIString"
},
"token_endpoint_auth_method" : {
"description" : "The requested authentication method for the token endpoint.",
"enum" : [ "private_key_jwt" ],
"type" : "string"
},
"token_endpoint_auth_signing_alg" : {
"description" : "The algorithm used for signing the JWT.",
"enum" : [ "PS256", "ES256" ],
"type" : "string"
},
"grant_types" : {
"description" : "Array of OAuth 2.0 grant type strings that the client can use at the token endpoint.",
"example" : [ "client_credentials", "authorization_code", "refresh_token" ],
"items" : {
"enum" : [ "client_credentials", "authorization_code", "refresh_token" ],
"type" : "string"
},
"type" : "array"
},
"response_types" : {
"description" : "Array of the OAuth 2.0 _response_type_ strings that the client can use at the authorization endpoint.
_response_type_ value `code` is required for Authorization Code Flow.
_response_type_ value `code id_token` is required for OIDC Hybrid Flow.",
"items" : {
"enum" : [ "code", "code id_token" ],
"type" : "string"
},
"type" : "array"
},
"application_type" : {
"default" : "web",
"description" : "Kind of the application. The only supported application type will be `web`.",
"enum" : [ "web" ],
"type" : "string"
},
"id_token_signed_response_alg" : {
"description" : "Algorithm with which an id_token is to be signed.",
"enum" : [ "PS256", "ES256" ],
"type" : "string"
},
"id_token_encrypted_response_alg" : {
"description" : "JWE _alg_ algorithm with which an id_token is to be encrypted.
Required only if OIDC Hybrid Flow (_response_type_: `code id_token`) is registered.",
"example" : "RSA-OAEP",
"type" : "string",
"x-cds-type" : "ExternalRef"
},
"id_token_encrypted_response_enc" : {
"description" : "JWE `enc` algorithm with which an id_token is to be encrypted.
Required only if OIDC Hybrid Flow (_response_type_: `code id_token`) is registered.",
"example" : "A256GCM",
"type" : "string",
"x-cds-type" : "ExternalRef"
},
"authorization_signed_response_alg" : {
"description" : "The JWS _alg_ algorithm required for signing authorization responses. If this is specified, the response will be signed using JWS and the configured algorithm. The algorithm `none` is not allowed.
Required if _response_type_ of `code` is registered by the client.",
"enum" : [ "PS256", "ES256" ],
"example" : "PS256",
"type" : "string",
"x-conditional" : true
},
"authorization_encrypted_response_alg" : {
"description" : "The JWE _alg_ algorithm required for encrypting authorization responses. If unspecified, the default is that no encryption is performed.
Required if _authorization_encrypted_response_enc_ is included.",
"enum" : [ "RSA-OAEP", "RSA-OAEP-256" ],
"example" : "RSA-OAEP",
"type" : "string",
"x-conditional" : true
},
"authorization_encrypted_response_enc" : {
"description" : "The JWE _enc_ algorithm required for encrypting authorization responses. If _authorization_encrypted_response_alg_ is specified, the default for this value is `A128CBC-HS256`.",
"enum" : [ "A256GCM", "A128CBC-HS256" ],
"example" : "A128CBC-HS256",
"type" : "string"
},
"request_object_signing_alg" : {
"description" : "Algorithm which the ADR expects to sign the request object if a request object will be part of the authorization request sent to the Data Holder.",
"enum" : [ "PS256", "ES256" ],
"type" : "string"
},
"software_statement" : {
"description" : "The Software Statement Assertion, as defined in the CDR Data Standards.",
"format" : "JWT",
"type" : "string"
},
"software_id" : {
"description" : "String representing a unique identifier assigned by the Register and used by registration endpoints to identify the software product to be dynamically registered.
The _software_id_ will remain the same for the lifetime of the product, across multiple updates and versions.",
"example" : "740C368F-ECF9-4D29-A2EA-0514A66B0CDE",
"type" : "string"
},
"software_roles" : {
"default" : "data-recipient-software-product",
"description" : "String containing a role of the software in the CDR Regime. Initially the only value used will be `data-recipient-software-product`.",
"enum" : [ "data-recipient-software-product" ],
"example" : "data-recipient-software-product",
"type" : "string"
},
"scope" : {
"description" : "String containing a space-separated list of scope values that the client can use when requesting access tokens.",
"example" : "openid profile bank:accounts.basic:read bank:accounts.detail:read bank:transactions:read bank:payees:read bank:regular_payments:read common:customer.basic:read common:customer.detail:read cdr:registration",
"type" : "string"
}
},
"required" : [ "client_description", "client_id", "client_name", "client_uri", "grant_types", "id_token_signed_response_alg", "jwks_uri", "logo_uri", "org_id", "org_name", "redirect_uris", "request_object_signing_alg", "response_types", "scope", "software_id", "software_statement", "token_endpoint_auth_method", "token_endpoint_auth_signing_alg" ],
"type" : "object",
"x-conditional" : [ "id_token_encrypted_response_alg", "id_token_encrypted_response_enc", "authorization_signed_response_alg", "authorization_encrypted_response_alg" ]
},
"ClientRegistration" : {
"allOf" : [ {
"$ref" : "#/components/schemas/ClientRegistration_allOf"
}, {
"$ref" : "#/components/schemas/RegistrationProperties"
} ]
},
"RegistrationError" : {
"properties" : {
"error" : {
"description" : "Predefined error code as described in [section 3.3 OIDC Dynamic Client Registration](https://openid.net/specs/openid-connect-registration-1_0.html).",
"enum" : [ "invalid_redirect_uri", "invalid_client_metadata", "invalid_software_statement", "unapproved_software_statement" ],
"type" : "string"
},
"error_description" : {
"description" : "Additional text description of the error for debugging.",
"type" : "string",
"x-cds-type" : "ASCIIString"
}
},
"required" : [ "error" ],
"type" : "object"
},
"ClientRegistration_allOf" : {
"properties" : {
"iss" : {
"description" : "Contains the identifier for the ADR Software Product (SoftwareProductId) as defined in the CDR Register.",
"example" : "CDR Software Product ID",
"type" : "string"
},
"iat" : {
"description" : "The time at which the request was issued by the Data Recipient expressed as seconds since 1970-01-01T00:00:00Z as measured in UTC.",
"example" : 1571808167,
"type" : "integer",
"x-cds-type" : "ExternalRef"
},
"exp" : {
"description" : "The time at which the request expires expressed as seconds since 1970-01-01T00:00:00Z as measured in UTC.",
"example" : 2147483646,
"type" : "integer",
"x-cds-type" : "ExternalRef"
},
"jti" : {
"description" : "Unique identifier for the JWT, used to prevent replay of the token.",
"example" : "37747cd1c10545699f754adf28b73e31",
"type" : "string"
},
"aud" : {
"description" : "Contains the Data Holder issuer value as described in the OIDC Discovery Document.",
"example" : "https://mtls.dh.example.com/issuer",
"type" : "string",
"x-cds-type" : "URIString"
}
},
"required" : [ "aud", "exp", "iat", "iss", "jti" ],
"type" : "object"
}
}
}
}