Zernio Python SDK

MCP serverDatabases & data

zernio lets your AI take care of social media for you: it can schedule and publish posts across 15+ platforms and analyze how they perform. Once added, your AI can also help with your social inbox, ads, and analytics.

Use Zernio Python SDK in Claude, ChatGPT or Ahel Desktop

Free. Sign in, add Zernio Python SDK and connect your AI. About a minute.

Also: Claude Code · Cursor · Codex

Then ask your AI: use Zernio Python SDK

Details

Available today. Use it from your connected AI after setup.

After adding zernio, tell your AI what you want to post and where, and it can schedule it for you. You can also ask it to check your inbox or analytics to see what is working.

Zernio Python SDKStart free

What your AI can do with it

  • Schedule posts across 15+ social platforms
  • Publish content to your accounts
  • Analyze how your posts perform
  • Work through your social media inbox
  • Keep an eye on your social media ads
  • Pull up analytics on your social performance

Install Zernio Python SDK

The server’s own address, for the clients that take one directly. Or connect Ahel once and every client you use reads it from one address, with the account kept on Ahel rather than in each client’s config.

  • Claude Code

    claude mcp add --transport http --scope user zernio-python-sdk 'https://mcp.zernio.com/mcp'

    Run it once in your project, then open /mcp to approve any sign-in the server asks for.

  • Claude Desktop

    https://mcp.zernio.com/mcp

    Add a custom connector in Settings, paste this address, and approve the sign-in.

  • Cursor

    cursor://anysphere.cursor-deeplink/mcp/install?name=zernio-python-sdk&config=eyJ1cmwiOiJodHRwczovL21jcC56ZXJuaW8uY29tL21jcCJ9

    Open the link and Cursor adds the server at that address.

  • ChatGPT

    https://mcp.zernio.com/mcp

    In Settings, enable Developer mode, create an MCP app, and paste this address. Your plan and workspace must allow custom apps.

  • Codex

    codex mcp add zernio-python-sdk --url 'https://mcp.zernio.com/mcp'

    Run it once, then sign in with codex mcp login zernio-python-sdk if the server asks for an account.

From the project's README

As published by zernio-dev/zernio-python in README.md.

The official Python SDK for the Zernio API — schedule and publish social media posts across Instagram, TikTok, YouTube, LinkedIn, X/Twitter, Facebook, Pinterest, Threads, Bluesky, Reddit, Snapchat, Telegram, WhatsApp, and Google Business Profile with a single integration.

Installation

pip install zernio-sdk

Quick Start

from zernio import Zernio

# Reads ZERNIO_API_KEY from environment (or pass explicitly)
client = Zernio()

# Publish to multiple platforms with one call
post = client.posts.create(
    content="Hello world from Zernio!",
    platforms=[
        {"platform": "twitter", "accountId": "acc_xxx"},
        {"platform": "linkedin", "accountId": "acc_yyy"},
        {"platform": "instagram", "accountId": "acc_zzz"},
    ],
    publish_now=True,
)

print(f"Published to {len(post['post']['platforms'])} platforms!")

Configuration

client = Zernio(
    api_key="your-api-key",  # Or set ZERNIO_API_KEY env var
    base_url="https://zernio.com/api",  # Optional, this is the default
    timeout=30.0,  # Optional, request timeout in seconds
)

Examples

Schedule a Post

post = client.posts.create(
    content="This post will go live tomorrow at 10am",
    platforms=[{"platform": "instagram", "accountId": "acc_xxx"}],
    scheduled_for="2025-02-01T10:00:00Z",
)

Platform-Specific Content

Customize content per platform while posting to all at once:

post = client.posts.create(
    content="Default content",
    platforms=[
        {
            "platform": "twitter",
            "accountId": "acc_twitter",
            "platformSpecificContent": "Short & punchy for X",
        },
        {
            "platform": "linkedin",
            "accountId": "acc_linkedin",
            "platformSpecificContent": "Professional tone for LinkedIn with more detail.",
        },
    ],
    publish_now=True,
)

Upload Media

# Option 1: Direct upload (simplest)
result = client.media.upload("path/to/video.mp4")
media_url = result["publicUrl"]

# Option 2: Upload from bytes
result = client.media.upload_bytes(video_bytes, "video.mp4", "video/mp4")
media_url = result["publicUrl"]

