{
  "$schema": "http://json-schema.org/draft-07/schema#",
  "$id": "https://json.schemastore.org/specmatic.json",
  "title": "Specmatic Configuration",
  "description": "Configuration file for Specmatic, a contract-driven testing tool\nhttps://specmatic.io/documentation/",
  "type": "object",
  "required": ["version"],
  "properties": {
    "version": {
      "type": "integer",
      "default": 2
    }
  },
  "allOf": [
    {
      "if": {
        "properties": {
          "version": {
            "const": 3
          }
        }
      },
      "then": {
        "$ref": "#/definitions/ConfigV3"
      },
      "else": {
        "$ref": "#/definitions/ConfigV2"
      }
    }
  ],
  "definitions": {
    "ConfigV3": {
      "type": "object",
      "required": ["version"],
      "additionalProperties": false,
      "properties": {
        "version": {
          "type": "integer",
          "enum": [3]
        },
        "systemUnderTest": {
          "$ref": "#/definitions/SystemUnderTestServiceDefinition"
        },
        "dependencies": {
          "$ref": "#/definitions/DependenciesDefinition"
        },
        "proxies": {
          "$ref": "#/definitions/ProxyDefinitionsArray"
        },
        "mcp": {
          "$ref": "#/definitions/McpDefinition"
        },
        "specmatic": {
          "$ref": "#/definitions/SpecmaticDefinition"
        },
        "components": {
          "type": "object",
          "additionalProperties": false,
          "properties": {
            "sources": {
              "type": "object",
              "additionalProperties": {
                "$ref": "#/definitions/SourceSchema"
              }
            },
            "services": {
              "type": "object",
              "additionalProperties": {
                "$ref": "#/definitions/StaticServiceDefinition"
              }
            },
            "runOptions": {
              "type": "object",
              "additionalProperties": {
                "$ref": "#/definitions/RunOptions"
              }
            },
            "examples": {
              "$ref": "#/definitions/ExamplesConfiguration"
            },
            "dictionaries": {
              "type": "object",
              "additionalProperties": {
                "$ref": "#/definitions/DictionaryConfiguration"
              }
            },
            "adapters": {
              "type": "object",
              "additionalProperties": {
                "$ref": "#/definitions/AdapterConfiguration"
              }
            },
            "certificates": {
              "type": "object",
              "additionalProperties": {
                "$ref": "#/definitions/CertConfiguration"
              }
            },
            "settings": {
              "type": "object",
              "additionalProperties": {
                "oneOf": [
                  {
                    "$ref": "#/definitions/ConcreteSettings"
                  },
                  {
                    "$ref": "#/definitions/ModeSpecificSettings"
                  }
                ]
              }
            }
          }
        }
      }
    },
    "ConfigV2": {
      "type": "object",
      "required": ["version", "contracts"],
      "additionalProperties": false,
      "properties": {
        "version": {
          "type": "integer",
          "enum": [2],
          "description": "Configuration version for Specmatic"
        },
        "contracts": {
          "type": "array",
          "description": "Array of contract configurations",
          "items": {
            "$ref": "#/definitions/ContractConfig"
          }
        },
        "auth": {
          "$ref": "#/definitions/Auth",
          "description": "Authentication configuration"
        },
        "pipeline": {
          "$ref": "#/definitions/Pipeline",
          "description": "Pipeline configuration for Azure DevOps"
        },
        "environments": {
          "type": "object",
          "description": "Environment-specific configurations",
          "additionalProperties": {
            "$ref": "#/definitions/Environment"
          }
        },
        "hooks": {
          "type": "object",
          "description": "Custom hooks configuration",
          "additionalProperties": {
            "type": "string"
          }
        },
        "repository": {
          "$ref": "#/definitions/RepositoryInfo",
          "description": "Repository information"
        },
        "report": {
          "$ref": "#/definitions/ReportConfigurationDetails",
          "description": "Report generation configuration"
        },
        "security": {
          "$ref": "#/definitions/SecurityConfiguration",
          "description": "Security configuration for API testing"
        },
        "test": {
          "$ref": "#/definitions/TestConfiguration",
          "description": "Test execution configuration"
        },
        "stub": {
          "$ref": "#/definitions/StubConfiguration",
          "description": "Stub/mock server configuration"
        },
        "virtualService": {
          "$ref": "#/definitions/VirtualServiceConfiguration",
          "description": "Virtual service configuration"
        },
        "examples": {
          "type": "array",
          "description": "List of example file paths",
          "items": {
            "type": "string"
          }
        },
        "workflow": {
          "$ref": "#/definitions/WorkflowConfiguration",
          "description": "Workflow configuration for ID management"
        },
        "ignoreInlineExamples": {
          "type": ["boolean", "null"],
          "description": "Whether to ignore inline examples in specifications"
        },
        "additionalExampleParamsFilePath": {
          "type": ["string", "null"],
          "description": "Path to additional example parameters file"
        },
        "attributeSelectionPattern": {
          "$ref": "#/definitions/AttributeSelectionPattern",
          "description": "Pattern for selecting attributes in responses"
        },
        "allPatternsMandatory": {
          "type": ["boolean", "null"],
          "description": "Whether all patterns are mandatory"
        },
        "defaultPatternValues": {
          "type": "object",
          "description": "Default values for patterns",
          "additionalProperties": true
        },
        "disable_telemetry": {
          "type": ["boolean"],
          "description": "Whether to disable telemetry data collection"
        }
      }
    },
    "ContractConfig": {
      "type": "object",
      "title": "ContractConfig",
      "description": "Defines a contract source and its provides/consumes configuration.",
      "additionalProperties": false,
      "properties": {
        "git": {
          "type": "object",
          "description": "Git contract source details.",
          "additionalProperties": false,
          "properties": {
            "url": {
              "type": ["string", "null"],
              "description": "URL of the git repository."
            },
            "branch": {
              "type": ["string", "null"],
              "description": "Branch name in the git repository."
            },
            "matchBranch": {
              "type": "boolean"
            }
          },
          "required": []
        },
        "filesystem": {
          "type": "object",
          "description": "Filesystem contract source details.",
          "additionalProperties": false,
          "properties": {
            "directory": {
              "type": "string",
              "description": "Directory path for contract files."
            }
          },
          "required": []
        },
        "provides": {
          "type": ["array", "null"],
          "description": "List of specs provided for testing. Each entry can be a string or an object.",
          "items": {
            "anyOf": [
              {
                "$ref": "#/definitions/StringValue"
              },
              {
                "$ref": "#/definitions/ObjectValueFullUrl"
              },
              {
                "$ref": "#/definitions/ObjectValuePartialUrl"
              },
              {
                "$ref": "#/definitions/ConfigValue"
              }
            ]
          }
        },
        "consumes": {
          "type": ["array", "null"],
          "description": "List of specs consumed for stubbing. Each entry can be a string or an object.",
          "items": {
            "oneOf": [
              {
                "$ref": "#/definitions/StringValue"
              },
              {
                "$ref": "#/definitions/ObjectValueFullUrl"
              },
              {
                "$ref": "#/definitions/ObjectValuePartialUrl"
              },
              {
                "$ref": "#/definitions/ConfigValue"
              }
            ]
          }
        }
      },
      "required": []
    },
    "Auth": {
      "type": "object",
      "additionalProperties": false,
      "description": "Authentication configuration",
      "properties": {
        "bearer-file": {
          "type": "string",
          "description": "Path to file containing bearer token"
        },
        "bearer-environment-variable": {
          "type": ["string", "null"],
          "description": "Environment variable name containing bearer token"
        }
      }
    },
    "Pipeline": {
      "type": "object",
      "additionalProperties": false,
      "description": "Azure DevOps pipeline configuration",
      "properties": {
        "provider": {
          "type": "string",
          "enum": ["azure"],
          "description": "Pipeline provider type"
        },
        "organization": {
          "type": "string",
          "description": "Azure DevOps organization name"
        },
        "project": {
          "type": "string",
          "description": "Azure DevOps project name"
        },
        "definitionId": {
          "type": "integer",
          "description": "Pipeline definition ID"
        }
      }
    },
    "Environment": {
      "type": "object",
      "additionalProperties": false,
      "description": "Environment-specific configuration",
      "properties": {
        "baseurls": {
          "type": ["object", "null"],
          "description": "Base URLs for different services",
          "additionalProperties": {
            "type": "string"
          }
        },
        "variables": {
          "type": ["object", "null"],
          "description": "Environment variables",
          "additionalProperties": {
            "type": "string"
          }
        }
      }
    },
    "RepositoryInfo": {
      "type": "object",
      "additionalProperties": false,
      "description": "Repository information",
      "properties": {
        "provider": {
          "type": "string",
          "description": "Repository provider type"
        },
        "collectionName": {
          "type": "string",
          "description": "Name of the collection"
        }
      }
    },
    "ReportConfigurationDetails": {
      "type": "object",
      "additionalProperties": false,
      "description": "Report generation configuration",
      "properties": {
        "formatters": {
          "type": ["array", "null"],
          "description": "List of report formatters",
          "items": {
            "$ref": "#/definitions/ReportFormatterDetails"
          },
          "deprecated": true
        },
        "types": {
          "$ref": "#/definitions/ReportTypes"
        }
      }
    },
    "ReportFormatterDetails": {
      "type": "object",
      "additionalProperties": false,
      "deprecated": true,
      "description": "Configuration for a specific report formatter",
      "properties": {
        "type": {
          "type": ["string", "null"],
          "enum": ["text", "html", "ctrf"],
          "description": "Type of report formatter"
        },
        "layout": {
          "type": ["string", "null"],
          "enum": ["table"],
          "description": "Layout style for the report"
        },
        "lite": {
          "type": ["boolean", "null"],
          "description": "Whether to generate a lite version of the report"
        },
        "title": {
          "type": ["string", "null"],
          "description": "Title for the report"
        },
        "logo": {
          "type": ["string", "null"],
          "description": "Path to logo image for the report"
        },
        "logoAltText": {
          "type": ["string", "null"],
          "description": "Alt text for the logo"
        },
        "heading": {
          "type": ["string", "null"],
          "description": "Heading for the report"
        },
        "outputDirectory": {
          "type": ["string", "null"],
          "description": "Directory to output the report"
        }
      }
    },
    "ReportTypes": {
      "type": "object",
      "additionalProperties": false,
      "description": "Configuration for different report types",
      "properties": {
        "APICoverage": {
          "$ref": "#/definitions/APICoverage"
        }
      }
    },
    "APICoverage": {
      "type": "object",
      "additionalProperties": false,
      "description": "API coverage report configuration",
      "properties": {
        "OpenAPI": {
          "$ref": "#/definitions/APICoverageConfiguration"
        }
      }
    },
    "APICoverageConfiguration": {
      "type": "object",
      "additionalProperties": false,
      "description": "OpenAPI coverage configuration",
      "properties": {
        "successCriteria": {
          "$ref": "#/definitions/SuccessCriteria"
        },
        "excludedEndpoints": {
          "type": ["array", "null"],
          "description": "List of endpoints to exclude from coverage",
          "items": {
            "type": "string"
          }
        }
      }
    },
    "SuccessCriteria": {
      "type": "object",
      "additionalProperties": false,
      "description": "Success criteria for API coverage",
      "properties": {
        "minThresholdPercentage": {
          "type": ["integer", "null"],
          "description": "Minimum coverage percentage threshold"
        },
        "maxMissedEndpointsInSpec": {
          "type": ["integer", "null"],
          "description": "Maximum number of missed endpoints allowed"
        },
        "enforce": {
          "type": ["boolean", "null"],
          "description": "Whether to enforce the success criteria"
        }
      }
    },
    "SecurityConfiguration": {
      "type": "object",
      "additionalProperties": false,
      "description": "Security configuration",
      "properties": {
        "OpenAPI": {
          "$ref": "#/definitions/OpenAPISecurityConfiguration"
        }
      }
    },
    "OpenAPISecurityConfiguration": {
      "type": "object",
      "additionalProperties": false,
      "description": "OpenAPI security configuration",
      "properties": {
        "securitySchemes": {
          "type": "object",
          "description": "Security scheme configurations",
          "additionalProperties": {
            "$ref": "#/definitions/SecuritySchemeConfiguration"
          }
        }
      }
    },
    "SecuritySchemeConfiguration": {
      "type": "object",
      "description": "Configuration for a security scheme",
      "additionalProperties": false,
      "properties": {
        "type": {
          "type": "string",
          "enum": ["oauth2", "basicAuth", "bearer", "apiKey"],
          "description": "Type of security scheme"
        },
        "token": {
          "type": ["string", "null"],
          "description": "Authentication token"
        },
        "value": {
          "type": ["string", "null"],
          "description": "Authentication value"
        }
      }
    },
    "TestConfiguration": {
      "type": "object",
      "description": "Test execution configuration",
      "additionalProperties": false,
      "properties": {
        "resiliencyTests": {
          "$ref": "#/definitions/ResiliencyTestsConfig"
        },
        "validateResponseValues": {
          "type": ["boolean", "null"],
          "description": "Whether to validate response values"
        },
        "allowExtensibleSchema": {
          "type": ["boolean", "null"],
          "description": "Whether to allow extensible schema validation"
        },
        "timeoutInMilliseconds": {
          "type": ["integer", "null"],
          "description": "Test timeout in milliseconds"
        },
        "strictMode": {
          "type": ["boolean", "null"],
          "description": "Whether to enable strict mode for contract testing"
        },
        "https": {
          "$ref": "#/definitions/CertConfiguration"
        }
      }
    },
    "ResiliencyTestsConfig": {
      "type": "object",
      "description": "Configuration for resiliency tests",
      "additionalProperties": false,
      "properties": {
        "enable": {
          "type": ["string", "null"],
          "enum": ["all", "positiveOnly", "none"],
          "description": "Level of resiliency tests to enable"
        }
      }
    },
    "StubConfiguration": {
      "type": "object",
      "description": "Stub/mock server configuration",
      "additionalProperties": false,
      "properties": {
        "generative": {
          "type": ["boolean", "null"],
          "description": "Whether to enable generative stubbing"
        },
        "delayInMilliseconds": {
          "type": ["integer", "null"],
          "description": "Delay to add to stub responses in milliseconds"
        },
        "dictionary": {
          "type": ["string", "null"],
          "description": "Path to dictionary file for generative stubbing"
        },
        "includeMandatoryAndRequestedKeysInResponse": {
          "type": ["boolean", "null"],
          "description": "Whether to include mandatory and requested keys in response"
        },
        "startTimeoutInMilliseconds": {
          "type": ["integer", "null"],
          "description": "Timeout for stub server startup in milliseconds"
        },
        "hotReload": {
          "type": ["string", "null"],
          "description": "Hot reload configuration"
        },
        "strictMode": {
          "type": ["boolean", "null"],
          "description": "Whether to enable strict mode for stubbing"
        },
        "https": {
          "$ref": "#/definitions/CertConfiguration"
        }
      }
    },
    "VirtualServiceConfiguration": {
      "type": "object",
      "description": "Virtual service configuration",
      "additionalProperties": false,
      "properties": {
        "nonPatchableKeys": {
          "type": "array",
          "description": "List of keys that cannot be patched",
          "items": {
            "type": "string"
          }
        }
      }
    },
    "WorkflowConfiguration": {
      "type": "object",
      "description": "Workflow configuration for ID management",
      "additionalProperties": false,
      "properties": {
        "ids": {
          "type": "object",
          "description": "ID operation configurations",
          "additionalProperties": {
            "$ref": "#/definitions/WorkflowIDOperation"
          }
        }
      }
    },
    "WorkflowIDOperation": {
      "type": "object",
      "description": "Configuration for ID operations in workflow",
      "additionalProperties": false,
      "properties": {
        "extract": {
          "type": ["string", "null"],
          "description": "JSONPath expression to extract ID"
        },
        "use": {
          "type": ["string", "null"],
          "description": "JSONPath expression to use extracted ID"
        }
      }
    },
    "AttributeSelectionPattern": {
      "type": "object",
      "additionalProperties": false,
      "description": "Pattern for selecting attributes in API responses",
      "properties": {
        "default_fields": {
          "type": ["array", "null"],
          "description": "Default fields to include",
          "items": {
            "type": "string"
          }
        },
        "query_param_key": {
          "type": ["string", "null"],
          "description": "Query parameter key for field selection"
        }
      }
    },
    "SpecsArray": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "minItems": 1
    },
    "StringValue": {
      "type": "string",
      "description": "A single spec path."
    },
    "ObjectValueFullUrl": {
      "type": "object",
      "additionalProperties": false,
      "required": ["baseUrl", "specs"],
      "properties": {
        "baseUrl": {
          "type": "string"
        },
        "specs": {
          "$ref": "#/definitions/SpecsArray"
        },
        "resiliencyTests": {
          "$ref": "#/definitions/ResiliencyTestsConfig"
        }
      }
    },
    "ObjectValuePartialUrl": {
      "type": "object",
      "required": ["specs"],
      "anyOf": [
        {
          "required": ["host"],
          "properties": {
            "host": {
              "type": "string"
            }
          }
        },
        {
          "required": ["port"],
          "properties": {
            "port": {
              "type": "integer"
            }
          }
        }
      ],
      "properties": {
        "specs": {
          "$ref": "#/definitions/SpecsArray"
        },
        "host": {
          "type": "string"
        },
        "port": {
          "type": "integer"
        },
        "basePath": {
          "type": "string"
        },
        "resiliencyTests": {
          "$ref": "#/definitions/ResiliencyTestsConfig"
        }
      }
    },
    "ConfigValue": {
      "type": "object",
      "additionalProperties": false,
      "required": ["specs", "specType", "config"],
      "properties": {
        "specs": {
          "$ref": "#/definitions/SpecsArray"
        },
        "specType": {
          "type": "string"
        },
        "config": {
          "type": "object",
          "additionalProperties": {
            "oneOf": [
              {
                "type": "string"
              },
              {
                "type": "integer"
              },
              {
                "type": "number"
              },
              {
                "type": "boolean"
              },
              {
                "type": "array",
                "items": {
                  "$ref": "#/definitions/ConfigValueScalarOrComposite"
                }
              },
              {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/definitions/ConfigValueScalarOrComposite"
                }
              }
            ]
          }
        }
      }
    },
    "ConfigValueScalarOrComposite": {
      "oneOf": [
        {
          "type": "string"
        },
        {
          "type": "integer"
        },
        {
          "type": "number"
        },
        {
          "type": "boolean"
        },
        {
          "type": "array",
          "items": {
            "$ref": "#/definitions/ConfigValueScalarOrComposite"
          }
        },
        {
          "type": "object",
          "additionalProperties": {
            "$ref": "#/definitions/ConfigValueScalarOrComposite"
          }
        }
      ]
    },
    "SubstitutionExpression": {
      "type": "string",
      "pattern": "^\\$\\{[^}]+\\}$"
    },
    "GuardedSubstitutionString": {
      "type": "string",
      "allOf": [
        {
          "if": {
            "pattern": "^\\$\\{"
          },
          "then": {
            "$ref": "#/definitions/SubstitutionExpression"
          },
          "else": {}
        }
      ]
    },
    "SubstitutableString": {
      "type": "string"
    },
    "SubstitutableStringArray": {
      "type": "array",
      "items": {
        "$ref": "#/definitions/SubstitutableString"
      }
    },
    "SubstitutableInteger": {
      "anyOf": [
        {
          "type": "integer"
        },
        {
          "$ref": "#/definitions/GuardedSubstitutionString"
        }
      ]
    },
    "SubstitutableFloat": {
      "oneOf": [
        {
          "type": "number"
        },
        {
          "$ref": "#/definitions/GuardedSubstitutionString"
        }
      ]
    },
    "SubstitutableBoolean": {
      "oneOf": [
        {
          "type": "boolean"
        },
        {
          "$ref": "#/definitions/GuardedSubstitutionString"
        }
      ]
    },
    "SubstitutableStringOrArray": {
      "oneOf": [
        {
          "$ref": "#/definitions/SubstitutableString"
        },
        {
          "$ref": "#/definitions/SubstitutableStringArray"
        }
      ]
    },
    "Reference": {
      "type": "object",
      "additionalProperties": true,
      "properties": {
        "$ref": {
          "type": "string",
          "format": "uri-reference"
        }
      }
    },
    "DependenciesDefinition": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "services": {
          "$ref": "#/definitions/MockRuntimeServiceDefinitionOrRefArray"
        },
        "data": {
          "$ref": "#/definitions/DataDefinition"
        },
        "settings": {
          "$ref": "#/definitions/MockSettingsOrRef"
        }
      }
    },
    "MockRuntimeServiceDefinitionOrRefArray": {
      "type": "array",
      "items": {
        "type": "object",
        "additionalProperties": false,
        "required": ["service"],
        "properties": {
          "service": {
            "$ref": "#/definitions/MockRuntimeServiceDefinition"
          }
        }
      }
    },
    "MockRuntimeServiceDefinition": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "$ref": {
          "type": "string"
        },
        "description": {
          "type": "string"
        },
        "definitions": {
          "$ref": "#/definitions/SpecificationStaticDefinitionArray"
        },
        "runOptions": {
          "$ref": "#/definitions/MockRunOptionsOrRef"
        },
        "data": {
          "$ref": "#/definitions/DataDefinition"
        },
        "settings": {
          "$ref": "#/definitions/MockSettingsOrRef"
        }
      },
      "oneOf": [
        {
          "required": ["$ref"],
          "properties": {
            "$ref": {}
          },
          "not": {
            "required": ["definitions"],
            "properties": {
              "definitions": {}
            }
          }
        },
        {
          "required": ["definitions"],
          "properties": {
            "definitions": {}
          },
          "not": {
            "required": ["$ref"],
            "properties": {
              "$ref": {}
            }
          }
        }
      ]
    },
    "SystemUnderTestServiceDefinition": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "service": {
          "$ref": "#/definitions/TestRuntimeServiceDefinition"
        }
      }
    },
    "TestRuntimeServiceDefinition": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "$ref": {
          "type": "string"
        },
        "definitions": {
          "$ref": "#/definitions/SpecificationStaticDefinitionArray"
        },
        "description": {
          "type": "string"
        },
        "runOptions": {
          "$ref": "#/definitions/TestRunOptionsOrRef"
        },
        "data": {
          "$ref": "#/definitions/DataDefinition"
        },
        "settings": {
          "$ref": "#/definitions/TestSettingsOrRef"
        }
      },
      "oneOf": [
        {
          "required": ["$ref"],
          "properties": {
            "$ref": {}
          },
          "not": {
            "required": ["definitions"],
            "properties": {
              "definitions": {}
            }
          }
        },
        {
          "required": ["definitions"],
          "properties": {
            "definitions": {}
          },
          "not": {
            "required": ["$ref"],
            "properties": {
              "$ref": {}
            }
          }
        }
      ]
    },
    "DataDefinition": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "examples": {
          "$ref": "#/definitions/ArrayExampleConfigurationOrRef"
        },
        "dictionary": {
          "$ref": "#/definitions/DictionaryConfigurationOrRef"
        },
        "adapters": {
          "$ref": "#/definitions/AdapterConfigurationOrRef"
        }
      }
    },
    "ProxyDefinitionsArray": {
      "type": "array",
      "items": {
        "type": "object",
        "additionalProperties": false,
        "required": ["proxy"],
        "properties": {
          "proxy": {
            "$ref": "#/definitions/ProxyDefinition"
          }
        }
      }
    },
    "ProxyDefinition": {
      "type": "object",
      "additionalProperties": false,
      "required": ["target"],
      "properties": {
        "target": {
          "$ref": "#/definitions/SubstitutableString"
        },
        "baseUrl": {
          "$ref": "#/definitions/SubstitutableString"
        },
        "timeoutInMilliseconds": {
          "$ref": "#/definitions/SubstitutableInteger"
        },
        "adapters": {
          "$ref": "#/definitions/AdapterConfigurationOrRef"
        },
        "mock": {
          "$ref": "#/definitions/SubstitutableStringOrArray"
        },
        "cert": {
          "$ref": "#/definitions/CertConfigurationOrRef"
        },
        "recordingsDirectory": {
          "$ref": "#/definitions/SubstitutableString"
        }
      }
    },
    "McpDefinition": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "test": {
          "$ref": "#/definitions/McpTestRunOptions"
        }
      }
    },
    "McpTestRunOptions": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "baseUrl": {
          "$ref": "#/definitions/SubstitutableString"
        },
        "transportKind": {
          "anyOf": [
            {
              "type": "string",
              "enum": ["STREAMABLE_HTTP"]
            },
            {
              "$ref": "#/definitions/SubstitutableString"
            }
          ]
        },
        "enableResiliencyTests": {
          "$ref": "#/definitions/SubstitutableBoolean"
        },
        "dictionaryFile": {
          "$ref": "#/definitions/SubstitutableString"
        },
        "bearerToken": {
          "$ref": "#/definitions/SubstitutableString"
        },
        "filterTools": {
          "$ref": "#/definitions/SubstitutableStringArray"
        },
        "skipTools": {
          "$ref": "#/definitions/SubstitutableStringArray"
        }
      }
    },
    "SpecmaticDefinition": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "license": {
          "$ref": "#/definitions/LicenseDefinition"
        },
        "governance": {
          "type": "object",
          "additionalProperties": false,
          "properties": {
            "report": {
              "$ref": "#/definitions/ReportsDefinition"
            },
            "successCriteria": {
              "$ref": "#/definitions/SuccessCriteriaDefinition"
            }
          }
        },
        "settings": {
          "$ref": "#/definitions/ConcreteSettingsOrRef"
        }
      }
    },
    "LicenseDefinition": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "path": {
          "$ref": "#/definitions/SubstitutableString"
        }
      }
    },
    "ReportsDefinition": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "formats": {
          "oneOf": [
            {
              "type": "array",
              "items": {
                "type": "string",
                "enum": ["html", "ctrf"]
              }
            },
            {
              "$ref": "#/definitions/SubstitutableString"
            }
          ]
        },
        "outputDirectory": {
          "$ref": "#/definitions/SubstitutableString"
        }
      }
    },
    "SuccessCriteriaDefinition": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "minCoveragePercentage": {
          "$ref": "#/definitions/SubstitutableFloat"
        },
        "maxMissedOperationsInSpec": {
          "$ref": "#/definitions/SubstitutableInteger"
        },
        "enforce": {
          "$ref": "#/definitions/SubstitutableBoolean"
        }
      }
    },
    "StaticServiceDefinition": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "description": {
          "type": "string"
        },
        "definitions": {
          "$ref": "#/definitions/SpecificationStaticDefinitionArray"
        }
      }
    },
    "SpecificationStaticDefinitionArray": {
      "type": "array",
      "items": {
        "type": "object",
        "additionalProperties": false,
        "required": ["definition"],
        "properties": {
          "definition": {
            "$ref": "#/definitions/SpecificationStaticDefinition"
          }
        }
      }
    },
    "SpecificationStaticDefinition": {
      "type": "object",
      "additionalProperties": false,
      "required": ["source", "specs"],
      "properties": {
        "source": {
          "$ref": "#/definitions/SourceSchemaOrRef"
        },
        "specs": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/SpecificationSchema"
          }
        }
      }
    },
    "SpecificationSchema": {
      "oneOf": [
        {
          "$ref": "#/definitions/SpecificationPath"
        },
        {
          "type": "object",
          "additionalProperties": false,
          "properties": {
            "spec": {
              "$ref": "#/definitions/SpecificationObject"
            }
          }
        }
      ]
    },
    "SpecificationPath": {
      "type": "string"
    },
    "SpecificationObject": {
      "type": "object",
      "additionalProperties": false,
      "required": ["path"],
      "properties": {
        "id": {
          "type": "string"
        },
        "path": {
          "type": "string"
        },
        "urlPathPrefix": {
          "$ref": "#/definitions/SubstitutableString"
        }
      }
    },
    "SourceSchemaOrRef": {
      "if": {
        "type": "object",
        "required": ["$ref"],
        "properties": {
          "$ref": {
            "type": "string"
          }
        }
      },
      "then": {
        "$ref": "#/definitions/Reference"
      },
      "else": {
        "$ref": "#/definitions/SourceSchema"
      }
    },
    "SourceSchema": {
      "oneOf": [
        {
          "$ref": "#/definitions/GitSourceSchema"
        },
        {
          "$ref": "#/definitions/FileSystemSourceSchema"
        }
      ]
    },
    "GitSourceSchema": {
      "type": "object",
      "additionalProperties": false,
      "required": ["git"],
      "properties": {
        "git": {
          "$ref": "#/definitions/GitSourceOptions"
        }
      }
    },
    "GitSourceOptions": {
      "type": "object",
      "additionalProperties": false,
      "required": ["url"],
      "properties": {
        "url": {
          "$ref": "#/definitions/SubstitutableString"
        },
        "branch": {
          "$ref": "#/definitions/SubstitutableString"
        },
        "matchBranch": {
          "$ref": "#/definitions/SubstitutableBoolean"
        },
        "auth": {
          "$ref": "#/definitions/GitSourceAuthentication"
        }
      }
    },
    "GitSourceAuthentication": {
      "oneOf": [
        {
          "$ref": "#/definitions/GitSourceBearerFileAuthentication"
        },
        {
          "$ref": "#/definitions/GitSourceBearerEnvAuthentication"
        },
        {
          "$ref": "#/definitions/GitSourcePersonalAccessTokenAuthentication"
        }
      ]
    },
    "GitSourceBearerFileAuthentication": {
      "type": "object",
      "additionalProperties": false,
      "required": ["bearerFile"],
      "properties": {
        "bearerFile": {
          "$ref": "#/definitions/SubstitutableString"
        }
      }
    },
    "GitSourceBearerEnvAuthentication": {
      "type": "object",
      "additionalProperties": false,
      "required": ["bearerEnvironmentVariable"],
      "properties": {
        "bearerEnvironmentVariable": {
          "$ref": "#/definitions/SubstitutableString"
        }
      }
    },
    "GitSourcePersonalAccessTokenAuthentication": {
      "type": "object",
      "additionalProperties": false,
      "required": ["personalAccessToken"],
      "properties": {
        "personalAccessToken": {
          "$ref": "#/definitions/SubstitutableString"
        }
      }
    },
    "FileSystemSourceSchema": {
      "type": "object",
      "additionalProperties": false,
      "required": ["filesystem"],
      "properties": {
        "filesystem": {
          "$ref": "#/definitions/FileSystemSourceOptions"
        }
      }
    },
    "FileSystemSourceOptions": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "directory": {
          "$ref": "#/definitions/SubstitutableString"
        }
      }
    },
    "RunOptions": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "openapi": {
          "$ref": "#/definitions/OpenApiRunOptions"
        },
        "wsdl": {
          "$ref": "#/definitions/WsdlRunOptions"
        },
        "asyncapi": {
          "$ref": "#/definitions/AsyncApiRunOptions"
        },
        "graphqlsdl": {
          "$ref": "#/definitions/GraphQLSdlRunOptions"
        },
        "protobuf": {
          "$ref": "#/definitions/ProtobufRunOptions"
        }
      }
    },
    "TestRunOptionsOrRef": {
      "if": {
        "type": "object",
        "required": ["$ref"],
        "properties": {
          "$ref": {
            "type": "string"
          }
        }
      },
      "then": {
        "$ref": "#/definitions/Reference"
      },
      "else": {
        "$ref": "#/definitions/TestRunOptions"
      }
    },
    "TestRunOptions": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "openapi": {
          "$ref": "#/definitions/OpenApiTestRunOptions"
        },
        "wsdl": {
          "$ref": "#/definitions/WsdlTestRunOptions"
        },
        "asyncapi": {
          "$ref": "#/definitions/AsyncApiTestRunOptions"
        },
        "graphqlsdl": {
          "$ref": "#/definitions/GraphqlSdlTestRunOptions"
        },
        "protobuf": {
          "$ref": "#/definitions/ProtobufTestRunOptions"
        }
      }
    },
    "MockRunOptionsOrRef": {
      "if": {
        "type": "object",
        "required": ["$ref"],
        "properties": {
          "$ref": {
            "type": "string"
          }
        }
      },
      "then": {
        "$ref": "#/definitions/Reference"
      },
      "else": {
        "$ref": "#/definitions/MockRunOptions"
      }
    },
    "MockRunOptions": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "openapi": {
          "$ref": "#/definitions/OpenApiMockRunOptions"
        },
        "wsdl": {
          "$ref": "#/definitions/WsdlMockRunOptions"
        },
        "asyncapi": {
          "$ref": "#/definitions/AsyncApiMockRunOptions"
        },
        "graphqlsdl": {
          "$ref": "#/definitions/GraphqlSdlMockRunOptions"
        },
        "protobuf": {
          "$ref": "#/definitions/ProtobufMockRunOptions"
        }
      }
    },
    "OpenApiRunOptions": {
      "type": "object",
      "required": ["type"],
      "if": {
        "properties": {
          "type": {
            "const": "test"
          }
        }
      },
      "then": {
        "$ref": "#/definitions/OpenApiTestRunOptions"
      },
      "else": {
        "$ref": "#/definitions/OpenApiMockRunOptions"
      }
    },
    "AsyncApiRunOptions": {
      "type": "object",
      "required": ["type"],
      "if": {
        "properties": {
          "type": {
            "const": "test"
          }
        }
      },
      "then": {
        "$ref": "#/definitions/AsyncApiTestRunOptions"
      },
      "else": {
        "$ref": "#/definitions/AsyncApiMockRunOptions"
      }
    },
    "GraphQLSdlRunOptions": {
      "type": "object",
      "required": ["type"],
      "if": {
        "properties": {
          "type": {
            "const": "test"
          }
        }
      },
      "then": {
        "$ref": "#/definitions/GraphqlSdlTestRunOptions"
      },
      "else": {
        "$ref": "#/definitions/GraphqlSdlMockRunOptions"
      }
    },
    "ProtobufRunOptions": {
      "type": "object",
      "required": ["type"],
      "if": {
        "properties": {
          "type": {
            "const": "test"
          }
        }
      },
      "then": {
        "$ref": "#/definitions/ProtobufTestRunOptions"
      },
      "else": {
        "$ref": "#/definitions/ProtobufMockRunOptions"
      }
    },
    "WsdlRunOptions": {
      "type": "object",
      "required": ["type"],
      "if": {
        "properties": {
          "type": {
            "const": "test"
          }
        }
      },
      "then": {
        "$ref": "#/definitions/WsdlTestRunOptions"
      },
      "else": {
        "$ref": "#/definitions/WsdlMockRunOptions"
      }
    },
    "WsdlTestRunOptions": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "type": {
          "const": "test"
        },
        "host": {
          "$ref": "#/definitions/SubstitutableString"
        },
        "port": {
          "$ref": "#/definitions/SubstitutableInteger"
        },
        "baseUrl": {
          "$ref": "#/definitions/SubstitutableString"
        },
        "specs": {
          "$ref": "#/definitions/SpecificationRuntimeDefinitionArray"
        }
      }
    },
    "WsdlMockRunOptions": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "type": {
          "const": "mock"
        },
        "host": {
          "$ref": "#/definitions/SubstitutableString"
        },
        "port": {
          "$ref": "#/definitions/SubstitutableInteger"
        },
        "baseUrl": {
          "$ref": "#/definitions/SubstitutableString"
        },
        "cert": {
          "$ref": "#/definitions/CertConfigurationOrRef"
        },
        "specs": {
          "$ref": "#/definitions/SpecificationRuntimeDefinitionArray"
        }
      }
    },
    "AsyncApiTestRunOptions": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "type": {
          "const": "test"
        },
        "replyTimeout": {
          "$ref": "#/definitions/SubstitutableInteger"
        },
        "subscriberReadinessWaitTimeout": {
          "$ref": "#/definitions/SubstitutableInteger"
        },
        "servers": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/AsyncApiServerDefinition"
          }
        },
        "schemaRegistry": {
          "$ref": "#/definitions/AsyncApiSchemaRegistry"
        },
        "specs": {
          "$ref": "#/definitions/SpecificationRuntimeDefinitionArray"
        }
      }
    },
    "AsyncApiServerDefinition": {
      "type": "object",
      "additionalProperties": false,
      "required": ["host", "protocol"],
      "properties": {
        "host": {
          "$ref": "#/definitions/SubstitutableString"
        },
        "protocol": {
          "$ref": "#/definitions/SubstitutableString"
        },
        "adminCredentials": {
          "$ref": "#/definitions/FreeFormObject"
        },
        "client": {
          "type": "object",
          "additionalProperties": false,
          "properties": {
            "consumer": {
              "$ref": "#/definitions/CertConfigurationOrRef"
            },
            "producer": {
              "$ref": "#/definitions/CertConfigurationOrRef"
            }
          }
        }
      }
    },
    "AsyncApiMockRunOptions": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "type": {
          "const": "mock"
        },
        "specs": {
          "$ref": "#/definitions/SpecificationRuntimeDefinitionArray"
        },
        "servers": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/AsyncApiServerDefinition"
          }
        },
        "schemaRegistry": {
          "$ref": "#/definitions/AsyncApiSchemaRegistry"
        },
        "inMemoryBroker": {
          "type": "object",
          "additionalProperties": false,
          "properties": {
            "host": {
              "$ref": "#/definitions/SubstitutableString"
            },
            "port": {
              "$ref": "#/definitions/SubstitutableInteger"
            },
            "logDir": {
              "$ref": "#/definitions/SubstitutableString"
            }
          }
        }
      }
    },
    "AsyncApiSchemaRegistry": {
      "type": "object",
      "additionalProperties": false,
      "required": ["kind"],
      "properties": {
        "kind": {
          "anyOf": [
            {
              "type": "string",
              "enum": ["CONFLUENT", "DEFAULT"]
            },
            {
              "$ref": "#/definitions/SubstitutableString"
            }
          ]
        },
        "url": {
          "$ref": "#/definitions/SubstitutableString"
        },
        "username": {
          "$ref": "#/definitions/SubstitutableString"
        },
        "password": {
          "$ref": "#/definitions/SubstitutableString"
        }
      }
    },
    "GraphqlSdlTestRunOptions": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "type": {
          "const": "test"
        },
        "host": {
          "$ref": "#/definitions/SubstitutableString"
        },
        "port": {
          "$ref": "#/definitions/SubstitutableInteger"
        },
        "specs": {
          "$ref": "#/definitions/SpecificationRuntimeDefinitionArray"
        }
      }
    },
    "GraphqlSdlMockRunOptions": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "type": {
          "const": "mock"
        },
        "host": {
          "$ref": "#/definitions/SubstitutableString"
        },
        "port": {
          "$ref": "#/definitions/SubstitutableInteger"
        },
        "specs": {
          "$ref": "#/definitions/SpecificationRuntimeDefinitionArray"
        }
      }
    },
    "ProtobufTestRunOptions": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "type": {
          "const": "test"
        },
        "host": {
          "$ref": "#/definitions/SubstitutableString"
        },
        "port": {
          "$ref": "#/definitions/SubstitutableInteger"
        },
        "importPaths": {
          "$ref": "#/definitions/SubstitutableStringArray"
        },
        "protocVersion": {
          "$ref": "#/definitions/SubstitutableString"
        },
        "requestTimeout": {
          "$ref": "#/definitions/SubstitutableInteger"
        },
        "specs": {
          "$ref": "#/definitions/SpecificationRuntimeDefinitionArray"
        }
      }
    },
    "ProtobufMockRunOptions": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "type": {
          "const": "mock"
        },
        "host": {
          "$ref": "#/definitions/SubstitutableString"
        },
        "port": {
          "$ref": "#/definitions/SubstitutableInteger"
        },
        "importPaths": {
          "$ref": "#/definitions/SubstitutableStringArray"
        },
        "protocVersion": {
          "$ref": "#/definitions/SubstitutableString"
        },
        "specs": {
          "$ref": "#/definitions/SpecificationRuntimeDefinitionArray"
        }
      }
    },
    "OpenApiTestRunOptions": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "type": {
          "const": "test"
        },
        "host": {
          "$ref": "#/definitions/SubstitutableString"
        },
        "port": {
          "$ref": "#/definitions/SubstitutableInteger"
        },
        "baseUrl": {
          "$ref": "#/definitions/SubstitutableString"
        },
        "filter": {
          "$ref": "#/definitions/SubstitutableString"
        },
        "workflow": {
          "$ref": "#/definitions/WorkflowConfigurationV3"
        },
        "swaggerUiBaseUrl": {
          "$ref": "#/definitions/SubstitutableString"
        },
        "swaggerUrl": {
          "$ref": "#/definitions/SubstitutableString"
        },
        "actuatorUrl": {
          "$ref": "#/definitions/SubstitutableString"
        },
        "cert": {
          "$ref": "#/definitions/CertConfigurationOrRef"
        },
        "specs": {
          "$ref": "#/definitions/OpenApiSpecificationRuntimeDefinitionArray"
        }
      }
    },
    "OpenApiMockRunOptions": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "type": {
          "enum": ["mock", "stateful-mock"]
        },
        "host": {
          "$ref": "#/definitions/SubstitutableString"
        },
        "port": {
          "$ref": "#/definitions/SubstitutableInteger"
        },
        "baseUrl": {
          "$ref": "#/definitions/SubstitutableString"
        },
        "filter": {
          "$ref": "#/definitions/SubstitutableString"
        },
        "logMode": {
          "anyOf": [
            {
              "type": "string",
              "enum": ["ALL", "REQUEST_RESPONSE"]
            },
            {
              "$ref": "#/definitions/SubstitutableString"
            }
          ]
        },
        "logsDirPath": {
          "$ref": "#/definitions/SubstitutableString"
        },
        "cert": {
          "$ref": "#/definitions/CertConfigurationOrRef"
        },
        "specs": {
          "$ref": "#/definitions/OpenApiSpecificationRuntimeDefinitionArray"
        }
      }
    },
    "OpenApiSpecificationRuntimeDefinitionArray": {
      "type": "array",
      "items": {
        "type": "object",
        "additionalProperties": false,
        "required": ["spec"],
        "properties": {
          "spec": {
            "$ref": "#/definitions/OpenApiSpecificationRuntimeDefinition"
          }
        }
      }
    },
    "SpecificationRuntimeDefinitionArray": {
      "type": "array",
      "items": {
        "type": "object",
        "additionalProperties": false,
        "required": ["spec"],
        "properties": {
          "spec": {
            "$ref": "#/definitions/SpecificationRuntimeDefinition"
          }
        }
      }
    },
    "FreeFormObject": {
      "type": "object",
      "additionalProperties": {}
    },
    "SpecificationRuntimeDefinition": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "id": {
          "type": "string"
        },
        "host": {
          "$ref": "#/definitions/SubstitutableString"
        },
        "port": {
          "$ref": "#/definitions/SubstitutableInteger"
        },
        "overlayFilePath": {
          "$ref": "#/definitions/SubstitutableString"
        }
      }
    },
    "OpenApiSpecificationRuntimeDefinition": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "id": {
          "type": "string"
        },
        "host": {
          "$ref": "#/definitions/SubstitutableString"
        },
        "port": {
          "$ref": "#/definitions/SubstitutableInteger"
        },
        "baseUrl": {
          "$ref": "#/definitions/SubstitutableString"
        },
        "overlayFilePath": {
          "$ref": "#/definitions/SubstitutableString"
        },
        "securitySchemes": {
          "type": "object",
          "additionalProperties": {
            "$ref": "#/definitions/SecuritySchemeConfigurationV3"
          }
        }
      }
    },
    "SecuritySchemeConfigurationV3": {
      "type": "object",
      "additionalProperties": false,
      "required": ["type", "token"],
      "properties": {
        "type": {
          "type": "string",
          "enum": ["oauth2", "basicAuth", "bearer", "apiKey"]
        },
        "token": {
          "$ref": "#/definitions/SubstitutableString"
        }
      }
    },
    "WorkflowConfigurationV3": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "ids": {
          "type": "object",
          "additionalProperties": {
            "type": "object",
            "properties": {
              "extract": {
                "$ref": "#/definitions/SubstitutableString"
              },
              "use": {
                "$ref": "#/definitions/SubstitutableString"
              }
            }
          }
        }
      }
    },
    "ExamplesConfiguration": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "testExamples": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/BaseExampleConfigurationOrRef"
          }
        },
        "mockExamples": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/BaseExampleConfigurationOrRef"
          }
        },
        "commonExamples": {
          "$ref": "#/definitions/BaseExampleConfiguration"
        }
      }
    },
    "ArrayExampleConfigurationOrRef": {
      "if": {
        "type": "object",
        "required": ["$ref"],
        "properties": {
          "$ref": {
            "type": "string"
          }
        }
      },
      "then": {
        "$ref": "#/definitions/Reference"
      },
      "else": {
        "$ref": "#/definitions/ArrayExampleConfiguration"
      }
    },
    "ArrayExampleConfiguration": {
      "type": "array",
      "items": {
        "$ref": "#/definitions/BaseExampleConfigurationOrRef"
      }
    },
    "BaseExampleConfigurationOrRef": {
      "if": {
        "type": "object",
        "required": ["$ref"],
        "properties": {
          "$ref": {
            "type": "string"
          }
        }
      },
      "then": {
        "$ref": "#/definitions/Reference"
      },
      "else": {
        "$ref": "#/definitions/BaseExampleConfiguration"
      }
    },
    "BaseExampleConfiguration": {
      "type": "object",
      "additionalProperties": false,
      "required": ["directories"],
      "properties": {
        "directories": {
          "$ref": "#/definitions/SubstitutableStringArray"
        }
      }
    },
    "DictionaryConfigurationOrRef": {
      "if": {
        "type": "object",
        "required": ["$ref"],
        "properties": {
          "$ref": {
            "type": "string"
          }
        }
      },
      "then": {
        "$ref": "#/definitions/Reference"
      },
      "else": {
        "$ref": "#/definitions/DictionaryConfiguration"
      }
    },
    "DictionaryConfiguration": {
      "type": "object",
      "additionalProperties": false,
      "required": ["path"],
      "properties": {
        "path": {
          "$ref": "#/definitions/SubstitutableString"
        }
      }
    },
    "AdapterConfigurationOrRef": {
      "if": {
        "type": "object",
        "required": ["$ref"],
        "properties": {
          "$ref": {
            "type": "string"
          }
        }
      },
      "then": {
        "$ref": "#/definitions/Reference"
      },
      "else": {
        "$ref": "#/definitions/AdapterConfiguration"
      }
    },
    "AdapterConfiguration": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "pre_specmatic_request_processor": {
          "$ref": "#/definitions/SubstitutableString"
        },
        "post_specmatic_response_processor": {
          "$ref": "#/definitions/SubstitutableString"
        },
        "pre_specmatic_response_processor": {
          "$ref": "#/definitions/SubstitutableString"
        },
        "stub_load_contract": {
          "$ref": "#/definitions/SubstitutableString"
        },
        "test_load_contract": {
          "$ref": "#/definitions/SubstitutableString"
        }
      }
    },
    "CertConfigurationOrRef": {
      "if": {
        "type": "object",
        "required": ["$ref"],
        "properties": {
          "$ref": {
            "type": "string"
          }
        }
      },
      "then": {
        "$ref": "#/definitions/Reference"
      },
      "else": {
        "$ref": "#/definitions/CertConfiguration"
      }
    },
    "CertConfiguration": {
      "type": "object",
      "additionalProperties": false,
      "required": ["keyStore"],
      "properties": {
        "keyStore": {
          "$ref": "#/definitions/KeyStoreConfiguration"
        },
        "keyStorePassword": {
          "$ref": "#/definitions/SubstitutableString"
        },
        "mtlsEnabled": {
          "$ref": "#/definitions/SubstitutableBoolean"
        }
      }
    },
    "ConcreteSettingsOrRef": {
      "if": {
        "type": "object",
        "required": ["$ref"],
        "properties": {
          "$ref": {
            "type": "string"
          }
        }
      },
      "then": {
        "$ref": "#/definitions/Reference"
      },
      "else": {
        "$ref": "#/definitions/ConcreteSettings"
      }
    },
    "ModeSpecificSettings": {
      "type": "object",
      "anyOf": [
        {
          "$ref": "#/definitions/TestSettings"
        },
        {
          "$ref": "#/definitions/MockSettings"
        }
      ]
    },
    "ConcreteSettings": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "general": {
          "$ref": "#/definitions/GeneralSettings"
        },
        "test": {
          "$ref": "#/definitions/TestSettings"
        },
        "mock": {
          "$ref": "#/definitions/MockSettings"
        },
        "proxy": {
          "$ref": "#/definitions/ProxySettings"
        },
        "backwardCompatibility": {
          "$ref": "#/definitions/BackwardCompatibilitySettings"
        }
      }
    },
    "KeyStoreConfiguration": {
      "oneOf": [
        {
          "$ref": "#/definitions/KeyStoreFileConfiguration"
        },
        {
          "$ref": "#/definitions/KeyStoreDirectoryConfiguration"
        }
      ]
    },
    "KeyStoreFileConfiguration": {
      "type": "object",
      "additionalProperties": false,
      "required": ["file"],
      "properties": {
        "file": {
          "$ref": "#/definitions/SubstitutableString"
        },
        "password": {
          "$ref": "#/definitions/SubstitutableString"
        },
        "alias": {
          "$ref": "#/definitions/SubstitutableString"
        }
      }
    },
    "KeyStoreDirectoryConfiguration": {
      "type": "object",
      "additionalProperties": false,
      "required": ["directory"],
      "properties": {
        "directory": {
          "$ref": "#/definitions/SubstitutableString"
        },
        "password": {
          "$ref": "#/definitions/SubstitutableString"
        },
        "alias": {
          "$ref": "#/definitions/SubstitutableString"
        }
      }
    },
    "BackwardCompatibilitySettings": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "baseBranch": {
          "$ref": "#/definitions/SubstitutableString"
        },
        "targetPath": {
          "$ref": "#/definitions/SubstitutableString"
        },
        "repoDirectory": {
          "$ref": "#/definitions/SubstitutableString"
        },
        "strictMode": {
          "$ref": "#/definitions/SubstitutableBoolean"
        }
      }
    },
    "ProxySettings": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "recordRequests": {
          "$ref": "#/definitions/SubstitutableBoolean"
        },
        "ignoreHeaders": {
          "$ref": "#/definitions/SubstitutableStringArray"
        }
      }
    },
    "MockSettingsOrRef": {
      "if": {
        "type": "object",
        "required": ["$ref"],
        "properties": {
          "$ref": {
            "type": "string"
          }
        }
      },
      "then": {
        "$ref": "#/definitions/Reference"
      },
      "else": {
        "$ref": "#/definitions/MockSettings"
      }
    },
    "MockSettings": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "generative": {
          "$ref": "#/definitions/SubstitutableBoolean"
        },
        "delayInMilliseconds": {
          "$ref": "#/definitions/SubstitutableInteger"
        },
        "startTimeoutInMilliseconds": {
          "$ref": "#/definitions/SubstitutableInteger"
        },
        "hotReload": {
          "$ref": "#/definitions/SubstitutableBoolean"
        },
        "strictMode": {
          "$ref": "#/definitions/SubstitutableBoolean"
        },
        "lenientMode": {
          "$ref": "#/definitions/SubstitutableBoolean"
        },
        "gracefulRestartTimeoutInMilliseconds": {
          "$ref": "#/definitions/SubstitutableInteger"
        }
      }
    },
    "TestSettingsOrRef": {
      "if": {
        "type": "object",
        "required": ["$ref"],
        "properties": {
          "$ref": {
            "type": "string"
          }
        }
      },
      "then": {
        "$ref": "#/definitions/Reference"
      },
      "else": {
        "$ref": "#/definitions/TestSettings"
      }
    },
    "TestSettings": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "schemaResiliencyTests": {
          "anyOf": [
            {
              "type": "string",
              "enum": ["all", "none", "positiveOnly"]
            },
            {
              "$ref": "#/definitions/SubstitutableString"
            }
          ]
        },
        "timeoutInMilliseconds": {
          "$ref": "#/definitions/SubstitutableInteger"
        },
        "strictMode": {
          "$ref": "#/definitions/SubstitutableBoolean"
        },
        "lenientMode": {
          "$ref": "#/definitions/SubstitutableBoolean"
        },
        "parallelism": {
          "$ref": "#/definitions/SubstitutableInteger"
        },
        "maxTestRequestCombinations": {
          "$ref": "#/definitions/SubstitutableInteger"
        },
        "junitReportDir": {
          "$ref": "#/definitions/SubstitutableString"
        },
        "validateResponseValues": {
          "$ref": "#/definitions/SubstitutableBoolean"
        },
        "maxTestCount": {
          "$ref": "#/definitions/SubstitutableInteger"
        }
      }
    },
    "GeneralSettings": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "disableTelemetry": {
          "$ref": "#/definitions/SubstitutableBoolean"
        },
        "ignoreInlineExamples": {
          "$ref": "#/definitions/SubstitutableBoolean"
        },
        "ignoreInlineExampleWarnings": {
          "$ref": "#/definitions/SubstitutableBoolean"
        },
        "prettyPrint": {
          "$ref": "#/definitions/SubstitutableBoolean"
        },
        "logging": {
          "$ref": "#/definitions/LoggingSettings"
        },
        "featureFlags": {
          "$ref": "#/definitions/FeatureFlags"
        },
        "specExamplesDirectoryTemplate": {
          "$ref": "#/definitions/SubstitutableString"
        },
        "sharedExamplesDirectoryTemplate": {
          "$ref": "#/definitions/SubstitutableStringArray"
        }
      }
    },
    "LoggingSettings": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "level": {
          "anyOf": [
            {
              "type": "string",
              "enum": ["DEBUG", "INFO"]
            },
            {
              "$ref": "#/definitions/SubstitutableString"
            }
          ]
        },
        "text": {
          "$ref": "#/definitions/LogOutputSettings"
        },
        "json": {
          "$ref": "#/definitions/LogOutputSettings"
        }
      }
    },
    "LogOutputSettings": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "directory": {
          "$ref": "#/definitions/SubstitutableString"
        },
        "console": {
          "$ref": "#/definitions/SubstitutableBoolean"
        },
        "logFilePrefix": {
          "$ref": "#/definitions/SubstitutableString"
        }
      }
    },
    "FeatureFlags": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "fuzzyMatcherForPayloads": {
          "$ref": "#/definitions/SubstitutableBoolean"
        },
        "schemaExampleDefault": {
          "$ref": "#/definitions/SubstitutableBoolean"
        },
        "escapeSoapAction": {
          "$ref": "#/definitions/SubstitutableBoolean"
        }
      }
    }
  }
}
