| name | zernio |
| description | Schedule posts, manage inbox, broadcasts, sequences, and automations across 14 platforms from the CLI |
| version | 0.2.0 |
| homepage | https://docs.zernio.com |
| tags | ["social-media","scheduling","instagram","tiktok","twitter","linkedin","facebook","threads","youtube","bluesky","pinterest","reddit","snapchat","telegram"] |
| metadata | {"env":["ZERNIO_API_KEY (required) - Your Zernio API key from https://zernio.com/settings/api","ZERNIO_API_URL (optional) - Defaults to https://zernio.com/api"]} |
Zernio CLI
Schedule and publish social media posts across 13 platforms (Instagram, TikTok, X/Twitter, LinkedIn, Facebook, Threads, YouTube, Bluesky, Pinterest, Reddit, Snapchat, Telegram, Google Business) from any terminal or AI agent.
Setup
npm install -g @zernio/cli
zernio auth:login
zernio auth:set --key "sk_your-api-key"
zernio auth:check
Or set the env var directly: export ZERNIO_API_KEY="sk_your-api-key"
Core Workflow
The typical flow for scheduling a post:
zernio profiles:list
zernio accounts:list
zernio posts:create --text "Hello world!" --accounts <accountId1>,<accountId2> --scheduledAt "2025-01-15T10:00:00Z"
zernio posts:list --status scheduled
zernio analytics:posts --profileId <profileId>
Output Format
All commands output JSON by default (for AI agents and piping). Add --pretty for indented output.
Errors always return: {"error": true, "message": "...", "status": 401}
Commands Reference
Authentication
zernio auth:login
zernio auth:login --device-name "my-server"
zernio auth:set --key "sk_your-api-key"
zernio auth:set --key "sk_..." --url "https://custom.api.url/api/v1"
zernio auth:check
Profiles
zernio profiles:list
zernio profiles:create --name "My Brand"
zernio profiles:get <profileId>
zernio profiles:update <profileId> --name "New Name"
zernio profiles:delete <profileId>
Accounts (Social Media Connections)
zernio accounts:list
zernio accounts:list --profileId <id> --platform instagram
zernio accounts:get <accountId>
zernio accounts:health
Posts
zernio posts:create --text "Hello!" --accounts <id1>,<id2>
zernio posts:create --text "Scheduled post" --accounts <id> --scheduledAt "2025-06-01T14:00:00Z"
zernio posts:create --text "Draft idea" --accounts <id> --draft
zernio posts:create --text "Check this out" --accounts <id> --media "https://example.com/image.jpg"
zernio posts:create --text "Description" --accounts <id> --title "My Video Title"
zernio posts:list --status published --page 1 --limit 20
zernio posts:list --profileId <id> --from "2025-01-01" --to "2025-01-31"
zernio posts:list --search "product launch"
zernio posts:get <postId>
zernio posts:delete <postId>
zernio posts:retry <postId>
Analytics (requires analytics add-on)
zernio analytics:posts --profileId <id>
zernio analytics:posts --postId <postId>
zernio analytics:posts --platform instagram --sortBy engagement
zernio analytics:daily --accountId <id> --from "2025-01-01" --to "2025-01-31"
zernio analytics:best-time --accountId <id>
Media
zernio media:upload ./photo.jpg
zernio media:upload ./video.mp4
Platform-Specific Examples
Instagram Reel
zernio media:upload ./reel.mp4
zernio posts:create --text "New reel!" --accounts <instagramAccountId> --media "<returned-url>"
Multi-Platform Post
zernio posts:create \
--text "Big announcement!" \
--accounts <instagramId>,<twitterId>,<linkedinId> \
--media "https://example.com/image.jpg" \
--scheduledAt "2025-06-01T09:00:00Z" \
--timezone "America/New_York"
Threads + Twitter Simultaneous
zernio posts:create --text "Thoughts on AI agents..." --accounts <threadsId>,<twitterId>
Supported Platforms
Instagram, TikTok, X (Twitter), LinkedIn, Facebook, Threads, YouTube, Bluesky, Pinterest, Reddit, Snapchat, Telegram, Google Business Profile.
Error Handling
Common errors and their meaning:
401 - Invalid or missing API key
402 - Feature requires paid add-on (e.g., analytics)
403 - Plan limit reached or insufficient permissions
404 - Resource not found
429 - Rate limited (account in cooldown)
Inbox (DMs, Comments, Reviews)
zernio inbox:conversations --platform instagram
zernio inbox:conversations --accountId <id> --status active
zernio inbox:messages <conversationId> --accountId <id>
zernio inbox:send <conversationId> --accountId <id> --message "Thanks for reaching out!"
zernio inbox:comments --platform instagram --since "2025-01-01"
zernio inbox:post-comments <postId> --accountId <id>
zernio inbox:reply <postId> --accountId <id> --message "Thank you!"
zernio inbox:reply <postId> --accountId <id> --message "Great point" --commentId <commentId>
zernio inbox:reviews --minRating 1 --maxRating 3 --hasReply false
zernio inbox:review-reply <reviewId> --accountId <id> --message "Thanks for your feedback!"
Contacts
zernio contacts:list --profileId <id>
zernio contacts:list --search "john" --tag vip --platform instagram
zernio contacts:create --profileId <id> --accountId <id> --platform instagram --platformUserId <userId> --name "John Doe" --tags "vip,lead"
zernio contacts:get <contactId>
zernio contacts:update <contactId> --name "Jane Doe" --tags "vip,customer"
zernio contacts:delete <contactId>
zernio contacts:channels <contactId>
zernio contacts:set-field <contactId> <slug> --value "some value"
zernio contacts:clear-field <contactId> <slug>
zernio contacts:bulk-create --profileId <id> --accountId <id> --platform instagram --file ./contacts.json
Broadcasts
zernio broadcasts:list --profileId <id> --status draft
zernio broadcasts:create --profileId <id> --accountId <id> --platform instagram --name "Summer Sale" --message "Check out our summer deals!"
zernio broadcasts:create --profileId <id> --accountId <id> --platform whatsapp --name "Order Update" --templateName "order_confirmation" --templateLanguage "en"
zernio broadcasts:add-recipients <broadcastId> --contactIds <id1>,<id2>,<id3>
zernio broadcasts:add-recipients <broadcastId> --useSegment
zernio broadcasts:send <broadcastId>
zernio broadcasts:schedule <broadcastId> --scheduledAt "2025-06-01T10:00:00Z"
zernio broadcasts:get <broadcastId>
zernio broadcasts:recipients <broadcastId> --status delivered
zernio broadcasts:cancel <broadcastId>
Sequences (Drip Campaigns)
zernio sequences:list --profileId <id> --status active
zernio sequences:create --profileId <id> --accountId <id> --platform instagram --name "Welcome Series" --stepsFile ./steps.json
zernio sequences:activate <sequenceId>
zernio sequences:pause <sequenceId>
zernio sequences:enroll <sequenceId> --contactIds <id1>,<id2>
zernio sequences:enrollments <sequenceId> --status active
zernio sequences:unenroll <sequenceId> <contactId>
Comment-to-DM Automations
zernio automations:list --profileId <id>
zernio automations:create \
--profileId <id> --accountId <id> \
--platformPostId <igPostId> \
--name "Lead Magnet" \
--keywords "info,details,link" \
--dmMessage "Here's the link you asked for: https://example.com" \
--commentReply "Check your DMs!"
zernio automations:create \
--profileId <id> --accountId <id> \
--platformPostId <igPostId> \
--name "Engagement Boost" \
--dmMessage "Thanks for engaging! Here's a special offer..."
zernio automations:update <automationId> --isActive false
zernio automations:update <automationId> --keywords "buy,order" --matchMode exact
zernio automations:logs <automationId> --status sent
zernio automations:logs <automationId> --status failed
zernio automations:delete <automationId>
Tips for AI Agents
- Always call
zernio accounts:list first to get valid account IDs before creating posts
- Use
zernio accounts:health to check if accounts are rate-limited before posting
- Post IDs from
zernio posts:create can be used with zernio posts:get to check publish status
- For multi-image posts, upload each file with
zernio media:upload first, then pass all URLs comma-separated to --media
- Schedule posts at least 5 minutes in the future for reliable delivery
- For inbox commands, you always need an
--accountId to specify which social account to use
- Broadcasts and sequences work across all inbox platforms (Instagram, Facebook, Telegram, X, WhatsApp, Bluesky, Reddit)
- Comment-to-DM automations currently support Instagram and Facebook
- Use
zernio contacts:list to get contact IDs before enrolling in sequences or adding to broadcasts