# Create post with media
post = client.posts.create(
    content="Check out this video!",
    media_urls=[media_url],
    platforms=[
        {"platform": "tiktok", "accountId": "acc_xxx"},
        {"platform": "youtube", "accountId": "acc_yyy", "youtubeTitle": "My Video"},
    ],
    publish_now=True,
)

Get Analytics

data = client.analytics.get(period="30d")

print("Analytics:", data)

List Connected Accounts

data = client.accounts.list()

for account in data["accounts"]:
    print(f"{account['platform']}: @{account['username']}")

Async Support

import asyncio
from zernio import Zernio

async def main():
    async with Zernio(api_key="your-api-key") as client:
        posts = await client.posts.alist(status="scheduled")
        print(f"Found {len(posts['posts'])} scheduled posts")

asyncio.run(main())

Error Handling

from zernio import Zernio, ZernioAPIError, ZernioRateLimitError, ZernioValidationError

client = Zernio(api_key="your-api-key")

try:
    client.posts.create(content="Hello!", platforms=[...])
except ZernioRateLimitError as e:
    print(f"Rate limited: {e}")
except ZernioValidationError as e:
    print(f"Invalid request: {e}")
except ZernioAPIError as e:
    print(f"API error: {e}")

Migration from Late

All old names continue to work. No code changes are required:

# Old style (still works)
from late import Late, LateAPIError
client = Late(api_key="...")

# New style
from zernio import Zernio, ZernioAPIError
client = Zernio()  # reads ZERNIO_API_KEY env var

Both from zernio import ... and from late import ... work identically. The LATE_API_KEY environment variable is also still supported as a fallback when ZERNIO_API_KEY is not set.

SDK Reference

Posts

MethodDescription
posts.list_posts()List posts
posts.bulk_upload_posts()Bulk upload from CSV
posts.create_post()Create post
posts.get_post()Get post
posts.update_post()Update post
posts.update_post_metadata()Update post metadata
posts.delete_post()Delete post
posts.edit_post()Edit published post
posts.retry_post()Retry failed post
posts.unpublish_post()Unpublish post

Accounts

MethodDescription
accounts.get_all_accounts_health()Check accounts health
accounts.list_accounts()List accounts
accounts.list_business_partners()List partner businesses of the Page
accounts.list_tik_tok_commercial_music()List trending commercial music
accounts.get_account_health()Check account health
accounts.get_account_posts()List posts published on the platform
accounts.get_bluesky_settings()Get Bluesky account settings
accounts.get_follower_stats()Get follower stats
accounts.get_google_business_review()Get a review
accounts.get_google_business_reviews()Get reviews
accounts.get_instagram_follow_status()Check whether an Instagram user follows the account
accounts.get_linked_in_mentions()Resolve LinkedIn mention
accounts.get_slack_settings()Get Slack account settings
accounts.get_tik_tok_creator_info()Get TikTok creator info
accounts.update_account()Update account
accounts.update_bluesky_settings()Update Bluesky account settings
accounts.update_slack_settings()Update Slack account settings
accounts.delete_account()Disconnect account
accounts.delete_google_business_review_reply()Delete a review reply
accounts.batch_get_google_business_reviews()Batch get reviews
accounts.grant_business_partner()Share the Page with a partner business
accounts.move_account_to_profile()Move account to another profile
accounts.reply_to_google_business_review()Reply to a review
accounts.revoke_business_partner()Revoke a partner business from the Page
accounts.search_tik_tok_locations()Search TikTok location tags

Profiles

MethodDescription
profiles.list_profiles()List profiles
profiles.create_profile()Create profile
profiles.get_profile()Get profile
profiles.update_profile()Update profile
profiles.delete_profile()Delete profile

Analytics

