Customizing errors
In Zod, validation errors are surfaced as instances of the z.core.$ZodError class.
The zod package uses a subclass of this called ZodError that implements some additional convenience methods.
Instances of $ZodError contain an .issues property containing a human-readable message and additional structured information about each encountered validation issue.
Every issue inside a $ZodError contains a message property with a human-readable error message. This message can be customized in a number of ways.
The error param
Virtually every Zod API accepts an optional parameters object. The error param is used to customize the error messages produced by a particular schema.
Nearly all functions and methods support error.
The error param optionally accepts a function, also known as an error map. This function will be called at parse time.
Note — In Zod v3, there were separate params for message (a string) and errorMap (a function). These have been unified in Zod 4 as error.
The error function received a context object you can use to customize the error message based on the input or other validation information.
For advanced cases, the iss object provides additional information you can use to customize the error.
Depending on the API you are using, there may be additional properties available. Use TypeScript's autocomplete to explore the available properties.
Per-parse error customization
To customize errors on a per-parse basis, pass an error map into the parse method:
This has lower precedence than any schema-level custom messages.
The iss object is a discriminated union of all possible issue types. Use the code property to discriminate between them.
For a breakdown of all Zod issue codes, see the @zod/core documentation.
Global error customization
To specify a global error map, use z.config() to set Zod's customError configuration setting:
Global error messages have lower precedence than schema-level or per-parse error messages.
The iss object is a discriminated union of all possible issue types. Use the code property to discriminate between them.
For a breakdown of all Zod issue codes, see the @zod/core documentation.
Internationalization
To support internationalization of error message, Zod provides several built-in locales. These are exported from the @zod/core package.
Note — The zod library automatically loads the en locale automatically. The @zod/minipackage does not load any locale; instead all error messages default to Invalid input.
For convenience, you can also references these from the z.core namespace exports from zod/@zod/mini.
Locales
The following locales are available:
en— English
