Guides
Step-by-step recipes for common tasks. Each guide is a self-contained walkthrough from the first request to the result.
In this section
Integrate in 5 minutes
Create a project in the dashboard, connect a Telegram bot and copy the API key (zn_live_...). The bot reaches subscribers after /start — each /start creates a subscription. Get a subscriber_id via GET /v1/subscribers and send your first message:
Done — the message is delivered. Next: templates, media, buttons — see the "Send" section.
OTP login for users
Replace SMS codes with free delivery via Telegram/Max. Zapnoty generates the code, sends it to the subscriber and verifies the input. The purpose field separates codes for different scenarios (login, payment).
Limit — 3 codes per hour per subscriber. Code length (4/6/8) and TTL are configurable. For users not yet subscribed there is the /v1/otp/request deeplink flow.
Broadcasts and segmentation
A broadcast filters the audience by tags and permissions. tags_all — all tags (AND), tags_any — at least one (OR), exclude_tags — exclusions. Before sending, add dry_run: true to see the audience size and credit estimate.
Status — GET /v1/broadcast/{job_id}, cancel — DELETE. messages_per_minute spreads a large broadcast over time.
Drip automation and events
A drip chain sends a series of messages on a trigger. The event trigger starts the chain when /v1/events/track is called — a Customer.io alternative: track user actions (signup, lesson_started, cart_updated) and build automation on them. cancel_on_events stops the chain (a purchase cancels an abandoned cart).
Event properties are available in the template as {{event.key}}. properties_match filters the trigger by properties.
Receiving webhooks
Webhooks notify your server about events (delivery, unsubscribe, ticket reply). Create an endpoint via /v1/webhooks with a URL and events. Every request is signed with the X-Zapnoty-Signature header (HMAC-SHA256 of "timestamp.body") — always verify the signature:
Failed deliveries are retried for up to 24 hours on a Stripe-style schedule. The delivery log is in the dashboard. See the "Webhooks" section for details.