Data validation
Add a schema.json to a template to validate incoming request data before it is rendered. Invalid data is rejected with HTTP 422 and never reaches the browser — so you never produce a broken or half-filled PDF.
Add a schema
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"required": ["number", "customer"],
"properties": {
"number": { "type": "string" },
"customer": {
"type": "object",
"required": ["name"],
"properties": { "name": { "type": "string" } }
}
}
}Validation uses santhosh-tekuri/jsonschema; see its documentation for supported drafts and keywords.
What happens on invalid data
curl -i -X POST -H 'Content-Type: application/json' \
-d '{"customer": {}}' \
http://localhost:9999/templates/invoice/render
# HTTP/1.1 422 Unprocessable EntityThe response body describes the schema violation.
Discover a template’s schema
The schema is published for clients and tooling:
curl http://localhost:9999/templates/invoice/schema.jsonIt is also referenced from the generated OpenAPI spec so the render endpoint documents its expected body.
Without a schema
A template without schema.json accepts any JSON object. Validation is opt-in per template.
Compositions
A composition’s own schema.json validates the request data. Note that each child template’s schema is not re-validated when reached through a composition — validate at the composition boundary. See Compositions.