# Validation API reference

> Current emitted signatures and options for @db3.ai/app/validation.

- Package: `@db3.ai/app/validation`
- Canonical page: [https://db3.ai/docs/validation-api](https://db3.ai/docs/validation-api)
- Markdown: [https://db3.ai/docs/validation-api.md](https://db3.ai/docs/validation-api.md)
- Framework source of truth: `packages/app/src/validation/README.md`

<a id="start"></a>

## Imports and examples

Import supported APIs from `@db3.ai/app/validation`. These signatures come from the staged package used by consumers. Relative filenames in declarations describe type dependencies; they are not extra supported deep imports.

Use the guide for setup, executable examples, failure handling and ownership. A signature is not proof that every deployment or provider has been exercised.

- [Guide, examples and testing](https://db3.ai/docs/validation.md)

<a id="rules"></a>

## Rules, results, exceptions and helpers

### Rules, results, exceptions and helpers

```typescript
export type ValidationRuleName = 'required' | 'nullable' | 'string' | 'number' | 'integer' | 'boolean' | 'email' | 'url' | 'array' | 'object' | 'min' | 'max' | 'minLength' | 'maxLength' | 'in' | 'regex' | 'ulid' | 'uuid';
export type ValidationRule = ValidationRuleName | `${ValidationRuleName}:${string}` | {
    rule: ValidationRuleName;
    value?: unknown;
    values?: readonly unknown[];
    pattern?: RegExp;
    message?: string;
};
export type ValidationRules = Record<string, readonly ValidationRule[]>;
export interface ValidationFailure {
    field: string;
    rule: ValidationRuleName;
    message: string;
    value?: unknown;
    details?: Record<string, unknown>;
}
export interface ValidationResult<TData extends Record<string, unknown> = Record<string, unknown>> {
    valid: boolean;
    data: TData;
    errors: ValidationFailure[];
}
export declare class ValidationException extends Error {
    readonly errors: ValidationFailure[];
    constructor(errors: ValidationFailure[]);
}
export declare function validate<TData extends Record<string, unknown> = Record<string, unknown>>(data: unknown, rules: ValidationRules): ValidationResult<TData>;
export declare function assertValid<TData extends Record<string, unknown> = Record<string, unknown>>(data: unknown, rules: ValidationRules): TData;
export declare function isEmail(value: unknown): boolean;
```

## Related documentation
- [Validate application input](https://db3.ai/docs/validation.md): Check a note request, return useful field errors and make the boundary between validation, conversion and authorization explicit.

## Guidance for AI tools
Use the documented public import `@db3.ai/app/validation` and its exported types. Prefer the source-backed examples and behavioural outcomes above over invented APIs or source-relative internal imports.
