{"library":"openapi-core","title":"OpenAPI Core","description":"openapi-core provides client-side and server-side support for validating requests and responses against the OpenAPI Specification v3.x and v3.2. It integrates with various web frameworks like Flask, Starlette, Falcon, Django, and aiohttp. The current version is 0.23.1, with a frequent release cadence to support new Python versions and framework updates.","language":"python","status":"active","last_verified":"Wed May 13","install":{"commands":["pip install openapi-core","pip install openapi-core[flask,starlette,falcon,django,aiohttp]"],"cli":null},"imports":["from openapi_core import OpenAPI","from openapi_core.validation.request.validators import RequestValidator","from openapi_core.validation.response.validators import ResponseValidator","from openapi_core.wrappers.mock import MockRequest as OpenAPIRequest","from openapi_core.wrappers.mock import MockResponse as OpenAPIResponse"],"auth":{"required":false,"env_vars":[]},"quickstart":{"code":"import io\nfrom openapi_core import OpenAPI\nfrom openapi_core.validation.request.validators import RequestValidator\nfrom openapi_core.validation.response.validators import ResponseValidator\nfrom openapi_core.wrappers.mock import MockRequest, MockResponse\n\n# Define a simple OpenAPI spec\noas_spec = {\n    \"openapi\": \"3.0.0\",\n    \"info\": {\"title\": \"Test API\", \"version\": \"1.0.0\"},\n    \"paths\": {\n        \"/hello\": {\n            \"get\": {\n                \"parameters\": [\n                    {\n                        \"name\": \"name\",\n                        \"in\": \"query\",\n                        \"required\": True,\n                        \"schema\": {\"type\": \"string\"}\n                    }\n                ],\n                \"responses\": {\n                    \"200\": {\n                        \"description\": \"A greeting\",\n                        \"content\": {\n                            \"application/json\": {\n                                \"schema\": {\"type\": \"object\", \"properties\": {\"message\": {\"type\": \"string\"}}}\n                            }\n                        }\n                    }\n                }\n            }\n        }\n    }\n}\n\n# Load the OpenAPI specification\nopenapi = OpenAPI.from_dict(oas_spec)\n\n# --- Request Validation ---\n\n# Create a mock request for validation\nrequest = MockRequest(\n    host_url=\"http://localhost\",\n    path=\"/hello\",\n    method=\"get\",\n    query_string=\"name=World\"\n)\n\nvalidator = RequestValidator(openapi)\nresult = validator.validate(request)\n\nif result.errors:\n    print(f\"Request validation errors: {result.errors}\")\nelse:\n    print(\"Request validated successfully.\")\n    # Access validated parameters\n    print(f\"Validated query parameters: {result.parameters.query}\")\n\n# --- Response Validation ---\n\n# Create a mock response for validation\nresponse = MockResponse(\n    data=io.BytesIO(b'{\"message\": \"Hello, World!\"}'),\n    status_code=200,\n    mimetype=\"application/json\"\n)\n\nvalidator = ResponseValidator(openapi)\nresult = validator.validate(request, response)\n\nif result.errors:\n    print(f\"Response validation errors: {result.errors}\")\nelse:\n    print(\"Response validated successfully.\")\n","lang":"python","description":"This quickstart demonstrates loading an OpenAPI specification, creating mock requests and responses, and then using `RequestValidator` and `ResponseValidator` to validate them against the loaded spec. It covers both request parameters and response body validation. In real-world scenarios, you would use framework-specific request/response wrappers (e.g., `FlaskRequest`, `StarletteRequest`).","tag":null,"tag_description":null,"last_tested":"2026-04-24","results":[{"runtime":"python:3.10-alpine","exit_code":1},{"runtime":"python:3.10-slim","exit_code":1},{"runtime":"python:3.11-alpine","exit_code":1},{"runtime":"python:3.11-slim","exit_code":1},{"runtime":"python:3.12-alpine","exit_code":1},{"runtime":"python:3.12-slim","exit_code":1},{"runtime":"python:3.13-alpine","exit_code":1},{"runtime":"python:3.13-slim","exit_code":1},{"runtime":"python:3.9-alpine","exit_code":1},{"runtime":"python:3.9-slim","exit_code":1}]},"compatibility":{"tag":null,"tag_description":null,"last_tested":"2026-05-13","installed_version":"0.22.0","pypi_latest":"0.23.1","is_stale":true,"summary":{"python_range":"3.10–3.9","success_rate":100,"avg_install_s":7.5,"avg_import_s":1.61,"wheel_type":"wheel"},"results":[{"runtime":"python:3.10-alpine","python_version":"3.10","os_libc":"alpine (musl)","variant":"openapi-core","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":1.27,"mem_mb":23.5,"disk_size":"40.0M"},{"runtime":"python:3.10-alpine","python_version":"3.10","os_libc":"alpine (musl)","variant":"openapi-core","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":1.35,"mem_mb":23.5,"disk_size":"40.0M"},{"runtime":"python:3.10-alpine","python_version":"3.10","os_libc":"alpine (musl)","variant":"flask,starlette,falcon,django,aiohttp","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":1.4,"mem_mb":23.9,"disk_size":"105.4M"},{"runtime":"python:3.10-alpine","python_version":"3.10","os_libc":"alpine (musl)","variant":"flask,starlette,falcon,django,aiohttp","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":1.41,"mem_mb":23.9,"disk_size":"105.6M"},{"runtime":"python:3.10-slim","python_version":"3.10","os_libc":"slim (glibc)","variant":"openapi-core","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":5.9,"import_time_s":0.99,"mem_mb":23.5,"disk_size":"40M"},{"runtime":"python:3.10-slim","python_version":"3.10","os_libc":"slim (glibc)","variant":"openapi-core","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":1.05,"mem_mb":23.5,"disk_size":"40M"},{"runtime":"python:3.10-slim","python_version":"3.10","os_libc":"slim (glibc)","variant":"flask,starlette,falcon,django,aiohttp","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":12.3,"import_time_s":0.96,"mem_mb":23.9,"disk_size":"107M"},{"runtime":"python:3.10-slim","python_version":"3.10","os_libc":"slim (glibc)","variant":"flask,starlette,falcon,django,aiohttp","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":1.02,"mem_mb":23.9,"disk_size":"108M"},{"runtime":"python:3.11-alpine","python_version":"3.11","os_libc":"alpine (musl)","variant":"openapi-core","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":1.76,"mem_mb":25.4,"disk_size":"44.0M"},{"runtime":"python:3.11-alpine","python_version":"3.11","os_libc":"alpine (musl)","variant":"openapi-core","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":1.91,"mem_mb":25.4,"disk_size":"44.0M"},{"runtime":"python:3.11-alpine","python_version":"3.11","os_libc":"alpine (musl)","variant":"flask,starlette,falcon,django,aiohttp","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":1.71,"mem_mb":25.7,"disk_size":"114.1M"},{"runtime":"python:3.11-alpine","python_version":"3.11","os_libc":"alpine (musl)","variant":"flask,starlette,falcon,django,aiohttp","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":2.1,"mem_mb":25.7,"disk_size":"114.4M"},{"runtime":"python:3.11-slim","python_version":"3.11","os_libc":"slim (glibc)","variant":"openapi-core","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":4.9,"import_time_s":1.52,"mem_mb":25.4,"disk_size":"44M"},{"runtime":"python:3.11-slim","python_version":"3.11","os_libc":"slim (glibc)","variant":"openapi-core","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":1.93,"mem_mb":25.4,"disk_size":"44M"},{"runtime":"python:3.11-slim","python_version":"3.11","os_libc":"slim (glibc)","variant":"flask,starlette,falcon,django,aiohttp","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":10.2,"import_time_s":1.57,"mem_mb":25.7,"disk_size":"116M"},{"runtime":"python:3.11-slim","python_version":"3.11","os_libc":"slim (glibc)","variant":"flask,starlette,falcon,django,aiohttp","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":1.66,"mem_mb":25.7,"disk_size":"117M"},{"runtime":"python:3.12-alpine","python_version":"3.12","os_libc":"alpine (musl)","variant":"openapi-core","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":1.74,"mem_mb":25.4,"disk_size":"35.4M"},{"runtime":"python:3.12-alpine","python_version":"3.12","os_libc":"alpine (musl)","variant":"openapi-core","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":1.91,"mem_mb":25.4,"disk_size":"35.4M"},{"runtime":"python:3.12-alpine","python_version":"3.12","os_libc":"alpine (musl)","variant":"flask,starlette,falcon,django,aiohttp","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":1.93,"mem_mb":25.8,"disk_size":"105.0M"},{"runtime":"python:3.12-alpine","python_version":"3.12","os_libc":"alpine (musl)","variant":"flask,starlette,falcon,django,aiohttp","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":1.85,"mem_mb":25.8,"disk_size":"105.3M"},{"runtime":"python:3.12-slim","python_version":"3.12","os_libc":"slim (glibc)","variant":"openapi-core","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":4,"import_time_s":1.8,"mem_mb":25.4,"disk_size":"35M"},{"runtime":"python:3.12-slim","python_version":"3.12","os_libc":"slim (glibc)","variant":"openapi-core","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":2.04,"mem_mb":25.4,"disk_size":"35M"},{"runtime":"python:3.12-slim","python_version":"3.12","os_libc":"slim (glibc)","variant":"flask,starlette,falcon,django,aiohttp","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":8.4,"import_time_s":1.78,"mem_mb":25.8,"disk_size":"107M"},{"runtime":"python:3.12-slim","python_version":"3.12","os_libc":"slim (glibc)","variant":"flask,starlette,falcon,django,aiohttp","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":2.31,"mem_mb":25.8,"disk_size":"108M"},{"runtime":"python:3.13-alpine","python_version":"3.13","os_libc":"alpine (musl)","variant":"openapi-core","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":1.69,"mem_mb":26.1,"disk_size":"35.2M"},{"runtime":"python:3.13-alpine","python_version":"3.13","os_libc":"alpine (musl)","variant":"openapi-core","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":1.85,"mem_mb":26.1,"disk_size":"35.1M"},{"runtime":"python:3.13-alpine","python_version":"3.13","os_libc":"alpine (musl)","variant":"flask,starlette,falcon,django,aiohttp","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":1.64,"mem_mb":26.5,"disk_size":"104.8M"},{"runtime":"python:3.13-alpine","python_version":"3.13","os_libc":"alpine (musl)","variant":"flask,starlette,falcon,django,aiohttp","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":1.9,"mem_mb":26.4,"disk_size":"105.0M"},{"runtime":"python:3.13-slim","python_version":"3.13","os_libc":"slim (glibc)","variant":"openapi-core","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":4.1,"import_time_s":1.6,"mem_mb":26.1,"disk_size":"35M"},{"runtime":"python:3.13-slim","python_version":"3.13","os_libc":"slim (glibc)","variant":"openapi-core","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":2.05,"mem_mb":26.1,"disk_size":"35M"},{"runtime":"python:3.13-slim","python_version":"3.13","os_libc":"slim (glibc)","variant":"flask,starlette,falcon,django,aiohttp","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":8.8,"import_time_s":1.69,"mem_mb":26.4,"disk_size":"107M"},{"runtime":"python:3.13-slim","python_version":"3.13","os_libc":"slim (glibc)","variant":"flask,starlette,falcon,django,aiohttp","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":2.02,"mem_mb":26.4,"disk_size":"107M"},{"runtime":"python:3.9-alpine","python_version":"3.9","os_libc":"alpine (musl)","variant":"openapi-core","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":1.37,"mem_mb":21.1,"disk_size":"31.8M"},{"runtime":"python:3.9-alpine","python_version":"3.9","os_libc":"alpine (musl)","variant":"openapi-core","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":1.35,"mem_mb":21.1,"disk_size":"31.8M"},{"runtime":"python:3.9-alpine","python_version":"3.9","os_libc":"alpine (musl)","variant":"flask,starlette,falcon,django,aiohttp","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":1.31,"mem_mb":21.1,"disk_size":"94.9M"},{"runtime":"python:3.9-alpine","python_version":"3.9","os_libc":"alpine (musl)","variant":"flask,starlette,falcon,django,aiohttp","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":1.53,"mem_mb":21.1,"disk_size":"94.9M"},{"runtime":"python:3.9-slim","python_version":"3.9","os_libc":"slim (glibc)","variant":"openapi-core","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":4.8,"import_time_s":1.23,"mem_mb":21.1,"disk_size":"33M"},{"runtime":"python:3.9-slim","python_version":"3.9","os_libc":"slim (glibc)","variant":"openapi-core","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":1.66,"mem_mb":21.1,"disk_size":"33M"},{"runtime":"python:3.9-slim","python_version":"3.9","os_libc":"slim (glibc)","variant":"flask,starlette,falcon,django,aiohttp","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":12,"import_time_s":1.14,"mem_mb":21.1,"disk_size":"98M"},{"runtime":"python:3.9-slim","python_version":"3.9","os_libc":"slim (glibc)","variant":"flask,starlette,falcon,django,aiohttp","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":1.38,"mem_mb":21.1,"disk_size":"98M"}]}}