---
title: "Step options"
description: "Every field a step can carry, by step type, in plain words: schedule, audience, recipient, sender, message, reminders, escalations and the type-specific settings for calendar, channel and ticket steps."
sidebar:
  order: 3
area: flows
feature: steps
appPath: /flows/home
lastVerified: 2026-10-22
version: "2026-10-16"
audience: admin
related:
  - flows/steps/schedule-a-step
  - flows/steps/choose-recipients-and-cc
  - flows/steps/reference-tokens
  - for-agents
---

A step is stored as a small document inside its automation version or campaign. The tables name each field as the app labels it, with the value it holds. The same shape is what the MCP tools and exports use, so it is also the reference for anyone automating Pyn.

## Fields on every step

| Field | Label in the app | Values |
| --- | --- | --- |
| `id` | | A unique id Pyn assigns. |
| `title` | Step title | Free text; empty shows the step type. |
| `type` | Chosen in **Add Step** | `send-message`, `send-channel-message`, `invite-to-calendar-event`, `send-channel-invite`, `raise-ticket`, `add-message-to-context`; see below. |
| `state` | **Enabled** / **Disabled** | `enabled` or `disabled`. A disabled step never sends. |
| `schedule.type` | | `relative` in an automation, `absolute` in a campaign. |
| `schedule.offset` | **Schedule** | For `relative`: a duration such as `{ "days": -7 }` or `{ "weeks": 2 }`; negative is before the reference date. |
| `schedule.date` | **Scheduled date** | For `absolute`: a calendar date, `2026-03-02`. |
| `schedule.hour`, `schedule.minute` | **at** | 0 to 23 and 0 to 59. |
| `schedule.timezone` | **in** | `recipient`, or a time zone name such as `Australia/Sydney`. |
| `schedule.deliverOn` | **Days of Week** | One or more of `MONDAY` to `SUNDAY`. |
| `schedule.onSkippableDate` | **On Non-Delivery Days** | `deliver-anyway`, `deliver-before` (previous delivery day) or `deliver-after` (next delivery day). |
| `audience` | **Audience** tab | `lifecycle` (any of `current`, `joiner`, `leave`, `terminated`), `includeGroups`, `excludeGroups` (group ids). Absent means current employees only. |
| `skipIfOverdue` | **Skip if overdue at enrollment** | `true` to skip a step whose date has passed when someone enrols. |
| `reminders` | **Reminders** | Up to three in the step drawer (**Add reminder** disappears at three), each with `offset` (days after send) and `enabled`. The schema accepts up to ten, so a step written through the API or an MCP server can carry more. |

## Message steps

`send-message` (a direct message or email) and `send-channel-message` (a channel post) add:

| Field | Label | Values |
| --- | --- | --- |
| `medium` | Fixed by the step type | `slack` or `email`. `teams` and `sms` exist in the schema but no step in the dialog creates them. |
| `sender` | **From** | A sender id. Absent means the workspace default. |
| `conditionalSender` | **From** | A conditional sender id. A step has one of `sender` or `conditionalSender`, never both. |
| `recipient` | **To** | A recipient, see below. A channel post's recipient is a channel. |
| `ccRecipients` | **Cc** | Up to three recipients. |
| `subject` | **Subject** | A single-line document, email only. |
| `message` | The editor | The composed message. |
| `body`, `html` | **Email body** | `body: "html"` with the Liquid HTML in `html` for a Raw HTML email; otherwise the composed `message` is the body. Email only. |
| `deactivateUnfurlLinks`, `deactivateUnfurlMedia` | **Advanced** | `true` to switch off Slack previews. |
| `escalations` | **Escalations** | Up to three, each with `offset` (days after send), `recipient` (any recipient except a group) and `enabled`. |

## Recipients

| Shape | Label | Fields |
| --- | --- | --- |
| Relative | **Employee**, **Manager**, **Skip-level Manager**, **Buddy**, **HRBP** | `type: "relative"`, `recipient` one of `employee`, `manager`, `skip-manager`, `buddy`, `hrbp`; optional `address` of `primary` or `personal`. |
| A person | **People** | `type: "employee"`, `recipient` the employee id, optional `address`. |
| A group | **Groups** (campaign steps) | `type: "group"`, `recipient` the group id. Every member receives the step. |
| A channel | **Channels** | `type: "channel"`, `recipient` the channel id. |
| A custom email address | **Custom Email Recipients** | `type: "custom-email"`, `recipient` the custom email recipient id. |

## Other step types

| Type | Label in **Add Step** | Extra fields |
| --- | --- | --- |
| `invite-to-calendar-event` | **Invite to Calendar Event** | `recipient`; `eventId` (the calendar event); `inviteTo` of `next-occurrence`, `next-occurrence-reference-date` or `all-occurrences`. |
| `send-channel-invite` | **Add to Channel** | `sender`; `recipient` (who is added); `channel` (the channel id); `medium: "slack"`. |
| `raise-ticket` | **Raise Ticket** | `integration` (the Jira connection), `project`, `issueType`, `summary` (single line), `description`; `medium: "jira"`. No recipient. |
| `add-message-to-context` | **Add Message to Employee Context** and the other **AI & Context** rows | `recipient` (whose context). |
| `send-acknowledgement`, `send-content`, `send-content-link` | Not offered | Older message types still accepted in existing automations; new steps use buttons in a `send-message` step instead. |

## Campaign template milestones

A campaign template is a list of milestones, each with `id`, `title`, `emoji`, `color` (a hex colour), `date` (a calendar date) and `steps` (steps as above, with absolute schedules). Enrolling a milestone turns it into a campaign with that date as its reference date. See [Campaign templates](https://support.pynhq.com/flows/campaign-templates/).

## Related

- [Schedule a step](https://support.pynhq.com/flows/steps/schedule-a-step/) for the schedule fields as the app shows them.
- [Choose recipients and Cc](https://support.pynhq.com/flows/steps/choose-recipients-and-cc/) for the recipient shapes.
- [Tokens](https://support.pynhq.com/flows/steps/reference-tokens/) for what goes inside `message` and `html`.
- [For agents](https://support.pynhq.com/for-agents/) for the machine-readable outputs of this site.
