Platform

Form engine

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.

Valid schema
{
  "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.

10 issues
{
  "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.

Open workflow studio

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

17
Short text
Single-line text input
string
Long text
Multi-line text area
string
Number
Numeric input with optional units
number
Currency
Money amount with currency formatting
number
Percentage
Numeric percentage value
number
Slider
Pick a number on a min–max range
number
Date
Date picker
string
Date & time
Date + time picker
string
Time
Time picker
string
Location (GPS)
Capture the device location
compound
Email
Email address with validation
string
Phone
Phone number
string
URL
Web link
string
Rich text
Formatted text — bold, lists, links
string
Address
Postal address with autocomplete
compound
QR / barcode scan
Scan a QR code or barcode with the camera
string
Table
Grid of cells — addable or predefined rows
compound

Choice

6
Single choice
Pick one option
string
Multiple checkboxes
Pick several options
string_array
Dropdown
Single-select dropdown
string
Multi-select dropdown
Multi-select dropdown
string_array
Ranking
Drag options into a ranked order
string_array
Rating grid
Rate each row on a shared scale (Likert)
compound

Scoring

4
Pass / Fail / N/A
Compliance checkpoint
string
Rating
Numeric scale (e.g. 1–5)
number
Yes / No + comment
Yes/No with required comment on No
compound
Traffic light
Green / Yellow / Red status
string

Pickers

8
Person
Pick a person from the directory
entity_ref
People (multiple)
Pick one or more people from the directory
entity_ref_array
Customer
Pick a customer (org unit at the customer level)
entity_ref
Site
Pick a site/location (org unit at the site level)
entity_ref
Project
Pick a project / job (org unit at the project level)
entity_ref
Area
Pick an area (org unit at the area level)
entity_ref
GL account
Pick an account from the chart of accounts
entity_ref
Party
Pick a vendor, customer, or employee
entity_ref

Media

8
Photo
Camera / gallery upload with annotation
attachment_array
Photo upload
Camera / gallery upload (alias of photo)
attachment_array
Photo + AI analysis
Capture a photo and flag missing PPE / hazards with AI
compound
Photo + markup
Capture a photo and drop numbered markers on hazards
compound
File
PDF / Word / Excel upload
attachment_array
Video
Short video upload
attachment_array
Audio note
Voice recording
attachment_array
Diagram / sketch
Freehand drawing canvas — shapes, arrows, text (Excalidraw)
compound

Identity

2
Signature
Drawn signature on glass
compound
Typed attestation
Typed name + checkbox
compound

Computed

2
Formula
Computed from other fields
none
Risk matrix
Severity × likelihood
compound

Data

3
Lookup
Pick a record from a data source — can auto-fill other fields
string
Data table
Show or select rows from a data source
string_array
KPI / chart
A live number or chart aggregated from a data source
none

Display

3
Heading
Section heading text
none
Paragraph
Static help text / instructions
none
Divider
Visual separator
none