Skip to main content

OpenAPI schema validation for Python

Project description

https://img.shields.io/pypi/v/openapi-schema-validator.svg https://github.com/python-openapi/openapi-schema-validator/actions/workflows/python-tests.yml/badge.svg https://img.shields.io/codecov/c/github/python-openapi/openapi-schema-validator/master.svg?style=flat https://img.shields.io/pypi/pyversions/openapi-schema-validator.svg https://img.shields.io/pypi/format/openapi-schema-validator.svg https://img.shields.io/pypi/status/openapi-schema-validator.svg

About

openapi-schema-validator is a Python library that validates schemas against:

Documentation

Check documentation to see more details about the features. All documentation is in the “docs” directory and online at openapi-schema-validator.readthedocs.io

Installation

Recommended way (via pip):

pip install openapi-schema-validator

Alternatively you can download the code and install from the repository:

pip install "git+https://github.com/python-openapi/openapi-schema-validator.git"

Usage

validate call signature is:

validate(
    instance,
    schema,
    cls=OAS32Validator,
    allow_remote_references=False,
    check_schema=True,
    **kwargs,
)

The first argument is always the value you want to validate. The second argument is always the OpenAPI schema object. The cls keyword argument is optional and defaults to OAS32Validator. Use cls when you need a specific validator version/behavior.

from openapi_schema_validator import OAS30Validator
from openapi_schema_validator import OAS31Validator
from openapi_schema_validator import validate

# OpenAPI 3.0 behavior
validate(instance, schema, cls=OAS30Validator)

# OpenAPI 3.1 behavior
validate(instance, schema, cls=OAS31Validator)

# OpenAPI 3.2 behavior (default)
validate(instance, schema)

Common forwarded keyword arguments include registry (reference context) and format_checker (format validation behavior). By default, validate uses a local-only empty registry to avoid implicit remote $ref retrieval. To resolve external references, pass an explicit registry. Set allow_remote_references=True only if you explicitly accept jsonschema’s default remote retrieval behavior.

check_schema defaults to True and validates the schema before validating an instance. For trusted pre-validated schemas in hot paths, set check_schema=False to skip schema checking.

The validate helper keeps an internal compiled-validator cache. You can control cache size using the OPENAPI_SCHEMA_VALIDATOR_COMPILED_VALIDATOR_CACHE_MAX_SIZE environment variable (default: 128). The value is loaded once at first use and reused for the lifetime of the process.

To validate an OpenAPI schema:

from openapi_schema_validator import validate

# A sample schema
schema = {
    "type": "object",
    "required": [
       "name"
    ],
    "properties": {
        "name": {
            "type": "string"
        },
        "age": {
            "type": ["integer", "null"],
            "format": "int32",
            "minimum": 0,
        },
        "birth-date": {
            "type": "string",
            "format": "date",
        },
        "address": {
             "type": 'array',
             "prefixItems": [
                 { "type": "number" },
                 { "type": "string" },
                 { "enum": ["Street", "Avenue", "Boulevard"] },
                 { "enum": ["NW", "NE", "SW", "SE"] }
             ],
             "items": False,
         }
    },
    "additionalProperties": False,
}

# If no exception is raised by validate(), the instance is valid.
validate({"name": "John", "age": 23, "address": [1600, "Pennsylvania", "Avenue"]}, schema)

validate({"name": "John", "city": "London"}, schema)

Expected failure output:

Traceback (most recent call last):
    ...
ValidationError: Additional properties are not allowed ('city' was unexpected)

By default, the latest OpenAPI schema syntax is expected.

Default dialect resolution

The OpenAPI 3.1 and 3.2 base dialect URIs are registered for jsonschema.validators.validator_for resolution. Schemas declaring "$schema" as either "https://spec.openapis.org/oas/3.1/dialect/base" or "https://spec.openapis.org/oas/3.2/dialect/2025-09-17" resolve directly to OAS31Validator and OAS32Validator without unresolved-metaschema fallback warnings.

from jsonschema.validators import validator_for

from openapi_schema_validator import OAS31Validator
from openapi_schema_validator import OAS32Validator

schema = {
    "$schema": "https://spec.openapis.org/oas/3.1/dialect/base",
    "type": "object",
}
schema32 = {
    "$schema": "https://spec.openapis.org/oas/3.2/dialect/2025-09-17",
    "type": "object",
}

assert validator_for(schema) is OAS31Validator
assert validator_for(schema32) is OAS32Validator

Binary Data Semantics

The handling of binary-like payloads differs between OpenAPI versions.

OpenAPI 3.0

OpenAPI 3.0 keeps historical format: binary / format: byte usage on type: string.

OAS30Validator (default - compatibility behavior)
  • type: string accepts str

  • type: string, format: binary accepts Python bytes and strings

  • useful when validating Python-native runtime data

OAS30StrictValidator
  • type: string accepts str only

  • type: string, format: binary uses strict format validation

  • use when you want strict, spec-oriented behavior for 3.0 schemas

OpenAPI 3.1+

OpenAPI 3.1+ follows JSON Schema semantics for string typing in this library.

  • type: string accepts str only (not bytes)

  • format: binary and format: byte are not treated as built-in formats

  • for base64-in-JSON, model with contentEncoding: base64 (optionally contentMediaType)

  • for raw binary payloads, model via media type (for example application/octet-stream) rather than schema string formats

Regex Behavior

By default, pattern handling follows host Python regex behavior. For ECMAScript-oriented regex validation and matching (via regress), install the optional extra:

pip install "openapi-schema-validator[ecma-regex]"

For more details read about Validation.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

openapi_schema_validator-0.8.1.tar.gz (23.1 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

openapi_schema_validator-0.8.1-py3-none-any.whl (19.2 kB view details)

Uploaded Python 3

File details

Details for the file openapi_schema_validator-0.8.1.tar.gz.

File metadata

  • Download URL: openapi_schema_validator-0.8.1.tar.gz
  • Upload date:
  • Size: 23.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for openapi_schema_validator-0.8.1.tar.gz
Algorithm Hash digest
SHA256 4c57266ce8cbfa37bb4eb4d62cdb7d19356c3a468e3535743c4562863e1790da
MD5 1700103febbc8f24a893a12dbd41e215
BLAKE2b-256 214b67b24b2b23d96ea862be2cca3632a546f67a22461200831213e80c3c6011

See more details on using hashes here.

Provenance

The following attestation bundles were made for openapi_schema_validator-0.8.1.tar.gz:

Publisher: python-publish.yml on python-openapi/openapi-schema-validator

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file openapi_schema_validator-0.8.1-py3-none-any.whl.

File metadata

File hashes

Hashes for openapi_schema_validator-0.8.1-py3-none-any.whl
Algorithm Hash digest
SHA256 0f5859794c5bfa433d478dc5ac5e5768d50adc56b14380c8a6fd3a8113e89c9b
MD5 c1c225a35eccebfbfbe60cc82950a1c6
BLAKE2b-256 6f87e9f29f463b230d4b47d65e17858c595153a8ca8c1775f16e406aa82d455d

See more details on using hashes here.

Provenance

The following attestation bundles were made for openapi_schema_validator-0.8.1-py3-none-any.whl:

Publisher: python-publish.yml on python-openapi/openapi-schema-validator

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page