status'draft' | 'active' | 'archived'
- draft - Draft
- active - Active
- archived - Archived
created_atstring date-time required
updated_atstring date-time required
exit_condition'exit_on_conversion' | 'exit_on_trigger_not_matched' | 'exit_on_trigger_not_matched_or_conversion' | 'exit_only_at_end'
- exit_on_conversion - Conversion
- exit_on_trigger_not_matched - Trigger Not Matched
- exit_on_trigger_not_matched_or_conversion - Trigger Not Matched Or Conversion
- exit_only_at_end - Only At End
abort_actionstring nullable required
variablesobject[]
Workflow vars (key, type, default). Total <5KB.
billable_action_typesunknown required
user_access_levelstring nullable required
The effective access level the user has for this object
draft_updated_atstring date-time nullable required
When the draft was last written; null when there's no staged draft. Pass this to publish (and as base_updated_at on further draft edits) so a concurrent editor's changes aren't clobbered — a mismatch returns 409.
action_redirectsobject nullable required
Skip-forward map for deleted steps: {deleted_action_id: next surviving action_id}. Maintained automatically when a live graph edit deletes actions, so in-flight runs parked on a deleted step continue at its surviving successor instead of exiting. Null when no live deletions have occurred.
email_sending_paused_atstring date-time nullable required
When PostHog paused this workflow's email automatically because its spam complaint or hard bounce rate crossed a threshold. Null when sending is not paused. Read-only: only the resume_email_sending endpoint clears a pause, so a normal update or publish can't lift it.
email_sending_paused_reasonstring required
Plain-language reason for the pause, naming the signal and the window. Empty when not paused.
email_sending_paused_bystring required
Who paused it: "auto" for the deliverability detector, "staff" for PostHog staff. A staff pause can only be resumed by staff, so the resume endpoint refuses it. Empty when not paused.
email_sending_pause_requires_supportboolean required
True when only PostHog staff can lift the current pause: staff placed it, or it landed shortly after a resume, so another self-serve resume is not offered. False when not paused or when the resume endpoint would accept the caller.
email_sending_resumed_atstring date-time nullable required
When sending was last resumed. Every detector window starts after this, so resuming does not immediately re-trip on the feedback that caused the pause. Null if never paused.