← Platform
Form engine
Schemas, field types, validation, scoring, rules, and automation without a UI dependency.
53
Field types
9
Field categories
2
Automation models
1
Shared rule language
Schema validation
The supplier form is parsed by the runtime schema used by the designer and submission flow.
{
"schemaVersion": 1,
"title": "Supplier qualification",
"description": "Collect the information needed to qualify a new supplier.",
"sections": [
{
"id": "company",
"title": "Company details",
"description": "Company, contact, spend, and risk details.",
"layout": {
"columns": 2,
"gap": "md"
},
"step": "intake",
"fields": [
{
"id": "company_name",
"type": "text",
"label": "Company name",
"required": true
},
{
"id": "contact_email",
"type": "email",
"label": "Contact email",
"required": true
},
{
"id": "approved_supplier",
"type": "lookup",
"label": "Match an approved supplier",
"binding": {
"sourceKey": "suppliers",
"valueColumn": "id",
"labelColumn": "name",
"autofill": [
{
"column": "name",
"targetFieldId": "company_name"
}
]
}
},
{
"id": "expected_spend",
"type": "currency",
"label": "Expected annual spend",
"config": {
"min": 0,
"step": 100
}
},
{
"id": "risk_tier",
"type": "select",
"label": "Risk tier",
"required": true,
"validation": {
"options": [
{
"value": "low",
"label": "Low risk"
},
{
"value": "medium",
"label": "Medium risk"
},
{
"value": "high",
"label": "High risk"
}
]
}
},
{
"id": "contract_value",
"type": "formula",
"label": "Contract value with contingency",
"formula": {
"kind": "product",
"of": [
{
"kind": "field_ref",
"fieldKey": "expected_spend"
},
{
"kind": "literal",
"value": 1.1
}
]
}
}
]
},
{
"id": "services",
"title": "Services and projects",
"description": "Capture line-level scope and select the projects this supplier can support.",
"step": "intake",
"fields": [
{
"id": "service_lines",
"type": "table",
"label": "Service lines",
"required": true,
"config": {
"rowMode": "addable",
"minRows": 1,
"maxRows": 12,
"columns": [
{
"key": "description",
"label": "Description",
"type": "text"
},
{
"key": "category",
"label": "Category",
"type": "select",
"options": [
{
"value": "materials",
"label": "Materials"
},
{
"value": "services",
"label": "Services"
},
{
"value": "equipment",
"label": "Equipment"
}
]
},
{
"key": "quantity",
"label": "Quantity",
"type": "number"
},
{
"key": "start_date",
"label": "Start date",
"type": "date"
}
]
}
},
{
"id": "supported_projects",
"type": "data_table",
"label": "Supported projects",
"binding": {
"sourceKey": "projects",
"columns": [
"name",
"region",
"budget"
],
"selectable": "multi",
"limit": 25
}
}
]
},
{
"id": "review",
"title": "Qualification review",
"step": "review",
"fields": [
{
"id": "result",
"type": "pass_fail_na",
"label": "Qualification result",
"required": true
},
{
"id": "evaluation",
"type": "matrix",
"label": "Evaluation matrix",
"required": true,
"config": {
"rows": [
{
"key": "quality",
"label": "Quality controls"
},
{
"key": "delivery",
"label": "Delivery capability"
},
{
"key": "commercial",
"label": "Commercial fit"
}
],
"scale": [
{
"value": "1",
"label": "Needs improvement"
},
{
"value": "2",
"label": "Meets requirements"
},
{
"value": "3",
"label": "Exceeds requirements"
}
]
}
},
{
"id": "risk_assessment",
"type": "risk_matrix",
"label": "Supplier risk",
"required": true
},
{
"id": "supplier_count",
"type": "metric",
"label": "Approved suppliers in directory",
"binding": {
"sourceKey": "suppliers",
"aggregate": {
"fn": "count"
},
"display": "number"
}
},
{
"id": "notes",
"type": "rich_text",
"label": "Reviewer notes",
"helpText": "Add supporting details for the qualification decision."
},
{
"id": "approval_signature",
"type": "signature",
"label": "Reviewer signature",
"required": true
}
]
}
],
"workflow": {
"steps": [
{
"key": "intake",
"title": "Supplier intake",
"assignee": {
"type": "role",
"role": "procurement"
}
},
{
"key": "review",
"title": "Qualification review",
"assignee": {
"type": "role",
"role": "manager"
},
"signatureRequired": true
}
],
"scoreRouting": {
"thresholdScore": 80,
"hardFailRules": [
{
"kind": "any_field_eq",
"fieldKeys": [
"result"
],
"value": "fail"
}
]
}
}
}Response validation
Required fields, value types, choices, formats, and unknown keys are checked together.
{
"company_name": "",
"contact_email": "not-an-email",
"expected_spend": -25,
"risk_tier": "critical",
"unknown_field": true
}unknown_field
Unknown response field
company_name
Required
contact_email
Invalid email
expected_spend
Must be >= 0
risk_tier
Not a valid choice
service_lines
Required
result
Required
evaluation
Rate at least one row
risk_assessment
Required
approval_signature
Required
Workflow-ready records
Use the automation model that matches how the record behaves.
Form workflows
For inspections, requests, checklists, assessments, and other submitted forms.
- React to submissions, field rules, status changes, schedules, and missed check-ins.
- Notify teams, create follow-up records, update responses, call webhooks, and generate files.
- Route human approvals through the same conditions used by the form designer.
Example
Form submitted
Score below threshold
Approval
Create follow-up and notify
Transactional workflows
For records with controlled lifecycle transitions such as orders, invoices, and journals.
- React before or after creation, editing, submission, posting, voiding, and status changes.
- Send messages, update fields and statuses, post records, and enforce persistent record locks.
- Pause for approval and resume the correct branch exactly once after a decision.
Example
Record submitted
Amount over limit
Approval
Post and lock record
Field vocabulary
Every field declares its category, stored value shape, and scoring behavior.
Standard
17Short text
Single-line text input
Long text
Multi-line text area
Number
Numeric input with optional units
Currency
Money amount with currency formatting
Percentage
Numeric percentage value
Slider
Pick a number on a min–max range
Date
Date picker
Date & time
Date + time picker
Time
Time picker
Location (GPS)
Capture the device location
Email
Email address with validation
Phone
Phone number
URL
Web link
Rich text
Formatted text — bold, lists, links
Address
Postal address with autocomplete
QR / barcode scan
Scan a QR code or barcode with the camera
Table
Grid of cells — addable or predefined rows
Choice
6Single choice
Pick one option
Multiple checkboxes
Pick several options
Dropdown
Single-select dropdown
Multi-select dropdown
Multi-select dropdown
Ranking
Drag options into a ranked order
Rating grid
Rate each row on a shared scale (Likert)
Scoring
4Pass / Fail / N/A
Compliance checkpoint
Rating
Numeric scale (e.g. 1–5)
Yes / No + comment
Yes/No with required comment on No
Traffic light
Green / Yellow / Red status
Pickers
8Person
Pick a person from the directory
People (multiple)
Pick one or more people from the directory
Customer
Pick a customer (org unit at the customer level)
Site
Pick a site/location (org unit at the site level)
Project
Pick a project / job (org unit at the project level)
Area
Pick an area (org unit at the area level)
GL account
Pick an account from the chart of accounts
Party
Pick a vendor, customer, or employee
Media
8Photo
Camera / gallery upload with annotation
Photo upload
Camera / gallery upload (alias of photo)
Photo + AI analysis
Capture a photo and flag missing PPE / hazards with AI
Photo + markup
Capture a photo and drop numbered markers on hazards
File
PDF / Word / Excel upload
Video
Short video upload
Audio note
Voice recording
Diagram / sketch
Freehand drawing canvas — shapes, arrows, text (Excalidraw)
Identity
2Signature
Drawn signature on glass
Typed attestation
Typed name + checkbox
Computed
2Formula
Computed from other fields
Risk matrix
Severity × likelihood
Data
3Lookup
Pick a record from a data source — can auto-fill other fields
Data table
Show or select rows from a data source
KPI / chart
A live number or chart aggregated from a data source
Display
3Heading
Section heading text
Paragraph
Static help text / instructions
Divider
Visual separator