All validation is done by Validator subclasses, and the fields from valedictory.fields. The schema to validate data against is defined declaratively by subclassing Validator:

from valedictory import Validator, fields

class ContactValidator(Validator):
    name = fields.CharField()
    height = fields.IntegerField()
    date_of_birth = fields.DateField()

Validator instances are immutable, so the same instance can be reused to validate all your data.

contact_validator = ContactValidator()

Validation is done by calling the clean() method on a Validator instance. clean() will either returned the cleaned data, or raise an InvalidDataException. InvalidDataException instances store all the validation errors found when validating the data. These can be used to create an appropriate error response.

from valedictory.exceptions import InvalidDataException

input_data = json.loads(request.body)

    cleaned_data = contact_validator.clean(input_data)

    # Save the data

except InvalidDataException as errors:
    # Handle the error
    for path, message in errors.flatten():
        print("{0}: {1}".format('.'.join(path), message))