MethodDescription
analytics.get_analytics()Get post analytics
analytics.get_analytics_dashboard()Get an analytics dashboard
analytics.get_analytics_delta()Analytics changed since a cursor
analytics.get_best_time_to_post()Get best times to post
analytics.get_content_decay()Get content performance decay
analytics.get_daily_metrics()Get daily aggregated metrics
analytics.get_facebook_demographics()Get Facebook Page demographics
analytics.get_facebook_page_insights()Get Facebook Page insights
analytics.get_facebook_post_earnings()Get Facebook post monetization earnings
analytics.get_facebook_post_reactions()Get Facebook post reactions
analytics.get_google_business_performance()Get Google Business Profile performance metrics
analytics.get_google_business_search_keywords()Get Google Business Profile search keywords
analytics.get_instagram_account_insights()Get Instagram insights
analytics.get_instagram_demographics()Get Instagram demographics
analytics.get_instagram_follower_history()Get Instagram follower history
analytics.get_instagram_online_followers()Get Instagram online followers
analytics.get_linked_in_aggregate_analytics()Get LinkedIn aggregate stats
analytics.get_linked_in_org_aggregate_analytics()Get LinkedIn org analytics
analytics.get_linked_in_post_analytics()Get LinkedIn post stats
analytics.get_linked_in_post_reactions()Get LinkedIn post reactions
analytics.get_post_timeline()Get post analytics timeline
analytics.get_posting_frequency()Get frequency vs engagement
analytics.get_tik_tok_account_insights()Get TikTok account-level insights
analytics.get_you_tube_channel_insights()Get YouTube channel insights
analytics.get_you_tube_daily_views()Get YouTube daily views
analytics.get_you_tube_demographics()Get YouTube demographics
analytics.get_you_tube_video_retention()Get YouTube video retention curve
analytics.sync_external_posts()Sync an external post

Account Groups

MethodDescription
account_groups.list_account_groups()List groups
account_groups.create_account_group()Create group
account_groups.update_account_group()Update group
account_groups.delete_account_group()Delete group

Queue

MethodDescription
queue.list_queue_slots()List schedules
queue.create_queue_slot()Create schedule
queue.get_next_queue_slot()Get next available slot
queue.update_queue_slot()Update schedule
queue.delete_queue_slot()Delete schedule
queue.preview_queue()Preview upcoming slots

Webhooks

MethodDescription
webhooks.create_webhook_settings()Create webhook
webhooks.get_webhook_logs()List webhook delivery logs
webhooks.get_webhook_settings()List webhooks
webhooks.update_webhook_settings()Update webhook
webhooks.delete_webhook_settings()Delete webhook
webhooks.redeliver_webhook_event()Redeliver a webhook event
webhooks.test_webhook()Send test webhook

API Keys

MethodDescription
api_keys.list_api_keys()List keys
api_keys.create_api_key()Create key
api_keys.delete_api_key()Delete key
api_keys.verify_credential()Verify credential

Media

MethodDescription
media.get_media_presigned_url()Get upload URL
media.upload()Upload a file from path
media.upload_bytes()Upload file from bytes
media.upload_large()Upload large file with multipart
media.upload_large_bytes()Upload large file from bytes
media.upload_multiple()Upload multiple files

Tools

MethodDescription
tools.download_tik_tok_video()Download a TikTok video

Users

MethodDescription
users.list_users()List users
users.get_user()Get user

Usage

MethodDescription
usage.get_billing()Account billing snapshot (plan, cycle, balance, caps, status)
usage.get_calls_usage()Calling usage and cost
usage.get_sms_usage()SMS usage (volumes)
usage.get_usage()Usage snapshot (default) or billed-spend metering (with params)
usage.get_usage_stats()Get plan and usage snapshot (plan, limits, payment status)
usage.get_x_api_pricing()Get X API pricing table

Logs

MethodDescription
logs.list_logs()List activity logs

Connect (OAuth)

