diff --git a/schemas/v3.1/meta/oas.json b/schemas/v3.1/meta/oas.json
new file mode 100644
index 0000000000..0c2bb66842
--- /dev/null
+++ b/schemas/v3.1/meta/oas.json
@@ -0,0 +1,1389 @@
+{
+ "$schema": "http://json-schema.org/draft/2019-WIP/schema#",
+ "$id": "https://spec.openapis.org/oas/3.1/meta/oas",
+ "$recursiveAnchor": true,
+ "title": "OpenAPI Schema Object Vocabulary Schema",
+ "type": ["object", "boolean"],
+ "properties": {
+ "nullable": {
+ "type": "boolean",
+ "default": false,
+ "deprecated": true
+ },
+ "discriminator": {
+ "$ref": "#/$defs/Discriminator"
+ },
+ "example": {
+ "deprecated": true
+ },
+ "externalDocs": {
+ "$ref": "#/$defs/ExternalDocumentation"
+ },
+ "xml": {
+ "$ref": "#/$defs/XML"
+ }
+ },
+ "patternProperties": {
+ "^x-": true
+ },
+ "$defs": {
+ "Discriminator": {
+ "type": "object",
+ "required": [
+ "propertyName"
+ ],
+ "properties": {
+ "propertyName": {
+ "type": "string"
+ },
+ "mapping": {
+ "type": "object",
+ "additionalProperties": {
+ "type": "string"
+ }
+ }
+ }
+ },
+ "XML": {
+ "type": "object",
+ "properties": {
+ "name": {
+ "type": "string"
+ },
+ "namespace": {
+ "type": "string",
+ "format": "uri"
+ },
+ "prefix": {
+ "type": "string"
+ },
+ "attribute": {
+ "type": "boolean",
+ "default": false
+ },
+ "wrapped": {
+ "type": "boolean",
+ "default": false
+ }
+ },
+ "patternProperties": {
+ "^x-": true
+ },
+ "unevaluatedProperties": false
+ }
+ },
+ "Reference": {
+ "type": "object",
+ "required": [
+ "$ref"
+ ],
+ "properties": {
+ "$ref": {
+ "type": "string",
+ "format": "uri-reference"
+ }
+ }
+ },
+ "Info": {
+ "type": "object",
+ "required": [
+ "title",
+ "version"
+ ],
+ "properties": {
+ "title": {
+ "type": "string"
+ },
+ "description": {
+ "type": "string"
+ },
+ "termsOfService": {
+ "type": "string",
+ "format": "uri-reference"
+ },
+ "contact": {
+ "$ref": "#/$defs/Contact"
+ },
+ "license": {
+ "$ref": "#/$defs/License"
+ },
+ "version": {
+ "type": "string"
+ }
+ },
+ "patternProperties": {
+ "^x-": true
+ },
+ "additionalProperties": false
+ },
+ "Contact": {
+ "type": "object",
+ "properties": {
+ "name": {
+ "type": "string"
+ },
+ "url": {
+ "type": "string",
+ "format": "uri-reference"
+ },
+ "email": {
+ "type": "string",
+ "format": "email"
+ }
+ },
+ "patternProperties": {
+ "^x-": true
+ },
+ "additionalProperties": false
+ },
+ "License": {
+ "type": "object",
+ "required": [
+ "name"
+ ],
+ "properties": {
+ "name": {
+ "type": "string"
+ },
+ "url": {
+ "type": "string",
+ "format": "uri-reference"
+ }
+ },
+ "patternProperties": {
+ "^x-": true
+ },
+ "additionalProperties": false
+ },
+ "Server": {
+ "type": "object",
+ "required": [
+ "url"
+ ],
+ "properties": {
+ "url": {
+ "type": "string"
+ },
+ "description": {
+ "type": "string"
+ },
+ "variables": {
+ "type": "object",
+ "additionalProperties": {
+ "$ref": "#/$defs/ServerVariable"
+ }
+ }
+ },
+ "patternProperties": {
+ "^x-": true
+ },
+ "additionalProperties": false
+ },
+ "ServerVariable": {
+ "type": "object",
+ "required": [
+ "default"
+ ],
+ "properties": {
+ "enum": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "default": {
+ "type": "string"
+ },
+ "description": {
+ "type": "string"
+ }
+ },
+ "patternProperties": {
+ "^x-": true
+ },
+ "additionalProperties": false
+ },
+ "Components": {
+ "type": "object",
+ "properties": {
+ "schemas": {
+ "type": "object",
+ "patternProperties": {
+ "^[a-zA-Z0-9\\.\\-_]+$": {
+ "oneOf": [
+ {
+ "$ref": "#/$defs/Schema"
+ },
+ {
+ "$ref": "#/$defs/Reference"
+ }
+ ]
+ }
+ }
+ },
+ "responses": {
+ "type": "object",
+ "patternProperties": {
+ "^[a-zA-Z0-9\\.\\-_]+$": {
+ "oneOf": [
+ {
+ "$ref": "#/$defs/Reference"
+ },
+ {
+ "$ref": "#/$defs/Response"
+ }
+ ]
+ }
+ }
+ },
+ "parameters": {
+ "type": "object",
+ "patternProperties": {
+ "^[a-zA-Z0-9\\.\\-_]+$": {
+ "oneOf": [
+ {
+ "$ref": "#/$defs/Reference"
+ },
+ {
+ "$ref": "#/$defs/Parameter"
+ }
+ ]
+ }
+ }
+ },
+ "examples": {
+ "type": "object",
+ "patternProperties": {
+ "^[a-zA-Z0-9\\.\\-_]+$": {
+ "oneOf": [
+ {
+ "$ref": "#/$defs/Reference"
+ },
+ {
+ "$ref": "#/$defs/Example"
+ }
+ ]
+ }
+ }
+ },
+ "requestBodies": {
+ "type": "object",
+ "patternProperties": {
+ "^[a-zA-Z0-9\\.\\-_]+$": {
+ "oneOf": [
+ {
+ "$ref": "#/$defs/Reference"
+ },
+ {
+ "$ref": "#/$defs/RequestBody"
+ }
+ ]
+ }
+ }
+ },
+ "headers": {
+ "type": "object",
+ "patternProperties": {
+ "^[a-zA-Z0-9\\.\\-_]+$": {
+ "oneOf": [
+ {
+ "$ref": "#/$defs/Reference"
+ },
+ {
+ "$ref": "#/$defs/Header"
+ }
+ ]
+ }
+ }
+ },
+ "securitySchemes": {
+ "type": "object",
+ "patternProperties": {
+ "^[a-zA-Z0-9\\.\\-_]+$": {
+ "oneOf": [
+ {
+ "$ref": "#/$defs/Reference"
+ },
+ {
+ "$ref": "#/$defs/SecurityScheme"
+ }
+ ]
+ }
+ }
+ },
+ "links": {
+ "type": "object",
+ "patternProperties": {
+ "^[a-zA-Z0-9\\.\\-_]+$": {
+ "oneOf": [
+ {
+ "$ref": "#/$defs/Reference"
+ },
+ {
+ "$ref": "#/$defs/Link"
+ }
+ ]
+ }
+ }
+ },
+ "callbacks": {
+ "type": "object",
+ "patternProperties": {
+ "^[a-zA-Z0-9\\.\\-_]+$": {
+ "oneOf": [
+ {
+ "$ref": "#/$defs/Reference"
+ },
+ {
+ "$ref": "#/$defs/Callback"
+ }
+ ]
+ }
+ }
+ }
+ },
+ "patternProperties": {
+ "^x-": true
+ },
+ "additionalProperties": false
+ },
+ "Schema": {
+ "$ref": "meta/schema"
+ },
+ "Response": {
+ "type": "object",
+ "required": [
+ "description"
+ ],
+ "properties": {
+ "description": {
+ "type": "string"
+ },
+ "headers": {
+ "type": "object",
+ "additionalProperties": {
+ "oneOf": [
+ {
+ "$ref": "#/$defs/Header"
+ },
+ {
+ "$ref": "#/$defs/Reference"
+ }
+ ]
+ }
+ },
+ "content": {
+ "type": "object",
+ "additionalProperties": {
+ "$ref": "#/$defs/MediaType"
+ }
+ },
+ "links": {
+ "type": "object",
+ "additionalProperties": {
+ "oneOf": [
+ {
+ "$ref": "#/$defs/Link"
+ },
+ {
+ "$ref": "#/$defs/Reference"
+ }
+ ]
+ }
+ }
+ },
+ "patternProperties": {
+ "^x-": true
+ },
+ "additionalProperties": false
+ },
+ "MediaType": {
+ "type": "object",
+ "properties": {
+ "schema": {
+ "oneOf": [
+ {
+ "$ref": "#/$defs/Schema"
+ },
+ {
+ "$ref": "#/$defs/Reference"
+ }
+ ]
+ },
+ "example": {
+ },
+ "examples": {
+ "type": "object",
+ "additionalProperties": {
+ "oneOf": [
+ {
+ "$ref": "#/$defs/Example"
+ },
+ {
+ "$ref": "#/$defs/Reference"
+ }
+ ]
+ }
+ },
+ "encoding": {
+ "type": "object",
+ "additionalProperties": {
+ "$ref": "#/$defs/Encoding"
+ }
+ }
+ },
+ "patternProperties": {
+ "^x-": true
+ },
+ "additionalProperties": false,
+ "allOf": [
+ {
+ "$ref": "#/$defs/ExampleXORExamples"
+ }
+ ]
+ },
+ "Example": {
+ "type": "object",
+ "properties": {
+ "summary": {
+ "type": "string"
+ },
+ "description": {
+ "type": "string"
+ },
+ "value": {
+ },
+ "externalValue": {
+ "type": "string",
+ "format": "uri-reference"
+ }
+ },
+ "patternProperties": {
+ "^x-": true
+ },
+ "additionalProperties": false
+ },
+ "Header": {
+ "type": "object",
+ "properties": {
+ "description": {
+ "type": "string"
+ },
+ "required": {
+ "type": "boolean",
+ "default": false
+ },
+ "deprecated": {
+ "type": "boolean",
+ "default": false
+ },
+ "allowEmptyValue": {
+ "type": "boolean",
+ "default": false
+ },
+ "style": {
+ "type": "string",
+ "enum": [
+ "simple"
+ ],
+ "default": "simple"
+ },
+ "explode": {
+ "type": "boolean"
+ },
+ "allowReserved": {
+ "type": "boolean",
+ "default": false
+ },
+ "schema": {
+ "oneOf": [
+ {
+ "$ref": "#/$defs/Schema"
+ },
+ {
+ "$ref": "#/$defs/Reference"
+ }
+ ]
+ },
+ "content": {
+ "type": "object",
+ "additionalProperties": {
+ "$ref": "#/$defs/MediaType"
+ },
+ "minProperties": 1,
+ "maxProperties": 1
+ },
+ "example": {
+ },
+ "examples": {
+ "type": "object",
+ "additionalProperties": {
+ "oneOf": [
+ {
+ "$ref": "#/$defs/Example"
+ },
+ {
+ "$ref": "#/$defs/Reference"
+ }
+ ]
+ }
+ }
+ },
+ "patternProperties": {
+ "^x-": true
+ },
+ "additionalProperties": false,
+ "allOf": [
+ {
+ "$ref": "#/$defs/ExampleXORExamples"
+ },
+ {
+ "$ref": "#/$defs/SchemaXORContent"
+ }
+ ]
+ },
+ "Paths": {
+ "type": "object",
+ "patternProperties": {
+ "^\\/": {
+ "$ref": "#/$defs/PathItem"
+ },
+ "^x-": true
+ },
+ "additionalProperties": false
+ },
+ "PathItem": {
+ "type": "object",
+ "properties": {
+ "$ref": {
+ "type": "string"
+ },
+ "summary": {
+ "type": "string"
+ },
+ "description": {
+ "type": "string"
+ },
+ "servers": {
+ "type": "array",
+ "items": {
+ "$ref": "#/$defs/Server"
+ }
+ },
+ "parameters": {
+ "type": "array",
+ "items": {
+ "oneOf": [
+ {
+ "$ref": "#/$defs/Parameter"
+ },
+ {
+ "$ref": "#/$defs/Reference"
+ }
+ ]
+ },
+ "uniqueItems": true
+ }
+ },
+ "patternProperties": {
+ "^(get|put|post|delete|options|head|patch|trace)$": {
+ "$ref": "#/$defs/Operation"
+ },
+ "^x-": true
+ },
+ "additionalProperties": false
+ },
+ "Operation": {
+ "type": "object",
+ "required": [
+ "responses"
+ ],
+ "properties": {
+ "tags": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "summary": {
+ "type": "string"
+ },
+ "description": {
+ "type": "string"
+ },
+ "externalDocs": {
+ "$ref": "#/$defs/ExternalDocumentation"
+ },
+ "operationId": {
+ "type": "string"
+ },
+ "parameters": {
+ "type": "array",
+ "items": {
+ "oneOf": [
+ {
+ "$ref": "#/$defs/Parameter"
+ },
+ {
+ "$ref": "#/$defs/Reference"
+ }
+ ]
+ },
+ "uniqueItems": true
+ },
+ "requestBody": {
+ "oneOf": [
+ {
+ "$ref": "#/$defs/RequestBody"
+ },
+ {
+ "$ref": "#/$defs/Reference"
+ }
+ ]
+ },
+ "responses": {
+ "$ref": "#/$defs/Responses"
+ },
+ "callbacks": {
+ "type": "object",
+ "additionalProperties": {
+ "oneOf": [
+ {
+ "$ref": "#/$defs/Callback"
+ },
+ {
+ "$ref": "#/$defs/Reference"
+ }
+ ]
+ }
+ },
+ "deprecated": {
+ "type": "boolean",
+ "default": false
+ },
+ "security": {
+ "type": "array",
+ "items": {
+ "$ref": "#/$defs/SecurityRequirement"
+ }
+ },
+ "servers": {
+ "type": "array",
+ "items": {
+ "$ref": "#/$defs/Server"
+ }
+ }
+ },
+ "patternProperties": {
+ "^x-": true
+ },
+ "additionalProperties": false
+ },
+ "Responses": {
+ "type": "object",
+ "properties": {
+ "default": {
+ "oneOf": [
+ {
+ "$ref": "#/$defs/Response"
+ },
+ {
+ "$ref": "#/$defs/Reference"
+ }
+ ]
+ }
+ },
+ "patternProperties": {
+ "^[1-5](?:\\d{2}|XX)$": {
+ "oneOf": [
+ {
+ "$ref": "#/$defs/Response"
+ },
+ {
+ "$ref": "#/$defs/Reference"
+ }
+ ]
+ },
+ "^x-": true
+ },
+ "minProperties": 1,
+ "additionalProperties": false
+ },
+ "SecurityRequirement": {
+ "type": "object",
+ "additionalProperties": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ }
+ },
+ "Tag": {
+ "type": "object",
+ "required": [
+ "name"
+ ],
+ "properties": {
+ "name": {
+ "type": "string"
+ },
+ "description": {
+ "type": "string"
+ },
+ "externalDocs": {
+ "$ref": "#/$defs/ExternalDocumentation"
+ }
+ },
+ "patternProperties": {
+ "^x-": true
+ },
+ "additionalProperties": false
+ },
+ "ExternalDocumentation": {
+ "type": "object",
+ "required": [
+ "url"
+ ],
+ "properties": {
+ "description": {
+ "type": "string"
+ },
+ "url": {
+ "type": "string",
+ "format": "uri-reference"
+ }
+ },
+ "patternProperties": {
+ "^x-": true
+ },
+ "additionalProperties": false
+ },
+ "ExampleXORExamples": {
+ "description": "Example and examples are mutually exclusive",
+ "not": {
+ "required": [
+ "example",
+ "examples"
+ ]
+ }
+ },
+ "SchemaXORContent": {
+ "description": "Schema and content are mutually exclusive, at least one is required",
+ "not": {
+ "required": [
+ "schema",
+ "content"
+ ]
+ },
+ "oneOf": [
+ {
+ "required": [
+ "schema"
+ ]
+ },
+ {
+ "required": [
+ "content"
+ ],
+ "description": "Some properties are not allowed if content is present",
+ "allOf": [
+ {
+ "not": {
+ "required": [
+ "style"
+ ]
+ }
+ },
+ {
+ "not": {
+ "required": [
+ "explode"
+ ]
+ }
+ },
+ {
+ "not": {
+ "required": [
+ "allowReserved"
+ ]
+ }
+ },
+ {
+ "not": {
+ "required": [
+ "example"
+ ]
+ }
+ },
+ {
+ "not": {
+ "required": [
+ "examples"
+ ]
+ }
+ }
+ ]
+ }
+ ]
+ },
+ "Parameter": {
+ "type": "object",
+ "properties": {
+ "name": {
+ "type": "string"
+ },
+ "in": {
+ "type": "string"
+ },
+ "description": {
+ "type": "string"
+ },
+ "required": {
+ "type": "boolean",
+ "default": false
+ },
+ "deprecated": {
+ "type": "boolean",
+ "default": false
+ },
+ "allowEmptyValue": {
+ "type": "boolean",
+ "default": false
+ },
+ "style": {
+ "type": "string"
+ },
+ "explode": {
+ "type": "boolean"
+ },
+ "allowReserved": {
+ "type": "boolean",
+ "default": false
+ },
+ "schema": {
+ "oneOf": [
+ {
+ "$ref": "#/$defs/Schema"
+ },
+ {
+ "$ref": "#/$defs/Reference"
+ }
+ ]
+ },
+ "content": {
+ "type": "object",
+ "additionalProperties": {
+ "$ref": "#/$defs/MediaType"
+ },
+ "minProperties": 1,
+ "maxProperties": 1
+ },
+ "example": {
+ },
+ "examples": {
+ "type": "object",
+ "additionalProperties": {
+ "oneOf": [
+ {
+ "$ref": "#/$defs/Example"
+ },
+ {
+ "$ref": "#/$defs/Reference"
+ }
+ ]
+ }
+ }
+ },
+ "patternProperties": {
+ "^x-": true
+ },
+ "additionalProperties": false,
+ "required": [
+ "name",
+ "in"
+ ],
+ "allOf": [
+ {
+ "$ref": "#/$defs/ExampleXORExamples"
+ },
+ {
+ "$ref": "#/$defs/SchemaXORContent"
+ },
+ {
+ "$ref": "#/$defs/ParameterLocation"
+ }
+ ]
+ },
+ "ParameterLocation": {
+ "description": "Parameter location",
+ "oneOf": [
+ {
+ "description": "Parameter in path",
+ "required": [
+ "required"
+ ],
+ "properties": {
+ "in": {
+ "enum": [
+ "path"
+ ]
+ },
+ "style": {
+ "enum": [
+ "matrix",
+ "label",
+ "simple"
+ ],
+ "default": "simple"
+ },
+ "required": {
+ "enum": [
+ true
+ ]
+ }
+ }
+ },
+ {
+ "description": "Parameter in query",
+ "properties": {
+ "in": {
+ "enum": [
+ "query"
+ ]
+ },
+ "style": {
+ "enum": [
+ "form",
+ "spaceDelimited",
+ "pipeDelimited",
+ "deepObject"
+ ],
+ "default": "form"
+ }
+ }
+ },
+ {
+ "description": "Parameter in header",
+ "properties": {
+ "in": {
+ "enum": [
+ "header"
+ ]
+ },
+ "style": {
+ "enum": [
+ "simple"
+ ],
+ "default": "simple"
+ }
+ }
+ },
+ {
+ "description": "Parameter in cookie",
+ "properties": {
+ "in": {
+ "enum": [
+ "cookie"
+ ]
+ },
+ "style": {
+ "enum": [
+ "form"
+ ],
+ "default": "form"
+ }
+ }
+ }
+ ]
+ },
+ "RequestBody": {
+ "type": "object",
+ "required": [
+ "content"
+ ],
+ "properties": {
+ "description": {
+ "type": "string"
+ },
+ "content": {
+ "type": "object",
+ "additionalProperties": {
+ "$ref": "#/$defs/MediaType"
+ }
+ },
+ "required": {
+ "type": "boolean",
+ "default": false
+ }
+ },
+ "patternProperties": {
+ "^x-": true
+ },
+ "additionalProperties": false
+ },
+ "SecurityScheme": {
+ "oneOf": [
+ {
+ "$ref": "#/$defs/APIKeySecurityScheme"
+ },
+ {
+ "$ref": "#/$defs/HTTPSecurityScheme"
+ },
+ {
+ "$ref": "#/$defs/OAuth2SecurityScheme"
+ },
+ {
+ "$ref": "#/$defs/OpenIdConnectSecurityScheme"
+ }
+ ]
+ },
+ "APIKeySecurityScheme": {
+ "type": "object",
+ "required": [
+ "type",
+ "name",
+ "in"
+ ],
+ "properties": {
+ "type": {
+ "type": "string",
+ "enum": [
+ "apiKey"
+ ]
+ },
+ "name": {
+ "type": "string"
+ },
+ "in": {
+ "type": "string",
+ "enum": [
+ "header",
+ "query",
+ "cookie"
+ ]
+ },
+ "description": {
+ "type": "string"
+ }
+ },
+ "patternProperties": {
+ "^x-": true
+ },
+ "additionalProperties": false
+ },
+ "HTTPSecurityScheme": {
+ "type": "object",
+ "required": [
+ "scheme",
+ "type"
+ ],
+ "properties": {
+ "scheme": {
+ "type": "string"
+ },
+ "bearerFormat": {
+ "type": "string"
+ },
+ "description": {
+ "type": "string"
+ },
+ "type": {
+ "type": "string",
+ "enum": [
+ "http"
+ ]
+ }
+ },
+ "patternProperties": {
+ "^x-": true
+ },
+ "additionalProperties": false,
+ "oneOf": [
+ {
+ "description": "Bearer",
+ "properties": {
+ "scheme": {
+ "enum": [
+ "bearer"
+ ]
+ }
+ }
+ },
+ {
+ "description": "Non Bearer",
+ "not": {
+ "required": [
+ "bearerFormat"
+ ]
+ },
+ "properties": {
+ "scheme": {
+ "not": {
+ "enum": [
+ "bearer"
+ ]
+ }
+ }
+ }
+ }
+ ]
+ },
+ "OAuth2SecurityScheme": {
+ "type": "object",
+ "required": [
+ "type",
+ "flows"
+ ],
+ "properties": {
+ "type": {
+ "type": "string",
+ "enum": [
+ "oauth2"
+ ]
+ },
+ "flows": {
+ "$ref": "#/$defs/OAuthFlows"
+ },
+ "description": {
+ "type": "string"
+ }
+ },
+ "patternProperties": {
+ "^x-": true
+ },
+ "additionalProperties": false
+ },
+ "OpenIdConnectSecurityScheme": {
+ "type": "object",
+ "required": [
+ "type",
+ "openIdConnectUrl"
+ ],
+ "properties": {
+ "type": {
+ "type": "string",
+ "enum": [
+ "openIdConnect"
+ ]
+ },
+ "openIdConnectUrl": {
+ "type": "string",
+ "format": "uri-reference"
+ },
+ "description": {
+ "type": "string"
+ }
+ },
+ "patternProperties": {
+ "^x-": true
+ },
+ "additionalProperties": false
+ },
+ "OAuthFlows": {
+ "type": "object",
+ "properties": {
+ "implicit": {
+ "$ref": "#/$defs/ImplicitOAuthFlow"
+ },
+ "password": {
+ "$ref": "#/$defs/PasswordOAuthFlow"
+ },
+ "clientCredentials": {
+ "$ref": "#/$defs/ClientCredentialsFlow"
+ },
+ "authorizationCode": {
+ "$ref": "#/$defs/AuthorizationCodeOAuthFlow"
+ }
+ },
+ "patternProperties": {
+ "^x-": true
+ },
+ "additionalProperties": false
+ },
+ "ImplicitOAuthFlow": {
+ "type": "object",
+ "required": [
+ "authorizationUrl",
+ "scopes"
+ ],
+ "properties": {
+ "authorizationUrl": {
+ "type": "string",
+ "format": "uri-reference"
+ },
+ "refreshUrl": {
+ "type": "string",
+ "format": "uri-reference"
+ },
+ "scopes": {
+ "type": "object",
+ "additionalProperties": {
+ "type": "string"
+ }
+ }
+ },
+ "patternProperties": {
+ "^x-": true
+ },
+ "additionalProperties": false
+ },
+ "PasswordOAuthFlow": {
+ "type": "object",
+ "required": [
+ "tokenUrl"
+ ],
+ "properties": {
+ "tokenUrl": {
+ "type": "string",
+ "format": "uri-reference"
+ },
+ "refreshUrl": {
+ "type": "string",
+ "format": "uri-reference"
+ },
+ "scopes": {
+ "type": "object",
+ "additionalProperties": {
+ "type": "string"
+ }
+ }
+ },
+ "patternProperties": {
+ "^x-": true
+ },
+ "additionalProperties": false
+ },
+ "ClientCredentialsFlow": {
+ "type": "object",
+ "required": [
+ "tokenUrl"
+ ],
+ "properties": {
+ "tokenUrl": {
+ "type": "string",
+ "format": "uri-reference"
+ },
+ "refreshUrl": {
+ "type": "string",
+ "format": "uri-reference"
+ },
+ "scopes": {
+ "type": "object",
+ "additionalProperties": {
+ "type": "string"
+ }
+ }
+ },
+ "patternProperties": {
+ "^x-": true
+ },
+ "additionalProperties": false
+ },
+ "AuthorizationCodeOAuthFlow": {
+ "type": "object",
+ "required": [
+ "authorizationUrl",
+ "tokenUrl"
+ ],
+ "properties": {
+ "authorizationUrl": {
+ "type": "string",
+ "format": "uri-reference"
+ },
+ "tokenUrl": {
+ "type": "string",
+ "format": "uri-reference"
+ },
+ "refreshUrl": {
+ "type": "string",
+ "format": "uri-reference"
+ },
+ "scopes": {
+ "type": "object",
+ "additionalProperties": {
+ "type": "string"
+ }
+ }
+ },
+ "patternProperties": {
+ "^x-": true
+ },
+ "additionalProperties": false
+ },
+ "Link": {
+ "type": "object",
+ "properties": {
+ "operationId": {
+ "type": "string"
+ },
+ "operationRef": {
+ "type": "string",
+ "format": "uri-reference"
+ },
+ "parameters": {
+ "type": "object",
+ "additionalProperties": {
+ }
+ },
+ "requestBody": {
+ },
+ "description": {
+ "type": "string"
+ },
+ "server": {
+ "$ref": "#/$defs/Server"
+ }
+ },
+ "patternProperties": {
+ "^x-": true
+ },
+ "additionalProperties": false,
+ "not": {
+ "description": "Operation Id and Operation Ref are mutually exclusive",
+ "required": [
+ "operationId",
+ "operationRef"
+ ]
+ }
+ },
+ "Callback": {
+ "type": "object",
+ "additionalProperties": {
+ "$ref": "#/$defs/PathItem"
+ },
+ "patternProperties": {
+ "^x-": true
+ }
+ },
+ "Encoding": {
+ "type": "object",
+ "properties": {
+ "contentType": {
+ "type": "string"
+ },
+ "headers": {
+ "type": "object",
+ "additionalProperties": {
+ "$ref": "#/$defs/Header"
+ }
+ },
+ "style": {
+ "type": "string",
+ "enum": [
+ "form",
+ "spaceDelimited",
+ "pipeDelimited",
+ "deepObject"
+ ]
+ },
+ "explode": {
+ "type": "boolean"
+ },
+ "allowReserved": {
+ "type": "boolean",
+ "default": false
+ }
+ },
+ "additionalProperties": false
+ }
+}
diff --git a/schemas/v3.1/meta/schema.json b/schemas/v3.1/meta/schema.json
new file mode 100644
index 0000000000..427af1213b
--- /dev/null
+++ b/schemas/v3.1/meta/schema.json
@@ -0,0 +1,26 @@
+{
+ "$schema": "http://json-schema.org/draft/2019-WIP/schema#",
+ "$id": "https://spec.openapis.org/oas/3.1/meta/schema#",
+ "$vocabulary": {
+ "https://json-schema.org/draft/2019-WIP/vocab/core": true,
+ "https://json-schema.org/draft/2019-WIP/vocab/applicator": true,
+ "https://json-schema.org/draft/2019-WIP/vocab/validation": true,
+ "https://json-schema.org/draft/2019-WIP/vocab/meta-data": true,
+ "https://json-schema.org/draft/2019-WIP/vocab/format": true,
+ "https://json-schema.org/draft/2019-WIP/vocab/content": true,
+ "https://spec.openapis.org/oas/3.1/vocab/oas ": true
+ },
+ "$recursiveAnchor": true,
+
+ "title": "OpenAPI Schema Object meta-schema",
+ "allOf": [
+ {"$ref": "http://json-schema.org/draft/2019-WIP/meta/core"},
+ {"$ref": "http://json-schema.org/draft/2019-WIP/meta/applicator"},
+ {"$ref": "http://json-schema.org/draft/2019-WIP/meta/validation"},
+ {"$ref": "http://json-schema.org/draft/2019-WIP/meta/meta-data"},
+ {"$ref": "http://json-schema.org/draft/2019-WIP/meta/format"},
+ {"$ref": "http://json-schema.org/draft/2019-WIP/meta/content"},
+ {"$ref": "oas"}
+ ],
+ "type": ["object", "boolean"]
+}
diff --git a/schemas/v3.1/schema.json b/schemas/v3.1/schema.json
new file mode 100644
index 0000000000..a1e452a15f
--- /dev/null
+++ b/schemas/v3.1/schema.json
@@ -0,0 +1,58 @@
+{
+ "$schema": "http://json-schema.org/draft/2019-WIP/schema#",
+ "$id": "https://spec.openapis.org/oas/3.1/schema",
+ "$vocabulary": {
+ "https://json-schema.org/draft/2019-WIP/vocab/core": true,
+ "https://json-schema.org/draft/2019-WIP/vocab/applicator": true,
+ "https://json-schema.org/draft/2019-WIP/vocab/validation": true,
+ "https://json-schema.org/draft/2019-WIP/vocab/meta-data": true,
+ "https://json-schema.org/draft/2019-WIP/vocab/format": true,
+ "https://json-schema.org/draft/2019-WIP/vocab/content": true
+ },
+ "$recursiveAnchor": true,
+
+ "description": "OpenAPI Specification 3.1.X.",
+ "type": "object",
+
+ "properties": {
+ "openapi": {
+ "type": "string",
+ "pattern": "^3\\.1\\.\\d(-.+)?$"
+ },
+ "info": {
+ "$ref": "meta/oas#/$defs/Info"
+ },
+ "externalDocs": {
+ "$ref": "meta/oas#/$defs/ExternalDocumentation"
+ },
+ "servers": {
+ "type": "array",
+ "items": {
+ "$ref": "meta/oas#/$defs/Server"
+ }
+ },
+ "security": {
+ "type": "array",
+ "items": {
+ "$ref": "meta/oas#/$defs/SecurityRequirement"
+ }
+ },
+ "tags": {
+ "type": "array",
+ "items": {
+ "$ref": "meta/oas#/$defs/Tag"
+ },
+ "uniqueItems": true
+ },
+ "paths": {
+ "$ref": "meta/oas#/$defs/Paths"
+ },
+ "components": {
+ "$ref": "meta/oas#/$defs/Components"
+ }
+ },
+ "patternProperties": {
+ "^x-": true
+ },
+ "additionalProperties": false
+}
diff --git a/versions/3.1.0.md b/versions/3.1.0.md
index c9d775a947..a523b52ae8 100644
--- a/versions/3.1.0.md
+++ b/versions/3.1.0.md
@@ -2276,11 +2276,16 @@ This object is an extended subset of the [JSON Schema Specification Wright Draft
For more information about the properties, see [JSON Schema Core](https://tools.ietf.org/html/draft-wright-json-schema-00) and [JSON Schema Validation](https://tools.ietf.org/html/draft-wright-json-schema-validation-00).
Unless stated otherwise, the property definitions follow the JSON Schema.
-##### Properties
+##### Properties
-The following properties are taken directly from the JSON Schema definition and follow the same specifications:
+OpenAPI v3.1 is a JSON Schema vocabulary which eetends JSON Schema Core and Validation vocabularies. As such any keyword available for those vocabularies is by definition available in OpenAPI, and will work the exact same way, including but not limited to:
- title
+- type
+- required
+- allOf
+- oneOf
+- andOf
- multipleOf
- maximum
- exclusiveMaximum
@@ -2294,46 +2299,50 @@ The following properties are taken directly from the JSON Schema definition and
- uniqueItems
- maxProperties
- minProperties
-- required
- enum
-
-The following properties are taken from the JSON Schema definition but their definitions were adjusted to the OpenAPI Specification.
-- type - Value MUST be a string. Multiple types via an array are not supported.
-- allOf - Inline or referenced schema MUST be of a [Schema Object](#schemaObject) and not a standard JSON Schema.
-- oneOf - Inline or referenced schema MUST be of a [Schema Object](#schemaObject) and not a standard JSON Schema.
-- anyOf - Inline or referenced schema MUST be of a [Schema Object](#schemaObject) and not a standard JSON Schema.
-- not - Inline or referenced schema MUST be of a [Schema Object](#schemaObject) and not a standard JSON Schema.
-- items - Value MUST be an object and not an array. Inline or referenced schema MUST be of a [Schema Object](#schemaObject) and not a standard JSON Schema. `items` MUST be present if the `type` is `array`.
-- properties - Property definitions MUST be a [Schema Object](#schemaObject) and not a standard JSON Schema (inline or referenced).
-- additionalProperties - Value can be boolean or object. Inline or referenced schema MUST be of a [Schema Object](#schemaObject) and not a standard JSON Schema. Consistent with JSON Schema, `additionalProperties` defaults to `true`.
+- propertyNames
+- contains
+- const
+- examples
+- if / then / else
+- dependentRequired / dependentSchemas
+- deprecated
+- additionalItems
+- additionalProperties
+- unevaluatedItems
+- unevaluatedProperties
+- maxContains
+- minContains
+- readOnly
+- writeOnly
+
+The following properties are taken from the JSON Schema definition but their definitions were adjusted to the OpenAPI Specification.
+
+- exclusiveMinimum - Value can be a numeric value just like JSON Schema, or for backwards compatibility with older drafts it can accept a boolean to act as a modifier to the `minimum` keyword. The numeric value usage is recommended.
+- exclusiveMaximum - Value can be a numeric value just like JSON Schema, or for backwards compatibility with older drafts it can accept a boolean to act as a modifier to the `minimum` keyword. The numeric value usage is recommended.
- description - [CommonMark syntax](http://spec.commonmark.org/) MAY be used for rich text representation.
- format - See [Data Type Formats](#dataTypeFormat) for further details. While relying on JSON Schema's defined formats, the OAS offers a few additional predefined formats.
-- default - The default value represents what would be assumed by the consumer of the input as the value of the schema if one is not provided. Unlike JSON Schema, the value MUST conform to the defined type for the Schema Object defined at the same level. For example, if `type` is `string`, then `default` can be `"foo"` but cannot be `1`.
+- default - The value MUST conform to the defined type for the Schema Object defined at the same level. For example, if `type` is `string`, then `default` can be `"foo"` but cannot be `1`. This differs from JSON Schema which only RECOMMENDS the default conforms to the schema.
Alternatively, any time a Schema Object can be used, a [Reference Object](#referenceObject) can be used in its place. This allows referencing definitions instead of defining them inline.
-Additional properties defined by the JSON Schema specification that are not mentioned here are strictly unsupported.
-
-Other than the JSON Schema subset fields, the following fields MAY be used for further schema documentation:
+In addition to the JSON Schema fields, the following OpenAPI vocabulary fields MAY be used for further schema documentation:
##### Fixed Fields
Field Name | Type | Description
---|:---:|---
-nullable | `boolean` | Allows sending a `null` value for the defined schema. Default value is `false`.
+nullable | `boolean` | Allows sending a `null` value for the defined schema. Default value is `false`. Deprecated. Move towards using `"type": "null"` & type arrays , e.g: `"type": ["string", "null"]`.
discriminator | [Discriminator Object](#discriminatorObject) | Adds support for polymorphism. The discriminator is an object name that is used to differentiate between other schemas which may satisfy the payload description. See [Composition and Inheritance](#schemaComposition) for more details.
-readOnly | `boolean` | Relevant only for Schema `"properties"` definitions. Declares the property as "read only". This means that it MAY be sent as part of a response but SHOULD NOT be sent as part of the request. If the property is marked as `readOnly` being `true` and is in the `required` list, the `required` will take effect on the response only. A property MUST NOT be marked as both `readOnly` and `writeOnly` being `true`. Default value is `false`.
-writeOnly | `boolean` | Relevant only for Schema `"properties"` definitions. Declares the property as "write only". Therefore, it MAY be sent as part of a request but SHOULD NOT be sent as part of the response. If the property is marked as `writeOnly` being `true` and is in the `required` list, the `required` will take effect on the request only. A property MUST NOT be marked as both `readOnly` and `writeOnly` being `true`. Default value is `false`.
xml | [XML Object](#xmlObject) | This MAY be used only on properties schemas. It has no effect on root schemas. Adds additional metadata to describe the XML representation of this property.
-externalDocs | [External Documentation Object](#externalDocumentationObject) | Additional external documentation for this schema.
+externalDocs | [External Documentation Object](#externalDocumentationObject) | Additional external documentation for this schema.
example | Any | A free-form property to include an example of an instance for this schema. To represent examples that cannot be naturally represented in JSON or YAML, a string value can be used to contain the example with escaping where necessary.
- deprecated | `boolean` | Specifies that a schema is deprecated and SHOULD be transitioned out of usage. Default value is `false`.
This object MAY be extended with [Specification Extensions](#specificationExtensions).
###### Composition and Inheritance (Polymorphism)
The OpenAPI Specification allows combining and extending model definitions using the `allOf` property of JSON Schema, in effect offering model composition.
-`allOf` takes an array of object definitions that are validated *independently* but together compose a single object.
+`allOf` takes an array of object definitions that are validated *independently* but together compose a single object.
While composition offers model extensibility, it does not imply a hierarchy between the models.
To support polymorphism, the OpenAPI Specification adds the `discriminator` field.