UI API — Validation
apiClient.ui.validation manages JSON schema validations — reusable schemas that enforce data structure for forms and data entry.
Methods
create
Create a new validation schema.
const validation = await apiClient.ui.validation.create({
validation: {
name: 'Job Validation',
jsonSchema: {
type: 'object',
required: ['name', 'start'],
properties: {
name: { type: 'string', minLength: 1 },
start: { type: 'string', format: 'date-time' },
},
},
},
})
console.log(validation.uid)
get
Fetch a single validation by UID.
const validation = await apiClient.ui.validation.get({ uid: 'abc123' })
getMany
Fetch multiple validations, with optional filters.
// All validations
const validations = await apiClient.ui.validation.getMany({})
// By name
const named = await apiClient.ui.validation.getMany({ name: 'Job Validation' })
// Only uncomposed (leaf) validations
const uncomposed = await apiClient.ui.validation.getMany({ uncomposed: true })
// Paginated
const page = await apiClient.ui.validation.getMany({ limit: 20, page: 1 })
put
Update an existing validation. Unlike other services, put writes the full object directly (not merge-and-put).
await apiClient.ui.validation.put({
validation: {
uid: 'abc123',
name: 'Job Validation',
jsonSchema: {
type: 'object',
required: ['name'],
properties: {
name: { type: 'string' },
},
},
},
})
del
Delete a validation by UID.
await apiClient.ui.validation.del({ uid: 'abc123' })
getBestValidation
Find the best-matching validation by name (sorted by relevance). Returns null if none found.
const validation =
await apiClient.ui.validation.getBestValidation('Job Validation')
validateData
Validate a data object against a named validation schema. Returns a result indicating whether the data is valid and any errors.
const result = await apiClient.ui.validation.validateData({
name: 'Job Validation',
data: { name: 'My Job', start: '2024-01-01T09:00:00Z' },
})
if (!result.valid) {
console.error('Validation errors:', result.errors)
}
Validation Type
| Field | Type | Description |
|---|---|---|
uid | string | Unique identifier |
name | string | Display name |
tenantId | string | Tenant the validation belongs to |
jsonSchema | object | JSON Schema definition |
React Example
import { useApiClient } from '@skedulo/horizon-core'
import { useCallback } from 'react'
const ValidatedForm = ({ validationName, onSubmit }) => {
const apiClient = useApiClient()
const handleSubmit = useCallback(
async (data) => {
const result = await apiClient?.ui.validation.validateData({
name: validationName,
data,
})
if (result?.valid) {
onSubmit(data)
} else {
console.error('Invalid data:', result?.errors)
}
},
[apiClient, validationName, onSubmit],
)
// Note: Object.fromEntries(new FormData(...)) only captures checked checkboxes,
// selected radio values, and the last value for multi-selects. Use FormData.getAll()
// for fields that may have multiple values.
return (
<form
onSubmit={(e) => {
e.preventDefault()
handleSubmit(Object.fromEntries(new FormData(e.target)))
}}
>
<input name="name" placeholder="Name" />
<button type="submit">Submit</button>
</form>
)
}