{"library":"openapi-spec-validator","title":"OpenAPI Spec Validator","description":"OpenAPI Spec Validator is a Python library that validates OpenAPI 2.0 (aka Swagger), OpenAPI 3.x, and OpenAPI 3.2 specifications. It aims to check for full compliance with the Specification. As of version 0.8.4, it actively supports modern Python versions and features a consistent release cadence, with several minor releases occurring every few months.","language":"python","status":"active","last_verified":"Tue May 12","install":{"commands":["pip install openapi-spec-validator"],"cli":{"name":"openapi-spec-validator","version":"openapi-spec-validator 0.8.5"}},"imports":["from openapi_spec_validator import validate","from openapi_spec_validator import validate_url","from openapi_spec_validator.validation import OpenAPIV31SpecValidator","from openapi_spec_validator.shortcuts import validate","from openapi_spec_validator.shortcuts import validate_url"],"auth":{"required":false,"env_vars":[]},"quickstart":{"code":"from openapi_spec_validator import validate\nfrom openapi_spec_validator.readers import read_from_filename\n\n# Example OpenAPI 3.1.0 specification (invalid, 'info' is missing)\n# For a valid spec, ensure 'info' and 'paths' are present.\ninvalid_spec_data = {\n    'openapi': '3.1.0',\n    'paths': {},\n}\n\n# A minimal valid OpenAPI 3.1.0 specification\nvalid_spec_data = {\n    'openapi': '3.1.0',\n    'info': {\n        'title': 'Test API',\n        'version': '1.0.0'\n    },\n    'paths': {}\n}\n\nprint('Attempting to validate invalid_spec_data:')\ntry:\n    validate(invalid_spec_data)\n    print('Invalid spec data is VALID (this should not happen)')\nexcept Exception as e:\n    print(f'Validation failed as expected: {e}')\n\nprint('\\nAttempting to validate valid_spec_data:')\ntry:\n    validate(valid_spec_data)\n    print('Valid spec data is VALID')\nexcept Exception as e:\n    print(f'Validation failed unexpectedly: {e}')\n\n# Example of validating from a file (if 'openapi.yaml' exists)\n# You would typically create this file with your OpenAPI definition.\n# with open('openapi.yaml', 'w') as f:\n#     import yaml\n#     yaml.dump(valid_spec_data, f)\n#\n# try:\n#     spec_dict, base_uri = read_from_filename('openapi.yaml')\n#     validate(spec_dict, base_uri=base_uri)\n#     print('\\nValidating from openapi.yaml: SUCCESS')\n# except Exception as e:\n#     print(f'\\nValidating from openapi.yaml: FAILED - {e}')","lang":"python","description":"This quickstart demonstrates how to validate an OpenAPI specification using the `validate` function. It includes examples for both invalid and valid in-memory specifications, and comments on how to validate from a file.","tag":"verified","tag_description":"quickstart runs on critical runtimes, recently tested","last_tested":"2026-04-24","results":[{"runtime":"python:3.10-alpine","exit_code":0},{"runtime":"python:3.10-slim","exit_code":0},{"runtime":"python:3.11-alpine","exit_code":0},{"runtime":"python:3.11-slim","exit_code":0},{"runtime":"python:3.12-alpine","exit_code":0},{"runtime":"python:3.12-slim","exit_code":0},{"runtime":"python:3.13-alpine","exit_code":0},{"runtime":"python:3.13-slim","exit_code":0},{"runtime":"python:3.9-alpine","exit_code":0},{"runtime":"python:3.9-slim","exit_code":0}]},"compatibility":{"tag":"verified","tag_description":"installs cleanly on critical runtimes, fast import, recently tested","last_tested":"2026-05-12","installed_version":null,"pypi_latest":"0.8.5","is_stale":null,"summary":{"python_range":"3.10–3.9","success_rate":100,"avg_install_s":4.5,"avg_import_s":1.09,"wheel_type":"wheel"},"results":[{"runtime":"python:3.10-alpine","python_version":"3.10","os_libc":"alpine (musl)","variant":"openapi-spec-validator","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":0.84,"mem_mb":16.2,"disk_size":"35.7M"},{"runtime":"python:3.10-alpine","python_version":"3.10","os_libc":"alpine (musl)","variant":"openapi-spec-validator","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":0.86,"mem_mb":16.1,"disk_size":"35.5M"},{"runtime":"python:3.10-slim","python_version":"3.10","os_libc":"slim (glibc)","variant":"openapi-spec-validator","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":null,"install_time_s":5.6,"import_time_s":0.68,"mem_mb":16.2,"disk_size":"36M"},{"runtime":"python:3.10-slim","python_version":"3.10","os_libc":"slim (glibc)","variant":"openapi-spec-validator","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":0.62,"mem_mb":16.1,"disk_size":"36M"},{"runtime":"python:3.11-alpine","python_version":"3.11","os_libc":"alpine (musl)","variant":"openapi-spec-validator","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":1.28,"mem_mb":17.9,"disk_size":"39.1M"},{"runtime":"python:3.11-alpine","python_version":"3.11","os_libc":"alpine (musl)","variant":"openapi-spec-validator","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":1.37,"mem_mb":17.8,"disk_size":"39.0M"},{"runtime":"python:3.11-slim","python_version":"3.11","os_libc":"slim (glibc)","variant":"openapi-spec-validator","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":null,"install_time_s":4.7,"import_time_s":1.12,"mem_mb":17.9,"disk_size":"39M"},{"runtime":"python:3.11-slim","python_version":"3.11","os_libc":"slim (glibc)","variant":"openapi-spec-validator","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":1.07,"mem_mb":17.8,"disk_size":"39M"},{"runtime":"python:3.12-alpine","python_version":"3.12","os_libc":"alpine (musl)","variant":"openapi-spec-validator","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":1.29,"mem_mb":18.1,"disk_size":"30.7M"},{"runtime":"python:3.12-alpine","python_version":"3.12","os_libc":"alpine (musl)","variant":"openapi-spec-validator","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":1.36,"mem_mb":18,"disk_size":"30.5M"},{"runtime":"python:3.12-slim","python_version":"3.12","os_libc":"slim (glibc)","variant":"openapi-spec-validator","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":null,"install_time_s":3.8,"import_time_s":1.36,"mem_mb":18.1,"disk_size":"31M"},{"runtime":"python:3.12-slim","python_version":"3.12","os_libc":"slim (glibc)","variant":"openapi-spec-validator","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":1.34,"mem_mb":18,"disk_size":"31M"},{"runtime":"python:3.13-alpine","python_version":"3.13","os_libc":"alpine (musl)","variant":"openapi-spec-validator","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":1.31,"mem_mb":18.8,"disk_size":"30.5M"},{"runtime":"python:3.13-alpine","python_version":"3.13","os_libc":"alpine (musl)","variant":"openapi-spec-validator","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":1.3,"mem_mb":18.8,"disk_size":"30.2M"},{"runtime":"python:3.13-slim","python_version":"3.13","os_libc":"slim (glibc)","variant":"openapi-spec-validator","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":null,"install_time_s":4,"import_time_s":1.21,"mem_mb":18.8,"disk_size":"30M"},{"runtime":"python:3.13-slim","python_version":"3.13","os_libc":"slim (glibc)","variant":"openapi-spec-validator","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":1.26,"mem_mb":18.8,"disk_size":"30M"},{"runtime":"python:3.9-alpine","python_version":"3.9","os_libc":"alpine (musl)","variant":"openapi-spec-validator","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":0.97,"mem_mb":14,"disk_size":"27.5M"},{"runtime":"python:3.9-alpine","python_version":"3.9","os_libc":"alpine (musl)","variant":"openapi-spec-validator","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":0.93,"mem_mb":14.1,"disk_size":"27.6M"},{"runtime":"python:3.9-slim","python_version":"3.9","os_libc":"slim (glibc)","variant":"openapi-spec-validator","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":null,"install_time_s":4.5,"import_time_s":0.91,"mem_mb":14,"disk_size":"28M"},{"runtime":"python:3.9-slim","python_version":"3.9","os_libc":"slim (glibc)","variant":"openapi-spec-validator","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":0.8,"mem_mb":14.1,"disk_size":"28M"}]}}