/** * Uniform error body returned by every non-2xx api response. `code` is a * stable, machine-readable identifier that doubles as the i18n key suffix * (`errors.`); `message` is an English fallback for clients without * translations. Optional `details` carries field-level validation issues. */ export interface ApiErrorBody { code: string; message: string; details?: Record; } export function apiError( code: string, message: string, details?: ApiErrorBody['details'], ): ApiErrorBody { return details ? { code, message, details } : { code, message }; }