Scheduled Messages
Delayed messages, drip chains, and recurring broadcasts
Three types of scheduled messages
type: "once"— one-time message at a specific time (reminder 24h before an event)drip-chains— a sequence of messages with delays from a trigger (onboarding, lesson series)recurring— repeats on an interval (daily digest, weekly report)
Scheduled Send
Send a message at a specified time. Supports formatting (html/markdown), media attachments, and inline buttons.
subscriber_id string (UUID) requiredSubscriber UUID
text string requiredMessage text
scheduled_at string (ISO 8601) requiredDate and time. Three formats: with offset (2026-06-01T09:00:00+03:00), UTC (...Z) or naive + timezone field.
timezone string IANA timezone (e.g. Europe/Moscow). Required for naive scheduled_at and for cron.
name string Name (for dashboard)
Drip Chains
Automatic sequence of messages on subscription or event. Each step supports formatting, media, and buttons.
name string requiredName (for dashboard)
trigger string requiredTrigger: subscription, segment, permission
trigger_value string Trigger value (tag or permission key)
catch_up_mode string catch_up_mode for drip: from_start (default) or skip_past — skip steps whose time has already passed.
steps[].text string requiredMessage text
steps[].delay_minutes number requiredDelay from trigger moment (minutes)
Recurring
Regular broadcast at a set interval. Supports formatting, media, buttons, and filters (channel, segment, permission).
Recurring cadence: interval_hours / interval_days / cron
Specify exactly one of the three. cron fits 'every Sunday at 9:00' — the expression is evaluated in the given timezone with DST handling.
name string requiredName (for dashboard)
text string requiredMessage text
interval_hours number Repeat interval (hours)
interval_days number Repeat interval in days (alternative to interval_hours).
cron string Cron expression (5 fields: minute hour day month weekday). No more than once per hour, requires timezone.
timezone string IANA timezone (e.g. Europe/Moscow). Required for naive scheduled_at and for cron.
cron
Skipping inactive subscribers (6.3.4)
If the subscriber is inactive or has blocked the bot at send time, the message gets the skipped status and the project receives a scheduled.skipped webhook (instead of failed).
Custom events and drip triggers (6.3.3)
Track subscriber actions (started a lesson, added to cart) and trigger drip chains on them — a Customer.io alternative for Telegram/Max.
POST /v1/events/track — record a subscriber event. After recording: event.tracked webhook, drip chains with trigger=event start, chains are cancelled per cancel_on_events.
subscriber_id string (UUID) requiredSubscriber UUID
event string requiredEvent name: 1-64 chars, [a-zA-Z0-9._-]
properties object Arbitrary JSON object of properties (up to 8 KB). Available in the template as {{event.key}}.
Event-based drip trigger
A chain with trigger=event and trigger_value=event_name starts on tracking. properties_match filters: the chain starts only if event properties match. cancel_on_events lists events that cancel the subscriber's pending chain steps (e.g. a purchase cancels abandoned cart).