{
    "$schema": "http://json-schema.org/draft-04/schema#",
    "description": "Object defining client registration request",
    "properties": {
        "client_name": {
            "description": "Human-readable string name of the client to be presented to the end-user during authorization",
            "type": "string"
        },
        "client_uri": {
            "description": "URL string of a web page providing information about the client",
            "type": "string"
        },
        "contacts": {
            "description": "Array of strings representing ways to contact people responsible for this client, typically email addresses",
            "items": {
                "type": "string"
            },
            "type": "array"
        },
        "grant_types": {
            "description": "Array of OAuth 2.0 grant type strings that the client can use at the token endpoint",
            "items": {
                "type": "string"
            },
            "type": "array"
        },
        "jwks": {
            "allOf": [
                {
                    "$schema": "http://json-schema.org/draft-04/schema#",
                    "description": "JSON Web Key Set to validate JSON Web Token",
                    "properties": {
                        "keys": {
                            "description": "The value of the 'keys' parameter is an array of JWK values. By default, the order of the JWK values within the array does not imply an order of preference among them, although applications of JWK Sets can choose to assign a meaning to the order for their purposes, if desired.",
                            "items": {
                                "properties": {
                                    "alg": {
                                        "type": "string"
                                    },
                                    "key_ops": {
                                        "type": "string"
                                    },
                                    "kid": {
                                        "type": "string"
                                    },
                                    "kty": {
                                        "type": "string"
                                    },
                                    "use": {
                                        "type": "string"
                                    },
                                    "x5c": {
                                        "items": {
                                            "type": "string"
                                        },
                                        "type": "array"
                                    },
                                    "x5t": {
                                        "type": "string"
                                    },
                                    "x5t#S256": {
                                        "type": "string"
                                    },
                                    "x5u": {
                                        "format": "uri",
                                        "type": "string"
                                    }
                                },
                                "required": [
                                    "kty"
                                ],
                                "type": "object"
                            },
                            "type": "array"
                        }
                    },
                    "required": [
                        "keys"
                    ],
                    "title": "JSON Web Key Set",
                    "type": "object"
                }
            ],
            "description": "Client's JSON Web Key Set document value, which contains the client's public keys",
            "type": "object"
        },
        "jwks_uri": {
            "description": "URL string referencing the client's JSON Web Key (JWK) Set document, which contains the client's public keys",
            "type": "string"
        },
        "logo_uri": {
            "description": "URL string that references a logo for the client",
            "type": "string"
        },
        "policy_uri": {
            "description": "URL string that points to a human-readable privacy policy document",
            "type": "string"
        },
        "redirect_uris": {
            "description": "Array of redirection URI strings for use in redirect-based flows such as the authorization code and implicit flows",
            "items": {
                "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",
            "items": {
                "type": "string"
            },
            "type": "array"
        },
        "scope": {
            "description": "String containing a space-separated list of scope values",
            "type": "string"
        },
        "software_id": {
            "description": "A unique identifier string (e.g. a UUID) assigned by the client developer or software publisher",
            "type": "string"
        },
        "software_version": {
            "description": "A version identifier string for the client software identified by 'software_id'",
            "type": "string"
        },
        "token_endpoint_auth_method": {
            "description": "String indicator of the requested authentication method for the token endpoint",
            "type": "string"
        },
        "tos_uri": {
            "description": "URL string that points to a human-readable terms of service document for the client",
            "type": "string"
        }
    },
    "required": [
        "client_name"
    ],
    "title": "Register Client Request",
    "type": "object"
}
