Zernio

Zernio Python SDK

PyPI version License

One API to post everywhere. 16 platforms, zero headaches.

The official Python SDK for the [Zernio API](https://zernio.com) — 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 ```bash pip install zernio-sdk ``` ## Quick Start ```python 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 ```python 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 ```python 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: ```python 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 ```python # 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 ```python data = client.analytics.get(period="30d") print("Analytics:", data) ``` ### List Connected Accounts ```python data = client.accounts.list() for account in data["accounts"]: print(f"{account['platform']}: @{account['username']}") ``` ### Async Support ```python 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 ```python 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: ```python # 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 | Method | Description | |--------|-------------| | `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.pin_post()` | Pin post | | `posts.retry_post()` | Retry failed post | | `posts.review_post()` | Approve or reject a post | | `posts.unpin_post()` | Unpin post | | `posts.unpublish_post()` | Unpublish post | ### Accounts | Method | Description | |--------|-------------| | `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_hub_spot_settings()` | Get HubSpot account settings | | `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_hub_spot_settings()` | Update HubSpot 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 | Method | Description | |--------|-------------| | `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 | Method | Description | |--------|-------------| | `analytics.list_facebook_tagged_posts()` | List the posts a Facebook Page is tagged in | | `analytics.list_facebook_visitor_posts()` | List visitor posts on a Facebook Page | | `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_analytics_metadata()` | List Google Analytics (GA4) dimensions and metrics | | `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_demographics()` | Get LinkedIn organization follower demographics | | `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.run_google_analytics_realtime_report()` | Run a Google Analytics (GA4) realtime report | | `analytics.run_google_analytics_report()` | Run a Google Analytics (GA4) report | | `analytics.sync_external_posts()` | Sync an external post | ### Account Groups | Method | Description | |--------|-------------| | `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 | Method | Description | |--------|-------------| | `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 | Method | Description | |--------|-------------| | `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 | Method | Description | |--------|-------------| | `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 | Method | Description | |--------|-------------| | `media.get_media_presigned_url()` | Get upload URL | | `media.prepare_media()` | Prepare media for a platform | | `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 | Method | Description | |--------|-------------| | `tools.download_tik_tok_video()` | Download a TikTok video | ### Users | Method | Description | |--------|-------------| | `users.list_users()` | List users | | `users.get_user()` | Get user | ### Usage | Method | Description | |--------|-------------| | `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 | Method | Description | |--------|-------------| | `logs.list_logs()` | List activity logs | ### Connect (OAuth) | Method | Description | |--------|-------------| | `connect.list_facebook_pages()` | List Facebook pages | | `connect.list_google_analytics_properties()` | List Google Analytics properties for a pending connect | | `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_handoff()` | Get a phone handoff | | `connect.get_connect_url()` | Get OAuth connect URL | | `connect.get_connect_welcome_screen()` | Get the saved welcome screen | | `connect.get_facebook_pages()` | List Facebook pages | | `connect.get_gmb_locations()` | List Google Business Profile locations | | `connect.get_google_analytics_connect_url()` | Get Google Analytics OAuth connect URL | | `connect.get_hub_spot_connect_url()` | Get HubSpot OAuth connect URL | | `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_webflow_connect_url()` | Get Webflow OAuth URL | | `connect.get_whats_app_sdk_config()` | Get Embedded Signup SDK config | | `connect.get_wix_connect_url()` | Get Wix site install URL | | `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_connect_welcome_screen()` | Save the welcome screen | | `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_webflow_with_site_token()` | Connect Webflow with a site API token | | `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_analytics_property()` | Connect the chosen Google Analytics property | | `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 | Method | Description | |--------|-------------| | `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 | Method | Description | |--------|-------------| | `account_settings.get_facebook_page_info()` | Get a Facebook Page's public info | | `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.update_facebook_page_info()` | Update a Facebook Page's public info | | `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 | Method | Description | |--------|-------------| | `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_user_invitation_approvals()` | List invitations awaiting multi-party approval | | `ad_accounts.list_ad_account_user_invitations()` | List user access invitations | | `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 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_billing()` | Get ad account billing | | `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.invite_ad_account_user()` | Invite a user to an ad account by email | | `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_accounts.revoke_ad_account_user_invitation()` | Revoke a user access invitation | | `ad_accounts.set_up_ad_account_billing()` | Set up ad account billing (monthly invoicing) | | `ad_accounts.withdraw_ad_account_user_invitation_approval()` | Withdraw an invitation awaiting multi-party approval | ### Ad Audiences | Method | Description | |--------|-------------| | `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.remove_users_from_ad_audience()` | Remove users from audience | | `ad_audiences.replace_ad_audience_companies()` | Replace audience companies | ### Ad Campaigns | Method | Description | |--------|-------------| | `ad_campaigns.list_ad_campaigns()` | List campaigns | | `ad_campaigns.list_ad_group_assets()` | List ad-group assets | | `ad_campaigns.list_ad_keywords()` | List Search keywords | | `ad_campaigns.list_ad_sets()` | List ad sets | | `ad_campaigns.list_ads()` | List ads | | `ad_campaigns.list_bid_strategies()` | List portfolio bid strategies | | `ad_campaigns.list_campaign_assets()` | List campaign assets | | `ad_campaigns.list_campaign_negative_keyword_lists()` | List campaign negative lists | | `ad_campaigns.list_campaign_negative_keywords()` | List campaign-level negative keywords | | `ad_campaigns.list_google_asset_groups()` | List Performance Max asset groups | | `ad_campaigns.list_google_recommendations()` | List Google Ads recommendations | | `ad_campaigns.list_shared_budgets()` | List shared budgets | | `ad_campaigns.list_tik_tok_smart_plus_reviews()` | Review status of every TikTok Smart+ ad of an advertiser | | `ad_campaigns.bulk_update_ad_campaign_status()` | Pause or resume many campaigns | | `ad_campaigns.create_ad_campaign()` | Create a standalone campaign | | `ad_campaigns.create_ad_set()` | Create a standalone ad group | | `ad_campaigns.create_bid_strategy()` | Create portfolio bid strategy | | `ad_campaigns.create_google_asset_group()` | Create a Performance Max asset group | | `ad_campaigns.create_shared_budget()` | Create a shared budget | | `ad_campaigns.create_standalone_ad()` | Create standalone ad | | `ad_campaigns.get_ad()` | Get ad details | | `ad_campaigns.get_ad_campaign_details()` | Get live campaign details | | `ad_campaigns.get_ad_review()` | Read the platform's review verdict for an ad | | `ad_campaigns.get_ad_set_details()` | Get live ad-set details | | `ad_campaigns.get_ad_tree()` | Get campaign tree | | `ad_campaigns.get_ads_timeline()` | Get daily account metrics | | `ad_campaigns.get_campaign_ad_schedule()` | Read a campaign's ad schedule (dayparting) | | `ad_campaigns.get_campaign_bidding()` | Read a campaign's current bidding | | `ad_campaigns.get_campaign_conversion_goals()` | Get campaign conversion goals | | `ad_campaigns.get_campaign_targeting()` | Read a Google campaign's device, location, excluded location, and language targeting | | `ad_campaigns.get_google_asset_group()` | Get a Performance Max asset group | | `ad_campaigns.get_tik_tok_smart_plus_ad_review()` | Review status of each creative in a TikTok Smart+ ad | | `ad_campaigns.update_ad()` | Update ad | | `ad_campaigns.update_ad_campaign()` | Update a campaign | | `ad_campaigns.update_ad_campaign_status()` | Pause or resume a campaign | | `ad_campaigns.update_ad_group_assets()` | Update ad-group assets | | `ad_campaigns.update_ad_keyword()` | Pause or enable a Search keyword | | `ad_campaigns.update_ad_set()` | Update an ad set | | `ad_campaigns.update_ad_set_status()` | Pause or resume a single ad set | | `ad_campaigns.update_ad_status()` | Pause or resume a single ad | | `ad_campaigns.update_bid_strategy()` | Update portfolio bid strategy | | `ad_campaigns.update_campaign_ad_schedule()` | Replace a campaign's ad schedule (dayparting) | | `ad_campaigns.update_campaign_assets()` | Update campaign assets | | `ad_campaigns.update_campaign_conversion_goals()` | Update campaign conversion goals | | `ad_campaigns.update_campaign_targeting()` | Edit a Google campaign's device, location, excluded location, or language targeting | | `ad_campaigns.update_google_asset_group()` | Update a Performance Max asset group | | `ad_campaigns.delete_ad()` | Cancel an ad | | `ad_campaigns.delete_ad_campaign()` | Delete a campaign | | `ad_campaigns.delete_ad_set()` | Delete an ad set | | `ad_campaigns.add_ad_keywords()` | Add Search ad-group keywords | | `ad_campaigns.apply_google_recommendations()` | Apply Google Ads recommendations | | `ad_campaigns.attach_ad_group_assets()` | Attach ad-group assets | | `ad_campaigns.attach_campaign_assets()` | Attach campaign assets | | `ad_campaigns.boost_post()` | Boost post as ad | | `ad_campaigns.dismiss_google_recommendations()` | Dismiss Google Ads recommendations | | `ad_campaigns.duplicate_ad()` | Duplicate an ad | | `ad_campaigns.duplicate_ad_campaign()` | Duplicate a campaign | | `ad_campaigns.duplicate_ad_set()` | Duplicate an ad set | | `ad_campaigns.edit_google_asset_group_assets()` | Link or unlink asset group assets | | `ad_campaigns.remove_ad_group_assets()` | Remove ad-group assets | | `ad_campaigns.remove_ad_keyword()` | Remove a Search keyword | | `ad_campaigns.remove_campaign_assets()` | Remove campaign assets | | `ad_campaigns.remove_google_asset_group()` | Remove a Performance Max asset group | | `ad_campaigns.replace_campaign_negative_keyword_lists()` | Replace campaign negative lists | | `ad_campaigns.replace_campaign_negative_keywords()` | Replace campaign-level negative keywords | | `ad_campaigns.replace_google_listing_group_filters()` | Replace an asset group's listing-group tree | ### Ad Creatives | Method | Description | |--------|-------------| | `ad_creatives.list_ad_creatives()` | Creative library | | `ad_creatives.list_ad_images()` | Ad image library | | `ad_creatives.list_ad_videos()` | Ad video library | | `ad_creatives.list_ads_tik_tok_identities()` | List TikTok ad identities | | `ad_creatives.list_partnership_ad_content()` | List partnership ad content | | `ad_creatives.list_partnership_ad_permissions()` | List partnership permissions | | `ad_creatives.create_ad_creative()` | Create a standalone creative | | `ad_creatives.get_ad_creative()` | Creative details | | `ad_creatives.get_ad_media()` | Direct video and image URLs for an ad | | `ad_creatives.get_ad_previews()` | Render previews of an existing ad | | `ad_creatives.get_ad_video_status()` | Get ad video processing status | | `ad_creatives.update_ad_creative()` | Rename a creative | | `ad_creatives.delete_ad_creative()` | Delete a creative | | `ad_creatives.delete_ad_video()` | Delete an ad video | | `ad_creatives.generate_ad_previews()` | Render pre-create ad previews | | `ad_creatives.set_partnership_ad_permission()` | Set partnership permission | | `ad_creatives.upload_ad_image()` | Upload an ad image from base64 | | `ad_creatives.upload_ad_video()` | Upload an ad video | ### Ad Insights | Method | Description | |--------|-------------| | `ad_insights.list_local_services_lead_conversations()` | List lead conversations | | `ad_insights.list_local_services_leads()` | Google Local Services Ads leads | | `ad_insights.create_ad_insights_report()` | Submit async insights report | | `ad_insights.get_ad_analytics()` | Get ad analytics | | `ad_insights.get_ad_insights_report()` | Poll an async insights report run | | `ad_insights.get_ads_search_terms()` | Google Ads search terms report | | `ad_insights.get_campaign_analytics()` | Get campaign analytics | | `ad_insights.get_tik_tok_smart_plus_material_report()` | Per-creative performance inside TikTok Smart+ ads | | `ad_insights.generate_keyword_historical_metrics()` | Get historical keyword metrics | | `ad_insights.generate_keyword_ideas()` | Generate keyword ideas | | `ad_insights.query_ad_insights()` | Flexible live insights query | ### Ad Library | Method | Description | |--------|-------------| | `ad_library.search_ad_library()` | Search the public Ad Library | ### Ad Rules | Method | Description | |--------|-------------| | `ad_rules.list_ad_rule_runs()` | List an ad rule's runs | | `ad_rules.list_ad_rules()` | List ad rules | | `ad_rules.create_ad_rule()` | Create an ad rule | | `ad_rules.get_ad_rule()` | Get an ad rule | | `ad_rules.update_ad_rule()` | Update an ad rule | | `ad_rules.delete_ad_rule()` | Delete an ad rule | | `ad_rules.preview_ad_rule()` | Preview an ad rule | ### Ad Targeting | Method | Description | |--------|-------------| | `ad_targeting.get_linked_in_bid_pricing()` | Suggested bid and budget bounds | | `ad_targeting.get_linked_in_supply_forecast()` | Forecast ad delivery | | `ad_targeting.browse_ad_targeting()` | Browse targeting categories | | `ad_targeting.estimate_ad_reach()` | Estimate audience reach | | `ad_targeting.search_ad_interests()` | Search targeting interests | | `ad_targeting.search_ad_targeting()` | Search targeting options | ### Blogs | Method | Description | |--------|-------------| | `blogs.list_blog_articles()` | List blog articles | | `blogs.list_blogs()` | List blogs | | `blogs.create_blog()` | Create a blog | | `blogs.create_blog_article()` | Create a blog article | | `blogs.get_blog()` | Get a blog | | `blogs.get_blog_article()` | Get a blog article | | `blogs.update_blog()` | Update a blog | | `blogs.update_blog_article()` | Update a blog article | | `blogs.delete_blog()` | Delete a blog | | `blogs.delete_blog_article()` | Delete a blog article | ### Branded Calling | Method | Description | |--------|-------------| | `branded_calling.list_branded_calling_call_reasons()` | List pre-approved call reasons | | `branded_calling.list_branded_calling_enterprises()` | List registered businesses | | `branded_calling.list_branded_calling_identities()` | List caller identities | | `branded_calling.list_branded_calling_identity_numbers()` | List the numbers on a caller identity | | `branded_calling.create_branded_calling_enterprise()` | Register a business for Branded Calling | | `branded_calling.create_branded_calling_identity()` | Create a caller identity | | `branded_calling.get_branded_calling_enterprise()` | Get a registered business | | `branded_calling.get_branded_calling_identity()` | Get a caller identity | | `branded_calling.update_branded_calling_identity()` | Edit or resubmit a caller identity | | `branded_calling.delete_branded_calling_enterprise()` | Delete a registered business | | `branded_calling.delete_branded_calling_identity()` | Delete a caller identity | | `branded_calling.attach_branded_calling_numbers()` | Attach numbers to a verified identity | | `branded_calling.confirm_branded_calling_authorizer_email()` | Confirm the authorizer's code | | `branded_calling.detach_branded_calling_numbers()` | Detach numbers from an identity | | `branded_calling.preflight_branded_calling_identity()` | Dry-run a caller identity before creating it | | `branded_calling.resend_branded_calling_authorizer_code()` | Resend the authorizer's code | | `branded_calling.share_branded_calling_identity_form()` | Create a caller identity share link | ### Broadcasts | Method | Description | |--------|-------------| | `broadcasts.list_broadcast_recipients()` | List broadcast recipients | | `broadcasts.list_broadcasts()` | List broadcasts | | `broadcasts.create_broadcast()` | Create broadcast draft | | `broadcasts.get_broadcast()` | Get broadcast details | | `broadcasts.update_broadcast()` | Update broadcast | | `broadcasts.delete_broadcast()` | Delete broadcast | | `broadcasts.add_broadcast_recipients()` | Add recipients to a broadcast | | `broadcasts.cancel_broadcast()` | Cancel broadcast | | `broadcasts.schedule_broadcast()` | Schedule broadcast for later | | `broadcasts.send_broadcast()` | Send broadcast now | ### Business Agent | Method | Description | |--------|-------------| | `business_agent.list_business_agent_allowlist()` | List allowlisted consumers | | `business_agent.list_business_agent_connector_tools()` | List connector tools | | `business_agent.list_business_agent_connectors()` | List connectors | | `business_agent.list_business_agent_faqs()` | List FAQs | | `business_agent.list_business_agent_files()` | List knowledge files | | `business_agent.list_business_agent_settings()` | List agent settings | | `business_agent.list_business_agent_skills()` | List skills | | `business_agent.list_business_agent_ui_skills()` | List UI skills | | `business_agent.list_business_agent_websites()` | List crawled websites | | `business_agent.create_business_agent_connector()` | Create a connector | | `business_agent.create_business_agent_connector_tool()` | Create a connector tool | | `business_agent.create_business_agent_faq()` | Create a FAQ | | `business_agent.create_business_agent_skill()` | Create a skill | | `business_agent.create_business_agent_ui_skill()` | Create a UI skill | | `business_agent.get_business_agent_budget()` | Get usage budgets | | `business_agent.get_business_agent_business_information()` | Get business information | | `business_agent.get_business_agent_connector()` | Get a connector | | `business_agent.get_business_agent_connector_logs()` | Get connector failure logs | | `business_agent.get_business_agent_connector_tool()` | Get a connector tool | | `business_agent.get_business_agent_event()` | Get a business event status | | `business_agent.get_business_agent_faq()` | Get a FAQ | | `business_agent.get_business_agent_file()` | Get a knowledge file | | `business_agent.get_business_agent_skill()` | Get a skill | | `business_agent.get_business_agent_status()` | Get agent setup status | | `business_agent.get_business_agent_ui_skill()` | Get a UI skill | | `business_agent.get_business_agent_website()` | Get a crawled website | | `business_agent.update_business_agent_connector()` | Update a connector | | `business_agent.update_business_agent_connector_tool()` | Update a connector tool | | `business_agent.update_business_agent_faq()` | Update a FAQ | | `business_agent.update_business_agent_settings()` | Update agent settings | | `business_agent.update_business_agent_skill()` | Update a skill | | `business_agent.update_business_agent_ui_skill()` | Update a UI skill | | `business_agent.update_business_agent_website()` | Update a crawled website | | `business_agent.delete_business_agent_connector()` | Delete a connector | | `business_agent.delete_business_agent_connector_tool()` | Delete a connector tool | | `business_agent.delete_business_agent_faq()` | Delete a FAQ | | `business_agent.delete_business_agent_file()` | Delete a knowledge file | | `business_agent.delete_business_agent_skill()` | Delete a skill | | `business_agent.delete_business_agent_ui_skill()` | Delete a UI skill | | `business_agent.delete_business_agent_website()` | Remove a crawled website | | `business_agent.add_business_agent_allowlist_entry()` | Allowlist a consumer | | `business_agent.add_business_agent_website()` | Add a website to crawl | | `business_agent.onboard_business_agent()` | Create the agent | | `business_agent.read_business_agent_evals()` | Read evaluation data | | `business_agent.refresh_business_agent_connector_tools()` | Refresh MCP connector tools | | `business_agent.remove_business_agent_allowlist_entry()` | Remove an allowlisted consumer | | `business_agent.replace_business_agent_budget()` | Replace usage budgets | | `business_agent.replace_business_agent_business_information()` | Replace business information | | `business_agent.reset_business_agent_business_information()` | Reset business information | | `business_agent.run_business_agent_connector_tool()` | Run a connector tool once | | `business_agent.send_business_agent_event()` | Send a business event | | `business_agent.send_business_agent_test_message()` | Send a test message | | `business_agent.set_business_agent_connector_credentials()` | Set connector credentials | | `business_agent.start_business_agent_eval_run()` | Start an evaluation run | | `business_agent.upload_business_agent_file()` | Upload a knowledge file | ### Calls | Method | Description | |--------|-------------| | `calls.list_calls()` | List all calls (unified history) | | `calls.get_call()` | Get a call (any channel) | | `calls.get_call_recording()` | Get a call recording | ### Changelog | Method | Description | |--------|-------------| | `changelog.list_changelog()` | List API changelog entries | ### Comment Automations | Method | Description | |--------|-------------| | `comment_automations.list_comment_automation_logs()` | List automation logs | | `comment_automations.list_comment_automations()` | List comment-to-DM automations | | `comment_automations.create_comment_automation()` | Create comment-to-DM automation | | `comment_automations.get_comment_automation()` | Get automation details | | `comment_automations.update_comment_automation()` | Update automation settings | | `comment_automations.delete_comment_automation()` | Delete automation | ### Comments (Inbox) | Method | Description | |--------|-------------| | `comments.list_inbox_comments()` | List commented posts | | `comments.get_inbox_post_comments()` | Get post comments | | `comments.delete_inbox_comment()` | Delete comment | | `comments.edit_inbox_comment()` | Edit comment | | `comments.hide_inbox_comment()` | Hide comment | | `comments.like_inbox_comment()` | Like comment | | `comments.like_post()` | Like post | | `comments.pin_inbox_comment()` | Pin comment | | `comments.reply_to_inbox_post()` | Reply to comment | | `comments.send_private_reply_to_comment()` | Send private reply | | `comments.set_comment_moderation()` | Set comment moderation status | | `comments.unhide_inbox_comment()` | Unhide comment | | `comments.unlike_inbox_comment()` | Unlike comment | | `comments.unlike_post()` | Unlike post | | `comments.unpin_inbox_comment()` | Unpin comment | ### Commerce | Method | Description | |--------|-------------| | `commerce.list_commerce_catalog_syncs()` | List catalog syncs | | `commerce.list_commerce_channels()` | List sales channels | | `commerce.list_commerce_collection_metafields()` | List collection metafields | | `commerce.list_commerce_collections()` | List collections | | `commerce.list_commerce_discounts()` | List discounts | | `commerce.list_commerce_inventory()` | Get a product's stock | | `commerce.list_commerce_locations()` | List locations | | `commerce.list_commerce_markets()` | List markets | | `commerce.list_commerce_menus()` | List navigation menus | | `commerce.list_commerce_metaobject_definitions()` | List metaobject definitions | | `commerce.list_commerce_metaobjects()` | List metaobjects of a type | | `commerce.list_commerce_orders()` | List orders | | `commerce.list_commerce_pages()` | List pages | | `commerce.list_commerce_price_lists()` | List price lists | | `commerce.list_commerce_product_metafields()` | List product metafields | | `commerce.list_commerce_products()` | List products | | `commerce.list_commerce_redirects()` | List URL redirects | | `commerce.create_commerce_catalog_sync()` | Sync a store into a Meta catalog | | `commerce.create_commerce_collection()` | Create a collection | | `commerce.create_commerce_discount()` | Create a discount | | `commerce.create_commerce_menu()` | Create a navigation menu | | `commerce.create_commerce_metaobject()` | Create a metaobject | | `commerce.create_commerce_page()` | Create a page | | `commerce.create_commerce_product()` | Create a product | | `commerce.create_commerce_product_options()` | Add options | | `commerce.create_commerce_product_variants()` | Add variants | | `commerce.create_commerce_redirect()` | Create a URL redirect | | `commerce.get_commerce_catalog_sync()` | Get a catalog sync | | `commerce.get_commerce_collection()` | Get a collection | | `commerce.get_commerce_discount()` | Get a discount | | `commerce.get_commerce_menu()` | Get a navigation menu | | `commerce.get_commerce_metaobject()` | Get a metaobject | | `commerce.get_commerce_order()` | Get an order | | `commerce.get_commerce_page()` | Get a page | | `commerce.get_commerce_product()` | Get a product | | `commerce.get_commerce_store()` | Get a store | | `commerce.update_commerce_collection()` | Update a collection | | `commerce.update_commerce_discount()` | Update a discount | | `commerce.update_commerce_menu()` | Replace a navigation menu | | `commerce.update_commerce_metaobject()` | Update a metaobject | | `commerce.update_commerce_page()` | Update a page | | `commerce.update_commerce_product()` | Update a product | | `commerce.update_commerce_product_prices()` | Update variant prices | | `commerce.update_commerce_redirect()` | Update a URL redirect | | `commerce.delete_commerce_catalog_sync()` | Stop a catalog sync | | `commerce.delete_commerce_collection()` | Delete a collection | | `commerce.delete_commerce_collection_metafields()` | Delete collection metafields | | `commerce.delete_commerce_discount()` | Delete a discount | | `commerce.delete_commerce_marketing_activity()` | Delete a marketing activity | | `commerce.delete_commerce_menu()` | Delete a navigation menu | | `commerce.delete_commerce_metaobject()` | Delete a metaobject | | `commerce.delete_commerce_page()` | Delete a page | | `commerce.delete_commerce_price_list_prices()` | Remove fixed prices | | `commerce.delete_commerce_product_metafields()` | Delete product metafields | | `commerce.delete_commerce_product_options()` | Delete options | | `commerce.delete_commerce_product_variants()` | Delete variants | | `commerce.delete_commerce_redirect()` | Delete a URL redirect | | `commerce.add_commerce_discount_codes()` | Add codes to a discount | | `commerce.add_commerce_marketing_engagement()` | Report daily engagement | | `commerce.add_commerce_product_images()` | Add images | | `commerce.change_commerce_collection_channels()` | Publish or unpublish a collection | | `commerce.change_commerce_collection_products()` | Add or remove products in a collection | | `commerce.change_commerce_inventory()` | Set or adjust stock | | `commerce.change_commerce_product_channels()` | Publish or unpublish a product | | `commerce.change_commerce_product_state()` | Activate, deactivate, archive or delete products | | `commerce.change_commerce_product_tags()` | Add or remove tags in bulk | | `commerce.duplicate_commerce_product()` | Duplicate a product | | `commerce.remove_commerce_product_images()` | Remove images | | `commerce.reorder_commerce_collection_products()` | Reorder products in a collection | | `commerce.reorder_commerce_product_images()` | Reorder images | | `commerce.run_commerce_catalog_sync()` | Run a catalog sync now | | `commerce.set_commerce_collection_metafields()` | Set collection metafields | | `commerce.set_commerce_discount_active()` | Activate or deactivate a discount | | `commerce.set_commerce_price_list_prices()` | Set fixed prices | | `commerce.set_commerce_product_metafields()` | Set product metafields | | `commerce.upsert_commerce_marketing_activity()` | Record a marketing activity | ### Connected Apps | Method | Description | |--------|-------------| | `connected_apps.list_connected_apps()` | List connected apps | | `connected_apps.revoke_connected_app()` | Revoke connected app | ### Contacts | Method | Description | |--------|-------------| | `contacts.list_contacts()` | List contacts | | `contacts.bulk_create_contacts()` | Bulk create contacts | | `contacts.create_contact()` | Create contact | | `contacts.get_contact()` | Get contact | | `contacts.get_contact_channels()` | List channels for a contact | | `contacts.update_contact()` | Update contact | | `contacts.delete_contact()` | Delete contact | ### Conversions | Method | Description | |--------|-------------| | `conversions.list_ad_conversion_goals()` | List account conversion goals | | `conversions.list_conversion_actions()` | List conversion actions | | `conversions.list_conversion_associations()` | List associated campaigns | | `conversions.list_conversion_destinations()` | List conversion destinations | | `conversions.list_custom_conversion_goals()` | List custom conversion goals | | `conversions.list_event_destinations()` | List event destinations | | `conversions.create_conversion_action()` | Create website conversion action | | `conversions.create_conversion_destination()` | Create a conversion destination | | `conversions.create_custom_conversion_goal()` | Create a custom conversion goal | | `conversions.create_event_destination()` | Add an event destination | | `conversions.get_conversion_destination()` | Get a conversion destination | | `conversions.get_conversion_metrics()` | Get attribution metrics | | `conversions.get_conversions_quality()` | Get Event Match Quality | | `conversions.update_ad_conversion_goals()` | Update account conversion goals | | `conversions.update_conversion_action()` | Update a conversion action's settings | | `conversions.update_conversion_destination()` | Update a conversion destination | | `conversions.update_custom_conversion_goal()` | Update a custom conversion goal | | `conversions.delete_conversion_destination()` | Delete a conversion destination | | `conversions.delete_event_destination()` | Remove an event destination | | `conversions.add_conversion_associations()` | Associate campaigns | | `conversions.adjust_conversions()` | Adjust uploaded conversions | | `conversions.remove_conversion_associations()` | Remove associated campaigns | | `conversions.remove_custom_conversion_goal()` | Remove a custom conversion goal | | `conversions.send_conversions()` | Send conversion events | | `conversions.send_events()` | Send events to every destination | ### Custom Fields | Method | Description | |--------|-------------| | `custom_fields.list_custom_fields()` | List custom field definitions | | `custom_fields.create_custom_field()` | Create custom field | | `custom_fields.update_custom_field()` | Update custom field | | `custom_fields.delete_custom_field()` | Delete custom field | | `custom_fields.clear_contact_field_value()` | Clear custom field value | | `custom_fields.set_contact_field_value()` | Set custom field value | ### Discord | Method | Description | |--------|-------------| | `discord.list_discord_guild_members()` | List Discord guild members | | `discord.list_discord_guild_roles()` | List Discord guild roles | | `discord.list_discord_pinned_messages()` | List pinned messages | | `discord.list_discord_scheduled_events()` | List Discord scheduled events | | `discord.create_discord_guild_role()` | Create a Discord guild role | | `discord.create_discord_scheduled_event()` | Create a Discord scheduled event | | `discord.create_discord_thread()` | Create a Discord public thread | | `discord.get_discord_channels()` | List Discord guild channels | | `discord.get_discord_guild_member()` | Get a Discord guild member | | `discord.get_discord_scheduled_event()` | Get a Discord scheduled event | | `discord.get_discord_settings()` | Get Discord account settings | | `discord.update_discord_scheduled_event()` | Update a Discord scheduled event | | `discord.update_discord_settings()` | Update Discord settings | | `discord.delete_discord_guild_role()` | Delete a Discord guild role | | `discord.delete_discord_message()` | Delete a Discord channel message | | `discord.delete_discord_scheduled_event()` | Delete a Discord scheduled event | | `discord.add_discord_member_role()` | Assign a role to a guild member | | `discord.crosspost_discord_message()` | Crosspost Discord message | | `discord.edit_discord_guild_role()` | Edit a Discord guild role | | `discord.pin_discord_message()` | Pin a Discord message | | `discord.remove_discord_member_role()` | Remove a role from a guild member | | `discord.search_discord_guild_members()` | Search Discord guild members | | `discord.send_discord_direct_message()` | Send a Discord Direct Message | | `discord.unpin_discord_message()` | Unpin a Discord message | ### Feedback | Method | Description | |--------|-------------| | `feedback.submit_feedback()` | Submit feedback | ### GMB Attributes | Method | Description | |--------|-------------| | `gmb_attributes.get_gmb_attribute_metadata()` | Get attribute metadata | | `gmb_attributes.get_google_business_attributes()` | Get attributes | | `gmb_attributes.update_google_business_attributes()` | Update attributes | ### GMB Food Menus | Method | Description | |--------|-------------| | `gmb_food_menus.get_google_business_food_menus()` | Get food menus | | `gmb_food_menus.update_google_business_food_menus()` | Update food menus | ### GMB Location Details | Method | Description | |--------|-------------| | `gmb_location_details.get_google_business_location_details()` | Get location details | | `gmb_location_details.update_google_business_location_details()` | Update location details | ### GMB Media | Method | Description | |--------|-------------| | `gmb_media.list_google_business_media()` | List media | | `gmb_media.create_google_business_media()` | Upload photo | | `gmb_media.delete_google_business_media()` | Delete photo | ### GMB Place Actions | Method | Description | |--------|-------------| | `gmb_place_actions.list_google_business_place_actions()` | List action links | | `gmb_place_actions.create_google_business_place_action()` | Create action link | | `gmb_place_actions.update_google_business_place_action()` | Update action link | | `gmb_place_actions.delete_google_business_place_action()` | Delete action link | ### GMB Services | Method | Description | |--------|-------------| | `gmb_services.get_google_business_services()` | Get services | | `gmb_services.update_google_business_services()` | Replace services | ### GMB Verifications | Method | Description | |--------|-------------| | `gmb_verifications.get_google_business_verifications()` | Get verification state | | `gmb_verifications.complete_google_business_verification()` | Complete a verification | | `gmb_verifications.fetch_google_business_verification_options()` | Fetch verification options | | `gmb_verifications.start_google_business_verification()` | Start a verification | ### iMessage | Method | Description | |--------|-------------| | `imessage.list_imessage_audience()` | List iMessage audience | | `imessage.list_imessage_available_numbers()` | List instantly available iMessage numbers | | `imessage.list_imessage_sandbox_contacts()` | List iMessage sandbox contacts | | `imessage.list_imessage_sender_orders()` | List iMessage sender orders | | `imessage.list_imessage_senders()` | List iMessage senders | | `imessage.create_imessage_group()` | Start an iMessage group chat | | `imessage.create_imessage_opt_in_link()` | Create a tracked iMessage opt-in link | | `imessage.get_imessage_group()` | Get an iMessage group | | `imessage.get_imessage_sender()` | Get iMessage sender status | | `imessage.update_imessage_group()` | Rename an iMessage group or change its photo | | `imessage.update_imessage_sender()` | Update an iMessage sender | | `imessage.add_imessage_group_participant()` | Add a participant to an iMessage group | | `imessage.add_imessage_sandbox_contact()` | Add an iMessage sandbox contact | | `imessage.cancel_imessage_sender()` | Cancel an iMessage sender | | `imessage.order_imessage_sender()` | Order a new iMessage sender | | `imessage.register_imessage_sender()` | Register an iMessage sender | | `imessage.remove_imessage_group_participant()` | Remove a participant from an iMessage group | | `imessage.remove_imessage_sandbox_contact()` | Remove an iMessage sandbox contact | | `imessage.reserve_imessage_available_number()` | Reserve an available iMessage number | | `imessage.set_imessage_subscription()` | Subscribe or opt out an iMessage contact | ### Inbox Analytics | Method | Description | |--------|-------------| | `inbox_analytics.list_inbox_conversation_analytics()` | List conversation analytics | | `inbox_analytics.get_inbox_conversation_analytics()` | Get conversation analytics | | `inbox_analytics.get_inbox_heatmap()` | Get day × hour heatmap | | `inbox_analytics.get_inbox_response_time()` | Get inbox response-time stats | | `inbox_analytics.get_inbox_source_breakdown()` | Get inbox source breakdown | | `inbox_analytics.get_inbox_top_accounts()` | Get top accounts by inbox volume | | `inbox_analytics.get_inbox_volume()` | Get inbox messaging volume | ### Instagram | Method | Description | |--------|-------------| | `instagram.list_instagram_live_media()` | List the live broadcasts of an Instagram account | | `instagram.list_instagram_media_collaborators()` | List the collaborators of an Instagram post | | `instagram.list_instagram_stories()` | List active Instagram stories | | `instagram.list_instagram_tagged_media()` | List the posts an Instagram account is tagged in | | `instagram.get_instagram_audio()` | Get Instagram audio metadata | | `instagram.get_instagram_business_discovery()` | Look up a public Instagram Business account | | `instagram.get_instagram_mentioned_comment()` | Get a comment that mentions an Instagram account | | `instagram.get_instagram_mentioned_media()` | Get a post that mentions an Instagram account in its caption | | `instagram.get_instagram_publishing_limit()` | Get Instagram publishing limit | | `instagram.get_instagram_story_insights()` | Get Instagram story insights | | `instagram.search_instagram_audio()` | Search Instagram audio | ### Lead Gen | Method | Description | |--------|-------------| | `lead_gen.list_form_leads()` | List leads for a single form | | `lead_gen.list_lead_forms()` | List lead forms | | `lead_gen.list_leads()` | List submitted leads | | `lead_gen.create_lead_form()` | Create a lead form | | `lead_gen.create_test_lead()` | Create a test lead | | `lead_gen.get_lead_form()` | Get a lead form | | `lead_gen.update_lead()` | Update a lead's status | | `lead_gen.delete_test_lead()` | Delete a test lead | | `lead_gen.archive_lead_form()` | Archive a lead form | ### Mentions | Method | Description | |--------|-------------| | `mentions.list_inbox_mentions()` | List mentions | | `mentions.reply_to_mention()` | Reply to a mention | ### Messages (Inbox) | Method | Description | |--------|-------------| | `messages.list_conversation_labels()` | List the labels on a conversation | | `messages.list_inbox_conversations()` | List conversations | | `messages.list_inbox_labels()` | List the Page's conversation labels | | `messages.create_inbox_conversation()` | Create conversation | | `messages.create_inbox_label()` | Create a conversation label | | `messages.get_inbox_conversation()` | Get conversation | | `messages.get_inbox_conversation_messages()` | List messages | | `messages.get_message_attachment()` | Resolve message attachment | | `messages.update_inbox_conversation()` | Update conversation status | | `messages.delete_inbox_conversation()` | Delete conversation | | `messages.delete_inbox_label()` | Delete a conversation label | | `messages.delete_inbox_message()` | Delete message | | `messages.accept_conversation_request()` | Accept a message request | | `messages.add_conversation_label()` | Add a label to a conversation | | `messages.add_message_reaction()` | Add reaction | | `messages.edit_inbox_message()` | Edit message | | `messages.mark_conversation_read()` | Mark a conversation as read | | `messages.remove_conversation_label()` | Remove a label from a conversation | | `messages.remove_message_reaction()` | Remove reaction | | `messages.search_inbox_conversations()` | Search conversations | | `messages.send_inbox_message()` | Send message | | `messages.send_typing_indicator()` | Send typing indicator | | `messages.set_conversation_thread_control()` | Change who answers a conversation (handover) | | `messages.upload_media_direct()` | Upload media file | ### Messaging Ads | Method | Description | |--------|-------------| | `messaging_ads.create_call_ad()` | Create Click-to-Call ad | | `messaging_ads.create_ctwa_ad()` | Create CTWA ad (deprecated) | | `messaging_ads.create_messaging_ad()` | Create messaging ad | ### Phone Numbers | Method | Description | |--------|-------------| | `phone_numbers.list_phone_number_countries()` | List offerable number countries | | `phone_numbers.list_phone_number_port_ins()` | List port-in orders | | `phone_numbers.list_phone_number_stock_watches()` | List stock watches | | `phone_numbers.list_phone_numbers()` | List phone numbers | | `phone_numbers.create_phone_number_kyc_link()` | Create a hosted KYC link | | `phone_numbers.create_phone_number_port_in()` | Port numbers in | | `phone_numbers.create_phone_number_stock_watch()` | Watch an out-of-stock country | | `phone_numbers.get_phone_number()` | Get phone number | | `phone_numbers.get_phone_number_claim()` | Resolve a number claim | | `phone_numbers.get_phone_number_kyc_form()` | Get KYC form spec | | `phone_numbers.get_phone_number_port_claim()` | Resolve a port claim | | `phone_numbers.get_phone_number_port_in_order_requirements()` | A port-in order's pending requirements | | `phone_numbers.get_phone_number_port_in_requirements()` | Country porting requirements | | `phone_numbers.get_phone_number_remediation()` | Get declined requirements | | `phone_numbers.delete_phone_number_stock_watch()` | Stop watching a country | | `phone_numbers.cancel_phone_number_port_in()` | Cancel a port-in | | `phone_numbers.check_phone_number_availability()` | Check country availability | | `phone_numbers.check_phone_number_portability()` | Check portability | | `phone_numbers.purchase_phone_number()` | Purchase phone number | | `phone_numbers.release_phone_number()` | Release phone number | | `phone_numbers.remediate_phone_number()` | Resubmit a declined number | | `phone_numbers.reply_to_phone_number_reviewer()` | Reply to the regulatory reviewer | | `phone_numbers.request_phone_number_whats_app_code()` | Request the WhatsApp verification code for a number | | `phone_numbers.respond_to_phone_number_reviewer()` | Respond to the regulatory reviewer (message + corrections) | | `phone_numbers.review_phone_number_kyc_packet()` | Pre-review a KYC packet | | `phone_numbers.search_available_phone_numbers()` | Search available numbers | | `phone_numbers.submit_phone_number_kyc()` | Submit KYC | | `phone_numbers.upload_phone_number_kyc_document()` | Upload a KYC document | | `phone_numbers.upload_phone_number_port_in_document()` | Upload a porting document | | `phone_numbers.validate_phone_number_kyc_address()` | Pre-validate KYC address | | `phone_numbers.view_phone_number_kyc_document()` | View a KYC document on file | ### Product Catalogs | Method | Description | |--------|-------------| | `product_catalogs.list_ad_catalog_feed_uploads()` | List a feed's uploads | | `product_catalogs.list_ad_catalog_feeds()` | List a catalog's product feeds | | `product_catalogs.list_ad_catalog_product_sets()` | List a catalog's product sets | | `product_catalogs.list_ad_catalog_products()` | List a catalog's products | | `product_catalogs.list_ad_catalogs()` | List Meta product catalogs | | `product_catalogs.create_ad_catalog()` | Create a Meta product catalog | | `product_catalogs.create_ad_catalog_feed()` | Create a product feed | | `product_catalogs.create_ad_catalog_feed_upload()` | Fetch a feed file now | | `product_catalogs.create_ad_catalog_product()` | Add a product to a catalog | | `product_catalogs.create_ad_catalog_product_set()` | Create a product set | | `product_catalogs.get_ad_catalog()` | Get a product catalog | | `product_catalogs.get_ad_catalog_batch()` | Get a bulk request's status | | `product_catalogs.get_ad_catalog_product()` | Get a product | | `product_catalogs.update_ad_catalog_product()` | Update a product | | `product_catalogs.update_ad_catalog_product_set()` | Update a product set | | `product_catalogs.delete_ad_catalog()` | Delete a product catalog | | `product_catalogs.delete_ad_catalog_product()` | Delete a product | | `product_catalogs.delete_ad_catalog_product_set()` | Delete a product set | | `product_catalogs.batch_ad_catalog_products()` | Create, update or delete products in bulk | ### Products | Method | Description | |--------|-------------| | `products.list_products()` | List products | | `products.get_product()` | Get a product | | `products.update_product()` | Update a product | ### RCS | Method | Description | |--------|-------------| | `rcs.list_rcs_agents()` | List RCS agents | | `rcs.list_rcs_brands()` | List RCS brands | | `rcs.list_rcs_test_devices()` | List RCS test phones | | `rcs.create_rcs_agent()` | Request an RCS agent | | `rcs.get_rcs_agent()` | Get an RCS agent | | `rcs.get_rcs_capabilities()` | Check RCS capability | | `rcs.update_rcs_agent()` | Update an RCS agent | | `rcs.add_rcs_test_device()` | Invite an RCS test phone | | `rcs.deactivate_rcs_agent()` | Deactivate an RCS agent | | `rcs.remove_rcs_test_device()` | Remove an RCS test phone | | `rcs.request_rcs_agent_launch()` | Send the launch filing | | `rcs.send_rcs_message()` | Send an RCS message | | `rcs.upload_rcs_asset()` | Upload an RCS logo or banner | ### Reach and Frequency | Method | Description | |--------|-------------| | `reach_and_frequency.create_rf_prediction()` | Create reach-frequency prediction | | `reach_and_frequency.get_rf_prediction()` | Get reach-frequency prediction | | `reach_and_frequency.cancel_rf_reservation()` | Cancel reach-frequency booking | | `reach_and_frequency.reserve_rf_prediction()` | Reserve reach-frequency inventory | ### Reviews (Inbox) | Method | Description | |--------|-------------| | `reviews.list_inbox_reviews()` | List reviews | | `reviews.delete_inbox_review_reply()` | Delete review reply | | `reviews.reply_to_inbox_review()` | Reply to review | ### Sequences | Method | Description | |--------|-------------| | `sequences.list_sequence_enrollments()` | List enrollments for a sequence | | `sequences.list_sequences()` | List sequences | | `sequences.create_sequence()` | Create sequence | | `sequences.get_sequence()` | Get sequence with steps | | `sequences.update_sequence()` | Update sequence | | `sequences.delete_sequence()` | Delete sequence | | `sequences.activate_sequence()` | Activate sequence | | `sequences.enroll_contacts()` | Enroll contacts in a sequence | | `sequences.pause_sequence()` | Pause sequence | | `sequences.unenroll_contact()` | Unenroll contact | ### Slack | Method | Description | |--------|-------------| | `slack.list_slack_members()` | List Slack workspace members | ### SMS | Method | Description | |--------|-------------| | `sms.list_sms_opt_outs()` | List SMS opt-outs | | `sms.list_sms_registrations()` | List carrier registrations | | `sms.list_sms_sender_ids()` | List alphanumeric sender IDs | | `sms.create_sms_sender_id()` | Create an alphanumeric sender ID | | `sms.get_sms_registration()` | Get a carrier registration | | `sms.delete_sms_sender_id()` | Delete an alphanumeric sender ID | | `sms.appeal_sms_registration()` | Appeal a rejected campaign | | `sms.deactivate_sms_registration()` | Deactivate a brand/campaign registration | | `sms.disable_sms_on_number()` | Disable SMS on a number | | `sms.enable_sms_on_number()` | Enable SMS on a number | | `sms.lookup_sms_number()` | Look up carrier + line type | | `sms.preflight_sms_registration()` | Pre-check a carrier registration | | `sms.request_sms_sender_id_limit_increase()` | Request a higher sender ID daily limit | | `sms.resend_sms_registration_otp()` | Re-send the sole-prop OTP | | `sms.respond_to_sms_registration_review()` | Reply to a change request | | `sms.reuse_sms_registration_for_number()` | Add number to SMS registration | | `sms.send_sms()` | Send an SMS/MMS | | `sms.share_sms_registration()` | Create a registration share link | | `sms.start_sms_registration()` | Start a carrier registration | | `sms.upload_sms_opt_in_proof()` | Upload opt-in form proof for an appeal | | `sms.upload_sms_opt_in_proof_file()` | Upload opt-in form proof | | `sms.verify_sms_registration_otp()` | Submit the sole-prop OTP | ### Support Assistant | Method | Description | |--------|-------------| | `support_assistant.list_support_answers()` | List a thread's support answers | | `support_assistant.get_support_answer()` | Get a support answer | | `support_assistant.ask_support_question()` | Ask a support question | ### Tracking Tags | Method | Description | |--------|-------------| | `tracking_tags.list_tracking_tag_events()` | List conversion events | | `tracking_tags.list_tracking_tag_partners()` | List partner businesses of a tag | | `tracking_tags.list_tracking_tag_shared_accounts()` | List accounts it is shared with | | `tracking_tags.list_tracking_tag_users()` | List tag users | | `tracking_tags.list_tracking_tags()` | List tracking tags | | `tracking_tags.create_tracking_tag()` | Create a tracking tag | | `tracking_tags.create_tracking_tag_event()` | Create a conversion event | | `tracking_tags.get_ad_tracking_tags()` | Get ad tracking tags | | `tracking_tags.get_tracking_tag()` | Get a tracking tag | | `tracking_tags.get_tracking_tag_diagnostics()` | Get tag diagnostics | | `tracking_tags.get_tracking_tag_stats()` | Get aggregated event stats | | `tracking_tags.get_tracking_tag_store_install()` | Get store install status | | `tracking_tags.update_ad_tracking_tags()` | Set ad tracking tags | | `tracking_tags.update_tracking_tag()` | Update a tracking tag | | `tracking_tags.update_tracking_tag_event()` | Update a conversion event | | `tracking_tags.delete_tracking_tag_event()` | Delete a conversion event | | `tracking_tags.add_tracking_tag_shared_account()` | Share with an ad account | | `tracking_tags.assign_tracking_tag_user()` | Assign a user to a tag | | `tracking_tags.install_tracking_tag_on_store()` | Install on a Shopify, WordPress, Wix or Webflow site | | `tracking_tags.remove_tracking_tag_from_store()` | Remove from a Shopify, WordPress, Wix or Webflow site | | `tracking_tags.remove_tracking_tag_shared_account()` | Stop sharing with an account | | `tracking_tags.remove_tracking_tag_user()` | Remove a user from a tag | ### Twitter Engagement | Method | Description | |--------|-------------| | `twitter_engagement.get_tweet()` | Look up a tweet | | `twitter_engagement.bookmark_post()` | Bookmark a tweet | | `twitter_engagement.follow_user()` | Follow a user | | `twitter_engagement.remove_bookmark()` | Remove bookmark | | `twitter_engagement.retweet_post()` | Retweet a post | | `twitter_engagement.search_tweets()` | Search recent tweets | | `twitter_engagement.undo_retweet()` | Undo retweet | | `twitter_engagement.unfollow_user()` | Unfollow a user | ### Validate | Method | Description | |--------|-------------| | `validate.validate_media()` | Validate media URL | | `validate.validate_post()` | Validate post content | | `validate.validate_post_length()` | Validate character count | | `validate.validate_subreddit()` | Check subreddit existence | ### Verify | Method | Description | |--------|-------------| | `verify.create_verification()` | Send a verification code | | `verify.get_verification()` | Get a verification | | `verify.check_verification()` | Check a verification code | ### Voice | Method | Description | |--------|-------------| | `voice.list_sip_trunks()` | List SIP trunks | | `voice.list_voice_calls()` | List phone calls | | `voice.create_sip_trunk()` | Create a SIP trunk | | `voice.create_voice_call()` | Place an outbound phone call | | `voice.create_voice_web_session()` | Mint a browser softphone session | | `voice.get_sip_trunk()` | Get a SIP trunk | | `voice.get_voice_call()` | Get a phone call | | `voice.get_voice_call_estimate()` | Estimate call cost | | `voice.get_voice_call_recording()` | Get a call recording | | `voice.delete_sip_trunk()` | Delete a SIP trunk | | `voice.attach_number_to_sip_trunk()` | Attach a number to a SIP trunk | | `voice.detach_number_from_sip_trunk()` | Detach a number from its SIP trunk | | `voice.dial_voice_web_call()` | Dial from the browser softphone | | `voice.disable_voice_on_number()` | Disable phone calling on a number | | `voice.enable_voice_on_number()` | Enable phone calling on a number | | `voice.end_voice_call()` | Hang up a live call | | `voice.rotate_sip_trunk_credentials()` | Rotate a SIP trunk's password | | `voice.transfer_voice_call()` | Blind-transfer a live call | ### WhatsApp | Method | Description | |--------|-------------| | `whatsapp.list_whats_app_account_events()` | List account notifications | | `whatsapp.list_whats_app_catalogs()` | List the catalogs linked to a WhatsApp number | | `whatsapp.list_whats_app_conversions()` | List conversion events | | `whatsapp.list_whats_app_group_chats()` | List active groups | | `whatsapp.list_whats_app_group_join_requests()` | List join requests | | `whatsapp.create_whats_app_dataset()` | Provision CTWA dataset | | `whatsapp.create_whats_app_group_chat()` | Create group | | `whatsapp.create_whats_app_group_invite_link()` | Create invite link | | `whatsapp.create_whats_app_template()` | Create template | | `whatsapp.get_whats_app_block_status()` | Check if a user is blocked | | `whatsapp.get_whats_app_blocked_users()` | List blocked users | | `whatsapp.get_whats_app_business_profile()` | Get business profile | | `whatsapp.get_whats_app_commerce_settings()` | Get a number's commerce settings | | `whatsapp.get_whats_app_conversational_automation()` | Get ice breakers and commands | | `whatsapp.get_whats_app_dataset()` | Get CTWA conversions dataset | | `whatsapp.get_whats_app_display_name()` | Get display name status | | `whatsapp.get_whats_app_group_chat()` | Get group info | | `whatsapp.get_whats_app_media()` | Download WhatsApp media | | `whatsapp.get_whats_app_template()` | Get template | | `whatsapp.get_whats_app_template_by_id()` | Get template by id | | `whatsapp.get_whats_app_templates()` | List templates | | `whatsapp.get_whatsapp_business_username()` | Get business username | | `whatsapp.get_whatsapp_business_username_suggestions()` | Get username suggestions | | `whatsapp.update_whats_app_business_profile()` | Update business profile | | `whatsapp.update_whats_app_commerce_settings()` | Update a number's commerce settings | | `whatsapp.update_whats_app_display_name()` | Request display name change | | `whatsapp.update_whats_app_group_chat()` | Update group settings | | `whatsapp.update_whats_app_template()` | Update template | | `whatsapp.update_whats_app_template_by_id()` | Update template by id | | `whatsapp.delete_whats_app_conversational_automation()` | Clear ice breakers and commands | | `whatsapp.delete_whats_app_group_chat()` | Delete group | | `whatsapp.delete_whats_app_template()` | Delete template | | `whatsapp.delete_whats_app_template_by_id()` | Delete template by id | | `whatsapp.delete_whatsapp_business_username()` | Delete business username | | `whatsapp.add_whats_app_group_participants()` | Add participants | | `whatsapp.approve_whats_app_group_join_requests()` | Approve join requests | | `whatsapp.block_whats_app_users()` | Block users | | `whatsapp.link_whats_app_catalog()` | Link a catalog to a WhatsApp number | | `whatsapp.register_whats_app_number()` | Register a connected WhatsApp number on the Cloud API | | `whatsapp.reject_whats_app_group_join_requests()` | Reject join requests | | `whatsapp.remove_whats_app_group_participants()` | Remove participants | | `whatsapp.request_whats_app_verification_code()` | Request a Meta re-verification code for a BYO WhatsApp number | | `whatsapp.send_whats_app_conversion()` | Send WhatsApp conversion event | | `whatsapp.set_whats_app_conversational_automation()` | Set ice breakers and commands | | `whatsapp.set_whatsapp_business_username()` | Set business username | | `whatsapp.unblock_whats_app_users()` | Unblock users | | `whatsapp.unlink_whats_app_catalog()` | Unlink a catalog from a WhatsApp number | | `whatsapp.upload_whats_app_profile_photo()` | Upload profile picture | | `whatsapp.verify_whats_app_number()` | Verify the Meta re-verification code for a BYO WhatsApp number | ### WhatsApp Calling | Method | Description | |--------|-------------| | `whatsapp_calling.list_whats_app_calls()` | List call history for an account | | `whatsapp_calling.get_whats_app_call()` | Get a single call | | `whatsapp_calling.get_whats_app_call_estimate()` | Estimate per-minute cost | | `whatsapp_calling.get_whats_app_call_permissions()` | Check call permission | | `whatsapp_calling.get_whats_app_call_recording()` | Get a call recording | | `whatsapp_calling.get_whats_app_calling()` | Get calling config for a number | | `whatsapp_calling.get_whats_app_calling_config()` | Get calling config for an account | | `whatsapp_calling.update_whats_app_calling()` | Update calling config | | `whatsapp_calling.update_whats_app_calling_legacy()` | Update calling config | | `whatsapp_calling.disable_whats_app_calling()` | Disable calling on a number | | `whatsapp_calling.disable_whats_app_calling_legacy()` | Disable calling on a number | | `whatsapp_calling.enable_whats_app_calling()` | Enable calling on a number | | `whatsapp_calling.enable_whats_app_calling_legacy()` | Enable calling on a number | | `whatsapp_calling.initiate_whats_app_call()` | Initiate outbound call | | `whatsapp_calling.start_whats_app_caller_id_verification()` | Start caller-ID verification for a customer-brought number | | `whatsapp_calling.verify_whats_app_caller_id()` | Confirm the caller-ID verification code | ### WhatsApp Flows | Method | Description | |--------|-------------| | `whatsapp_flows.list_whats_app_flow_responses()` | List flow responses | | `whatsapp_flows.list_whats_app_flow_versions()` | List flow versions | | `whatsapp_flows.list_whats_app_flows()` | List flows | | `whatsapp_flows.create_whats_app_flow()` | Create flow | | `whatsapp_flows.get_whats_app_flow()` | Get flow | | `whatsapp_flows.get_whats_app_flow_json()` | Get flow JSON asset | | `whatsapp_flows.get_whats_app_flow_preview()` | Get flow preview URL | | `whatsapp_flows.get_whats_app_flows_encryption_key()` | Get Flows encryption key status | | `whatsapp_flows.update_whats_app_flow()` | Update flow | | `whatsapp_flows.delete_whats_app_flow()` | Delete flow | | `whatsapp_flows.deprecate_whats_app_flow()` | Deprecate flow | | `whatsapp_flows.publish_whats_app_flow()` | Publish flow | | `whatsapp_flows.send_whats_app_flow_message()` | Send flow message | | `whatsapp_flows.set_whats_app_flows_encryption_key()` | Register a Flows encryption key | | `whatsapp_flows.upload_whats_app_flow_json()` | Upload flow JSON | ### WhatsApp Phone Numbers | Method | Description | |--------|-------------| | `whatsapp_phone_numbers.list_whats_app_number_countries()` | List offerable number countries | | `whatsapp_phone_numbers.create_whats_app_number_kyc_link()` | Create a hosted KYC link | | `whatsapp_phone_numbers.get_whats_app_number_info()` | Get number status | | `whatsapp_phone_numbers.get_whats_app_number_kyc_form()` | Get KYC form spec | | `whatsapp_phone_numbers.get_whats_app_number_remediation()` | Get declined requirements | | `whatsapp_phone_numbers.get_whats_app_phone_number()` | Get phone number | | `whatsapp_phone_numbers.get_whats_app_phone_numbers()` | List phone numbers | | `whatsapp_phone_numbers.get_whats_app_pricing_analytics()` | Get pricing analytics | | `whatsapp_phone_numbers.check_whats_app_number_availability()` | Check country availability | | `whatsapp_phone_numbers.move_whats_app_number_to_profile()` | Move a number to another profile | | `whatsapp_phone_numbers.purchase_whats_app_phone_number()` | Purchase phone number | | `whatsapp_phone_numbers.release_whats_app_phone_number()` | Release phone number | | `whatsapp_phone_numbers.remediate_whats_app_number()` | Resubmit a declined number | | `whatsapp_phone_numbers.search_available_whats_app_numbers()` | Search available numbers | | `whatsapp_phone_numbers.submit_whats_app_number_kyc()` | Submit KYC | | `whatsapp_phone_numbers.upload_whats_app_number_kyc_document()` | Upload a KYC document | | `whatsapp_phone_numbers.validate_whats_app_number_kyc_address()` | Pre-validate KYC address | ### WhatsApp Sandbox | Method | Description | |--------|-------------| | `whatsapp_sandbox.list_whats_app_sandbox_sessions()` | List your sandbox sessions | | `whatsapp_sandbox.create_whats_app_sandbox_session()` | Start a sandbox activation | | `whatsapp_sandbox.delete_whats_app_sandbox_session()` | Revoke a sandbox session | ### WhatsApp Templates | Method | Description | |--------|-------------| | `whatsapp_templates.get_whats_app_library_template()` | Look up a library template | ### Workflows | Method | Description | |--------|-------------| | `workflows.list_workflow_execution_events()` | Get an execution's timeline | | `workflows.list_workflow_executions()` | List workflow runs | | `workflows.list_workflow_versions()` | List a workflow's version history | | `workflows.list_workflows()` | List workflows | | `workflows.create_workflow()` | Create workflow | | `workflows.get_workflow()` | Get workflow with graph | | `workflows.get_workflow_version()` | Get a specific workflow version | | `workflows.update_workflow()` | Update workflow | | `workflows.delete_workflow()` | Delete workflow | | `workflows.activate_workflow()` | Activate workflow | | `workflows.duplicate_workflow()` | Duplicate a workflow | | `workflows.pause_workflow()` | Pause workflow | | `workflows.restore_workflow_version()` | Restore a workflow version | | `workflows.trigger_api_call_workflow()` | Start an API-triggered workflow | | `workflows.trigger_workflow()` | Manually start a workflow run | ### Invites | Method | Description | |--------|-------------| | `invites.create_invite_token()` | Create invite token | ## MCP Server (Claude Desktop) The SDK includes a Model Context Protocol (MCP) server for integration with Claude Desktop. See [MCP documentation](https://docs.zernio.com/resources/mcp) for setup instructions. ```bash pip install zernio-sdk[mcp] ``` ## Requirements - Python 3.10+ - [Zernio API key](https://zernio.com) (free tier available) ## Links - [Documentation](https://docs.zernio.com) - [Dashboard](https://zernio.com/dashboard) - [Changelog](https://docs.zernio.com/changelog) ## License Apache-2.0