# Automation data shape kinds

_Every display kind used to describe trigger and operation payload fields, including nested shapes and what the token picker can infer._

Canonical: https://snoze.dev/help/automation-data-shapes/

Triggers and operation catalogs describe their output with an `ObjectShape`: a
readable label and an ordered list of fields. Each field has a machine key,
label, shape kind, optional description, and, for nested data, another object
shape. The token picker walks this metadata; the runtime value remains ordinary
JSON supplied by the trigger or operation.

These kinds describe how to read and present data. They do not validate an
external provider's payload, create database fields, or convert the value by
themselves.

<!-- GENERATED:shape-field-kinds:START -->

Canonical contract values:

- `text`
- `rich_text`
- `number`
- `boolean`
- `date`
- `url`
- `email`
- `person`
- `status`
- `select`
- `multi_select`
- `list`
- `object`
- `unknown`

<!-- GENERATED:shape-field-kinds:END -->

## Shape field kinds

### Text `text`

A short plain string such as an ID, name, or summary. It can be inserted into a
template or passed through text and comparison operations. The shape does not
impose a length limit.

### Rich text `rich_text`

Longer or formatted prose, such as an AI reply or provider description. Token
pickers can distinguish it from a short label, but the automation expression
runtime still receives the provider's JSON value rather than a page-block rich
text document.

### Number `number`

A numeric value. It enables numeric display and makes add, subtract, multiply,
divide, length-independent comparisons, and Conditions discoverable. The shape
does not guarantee that a poorly behaved provider will never return a numeric
string, so execution-time conversion rules still matter.

### Boolean `boolean`

True or false, used for flags such as `found`, `deleted`, or `blocked`. It is
appropriate for equality Conditions. False exists and is not empty.

### Date `date`

A date or timestamp value intended for date-aware presentation. The shape does
not carry a time zone, relative-date grammar, or format; those come from the
actual value and consuming control.

### URL `url`

A web address. The kind lets the record view or picker present it as a link and
lets later steps pass the complete address. It does not fetch, validate the
destination, or make external navigation safe on its own.

### Email `email`

An email address intended for address-aware controls and display. It remains a
string in expressions and is not proof that the address is deliverable.

### Person `person`

A provider or workspace person value. It tells renderers to prefer a person
presentation and labelled picker. Its exact JSON identity fields belong to the
nested shape or source provider; do not assume it is a workspace user ID.

### Status `status`

A lifecycle value such as open, closed, or completed. It supports status-aware
badges and equality Conditions. Unlike a database Status field definition, an
output shape does not define an ordered option list.

### Select `select`

One choice value. It supports choice-style display and equality tests, but its
shape contains no contract-level options array; options may come from a
resource picker or the live provider.

### Multi-select `multi_select`

Several choice values. It enables list-like or chip presentation and
containment Conditions. The actual value should be inspected because the shape
does not specify whether a provider uses strings or richer choice objects.

### List `list`

An ordered array. A nested `shape` describes each list item's object fields
when known, which lets the picker offer paths beneath a record collection and
lets a For-each consume it. Without a nested shape, the list is still usable
through a raw path but its item tokens cannot be named safely.

### Object `object`

A keyed JSON object. A nested `shape` describes its named children so a picker
can offer paths such as author then name. An Object without a nested shape is
opaque and requires a raw path or whole-value operation.

### Unknown `unknown`

A value whose useful presentation type is not declared. It remains available
as a raw value rather than disappearing from the catalog. Consumers must check
or format it at run time; no choice, numeric, date, or nested tokens can be
inferred.

## Shape limits

Shapes are advisory, source-owned metadata. A missing output shape degrades to
a raw whole-result path. A nested shape can be recursive, but authoring
interfaces may show only the useful declared depth. Optionality is not a shape
kind, so an entry can be correctly typed and still be absent on a particular
event. Guard optional paths before using them in side effects.