MethodDescription
connect.list_facebook_pages()List Facebook pages
connect.list_google_business_locations()List Google Business Profile locations
connect.list_instagram_pages()List Pages with a linked Instagram account
connect.list_linked_in_organizations()List LinkedIn orgs
connect.list_pinterest_boards_for_selection()List Pinterest boards
connect.list_slack_channels()List Slack channels for the channel picker
connect.list_snapchat_profiles()List Snapchat profiles
connect.list_whats_app_phone_numbers()List numbers for selection
connect.create_pinterest_board()Create Pinterest board
connect.create_youtube_playlist()Create YouTube playlist
connect.get_connect_url()Get OAuth connect URL
connect.get_facebook_pages()List Facebook pages
connect.get_gmb_locations()List Google Business Profile locations
connect.get_linked_in_organizations()List LinkedIn orgs
connect.get_page_webhook_subscription()Read a Facebook Page's webhook subscription
connect.get_pending_o_auth_data()Get pending OAuth data
connect.get_pinterest_boards()List Pinterest boards
connect.get_reddit_flairs()List subreddit flairs
connect.get_reddit_subreddits()List Reddit subreddits
connect.get_shopify_connect_url()Get Shopify OAuth connect URL
connect.get_subreddit_rules()Get subreddit rules
connect.get_telegram_connect_status()Generate Telegram code
connect.get_whats_app_sdk_config()Get Embedded Signup SDK config
connect.get_word_press_auth_url()Get WordPress.com OAuth connect URL
connect.get_youtube_captions()Get a YouTube video transcript
connect.get_youtube_playlists()List YouTube playlists
connect.update_facebook_page()Update Facebook page
connect.update_gmb_location()Update Google Business Profile location
connect.update_linked_in_organization()Switch LinkedIn account type
connect.update_pinterest_boards()Set default Pinterest board
connect.update_reddit_subreddits()Set default subreddit
connect.update_youtube_default_playlist()Set default YouTube playlist
connect.assign_google_business_location()Assign Google Business Profile location to another profile
connect.complete_meta_ads_business_login()Complete Meta business login
connect.complete_telegram_connect()Check Telegram status
connect.complete_whats_app_phone_selection()Complete number selection
connect.configure_tik_tok_ads_brand_identity()Set TikTok brand identity
connect.connect_ads()Connect ads for a platform
connect.connect_bluesky_credentials()Connect Bluesky account
connect.connect_discord_channel()Connect a Discord channel
connect.connect_open_ai_ads_credentials()Connect an OpenAI Ads account
connect.connect_shopify_with_token()Connect a Shopify store with a custom-app Admin token
connect.connect_slack_channel()Connect a Slack channel
connect.connect_whats_app_credentials()Connect WhatsApp via credentials
connect.connect_whats_app_embedded_signup()Connect WhatsApp from Embedded Signup
connect.connect_whop_ads_credentials()Connect a Whop account
connect.connect_word_press_with_application_password()Connect self-hosted WordPress with an application password
connect.handle_o_auth_callback()Complete OAuth callback
connect.initiate_telegram_connect()Connect Telegram directly
connect.resync_page_webhook_subscription()Re-subscribe a Facebook Page to Zernio's webhooks
connect.select_facebook_page()Select Facebook page
connect.select_google_business_location()Select Google Business Profile location
connect.select_instagram_account()Select the Page whose Instagram account to connect
connect.select_linked_in_organization()Select LinkedIn org
connect.select_pinterest_board()Select Pinterest board
connect.select_snapchat_profile()Select Snapchat profile
connect.set_reddit_post_flair()Set Reddit post flair
connect.vote_reddit_thing()Vote on a Reddit post or comment

Reddit

MethodDescription
reddit.get_reddit_feed()Get subreddit feed
reddit.get_reddit_post_comments()Get the comments of a Reddit post
reddit.search_reddit()Search posts

Account Settings

MethodDescription
account_settings.get_instagram_ice_breakers()Get IG ice breakers
account_settings.get_messenger_get_started()Get FB Get Started button
account_settings.get_messenger_greeting()Get FB greeting text
account_settings.get_messenger_ice_breakers()Get FB ice breakers
account_settings.get_messenger_menu()Get persistent menu
account_settings.get_telegram_commands()Get TG bot commands
account_settings.delete_instagram_ice_breakers()Delete IG ice breakers
account_settings.delete_messenger_get_started()Delete FB Get Started button
account_settings.delete_messenger_greeting()Delete FB greeting text
account_settings.delete_messenger_ice_breakers()Delete FB ice breakers
account_settings.delete_messenger_menu()Delete persistent menu
account_settings.delete_telegram_commands()Delete TG bot commands
account_settings.set_instagram_ice_breakers()Set IG ice breakers
account_settings.set_messenger_get_started()Set FB Get Started button
account_settings.set_messenger_greeting()Set FB greeting text
account_settings.set_messenger_ice_breakers()Set FB ice breakers
account_settings.set_messenger_menu()Set persistent menu
account_settings.set_telegram_commands()Set TG bot commands

Ad Accounts

MethodDescription
ad_accounts.list_account_callouts()List account callouts
ad_accounts.list_account_sitelinks()List account sitelinks
ad_accounts.list_account_structured_snippets()List account snippets
ad_accounts.list_ad_account_users()Ad account users
ad_accounts.list_ad_accounts()List ad accounts
ad_accounts.list_ad_labels()List ad labels
ad_accounts.list_ad_negative_keyword_lists()List negative keyword lists
ad_accounts.list_ad_studies()A/B tests and lift studies
ad_accounts.list_ads_business_centers()List TikTok Business Centers
ad_accounts.list_ads_instagram_accounts()List Instagram ad identities
ad_accounts.list_ads_instagram_posts()List Instagram posts to boost
ad_accounts.list_advertisable_applications()List advertisable apps
ad_accounts.list_custom_conversions()List custom conversions
ad_accounts.list_high_demand_periods()List high-demand periods
ad_accounts.list_meta_business_users()Business users
ad_accounts.list_meta_businesses()Businesses list
ad_accounts.list_page_users()Page users of a business
ad_accounts.list_tik_tok_ad_pixels()List TikTok ad pixels
ad_accounts.list_value_rule_sets()List value rule sets
ad_accounts.create_ad_account()Create Meta ad account
ad_accounts.create_ad_label()Create a Google Ads label
ad_accounts.create_ad_negative_keyword_list()Create a negative keyword list
ad_accounts.create_custom_conversion()Create custom conversion
ad_accounts.create_high_demand_period()Schedule a budget increase
ad_accounts.create_value_rule_set()Create a value rule set
ad_accounts.get_ad_account_finance()Ad account finances
ad_accounts.get_ad_account_hierarchy()Get manager account hierarchy
ad_accounts.get_ad_account_live_entities()Read an ad account's campaigns and ad sets live
ad_accounts.get_ad_comments()List comments on an ad
ad_accounts.get_ad_negative_keyword_list()Get a negative keyword list
ad_accounts.get_ads_activity_log()Ad account change / audit log
ad_accounts.get_dsa_defaults()Get ad account DSA defaults
ad_accounts.get_dsa_recommendations()Get DSA recommendations
ad_accounts.get_ios_fourteen_campaign_limits()Get iOS 14 campaign limits
ad_accounts.get_value_rule_set()Read a value rule set
ad_accounts.update_account_callouts()Update account callouts
ad_accounts.update_account_sitelinks()Update account sitelinks
ad_accounts.update_account_structured_snippets()Update account snippets
ad_accounts.update_ad_account()Update ad account settings
ad_accounts.update_ad_account_manager_link()Accept, decline, cancel or end a manager link
ad_accounts.update_ad_label()Update a Google Ads label
ad_accounts.update_ad_negative_keyword_list()Rename a negative keyword list
ad_accounts.update_value_rule_set()Replace a value rule set
ad_accounts.delete_ad_comment()Delete an ad comment
ad_accounts.delete_ad_negative_keyword_list()Delete a negative keyword list
ad_accounts.delete_value_rule_set()Delete a value rule set
ad_accounts.add_account_callouts()Add account callouts
ad_accounts.add_account_sitelinks()Add account sitelinks
ad_accounts.add_account_structured_snippets()Add account snippets
ad_accounts.assign_ad_account_user()Assign a user to an ad account
ad_accounts.assign_page_user()Assign a user to a Page
ad_accounts.attach_ad_label()Attach a Google Ads label
ad_accounts.detach_ad_label()Detach a Google Ads label
ad_accounts.hide_ad_comment()Hide or unhide an ad comment
ad_accounts.invite_ad_account_to_manager()Invite a client account to a manager
ad_accounts.remove_account_callout()Remove account callout
ad_accounts.remove_account_sitelink()Remove account sitelink
ad_accounts.remove_account_structured_snippet()Remove account snippet
ad_accounts.remove_ad_account_user()Remove a user from an ad account
ad_accounts.remove_ad_label()Remove a Google Ads label
ad_accounts.remove_page_user()Remove a user from a Page
ad_accounts.replace_ad_negative_keyword_list_keywords()Replace negative list keywords
ad_accounts.reply_to_ad_comment()Reply to an ad comment

Ad Audiences

MethodDescription
ad_audiences.list_ad_audiences()List custom audiences
ad_audiences.create_ad_audience()Create custom audience
ad_audiences.get_ad_audience()Get audience details
ad_audiences.update_ad_audience()Update an audience
ad_audiences.delete_ad_audience()Delete custom audience
ad_audiences.add_users_to_ad_audience()Add users to audience
ad_audiences.replace_ad_audience_companies()Replace audience companies

Shortened here. Read the whole README on GitHub.

Signals

GitHub stars
11
Forks
4
Last commit
Sep 2026
Advanced
Delivery
zernio MCP server → your Ahel connector (mcp.ahel.ai) → your AI.
Item type
mcp-server
Key
com-zernio-zernio
Source
github.com/zernio-dev/zernio-python
Hosted endpoint
https://mcp.zernio.com/mcp