@zernio/node 0.2.725 → 0.2.727

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,7 +1,7 @@
1
1
  // This file is auto-generated by @hey-api/openapi-ts
2
2
 
3
3
  import { createClient, createConfig, type OptionsLegacyParser, formDataBodySerializer } from '@hey-api/client-fetch';
4
- import type { ValidatePostLengthData, ValidatePostLengthError, ValidatePostLengthResponse, ValidatePostData, ValidatePostError, ValidatePostResponse, ValidateMediaData, ValidateMediaError, ValidateMediaResponse, ValidateSubredditData, ValidateSubredditError, ValidateSubredditResponse, GetAnalyticsData, GetAnalyticsError, GetAnalyticsResponse, GetAnalyticsDeltaData, GetAnalyticsDeltaError, GetAnalyticsDeltaResponse, GetYouTubeChannelInsightsData, GetYouTubeChannelInsightsError, GetYouTubeChannelInsightsResponse, GetLinkedInOrgAggregateAnalyticsData, GetLinkedInOrgAggregateAnalyticsError, GetLinkedInOrgAggregateAnalyticsResponse, GetTikTokAccountInsightsData, GetTikTokAccountInsightsError, GetTikTokAccountInsightsResponse, GetYouTubeDailyViewsData, GetYouTubeDailyViewsError, GetYouTubeDailyViewsResponse, GetYouTubeVideoRetentionData, GetYouTubeVideoRetentionError, GetYouTubeVideoRetentionResponse, GetFacebookPageInsightsData, GetFacebookPageInsightsError, GetFacebookPageInsightsResponse, GetFacebookPostEarningsData, GetFacebookPostEarningsError, GetFacebookPostEarningsResponse, GetInstagramAccountInsightsData, GetInstagramAccountInsightsError, GetInstagramAccountInsightsResponse, GetInstagramFollowerHistoryData, GetInstagramFollowerHistoryError, GetInstagramFollowerHistoryResponse, GetInstagramDemographicsData, GetInstagramDemographicsError, GetInstagramDemographicsResponse, GetYouTubeDemographicsData, GetYouTubeDemographicsError, GetYouTubeDemographicsResponse, GetDailyMetricsData, GetDailyMetricsError, GetDailyMetricsResponse, GetBestTimeToPostData, GetBestTimeToPostError, GetBestTimeToPostResponse, GetContentDecayData, GetContentDecayError, GetContentDecayResponse, GetPostingFrequencyData, GetPostingFrequencyError, GetPostingFrequencyResponse, GetPostTimelineData, GetPostTimelineError, GetPostTimelineResponse, GetGoogleBusinessPerformanceData, GetGoogleBusinessPerformanceError, GetGoogleBusinessPerformanceResponse, GetGoogleBusinessSearchKeywordsData, GetGoogleBusinessSearchKeywordsError, GetGoogleBusinessSearchKeywordsResponse, GetInboxVolumeData, GetInboxVolumeError, GetInboxVolumeResponse, GetInboxHeatmapData, GetInboxHeatmapError, GetInboxHeatmapResponse, GetInboxSourceBreakdownData, GetInboxSourceBreakdownError, GetInboxSourceBreakdownResponse, GetInboxResponseTimeData, GetInboxResponseTimeError, GetInboxResponseTimeResponse, GetInboxTopAccountsData, GetInboxTopAccountsError, GetInboxTopAccountsResponse, ListInboxConversationAnalyticsData, ListInboxConversationAnalyticsError, ListInboxConversationAnalyticsResponse, GetInboxConversationAnalyticsData, GetInboxConversationAnalyticsError, GetInboxConversationAnalyticsResponse, ListAccountGroupsError, ListAccountGroupsResponse, CreateAccountGroupData, CreateAccountGroupError, CreateAccountGroupResponse, UpdateAccountGroupData, UpdateAccountGroupError, UpdateAccountGroupResponse, DeleteAccountGroupData, DeleteAccountGroupError, DeleteAccountGroupResponse, GetMediaPresignedUrlData, GetMediaPresignedUrlError, GetMediaPresignedUrlResponse, SearchRedditData, SearchRedditError, SearchRedditResponse, GetRedditFeedData, GetRedditFeedError, GetRedditFeedResponse, GetBillingError, GetBillingResponse, GetXApiPricingError, GetXApiPricingResponse, GetUsageData, GetUsageError, GetUsageResponse, GetUsageStatsData, GetUsageStatsError, GetUsageStatsResponse, GetCallsUsageData, GetCallsUsageError, GetCallsUsageResponse, GetSmsUsageData, GetSmsUsageError, GetSmsUsageResponse, ListPostsData, ListPostsError, ListPostsResponse, CreatePostData, CreatePostError, CreatePostResponse, SyncExternalPostsData, SyncExternalPostsError, SyncExternalPostsResponse, GetPostData, GetPostError, GetPostResponse, UpdatePostData, UpdatePostError, UpdatePostResponse, DeletePostData, DeletePostError, DeletePostResponse, BulkUploadPostsData, BulkUploadPostsError, BulkUploadPostsResponse, RetryPostData, RetryPostError, RetryPostResponse, UnpublishPostData, UnpublishPostError, UnpublishPostResponse, EditPostData, EditPostError, EditPostResponse, UpdatePostMetadataData, UpdatePostMetadataError, UpdatePostMetadataResponse, ListUsersError, ListUsersResponse, GetUserData, GetUserError, GetUserResponse, ListProfilesData, ListProfilesError, ListProfilesResponse, CreateProfileData, CreateProfileError, CreateProfileResponse, GetProfileData, GetProfileError, GetProfileResponse, UpdateProfileData, UpdateProfileError, UpdateProfileResponse, DeleteProfileData, DeleteProfileError, DeleteProfileResponse, ListAccountsData, ListAccountsError, ListAccountsResponse, GetFollowerStatsData, GetFollowerStatsError, GetFollowerStatsResponse, UpdateAccountData, UpdateAccountError, UpdateAccountResponse, MoveAccountToProfileData, MoveAccountToProfileError, MoveAccountToProfileResponse, DeleteAccountData, DeleteAccountError, DeleteAccountResponse, GetAllAccountsHealthData, GetAllAccountsHealthError, GetAllAccountsHealthResponse, RegisterWhatsAppNumberData, RegisterWhatsAppNumberError, RegisterWhatsAppNumberResponse, GetAccountHealthData, GetAccountHealthError, GetAccountHealthResponse, GetAccountPostsData, GetAccountPostsError, GetAccountPostsResponse, GetInstagramFollowStatusData, GetInstagramFollowStatusError, GetInstagramFollowStatusResponse, GetTikTokCreatorInfoData, GetTikTokCreatorInfoError, GetTikTokCreatorInfoResponse, VerifyCredentialError, VerifyCredentialResponse, ListApiKeysError, ListApiKeysResponse, CreateApiKeyData, CreateApiKeyError, CreateApiKeyResponse, DeleteApiKeyData, DeleteApiKeyError, DeleteApiKeyResponse, ListConnectedAppsError, ListConnectedAppsResponse, RevokeConnectedAppData, RevokeConnectedAppError, RevokeConnectedAppResponse, CreateInviteTokenData, CreateInviteTokenError, CreateInviteTokenResponse, GetConnectUrlData, GetConnectUrlError, GetConnectUrlResponse, HandleOAuthCallbackData, HandleOAuthCallbackError, HandleOAuthCallbackResponse, ConnectAdsData, ConnectAdsError, ConnectAdsResponse, GetShopifyConnectUrlData, GetShopifyConnectUrlError, GetShopifyConnectUrlResponse, ConnectShopifyWithTokenData, ConnectShopifyWithTokenError, ConnectShopifyWithTokenResponse, ConfigureTikTokAdsBrandIdentityData, ConfigureTikTokAdsBrandIdentityError, ConfigureTikTokAdsBrandIdentityResponse, ListFacebookPagesData, ListFacebookPagesError, ListFacebookPagesResponse, SelectFacebookPageData, SelectFacebookPageError, SelectFacebookPageResponse, ListInstagramPagesData, ListInstagramPagesError, ListInstagramPagesResponse, SelectInstagramAccountData, SelectInstagramAccountError, SelectInstagramAccountResponse, ListGoogleBusinessLocationsData, ListGoogleBusinessLocationsError, ListGoogleBusinessLocationsResponse, SelectGoogleBusinessLocationData, SelectGoogleBusinessLocationError, SelectGoogleBusinessLocationResponse, GetGoogleBusinessReviewsData, GetGoogleBusinessReviewsError, GetGoogleBusinessReviewsResponse, GetGoogleBusinessVerificationsData, GetGoogleBusinessVerificationsError, GetGoogleBusinessVerificationsResponse, StartGoogleBusinessVerificationData, StartGoogleBusinessVerificationError, StartGoogleBusinessVerificationResponse, FetchGoogleBusinessVerificationOptionsData, FetchGoogleBusinessVerificationOptionsError, FetchGoogleBusinessVerificationOptionsResponse, CompleteGoogleBusinessVerificationData, CompleteGoogleBusinessVerificationError, CompleteGoogleBusinessVerificationResponse, GetGoogleBusinessFoodMenusData, GetGoogleBusinessFoodMenusError, GetGoogleBusinessFoodMenusResponse, UpdateGoogleBusinessFoodMenusData, UpdateGoogleBusinessFoodMenusError, UpdateGoogleBusinessFoodMenusResponse, GetGoogleBusinessLocationDetailsData, GetGoogleBusinessLocationDetailsError, GetGoogleBusinessLocationDetailsResponse, UpdateGoogleBusinessLocationDetailsData, UpdateGoogleBusinessLocationDetailsError, UpdateGoogleBusinessLocationDetailsResponse, ListGoogleBusinessMediaData, ListGoogleBusinessMediaError, ListGoogleBusinessMediaResponse, CreateGoogleBusinessMediaData, CreateGoogleBusinessMediaError, CreateGoogleBusinessMediaResponse, DeleteGoogleBusinessMediaData, DeleteGoogleBusinessMediaError, DeleteGoogleBusinessMediaResponse, GetGmbAttributeMetadataData, GetGmbAttributeMetadataError, GetGmbAttributeMetadataResponse, GetGoogleBusinessAttributesData, GetGoogleBusinessAttributesError, GetGoogleBusinessAttributesResponse, UpdateGoogleBusinessAttributesData, UpdateGoogleBusinessAttributesError, UpdateGoogleBusinessAttributesResponse, ListGoogleBusinessPlaceActionsData, ListGoogleBusinessPlaceActionsError, ListGoogleBusinessPlaceActionsResponse, CreateGoogleBusinessPlaceActionData, CreateGoogleBusinessPlaceActionError, CreateGoogleBusinessPlaceActionResponse, DeleteGoogleBusinessPlaceActionData, DeleteGoogleBusinessPlaceActionError, DeleteGoogleBusinessPlaceActionResponse, UpdateGoogleBusinessPlaceActionData, UpdateGoogleBusinessPlaceActionError, UpdateGoogleBusinessPlaceActionResponse, GetGoogleBusinessServicesData, GetGoogleBusinessServicesError, GetGoogleBusinessServicesResponse, UpdateGoogleBusinessServicesData, UpdateGoogleBusinessServicesError, UpdateGoogleBusinessServicesResponse, BatchGetGoogleBusinessReviewsData, BatchGetGoogleBusinessReviewsError, BatchGetGoogleBusinessReviewsResponse, GetGoogleBusinessReviewData, GetGoogleBusinessReviewError, GetGoogleBusinessReviewResponse, ReplyToGoogleBusinessReviewData, ReplyToGoogleBusinessReviewError, ReplyToGoogleBusinessReviewResponse, DeleteGoogleBusinessReviewReplyData, DeleteGoogleBusinessReviewReplyError, DeleteGoogleBusinessReviewReplyResponse, GetPendingOAuthDataData, GetPendingOAuthDataError, GetPendingOAuthDataResponse, ListLinkedInOrganizationsData, ListLinkedInOrganizationsError, ListLinkedInOrganizationsResponse, SelectLinkedInOrganizationData, SelectLinkedInOrganizationError, SelectLinkedInOrganizationResponse, ListPinterestBoardsForSelectionData, ListPinterestBoardsForSelectionError, ListPinterestBoardsForSelectionResponse, SelectPinterestBoardData, SelectPinterestBoardError, SelectPinterestBoardResponse, ListSnapchatProfilesData, ListSnapchatProfilesError, ListSnapchatProfilesResponse, SelectSnapchatProfileData, SelectSnapchatProfileError, SelectSnapchatProfileResponse, ConnectBlueskyCredentialsData, ConnectBlueskyCredentialsError, ConnectBlueskyCredentialsResponse, ConnectOpenAiAdsCredentialsData, ConnectOpenAiAdsCredentialsError, ConnectOpenAiAdsCredentialsResponse, ConnectWhatsAppCredentialsData, ConnectWhatsAppCredentialsError, ConnectWhatsAppCredentialsResponse, ListWhatsAppPhoneNumbersData, ListWhatsAppPhoneNumbersError, ListWhatsAppPhoneNumbersResponse, CompleteWhatsAppPhoneSelectionData, CompleteWhatsAppPhoneSelectionError, CompleteWhatsAppPhoneSelectionResponse, ConnectWhatsAppEmbeddedSignupData, ConnectWhatsAppEmbeddedSignupError, ConnectWhatsAppEmbeddedSignupResponse, ConnectDiscordChannelData, ConnectDiscordChannelError, ConnectDiscordChannelResponse, ListSlackChannelsData, ListSlackChannelsError, ListSlackChannelsResponse, ConnectSlackChannelData, ConnectSlackChannelError, ConnectSlackChannelResponse, GetTelegramConnectStatusData, GetTelegramConnectStatusError, GetTelegramConnectStatusResponse, InitiateTelegramConnectData, InitiateTelegramConnectError, InitiateTelegramConnectResponse, CompleteTelegramConnectData, CompleteTelegramConnectError, CompleteTelegramConnectResponse, GetFacebookPagesData, GetFacebookPagesError, GetFacebookPagesResponse, UpdateFacebookPageData, UpdateFacebookPageError, UpdateFacebookPageResponse, GetLinkedInOrganizationsData, GetLinkedInOrganizationsError, GetLinkedInOrganizationsResponse, GetLinkedInAggregateAnalyticsData, GetLinkedInAggregateAnalyticsError, GetLinkedInAggregateAnalyticsResponse, GetLinkedInPostAnalyticsData, GetLinkedInPostAnalyticsError, GetLinkedInPostAnalyticsResponse, GetLinkedInPostReactionsData, GetLinkedInPostReactionsError, GetLinkedInPostReactionsResponse, UpdateLinkedInOrganizationData, UpdateLinkedInOrganizationError, UpdateLinkedInOrganizationResponse, GetLinkedInMentionsData, GetLinkedInMentionsError, GetLinkedInMentionsResponse, ListInstagramStoriesData, ListInstagramStoriesError, ListInstagramStoriesResponse, GetInstagramPublishingLimitData, GetInstagramPublishingLimitError, GetInstagramPublishingLimitResponse, SearchInstagramAudioData, SearchInstagramAudioError, SearchInstagramAudioResponse, GetInstagramAudioData, GetInstagramAudioError, GetInstagramAudioResponse, GetInstagramStoryInsightsData, GetInstagramStoryInsightsError, GetInstagramStoryInsightsResponse, GetPinterestBoardsData, GetPinterestBoardsError, GetPinterestBoardsResponse, UpdatePinterestBoardsData, UpdatePinterestBoardsError, UpdatePinterestBoardsResponse, CreatePinterestBoardData, CreatePinterestBoardError, CreatePinterestBoardResponse, GetYoutubeCaptionsData, GetYoutubeCaptionsError, GetYoutubeCaptionsResponse, GetYoutubePlaylistsData, GetYoutubePlaylistsError, GetYoutubePlaylistsResponse, UpdateYoutubeDefaultPlaylistData, UpdateYoutubeDefaultPlaylistError, UpdateYoutubeDefaultPlaylistResponse, GetGmbLocationsData, GetGmbLocationsError, GetGmbLocationsResponse, UpdateGmbLocationData, UpdateGmbLocationError, UpdateGmbLocationResponse, AssignGoogleBusinessLocationData, AssignGoogleBusinessLocationError, AssignGoogleBusinessLocationResponse, GetFacebookPostReactionsData, GetFacebookPostReactionsError, GetFacebookPostReactionsResponse, GetRedditSubredditsData, GetRedditSubredditsError, GetRedditSubredditsResponse, UpdateRedditSubredditsData, UpdateRedditSubredditsError, UpdateRedditSubredditsResponse, GetSubredditRulesData, GetSubredditRulesError, GetSubredditRulesResponse, VoteRedditThingData, VoteRedditThingError, VoteRedditThingResponse, GetRedditFlairsData, GetRedditFlairsError, GetRedditFlairsResponse, SetRedditPostFlairData, SetRedditPostFlairError, SetRedditPostFlairResponse, GetSlackSettingsData, GetSlackSettingsError, GetSlackSettingsResponse, UpdateSlackSettingsData, UpdateSlackSettingsError, UpdateSlackSettingsResponse, GetBlueskySettingsData, GetBlueskySettingsError, GetBlueskySettingsResponse, UpdateBlueskySettingsData, UpdateBlueskySettingsError, UpdateBlueskySettingsResponse, GetDiscordSettingsData, GetDiscordSettingsError, GetDiscordSettingsResponse, UpdateDiscordSettingsData, UpdateDiscordSettingsError, UpdateDiscordSettingsResponse, GetDiscordChannelsData, GetDiscordChannelsError, GetDiscordChannelsResponse, ListSlackMembersData, ListSlackMembersError, ListSlackMembersResponse, SendDiscordDirectMessageData, SendDiscordDirectMessageError, SendDiscordDirectMessageResponse, ListDiscordGuildRolesData, ListDiscordGuildRolesError, ListDiscordGuildRolesResponse, CreateDiscordGuildRoleData, CreateDiscordGuildRoleError, CreateDiscordGuildRoleResponse, EditDiscordGuildRoleData, EditDiscordGuildRoleError, EditDiscordGuildRoleResponse, DeleteDiscordGuildRoleData, DeleteDiscordGuildRoleError, DeleteDiscordGuildRoleResponse, ListDiscordGuildMembersData, ListDiscordGuildMembersError, ListDiscordGuildMembersResponse, SearchDiscordGuildMembersData, SearchDiscordGuildMembersError, SearchDiscordGuildMembersResponse, GetDiscordGuildMemberData, GetDiscordGuildMemberError, GetDiscordGuildMemberResponse, AddDiscordMemberRoleData, AddDiscordMemberRoleError, AddDiscordMemberRoleResponse, RemoveDiscordMemberRoleData, RemoveDiscordMemberRoleError, RemoveDiscordMemberRoleResponse, DeleteDiscordMessageData, DeleteDiscordMessageError, DeleteDiscordMessageResponse, CrosspostDiscordMessageData, CrosspostDiscordMessageError, CrosspostDiscordMessageResponse, CreateDiscordThreadData, CreateDiscordThreadError, CreateDiscordThreadResponse, ListDiscordPinnedMessagesData, ListDiscordPinnedMessagesError, ListDiscordPinnedMessagesResponse, PinDiscordMessageData, PinDiscordMessageError, PinDiscordMessageResponse, UnpinDiscordMessageData, UnpinDiscordMessageError, UnpinDiscordMessageResponse, ListDiscordScheduledEventsData, ListDiscordScheduledEventsError, ListDiscordScheduledEventsResponse, CreateDiscordScheduledEventData, CreateDiscordScheduledEventError, CreateDiscordScheduledEventResponse, GetDiscordScheduledEventData, GetDiscordScheduledEventError, GetDiscordScheduledEventResponse, UpdateDiscordScheduledEventData, UpdateDiscordScheduledEventError, UpdateDiscordScheduledEventResponse, DeleteDiscordScheduledEventData, DeleteDiscordScheduledEventError, DeleteDiscordScheduledEventResponse, ListQueueSlotsData, ListQueueSlotsError, ListQueueSlotsResponse, CreateQueueSlotData, CreateQueueSlotError, CreateQueueSlotResponse, UpdateQueueSlotData, UpdateQueueSlotError, UpdateQueueSlotResponse, DeleteQueueSlotData, DeleteQueueSlotError, DeleteQueueSlotResponse, PreviewQueueData, PreviewQueueError, PreviewQueueResponse, GetNextQueueSlotData, GetNextQueueSlotError, GetNextQueueSlotResponse, GetWebhookSettingsError, GetWebhookSettingsResponse, CreateWebhookSettingsData, CreateWebhookSettingsError, CreateWebhookSettingsResponse, UpdateWebhookSettingsData, UpdateWebhookSettingsError, UpdateWebhookSettingsResponse, DeleteWebhookSettingsData, DeleteWebhookSettingsError, DeleteWebhookSettingsResponse, GetWebhookLogsData, GetWebhookLogsError, GetWebhookLogsResponse, RedeliverWebhookEventData, RedeliverWebhookEventError, RedeliverWebhookEventResponse, TestWebhookData, TestWebhookError, TestWebhookResponse, ListLogsData, ListLogsError, ListLogsResponse, ListInboxConversationsData, ListInboxConversationsError, ListInboxConversationsResponse, CreateInboxConversationData, CreateInboxConversationError, CreateInboxConversationResponse, SearchInboxConversationsData, SearchInboxConversationsError, SearchInboxConversationsResponse, GetInboxConversationData, GetInboxConversationError, GetInboxConversationResponse, UpdateInboxConversationData, UpdateInboxConversationError, UpdateInboxConversationResponse, GetInboxConversationMessagesData, GetInboxConversationMessagesError, GetInboxConversationMessagesResponse, SendInboxMessageData, SendInboxMessageError, SendInboxMessageResponse, GetWhatsAppMediaData, GetWhatsAppMediaError, GetWhatsAppMediaResponse, EditInboxMessageData, EditInboxMessageError, EditInboxMessageResponse, DeleteInboxMessageData, DeleteInboxMessageError, DeleteInboxMessageResponse, SendTypingIndicatorData, SendTypingIndicatorError, SendTypingIndicatorResponse, MarkConversationReadData, MarkConversationReadError, MarkConversationReadResponse, AddMessageReactionData, AddMessageReactionError, AddMessageReactionResponse, RemoveMessageReactionData, RemoveMessageReactionError, RemoveMessageReactionResponse, UploadMediaDirectData, UploadMediaDirectError, UploadMediaDirectResponse, GetMessengerMenuData, GetMessengerMenuError, GetMessengerMenuResponse, SetMessengerMenuData, SetMessengerMenuError, SetMessengerMenuResponse, DeleteMessengerMenuData, DeleteMessengerMenuError, DeleteMessengerMenuResponse, GetInstagramIceBreakersData, GetInstagramIceBreakersError, GetInstagramIceBreakersResponse, SetInstagramIceBreakersData, SetInstagramIceBreakersError, SetInstagramIceBreakersResponse, DeleteInstagramIceBreakersData, DeleteInstagramIceBreakersError, DeleteInstagramIceBreakersResponse, GetTelegramCommandsData, GetTelegramCommandsError, GetTelegramCommandsResponse, SetTelegramCommandsData, SetTelegramCommandsError, SetTelegramCommandsResponse, DeleteTelegramCommandsData, DeleteTelegramCommandsError, DeleteTelegramCommandsResponse, GetMessageAttachmentData, GetMessageAttachmentError, GetMessageAttachmentResponse, ListInboxCommentsData, ListInboxCommentsError, ListInboxCommentsResponse, GetInboxPostCommentsData, GetInboxPostCommentsError, GetInboxPostCommentsResponse, ReplyToInboxPostData, ReplyToInboxPostError, ReplyToInboxPostResponse, DeleteInboxCommentData, DeleteInboxCommentError, DeleteInboxCommentResponse, EditInboxCommentData, EditInboxCommentError, EditInboxCommentResponse, SetCommentModerationData, SetCommentModerationError, SetCommentModerationResponse, HideInboxCommentData, HideInboxCommentError, HideInboxCommentResponse, UnhideInboxCommentData, UnhideInboxCommentError, UnhideInboxCommentResponse, LikeInboxCommentData, LikeInboxCommentError, LikeInboxCommentResponse, UnlikeInboxCommentData, UnlikeInboxCommentError, UnlikeInboxCommentResponse, LikePostData, LikePostError, LikePostResponse, UnlikePostData, UnlikePostError, UnlikePostResponse, SendPrivateReplyToCommentData, SendPrivateReplyToCommentError, SendPrivateReplyToCommentResponse, RetweetPostData, RetweetPostError, RetweetPostResponse, UndoRetweetData, UndoRetweetError, UndoRetweetResponse, BookmarkPostData, BookmarkPostError, BookmarkPostResponse, RemoveBookmarkData, RemoveBookmarkError, RemoveBookmarkResponse, FollowUserData, FollowUserError, FollowUserResponse, UnfollowUserData, UnfollowUserError, UnfollowUserResponse, SearchTweetsData, SearchTweetsError, SearchTweetsResponse, GetTweetData, GetTweetError, GetTweetResponse, ListInboxMentionsData, ListInboxMentionsError, ListInboxMentionsResponse, ReplyToMentionData, ReplyToMentionError, ReplyToMentionResponse, ListInboxReviewsData, ListInboxReviewsError, ListInboxReviewsResponse, ReplyToInboxReviewData, ReplyToInboxReviewError, ReplyToInboxReviewResponse, DeleteInboxReviewReplyData, DeleteInboxReviewReplyError, DeleteInboxReviewReplyResponse, GetWhatsAppTemplatesData, GetWhatsAppTemplatesError, GetWhatsAppTemplatesResponse, CreateWhatsAppTemplateData, CreateWhatsAppTemplateError, CreateWhatsAppTemplateResponse, GetWhatsAppTemplateData, GetWhatsAppTemplateError, GetWhatsAppTemplateResponse, UpdateWhatsAppTemplateData, UpdateWhatsAppTemplateError, UpdateWhatsAppTemplateResponse, DeleteWhatsAppTemplateData, DeleteWhatsAppTemplateError, DeleteWhatsAppTemplateResponse, GetWhatsAppTemplateByIdData, GetWhatsAppTemplateByIdError, GetWhatsAppTemplateByIdResponse, UpdateWhatsAppTemplateByIdData, UpdateWhatsAppTemplateByIdError, UpdateWhatsAppTemplateByIdResponse, DeleteWhatsAppTemplateByIdData, DeleteWhatsAppTemplateByIdError, DeleteWhatsAppTemplateByIdResponse, GetWhatsAppCallingConfigData, GetWhatsAppCallingConfigError, GetWhatsAppCallingConfigResponse, EnableWhatsAppCallingLegacyData, EnableWhatsAppCallingLegacyError, EnableWhatsAppCallingLegacyResponse, UpdateWhatsAppCallingLegacyData, UpdateWhatsAppCallingLegacyError, UpdateWhatsAppCallingLegacyResponse, DisableWhatsAppCallingLegacyData, DisableWhatsAppCallingLegacyError, DisableWhatsAppCallingLegacyResponse, GetWhatsAppCallPermissionsData, GetWhatsAppCallPermissionsError, GetWhatsAppCallPermissionsResponse, InitiateWhatsAppCallData, InitiateWhatsAppCallError, InitiateWhatsAppCallResponse, ListWhatsAppCallsData, ListWhatsAppCallsError, ListWhatsAppCallsResponse, GetWhatsAppCallData, GetWhatsAppCallError, GetWhatsAppCallResponse, GetWhatsAppCallRecordingData, GetWhatsAppCallRecordingError, GetWhatsAppCallRecordingResponse, GetWhatsAppCallEstimateData, GetWhatsAppCallEstimateError, GetWhatsAppCallEstimateResponse, ListCallsData, ListCallsError, ListCallsResponse, GetCallData, GetCallError, GetCallResponse, GetCallRecordingData, GetCallRecordingError, GetCallRecordingResponse, CreateVoiceCallData, CreateVoiceCallError, CreateVoiceCallResponse, ListVoiceCallsData, ListVoiceCallsError, ListVoiceCallsResponse, GetVoiceCallData, GetVoiceCallError, GetVoiceCallResponse, EndVoiceCallData, EndVoiceCallError, EndVoiceCallResponse, GetVoiceCallRecordingData, GetVoiceCallRecordingError, GetVoiceCallRecordingResponse, TransferVoiceCallData, TransferVoiceCallError, TransferVoiceCallResponse, GetVoiceCallEstimateData, GetVoiceCallEstimateError, GetVoiceCallEstimateResponse, CreateVoiceWebSessionError, CreateVoiceWebSessionResponse, DialVoiceWebCallData, DialVoiceWebCallError, DialVoiceWebCallResponse, SendSmsData, SendSmsError, SendSmsResponse, LookupSmsNumberData, LookupSmsNumberError, LookupSmsNumberResponse, ListSmsOptOutsData, ListSmsOptOutsError, ListSmsOptOutsResponse, CreateSmsSenderIdData, CreateSmsSenderIdError, CreateSmsSenderIdResponse, ListSmsSenderIdsError, ListSmsSenderIdsResponse, RequestSmsSenderIdLimitIncreaseData, RequestSmsSenderIdLimitIncreaseError, RequestSmsSenderIdLimitIncreaseResponse, DeleteSmsSenderIdData, DeleteSmsSenderIdError, DeleteSmsSenderIdResponse, StartSmsRegistrationData, StartSmsRegistrationError, StartSmsRegistrationResponse, ListSmsRegistrationsData, ListSmsRegistrationsError, ListSmsRegistrationsResponse, PreflightSmsRegistrationData, PreflightSmsRegistrationError, PreflightSmsRegistrationResponse, DeactivateSmsRegistrationData, DeactivateSmsRegistrationError, DeactivateSmsRegistrationResponse, GetSmsRegistrationData, GetSmsRegistrationError, GetSmsRegistrationResponse, VerifySmsRegistrationOtpData, VerifySmsRegistrationOtpError, VerifySmsRegistrationOtpResponse, ResendSmsRegistrationOtpData, ResendSmsRegistrationOtpError, ResendSmsRegistrationOtpResponse, AppealSmsRegistrationData, AppealSmsRegistrationError, AppealSmsRegistrationResponse, RespondToSmsRegistrationReviewData, RespondToSmsRegistrationReviewError, RespondToSmsRegistrationReviewResponse, UploadSmsOptInProofFileData, UploadSmsOptInProofFileError, UploadSmsOptInProofFileResponse, UploadSmsOptInProofData, UploadSmsOptInProofError, UploadSmsOptInProofResponse, ShareSmsRegistrationData, ShareSmsRegistrationError, ShareSmsRegistrationResponse, GetWhatsAppLibraryTemplateData, GetWhatsAppLibraryTemplateError, GetWhatsAppLibraryTemplateResponse, GetWhatsAppBusinessProfileData, GetWhatsAppBusinessProfileError, GetWhatsAppBusinessProfileResponse, UpdateWhatsAppBusinessProfileData, UpdateWhatsAppBusinessProfileError, UpdateWhatsAppBusinessProfileResponse, UploadWhatsAppProfilePhotoData, UploadWhatsAppProfilePhotoError, UploadWhatsAppProfilePhotoResponse, GetWhatsAppDisplayNameData, GetWhatsAppDisplayNameError, GetWhatsAppDisplayNameResponse, UpdateWhatsAppDisplayNameData, UpdateWhatsAppDisplayNameError, UpdateWhatsAppDisplayNameResponse, GetWhatsappBusinessUsernameData, GetWhatsappBusinessUsernameError, GetWhatsappBusinessUsernameResponse, SetWhatsappBusinessUsernameData, SetWhatsappBusinessUsernameError, SetWhatsappBusinessUsernameResponse, DeleteWhatsappBusinessUsernameData, DeleteWhatsappBusinessUsernameError, DeleteWhatsappBusinessUsernameResponse, GetWhatsappBusinessUsernameSuggestionsData, GetWhatsappBusinessUsernameSuggestionsError, GetWhatsappBusinessUsernameSuggestionsResponse, GetWhatsAppNumberInfoData, GetWhatsAppNumberInfoError, GetWhatsAppNumberInfoResponse, GetWhatsAppBlockStatusData, GetWhatsAppBlockStatusError, GetWhatsAppBlockStatusResponse, GetWhatsAppBlockedUsersData, GetWhatsAppBlockedUsersError, GetWhatsAppBlockedUsersResponse, BlockWhatsAppUsersData, BlockWhatsAppUsersError, BlockWhatsAppUsersResponse, UnblockWhatsAppUsersData, UnblockWhatsAppUsersError, UnblockWhatsAppUsersResponse, ListWhatsAppAccountEventsData, ListWhatsAppAccountEventsError, ListWhatsAppAccountEventsResponse, GetWhatsAppDatasetData, GetWhatsAppDatasetError, GetWhatsAppDatasetResponse, CreateWhatsAppDatasetData, CreateWhatsAppDatasetError, CreateWhatsAppDatasetResponse, ListPhoneNumbersData, ListPhoneNumbersError, ListPhoneNumbersResponse, GetPhoneNumberData, GetPhoneNumberError, GetPhoneNumberResponse, ReleasePhoneNumberData, ReleasePhoneNumberError, ReleasePhoneNumberResponse, PurchasePhoneNumberData, PurchasePhoneNumberError, PurchasePhoneNumberResponse, ListPhoneNumberCountriesError, ListPhoneNumberCountriesResponse, SearchAvailablePhoneNumbersData, SearchAvailablePhoneNumbersError, SearchAvailablePhoneNumbersResponse, CheckPhoneNumberAvailabilityData, CheckPhoneNumberAvailabilityError, CheckPhoneNumberAvailabilityResponse, GetWhatsAppPhoneNumbersData, GetWhatsAppPhoneNumbersError, GetWhatsAppPhoneNumbersResponse, PurchaseWhatsAppPhoneNumberData, PurchaseWhatsAppPhoneNumberError, PurchaseWhatsAppPhoneNumberResponse, ListWhatsAppNumberCountriesError, ListWhatsAppNumberCountriesResponse, SearchAvailableWhatsAppNumbersData, SearchAvailableWhatsAppNumbersError, SearchAvailableWhatsAppNumbersResponse, CheckWhatsAppNumberAvailabilityData, CheckWhatsAppNumberAvailabilityError, CheckWhatsAppNumberAvailabilityResponse, GetPhoneNumberKycFormData, GetPhoneNumberKycFormError, GetPhoneNumberKycFormResponse, SubmitPhoneNumberKycData, SubmitPhoneNumberKycError, SubmitPhoneNumberKycResponse, ViewPhoneNumberKycDocumentData, ViewPhoneNumberKycDocumentError, ViewPhoneNumberKycDocumentResponse, UploadPhoneNumberKycDocumentData, UploadPhoneNumberKycDocumentError, UploadPhoneNumberKycDocumentResponse, ValidatePhoneNumberKycAddressData, ValidatePhoneNumberKycAddressError, ValidatePhoneNumberKycAddressResponse, CreatePhoneNumberKycLinkData, CreatePhoneNumberKycLinkError, CreatePhoneNumberKycLinkResponse, CreatePhoneNumberPortInData, CreatePhoneNumberPortInError, CreatePhoneNumberPortInResponse, ListPhoneNumberPortInsError, ListPhoneNumberPortInsResponse, CheckPhoneNumberPortabilityData, CheckPhoneNumberPortabilityError, CheckPhoneNumberPortabilityResponse, UploadPhoneNumberPortInDocumentData, UploadPhoneNumberPortInDocumentError, UploadPhoneNumberPortInDocumentResponse, GetPhoneNumberPortInRequirementsData, GetPhoneNumberPortInRequirementsError, GetPhoneNumberPortInRequirementsResponse, GetPhoneNumberPortInOrderRequirementsData, GetPhoneNumberPortInOrderRequirementsError, GetPhoneNumberPortInOrderRequirementsResponse, CancelPhoneNumberPortInData, CancelPhoneNumberPortInError, CancelPhoneNumberPortInResponse, ReviewPhoneNumberKycPacketData, ReviewPhoneNumberKycPacketError, ReviewPhoneNumberKycPacketResponse, GetPhoneNumberRemediationData, GetPhoneNumberRemediationError, GetPhoneNumberRemediationResponse, RemediatePhoneNumberData, RemediatePhoneNumberError, RemediatePhoneNumberResponse, ReplyToPhoneNumberReviewerData, ReplyToPhoneNumberReviewerError, ReplyToPhoneNumberReviewerResponse, RespondToPhoneNumberReviewerData, RespondToPhoneNumberReviewerError, RespondToPhoneNumberReviewerResponse, GetWhatsAppNumberKycFormData, GetWhatsAppNumberKycFormError, GetWhatsAppNumberKycFormResponse, SubmitWhatsAppNumberKycData, SubmitWhatsAppNumberKycError, SubmitWhatsAppNumberKycResponse, UploadWhatsAppNumberKycDocumentData, UploadWhatsAppNumberKycDocumentError, UploadWhatsAppNumberKycDocumentResponse, ValidateWhatsAppNumberKycAddressData, ValidateWhatsAppNumberKycAddressError, ValidateWhatsAppNumberKycAddressResponse, CreateWhatsAppNumberKycLinkData, CreateWhatsAppNumberKycLinkError, CreateWhatsAppNumberKycLinkResponse, MoveWhatsAppNumberToProfileData, MoveWhatsAppNumberToProfileError, MoveWhatsAppNumberToProfileResponse, GetWhatsAppNumberRemediationData, GetWhatsAppNumberRemediationError, GetWhatsAppNumberRemediationResponse, RemediateWhatsAppNumberData, RemediateWhatsAppNumberError, RemediateWhatsAppNumberResponse, EnableVoiceOnNumberData, EnableVoiceOnNumberError, EnableVoiceOnNumberResponse, DisableVoiceOnNumberData, DisableVoiceOnNumberError, DisableVoiceOnNumberResponse, CreatePhoneNumberStockWatchData, CreatePhoneNumberStockWatchError, CreatePhoneNumberStockWatchResponse, ListPhoneNumberStockWatchesError, ListPhoneNumberStockWatchesResponse, DeletePhoneNumberStockWatchData, DeletePhoneNumberStockWatchError, DeletePhoneNumberStockWatchResponse, CreateSipTrunkData, CreateSipTrunkError, CreateSipTrunkResponse, ListSipTrunksError, ListSipTrunksResponse, GetSipTrunkData, GetSipTrunkError, GetSipTrunkResponse, DeleteSipTrunkData, DeleteSipTrunkError, DeleteSipTrunkResponse, RotateSipTrunkCredentialsData, RotateSipTrunkCredentialsError, RotateSipTrunkCredentialsResponse, AttachNumberToSipTrunkData, AttachNumberToSipTrunkError, AttachNumberToSipTrunkResponse, DetachNumberFromSipTrunkData, DetachNumberFromSipTrunkError, DetachNumberFromSipTrunkResponse, EnableSmsOnNumberData, EnableSmsOnNumberError, EnableSmsOnNumberResponse, DisableSmsOnNumberData, DisableSmsOnNumberError, DisableSmsOnNumberResponse, ReuseSmsRegistrationForNumberData, ReuseSmsRegistrationForNumberError, ReuseSmsRegistrationForNumberResponse, GetWhatsAppCallingData, GetWhatsAppCallingError, GetWhatsAppCallingResponse, EnableWhatsAppCallingData, EnableWhatsAppCallingError, EnableWhatsAppCallingResponse, UpdateWhatsAppCallingData, UpdateWhatsAppCallingError, UpdateWhatsAppCallingResponse, DisableWhatsAppCallingData, DisableWhatsAppCallingError, DisableWhatsAppCallingResponse, StartWhatsAppCallerIdVerificationData, StartWhatsAppCallerIdVerificationError, StartWhatsAppCallerIdVerificationResponse, VerifyWhatsAppCallerIdData, VerifyWhatsAppCallerIdError, VerifyWhatsAppCallerIdResponse, GetWhatsAppPhoneNumberData, GetWhatsAppPhoneNumberError, GetWhatsAppPhoneNumberResponse, ReleaseWhatsAppPhoneNumberData, ReleaseWhatsAppPhoneNumberError, ReleaseWhatsAppPhoneNumberResponse, ListWhatsAppSandboxSessionsError, ListWhatsAppSandboxSessionsResponse, CreateWhatsAppSandboxSessionData, CreateWhatsAppSandboxSessionError, CreateWhatsAppSandboxSessionResponse, DeleteWhatsAppSandboxSessionData, DeleteWhatsAppSandboxSessionError, DeleteWhatsAppSandboxSessionResponse, ListWhatsAppGroupChatsData, ListWhatsAppGroupChatsError, ListWhatsAppGroupChatsResponse, CreateWhatsAppGroupChatData, CreateWhatsAppGroupChatError, CreateWhatsAppGroupChatResponse, GetWhatsAppGroupChatData, GetWhatsAppGroupChatError, GetWhatsAppGroupChatResponse, UpdateWhatsAppGroupChatData, UpdateWhatsAppGroupChatError, UpdateWhatsAppGroupChatResponse, DeleteWhatsAppGroupChatData, DeleteWhatsAppGroupChatError, DeleteWhatsAppGroupChatResponse, AddWhatsAppGroupParticipantsData, AddWhatsAppGroupParticipantsError, AddWhatsAppGroupParticipantsResponse, RemoveWhatsAppGroupParticipantsData, RemoveWhatsAppGroupParticipantsError, RemoveWhatsAppGroupParticipantsResponse, CreateWhatsAppGroupInviteLinkData, CreateWhatsAppGroupInviteLinkError, CreateWhatsAppGroupInviteLinkResponse, ListWhatsAppGroupJoinRequestsData, ListWhatsAppGroupJoinRequestsError, ListWhatsAppGroupJoinRequestsResponse, ApproveWhatsAppGroupJoinRequestsData, ApproveWhatsAppGroupJoinRequestsError, ApproveWhatsAppGroupJoinRequestsResponse, RejectWhatsAppGroupJoinRequestsData, RejectWhatsAppGroupJoinRequestsError, RejectWhatsAppGroupJoinRequestsResponse, ListWhatsAppFlowsData, ListWhatsAppFlowsError, ListWhatsAppFlowsResponse, CreateWhatsAppFlowData, CreateWhatsAppFlowError, CreateWhatsAppFlowResponse, GetWhatsAppFlowData, GetWhatsAppFlowError, GetWhatsAppFlowResponse, UpdateWhatsAppFlowData, UpdateWhatsAppFlowError, UpdateWhatsAppFlowResponse, DeleteWhatsAppFlowData, DeleteWhatsAppFlowError, DeleteWhatsAppFlowResponse, GetWhatsAppFlowJsonData, GetWhatsAppFlowJsonError, GetWhatsAppFlowJsonResponse, UploadWhatsAppFlowJsonData, UploadWhatsAppFlowJsonError, UploadWhatsAppFlowJsonResponse, GetWhatsAppFlowPreviewData, GetWhatsAppFlowPreviewError, GetWhatsAppFlowPreviewResponse, ListWhatsAppFlowVersionsData, ListWhatsAppFlowVersionsError, ListWhatsAppFlowVersionsResponse, PublishWhatsAppFlowData, PublishWhatsAppFlowError, PublishWhatsAppFlowResponse, DeprecateWhatsAppFlowData, DeprecateWhatsAppFlowError, DeprecateWhatsAppFlowResponse, GetWhatsAppFlowsEncryptionKeyData, GetWhatsAppFlowsEncryptionKeyError, GetWhatsAppFlowsEncryptionKeyResponse, SetWhatsAppFlowsEncryptionKeyData, SetWhatsAppFlowsEncryptionKeyError, SetWhatsAppFlowsEncryptionKeyResponse, SendWhatsAppFlowMessageData, SendWhatsAppFlowMessageError, SendWhatsAppFlowMessageResponse, ListWhatsAppFlowResponsesData, ListWhatsAppFlowResponsesError, ListWhatsAppFlowResponsesResponse, ListContactsData, ListContactsError, ListContactsResponse, CreateContactData, CreateContactError, CreateContactResponse, GetContactData, GetContactError, GetContactResponse, UpdateContactData, UpdateContactError, UpdateContactResponse, DeleteContactData, DeleteContactError, DeleteContactResponse, GetContactChannelsData, GetContactChannelsError, GetContactChannelsResponse, BulkCreateContactsData, BulkCreateContactsError, BulkCreateContactsResponse, SetContactFieldValueData, SetContactFieldValueError, SetContactFieldValueResponse, ClearContactFieldValueData, ClearContactFieldValueError, ClearContactFieldValueResponse, ListCustomFieldsData, ListCustomFieldsError, ListCustomFieldsResponse, CreateCustomFieldData, CreateCustomFieldError, CreateCustomFieldResponse, UpdateCustomFieldData, UpdateCustomFieldError, UpdateCustomFieldResponse, DeleteCustomFieldData, DeleteCustomFieldError, DeleteCustomFieldResponse, ListBroadcastsData, ListBroadcastsError, ListBroadcastsResponse, CreateBroadcastData, CreateBroadcastError, CreateBroadcastResponse, GetBroadcastData, GetBroadcastError, GetBroadcastResponse, UpdateBroadcastData, UpdateBroadcastError, UpdateBroadcastResponse, DeleteBroadcastData, DeleteBroadcastError, DeleteBroadcastResponse, SendBroadcastData, SendBroadcastError, SendBroadcastResponse, ScheduleBroadcastData, ScheduleBroadcastError, ScheduleBroadcastResponse, CancelBroadcastData, CancelBroadcastError, CancelBroadcastResponse, ListBroadcastRecipientsData, ListBroadcastRecipientsError, ListBroadcastRecipientsResponse, AddBroadcastRecipientsData, AddBroadcastRecipientsError, AddBroadcastRecipientsResponse, ListWorkflowsData, ListWorkflowsError, ListWorkflowsResponse, CreateWorkflowData, CreateWorkflowError, CreateWorkflowResponse, GetWorkflowData, GetWorkflowError, GetWorkflowResponse, UpdateWorkflowData, UpdateWorkflowError, UpdateWorkflowResponse, DeleteWorkflowData, DeleteWorkflowError, DeleteWorkflowResponse, ActivateWorkflowData, ActivateWorkflowError, ActivateWorkflowResponse, PauseWorkflowData, PauseWorkflowError, PauseWorkflowResponse, ListWorkflowExecutionsData, ListWorkflowExecutionsError, ListWorkflowExecutionsResponse, TriggerWorkflowData, TriggerWorkflowError, TriggerWorkflowResponse, ListWorkflowExecutionEventsData, ListWorkflowExecutionEventsError, ListWorkflowExecutionEventsResponse, DuplicateWorkflowData, DuplicateWorkflowError, DuplicateWorkflowResponse, ListWorkflowVersionsData, ListWorkflowVersionsError, ListWorkflowVersionsResponse, GetWorkflowVersionData, GetWorkflowVersionError, GetWorkflowVersionResponse, RestoreWorkflowVersionData, RestoreWorkflowVersionError, RestoreWorkflowVersionResponse, ListSequencesData, ListSequencesError, ListSequencesResponse, CreateSequenceData, CreateSequenceError, CreateSequenceResponse, GetSequenceData, GetSequenceError, GetSequenceResponse, UpdateSequenceData, UpdateSequenceError, UpdateSequenceResponse, DeleteSequenceData, DeleteSequenceError, DeleteSequenceResponse, ActivateSequenceData, ActivateSequenceError, ActivateSequenceResponse, PauseSequenceData, PauseSequenceError, PauseSequenceResponse, EnrollContactsData, EnrollContactsError, EnrollContactsResponse, UnenrollContactData, UnenrollContactError, UnenrollContactResponse, ListSequenceEnrollmentsData, ListSequenceEnrollmentsError, ListSequenceEnrollmentsResponse, ListCommentAutomationsData, ListCommentAutomationsError, ListCommentAutomationsResponse, CreateCommentAutomationData, CreateCommentAutomationError, CreateCommentAutomationResponse, GetCommentAutomationData, GetCommentAutomationError, GetCommentAutomationResponse, UpdateCommentAutomationData, UpdateCommentAutomationError, UpdateCommentAutomationResponse, DeleteCommentAutomationData, DeleteCommentAutomationError, DeleteCommentAutomationResponse, ListCommentAutomationLogsData, ListCommentAutomationLogsError, ListCommentAutomationLogsResponse, ListAdsData, ListAdsError, ListAdsResponse, GetAdsSearchTermsData, GetAdsSearchTermsError, GetAdsSearchTermsResponse, ListBidStrategiesData, ListBidStrategiesError, ListBidStrategiesResponse, CreateBidStrategyData, CreateBidStrategyError, CreateBidStrategyResponse, UpdateBidStrategyData, UpdateBidStrategyError, UpdateBidStrategyResponse, ListLocalServicesLeadsData, ListLocalServicesLeadsError, ListLocalServicesLeadsResponse, ListLocalServicesLeadConversationsData, ListLocalServicesLeadConversationsError, ListLocalServicesLeadConversationsResponse, ListAdKeywordsData, ListAdKeywordsError, ListAdKeywordsResponse, AddAdKeywordsData, AddAdKeywordsError, AddAdKeywordsResponse, UpdateAdKeywordData, UpdateAdKeywordError, UpdateAdKeywordResponse, RemoveAdKeywordData, RemoveAdKeywordError, RemoveAdKeywordResponse, ListAdCampaignsData, ListAdCampaignsError, ListAdCampaignsResponse, CreateAdCampaignData, CreateAdCampaignError, CreateAdCampaignResponse, UpdateAdCampaignStatusData, UpdateAdCampaignStatusError, UpdateAdCampaignStatusResponse, GetCampaignBiddingData, GetCampaignBiddingError, GetCampaignBiddingResponse, UpdateAdCampaignData, UpdateAdCampaignError, UpdateAdCampaignResponse, DeleteAdCampaignData, DeleteAdCampaignError, DeleteAdCampaignResponse, ListCampaignNegativeKeywordsData, ListCampaignNegativeKeywordsError, ListCampaignNegativeKeywordsResponse, ReplaceCampaignNegativeKeywordsData, ReplaceCampaignNegativeKeywordsError, ReplaceCampaignNegativeKeywordsResponse, BulkUpdateAdCampaignStatusData, BulkUpdateAdCampaignStatusError, BulkUpdateAdCampaignStatusResponse, DuplicateAdCampaignData, DuplicateAdCampaignError, DuplicateAdCampaignResponse, GetCampaignTargetingData, GetCampaignTargetingError, GetCampaignTargetingResponse, UpdateCampaignTargetingData, UpdateCampaignTargetingError, UpdateCampaignTargetingResponse, ListAdSetsData, ListAdSetsError, ListAdSetsResponse, CreateAdSetData, CreateAdSetError, CreateAdSetResponse, DuplicateAdSetData, DuplicateAdSetError, DuplicateAdSetResponse, DuplicateAdData, DuplicateAdError, DuplicateAdResponse, GetAdSetDetailsData, GetAdSetDetailsError, GetAdSetDetailsResponse, UpdateAdSetData, UpdateAdSetError, UpdateAdSetResponse, DeleteAdSetData, DeleteAdSetError, DeleteAdSetResponse, UpdateAdSetStatusData, UpdateAdSetStatusError, UpdateAdSetStatusResponse, GetAdTreeData, GetAdTreeError, GetAdTreeResponse, GetAdsTimelineData, GetAdsTimelineError, GetAdsTimelineResponse, GetAdData, GetAdError, GetAdResponse, UpdateAdData, UpdateAdError, UpdateAdResponse, DeleteAdData, DeleteAdError, DeleteAdResponse, UpdateAdStatusData, UpdateAdStatusError, UpdateAdStatusResponse, AttachCampaignAssetsData, AttachCampaignAssetsError, AttachCampaignAssetsResponse, GetCampaignAnalyticsData, GetCampaignAnalyticsError, GetCampaignAnalyticsResponse, GenerateAdPreviewsData, GenerateAdPreviewsError, GenerateAdPreviewsResponse, GetAdPreviewsData, GetAdPreviewsError, GetAdPreviewsResponse, GetAdMediaData, GetAdMediaError, GetAdMediaResponse, GenerateKeywordIdeasData, GenerateKeywordIdeasError, GenerateKeywordIdeasResponse, GenerateKeywordHistoricalMetricsData, GenerateKeywordHistoricalMetricsError, GenerateKeywordHistoricalMetricsResponse, QueryAdInsightsData, QueryAdInsightsError, QueryAdInsightsResponse, CreateAdInsightsReportData, CreateAdInsightsReportError, CreateAdInsightsReportResponse, GetAdInsightsReportData, GetAdInsightsReportError, GetAdInsightsReportResponse, GetAdAnalyticsData, GetAdAnalyticsError, GetAdAnalyticsResponse, GetAdTrackingTagsData, GetAdTrackingTagsError, GetAdTrackingTagsResponse, UpdateAdTrackingTagsData, UpdateAdTrackingTagsError, UpdateAdTrackingTagsResponse, GetAdCommentsData, GetAdCommentsError, GetAdCommentsResponse, ListAdsBusinessCentersData, ListAdsBusinessCentersError, ListAdsBusinessCentersResponse, GetAdsActivityLogData, GetAdsActivityLogError, GetAdsActivityLogResponse, CreateRfPredictionData, CreateRfPredictionError, CreateRfPredictionResponse, GetRfPredictionData, GetRfPredictionError, GetRfPredictionResponse, CancelRfReservationData, CancelRfReservationError, CancelRfReservationResponse, ReserveRfPredictionData, ReserveRfPredictionError, ReserveRfPredictionResponse, ListAdStudiesData, ListAdStudiesError, ListAdStudiesResponse, ListMetaBusinessesData, ListMetaBusinessesError, ListMetaBusinessesResponse, ListAdLabelsData, ListAdLabelsError, ListAdLabelsResponse, ListHighDemandPeriodsData, ListHighDemandPeriodsError, ListHighDemandPeriodsResponse, CreateHighDemandPeriodData, CreateHighDemandPeriodError, CreateHighDemandPeriodResponse, ListAdCreativesData, ListAdCreativesError, ListAdCreativesResponse, CreateAdCreativeData, CreateAdCreativeError, CreateAdCreativeResponse, GetAdCreativeData, GetAdCreativeError, GetAdCreativeResponse, UpdateAdCreativeData, UpdateAdCreativeError, UpdateAdCreativeResponse, DeleteAdCreativeData, DeleteAdCreativeError, DeleteAdCreativeResponse, ListValueRuleSetsData, ListValueRuleSetsError, ListValueRuleSetsResponse, CreateValueRuleSetData, CreateValueRuleSetError, CreateValueRuleSetResponse, GetValueRuleSetData, GetValueRuleSetError, GetValueRuleSetResponse, UpdateValueRuleSetData, UpdateValueRuleSetError, UpdateValueRuleSetResponse, DeleteValueRuleSetData, DeleteValueRuleSetError, DeleteValueRuleSetResponse, ListAccountCalloutsData, ListAccountCalloutsError, ListAccountCalloutsResponse, AddAccountCalloutsData, AddAccountCalloutsError, AddAccountCalloutsResponse, RemoveAccountCalloutData, RemoveAccountCalloutError, RemoveAccountCalloutResponse, GetAdAccountFinanceData, GetAdAccountFinanceError, GetAdAccountFinanceResponse, ListAdAccountsData, ListAdAccountsError, ListAdAccountsResponse, UpdateAdAccountData, UpdateAdAccountError, UpdateAdAccountResponse, GetDsaDefaultsData, GetDsaDefaultsError, GetDsaDefaultsResponse, GetDsaRecommendationsData, GetDsaRecommendationsError, GetDsaRecommendationsResponse, BoostPostData, BoostPostError, BoostPostResponse, CreateStandaloneAdData, CreateStandaloneAdError, CreateStandaloneAdResponse, ListLeadsData, ListLeadsError, ListLeadsResponse, ListLeadFormsData, ListLeadFormsError, ListLeadFormsResponse, CreateLeadFormData, CreateLeadFormError, CreateLeadFormResponse, GetLeadFormData, GetLeadFormError, GetLeadFormResponse, ArchiveLeadFormData, ArchiveLeadFormError, ArchiveLeadFormResponse, ListFormLeadsData, ListFormLeadsError, ListFormLeadsResponse, CreateTestLeadData, CreateTestLeadError, CreateTestLeadResponse, UploadAdImageData, UploadAdImageError, UploadAdImageResponse, ListAdImagesData, ListAdImagesError, ListAdImagesResponse, UploadAdVideoData, UploadAdVideoError, UploadAdVideoResponse, ListAdVideosData, ListAdVideosError, ListAdVideosResponse, DeleteAdVideoData, DeleteAdVideoError, DeleteAdVideoResponse, SearchAdInterestsData, SearchAdInterestsError, SearchAdInterestsResponse, SearchAdTargetingData, SearchAdTargetingError, SearchAdTargetingResponse, SearchAdLibraryData, SearchAdLibraryError, SearchAdLibraryResponse, EstimateAdReachData, EstimateAdReachError, EstimateAdReachResponse, GetLinkedInBidPricingData, GetLinkedInBidPricingError, GetLinkedInBidPricingResponse, GetLinkedInSupplyForecastData, GetLinkedInSupplyForecastError, GetLinkedInSupplyForecastResponse, ListAdCatalogsData, ListAdCatalogsError, ListAdCatalogsResponse, ListAdCatalogProductSetsData, ListAdCatalogProductSetsError, ListAdCatalogProductSetsResponse, ListAdAudiencesData, ListAdAudiencesError, ListAdAudiencesResponse, CreateAdAudienceData, CreateAdAudienceError, CreateAdAudienceResponse, GetAdAudienceData, GetAdAudienceError, GetAdAudienceResponse, UpdateAdAudienceData, UpdateAdAudienceError, UpdateAdAudienceResponse, DeleteAdAudienceData, DeleteAdAudienceError, DeleteAdAudienceResponse, AddUsersToAdAudienceData, AddUsersToAdAudienceError, AddUsersToAdAudienceResponse, ReplaceAdAudienceCompaniesData, ReplaceAdAudienceCompaniesError, ReplaceAdAudienceCompaniesResponse, GetConversionsQualityData, GetConversionsQualityError, GetConversionsQualityResponse, SendConversionsData, SendConversionsError, SendConversionsResponse, AdjustConversionsData, AdjustConversionsError, AdjustConversionsResponse, ListConversionActionsData, ListConversionActionsError, ListConversionActionsResponse, CreateConversionActionData, CreateConversionActionError, CreateConversionActionResponse, ListConversionDestinationsData, ListConversionDestinationsError, ListConversionDestinationsResponse, CreateConversionDestinationData, CreateConversionDestinationError, CreateConversionDestinationResponse, GetConversionDestinationData, GetConversionDestinationError, GetConversionDestinationResponse, UpdateConversionDestinationData, UpdateConversionDestinationError, UpdateConversionDestinationResponse, DeleteConversionDestinationData, DeleteConversionDestinationError, DeleteConversionDestinationResponse, ListConversionAssociationsData, ListConversionAssociationsError, ListConversionAssociationsResponse, AddConversionAssociationsData, AddConversionAssociationsError, AddConversionAssociationsResponse, RemoveConversionAssociationsData, RemoveConversionAssociationsError, RemoveConversionAssociationsResponse, GetConversionMetricsData, GetConversionMetricsError, GetConversionMetricsResponse, ListWhatsAppConversionsData, ListWhatsAppConversionsError, ListWhatsAppConversionsResponse, SendWhatsAppConversionData, SendWhatsAppConversionError, SendWhatsAppConversionResponse, CreateMessagingAdData, CreateMessagingAdError, CreateMessagingAdResponse, CreateCallAdData, CreateCallAdError, CreateCallAdResponse, CreateCtwaAdData, CreateCtwaAdError, CreateCtwaAdResponse, ListCustomConversionsData, ListCustomConversionsError, ListCustomConversionsResponse, CreateCustomConversionData, CreateCustomConversionError, CreateCustomConversionResponse, ListTrackingTagsData, ListTrackingTagsError, ListTrackingTagsResponse, CreateTrackingTagData, CreateTrackingTagError, CreateTrackingTagResponse, GetTrackingTagData, GetTrackingTagError, GetTrackingTagResponse, UpdateTrackingTagData, UpdateTrackingTagError, UpdateTrackingTagResponse, ListTrackingTagSharedAccountsData, ListTrackingTagSharedAccountsError, ListTrackingTagSharedAccountsResponse, AddTrackingTagSharedAccountData, AddTrackingTagSharedAccountError, AddTrackingTagSharedAccountResponse, RemoveTrackingTagSharedAccountData, RemoveTrackingTagSharedAccountError, RemoveTrackingTagSharedAccountResponse, GetTrackingTagStatsData, GetTrackingTagStatsError, GetTrackingTagStatsResponse, ListBlogsData, ListBlogsError, ListBlogsResponse, CreateBlogData, CreateBlogError, CreateBlogResponse, GetBlogData, GetBlogError, GetBlogResponse, UpdateBlogData, UpdateBlogError, UpdateBlogResponse, DeleteBlogData, DeleteBlogError, DeleteBlogResponse, ListBlogArticlesData, ListBlogArticlesError, ListBlogArticlesResponse, CreateBlogArticleData, CreateBlogArticleError, CreateBlogArticleResponse, GetBlogArticleData, GetBlogArticleError, GetBlogArticleResponse, UpdateBlogArticleData, UpdateBlogArticleError, UpdateBlogArticleResponse, DeleteBlogArticleData, DeleteBlogArticleError, DeleteBlogArticleResponse, CreateVerificationData, CreateVerificationError, CreateVerificationResponse, GetVerificationData, GetVerificationError, GetVerificationResponse, CheckVerificationData, CheckVerificationError, CheckVerificationResponse } from './types.gen';
4
+ import type { ValidatePostLengthData, ValidatePostLengthError, ValidatePostLengthResponse, ValidatePostData, ValidatePostError, ValidatePostResponse, ValidateMediaData, ValidateMediaError, ValidateMediaResponse, ValidateSubredditData, ValidateSubredditError, ValidateSubredditResponse, GetAnalyticsData, GetAnalyticsError, GetAnalyticsResponse, GetAnalyticsDeltaData, GetAnalyticsDeltaError, GetAnalyticsDeltaResponse, GetYouTubeChannelInsightsData, GetYouTubeChannelInsightsError, GetYouTubeChannelInsightsResponse, GetLinkedInOrgAggregateAnalyticsData, GetLinkedInOrgAggregateAnalyticsError, GetLinkedInOrgAggregateAnalyticsResponse, GetTikTokAccountInsightsData, GetTikTokAccountInsightsError, GetTikTokAccountInsightsResponse, GetYouTubeDailyViewsData, GetYouTubeDailyViewsError, GetYouTubeDailyViewsResponse, GetYouTubeVideoRetentionData, GetYouTubeVideoRetentionError, GetYouTubeVideoRetentionResponse, GetFacebookPageInsightsData, GetFacebookPageInsightsError, GetFacebookPageInsightsResponse, GetFacebookPostEarningsData, GetFacebookPostEarningsError, GetFacebookPostEarningsResponse, GetInstagramAccountInsightsData, GetInstagramAccountInsightsError, GetInstagramAccountInsightsResponse, GetInstagramFollowerHistoryData, GetInstagramFollowerHistoryError, GetInstagramFollowerHistoryResponse, GetInstagramDemographicsData, GetInstagramDemographicsError, GetInstagramDemographicsResponse, GetYouTubeDemographicsData, GetYouTubeDemographicsError, GetYouTubeDemographicsResponse, GetDailyMetricsData, GetDailyMetricsError, GetDailyMetricsResponse, GetBestTimeToPostData, GetBestTimeToPostError, GetBestTimeToPostResponse, GetContentDecayData, GetContentDecayError, GetContentDecayResponse, GetPostingFrequencyData, GetPostingFrequencyError, GetPostingFrequencyResponse, GetPostTimelineData, GetPostTimelineError, GetPostTimelineResponse, GetGoogleBusinessPerformanceData, GetGoogleBusinessPerformanceError, GetGoogleBusinessPerformanceResponse, GetGoogleBusinessSearchKeywordsData, GetGoogleBusinessSearchKeywordsError, GetGoogleBusinessSearchKeywordsResponse, GetInboxVolumeData, GetInboxVolumeError, GetInboxVolumeResponse, GetInboxHeatmapData, GetInboxHeatmapError, GetInboxHeatmapResponse, GetInboxSourceBreakdownData, GetInboxSourceBreakdownError, GetInboxSourceBreakdownResponse, GetInboxResponseTimeData, GetInboxResponseTimeError, GetInboxResponseTimeResponse, GetInboxTopAccountsData, GetInboxTopAccountsError, GetInboxTopAccountsResponse, ListInboxConversationAnalyticsData, ListInboxConversationAnalyticsError, ListInboxConversationAnalyticsResponse, GetInboxConversationAnalyticsData, GetInboxConversationAnalyticsError, GetInboxConversationAnalyticsResponse, ListAccountGroupsError, ListAccountGroupsResponse, CreateAccountGroupData, CreateAccountGroupError, CreateAccountGroupResponse, UpdateAccountGroupData, UpdateAccountGroupError, UpdateAccountGroupResponse, DeleteAccountGroupData, DeleteAccountGroupError, DeleteAccountGroupResponse, GetMediaPresignedUrlData, GetMediaPresignedUrlError, GetMediaPresignedUrlResponse, SearchRedditData, SearchRedditError, SearchRedditResponse, GetRedditFeedData, GetRedditFeedError, GetRedditFeedResponse, GetBillingError, GetBillingResponse, GetXApiPricingError, GetXApiPricingResponse, GetUsageData, GetUsageError, GetUsageResponse, GetUsageStatsData, GetUsageStatsError, GetUsageStatsResponse, GetCallsUsageData, GetCallsUsageError, GetCallsUsageResponse, GetSmsUsageData, GetSmsUsageError, GetSmsUsageResponse, ListPostsData, ListPostsError, ListPostsResponse, CreatePostData, CreatePostError, CreatePostResponse, SyncExternalPostsData, SyncExternalPostsError, SyncExternalPostsResponse, GetPostData, GetPostError, GetPostResponse, UpdatePostData, UpdatePostError, UpdatePostResponse, DeletePostData, DeletePostError, DeletePostResponse, BulkUploadPostsData, BulkUploadPostsError, BulkUploadPostsResponse, RetryPostData, RetryPostError, RetryPostResponse, UnpublishPostData, UnpublishPostError, UnpublishPostResponse, EditPostData, EditPostError, EditPostResponse, UpdatePostMetadataData, UpdatePostMetadataError, UpdatePostMetadataResponse, ListUsersError, ListUsersResponse, GetUserData, GetUserError, GetUserResponse, ListProfilesData, ListProfilesError, ListProfilesResponse, CreateProfileData, CreateProfileError, CreateProfileResponse, GetProfileData, GetProfileError, GetProfileResponse, UpdateProfileData, UpdateProfileError, UpdateProfileResponse, DeleteProfileData, DeleteProfileError, DeleteProfileResponse, ListAccountsData, ListAccountsError, ListAccountsResponse, GetFollowerStatsData, GetFollowerStatsError, GetFollowerStatsResponse, UpdateAccountData, UpdateAccountError, UpdateAccountResponse, MoveAccountToProfileData, MoveAccountToProfileError, MoveAccountToProfileResponse, DeleteAccountData, DeleteAccountError, DeleteAccountResponse, GetAllAccountsHealthData, GetAllAccountsHealthError, GetAllAccountsHealthResponse, RegisterWhatsAppNumberData, RegisterWhatsAppNumberError, RegisterWhatsAppNumberResponse, RequestWhatsAppVerificationCodeData, RequestWhatsAppVerificationCodeError, RequestWhatsAppVerificationCodeResponse, VerifyWhatsAppNumberData, VerifyWhatsAppNumberError, VerifyWhatsAppNumberResponse, GetAccountHealthData, GetAccountHealthError, GetAccountHealthResponse, GetAccountPostsData, GetAccountPostsError, GetAccountPostsResponse, GetInstagramFollowStatusData, GetInstagramFollowStatusError, GetInstagramFollowStatusResponse, GetTikTokCreatorInfoData, GetTikTokCreatorInfoError, GetTikTokCreatorInfoResponse, VerifyCredentialError, VerifyCredentialResponse, ListApiKeysError, ListApiKeysResponse, CreateApiKeyData, CreateApiKeyError, CreateApiKeyResponse, DeleteApiKeyData, DeleteApiKeyError, DeleteApiKeyResponse, ListConnectedAppsError, ListConnectedAppsResponse, RevokeConnectedAppData, RevokeConnectedAppError, RevokeConnectedAppResponse, CreateInviteTokenData, CreateInviteTokenError, CreateInviteTokenResponse, GetConnectUrlData, GetConnectUrlError, GetConnectUrlResponse, HandleOAuthCallbackData, HandleOAuthCallbackError, HandleOAuthCallbackResponse, ConnectAdsData, ConnectAdsError, ConnectAdsResponse, GetShopifyConnectUrlData, GetShopifyConnectUrlError, GetShopifyConnectUrlResponse, ConnectShopifyWithTokenData, ConnectShopifyWithTokenError, ConnectShopifyWithTokenResponse, ConfigureTikTokAdsBrandIdentityData, ConfigureTikTokAdsBrandIdentityError, ConfigureTikTokAdsBrandIdentityResponse, ListFacebookPagesData, ListFacebookPagesError, ListFacebookPagesResponse, SelectFacebookPageData, SelectFacebookPageError, SelectFacebookPageResponse, ListInstagramPagesData, ListInstagramPagesError, ListInstagramPagesResponse, SelectInstagramAccountData, SelectInstagramAccountError, SelectInstagramAccountResponse, ListGoogleBusinessLocationsData, ListGoogleBusinessLocationsError, ListGoogleBusinessLocationsResponse, SelectGoogleBusinessLocationData, SelectGoogleBusinessLocationError, SelectGoogleBusinessLocationResponse, GetGoogleBusinessReviewsData, GetGoogleBusinessReviewsError, GetGoogleBusinessReviewsResponse, GetGoogleBusinessVerificationsData, GetGoogleBusinessVerificationsError, GetGoogleBusinessVerificationsResponse, StartGoogleBusinessVerificationData, StartGoogleBusinessVerificationError, StartGoogleBusinessVerificationResponse, FetchGoogleBusinessVerificationOptionsData, FetchGoogleBusinessVerificationOptionsError, FetchGoogleBusinessVerificationOptionsResponse, CompleteGoogleBusinessVerificationData, CompleteGoogleBusinessVerificationError, CompleteGoogleBusinessVerificationResponse, GetGoogleBusinessFoodMenusData, GetGoogleBusinessFoodMenusError, GetGoogleBusinessFoodMenusResponse, UpdateGoogleBusinessFoodMenusData, UpdateGoogleBusinessFoodMenusError, UpdateGoogleBusinessFoodMenusResponse, GetGoogleBusinessLocationDetailsData, GetGoogleBusinessLocationDetailsError, GetGoogleBusinessLocationDetailsResponse, UpdateGoogleBusinessLocationDetailsData, UpdateGoogleBusinessLocationDetailsError, UpdateGoogleBusinessLocationDetailsResponse, ListGoogleBusinessMediaData, ListGoogleBusinessMediaError, ListGoogleBusinessMediaResponse, CreateGoogleBusinessMediaData, CreateGoogleBusinessMediaError, CreateGoogleBusinessMediaResponse, DeleteGoogleBusinessMediaData, DeleteGoogleBusinessMediaError, DeleteGoogleBusinessMediaResponse, GetGmbAttributeMetadataData, GetGmbAttributeMetadataError, GetGmbAttributeMetadataResponse, GetGoogleBusinessAttributesData, GetGoogleBusinessAttributesError, GetGoogleBusinessAttributesResponse, UpdateGoogleBusinessAttributesData, UpdateGoogleBusinessAttributesError, UpdateGoogleBusinessAttributesResponse, ListGoogleBusinessPlaceActionsData, ListGoogleBusinessPlaceActionsError, ListGoogleBusinessPlaceActionsResponse, CreateGoogleBusinessPlaceActionData, CreateGoogleBusinessPlaceActionError, CreateGoogleBusinessPlaceActionResponse, DeleteGoogleBusinessPlaceActionData, DeleteGoogleBusinessPlaceActionError, DeleteGoogleBusinessPlaceActionResponse, UpdateGoogleBusinessPlaceActionData, UpdateGoogleBusinessPlaceActionError, UpdateGoogleBusinessPlaceActionResponse, GetGoogleBusinessServicesData, GetGoogleBusinessServicesError, GetGoogleBusinessServicesResponse, UpdateGoogleBusinessServicesData, UpdateGoogleBusinessServicesError, UpdateGoogleBusinessServicesResponse, BatchGetGoogleBusinessReviewsData, BatchGetGoogleBusinessReviewsError, BatchGetGoogleBusinessReviewsResponse, GetGoogleBusinessReviewData, GetGoogleBusinessReviewError, GetGoogleBusinessReviewResponse, ReplyToGoogleBusinessReviewData, ReplyToGoogleBusinessReviewError, ReplyToGoogleBusinessReviewResponse, DeleteGoogleBusinessReviewReplyData, DeleteGoogleBusinessReviewReplyError, DeleteGoogleBusinessReviewReplyResponse, GetPendingOAuthDataData, GetPendingOAuthDataError, GetPendingOAuthDataResponse, ListLinkedInOrganizationsData, ListLinkedInOrganizationsError, ListLinkedInOrganizationsResponse, SelectLinkedInOrganizationData, SelectLinkedInOrganizationError, SelectLinkedInOrganizationResponse, ListPinterestBoardsForSelectionData, ListPinterestBoardsForSelectionError, ListPinterestBoardsForSelectionResponse, SelectPinterestBoardData, SelectPinterestBoardError, SelectPinterestBoardResponse, ListSnapchatProfilesData, ListSnapchatProfilesError, ListSnapchatProfilesResponse, SelectSnapchatProfileData, SelectSnapchatProfileError, SelectSnapchatProfileResponse, ConnectBlueskyCredentialsData, ConnectBlueskyCredentialsError, ConnectBlueskyCredentialsResponse, ConnectOpenAiAdsCredentialsData, ConnectOpenAiAdsCredentialsError, ConnectOpenAiAdsCredentialsResponse, ConnectWhatsAppCredentialsData, ConnectWhatsAppCredentialsError, ConnectWhatsAppCredentialsResponse, ListWhatsAppPhoneNumbersData, ListWhatsAppPhoneNumbersError, ListWhatsAppPhoneNumbersResponse, CompleteWhatsAppPhoneSelectionData, CompleteWhatsAppPhoneSelectionError, CompleteWhatsAppPhoneSelectionResponse, ConnectWhatsAppEmbeddedSignupData, ConnectWhatsAppEmbeddedSignupError, ConnectWhatsAppEmbeddedSignupResponse, GetWhatsAppSdkConfigData, GetWhatsAppSdkConfigError, GetWhatsAppSdkConfigResponse, ConnectDiscordChannelData, ConnectDiscordChannelError, ConnectDiscordChannelResponse, ListSlackChannelsData, ListSlackChannelsError, ListSlackChannelsResponse, ConnectSlackChannelData, ConnectSlackChannelError, ConnectSlackChannelResponse, GetTelegramConnectStatusData, GetTelegramConnectStatusError, GetTelegramConnectStatusResponse, InitiateTelegramConnectData, InitiateTelegramConnectError, InitiateTelegramConnectResponse, CompleteTelegramConnectData, CompleteTelegramConnectError, CompleteTelegramConnectResponse, GetFacebookPagesData, GetFacebookPagesError, GetFacebookPagesResponse, UpdateFacebookPageData, UpdateFacebookPageError, UpdateFacebookPageResponse, GetLinkedInOrganizationsData, GetLinkedInOrganizationsError, GetLinkedInOrganizationsResponse, GetLinkedInAggregateAnalyticsData, GetLinkedInAggregateAnalyticsError, GetLinkedInAggregateAnalyticsResponse, GetLinkedInPostAnalyticsData, GetLinkedInPostAnalyticsError, GetLinkedInPostAnalyticsResponse, GetLinkedInPostReactionsData, GetLinkedInPostReactionsError, GetLinkedInPostReactionsResponse, UpdateLinkedInOrganizationData, UpdateLinkedInOrganizationError, UpdateLinkedInOrganizationResponse, GetLinkedInMentionsData, GetLinkedInMentionsError, GetLinkedInMentionsResponse, ListInstagramStoriesData, ListInstagramStoriesError, ListInstagramStoriesResponse, GetInstagramPublishingLimitData, GetInstagramPublishingLimitError, GetInstagramPublishingLimitResponse, SearchInstagramAudioData, SearchInstagramAudioError, SearchInstagramAudioResponse, GetInstagramAudioData, GetInstagramAudioError, GetInstagramAudioResponse, GetInstagramStoryInsightsData, GetInstagramStoryInsightsError, GetInstagramStoryInsightsResponse, GetPinterestBoardsData, GetPinterestBoardsError, GetPinterestBoardsResponse, UpdatePinterestBoardsData, UpdatePinterestBoardsError, UpdatePinterestBoardsResponse, CreatePinterestBoardData, CreatePinterestBoardError, CreatePinterestBoardResponse, GetYoutubeCaptionsData, GetYoutubeCaptionsError, GetYoutubeCaptionsResponse, GetYoutubePlaylistsData, GetYoutubePlaylistsError, GetYoutubePlaylistsResponse, UpdateYoutubeDefaultPlaylistData, UpdateYoutubeDefaultPlaylistError, UpdateYoutubeDefaultPlaylistResponse, GetGmbLocationsData, GetGmbLocationsError, GetGmbLocationsResponse, UpdateGmbLocationData, UpdateGmbLocationError, UpdateGmbLocationResponse, AssignGoogleBusinessLocationData, AssignGoogleBusinessLocationError, AssignGoogleBusinessLocationResponse, GetFacebookPostReactionsData, GetFacebookPostReactionsError, GetFacebookPostReactionsResponse, GetRedditSubredditsData, GetRedditSubredditsError, GetRedditSubredditsResponse, UpdateRedditSubredditsData, UpdateRedditSubredditsError, UpdateRedditSubredditsResponse, GetSubredditRulesData, GetSubredditRulesError, GetSubredditRulesResponse, VoteRedditThingData, VoteRedditThingError, VoteRedditThingResponse, GetRedditFlairsData, GetRedditFlairsError, GetRedditFlairsResponse, SetRedditPostFlairData, SetRedditPostFlairError, SetRedditPostFlairResponse, GetSlackSettingsData, GetSlackSettingsError, GetSlackSettingsResponse, UpdateSlackSettingsData, UpdateSlackSettingsError, UpdateSlackSettingsResponse, GetBlueskySettingsData, GetBlueskySettingsError, GetBlueskySettingsResponse, UpdateBlueskySettingsData, UpdateBlueskySettingsError, UpdateBlueskySettingsResponse, GetDiscordSettingsData, GetDiscordSettingsError, GetDiscordSettingsResponse, UpdateDiscordSettingsData, UpdateDiscordSettingsError, UpdateDiscordSettingsResponse, GetDiscordChannelsData, GetDiscordChannelsError, GetDiscordChannelsResponse, ListSlackMembersData, ListSlackMembersError, ListSlackMembersResponse, SendDiscordDirectMessageData, SendDiscordDirectMessageError, SendDiscordDirectMessageResponse, ListDiscordGuildRolesData, ListDiscordGuildRolesError, ListDiscordGuildRolesResponse, CreateDiscordGuildRoleData, CreateDiscordGuildRoleError, CreateDiscordGuildRoleResponse, EditDiscordGuildRoleData, EditDiscordGuildRoleError, EditDiscordGuildRoleResponse, DeleteDiscordGuildRoleData, DeleteDiscordGuildRoleError, DeleteDiscordGuildRoleResponse, ListDiscordGuildMembersData, ListDiscordGuildMembersError, ListDiscordGuildMembersResponse, SearchDiscordGuildMembersData, SearchDiscordGuildMembersError, SearchDiscordGuildMembersResponse, GetDiscordGuildMemberData, GetDiscordGuildMemberError, GetDiscordGuildMemberResponse, AddDiscordMemberRoleData, AddDiscordMemberRoleError, AddDiscordMemberRoleResponse, RemoveDiscordMemberRoleData, RemoveDiscordMemberRoleError, RemoveDiscordMemberRoleResponse, DeleteDiscordMessageData, DeleteDiscordMessageError, DeleteDiscordMessageResponse, CrosspostDiscordMessageData, CrosspostDiscordMessageError, CrosspostDiscordMessageResponse, CreateDiscordThreadData, CreateDiscordThreadError, CreateDiscordThreadResponse, ListDiscordPinnedMessagesData, ListDiscordPinnedMessagesError, ListDiscordPinnedMessagesResponse, PinDiscordMessageData, PinDiscordMessageError, PinDiscordMessageResponse, UnpinDiscordMessageData, UnpinDiscordMessageError, UnpinDiscordMessageResponse, ListDiscordScheduledEventsData, ListDiscordScheduledEventsError, ListDiscordScheduledEventsResponse, CreateDiscordScheduledEventData, CreateDiscordScheduledEventError, CreateDiscordScheduledEventResponse, GetDiscordScheduledEventData, GetDiscordScheduledEventError, GetDiscordScheduledEventResponse, UpdateDiscordScheduledEventData, UpdateDiscordScheduledEventError, UpdateDiscordScheduledEventResponse, DeleteDiscordScheduledEventData, DeleteDiscordScheduledEventError, DeleteDiscordScheduledEventResponse, ListQueueSlotsData, ListQueueSlotsError, ListQueueSlotsResponse, CreateQueueSlotData, CreateQueueSlotError, CreateQueueSlotResponse, UpdateQueueSlotData, UpdateQueueSlotError, UpdateQueueSlotResponse, DeleteQueueSlotData, DeleteQueueSlotError, DeleteQueueSlotResponse, PreviewQueueData, PreviewQueueError, PreviewQueueResponse, GetNextQueueSlotData, GetNextQueueSlotError, GetNextQueueSlotResponse, GetWebhookSettingsError, GetWebhookSettingsResponse, CreateWebhookSettingsData, CreateWebhookSettingsError, CreateWebhookSettingsResponse, UpdateWebhookSettingsData, UpdateWebhookSettingsError, UpdateWebhookSettingsResponse, DeleteWebhookSettingsData, DeleteWebhookSettingsError, DeleteWebhookSettingsResponse, GetWebhookLogsData, GetWebhookLogsError, GetWebhookLogsResponse, RedeliverWebhookEventData, RedeliverWebhookEventError, RedeliverWebhookEventResponse, TestWebhookData, TestWebhookError, TestWebhookResponse, ListLogsData, ListLogsError, ListLogsResponse, ListInboxConversationsData, ListInboxConversationsError, ListInboxConversationsResponse, CreateInboxConversationData, CreateInboxConversationError, CreateInboxConversationResponse, SearchInboxConversationsData, SearchInboxConversationsError, SearchInboxConversationsResponse, GetInboxConversationData, GetInboxConversationError, GetInboxConversationResponse, UpdateInboxConversationData, UpdateInboxConversationError, UpdateInboxConversationResponse, GetInboxConversationMessagesData, GetInboxConversationMessagesError, GetInboxConversationMessagesResponse, SendInboxMessageData, SendInboxMessageError, SendInboxMessageResponse, GetWhatsAppMediaData, GetWhatsAppMediaError, GetWhatsAppMediaResponse, EditInboxMessageData, EditInboxMessageError, EditInboxMessageResponse, DeleteInboxMessageData, DeleteInboxMessageError, DeleteInboxMessageResponse, SendTypingIndicatorData, SendTypingIndicatorError, SendTypingIndicatorResponse, SetConversationThreadControlData, SetConversationThreadControlError, SetConversationThreadControlResponse, MarkConversationReadData, MarkConversationReadError, MarkConversationReadResponse, AddMessageReactionData, AddMessageReactionError, AddMessageReactionResponse, RemoveMessageReactionData, RemoveMessageReactionError, RemoveMessageReactionResponse, UploadMediaDirectData, UploadMediaDirectError, UploadMediaDirectResponse, GetMessengerMenuData, GetMessengerMenuError, GetMessengerMenuResponse, SetMessengerMenuData, SetMessengerMenuError, SetMessengerMenuResponse, DeleteMessengerMenuData, DeleteMessengerMenuError, DeleteMessengerMenuResponse, GetInstagramIceBreakersData, GetInstagramIceBreakersError, GetInstagramIceBreakersResponse, SetInstagramIceBreakersData, SetInstagramIceBreakersError, SetInstagramIceBreakersResponse, DeleteInstagramIceBreakersData, DeleteInstagramIceBreakersError, DeleteInstagramIceBreakersResponse, GetTelegramCommandsData, GetTelegramCommandsError, GetTelegramCommandsResponse, SetTelegramCommandsData, SetTelegramCommandsError, SetTelegramCommandsResponse, DeleteTelegramCommandsData, DeleteTelegramCommandsError, DeleteTelegramCommandsResponse, GetMessageAttachmentData, GetMessageAttachmentError, GetMessageAttachmentResponse, ListInboxCommentsData, ListInboxCommentsError, ListInboxCommentsResponse, GetInboxPostCommentsData, GetInboxPostCommentsError, GetInboxPostCommentsResponse, ReplyToInboxPostData, ReplyToInboxPostError, ReplyToInboxPostResponse, DeleteInboxCommentData, DeleteInboxCommentError, DeleteInboxCommentResponse, EditInboxCommentData, EditInboxCommentError, EditInboxCommentResponse, SetCommentModerationData, SetCommentModerationError, SetCommentModerationResponse, HideInboxCommentData, HideInboxCommentError, HideInboxCommentResponse, UnhideInboxCommentData, UnhideInboxCommentError, UnhideInboxCommentResponse, LikeInboxCommentData, LikeInboxCommentError, LikeInboxCommentResponse, UnlikeInboxCommentData, UnlikeInboxCommentError, UnlikeInboxCommentResponse, LikePostData, LikePostError, LikePostResponse, UnlikePostData, UnlikePostError, UnlikePostResponse, SendPrivateReplyToCommentData, SendPrivateReplyToCommentError, SendPrivateReplyToCommentResponse, RetweetPostData, RetweetPostError, RetweetPostResponse, UndoRetweetData, UndoRetweetError, UndoRetweetResponse, BookmarkPostData, BookmarkPostError, BookmarkPostResponse, RemoveBookmarkData, RemoveBookmarkError, RemoveBookmarkResponse, FollowUserData, FollowUserError, FollowUserResponse, UnfollowUserData, UnfollowUserError, UnfollowUserResponse, SearchTweetsData, SearchTweetsError, SearchTweetsResponse, GetTweetData, GetTweetError, GetTweetResponse, ListInboxMentionsData, ListInboxMentionsError, ListInboxMentionsResponse, ReplyToMentionData, ReplyToMentionError, ReplyToMentionResponse, ListInboxReviewsData, ListInboxReviewsError, ListInboxReviewsResponse, ReplyToInboxReviewData, ReplyToInboxReviewError, ReplyToInboxReviewResponse, DeleteInboxReviewReplyData, DeleteInboxReviewReplyError, DeleteInboxReviewReplyResponse, GetWhatsAppTemplatesData, GetWhatsAppTemplatesError, GetWhatsAppTemplatesResponse, CreateWhatsAppTemplateData, CreateWhatsAppTemplateError, CreateWhatsAppTemplateResponse, GetWhatsAppTemplateData, GetWhatsAppTemplateError, GetWhatsAppTemplateResponse, UpdateWhatsAppTemplateData, UpdateWhatsAppTemplateError, UpdateWhatsAppTemplateResponse, DeleteWhatsAppTemplateData, DeleteWhatsAppTemplateError, DeleteWhatsAppTemplateResponse, GetWhatsAppTemplateByIdData, GetWhatsAppTemplateByIdError, GetWhatsAppTemplateByIdResponse, UpdateWhatsAppTemplateByIdData, UpdateWhatsAppTemplateByIdError, UpdateWhatsAppTemplateByIdResponse, DeleteWhatsAppTemplateByIdData, DeleteWhatsAppTemplateByIdError, DeleteWhatsAppTemplateByIdResponse, GetWhatsAppCallingConfigData, GetWhatsAppCallingConfigError, GetWhatsAppCallingConfigResponse, EnableWhatsAppCallingLegacyData, EnableWhatsAppCallingLegacyError, EnableWhatsAppCallingLegacyResponse, UpdateWhatsAppCallingLegacyData, UpdateWhatsAppCallingLegacyError, UpdateWhatsAppCallingLegacyResponse, DisableWhatsAppCallingLegacyData, DisableWhatsAppCallingLegacyError, DisableWhatsAppCallingLegacyResponse, GetWhatsAppCallPermissionsData, GetWhatsAppCallPermissionsError, GetWhatsAppCallPermissionsResponse, InitiateWhatsAppCallData, InitiateWhatsAppCallError, InitiateWhatsAppCallResponse, ListWhatsAppCallsData, ListWhatsAppCallsError, ListWhatsAppCallsResponse, GetWhatsAppCallData, GetWhatsAppCallError, GetWhatsAppCallResponse, GetWhatsAppCallRecordingData, GetWhatsAppCallRecordingError, GetWhatsAppCallRecordingResponse, GetWhatsAppCallEstimateData, GetWhatsAppCallEstimateError, GetWhatsAppCallEstimateResponse, ListCallsData, ListCallsError, ListCallsResponse, GetCallData, GetCallError, GetCallResponse, GetCallRecordingData, GetCallRecordingError, GetCallRecordingResponse, CreateVoiceCallData, CreateVoiceCallError, CreateVoiceCallResponse, ListVoiceCallsData, ListVoiceCallsError, ListVoiceCallsResponse, GetVoiceCallData, GetVoiceCallError, GetVoiceCallResponse, EndVoiceCallData, EndVoiceCallError, EndVoiceCallResponse, GetVoiceCallRecordingData, GetVoiceCallRecordingError, GetVoiceCallRecordingResponse, TransferVoiceCallData, TransferVoiceCallError, TransferVoiceCallResponse, GetVoiceCallEstimateData, GetVoiceCallEstimateError, GetVoiceCallEstimateResponse, CreateVoiceWebSessionError, CreateVoiceWebSessionResponse, DialVoiceWebCallData, DialVoiceWebCallError, DialVoiceWebCallResponse, SendSmsData, SendSmsError, SendSmsResponse, LookupSmsNumberData, LookupSmsNumberError, LookupSmsNumberResponse, ListSmsOptOutsData, ListSmsOptOutsError, ListSmsOptOutsResponse, CreateSmsSenderIdData, CreateSmsSenderIdError, CreateSmsSenderIdResponse, ListSmsSenderIdsError, ListSmsSenderIdsResponse, RequestSmsSenderIdLimitIncreaseData, RequestSmsSenderIdLimitIncreaseError, RequestSmsSenderIdLimitIncreaseResponse, DeleteSmsSenderIdData, DeleteSmsSenderIdError, DeleteSmsSenderIdResponse, StartSmsRegistrationData, StartSmsRegistrationError, StartSmsRegistrationResponse, ListSmsRegistrationsData, ListSmsRegistrationsError, ListSmsRegistrationsResponse, PreflightSmsRegistrationData, PreflightSmsRegistrationError, PreflightSmsRegistrationResponse, DeactivateSmsRegistrationData, DeactivateSmsRegistrationError, DeactivateSmsRegistrationResponse, GetSmsRegistrationData, GetSmsRegistrationError, GetSmsRegistrationResponse, VerifySmsRegistrationOtpData, VerifySmsRegistrationOtpError, VerifySmsRegistrationOtpResponse, ResendSmsRegistrationOtpData, ResendSmsRegistrationOtpError, ResendSmsRegistrationOtpResponse, AppealSmsRegistrationData, AppealSmsRegistrationError, AppealSmsRegistrationResponse, RespondToSmsRegistrationReviewData, RespondToSmsRegistrationReviewError, RespondToSmsRegistrationReviewResponse, UploadSmsOptInProofFileData, UploadSmsOptInProofFileError, UploadSmsOptInProofFileResponse, UploadSmsOptInProofData, UploadSmsOptInProofError, UploadSmsOptInProofResponse, ShareSmsRegistrationData, ShareSmsRegistrationError, ShareSmsRegistrationResponse, GetWhatsAppLibraryTemplateData, GetWhatsAppLibraryTemplateError, GetWhatsAppLibraryTemplateResponse, GetWhatsAppBusinessProfileData, GetWhatsAppBusinessProfileError, GetWhatsAppBusinessProfileResponse, UpdateWhatsAppBusinessProfileData, UpdateWhatsAppBusinessProfileError, UpdateWhatsAppBusinessProfileResponse, UploadWhatsAppProfilePhotoData, UploadWhatsAppProfilePhotoError, UploadWhatsAppProfilePhotoResponse, GetWhatsAppDisplayNameData, GetWhatsAppDisplayNameError, GetWhatsAppDisplayNameResponse, UpdateWhatsAppDisplayNameData, UpdateWhatsAppDisplayNameError, UpdateWhatsAppDisplayNameResponse, GetWhatsappBusinessUsernameData, GetWhatsappBusinessUsernameError, GetWhatsappBusinessUsernameResponse, SetWhatsappBusinessUsernameData, SetWhatsappBusinessUsernameError, SetWhatsappBusinessUsernameResponse, DeleteWhatsappBusinessUsernameData, DeleteWhatsappBusinessUsernameError, DeleteWhatsappBusinessUsernameResponse, GetWhatsappBusinessUsernameSuggestionsData, GetWhatsappBusinessUsernameSuggestionsError, GetWhatsappBusinessUsernameSuggestionsResponse, GetWhatsAppNumberInfoData, GetWhatsAppNumberInfoError, GetWhatsAppNumberInfoResponse, GetWhatsAppBlockStatusData, GetWhatsAppBlockStatusError, GetWhatsAppBlockStatusResponse, GetWhatsAppBlockedUsersData, GetWhatsAppBlockedUsersError, GetWhatsAppBlockedUsersResponse, BlockWhatsAppUsersData, BlockWhatsAppUsersError, BlockWhatsAppUsersResponse, UnblockWhatsAppUsersData, UnblockWhatsAppUsersError, UnblockWhatsAppUsersResponse, ListWhatsAppAccountEventsData, ListWhatsAppAccountEventsError, ListWhatsAppAccountEventsResponse, GetWhatsAppDatasetData, GetWhatsAppDatasetError, GetWhatsAppDatasetResponse, CreateWhatsAppDatasetData, CreateWhatsAppDatasetError, CreateWhatsAppDatasetResponse, ListPhoneNumbersData, ListPhoneNumbersError, ListPhoneNumbersResponse, GetPhoneNumberData, GetPhoneNumberError, GetPhoneNumberResponse, ReleasePhoneNumberData, ReleasePhoneNumberError, ReleasePhoneNumberResponse, PurchasePhoneNumberData, PurchasePhoneNumberError, PurchasePhoneNumberResponse, ListPhoneNumberCountriesError, ListPhoneNumberCountriesResponse, SearchAvailablePhoneNumbersData, SearchAvailablePhoneNumbersError, SearchAvailablePhoneNumbersResponse, CheckPhoneNumberAvailabilityData, CheckPhoneNumberAvailabilityError, CheckPhoneNumberAvailabilityResponse, GetWhatsAppPhoneNumbersData, GetWhatsAppPhoneNumbersError, GetWhatsAppPhoneNumbersResponse, PurchaseWhatsAppPhoneNumberData, PurchaseWhatsAppPhoneNumberError, PurchaseWhatsAppPhoneNumberResponse, ListWhatsAppNumberCountriesError, ListWhatsAppNumberCountriesResponse, SearchAvailableWhatsAppNumbersData, SearchAvailableWhatsAppNumbersError, SearchAvailableWhatsAppNumbersResponse, CheckWhatsAppNumberAvailabilityData, CheckWhatsAppNumberAvailabilityError, CheckWhatsAppNumberAvailabilityResponse, GetPhoneNumberKycFormData, GetPhoneNumberKycFormError, GetPhoneNumberKycFormResponse, SubmitPhoneNumberKycData, SubmitPhoneNumberKycError, SubmitPhoneNumberKycResponse, ViewPhoneNumberKycDocumentData, ViewPhoneNumberKycDocumentError, ViewPhoneNumberKycDocumentResponse, UploadPhoneNumberKycDocumentData, UploadPhoneNumberKycDocumentError, UploadPhoneNumberKycDocumentResponse, ValidatePhoneNumberKycAddressData, ValidatePhoneNumberKycAddressError, ValidatePhoneNumberKycAddressResponse, CreatePhoneNumberKycLinkData, CreatePhoneNumberKycLinkError, CreatePhoneNumberKycLinkResponse, CreatePhoneNumberPortInData, CreatePhoneNumberPortInError, CreatePhoneNumberPortInResponse, ListPhoneNumberPortInsError, ListPhoneNumberPortInsResponse, CheckPhoneNumberPortabilityData, CheckPhoneNumberPortabilityError, CheckPhoneNumberPortabilityResponse, UploadPhoneNumberPortInDocumentData, UploadPhoneNumberPortInDocumentError, UploadPhoneNumberPortInDocumentResponse, GetPhoneNumberPortInRequirementsData, GetPhoneNumberPortInRequirementsError, GetPhoneNumberPortInRequirementsResponse, GetPhoneNumberPortInOrderRequirementsData, GetPhoneNumberPortInOrderRequirementsError, GetPhoneNumberPortInOrderRequirementsResponse, CancelPhoneNumberPortInData, CancelPhoneNumberPortInError, CancelPhoneNumberPortInResponse, ReviewPhoneNumberKycPacketData, ReviewPhoneNumberKycPacketError, ReviewPhoneNumberKycPacketResponse, GetPhoneNumberRemediationData, GetPhoneNumberRemediationError, GetPhoneNumberRemediationResponse, RemediatePhoneNumberData, RemediatePhoneNumberError, RemediatePhoneNumberResponse, ReplyToPhoneNumberReviewerData, ReplyToPhoneNumberReviewerError, ReplyToPhoneNumberReviewerResponse, RespondToPhoneNumberReviewerData, RespondToPhoneNumberReviewerError, RespondToPhoneNumberReviewerResponse, GetWhatsAppNumberKycFormData, GetWhatsAppNumberKycFormError, GetWhatsAppNumberKycFormResponse, SubmitWhatsAppNumberKycData, SubmitWhatsAppNumberKycError, SubmitWhatsAppNumberKycResponse, UploadWhatsAppNumberKycDocumentData, UploadWhatsAppNumberKycDocumentError, UploadWhatsAppNumberKycDocumentResponse, ValidateWhatsAppNumberKycAddressData, ValidateWhatsAppNumberKycAddressError, ValidateWhatsAppNumberKycAddressResponse, CreateWhatsAppNumberKycLinkData, CreateWhatsAppNumberKycLinkError, CreateWhatsAppNumberKycLinkResponse, MoveWhatsAppNumberToProfileData, MoveWhatsAppNumberToProfileError, MoveWhatsAppNumberToProfileResponse, GetWhatsAppNumberRemediationData, GetWhatsAppNumberRemediationError, GetWhatsAppNumberRemediationResponse, RemediateWhatsAppNumberData, RemediateWhatsAppNumberError, RemediateWhatsAppNumberResponse, EnableVoiceOnNumberData, EnableVoiceOnNumberError, EnableVoiceOnNumberResponse, DisableVoiceOnNumberData, DisableVoiceOnNumberError, DisableVoiceOnNumberResponse, CreatePhoneNumberStockWatchData, CreatePhoneNumberStockWatchError, CreatePhoneNumberStockWatchResponse, ListPhoneNumberStockWatchesError, ListPhoneNumberStockWatchesResponse, DeletePhoneNumberStockWatchData, DeletePhoneNumberStockWatchError, DeletePhoneNumberStockWatchResponse, CreateSipTrunkData, CreateSipTrunkError, CreateSipTrunkResponse, ListSipTrunksError, ListSipTrunksResponse, GetSipTrunkData, GetSipTrunkError, GetSipTrunkResponse, DeleteSipTrunkData, DeleteSipTrunkError, DeleteSipTrunkResponse, RotateSipTrunkCredentialsData, RotateSipTrunkCredentialsError, RotateSipTrunkCredentialsResponse, AttachNumberToSipTrunkData, AttachNumberToSipTrunkError, AttachNumberToSipTrunkResponse, DetachNumberFromSipTrunkData, DetachNumberFromSipTrunkError, DetachNumberFromSipTrunkResponse, EnableSmsOnNumberData, EnableSmsOnNumberError, EnableSmsOnNumberResponse, DisableSmsOnNumberData, DisableSmsOnNumberError, DisableSmsOnNumberResponse, ReuseSmsRegistrationForNumberData, ReuseSmsRegistrationForNumberError, ReuseSmsRegistrationForNumberResponse, GetWhatsAppCallingData, GetWhatsAppCallingError, GetWhatsAppCallingResponse, EnableWhatsAppCallingData, EnableWhatsAppCallingError, EnableWhatsAppCallingResponse, UpdateWhatsAppCallingData, UpdateWhatsAppCallingError, UpdateWhatsAppCallingResponse, DisableWhatsAppCallingData, DisableWhatsAppCallingError, DisableWhatsAppCallingResponse, StartWhatsAppCallerIdVerificationData, StartWhatsAppCallerIdVerificationError, StartWhatsAppCallerIdVerificationResponse, VerifyWhatsAppCallerIdData, VerifyWhatsAppCallerIdError, VerifyWhatsAppCallerIdResponse, GetWhatsAppPhoneNumberData, GetWhatsAppPhoneNumberError, GetWhatsAppPhoneNumberResponse, ReleaseWhatsAppPhoneNumberData, ReleaseWhatsAppPhoneNumberError, ReleaseWhatsAppPhoneNumberResponse, ListWhatsAppSandboxSessionsError, ListWhatsAppSandboxSessionsResponse, CreateWhatsAppSandboxSessionData, CreateWhatsAppSandboxSessionError, CreateWhatsAppSandboxSessionResponse, DeleteWhatsAppSandboxSessionData, DeleteWhatsAppSandboxSessionError, DeleteWhatsAppSandboxSessionResponse, ListWhatsAppGroupChatsData, ListWhatsAppGroupChatsError, ListWhatsAppGroupChatsResponse, CreateWhatsAppGroupChatData, CreateWhatsAppGroupChatError, CreateWhatsAppGroupChatResponse, GetWhatsAppGroupChatData, GetWhatsAppGroupChatError, GetWhatsAppGroupChatResponse, UpdateWhatsAppGroupChatData, UpdateWhatsAppGroupChatError, UpdateWhatsAppGroupChatResponse, DeleteWhatsAppGroupChatData, DeleteWhatsAppGroupChatError, DeleteWhatsAppGroupChatResponse, AddWhatsAppGroupParticipantsData, AddWhatsAppGroupParticipantsError, AddWhatsAppGroupParticipantsResponse, RemoveWhatsAppGroupParticipantsData, RemoveWhatsAppGroupParticipantsError, RemoveWhatsAppGroupParticipantsResponse, CreateWhatsAppGroupInviteLinkData, CreateWhatsAppGroupInviteLinkError, CreateWhatsAppGroupInviteLinkResponse, ListWhatsAppGroupJoinRequestsData, ListWhatsAppGroupJoinRequestsError, ListWhatsAppGroupJoinRequestsResponse, ApproveWhatsAppGroupJoinRequestsData, ApproveWhatsAppGroupJoinRequestsError, ApproveWhatsAppGroupJoinRequestsResponse, RejectWhatsAppGroupJoinRequestsData, RejectWhatsAppGroupJoinRequestsError, RejectWhatsAppGroupJoinRequestsResponse, ListWhatsAppFlowsData, ListWhatsAppFlowsError, ListWhatsAppFlowsResponse, CreateWhatsAppFlowData, CreateWhatsAppFlowError, CreateWhatsAppFlowResponse, GetWhatsAppFlowData, GetWhatsAppFlowError, GetWhatsAppFlowResponse, UpdateWhatsAppFlowData, UpdateWhatsAppFlowError, UpdateWhatsAppFlowResponse, DeleteWhatsAppFlowData, DeleteWhatsAppFlowError, DeleteWhatsAppFlowResponse, GetWhatsAppFlowJsonData, GetWhatsAppFlowJsonError, GetWhatsAppFlowJsonResponse, UploadWhatsAppFlowJsonData, UploadWhatsAppFlowJsonError, UploadWhatsAppFlowJsonResponse, GetWhatsAppFlowPreviewData, GetWhatsAppFlowPreviewError, GetWhatsAppFlowPreviewResponse, ListWhatsAppFlowVersionsData, ListWhatsAppFlowVersionsError, ListWhatsAppFlowVersionsResponse, PublishWhatsAppFlowData, PublishWhatsAppFlowError, PublishWhatsAppFlowResponse, DeprecateWhatsAppFlowData, DeprecateWhatsAppFlowError, DeprecateWhatsAppFlowResponse, GetWhatsAppFlowsEncryptionKeyData, GetWhatsAppFlowsEncryptionKeyError, GetWhatsAppFlowsEncryptionKeyResponse, SetWhatsAppFlowsEncryptionKeyData, SetWhatsAppFlowsEncryptionKeyError, SetWhatsAppFlowsEncryptionKeyResponse, SendWhatsAppFlowMessageData, SendWhatsAppFlowMessageError, SendWhatsAppFlowMessageResponse, ListWhatsAppFlowResponsesData, ListWhatsAppFlowResponsesError, ListWhatsAppFlowResponsesResponse, ListContactsData, ListContactsError, ListContactsResponse, CreateContactData, CreateContactError, CreateContactResponse, GetContactData, GetContactError, GetContactResponse, UpdateContactData, UpdateContactError, UpdateContactResponse, DeleteContactData, DeleteContactError, DeleteContactResponse, GetContactChannelsData, GetContactChannelsError, GetContactChannelsResponse, BulkCreateContactsData, BulkCreateContactsError, BulkCreateContactsResponse, SetContactFieldValueData, SetContactFieldValueError, SetContactFieldValueResponse, ClearContactFieldValueData, ClearContactFieldValueError, ClearContactFieldValueResponse, ListCustomFieldsData, ListCustomFieldsError, ListCustomFieldsResponse, CreateCustomFieldData, CreateCustomFieldError, CreateCustomFieldResponse, UpdateCustomFieldData, UpdateCustomFieldError, UpdateCustomFieldResponse, DeleteCustomFieldData, DeleteCustomFieldError, DeleteCustomFieldResponse, ListBroadcastsData, ListBroadcastsError, ListBroadcastsResponse, CreateBroadcastData, CreateBroadcastError, CreateBroadcastResponse, GetBroadcastData, GetBroadcastError, GetBroadcastResponse, UpdateBroadcastData, UpdateBroadcastError, UpdateBroadcastResponse, DeleteBroadcastData, DeleteBroadcastError, DeleteBroadcastResponse, SendBroadcastData, SendBroadcastError, SendBroadcastResponse, ScheduleBroadcastData, ScheduleBroadcastError, ScheduleBroadcastResponse, CancelBroadcastData, CancelBroadcastError, CancelBroadcastResponse, ListBroadcastRecipientsData, ListBroadcastRecipientsError, ListBroadcastRecipientsResponse, AddBroadcastRecipientsData, AddBroadcastRecipientsError, AddBroadcastRecipientsResponse, ListWorkflowsData, ListWorkflowsError, ListWorkflowsResponse, CreateWorkflowData, CreateWorkflowError, CreateWorkflowResponse, GetWorkflowData, GetWorkflowError, GetWorkflowResponse, UpdateWorkflowData, UpdateWorkflowError, UpdateWorkflowResponse, DeleteWorkflowData, DeleteWorkflowError, DeleteWorkflowResponse, ActivateWorkflowData, ActivateWorkflowError, ActivateWorkflowResponse, PauseWorkflowData, PauseWorkflowError, PauseWorkflowResponse, ListWorkflowExecutionsData, ListWorkflowExecutionsError, ListWorkflowExecutionsResponse, TriggerWorkflowData, TriggerWorkflowError, TriggerWorkflowResponse, ListWorkflowExecutionEventsData, ListWorkflowExecutionEventsError, ListWorkflowExecutionEventsResponse, DuplicateWorkflowData, DuplicateWorkflowError, DuplicateWorkflowResponse, ListWorkflowVersionsData, ListWorkflowVersionsError, ListWorkflowVersionsResponse, GetWorkflowVersionData, GetWorkflowVersionError, GetWorkflowVersionResponse, RestoreWorkflowVersionData, RestoreWorkflowVersionError, RestoreWorkflowVersionResponse, ListSequencesData, ListSequencesError, ListSequencesResponse, CreateSequenceData, CreateSequenceError, CreateSequenceResponse, GetSequenceData, GetSequenceError, GetSequenceResponse, UpdateSequenceData, UpdateSequenceError, UpdateSequenceResponse, DeleteSequenceData, DeleteSequenceError, DeleteSequenceResponse, ActivateSequenceData, ActivateSequenceError, ActivateSequenceResponse, PauseSequenceData, PauseSequenceError, PauseSequenceResponse, EnrollContactsData, EnrollContactsError, EnrollContactsResponse, UnenrollContactData, UnenrollContactError, UnenrollContactResponse, ListSequenceEnrollmentsData, ListSequenceEnrollmentsError, ListSequenceEnrollmentsResponse, ListCommentAutomationsData, ListCommentAutomationsError, ListCommentAutomationsResponse, CreateCommentAutomationData, CreateCommentAutomationError, CreateCommentAutomationResponse, GetCommentAutomationData, GetCommentAutomationError, GetCommentAutomationResponse, UpdateCommentAutomationData, UpdateCommentAutomationError, UpdateCommentAutomationResponse, DeleteCommentAutomationData, DeleteCommentAutomationError, DeleteCommentAutomationResponse, ListCommentAutomationLogsData, ListCommentAutomationLogsError, ListCommentAutomationLogsResponse, ListAdsData, ListAdsError, ListAdsResponse, GetAdsSearchTermsData, GetAdsSearchTermsError, GetAdsSearchTermsResponse, ListBidStrategiesData, ListBidStrategiesError, ListBidStrategiesResponse, CreateBidStrategyData, CreateBidStrategyError, CreateBidStrategyResponse, UpdateBidStrategyData, UpdateBidStrategyError, UpdateBidStrategyResponse, ListLocalServicesLeadsData, ListLocalServicesLeadsError, ListLocalServicesLeadsResponse, ListLocalServicesLeadConversationsData, ListLocalServicesLeadConversationsError, ListLocalServicesLeadConversationsResponse, ListAdKeywordsData, ListAdKeywordsError, ListAdKeywordsResponse, AddAdKeywordsData, AddAdKeywordsError, AddAdKeywordsResponse, UpdateAdKeywordData, UpdateAdKeywordError, UpdateAdKeywordResponse, RemoveAdKeywordData, RemoveAdKeywordError, RemoveAdKeywordResponse, ListAdCampaignsData, ListAdCampaignsError, ListAdCampaignsResponse, CreateAdCampaignData, CreateAdCampaignError, CreateAdCampaignResponse, UpdateAdCampaignStatusData, UpdateAdCampaignStatusError, UpdateAdCampaignStatusResponse, GetCampaignBiddingData, GetCampaignBiddingError, GetCampaignBiddingResponse, UpdateAdCampaignData, UpdateAdCampaignError, UpdateAdCampaignResponse, DeleteAdCampaignData, DeleteAdCampaignError, DeleteAdCampaignResponse, ListCampaignNegativeKeywordsData, ListCampaignNegativeKeywordsError, ListCampaignNegativeKeywordsResponse, ReplaceCampaignNegativeKeywordsData, ReplaceCampaignNegativeKeywordsError, ReplaceCampaignNegativeKeywordsResponse, BulkUpdateAdCampaignStatusData, BulkUpdateAdCampaignStatusError, BulkUpdateAdCampaignStatusResponse, DuplicateAdCampaignData, DuplicateAdCampaignError, DuplicateAdCampaignResponse, GetCampaignTargetingData, GetCampaignTargetingError, GetCampaignTargetingResponse, UpdateCampaignTargetingData, UpdateCampaignTargetingError, UpdateCampaignTargetingResponse, ListAdSetsData, ListAdSetsError, ListAdSetsResponse, CreateAdSetData, CreateAdSetError, CreateAdSetResponse, DuplicateAdSetData, DuplicateAdSetError, DuplicateAdSetResponse, DuplicateAdData, DuplicateAdError, DuplicateAdResponse, GetAdSetDetailsData, GetAdSetDetailsError, GetAdSetDetailsResponse, UpdateAdSetData, UpdateAdSetError, UpdateAdSetResponse, DeleteAdSetData, DeleteAdSetError, DeleteAdSetResponse, UpdateAdSetStatusData, UpdateAdSetStatusError, UpdateAdSetStatusResponse, GetAdTreeData, GetAdTreeError, GetAdTreeResponse, GetAdsTimelineData, GetAdsTimelineError, GetAdsTimelineResponse, GetAdData, GetAdError, GetAdResponse, UpdateAdData, UpdateAdError, UpdateAdResponse, DeleteAdData, DeleteAdError, DeleteAdResponse, UpdateAdStatusData, UpdateAdStatusError, UpdateAdStatusResponse, AttachCampaignAssetsData, AttachCampaignAssetsError, AttachCampaignAssetsResponse, GetCampaignAnalyticsData, GetCampaignAnalyticsError, GetCampaignAnalyticsResponse, GenerateAdPreviewsData, GenerateAdPreviewsError, GenerateAdPreviewsResponse, GetAdPreviewsData, GetAdPreviewsError, GetAdPreviewsResponse, GetAdMediaData, GetAdMediaError, GetAdMediaResponse, GenerateKeywordIdeasData, GenerateKeywordIdeasError, GenerateKeywordIdeasResponse, GenerateKeywordHistoricalMetricsData, GenerateKeywordHistoricalMetricsError, GenerateKeywordHistoricalMetricsResponse, QueryAdInsightsData, QueryAdInsightsError, QueryAdInsightsResponse, CreateAdInsightsReportData, CreateAdInsightsReportError, CreateAdInsightsReportResponse, GetAdInsightsReportData, GetAdInsightsReportError, GetAdInsightsReportResponse, GetAdAnalyticsData, GetAdAnalyticsError, GetAdAnalyticsResponse, GetAdTrackingTagsData, GetAdTrackingTagsError, GetAdTrackingTagsResponse, UpdateAdTrackingTagsData, UpdateAdTrackingTagsError, UpdateAdTrackingTagsResponse, GetAdCommentsData, GetAdCommentsError, GetAdCommentsResponse, ListAdsBusinessCentersData, ListAdsBusinessCentersError, ListAdsBusinessCentersResponse, GetAdsActivityLogData, GetAdsActivityLogError, GetAdsActivityLogResponse, CreateRfPredictionData, CreateRfPredictionError, CreateRfPredictionResponse, GetRfPredictionData, GetRfPredictionError, GetRfPredictionResponse, CancelRfReservationData, CancelRfReservationError, CancelRfReservationResponse, ReserveRfPredictionData, ReserveRfPredictionError, ReserveRfPredictionResponse, ListAdStudiesData, ListAdStudiesError, ListAdStudiesResponse, ListMetaBusinessesData, ListMetaBusinessesError, ListMetaBusinessesResponse, ListAdLabelsData, ListAdLabelsError, ListAdLabelsResponse, ListHighDemandPeriodsData, ListHighDemandPeriodsError, ListHighDemandPeriodsResponse, CreateHighDemandPeriodData, CreateHighDemandPeriodError, CreateHighDemandPeriodResponse, ListAdCreativesData, ListAdCreativesError, ListAdCreativesResponse, CreateAdCreativeData, CreateAdCreativeError, CreateAdCreativeResponse, GetAdCreativeData, GetAdCreativeError, GetAdCreativeResponse, UpdateAdCreativeData, UpdateAdCreativeError, UpdateAdCreativeResponse, DeleteAdCreativeData, DeleteAdCreativeError, DeleteAdCreativeResponse, ListValueRuleSetsData, ListValueRuleSetsError, ListValueRuleSetsResponse, CreateValueRuleSetData, CreateValueRuleSetError, CreateValueRuleSetResponse, GetValueRuleSetData, GetValueRuleSetError, GetValueRuleSetResponse, UpdateValueRuleSetData, UpdateValueRuleSetError, UpdateValueRuleSetResponse, DeleteValueRuleSetData, DeleteValueRuleSetError, DeleteValueRuleSetResponse, ListAccountCalloutsData, ListAccountCalloutsError, ListAccountCalloutsResponse, AddAccountCalloutsData, AddAccountCalloutsError, AddAccountCalloutsResponse, RemoveAccountCalloutData, RemoveAccountCalloutError, RemoveAccountCalloutResponse, GetAdAccountFinanceData, GetAdAccountFinanceError, GetAdAccountFinanceResponse, ListAdAccountsData, ListAdAccountsError, ListAdAccountsResponse, UpdateAdAccountData, UpdateAdAccountError, UpdateAdAccountResponse, GetDsaDefaultsData, GetDsaDefaultsError, GetDsaDefaultsResponse, GetDsaRecommendationsData, GetDsaRecommendationsError, GetDsaRecommendationsResponse, BoostPostData, BoostPostError, BoostPostResponse, CreateStandaloneAdData, CreateStandaloneAdError, CreateStandaloneAdResponse, ListLeadsData, ListLeadsError, ListLeadsResponse, ListLeadFormsData, ListLeadFormsError, ListLeadFormsResponse, CreateLeadFormData, CreateLeadFormError, CreateLeadFormResponse, GetLeadFormData, GetLeadFormError, GetLeadFormResponse, ArchiveLeadFormData, ArchiveLeadFormError, ArchiveLeadFormResponse, ListFormLeadsData, ListFormLeadsError, ListFormLeadsResponse, CreateTestLeadData, CreateTestLeadError, CreateTestLeadResponse, UploadAdImageData, UploadAdImageError, UploadAdImageResponse, ListAdImagesData, ListAdImagesError, ListAdImagesResponse, UploadAdVideoData, UploadAdVideoError, UploadAdVideoResponse, ListAdVideosData, ListAdVideosError, ListAdVideosResponse, DeleteAdVideoData, DeleteAdVideoError, DeleteAdVideoResponse, SearchAdInterestsData, SearchAdInterestsError, SearchAdInterestsResponse, SearchAdTargetingData, SearchAdTargetingError, SearchAdTargetingResponse, SearchAdLibraryData, SearchAdLibraryError, SearchAdLibraryResponse, EstimateAdReachData, EstimateAdReachError, EstimateAdReachResponse, GetLinkedInBidPricingData, GetLinkedInBidPricingError, GetLinkedInBidPricingResponse, GetLinkedInSupplyForecastData, GetLinkedInSupplyForecastError, GetLinkedInSupplyForecastResponse, ListAdCatalogsData, ListAdCatalogsError, ListAdCatalogsResponse, ListAdCatalogProductSetsData, ListAdCatalogProductSetsError, ListAdCatalogProductSetsResponse, ListAdAudiencesData, ListAdAudiencesError, ListAdAudiencesResponse, CreateAdAudienceData, CreateAdAudienceError, CreateAdAudienceResponse, GetAdAudienceData, GetAdAudienceError, GetAdAudienceResponse, UpdateAdAudienceData, UpdateAdAudienceError, UpdateAdAudienceResponse, DeleteAdAudienceData, DeleteAdAudienceError, DeleteAdAudienceResponse, AddUsersToAdAudienceData, AddUsersToAdAudienceError, AddUsersToAdAudienceResponse, ReplaceAdAudienceCompaniesData, ReplaceAdAudienceCompaniesError, ReplaceAdAudienceCompaniesResponse, GetConversionsQualityData, GetConversionsQualityError, GetConversionsQualityResponse, SendConversionsData, SendConversionsError, SendConversionsResponse, AdjustConversionsData, AdjustConversionsError, AdjustConversionsResponse, ListConversionActionsData, ListConversionActionsError, ListConversionActionsResponse, CreateConversionActionData, CreateConversionActionError, CreateConversionActionResponse, ListConversionDestinationsData, ListConversionDestinationsError, ListConversionDestinationsResponse, CreateConversionDestinationData, CreateConversionDestinationError, CreateConversionDestinationResponse, GetConversionDestinationData, GetConversionDestinationError, GetConversionDestinationResponse, UpdateConversionDestinationData, UpdateConversionDestinationError, UpdateConversionDestinationResponse, DeleteConversionDestinationData, DeleteConversionDestinationError, DeleteConversionDestinationResponse, ListConversionAssociationsData, ListConversionAssociationsError, ListConversionAssociationsResponse, AddConversionAssociationsData, AddConversionAssociationsError, AddConversionAssociationsResponse, RemoveConversionAssociationsData, RemoveConversionAssociationsError, RemoveConversionAssociationsResponse, GetConversionMetricsData, GetConversionMetricsError, GetConversionMetricsResponse, ListWhatsAppConversionsData, ListWhatsAppConversionsError, ListWhatsAppConversionsResponse, SendWhatsAppConversionData, SendWhatsAppConversionError, SendWhatsAppConversionResponse, CreateMessagingAdData, CreateMessagingAdError, CreateMessagingAdResponse, CreateCallAdData, CreateCallAdError, CreateCallAdResponse, CreateCtwaAdData, CreateCtwaAdError, CreateCtwaAdResponse, ListCustomConversionsData, ListCustomConversionsError, ListCustomConversionsResponse, CreateCustomConversionData, CreateCustomConversionError, CreateCustomConversionResponse, GetBusinessAgentStatusData, GetBusinessAgentStatusError, GetBusinessAgentStatusResponse, OnboardBusinessAgentData, OnboardBusinessAgentError, OnboardBusinessAgentResponse, ListBusinessAgentSettingsData, ListBusinessAgentSettingsError, ListBusinessAgentSettingsResponse, UpdateBusinessAgentSettingsData, UpdateBusinessAgentSettingsError, UpdateBusinessAgentSettingsResponse, ListBusinessAgentAllowlistData, ListBusinessAgentAllowlistError, ListBusinessAgentAllowlistResponse, AddBusinessAgentAllowlistEntryData, AddBusinessAgentAllowlistEntryError, AddBusinessAgentAllowlistEntryResponse, RemoveBusinessAgentAllowlistEntryData, RemoveBusinessAgentAllowlistEntryError, RemoveBusinessAgentAllowlistEntryResponse, GetBusinessAgentBusinessInformationData, GetBusinessAgentBusinessInformationError, GetBusinessAgentBusinessInformationResponse, ReplaceBusinessAgentBusinessInformationData, ReplaceBusinessAgentBusinessInformationError, ReplaceBusinessAgentBusinessInformationResponse, ResetBusinessAgentBusinessInformationData, ResetBusinessAgentBusinessInformationError, ResetBusinessAgentBusinessInformationResponse, ListBusinessAgentFaqsData, ListBusinessAgentFaqsError, ListBusinessAgentFaqsResponse, CreateBusinessAgentFaqData, CreateBusinessAgentFaqError, CreateBusinessAgentFaqResponse, GetBusinessAgentFaqData, GetBusinessAgentFaqError, GetBusinessAgentFaqResponse, UpdateBusinessAgentFaqData, UpdateBusinessAgentFaqError, UpdateBusinessAgentFaqResponse, DeleteBusinessAgentFaqData, DeleteBusinessAgentFaqError, DeleteBusinessAgentFaqResponse, ListBusinessAgentWebsitesData, ListBusinessAgentWebsitesError, ListBusinessAgentWebsitesResponse, AddBusinessAgentWebsiteData, AddBusinessAgentWebsiteError, AddBusinessAgentWebsiteResponse, GetBusinessAgentWebsiteData, GetBusinessAgentWebsiteError, GetBusinessAgentWebsiteResponse, UpdateBusinessAgentWebsiteData, UpdateBusinessAgentWebsiteError, UpdateBusinessAgentWebsiteResponse, DeleteBusinessAgentWebsiteData, DeleteBusinessAgentWebsiteError, DeleteBusinessAgentWebsiteResponse, ListBusinessAgentFilesData, ListBusinessAgentFilesError, ListBusinessAgentFilesResponse, UploadBusinessAgentFileData, UploadBusinessAgentFileError, UploadBusinessAgentFileResponse, GetBusinessAgentFileData, GetBusinessAgentFileError, GetBusinessAgentFileResponse, DeleteBusinessAgentFileData, DeleteBusinessAgentFileError, DeleteBusinessAgentFileResponse, ListBusinessAgentSkillsData, ListBusinessAgentSkillsError, ListBusinessAgentSkillsResponse, CreateBusinessAgentSkillData, CreateBusinessAgentSkillError, CreateBusinessAgentSkillResponse, GetBusinessAgentSkillData, GetBusinessAgentSkillError, GetBusinessAgentSkillResponse, UpdateBusinessAgentSkillData, UpdateBusinessAgentSkillError, UpdateBusinessAgentSkillResponse, DeleteBusinessAgentSkillData, DeleteBusinessAgentSkillError, DeleteBusinessAgentSkillResponse, ListBusinessAgentUiSkillsData, ListBusinessAgentUiSkillsError, ListBusinessAgentUiSkillsResponse, CreateBusinessAgentUiSkillData, CreateBusinessAgentUiSkillError, CreateBusinessAgentUiSkillResponse, GetBusinessAgentUiSkillData, GetBusinessAgentUiSkillError, GetBusinessAgentUiSkillResponse, UpdateBusinessAgentUiSkillData, UpdateBusinessAgentUiSkillError, UpdateBusinessAgentUiSkillResponse, DeleteBusinessAgentUiSkillData, DeleteBusinessAgentUiSkillError, DeleteBusinessAgentUiSkillResponse, ListBusinessAgentConnectorsData, ListBusinessAgentConnectorsError, ListBusinessAgentConnectorsResponse, CreateBusinessAgentConnectorData, CreateBusinessAgentConnectorError, CreateBusinessAgentConnectorResponse, GetBusinessAgentConnectorData, GetBusinessAgentConnectorError, GetBusinessAgentConnectorResponse, UpdateBusinessAgentConnectorData, UpdateBusinessAgentConnectorError, UpdateBusinessAgentConnectorResponse, DeleteBusinessAgentConnectorData, DeleteBusinessAgentConnectorError, DeleteBusinessAgentConnectorResponse, SetBusinessAgentConnectorCredentialsData, SetBusinessAgentConnectorCredentialsError, SetBusinessAgentConnectorCredentialsResponse, RefreshBusinessAgentConnectorToolsData, RefreshBusinessAgentConnectorToolsError, RefreshBusinessAgentConnectorToolsResponse, GetBusinessAgentConnectorLogsData, GetBusinessAgentConnectorLogsError, GetBusinessAgentConnectorLogsResponse, ListBusinessAgentConnectorToolsData, ListBusinessAgentConnectorToolsError, ListBusinessAgentConnectorToolsResponse, CreateBusinessAgentConnectorToolData, CreateBusinessAgentConnectorToolError, CreateBusinessAgentConnectorToolResponse, GetBusinessAgentConnectorToolData, GetBusinessAgentConnectorToolError, GetBusinessAgentConnectorToolResponse, UpdateBusinessAgentConnectorToolData, UpdateBusinessAgentConnectorToolError, UpdateBusinessAgentConnectorToolResponse, DeleteBusinessAgentConnectorToolData, DeleteBusinessAgentConnectorToolError, DeleteBusinessAgentConnectorToolResponse, RunBusinessAgentConnectorToolData, RunBusinessAgentConnectorToolError, RunBusinessAgentConnectorToolResponse, GetBusinessAgentBudgetData, GetBusinessAgentBudgetError, GetBusinessAgentBudgetResponse, ReplaceBusinessAgentBudgetData, ReplaceBusinessAgentBudgetError, ReplaceBusinessAgentBudgetResponse, SendBusinessAgentTestMessageData, SendBusinessAgentTestMessageError, SendBusinessAgentTestMessageResponse, SendBusinessAgentEventData, SendBusinessAgentEventError, SendBusinessAgentEventResponse, GetBusinessAgentEventData, GetBusinessAgentEventError, GetBusinessAgentEventResponse, ReadBusinessAgentEvalsData, ReadBusinessAgentEvalsError, ReadBusinessAgentEvalsResponse, StartBusinessAgentEvalRunData, StartBusinessAgentEvalRunError, StartBusinessAgentEvalRunResponse, ListTrackingTagsData, ListTrackingTagsError, ListTrackingTagsResponse, CreateTrackingTagData, CreateTrackingTagError, CreateTrackingTagResponse, GetTrackingTagData, GetTrackingTagError, GetTrackingTagResponse, UpdateTrackingTagData, UpdateTrackingTagError, UpdateTrackingTagResponse, ListTrackingTagSharedAccountsData, ListTrackingTagSharedAccountsError, ListTrackingTagSharedAccountsResponse, AddTrackingTagSharedAccountData, AddTrackingTagSharedAccountError, AddTrackingTagSharedAccountResponse, RemoveTrackingTagSharedAccountData, RemoveTrackingTagSharedAccountError, RemoveTrackingTagSharedAccountResponse, GetTrackingTagStatsData, GetTrackingTagStatsError, GetTrackingTagStatsResponse, ListBlogsData, ListBlogsError, ListBlogsResponse, CreateBlogData, CreateBlogError, CreateBlogResponse, GetBlogData, GetBlogError, GetBlogResponse, UpdateBlogData, UpdateBlogError, UpdateBlogResponse, DeleteBlogData, DeleteBlogError, DeleteBlogResponse, ListBlogArticlesData, ListBlogArticlesError, ListBlogArticlesResponse, CreateBlogArticleData, CreateBlogArticleError, CreateBlogArticleResponse, GetBlogArticleData, GetBlogArticleError, GetBlogArticleResponse, UpdateBlogArticleData, UpdateBlogArticleError, UpdateBlogArticleResponse, DeleteBlogArticleData, DeleteBlogArticleError, DeleteBlogArticleResponse, CreateVerificationData, CreateVerificationError, CreateVerificationResponse, GetVerificationData, GetVerificationError, GetVerificationResponse, CheckVerificationData, CheckVerificationError, CheckVerificationResponse } from './types.gen';
5
5
 
6
6
  export const client = createClient(createConfig());
7
7
 
@@ -9,11 +9,11 @@ export const client = createClient(createConfig());
9
9
  * Validate character count
10
10
  * Check weighted character count per platform and whether the text is within each platform's limit.
11
11
  *
12
- * Twitter/X uses weighted counting (URLs = 23 chars via t.co, emojis = 2 chars). All other platforms use plain character length.
12
+ * X uses weighted counting (URLs = 23 chars via t.co, emojis = 2 chars). All other platforms use plain character length.
13
13
  *
14
14
  * Returns counts and limits for all 15 supported platform variants.
15
15
  *
16
- * X (Twitter) returns two rows and this endpoint cannot tell you which one applies to you: it takes only `text`, so it never resolves an account. `twitter` (280) is the free tier limit. `twitterPremium` (25000) applies only when the target X account has a paid X subscription, and publishing enforces 280 instead for any post carrying a poll (this endpoint has no poll input, so the `twitterPremium` row always shows 25000). A free account trusting the `twitterPremium` row can pass validation here and still fail at publish time, where the account's real limit is enforced.
16
+ * X returns two rows and this endpoint cannot tell you which one applies to you: it takes only `text`, so it never resolves an account. `twitter` (280) is the free tier limit. `twitterPremium` (25000) applies only when the target X account has a paid X subscription, and publishing enforces 280 instead for any post carrying a poll (this endpoint has no poll input, so the `twitterPremium` row always shows 25000). A free account trusting the `twitterPremium` row can pass validation here and still fail at publish time, where the account's real limit is enforced.
17
17
  *
18
18
  * To validate against the per-account limit, use `POST /v1/tools/validate/post` instead: it accepts an `accountId` per platform entry, resolves X Premium status, and checks the text against the limit publishing enforces, including the poll cap. A missing, foreign, or invalid `accountId` falls back to the conservative 280.
19
19
  *
@@ -122,7 +122,7 @@ export const getAnalytics = <ThrowOnError extends boolean = false>(options?: Opt
122
122
  * behind a cursor you have already advanced past. A read issued the instant an
123
123
  * `analytics.synced` webhook lands will therefore often return an empty page for
124
124
  * that account. Do not read an empty page as "nothing changed": poll again with the
125
- * SAME cursor you just used rather than advancing.
125
+ * SAME cursor you last used rather than advancing.
126
126
  *
127
127
  * **Repeats inside one instant.** A sync cycle occasionally records the same post
128
128
  * twice at the same feed position. When that happens the feed delivers one of those
@@ -464,7 +464,7 @@ export const getPostTimeline = <ThrowOnError extends boolean = false>(options: O
464
464
  };
465
465
 
466
466
  /**
467
- * Get GBP performance metrics
467
+ * Get Google Business Profile performance metrics
468
468
  * Returns daily performance metrics for a Google Business Profile location.
469
469
  * Metrics include impressions (Maps/Search, desktop/mobile), website clicks,
470
470
  * call clicks, direction requests, conversations, bookings, and food orders.
@@ -480,7 +480,7 @@ export const getGoogleBusinessPerformance = <ThrowOnError extends boolean = fals
480
480
  };
481
481
 
482
482
  /**
483
- * Get GBP search keywords
483
+ * Get Google Business Profile search keywords
484
484
  * Returns search keywords that triggered impressions for a Google Business Profile location.
485
485
  * Data is aggregated monthly. Keywords below a minimum impression threshold set by Google are excluded.
486
486
  * Max 18 months of historical data. Requires the Analytics add-on.
@@ -511,7 +511,7 @@ export const getInboxVolume = <ThrowOnError extends boolean = false>(options: Op
511
511
  /**
512
512
  * Get day × hour heatmap
513
513
  * Day-of-week × hour-of-day breakdown of inbox messages. Buckets are
514
- * sparse — only cells with at least one event are returned; clients
514
+ * sparse: only cells with at least one event are returned; clients
515
515
  * zero-fill the rest to render the full 7×24 grid. The `dow` field
516
516
  * follows ClickHouse's `toDayOfWeek` convention (1 = Monday … 7 =
517
517
  * Sunday). Max date range is 365 days.
@@ -548,7 +548,7 @@ export const getInboxSourceBreakdown = <ThrowOnError extends boolean = false>(op
548
548
  * for the analytics page's TTR chart.
549
549
  *
550
550
  * `sampleSize` reflects only conversations that received AND got a
551
- * reply in the window — received-but-never-answered conversations
551
+ * reply in the window. Received-but-never-answered conversations
552
552
  * are excluded. Compare against /v1/analytics/inbox/volume's
553
553
  * `summary.received` to compute reply rate.
554
554
  *
@@ -564,9 +564,9 @@ export const getInboxResponseTime = <ThrowOnError extends boolean = false>(optio
564
564
 
565
565
  /**
566
566
  * Get top accounts by inbox volume
567
- * Leaderboard of social accounts by inbox message volume. Decorates
567
+ * Leaderboard of accounts by inbox message volume. Decorates
568
568
  * each row with display labels from the live SocialAccount record
569
- * (so the UI shows username + displayName, not just an ID). Accounts
569
+ * (so the UI shows username + displayName, not only an ID). Accounts
570
570
  * that no longer map to a SocialAccount surface as "(disconnected)"
571
571
  * so the row stays visible. Max date range is 365 days.
572
572
  *
@@ -581,7 +581,7 @@ export const getInboxTopAccounts = <ThrowOnError extends boolean = false>(option
581
581
  /**
582
582
  * List conversation analytics
583
583
  * Per-conversation listing with per-row totals + first/last message
584
- * timestamps. The inbox analog of GET /v1/analytics (posts listing) —
584
+ * timestamps. The inbox analog of GET /v1/analytics (posts listing):
585
585
  * same filter shape, same pagination, same sort/order semantics.
586
586
  * Use as the entry point for the per-conversation analytics drawer
587
587
  * at /v1/analytics/inbox/conversations/{conversationId}.
@@ -602,7 +602,7 @@ export const listInboxConversationAnalytics = <ThrowOnError extends boolean = fa
602
602
  /**
603
603
  * Get conversation analytics
604
604
  * Per-conversation inbox analytics. The inbox analog of
605
- * /v1/analytics/post-timeline — one conversation, daily totals,
605
+ * /v1/analytics/post-timeline: one conversation, daily totals,
606
606
  * source mix.
607
607
  *
608
608
  * The {conversationId} path param accepts EITHER the Mongo `_id` of
@@ -638,7 +638,7 @@ export const listAccountGroups = <ThrowOnError extends boolean = false>(options?
638
638
 
639
639
  /**
640
640
  * Create group
641
- * Creates a new account group with a name and a list of social account IDs.
641
+ * Creates a new account group with a name and a list of account IDs.
642
642
  * Accounts can belong to different profiles; the caller must have access to
643
643
  * every account's profile. Group names must be unique per user.
644
644
  *
@@ -710,10 +710,10 @@ export const getRedditFeed = <ThrowOnError extends boolean = false>(options: Opt
710
710
  * The billing "wallet/statement" view: current plan, billing cycle,
711
711
  * accrued balance + remaining credits this period, spend caps, and
712
712
  * payment / access status. This is the billing half of the legacy
713
- * `/v1/usage-stats` snapshot — the per-product consumption half is metering
713
+ * `/v1/usage-stats` snapshot. The per-product consumption half is metering
714
714
  * and lives on `GET /v1/usage`.
715
715
  *
716
- * Usage-based (Metronome) accounts get a populated `balance`; legacy Stripe
716
+ * Accounts on usage-based billing get a populated `balance`; legacy Stripe
717
717
  * accounts get `balance: null` plus a deprecated `legacy.limits` block and,
718
718
  * when payment-blocked, `status.openInvoiceUrl` / `status.declineReason`.
719
719
  *
@@ -726,16 +726,16 @@ export const getBilling = <ThrowOnError extends boolean = false>(options?: Optio
726
726
  };
727
727
 
728
728
  /**
729
- * Get X/Twitter API pricing table
730
- * Returns Zernio's canonical X/Twitter API pricing table. Each X action has its
731
- * own Metronome product and its own rate, and Zernio passes X API costs through
729
+ * Get X API pricing table
730
+ * Returns Zernio's canonical X API pricing table. Each X action has its
731
+ * own billing product and its own rate, and Zernio passes X API costs through
732
732
  * at exact rates with zero markup.
733
733
  *
734
734
  * The response is identical for every authenticated user (pricing is universal),
735
735
  * so it is safe to cache on the client for the duration of a billing period.
736
736
  *
737
737
  * To compute your own per-operation spend, pair this endpoint with
738
- * `GET /v1/usage-stats` — that endpoint returns `usage.xApiCallsByOperation`
738
+ * `GET /v1/usage-stats`, which returns `usage.xApiCallsByOperation`
739
739
  * keyed by the same `operation` field you get here.
740
740
  *
741
741
  */
@@ -748,20 +748,20 @@ export const getXApiPricing = <ThrowOnError extends boolean = false>(options?: O
748
748
 
749
749
  /**
750
750
  * Usage snapshot (default) or billed-spend metering (with params)
751
- * Dual-mode endpoint, selected by query params — fully backward
751
+ * Dual-mode endpoint, selected by query params, and fully backward
752
752
  * compatible:
753
753
  *
754
754
  * **Without metering params (the default):** the plan / quota / usage
755
- * snapshot — plan name, billing period, limits, usage counts, access
755
+ * snapshot: plan name, billing period, limits, usage counts, access
756
756
  * state. Identical to `GET /v1/usage-stats`. Existing integrations keep
757
757
  * working unchanged.
758
758
  *
759
- * **With `range`, `granularity`, `from`, or `to`:** usage METERING —
759
+ * **With `range`, `granularity`, `from`, or `to`:** usage METERING:
760
760
  * billed spend (USD) by product family (`accounts`, `numbers`, `calls`,
761
761
  * `sms`, `dlc`, `xApi`, `credits`, `other`) over the window, at
762
- * `day` / `month` / `total` granularity, from Metronome's invoice
763
- * breakdown (the CHARGE view — always reconciles with what gets billed).
764
- * Also served at `GET /v1/usage/daily`. Usage-based accounts only —
762
+ * `day` / `month` / `total` granularity, from the usage-based invoice
763
+ * breakdown (the CHARGE view, which always reconciles with what gets billed).
764
+ * Also served at `GET /v1/usage/daily`. Usage-based accounts only:
765
765
  * legacy Stripe accounts get `{ "supported": false, "days": [] }`.
766
766
  *
767
767
  * **Attribution (metering mode):** `groupBy=profile|account` adds an
@@ -770,7 +770,7 @@ export const getXApiPricing = <ThrowOnError extends boolean = false>(options?: O
770
770
  * `sum(groups) + unattributed` equals `totals` exactly. `profileId` /
771
771
  * `accountId` instead project the whole payload (`days`, `totals`,
772
772
  * `lineItems`) onto that one group; `peaks`, `callUsage` and `tax` are
773
- * then `null` (workspace-level facts). Projected `days` spread the
773
+ * then `null` (team-level facts). Projected `days` spread the
774
774
  * group's period share over each day (usage is attributed per period,
775
775
  * not per day). Profile-scoped API keys and members only see their
776
776
  * profiles' groups (`attribution.restricted: true`, with `totals`
@@ -802,13 +802,13 @@ export const getUsage = <ThrowOnError extends boolean = false>(options?: Options
802
802
  *
803
803
  * The response shape depends on the account's `billingSystem`:
804
804
  * * Stripe users: per-period `usage.uploads` / `usage.profiles` counters.
805
- * * Metronome (usage-based) users: `usage.connectedAccounts`,
806
- * `usage.xApiCallsByOperation` (per-operation X API call counts —
805
+ * * Usage-based billing users: `usage.connectedAccounts`,
806
+ * `usage.xApiCallsByOperation` (per-operation X API call counts;
807
807
  * resolve keys via `GET /v1/billing/x-pricing`), plus a `spend`
808
808
  * block with `currentPeriodCents`, `xSpendCents`, and
809
809
  * `xSpendLimitCents`. The legacy `usage.xApiCalls` 3-tier
810
810
  * aggregate is still emitted for back-compat but excludes the
811
- * $0.200 URL tier and any future tiers — new clients should
811
+ * $0.200 URL tier and any future tiers, so new clients should
812
812
  * consume `xApiCallsByOperation` only.
813
813
  *
814
814
  */
@@ -873,26 +873,47 @@ export const listPosts = <ThrowOnError extends boolean = false>(options?: Option
873
873
 
874
874
  /**
875
875
  * Create post
876
- * Create and optionally publish a post. Immediate posts (`publishNow: true`) include `platformPostUrl` in the response.
877
- * Content is optional when media is attached, all platforms have `customContent`, every platform entry is an X Article (`platformSpecificData.article`), or every platform entry is a LinkedIn text-free reshare (`platformSpecificData.reshareUrl` with no text). See each platform's schema for media constraints.
876
+ * Create a post, and optionally publish it in the same request. A post published immediately (`publishNow: true`) comes back with `platformPostUrl` in the response.
877
+ *
878
+ * `content` is optional in four cases:
879
+ *
880
+ * - media is attached
881
+ * - all platforms have `customContent`
882
+ * - every platform entry is an X Article (`platformSpecificData.article`)
883
+ * - every platform entry is a LinkedIn text-free reshare (`platformSpecificData.reshareUrl` with no text)
884
+ *
885
+ * See each platform's schema for media constraints.
878
886
  *
879
887
  * ## Scheduling
880
888
  *
881
- * Pick one of `scheduledFor` (schedule), `publishNow: true` (publish synchronously) or `queuedFromProfile` (next queue slot). With none of them and `isDraft` unset, the post is saved as a draft. `platforms` is required unless the post is a draft. `isDraft: true` wins over `publishNow` and `scheduledFor` (the post is saved, never published); `publishNow: true` wins over `scheduledFor`. A `scheduledFor` already in the past is not rejected: the post is published synchronously in the same request, exactly like `publishNow`.
889
+ * Pick one of:
890
+ *
891
+ * - `scheduledFor`: publish at the scheduled time
892
+ * - `publishNow: true`: publish synchronously, inside this request
893
+ * - `queuedFromProfile`: publish in the profile's next queue slot
894
+ *
895
+ * With none of them and `isDraft` unset, the post is saved as a draft. `platforms` is required unless the post is a draft.
896
+ *
897
+ * Precedence: `isDraft: true` wins over `publishNow` and `scheduledFor` (the post is saved, never published), and `publishNow: true` wins over `scheduledFor`. A `scheduledFor` already in the past is not rejected: the post is published synchronously in the same request, exactly like `publishNow`.
882
898
  *
883
899
  * ## Idempotency
884
900
  *
885
901
  * Two layers of duplicate-protection apply, so safe-to-retry callers (network blips, n8n / Zapier retries, etc.) don't accidentally double-post.
886
902
  *
887
903
  * **1. Same-request idempotency (5-minute window).**
888
- * Pass an `x-request-id` header to mark a logical request. If a second request arrives with the same `x-request-id` while the first is in-flight (or within ~5 minutes of completion), we return **HTTP 200** with the original post in the `existingPost` field — no new post is created. The official Zernio SDKs auto-generate a unique `x-request-id` per call. If you're using a generic HTTP client (curl, n8n's HTTP node, Zapier, custom code), either:
889
- * - Set a unique `x-request-id` per logical call (recommended — UUIDv4 is fine)
890
- * - Or simply omit the header — we'll treat each request as new
904
+ * Pass an `x-request-id` header to mark a logical request. If a second request arrives with the same `x-request-id` while the first is in-flight (or within ~5 minutes of completion), we return **HTTP 200** with the original post in the `existingPost` field, and no new post is created.
905
+ *
906
+ * The official Zernio SDKs auto-generate a unique `x-request-id` per call. On a generic HTTP client (curl, n8n's HTTP node, Zapier, custom code), either:
907
+ *
908
+ * - Set a unique `x-request-id` per logical call (recommended, UUIDv4 is fine)
909
+ * - Or omit the header, and we'll treat each request as new
891
910
  *
892
911
  * **Common pitfall**: if your workflow tool uses a single execution-level request ID and reuses it across multiple HTTP nodes (e.g. one ID for the whole run, shared across 6 different platform calls), every call after the first will look like a retry of the first and return its post. Generate a fresh ID per node.
893
912
  *
894
913
  * **2. Content-hash dedup (24-hour window).**
895
- * Independently, we hash `(platform, accountId, content + media URLs)` and reject duplicates within 24 hours with **HTTP 409**. This catches genuine "same content posted twice to the same account" cases regardless of `x-request-id`. Returns `error`, `accountId`, `platform`, and `existingPostId` so you can find the original. To intentionally re-post identical content within 24h, change something (the caption, the media, the account) — the dedup is keyed on the full content fingerprint.
914
+ * Independently, we hash `(platform, accountId, content + media URLs)` and reject duplicates within 24 hours with **HTTP 409**. This catches genuine "same content posted twice to the same account" cases regardless of `x-request-id`. The response carries `error`, `accountId`, `platform`, and `existingPostId` so you can find the original.
915
+ *
916
+ * To intentionally re-post identical content within 24h, change something (the caption, the media, the account), because the dedup is keyed on the full content fingerprint.
896
917
  *
897
918
  * Order: same-`x-request-id` retries (200) are checked first; if no idempotency match, the content-hash dedup (409) runs.
898
919
  *
@@ -906,16 +927,16 @@ export const createPost = <ThrowOnError extends boolean = false>(options: Option
906
927
 
907
928
  /**
908
929
  * Sync an external post
909
- * Fetch an account's latest external posts (published directly on the platform, not through Zernio) on demand, so a just-published post is retrievable within seconds instead of waiting for the background sync (which refreshes each account at most every ~90 minutes).
930
+ * Fetch an account's latest external posts (published directly on the platform, not through Zernio) on demand, so a newly published post is retrievable within seconds instead of waiting for the background sync (which refreshes each account at most every ~90 minutes).
910
931
  *
911
932
  * Primary use case: verifying a submitted post. When a user publishes on the platform and immediately pastes the post URL into your app, call this with `accountId` plus `url` (or `postId`) to confirm the post exists and return its metadata.
912
933
  *
913
934
  * Behavior:
914
935
  * - We check our stored copy first and return immediately if the post is already known (no platform call).
915
936
  * - Otherwise we fetch the account's latest posts live from the platform, then match and return the submitted post.
916
- * - Requests are debounced per account (~15s): if the account was just synced, the live fetch is skipped.
937
+ * - Requests are debounced per account (~15s): if the account was synced inside that window, the live fetch is skipped.
917
938
  *
918
- * `accountId` is required — a post URL or id alone cannot be resolved to an account, and the account must be connected to Zernio (we use its token to read the platform). Supported for every platform with a listing API (Instagram, Facebook, TikTok, YouTube, X, Threads, Pinterest, Reddit, Bluesky, Google Business, and LinkedIn organization accounts).
939
+ * `accountId` is required, because a post URL or id alone cannot be resolved to an account, and the account must be connected to Zernio (we use its token to read the platform). Supported for every platform with a listing API (Instagram, Facebook, TikTok, YouTube, X, Threads, Pinterest, Reddit, Bluesky, Google Business Profile, and LinkedIn organization accounts).
919
940
  *
920
941
  * LinkedIn personal profiles: LinkedIn has no listing API for personal profiles, so a `url` is REQUIRED and imports that single post. Pass any LinkedIn post URL (`linkedin.com/posts/…`, `linkedin.com/feed/update/urn:li:activity:…`) or a `urn:li:share:…` / `urn:li:ugcPost:…` URN. Works for posts published outside Zernio and before the account was connected, any age; the post must be authored by the connected member. Imported posts return full analytics (impressions, reach, reactions, comments, reshares, saves) and keep refreshing on the background analytics cycle, but carry no content/media (LinkedIn does not expose them for personal profiles).
921
942
  *
@@ -1035,13 +1056,13 @@ export const unpublishPost = <ThrowOnError extends boolean = false>(options: Opt
1035
1056
 
1036
1057
  /**
1037
1058
  * Edit published post
1038
- * Edit the text of an already-published post. Supported on X (Twitter), Discord,
1059
+ * Edit the text of an already-published post. Supported on X, Discord,
1039
1060
  * Facebook, Reddit, LinkedIn, Telegram, Pinterest, Google Business Profile, YouTube,
1040
1061
  * and Slack. When a post was published to several accounts on the same platform,
1041
1062
  * pass `accountId` to pick which account's copy to edit (the first entry is edited
1042
1063
  * otherwise). Each platform enforces its own rules:
1043
1064
  *
1044
- * **X (Twitter)**
1065
+ * **X**
1045
1066
  * - Connected X account must have an active X Premium subscription
1046
1067
  * - Must be within 1 hour of original publish time
1047
1068
  * - Maximum 5 edits per tweet (enforced by X)
@@ -1127,7 +1148,7 @@ export const editPost = <ThrowOnError extends boolean = false>(options: OptionsL
1127
1148
  *
1128
1149
  * 1. Post-based (video published through Zernio): pass the Zernio postId in the URL and platform in the body.
1129
1150
  * 2. Direct video ID (video uploaded outside Zernio, e.g. directly to YouTube): use _ as the postId,
1130
- * and pass videoId + accountId + platform in the body. The accountId is the Zernio social account ID
1151
+ * and pass videoId + accountId + platform in the body. The accountId is the Zernio account ID
1131
1152
  * for the connected YouTube channel.
1132
1153
  *
1133
1154
  */
@@ -1140,7 +1161,7 @@ export const updatePostMetadata = <ThrowOnError extends boolean = false>(options
1140
1161
 
1141
1162
  /**
1142
1163
  * List users
1143
- * Returns all users in the workspace including roles and profile access. Also returns the currentUserId of the caller.
1164
+ * Returns all users in the team including roles and profile access. Also returns the currentUserId of the caller.
1144
1165
  */
1145
1166
  export const listUsers = <ThrowOnError extends boolean = false>(options?: OptionsLegacyParser<unknown, ThrowOnError>) => {
1146
1167
  return (options?.client ?? client).get<ListUsersResponse, ListUsersError, ThrowOnError>({
@@ -1173,7 +1194,7 @@ export const listProfiles = <ThrowOnError extends boolean = false>(options?: Opt
1173
1194
 
1174
1195
  /**
1175
1196
  * Create profile
1176
- * Creates a new profile with a name, optional description, and color. Names are unique per workspace: a duplicate returns a 409 whose details.existingProfileId carries the id of the existing profile. Send an Idempotency-Key header to make retries safe: a retried create with the same key and body replays the original 201 (same _id) instead of conflicting.
1197
+ * Creates a new profile with a name, optional description, and color. Names are unique per team: a duplicate returns a 409 whose details.existingProfileId carries the id of the existing profile. Send an Idempotency-Key header to make retries safe: a retried create with the same key and body replays the original 201 (same _id) instead of conflicting.
1177
1198
  */
1178
1199
  export const createProfile = <ThrowOnError extends boolean = false>(options: OptionsLegacyParser<CreateProfileData, ThrowOnError>) => {
1179
1200
  return (options?.client ?? client).post<CreateProfileResponse, CreateProfileError, ThrowOnError>({
@@ -1217,7 +1238,7 @@ export const deleteProfile = <ThrowOnError extends boolean = false>(options: Opt
1217
1238
 
1218
1239
  /**
1219
1240
  * List accounts
1220
- * Returns connected social accounts. Only includes accounts within the plan limit by default. Follower data requires analytics add-on.
1241
+ * Returns connected accounts. Only includes accounts within the plan limit by default. Follower data requires analytics add-on.
1221
1242
  * Supports optional server-side pagination via page/limit params. When omitted, returns all accounts (backward-compatible).
1222
1243
  * page and limit must be supplied together; out-of-range page/limit values are rejected with 400 rather than silently clamped.
1223
1244
  *
@@ -1231,7 +1252,7 @@ export const listAccounts = <ThrowOnError extends boolean = false>(options?: Opt
1231
1252
 
1232
1253
  /**
1233
1254
  * Get follower stats
1234
- * Returns follower count history and growth metrics for connected social accounts.
1255
+ * Returns follower count history and growth metrics for connected accounts.
1235
1256
  * Requires analytics add-on subscription. Follower counts are refreshed once per day.
1236
1257
  *
1237
1258
  */
@@ -1244,11 +1265,11 @@ export const getFollowerStats = <ThrowOnError extends boolean = false>(options?:
1244
1265
 
1245
1266
  /**
1246
1267
  * Update account
1247
- * Updates a connected social account's display name or username override.
1268
+ * Updates a connected account's display name or username override.
1248
1269
  *
1249
- * For X/Twitter accounts on usage-based billing, also accepts an `xCapabilities`
1270
+ * For X accounts on usage-based billing, also accepts an `xCapabilities`
1250
1271
  * object to toggle background API operations that incur X API pass-through costs.
1251
- * Both fields are opt-in (default `false`) — when off, no analytics syncs or DM
1272
+ * Both fields are opt-in (default `false`). When off, no analytics syncs or DM
1252
1273
  * polling are performed for that account, and no API call is metered for those
1253
1274
  * operations. Publishing and deleting posts are always available regardless of
1254
1275
  * these toggles. Setting `xCapabilities` on a non-X account returns 400.
@@ -1263,7 +1284,7 @@ export const updateAccount = <ThrowOnError extends boolean = false>(options: Opt
1263
1284
 
1264
1285
  /**
1265
1286
  * Move account to another profile
1266
- * Moves a connected social account to a different profile owned by the same
1287
+ * Moves a connected account to a different profile owned by the same
1267
1288
  * user. The target profile must belong to the same user as the account.
1268
1289
  *
1269
1290
  * For API keys restricted to specific profiles, BOTH the source account's
@@ -1280,7 +1301,7 @@ export const moveAccountToProfile = <ThrowOnError extends boolean = false>(optio
1280
1301
 
1281
1302
  /**
1282
1303
  * Disconnect account
1283
- * Disconnects and removes a connected social account. Repeating the call for an account already disconnected returns 404, the account stays in its 1h grace window and the disconnect is not re-run.
1304
+ * Disconnects and removes a connected account. Repeating the call for an account already disconnected returns 404, the account stays in its 1h grace window and the disconnect is not re-run.
1284
1305
  */
1285
1306
  export const deleteAccount = <ThrowOnError extends boolean = false>(options: OptionsLegacyParser<DeleteAccountData, ThrowOnError>) => {
1286
1307
  return (options?.client ?? client).delete<DeleteAccountResponse, DeleteAccountError, ThrowOnError>({
@@ -1316,6 +1337,37 @@ export const registerWhatsAppNumber = <ThrowOnError extends boolean = false>(opt
1316
1337
  });
1317
1338
  };
1318
1339
 
1340
+ /**
1341
+ * Request a Meta re-verification code for a BYO WhatsApp number
1342
+ * For a bring-your-own WhatsApp number (its own WABA, migrated off another BSP) that
1343
+ * Meta demoted to re-verification, this requests a new OTP from Meta. The code lands
1344
+ * on the customer's own handset, so verifying it is necessarily self-service; call
1345
+ * POST /v1/accounts/{accountId}/whatsapp/verify-code with the code once it arrives.
1346
+ * Rate-limited to one request per 10 minutes per account, and Meta enforces its own
1347
+ * cooldown on top of that.
1348
+ *
1349
+ */
1350
+ export const requestWhatsAppVerificationCode = <ThrowOnError extends boolean = false>(options: OptionsLegacyParser<RequestWhatsAppVerificationCodeData, ThrowOnError>) => {
1351
+ return (options?.client ?? client).post<RequestWhatsAppVerificationCodeResponse, RequestWhatsAppVerificationCodeError, ThrowOnError>({
1352
+ ...options,
1353
+ url: '/v1/accounts/{accountId}/whatsapp/request-code'
1354
+ });
1355
+ };
1356
+
1357
+ /**
1358
+ * Verify the Meta re-verification code for a BYO WhatsApp number
1359
+ * Submits the OTP Meta sent in response to POST /v1/accounts/{accountId}/whatsapp/request-code.
1360
+ * This only verifies the number with Meta; it does not register it on the Cloud API.
1361
+ * Call POST /v1/accounts/{accountId}/whatsapp/register afterward to complete activation.
1362
+ *
1363
+ */
1364
+ export const verifyWhatsAppNumber = <ThrowOnError extends boolean = false>(options: OptionsLegacyParser<VerifyWhatsAppNumberData, ThrowOnError>) => {
1365
+ return (options?.client ?? client).post<VerifyWhatsAppNumberResponse, VerifyWhatsAppNumberError, ThrowOnError>({
1366
+ ...options,
1367
+ url: '/v1/accounts/{accountId}/whatsapp/verify-code'
1368
+ });
1369
+ };
1370
+
1319
1371
  /**
1320
1372
  * Check account health
1321
1373
  * Returns detailed health info for a specific account including token status, permissions, and recommendations.
@@ -1522,7 +1574,7 @@ export const getConnectUrl = <ThrowOnError extends boolean = false>(options: Opt
1522
1574
  * Complete OAuth callback
1523
1575
  * Exchange the OAuth authorization code for tokens and connect the account to the specified profile.
1524
1576
  *
1525
- * Facebook, Google Business, Snapchat and WhatsApp are not accepted here: their account identity is a destination chosen after OAuth, which this single-shot exchange cannot do. Connect them through the redirect flow from `GET /v1/connect/{platform}`, or, for WhatsApp Embedded Signup, through `POST /v1/connect/whatsapp/embedded-signup`.
1577
+ * Facebook, Google Business Profile, Snapchat and WhatsApp are not accepted here: their account identity is a destination chosen after OAuth, which this single-shot exchange cannot do. Connect them through the redirect flow from `GET /v1/connect/{platform}`, or, for WhatsApp Embedded Signup, through `POST /v1/connect/whatsapp/embedded-signup`.
1526
1578
  *
1527
1579
  */
1528
1580
  export const handleOAuthCallback = <ThrowOnError extends boolean = false>(options: OptionsLegacyParser<HandleOAuthCallbackData, ThrowOnError>) => {
@@ -1536,16 +1588,17 @@ export const handleOAuthCallback = <ThrowOnError extends boolean = false>(option
1536
1588
  * Connect ads for a platform
1537
1589
  * Unified ads connection endpoint. Creates a dedicated ads SocialAccount for the specified platform.
1538
1590
  *
1539
- * Same-token platforms (facebook, instagram, linkedin, pinterest): the ads SocialAccount
1591
+ * **Same-token platforms (facebook, instagram, linkedin, pinterest).** The ads SocialAccount
1540
1592
  * (metaads, linkedinads, pinterestads) reuses the OAuth token of the parent posting account,
1541
1593
  * but only when an active parent exists and, for facebook and instagram, its stored token
1542
1594
  * carries ads_management and ads_read (linkedin and pinterest need no extra scope). In that
1543
- * case no extra OAuth happens and the response is alreadyConnected: true. When no such parent
1544
- * exists, or the scopes are missing, the endpoint returns an authUrl and a full OAuth round
1545
- * trip is required. When a parent exists but carries no token usable for ad accounts, the call
1546
- * fails with 400 RECONNECT_REQUIRED. Independently of the branch, the call can return 403
1547
- * ADS_ADDON_REQUIRED without the ads add-on and 402 PAYMENT_REQUIRED when the billing gate is
1548
- * closed.
1595
+ * case no extra OAuth happens and the response is alreadyConnected: true.
1596
+ *
1597
+ * When no such parent exists, or the scopes are missing, the endpoint returns an authUrl and a
1598
+ * full OAuth round trip is required. When a parent exists but carries no token usable for ad
1599
+ * accounts, the call fails with 400 RECONNECT_REQUIRED. Independently of the branch, the call
1600
+ * can return 403 ADS_ADDON_REQUIRED without the ads add-on and 402 PAYMENT_REQUIRED when the
1601
+ * billing gate is closed.
1549
1602
  *
1550
1603
  * Meta Ads prerequisite: connecting Meta Ads (via facebook or instagram) requires a Facebook
1551
1604
  * Page. Not because the ad account is read through a Page, but because both parent posting
@@ -1555,11 +1608,15 @@ export const handleOAuthCallback = <ThrowOnError extends boolean = false>(option
1555
1608
  * Facebook Page cannot complete this connection, and the facebook flow ends with
1556
1609
  * error=no_facebook_pages.
1557
1610
  *
1558
- * Separate-token platforms (tiktok, twitter): Starts the platform-specific marketing API OAuth flow and creates an ads SocialAccount (tiktokads, xads) with its own token. If the ads account already exists, returns alreadyConnected: true.
1559
- * - tiktok: accountId is OPTIONAL. With accountId, the new tiktokads account links to that posting account (parentAccountId set) — Spark Ads + standalone ads using the posting TT_USER identity become available. Without accountId, ads-only mode kicks in: the new tiktokads account has parentAccountId=null and standalone ads use a synthetic CUSTOMIZED_USER ("Brand Identity"); Spark Ads are unavailable because TikTok requires a posting account for them. The Brand Identity is configured separately via PATCH /v1/connect/tiktok-ads (or inline on POST /v1/ads/create via the brandIdentity field).
1560
- * - twitter (X Ads): accountId is REQUIRED. There's no ads-only mode — tweets need to be authored by a real X user.
1611
+ * **Separate-token platforms (tiktok, twitter).** Starts the platform-specific marketing API
1612
+ * OAuth flow and creates an ads SocialAccount (tiktokads, xads) with its own token. If the ads
1613
+ * account already exists, returns alreadyConnected: true.
1614
+ * - tiktok: accountId is OPTIONAL. With accountId, the new tiktokads account links to that posting account (parentAccountId set), so Spark Ads + standalone ads using the posting TT_USER identity become available. Without accountId, ads-only mode kicks in: the new tiktokads account has parentAccountId=null and standalone ads use a synthetic CUSTOMIZED_USER ("Brand Identity"); Spark Ads are unavailable because TikTok requires a posting account for them. The Brand Identity is configured separately via PATCH /v1/connect/tiktok-ads (or inline on POST /v1/ads/create via the brandIdentity field).
1615
+ * - twitter (X Ads): accountId is REQUIRED. There's no ads-only mode, because tweets need to be authored by a real X user.
1561
1616
  *
1562
- * Standalone platforms (googleads): Starts the Google Ads OAuth flow and creates a standalone ads SocialAccount (googleads) with no parent. If the account already exists, returns alreadyConnected: true.
1617
+ * **Standalone platforms (googleads).** Starts the Google Ads OAuth flow and creates a
1618
+ * standalone ads SocialAccount (googleads) with no parent. If the account already exists,
1619
+ * returns alreadyConnected: true.
1563
1620
  *
1564
1621
  * Ads accounts appear as regular SocialAccount documents with ads platform values (e.g., metaads, tiktokads) in GET /v1/accounts.
1565
1622
  *
@@ -1697,8 +1754,8 @@ export const selectInstagramAccount = <ThrowOnError extends boolean = false>(opt
1697
1754
  };
1698
1755
 
1699
1756
  /**
1700
- * List GBP locations
1701
- * For headless flows. Returns the list of GBP locations the user can manage. Use pendingDataToken (from the OAuth callback redirect) to list locations without consuming the token, so it remains available for select-location. Use X-Connect-Token header if connecting via API key.
1757
+ * List Google Business Profile locations
1758
+ * For headless flows. Returns the list of Google Business Profile locations the user can manage. Use pendingDataToken (from the OAuth callback redirect) to list locations without consuming the token, so it remains available for select-location. Use X-Connect-Token header if connecting via API key.
1702
1759
  *
1703
1760
  */
1704
1761
  export const listGoogleBusinessLocations = <ThrowOnError extends boolean = false>(options?: OptionsLegacyParser<ListGoogleBusinessLocationsData, ThrowOnError>) => {
@@ -1709,8 +1766,8 @@ export const listGoogleBusinessLocations = <ThrowOnError extends boolean = false
1709
1766
  };
1710
1767
 
1711
1768
  /**
1712
- * Select GBP location
1713
- * Complete the headless GBP flow by saving the user's selected location. The pendingDataToken is returned in your redirect URL after OAuth completes (step=select_location). Tokens and profile data are stored server-side, so only the pendingDataToken is needed here. Use X-Connect-Token header if connecting via API key.
1769
+ * Select Google Business Profile location
1770
+ * Complete the headless Google Business Profile flow by saving the user's selected location. The pendingDataToken is returned in your redirect URL after OAuth completes (step=select_location). Tokens and profile data are stored server-side, so only the pendingDataToken is needed here. Use X-Connect-Token header if connecting via API key.
1714
1771
  *
1715
1772
  */
1716
1773
  export const selectGoogleBusinessLocation = <ThrowOnError extends boolean = false>(options: OptionsLegacyParser<SelectGoogleBusinessLocationData, ThrowOnError>) => {
@@ -1722,7 +1779,7 @@ export const selectGoogleBusinessLocation = <ThrowOnError extends boolean = fals
1722
1779
 
1723
1780
  /**
1724
1781
  * Get reviews
1725
- * Returns reviews for a GBP account including ratings, comments, and owner replies. Use nextPageToken for pagination.
1782
+ * Returns reviews for a Google Business Profile account including ratings, comments, and owner replies. Use nextPageToken for pagination.
1726
1783
  */
1727
1784
  export const getGoogleBusinessReviews = <ThrowOnError extends boolean = false>(options: OptionsLegacyParser<GetGoogleBusinessReviewsData, ThrowOnError>) => {
1728
1785
  return (options?.client ?? client).get<GetGoogleBusinessReviewsResponse, GetGoogleBusinessReviewsError, ThrowOnError>({
@@ -1777,7 +1834,7 @@ export const completeGoogleBusinessVerification = <ThrowOnError extends boolean
1777
1834
 
1778
1835
  /**
1779
1836
  * Get food menus
1780
- * Returns food menus for a GBP location including sections, items, pricing, and dietary info. Only for locations with food menu support.
1837
+ * Returns food menus for a Google Business Profile location including sections, items, pricing, and dietary info. Only for locations with food menu support.
1781
1838
  */
1782
1839
  export const getGoogleBusinessFoodMenus = <ThrowOnError extends boolean = false>(options: OptionsLegacyParser<GetGoogleBusinessFoodMenusData, ThrowOnError>) => {
1783
1840
  return (options?.client ?? client).get<GetGoogleBusinessFoodMenusResponse, GetGoogleBusinessFoodMenusError, ThrowOnError>({
@@ -1788,7 +1845,7 @@ export const getGoogleBusinessFoodMenus = <ThrowOnError extends boolean = false>
1788
1845
 
1789
1846
  /**
1790
1847
  * Update food menus
1791
- * Updates food menus for a GBP location. Send the full menus array. Use updateMask for partial updates.
1848
+ * Updates food menus for a Google Business Profile location. Send the full menus array. Use updateMask for partial updates.
1792
1849
  */
1793
1850
  export const updateGoogleBusinessFoodMenus = <ThrowOnError extends boolean = false>(options: OptionsLegacyParser<UpdateGoogleBusinessFoodMenusData, ThrowOnError>) => {
1794
1851
  return (options?.client ?? client).put<UpdateGoogleBusinessFoodMenusResponse, UpdateGoogleBusinessFoodMenusError, ThrowOnError>({
@@ -1799,7 +1856,7 @@ export const updateGoogleBusinessFoodMenus = <ThrowOnError extends boolean = fal
1799
1856
 
1800
1857
  /**
1801
1858
  * Get location details
1802
- * Returns detailed GBP location info (hours, description, phone, website, categories, services). Use readMask to request specific fields.
1859
+ * Returns detailed Google Business Profile location info (hours, description, phone, website, categories, services). Use readMask to request specific fields.
1803
1860
  */
1804
1861
  export const getGoogleBusinessLocationDetails = <ThrowOnError extends boolean = false>(options: OptionsLegacyParser<GetGoogleBusinessLocationDetailsData, ThrowOnError>) => {
1805
1862
  return (options?.client ?? client).get<GetGoogleBusinessLocationDetailsResponse, GetGoogleBusinessLocationDetailsError, ThrowOnError>({
@@ -1810,7 +1867,7 @@ export const getGoogleBusinessLocationDetails = <ThrowOnError extends boolean =
1810
1867
 
1811
1868
  /**
1812
1869
  * Update location details
1813
- * Updates GBP location details. The updateMask field is required and specifies which fields to update.
1870
+ * Updates Google Business Profile location details. The updateMask field is required and specifies which fields to update.
1814
1871
  * This endpoint proxies Google's Business Information API locations.patch, so any valid updateMask field is supported.
1815
1872
  * Common fields: regularHours, specialHours, profile.description, websiteUri, phoneNumbers, categories, serviceItems.
1816
1873
  *
@@ -1851,7 +1908,7 @@ export const createGoogleBusinessMedia = <ThrowOnError extends boolean = false>(
1851
1908
 
1852
1909
  /**
1853
1910
  * Delete photo
1854
- * Deletes a photo or media item from a GBP location.
1911
+ * Deletes a photo or media item from a Google Business Profile location.
1855
1912
  */
1856
1913
  export const deleteGoogleBusinessMedia = <ThrowOnError extends boolean = false>(options: OptionsLegacyParser<DeleteGoogleBusinessMediaData, ThrowOnError>) => {
1857
1914
  return (options?.client ?? client).delete<DeleteGoogleBusinessMediaResponse, DeleteGoogleBusinessMediaError, ThrowOnError>({
@@ -1887,7 +1944,7 @@ export const getGmbAttributeMetadata = <ThrowOnError extends boolean = false>(op
1887
1944
 
1888
1945
  /**
1889
1946
  * Get attributes
1890
- * Returns GBP location attributes (amenities, services, accessibility, payment types). Available attributes vary by business category.
1947
+ * Returns Google Business Profile location attributes (amenities, services, accessibility, payment types). Available attributes vary by business category.
1891
1948
  */
1892
1949
  export const getGoogleBusinessAttributes = <ThrowOnError extends boolean = false>(options: OptionsLegacyParser<GetGoogleBusinessAttributesData, ThrowOnError>) => {
1893
1950
  return (options?.client ?? client).get<GetGoogleBusinessAttributesResponse, GetGoogleBusinessAttributesError, ThrowOnError>({
@@ -1940,7 +1997,7 @@ export const createGoogleBusinessPlaceAction = <ThrowOnError extends boolean = f
1940
1997
 
1941
1998
  /**
1942
1999
  * Delete action link
1943
- * Deletes a place action link (e.g. booking or ordering URL) from a GBP location.
2000
+ * Deletes a place action link (e.g. booking or ordering URL) from a Google Business Profile location.
1944
2001
  */
1945
2002
  export const deleteGoogleBusinessPlaceAction = <ThrowOnError extends boolean = false>(options: OptionsLegacyParser<DeleteGoogleBusinessPlaceActionData, ThrowOnError>) => {
1946
2003
  return (options?.client ?? client).delete<DeleteGoogleBusinessPlaceActionResponse, DeleteGoogleBusinessPlaceActionError, ThrowOnError>({
@@ -2012,7 +2069,7 @@ export const batchGetGoogleBusinessReviews = <ThrowOnError extends boolean = fal
2012
2069
 
2013
2070
  /**
2014
2071
  * Get a review
2015
- * Returns one Google Business review, in the same shape as the entries of GET /v1/accounts/{accountId}/gmb-reviews.
2072
+ * Returns one Google Business Profile review, in the same shape as the entries of GET /v1/accounts/{accountId}/gmb-reviews.
2016
2073
  * The review is read from the account's selected location unless locationId overrides it, and Google returns 404 for a review id that belongs to another location.
2017
2074
  * Read the review before replying if a human may have answered it already: replies are overwritten in place and Google keeps no history.
2018
2075
  *
@@ -2026,7 +2083,7 @@ export const getGoogleBusinessReview = <ThrowOnError extends boolean = false>(op
2026
2083
 
2027
2084
  /**
2028
2085
  * Reply to a review
2029
- * Posts (or updates) the business owner reply to a Google Business review.
2086
+ * Posts (or updates) the business owner reply to a Google Business Profile review.
2030
2087
  * The reply is associated with the account's currently selected location (set via /v1/accounts/{accountId}/gmb-locations).
2031
2088
  * Calling this endpoint a second time on the same review overwrites the previous reply (PUT semantics on Google's side).
2032
2089
  * Google keeps no history, so an automated retry silently replaces a reply someone edited by hand in the Google Business Profile UI.
@@ -2042,7 +2099,7 @@ export const replyToGoogleBusinessReview = <ThrowOnError extends boolean = false
2042
2099
 
2043
2100
  /**
2044
2101
  * Delete a review reply
2045
- * Removes the business owner reply from a Google Business review. The review itself remains.
2102
+ * Removes the business owner reply from a Google Business Profile review. The review itself remains.
2046
2103
  */
2047
2104
  export const deleteGoogleBusinessReviewReply = <ThrowOnError extends boolean = false>(options: OptionsLegacyParser<DeleteGoogleBusinessReviewReplyData, ThrowOnError>) => {
2048
2105
  return (options?.client ?? client).delete<DeleteGoogleBusinessReviewReplyResponse, DeleteGoogleBusinessReviewReplyError, ThrowOnError>({
@@ -2055,7 +2112,7 @@ export const deleteGoogleBusinessReviewReply = <ThrowOnError extends boolean = f
2055
2112
  * Get pending OAuth data
2056
2113
  * Fetch pending OAuth data for headless mode using the pendingDataToken from the redirect URL.
2057
2114
  *
2058
- * **Scope**: This endpoint is used for LinkedIn organizations, Google Business locations, Slack channels, Snapchat profiles, and Pinterest boards, where the selection list is too large to fit in URL params. The redirect carries a `pendingDataToken` instead of the full payload; the response includes the corresponding selection array (e.g. `boards` for Pinterest). WhatsApp, Facebook and other platforms pass selection state directly via URL query params on the redirect (`profileId`, `tempToken`, `step`), no pending record is created, so this endpoint will return 404 for those flows. Use the platform-specific selection endpoint instead (e.g. `/v1/connect/whatsapp/select-phone-number`).
2115
+ * **Scope**: This endpoint is used for LinkedIn organizations, Google Business Profile locations, Slack channels, Snapchat profiles, and Pinterest boards, where the selection list is too large to fit in URL params. The redirect carries a `pendingDataToken` instead of the full payload; the response includes the corresponding selection array (e.g. `boards` for Pinterest). WhatsApp, Facebook and other platforms pass selection state directly via URL query params on the redirect (`profileId`, `tempToken`, `step`), no pending record is created, so this endpoint will return 404 for those flows. Use the platform-specific selection endpoint instead (e.g. `/v1/connect/whatsapp/select-phone-number`).
2059
2116
  *
2060
2117
  * Reading the token does not consume it, so this fetch is repeatable until the token expires 1 hour after issuance. Completing the platform selection deletes the pending record, so the token stops working from then on. No authentication required.
2061
2118
  *
@@ -2069,7 +2126,7 @@ export const getPendingOAuthData = <ThrowOnError extends boolean = false>(option
2069
2126
 
2070
2127
  /**
2071
2128
  * List LinkedIn orgs
2072
- * Fetch full LinkedIn organization details (logos, vanity names, websites) for custom UI. No authentication required, just the tempToken from OAuth.
2129
+ * Fetch full LinkedIn organization details (logos, vanity names, websites) for custom UI. No authentication required, only the tempToken from OAuth.
2073
2130
  */
2074
2131
  export const listLinkedInOrganizations = <ThrowOnError extends boolean = false>(options: OptionsLegacyParser<ListLinkedInOrganizationsData, ThrowOnError>) => {
2075
2132
  return (options?.client ?? client).get<ListLinkedInOrganizationsResponse, ListLinkedInOrganizationsError, ThrowOnError>({
@@ -2225,7 +2282,13 @@ export const completeWhatsAppPhoneSelection = <ThrowOnError extends boolean = fa
2225
2282
 
2226
2283
  /**
2227
2284
  * Connect WhatsApp from Embedded Signup
2228
- * Exchange the authorization code Meta Embedded Signup returns to your browser SDK. This is the headless completion path for WhatsApp: the code never passes through a redirect_uri, so POST /v1/connect/{platform} cannot accept it.
2285
+ * Exchange the authorization code Meta's Embedded Signup popup returned. This is the call the Zernio-hosted
2286
+ * signup page makes after the popup closes (`GET /v1/connect/whatsapp?signup=hosted`), sending the `wabaId`
2287
+ * and `phoneNumberId` Meta reported so exactly the chosen number is connected; when both are omitted the
2288
+ * first number the token can see is used. The code never passes through a `redirect_uri`, so
2289
+ * `POST /v1/connect/{platform}` cannot accept it. Authenticates with an API key, or with the connect token
2290
+ * the hosted flow issues (`X-Connect-Token` header).
2291
+ *
2229
2292
  */
2230
2293
  export const connectWhatsAppEmbeddedSignup = <ThrowOnError extends boolean = false>(options: OptionsLegacyParser<ConnectWhatsAppEmbeddedSignupData, ThrowOnError>) => {
2231
2294
  return (options?.client ?? client).post<ConnectWhatsAppEmbeddedSignupResponse, ConnectWhatsAppEmbeddedSignupError, ThrowOnError>({
@@ -2234,6 +2297,21 @@ export const connectWhatsAppEmbeddedSignup = <ThrowOnError extends boolean = fal
2234
2297
  });
2235
2298
  };
2236
2299
 
2300
+ /**
2301
+ * Get Embedded Signup SDK config
2302
+ * The Meta app id and Embedded Signup configuration id the Zernio-hosted signup page uses to open Meta's
2303
+ * popup. Integrators do not need this endpoint: start the hosted flow with
2304
+ * `GET /v1/connect/whatsapp?signup=hosted` and send the user to the returned `authUrl`. Authenticates with
2305
+ * an API key or with the connect token the hosted flow issues (`X-Connect-Token` header).
2306
+ *
2307
+ */
2308
+ export const getWhatsAppSdkConfig = <ThrowOnError extends boolean = false>(options?: OptionsLegacyParser<GetWhatsAppSdkConfigData, ThrowOnError>) => {
2309
+ return (options?.client ?? client).get<GetWhatsAppSdkConfigResponse, GetWhatsAppSdkConfigError, ThrowOnError>({
2310
+ ...options,
2311
+ url: '/v1/connect/whatsapp/sdk-config'
2312
+ });
2313
+ };
2314
+
2237
2315
  /**
2238
2316
  * Connect a Discord channel
2239
2317
  * Finalize a Discord connect by binding one channel to a profile. Served by a dedicated route, so it is not reachable through POST /v1/connect/{platform}. One connected account per channel: repeat the call with a different channelId to add another.
@@ -2418,7 +2496,7 @@ export const updateLinkedInOrganization = <ThrowOnError extends boolean = false>
2418
2496
  * - Person mentions require the LinkedIn account to be admin of at least one organization: both endpoints that resolve a profile URL to a member URN take an organization you administer. Organization mentions (e.g. @Microsoft) have no such requirement.
2419
2497
  * - The two are not scoped alike. peopleTypeahead?q=organizationFollowers only returns that organization's followers; vanityUrl?q=vanityUrlAsOrganization does not, and its resolvable set is opaque. A 404 here does not mean the person is unknown to you or unknown to LinkedIn: a live public profile can 404 with no reason given.
2420
2498
  * - For person mentions to be clickable, the displayName parameter must exactly match the name shown on their LinkedIn profile.
2421
- * - Person mentions DO work when published from personal profiles (the URN just needs to be valid). The limitation is only in the resolution step (URL to URN), not in publishing.
2499
+ * - Person mentions DO work when published from personal profiles (the URN only needs to be valid). The limitation is only in the resolution step (URL to URN), not in publishing.
2422
2500
  *
2423
2501
  */
2424
2502
  export const getLinkedInMentions = <ThrowOnError extends boolean = false>(options: OptionsLegacyParser<GetLinkedInMentionsData, ThrowOnError>) => {
@@ -2512,10 +2590,10 @@ export const getInstagramAudio = <ThrowOnError extends boolean = false>(options:
2512
2590
  * Returns metrics for a single story. The `source` field discriminates
2513
2591
  * between three states:
2514
2592
  *
2515
- * - `live` — fetched from Meta in real time (story is still active)
2516
- * - `cached` — fetched from a persisted `story_insights` webhook payload
2593
+ * - `live`: fetched from Meta in real time (story is still active)
2594
+ * - `cached`: fetched from a persisted `story_insights` webhook payload
2517
2595
  * (story has expired but we received its final-state metrics from Meta)
2518
- * - `unavailable` — story has expired and we never received its webhook
2596
+ * - `unavailable`: story has expired and we never received its webhook
2519
2597
  * payload (for example, the account connected after the story expired)
2520
2598
  *
2521
2599
  * Meta can report an expired story as an empty successful result rather
@@ -2611,7 +2689,7 @@ export const updateYoutubeDefaultPlaylist = <ThrowOnError extends boolean = fals
2611
2689
  };
2612
2690
 
2613
2691
  /**
2614
- * List GBP locations
2692
+ * List Google Business Profile locations
2615
2693
  * Returns Google Business Profile locations the connected account can access, plus the currently selected location. The list is bounded (see hasMore); for accounts that own many locations, use the search or filter query params to find a specific one instead of loading them all, or raise limit to enumerate an account with more than 100 locations.
2616
2694
  *
2617
2695
  */
@@ -2623,8 +2701,8 @@ export const getGmbLocations = <ThrowOnError extends boolean = false>(options: O
2623
2701
  };
2624
2702
 
2625
2703
  /**
2626
- * Update GBP location
2627
- * Switch which GBP location is active for a connected account.
2704
+ * Update Google Business Profile location
2705
+ * Switch which Google Business Profile location is active for a connected account.
2628
2706
  */
2629
2707
  export const updateGmbLocation = <ThrowOnError extends boolean = false>(options: OptionsLegacyParser<UpdateGmbLocationData, ThrowOnError>) => {
2630
2708
  return (options?.client ?? client).put<UpdateGmbLocationResponse, UpdateGmbLocationError, ThrowOnError>({
@@ -2634,8 +2712,8 @@ export const updateGmbLocation = <ThrowOnError extends boolean = false>(options:
2634
2712
  };
2635
2713
 
2636
2714
  /**
2637
- * Assign GBP location to another profile
2638
- * Connect a Google Business location onto a DIFFERENT profile by reusing the OAuth grant from an already-connected GBP account — no browser, no re-authorization. Built for agencies whose single Google account has manager access to many client locations and who run one profile per client: connect one location the normal way (browser OAuth), then bulk-assign the rest onto each client's profile via this endpoint. The path `accountId` is a SOURCE connected GBP account (the token holder); the body `profileId` is the TARGET profile. Returns 409 if the target profile already has a Google Business connection (switch its location with PUT gmb-locations instead).
2715
+ * Assign Google Business Profile location to another profile
2716
+ * Connect a Google Business Profile location onto a DIFFERENT profile by reusing the OAuth grant from an already-connected Google Business Profile account, with no browser and no re-authorization. Built for agencies whose single Google account has manager access to many client locations and who run one profile per client: connect one location the normal way (browser OAuth), then bulk-assign the rest onto each client's profile via this endpoint. The path `accountId` is a SOURCE connected Google Business Profile account (the token holder); the body `profileId` is the TARGET profile. Returns 409 if the target profile already has a Google Business Profile connection (switch its location with PUT gmb-locations instead).
2639
2717
  *
2640
2718
  */
2641
2719
  export const assignGoogleBusinessLocation = <ThrowOnError extends boolean = false>(options: OptionsLegacyParser<AssignGoogleBusinessLocationData, ThrowOnError>) => {
@@ -2650,7 +2728,7 @@ export const assignGoogleBusinessLocation = <ThrowOnError extends boolean = fals
2650
2728
  * Returns the reaction breakdown for a Facebook Page post: a count per reaction type
2651
2729
  * plus the overall total.
2652
2730
  *
2653
- * The whole breakdown is fetched in a single Graph call. Note that the post analytics
2731
+ * The whole breakdown is fetched in a single Graph call. The post analytics
2654
2732
  * endpoint reports only an aggregate reaction count (surfaced there as `likes`), so use
2655
2733
  * this endpoint when you need per-type counts.
2656
2734
  *
@@ -2844,7 +2922,7 @@ export const listSlackMembers = <ThrowOnError extends boolean = false>(options:
2844
2922
  /**
2845
2923
  * Send a Discord Direct Message
2846
2924
  * Send a 1:1 Direct Message from the bot to a Discord user (by snowflake ID).
2847
- * Supports the same payload shape as channel posts — content, embeds, media
2925
+ * Supports the same payload shape as channel posts: content, embeds, media
2848
2926
  * attachments, and TTS.
2849
2927
  *
2850
2928
  * Constraints (Discord platform limits):
@@ -2874,7 +2952,7 @@ export const sendDiscordDirectMessage = <ThrowOnError extends boolean = false>(o
2874
2952
  * pickers, role-permission UIs, or finding the role ID before calling
2875
2953
  * the role-assign endpoint.
2876
2954
  *
2877
- * Roles are returned unordered — sort client-side by `position` if you
2955
+ * Roles are returned unordered. Sort client-side by `position` if you
2878
2956
  * need Discord's UI ordering.
2879
2957
  *
2880
2958
  * Caller must pass `accountId` of a Discord SocialAccount bound to this
@@ -2991,7 +3069,7 @@ export const getDiscordGuildMember = <ThrowOnError extends boolean = false>(opti
2991
3069
 
2992
3070
  /**
2993
3071
  * Assign a role to a guild member
2994
- * Assign one role to one member. Idempotent on Discord's side — re-running
3072
+ * Assign one role to one member. Idempotent on Discord's side: re-running
2995
3073
  * on a member who already has the role is a 204 no-op.
2996
3074
  *
2997
3075
  * Path shape mirrors Discord's own API (`PUT /guilds/{guild}/members/{user}/roles/{role}`)
@@ -3011,7 +3089,7 @@ export const addDiscordMemberRole = <ThrowOnError extends boolean = false>(optio
3011
3089
 
3012
3090
  /**
3013
3091
  * Remove a role from a guild member
3014
- * Remove one role from one member. Idempotent — removing a role the
3092
+ * Remove one role from one member. Idempotent: removing a role the
3015
3093
  * member doesn't have returns 204 no-op.
3016
3094
  *
3017
3095
  * Same permission + hierarchy constraints as the PUT counterpart.
@@ -3098,11 +3176,11 @@ export const listDiscordPinnedMessages = <ThrowOnError extends boolean = false>(
3098
3176
  * Pin a specific message in a channel. Path shape mirrors Discord's own
3099
3177
  * API (`PUT /channels/{cid}/pins/{mid}`).
3100
3178
  *
3101
- * Idempotent — re-pinning an already-pinned message is a 204 no-op.
3179
+ * Idempotent: re-pinning an already-pinned message is a 204 no-op.
3102
3180
  *
3103
3181
  * Constraints:
3104
3182
  * - Bot needs MANAGE_MESSAGES in the channel.
3105
- * - 50-pin cap per channel — hitting it returns 400 (Discord-side).
3183
+ * - 50-pin cap per channel: hitting it returns 400 (Discord-side).
3106
3184
  * Caller should unpin one first.
3107
3185
  *
3108
3186
  */
@@ -3116,7 +3194,7 @@ export const pinDiscordMessage = <ThrowOnError extends boolean = false>(options:
3116
3194
  /**
3117
3195
  * Unpin a Discord message
3118
3196
  * Unpin a message. Same MANAGE_MESSAGES permission requirement as pin.
3119
- * Idempotent — unpinning a non-pinned message is a 204 no-op.
3197
+ * Idempotent: unpinning a non-pinned message is a 204 no-op.
3120
3198
  *
3121
3199
  */
3122
3200
  export const unpinDiscordMessage = <ThrowOnError extends boolean = false>(options: OptionsLegacyParser<UnpinDiscordMessageData, ThrowOnError>) => {
@@ -3129,7 +3207,7 @@ export const unpinDiscordMessage = <ThrowOnError extends boolean = false>(option
3129
3207
  /**
3130
3208
  * List Discord scheduled events
3131
3209
  * Return all scheduled events in the guild. Events are distinct from
3132
- * messages — they appear in the server's Events panel and Discord
3210
+ * messages: they appear in the server's Events panel and Discord
3133
3211
  * auto-notifies interested members ahead of start time.
3134
3212
  *
3135
3213
  * Pass `withUserCount=true` to include `user_count` (number of members
@@ -3148,15 +3226,15 @@ export const listDiscordScheduledEvents = <ThrowOnError extends boolean = false>
3148
3226
  * Create a guild scheduled event. Three event types, selected via the
3149
3227
  * discriminator on `entity.type`:
3150
3228
  *
3151
- * - `external` — off-platform (Zoom, in-person, livestream). Requires
3229
+ * - `external`: off-platform (Zoom, in-person, livestream). Requires
3152
3230
  * both `location` and `endsAt`. Most common type for scheduler
3153
3231
  * integrations.
3154
- * - `voice` — hosted in a Discord voice channel. Requires `channelId`.
3155
- * - `stage` — hosted in a Discord stage channel. Requires `channelId`.
3232
+ * - `voice`: hosted in a Discord voice channel. Requires `channelId`.
3233
+ * - `stage`: hosted in a Discord stage channel. Requires `channelId`.
3156
3234
  *
3157
3235
  * Bot needs MANAGE_EVENTS in the guild. Existing installs (pre-events
3158
3236
  * PR) need a re-invite OR a server admin manually granting the
3159
- * permission — see route header for details.
3237
+ * permission. See route header for details.
3160
3238
  *
3161
3239
  */
3162
3240
  export const createDiscordScheduledEvent = <ThrowOnError extends boolean = false>(options: OptionsLegacyParser<CreateDiscordScheduledEventData, ThrowOnError>) => {
@@ -3179,7 +3257,7 @@ export const getDiscordScheduledEvent = <ThrowOnError extends boolean = false>(o
3179
3257
  /**
3180
3258
  * Update a Discord scheduled event
3181
3259
  * Patch any subset of fields. Passing `status: 'cancelled'` is how you
3182
- * cancel an event — Discord doesn't have a dedicated cancel endpoint,
3260
+ * cancel an event. Discord doesn't have a dedicated cancel endpoint,
3183
3261
  * it's a status transition.
3184
3262
  *
3185
3263
  * Most status transitions Discord enforces (you can't go SCHEDULED →
@@ -3442,11 +3520,16 @@ export const listLogs = <ThrowOnError extends boolean = false>(options?: Options
3442
3520
  /**
3443
3521
  * List conversations
3444
3522
  * Fetch conversations (DMs) from all connected messaging accounts in a single API call. Supports filtering by profile and platform. Results are aggregated and deduplicated.
3445
- * Supported platforms: Facebook, Instagram, Twitter/X, Bluesky, Reddit, Telegram.
3446
3523
  *
3447
- * Twitter/X limitation: X has replaced traditional DMs with encrypted "X Chat" for many accounts. Messages sent or received through encrypted X Chat are not accessible via X's API (the /2/dm_events endpoint only returns legacy unencrypted DMs). This means some Twitter/X conversations may show only outgoing messages or appear empty. This is an X platform limitation that affects all third-party applications. See X's docs on encrypted messaging for more details.
3524
+ * Supported platforms: Facebook, Instagram, X, Bluesky, Reddit, Telegram.
3448
3525
  *
3449
- * Instagram and Facebook pre-connect history: when one of these accounts is connected, Zernio replays the DM history the account already holds on Meta, so conversations that began before the account was connected appear here. Up to 500 conversations per account are replayed. The replay runs in the background and can finish after a listing you have already taken, and replayed conversations keep their original lastMessageAt, so they sort into date order rather than appearing at the top. If you mirror this endpoint into your own store, re-run the sweep rather than relying on a single pass at connect time. Replayed history emits no webhooks and is stored as already read, so it never affects unread counts. Threads that Meta refuses to serve are skipped, and an account whose Instagram "connected tools" message access is turned off is not replayed at all.
3526
+ * **X limitation.** X has replaced traditional DMs with encrypted "X Chat" for many accounts. Messages sent or received through encrypted X Chat are not accessible via X's API (the /2/dm_events endpoint only returns legacy unencrypted DMs). This means some X conversations may show only outgoing messages or appear empty. This is an X platform limitation that affects all third-party applications. See X's docs on encrypted messaging for more details.
3527
+ *
3528
+ * **Instagram and Facebook pre-connect history.** When one of these accounts is connected, Zernio replays the DM history the account already holds on Meta, so conversations that began before the account was connected appear here. Up to 500 conversations per account are replayed.
3529
+ *
3530
+ * - The replay runs in the background and can finish after a listing you have already taken, and replayed conversations keep their original lastMessageAt, so they sort into date order rather than appearing at the top. If you mirror this endpoint into your own store, re-run the sweep rather than relying on a single pass at connect time.
3531
+ * - Replayed history emits no webhooks and is stored as already read, so it never affects unread counts.
3532
+ * - Threads that Meta refuses to serve are skipped, and an account whose Instagram "connected tools" message access is turned off is not replayed at all.
3450
3533
  *
3451
3534
  */
3452
3535
  export const listInboxConversations = <ThrowOnError extends boolean = false>(options?: OptionsLegacyParser<ListInboxConversationsData, ThrowOnError>) => {
@@ -3458,19 +3541,28 @@ export const listInboxConversations = <ThrowOnError extends boolean = false>(opt
3458
3541
 
3459
3542
  /**
3460
3543
  * Create conversation
3461
- * Initiate a new direct message conversation with a specified user. If a conversation already exists with the recipient, the message is added to the existing thread.
3544
+ * Start a direct message conversation with a user. If a conversation with that recipient already exists, the message is added to the existing thread.
3545
+ *
3546
+ * Supported platforms: X, Bluesky, Reddit, WhatsApp, SMS, and Slack. Other platforms return PLATFORM_NOT_SUPPORTED.
3462
3547
  *
3463
- * Supported platforms: X/Twitter, Bluesky, Reddit, WhatsApp, SMS, and Slack. Other platforms return PLATFORM_NOT_SUPPORTED.
3548
+ * **Slack.** Pass a workspace member id as participantId (list them with GET /v1/accounts/{accountId}/slack-members). Zernio opens the DM channel with that member and sends the message; the thread then behaves like any other Slack conversation in the inbox. The member must belong to the connected workspace.
3464
3549
  *
3465
- * Slack: pass a workspace member id as participantId (list them with GET /v1/accounts/{accountId}/slack-members). Zernio opens the DM channel with that member and sends the message; the thread then behaves like any other Slack conversation in the inbox. The member must belong to the connected workspace.
3550
+ * **WhatsApp.** This is the endpoint for sending an approved template message to a phone number. Provide templateName, templateLanguage, and templateParams (variable values for the text header, body and dynamic URL buttons, in that order), with the recipient phone in participantId. A template is required because WhatsApp does not permit freeform messages to open a conversation; a missing template returns TEMPLATE_REQUIRED.
3466
3551
  *
3467
- * WhatsApp: this is the endpoint for sending an approved template message to a phone number. Provide templateName, templateLanguage, and templateParams (variable values for the text header, body and dynamic URL buttons, in that order), with the recipient phone in participantId. A template is required because WhatsApp does not permit freeform messages to open a conversation; a missing template returns TEMPLATE_REQUIRED. Templates with media headers (image, video, document) are handled automatically: Zernio reads the approved template definition and fills the header at send time with the template's approved sample asset. To send a DIFFERENT asset per message (e.g. a distinct invoice PDF for each recipient), pass the headerMedia field with a public link (or a Meta media id); it overrides the sample for that send. A template whose approved header format is LOCATION has no header asset to reconstruct at all: Meta only accepts the location at send time, so pass headerLocation (latitude and longitude required) whenever such a template is sent; headerMedia and headerLocation cannot both be supplied. A button that carries its own value at send time (a copy-code button holding a Pix payment code or a coupon, a flow token) is sent with templateButtonParams, addressed by the button's index; templateParams covers text variables and dynamic URL buttons only. Calling this for a number you already have a thread with simply sends the template into that thread, which also makes it the way to re-engage a contact after the 24-hour customer-service window has closed. Once the recipient replies (opening the 24h window), send freeform messages with the send-message endpoint (POST /v1/inbox/conversations/{conversationId}/messages). Template fields are accepted on the JSON body only, not on multipart requests. Alternatively, WhatsApp Business Accounts eligible for Meta Direct Send can open a conversation with a business-initiated utility text message and no template: pass category: 'utility' together with message (and no templateName). See the category field below.
3552
+ * - Templates with media headers (image, video, document) are handled automatically: Zernio reads the approved template definition and fills the header at send time with the template's approved sample asset. To send a DIFFERENT asset per message (e.g. a distinct invoice PDF for each recipient), pass the headerMedia field with a public link (or a Meta media id); it overrides the sample for that send.
3553
+ * - A template whose approved header format is LOCATION has no header asset to reconstruct at all: Meta only accepts the location at send time, so pass headerLocation (latitude and longitude required) whenever such a template is sent; headerMedia and headerLocation cannot both be supplied.
3554
+ * - A button that carries its own value at send time (a copy-code button holding a Pix payment code or a coupon, a flow token) is sent with templateButtonParams, addressed by the button's index; templateParams covers text variables and dynamic URL buttons only.
3555
+ * - Template fields are accepted on the JSON body only, not on multipart requests.
3468
3556
  *
3469
- * DM eligibility (X/Twitter): Before sending, the endpoint checks if the recipient accepts DMs from your account (via the receives_your_dm field). If not, a 422 error with code DM_NOT_ALLOWED is returned. You can skip this check with skipDmCheck: true if you have already verified eligibility.
3557
+ * For a number you already have a thread with, this sends the template into that thread, which also makes it the way to re-engage a contact after the 24-hour customer-service window has closed. Once the recipient replies (opening the 24h window), send freeform messages with the send-message endpoint (POST /v1/inbox/conversations/{conversationId}/messages).
3470
3558
  *
3471
- * X API tier requirement: DM write endpoints require X API Pro tier ($5,000/month) or Enterprise access. This applies to BYOK (Bring Your Own Key) users who provide their own X API credentials.
3559
+ * Alternatively, WhatsApp Business Accounts eligible for Meta Direct Send can open a conversation with a business-initiated utility text message and no template: pass category: 'utility' together with message (and no templateName). See the category field below.
3472
3560
  *
3473
- * Rate limits (X/Twitter only): X's DM API enforces 200 requests per 15 minutes, 1,000 per 24 hours per connected X account, and 15,000 per 24 hours per X developer app (shared across all DM endpoints). These limits do NOT apply to other platforms. WhatsApp sends are governed by Meta's per-number messaging tiers (unique business-initiated conversations per 24 hours) and per-number throughput instead.
3561
+ * **DM eligibility (X).** Before sending, the endpoint checks if the recipient accepts DMs from your account (via the receives_your_dm field). If not, a 422 error with code DM_NOT_ALLOWED is returned. You can skip this check with skipDmCheck: true if you have already verified eligibility.
3562
+ *
3563
+ * **X API tier requirement.** DM write endpoints require X API Pro tier ($5,000/month) or Enterprise access. This applies to BYOK (Bring Your Own Key) users who provide their own X API credentials.
3564
+ *
3565
+ * **Rate limits (X only).** X's DM API enforces 200 requests per 15 minutes, 1,000 per 24 hours per connected X account, and 15,000 per 24 hours per X developer app (shared across all DM endpoints). These limits do NOT apply to other platforms. WhatsApp sends are governed by Meta's per-number messaging tiers (unique business-initiated conversations per 24 hours) and per-number throughput instead.
3474
3566
  *
3475
3567
  */
3476
3568
  export const createInboxConversation = <ThrowOnError extends boolean = false>(options: OptionsLegacyParser<CreateInboxConversationData, ThrowOnError>) => {
@@ -3489,7 +3581,7 @@ export const createInboxConversation = <ThrowOnError extends boolean = false>(op
3489
3581
  *
3490
3582
  * A conversation that matches both ways is returned once, carrying its message matches.
3491
3583
  *
3492
- * Only platforms whose messages are stored by Zernio are searchable: WhatsApp, SMS, Telegram, Facebook, Instagram, Twitter/X and Reddit. Bluesky conversations are fetched live from the platform and cannot be searched; those accounts are listed in meta.accountsSkipped.
3584
+ * Only platforms whose messages are stored by Zernio are searchable: WhatsApp, SMS, Telegram, Facebook, Instagram, X and Reddit. Bluesky conversations are fetched live from the platform and cannot be searched; those accounts are listed in meta.accountsSkipped.
3493
3585
  *
3494
3586
  */
3495
3587
  export const searchInboxConversations = <ThrowOnError extends boolean = false>(options: OptionsLegacyParser<SearchInboxConversationsData, ThrowOnError>) => {
@@ -3532,9 +3624,9 @@ export const updateInboxConversation = <ThrowOnError extends boolean = false>(op
3532
3624
  *
3533
3625
  * Sort order: defaults to `asc` (oldest first, chat style). For the
3534
3626
  * "show me the latest messages" pattern, pass `?sortOrder=desc&limit=N`.
3535
- * Twitter, Instagram, Telegram, WhatsApp and Reddit honor the requested
3627
+ * X, Instagram, Telegram, WhatsApp and Reddit honor the requested
3536
3628
  * order from the local message store. For Facebook and Bluesky, the
3537
- * upstream APIs only return newest-first and have no order parameter —
3629
+ * upstream APIs only return newest-first and have no order parameter, so
3538
3630
  * sort order is best-effort and only reverses items within a single page
3539
3631
  * (pages still walk newest→oldest). The response field `sortOrderApplied`
3540
3632
  * tells you what was actually applied.
@@ -3551,7 +3643,7 @@ export const updateInboxConversation = <ThrowOnError extends boolean = false>(op
3551
3643
  * the account was connected are unaffected. Replayed messages are stored
3552
3644
  * as already read and emit no webhooks.
3553
3645
  *
3554
- * Twitter/X limitation: X's encrypted "X Chat" messages are not accessible via the API. Conversations where the other participant uses encrypted X Chat may only show your outgoing messages. See the list conversations endpoint for more details.
3646
+ * X limitation: X's encrypted "X Chat" messages are not accessible via the API. Conversations where the other participant uses encrypted X Chat may only show your outgoing messages. See the list conversations endpoint for more details.
3555
3647
  *
3556
3648
  * This endpoint is read-only and does NOT mark messages as read or send
3557
3649
  * read receipts. To mark a conversation read (and send WhatsApp blue ticks
@@ -3663,7 +3755,7 @@ export const editInboxMessage = <ThrowOnError extends boolean = false>(options:
3663
3755
  * Delete message
3664
3756
  * Delete a message from a conversation. Platform support varies:
3665
3757
  * - Telegram: Full delete (bot's own messages anytime, others if admin)
3666
- * - X/Twitter: Full delete (own DM events only)
3758
+ * - X: Full delete (own DM events only)
3667
3759
  * - Bluesky: Delete for self only (recipient still sees it)
3668
3760
  * - Reddit: Delete from sender's view only
3669
3761
  * - Facebook, Instagram, WhatsApp: Not supported (returns 400)
@@ -3695,6 +3787,23 @@ export const sendTypingIndicator = <ThrowOnError extends boolean = false>(option
3695
3787
  });
3696
3788
  };
3697
3789
 
3790
+ /**
3791
+ * Hand a conversation to or from Meta Business Agent
3792
+ * WhatsApp only, on numbers with Meta Business Agent enabled. Wraps Meta's thread control:
3793
+ * - `release`: hand the conversation back to the agent so it resumes answering. You must currently hold control (sending any message takes it implicitly).
3794
+ * - `take`: take control before sending anything, so the agent stops replying while an operator reads the thread. Meta accepts this only from the business configured as the number's escalation partner; other apps take control by sending a message.
3795
+ * - `pass`: transfer control to the number's configured escalation partner, or to the agent with `target: ai_agent`. Meta's Cloud API currently rejects it ("Pass action is not supported", verified 2026-09-08); use `release` to hand a thread back to the agent.
3796
+ *
3797
+ * The conversation's `threadControl` follows the result; a `conversation.control_changed` webhook fires when Meta later reports the change.
3798
+ *
3799
+ */
3800
+ export const setConversationThreadControl = <ThrowOnError extends boolean = false>(options: OptionsLegacyParser<SetConversationThreadControlData, ThrowOnError>) => {
3801
+ return (options?.client ?? client).post<SetConversationThreadControlResponse, SetConversationThreadControlError, ThrowOnError>({
3802
+ ...options,
3803
+ url: '/v1/inbox/conversations/{conversationId}/thread-control'
3804
+ });
3805
+ };
3806
+
3698
3807
  /**
3699
3808
  * Mark a conversation as read
3700
3809
  * Marks all unread incoming messages in the conversation as read.
@@ -3758,7 +3867,7 @@ export const removeMessageReaction = <ThrowOnError extends boolean = false>(opti
3758
3867
  * Maximum file size is 25MB.
3759
3868
  *
3760
3869
  * Unlike /v1/media/upload (which uses upload tokens for end-user flows),
3761
- * this endpoint uses standard Bearer token authentication for programmatic use.
3870
+ * this endpoint takes your API key in the Authorization header, for programmatic use.
3762
3871
  *
3763
3872
  */
3764
3873
  export const uploadMediaDirect = <ThrowOnError extends boolean = false>(options: OptionsLegacyParser<UploadMediaDirectData, ThrowOnError>) => {
@@ -3887,7 +3996,7 @@ export const deleteTelegramCommands = <ThrowOnError extends boolean = false>(opt
3887
3996
  * **Webhook payloads do not carry `refreshUrl`**, so a webhook-driven
3888
3997
  * integration builds this URL itself. Every piece is in the event:
3889
3998
  * `message.conversationId`, `message.platformMessageId`, the attachment's
3890
- * zero-based position, and `account.accountId`. Note that **`accountId` is a
3999
+ * zero-based position, and `account.accountId`. **`accountId` is a
3891
4000
  * required query parameter**; omitting it returns `400`
3892
4001
  * `missing_required_field`, which is the same requirement
3893
4002
  * `GET /v1/whatsapp/media/{mediaId}` has.
@@ -3918,7 +4027,7 @@ export const getMessageAttachment = <ThrowOnError extends boolean = false>(optio
3918
4027
  * `comment.received` webhook, which fires for every new comment across your posts and
3919
4028
  * carries the post reference needed to keep this list current.
3920
4029
  *
3921
- * For users with the Ads add-on (Metronome plans always qualify), the user's Meta ads
4030
+ * For users with the Ads add-on (accounts on usage-based billing always qualify), the user's Meta ads
3922
4031
  * (boosted/dark posts) are included too. There's one row per (ad, placement-with-comments):
3923
4032
  * an ad that runs on both Facebook feed and Instagram feed produces up to two rows (the
3924
4033
  * Page dark post and the IG media have separate comment threads), each flagged
@@ -4040,7 +4149,7 @@ export const editInboxComment = <ThrowOnError extends boolean = false>(options:
4040
4149
  * belongs to. You cannot moderate comments on videos you do not own.
4041
4150
  *
4042
4151
  * This is distinct from `POST /v1/inbox/comments/{postId}/{commentId}/hide`, which
4043
- * covers Facebook, Instagram, Threads, and X/Twitter and does not apply to YouTube.
4152
+ * covers Facebook, Instagram, Threads, and X and does not apply to YouTube.
4044
4153
  *
4045
4154
  */
4046
4155
  export const setCommentModeration = <ThrowOnError extends boolean = false>(options: OptionsLegacyParser<SetCommentModerationData, ThrowOnError>) => {
@@ -4052,9 +4161,9 @@ export const setCommentModeration = <ThrowOnError extends boolean = false>(optio
4052
4161
 
4053
4162
  /**
4054
4163
  * Hide comment
4055
- * Hide a comment on a post. Supported by Facebook, Instagram, Threads, and X/Twitter.
4164
+ * Hide a comment on a post. Supported by Facebook, Instagram, Threads, and X.
4056
4165
  * Hidden comments are only visible to the commenter and page admin.
4057
- * For X/Twitter, the reply must belong to a conversation started by the authenticated user.
4166
+ * For X, the reply must belong to a conversation started by the authenticated user.
4058
4167
  *
4059
4168
  */
4060
4169
  export const hideInboxComment = <ThrowOnError extends boolean = false>(options: OptionsLegacyParser<HideInboxCommentData, ThrowOnError>) => {
@@ -4066,7 +4175,7 @@ export const hideInboxComment = <ThrowOnError extends boolean = false>(options:
4066
4175
 
4067
4176
  /**
4068
4177
  * Unhide comment
4069
- * Unhide a previously hidden comment. Supported by Facebook, Instagram, Threads, and X/Twitter.
4178
+ * Unhide a previously hidden comment. Supported by Facebook, Instagram, Threads, and X.
4070
4179
  *
4071
4180
  */
4072
4181
  export const unhideInboxComment = <ThrowOnError extends boolean = false>(options: OptionsLegacyParser<UnhideInboxCommentData, ThrowOnError>) => {
@@ -4078,7 +4187,7 @@ export const unhideInboxComment = <ThrowOnError extends boolean = false>(options
4078
4187
 
4079
4188
  /**
4080
4189
  * Like comment
4081
- * Like or upvote a comment on a post. Supported platforms: Facebook, Twitter/X,
4190
+ * Like or upvote a comment on a post. Supported platforms: Facebook, X,
4082
4191
  * Bluesky, Reddit, LinkedIn, and Instagram in limited release (see below). For
4083
4192
  * Bluesky, the cid (content identifier) is
4084
4193
  * required in the request body. For LinkedIn, pass the composite comment URN returned
@@ -4112,7 +4221,7 @@ export const likeInboxComment = <ThrowOnError extends boolean = false>(options:
4112
4221
 
4113
4222
  /**
4114
4223
  * Unlike comment
4115
- * Remove a like from a comment. Supported platforms: Facebook, Twitter/X, Bluesky,
4224
+ * Remove a like from a comment. Supported platforms: Facebook, X, Bluesky,
4116
4225
  * Reddit, LinkedIn, and Instagram in limited release. For Bluesky, the likeUri query
4117
4226
  * parameter is required. Instagram has the same limited release, Facebook Login,
4118
4227
  * `instagram_manage_engagement` and burst-limit constraints as liking.
@@ -4128,7 +4237,7 @@ export const unlikeInboxComment = <ThrowOnError extends boolean = false>(options
4128
4237
  /**
4129
4238
  * Like post
4130
4239
  * Like (or react to) a post as a connected account. Supported platforms: LinkedIn,
4131
- * Twitter/X, Facebook, YouTube, Bluesky, and Instagram in limited release (see below).
4240
+ * X, Facebook, YouTube, Bluesky, and Instagram in limited release (see below).
4132
4241
  * Threads, TikTok and Pinterest
4133
4242
  * expose no like endpoint in their APIs and return 400. Reddit returns 400 too,
4134
4243
  * pointing at `POST /v1/accounts/{accountId}/reddit-vote`, which covers upvote,
@@ -4172,7 +4281,7 @@ export const likePost = <ThrowOnError extends boolean = false>(options: OptionsL
4172
4281
 
4173
4282
  /**
4174
4283
  * Unlike post
4175
- * Remove this account's like from a post. Supported platforms: LinkedIn, Twitter/X,
4284
+ * Remove this account's like from a post. Supported platforms: LinkedIn, X,
4176
4285
  * Facebook, YouTube, Bluesky, and Instagram in limited release. On YouTube this clears
4177
4286
  * the rating. Instagram has the same limited release, Facebook Login,
4178
4287
  * `instagram_manage_engagement` and burst-limit constraints as liking. For Bluesky,
@@ -4189,7 +4298,7 @@ export const unlikePost = <ThrowOnError extends boolean = false>(options: Option
4189
4298
 
4190
4299
  /**
4191
4300
  * Send private reply
4192
- * Send a private message to the author of a comment. Supported on Instagram and Facebook only.
4301
+ * Send a direct message to the author of a comment. Supported on Instagram and Facebook only.
4193
4302
  * One reply per comment, must be sent within 7 days. Optionally attach interactive elements:
4194
4303
  * `quickReplies` (chips above the keyboard, max 13) or `buttons` (1-3 inline postback/url
4195
4304
  * buttons rendered in the same bubble via Meta's button_template). Chips do not render in
@@ -4262,7 +4371,7 @@ export const removeBookmark = <ThrowOnError extends boolean = false>(options: Op
4262
4371
 
4263
4372
  /**
4264
4373
  * Follow a user
4265
- * Follow a user on X/Twitter.
4374
+ * Follow a user on X.
4266
4375
  * Requires the follows.write OAuth scope.
4267
4376
  * For protected accounts, a follow request is sent instead (pending_follow will be true).
4268
4377
  *
@@ -4276,7 +4385,7 @@ export const followUser = <ThrowOnError extends boolean = false>(options: Option
4276
4385
 
4277
4386
  /**
4278
4387
  * Unfollow a user
4279
- * Unfollow a user on X/Twitter.
4388
+ * Unfollow a user on X.
4280
4389
  *
4281
4390
  */
4282
4391
  export const unfollowUser = <ThrowOnError extends boolean = false>(options: OptionsLegacyParser<UnfollowUserData, ThrowOnError>) => {
@@ -4291,7 +4400,7 @@ export const unfollowUser = <ThrowOnError extends boolean = false>(options: Opti
4291
4400
  * Search public tweets from the last 7 days matching an X search query, e.g. to discover tweets to reply to.
4292
4401
  * The query string is passed through to X unchanged and supports X's search operators
4293
4402
  * (`from:user`, `-is:retweet`, `is:reply`, `lang:en`, `"exact phrase"`, `conversation_id:123`, boolean `OR`, ...).
4294
- * Note that standalone operators like `is:` / `has:` / `lang:` must be combined with a keyword or `from:` clause.
4403
+ * Standalone operators like `is:` / `has:` / `lang:` must be combined with a keyword or `from:` clause.
4295
4404
  *
4296
4405
  * To reply to a found tweet, pass its `id` as the twitter platform entry's `platformSpecificData.replyToTweetId` when creating a post.
4297
4406
  *
@@ -4352,7 +4461,7 @@ export const listInboxMentions = <ThrowOnError extends boolean = false>(options?
4352
4461
  *
4353
4462
  * Story mentions are not supported by Instagram's API.
4354
4463
  *
4355
- * Note that `GET /v1/inbox/mentions` currently returns LinkedIn mentions only and does
4464
+ * `GET /v1/inbox/mentions` currently returns LinkedIn mentions only and does
4356
4465
  * not surface Instagram mentions. Source `mediaId` and `commentId` from Instagram's
4357
4466
  * `comments` webhook, which is where mention notifications are delivered for accounts
4358
4467
  * connected through Instagram Login.
@@ -4367,8 +4476,8 @@ export const replyToMention = <ThrowOnError extends boolean = false>(options: Op
4367
4476
 
4368
4477
  /**
4369
4478
  * List reviews
4370
- * Fetch reviews from all connected Facebook Pages and Google Business accounts. Aggregates data with filtering and sorting options.
4371
- * Supported platforms: Facebook, Google Business.
4479
+ * Fetch reviews from all connected Facebook Pages and Google Business Profile accounts. Aggregates data with filtering and sorting options.
4480
+ * Supported platforms: Facebook, Google Business Profile.
4372
4481
  *
4373
4482
  */
4374
4483
  export const listInboxReviews = <ThrowOnError extends boolean = false>(options?: OptionsLegacyParser<ListInboxReviewsData, ThrowOnError>) => {
@@ -4408,7 +4517,7 @@ export const replyToInboxReview = <ThrowOnError extends boolean = false>(options
4408
4517
 
4409
4518
  /**
4410
4519
  * Delete review reply
4411
- * Delete a reply to a review (Google Business only). Requires accountId in request body.
4520
+ * Delete a reply to a review (Google Business Profile only). Requires accountId in request body.
4412
4521
  */
4413
4522
  export const deleteInboxReviewReply = <ThrowOnError extends boolean = false>(options: OptionsLegacyParser<DeleteInboxReviewReplyData, ThrowOnError>) => {
4414
4523
  return (options?.client ?? client).delete<DeleteInboxReviewReplyResponse, DeleteInboxReviewReplyError, ThrowOnError>({
@@ -4915,7 +5024,7 @@ export const getVoiceCallEstimate = <ThrowOnError extends boolean = false>(optio
4915
5024
  * `POST /v1/voice/calls/web/dial` with the returned `credentialId` to
4916
5025
  * place the call. The split avoids bridging to a browser that has not
4917
5026
  * finished registering. The token lives ~1 hour (it must outlive the
4918
- * whole call, not just the handshake).
5027
+ * whole call, not only the handshake).
4919
5028
  *
4920
5029
  */
4921
5030
  export const createVoiceWebSession = <ThrowOnError extends boolean = false>(options?: OptionsLegacyParser<unknown, ThrowOnError>) => {
@@ -5006,7 +5115,7 @@ export const listSmsOptOuts = <ThrowOnError extends boolean = false>(options?: O
5006
5115
 
5007
5116
  /**
5008
5117
  * Create an alphanumeric sender ID
5009
- * Registers an alphanumeric sender ID (e.g. `ZERNIO`) — a branded `from`
5118
+ * Registers an alphanumeric sender ID (e.g. `ZERNIO`), a branded `from`
5010
5119
  * for one-way international SMS. No phone number purchase or carrier
5011
5120
  * registration is needed; once created, pass it as `from` on
5012
5121
  * `POST /v1/sms/messages`.
@@ -5016,7 +5125,7 @@ export const listSmsOptOuts = <ThrowOnError extends boolean = false>(options?: O
5016
5125
  * text-only, and recipients cannot reply. Sender IDs that impersonate
5017
5126
  * well-known brands or institutions are rejected. Names are not
5018
5127
  * exclusive: the same sender ID can be registered by any number of
5019
- * workspaces. Creating the same sender ID again is a no-op
5128
+ * teams. Creating the same sender ID again is a no-op
5020
5129
  * (re-activates it after a delete).
5021
5130
  *
5022
5131
  */
@@ -5039,7 +5148,7 @@ export const listSmsSenderIds = <ThrowOnError extends boolean = false>(options?:
5039
5148
 
5040
5149
  /**
5041
5150
  * Request a higher sender ID daily limit
5042
- * Asks support to raise the workspace's daily sender-ID message cap.
5151
+ * Asks support to raise the team's daily sender-ID message cap.
5043
5152
  * There is no self-serve raise: the request (desired cap + use case) is
5044
5153
  * reviewed manually, usually within a business day.
5045
5154
  *
@@ -5120,8 +5229,8 @@ export const preflightSmsRegistration = <ThrowOnError extends boolean = false>(o
5120
5229
  * Deactivate a brand/campaign registration
5121
5230
  * Terminates the campaign with the carrier registry so the recurring
5122
5231
  * monthly campaign fee stops (carriers bill the first 3 months of a
5123
- * campaign regardless). Numbers covered by it can no longer SEND texts —
5124
- * receiving is unaffected — until they're registered under a new brand.
5232
+ * campaign regardless). Numbers covered by it can no longer SEND texts
5233
+ * (receiving is unaffected) until they're registered under a new brand.
5125
5234
  * Irreversible: a deactivated campaign cannot be restored; texting again
5126
5235
  * later requires a new registration (new one-time and review fees).
5127
5236
  * Idempotent.
@@ -5162,7 +5271,7 @@ export const verifySmsRegistrationOtp = <ThrowOnError extends boolean = false>(o
5162
5271
  /**
5163
5272
  * Re-send the sole-prop OTP
5164
5273
  * Re-sends the sole-proprietor verification PIN to the brand's mobile
5165
- * number — use it when the original code expired or never arrived. Only
5274
+ * number. Use it when the original code expired or never arrived. Only
5166
5275
  * valid while the registration is pending and awaiting its OTP; rate
5167
5276
  * limited to one send per minute.
5168
5277
  *
@@ -5201,7 +5310,7 @@ export const appealSmsRegistration = <ThrowOnError extends boolean = false>(opti
5201
5310
  * Replies to a reviewer change request on a registration in
5202
5311
  * `changes_requested` state: a note, hosted document URLs (from
5203
5312
  * `POST /v1/sms/opt-in-proof`), or both, sent together. The registration
5204
- * returns to `requested` (back in review) — no need to resubmit the
5313
+ * returns to `requested` (back in review), and you do not need to resubmit the
5205
5314
  * whole registration. To change the submitted brand/campaign fields
5206
5315
  * themselves, resubmit via `POST /v1/sms/registrations` with
5207
5316
  * `resubmitRequestId` instead.
@@ -5218,7 +5327,7 @@ export const respondToSmsRegistrationReview = <ThrowOnError extends boolean = fa
5218
5327
  * Upload opt-in form proof
5219
5328
  * Hosts a screenshot (or PDF) of your SMS opt-in form and returns its
5220
5329
  * public URL. Include that URL in the campaign's `messageFlow` (the
5221
- * opt-in workflow text) — the carrier registry has no attachment field,
5330
+ * opt-in workflow text). The carrier registry has no attachment field,
5222
5331
  * so reviewers verify consent by opening links in that answer. Works
5223
5332
  * before a registration exists (use it when registering) and for
5224
5333
  * appeals. `/v1/sms/registrations/{id}/opt-in-proof` is an alias.
@@ -5240,7 +5349,7 @@ export const uploadSmsOptInProofFile = <ThrowOnError extends boolean = false>(op
5240
5349
  * Upload opt-in form proof for an appeal
5241
5350
  * Hosts a screenshot (or PDF) of your SMS opt-in form and returns its
5242
5351
  * public URL. Carrier reviewers reject campaigns whose consent can't be
5243
- * verified and ask for a "link/screenshot of the opt-in form" — the
5352
+ * verified and ask for a "link/screenshot of the opt-in form". The
5244
5353
  * registry has no attachment field, so include the returned URL inside
5245
5354
  * the `messageFlow` you submit with the appeal
5246
5355
  * (`POST /v1/sms/registrations/{id}/appeal`).
@@ -5321,7 +5430,7 @@ export const updateWhatsAppBusinessProfile = <ThrowOnError extends boolean = fal
5321
5430
  * uploads the image bytes, then updates the business profile with the resulting handle.
5322
5431
  *
5323
5432
  * Provide the image either as a binary upload (`multipart/form-data` with `file`)
5324
- * or as a download URL (`application/json` with `url`) — with a URL we fetch the
5433
+ * or as a download URL (`application/json` with `url`). With a URL we fetch the
5325
5434
  * image server-side and upload the bytes for you. Meta's profile-photo API is
5326
5435
  * bytes-only, so there is no direct URL passthrough. JPEG/PNG, max 5MB either way.
5327
5436
  *
@@ -5529,7 +5638,7 @@ export const listWhatsAppAccountEvents = <ThrowOnError extends boolean = false>(
5529
5638
  * Get CTWA conversions dataset
5530
5639
  * Returns the Meta Click-to-WhatsApp conversions dataset currently linked
5531
5640
  * to the WhatsApp account, if one has been provisioned. Reads only from
5532
- * the stored `metadata.metaCapiDatasetId` — never hits Meta, never
5641
+ * the stored `metadata.metaCapiDatasetId`, never hits Meta, never
5533
5642
  * creates a dataset. Use this to detect whether `POST /v1/whatsapp/conversions`
5534
5643
  * is configured for an account.
5535
5644
  *
@@ -5547,7 +5656,7 @@ export const getWhatsAppDataset = <ThrowOnError extends boolean = false>(options
5547
5656
  * Click-to-WhatsApp ad events are reported against via the Conversions
5548
5657
  * API, and persists its ID on the account as `metadata.metaCapiDatasetId`.
5549
5658
  *
5550
- * The call is GET-first idempotent — a WABA can only own one CTWA
5659
+ * The call is GET-first idempotent: a WABA can only own one CTWA
5551
5660
  * dataset, so a second call after a successful provision is a safe no-op
5552
5661
  * that returns the same ID with `created: false`.
5553
5662
  *
@@ -5585,7 +5694,7 @@ export const listPhoneNumbers = <ThrowOnError extends boolean = false>(options?:
5585
5694
  * track Meta pre-verification (US sync path) and, for regulated (Tier 3/4)
5586
5695
  * numbers, the async lifecycle: pending_regulatory → active (or
5587
5696
  * regulatory_declined). When a regulated number has an Onfido ID step,
5588
- * `onfidoVerificationUrl` appears here once the order is placed — forward
5697
+ * `onfidoVerificationUrl` appears here once the order is placed. Forward
5589
5698
  * it to the end user. (Or subscribe to the whatsapp.number.* webhooks
5590
5699
  * instead of polling.)
5591
5700
  *
@@ -5600,7 +5709,7 @@ export const getPhoneNumber = <ThrowOnError extends boolean = false>(options: Op
5600
5709
  /**
5601
5710
  * Release phone number
5602
5711
  * Release a purchased phone number. This will:
5603
- * 1. Disconnect any linked WhatsApp social account
5712
+ * 1. Disconnect any linked WhatsApp account
5604
5713
  * 2. Decrement the Stripe subscription quantity (or cancel if last number)
5605
5714
  * 3. Release the number from Telnyx
5606
5715
  * 4. Mark the number as released
@@ -5696,7 +5805,7 @@ export const checkPhoneNumberAvailability = <ThrowOnError extends boolean = fals
5696
5805
  *
5697
5806
  * List all WhatsApp phone numbers purchased by the authenticated user.
5698
5807
  * By default, released numbers are excluded. Connected (bring-your-own)
5699
- * numbers are returned in the separate `connected` array — they are not
5808
+ * numbers are returned in the separate `connected` array. They are not
5700
5809
  * billed and have no provisioning lifecycle.
5701
5810
  *
5702
5811
  */
@@ -5826,7 +5935,7 @@ export const getPhoneNumberKycForm = <ThrowOnError extends boolean = false>(opti
5826
5935
  *
5827
5936
  * Before submitting, call GET /v1/phone-numbers/availability to
5828
5937
  * check the country has deliverable inventory and, for geographic-match
5829
- * countries, which area the address must be in — otherwise the submission
5938
+ * countries, which area the address must be in. Otherwise the submission
5830
5939
  * can pass review yet never be assignable a number.
5831
5940
  *
5832
5941
  */
@@ -5844,7 +5953,7 @@ export const submitPhoneNumberKyc = <ThrowOnError extends boolean = false>(optio
5844
5953
  * the account holder can see what's on file before reusing it. Returned
5845
5954
  * inline as `application/pdf` (uploads are normalized to PDF). Auth-scoped:
5846
5955
  * a document is viewable only when its id is referenced by one of the
5847
- * caller's own numbers — otherwise `404`.
5956
+ * caller's own numbers. Otherwise `404`.
5848
5957
  *
5849
5958
  */
5850
5959
  export const viewPhoneNumberKycDocument = <ThrowOnError extends boolean = false>(options: OptionsLegacyParser<ViewPhoneNumberKycDocumentData, ThrowOnError>) => {
@@ -5894,7 +6003,7 @@ export const validatePhoneNumberKycAddress = <ThrowOnError extends boolean = fal
5894
6003
  /**
5895
6004
  * Create a hosted KYC link
5896
6005
  * Create a single-use, 7-day hosted KYC link that your end customer
5897
- * completes WITHOUT a Zernio login — useful when the person who holds the
6006
+ * completes WITHOUT a Zernio login. Useful when the person who holds the
5898
6007
  * ID and address is not your team. They fill the regulated verification on
5899
6008
  * a Zernio-hosted page; the number provisions under YOUR account once they
5900
6009
  * submit. Only regulated (KYC) countries are valid: a country that does not
@@ -5902,7 +6011,7 @@ export const validatePhoneNumberKycAddress = <ThrowOnError extends boolean = fal
5902
6011
  *
5903
6012
  * White-label the page with `branding` (your company name, logo, brand
5904
6013
  * color). Supply `redirect_url` to send the end customer back to your own
5905
- * site after a successful submit (completion params are appended — see
6014
+ * site after a successful submit (completion params are appended; see
5906
6015
  * below). Listen for the `whatsapp.number.kyc_submitted` webhook to react
5907
6016
  * when the form is completed.
5908
6017
  *
@@ -5925,7 +6034,7 @@ export const createPhoneNumberKycLink = <ThrowOnError extends boolean = false>(o
5925
6034
  *
5926
6035
  * Run the portability check (POST /v1/phone-numbers/port-in/check) and
5927
6036
  * upload the two documents (POST /v1/phone-numbers/port-in/documents)
5928
- * first — uploaded documents must be attached to an order within 30
6037
+ * first. Uploaded documents must be attached to an order within 30
5929
6038
  * minutes or the carrier deletes them, so upload right before this call.
5930
6039
  * The carrier may split the numbers into several orders (by country,
5931
6040
  * number type, losing carrier); `orders` carries per-order results, and a
@@ -6000,7 +6109,7 @@ export const uploadPhoneNumberPortInDocument = <ThrowOnError extends boolean = f
6000
6109
  /**
6001
6110
  * Country porting requirements
6002
6111
  * The country-specific information a port-in needs BEYOND the LOA,
6003
- * invoice, and account/address details — e.g. an ID copy, proof of
6112
+ * invoice, and account/address details, such as an ID copy, proof of
6004
6113
  * address, a tax id, or a porting code. Call it after the portability
6005
6114
  * check (which returns each number's `countryCode` and
6006
6115
  * `phoneNumberType`), render the fields, and pass the collected values as
@@ -6068,7 +6177,7 @@ export const reviewPhoneNumberKycPacket = <ThrowOnError extends boolean = false>
6068
6177
  * Get declined requirements
6069
6178
  * For a number in `regulatory_declined`, returns ONLY the requirements the
6070
6179
  * reviewer flagged declined, as a form spec (same shape as the KYC form GET).
6071
- * The customer fixes just those — Telnyx supports correcting a declined
6180
+ * The customer fixes only those, because Telnyx supports correcting a declined
6072
6181
  * requirement group and re-submitting it (no new number/group). Falls back
6073
6182
  * to the full spec if the provider exposes no per-requirement flags.
6074
6183
  *
@@ -6086,7 +6195,7 @@ export const getPhoneNumberRemediation = <ThrowOnError extends boolean = false>(
6086
6195
  * PATCH them onto the SAME requirement group and re-submit it for approval;
6087
6196
  * the number goes `regulatory_declined` → `pending_regulatory`. No new
6088
6197
  * number and no new billing. Body shape matches the KYC submit (values /
6089
- * documents / address) — send only the corrected fields.
6198
+ * documents / address). Send only the corrected fields.
6090
6199
  *
6091
6200
  */
6092
6201
  export const remediatePhoneNumber = <ThrowOnError extends boolean = false>(options: OptionsLegacyParser<RemediatePhoneNumberData, ThrowOnError>) => {
@@ -6099,7 +6208,7 @@ export const remediatePhoneNumber = <ThrowOnError extends boolean = false>(optio
6099
6208
  /**
6100
6209
  * Reply to the regulatory reviewer
6101
6210
  * Post a free-text reply (with optional file attachments) to the reviewer
6102
- * on a number awaiting remediation — for asks the structured form can't
6211
+ * on a number awaiting remediation, for asks the structured form can't
6103
6212
  * express (e.g. "is this personal or business?"). Attachments are stored by
6104
6213
  * us and their links are added to the reviewer's comment thread (the
6105
6214
  * carrier's number order takes no loose files). A reply to a comment-style
@@ -6174,7 +6283,7 @@ export const getWhatsAppNumberKycForm = <ThrowOnError extends boolean = false>(o
6174
6283
  *
6175
6284
  * Before submitting, call GET /v1/whatsapp/phone-numbers/availability to
6176
6285
  * check the country has deliverable inventory and, for geographic-match
6177
- * countries, which area the address must be in — otherwise the submission
6286
+ * countries, which area the address must be in. Otherwise the submission
6178
6287
  * can pass review yet never be assignable a number.
6179
6288
  *
6180
6289
  */
@@ -6237,7 +6346,7 @@ export const validateWhatsAppNumberKycAddress = <ThrowOnError extends boolean =
6237
6346
  * integrations should use that path.
6238
6347
  *
6239
6348
  * Create a single-use, 7-day hosted KYC link that your end customer
6240
- * completes WITHOUT a Zernio login — useful when the person who holds the
6349
+ * completes WITHOUT a Zernio login. Useful when the person who holds the
6241
6350
  * ID and address is not your team. They fill the regulated verification on
6242
6351
  * a Zernio-hosted page; the number provisions under YOUR account once they
6243
6352
  * submit. Only regulated (KYC) countries are valid: a country that does not
@@ -6245,7 +6354,7 @@ export const validateWhatsAppNumberKycAddress = <ThrowOnError extends boolean =
6245
6354
  *
6246
6355
  * White-label the page with `branding` (your company name, logo, brand
6247
6356
  * color). Supply `redirect_url` to send the end customer back to your own
6248
- * site after a successful submit (completion params are appended — see
6357
+ * site after a successful submit (completion params are appended; see
6249
6358
  * below). Listen for the `whatsapp.number.kyc_submitted` webhook to react
6250
6359
  * when the form is completed.
6251
6360
  *
@@ -6267,7 +6376,7 @@ export const createWhatsAppNumberKycLink = <ThrowOnError extends boolean = false
6267
6376
  * carry a profileId and this endpoint moves them together.
6268
6377
  *
6269
6378
  * Use this instead of `PATCH /v1/accounts/{accountId}`: that one moves the
6270
- * social account only and leaves the number itself pinned to its original
6379
+ * account only and leaves the number itself pinned to its original
6271
6380
  * profile, which splits the number across two profiles. Connecting a
6272
6381
  * Zernio-provisioned number from any profile but its own is rejected with a
6273
6382
  * `409` (`WHATSAPP_NUMBER_PINNED_TO_PROFILE`). This endpoint is how you
@@ -6294,7 +6403,7 @@ export const moveWhatsAppNumberToProfile = <ThrowOnError extends boolean = false
6294
6403
  *
6295
6404
  * For a number in `regulatory_declined`, returns ONLY the requirements the
6296
6405
  * reviewer flagged declined, as a form spec (same shape as the KYC form GET).
6297
- * The customer fixes just those — Telnyx supports correcting a declined
6406
+ * The customer fixes only those, because Telnyx supports correcting a declined
6298
6407
  * requirement group and re-submitting it (no new number/group). Falls back
6299
6408
  * to the full spec if the provider exposes no per-requirement flags.
6300
6409
  *
@@ -6316,7 +6425,7 @@ export const getWhatsAppNumberRemediation = <ThrowOnError extends boolean = fals
6316
6425
  * PATCH them onto the SAME requirement group and re-submit it for approval;
6317
6426
  * the number goes `regulatory_declined` → `pending_regulatory`. No new
6318
6427
  * number and no new billing. Body shape matches the KYC submit (values /
6319
- * documents / address) — send only the corrected fields.
6428
+ * documents / address). Send only the corrected fields.
6320
6429
  *
6321
6430
  */
6322
6431
  export const remediateWhatsAppNumber = <ThrowOnError extends boolean = false>(options: OptionsLegacyParser<RemediateWhatsAppNumberData, ThrowOnError>) => {
@@ -6412,8 +6521,8 @@ export const deletePhoneNumberStockWatch = <ThrowOnError extends boolean = false
6412
6521
  *
6413
6522
  * The `digestPassword` is returned only by this call (and by
6414
6523
  * rotate-credentials); store it immediately. Attach any number of numbers
6415
- * to a trunk. Several trunks may point at the same host — each carries its
6416
- * own credentials and spend cap, so separate destination workspaces (e.g.
6524
+ * to a trunk. Several trunks may point at the same host. Each carries its
6525
+ * own credentials and spend cap, so separate destinations (e.g.
6417
6526
  * an agency's clients) stay isolated.
6418
6527
  *
6419
6528
  */
@@ -6510,7 +6619,7 @@ export const detachNumberFromSipTrunk = <ThrowOnError extends boolean = false>(o
6510
6619
  * US numbers additionally need a carrier registration before messages
6511
6620
  * deliver; the response tells you which path applies:
6512
6621
  * - `alreadyRegistered: true`: a prior registration still covers this
6513
- * number; SMS was simply reactivated.
6622
+ * number; SMS was reactivated.
6514
6623
  * - `reusable` set: you have an approved registration this number can
6515
6624
  * join in one click via
6516
6625
  * `POST /v1/phone-numbers/{id}/sms/reuse-registration`
@@ -6531,7 +6640,7 @@ export const enableSmsOnNumber = <ThrowOnError extends boolean = false>(options:
6531
6640
  /**
6532
6641
  * Disable SMS on a number
6533
6642
  * Turns off SMS for the number (deactivates its SMS account). The carrier
6534
- * registration is untouched, so re-enabling later just reactivates it,
6643
+ * registration is untouched, so re-enabling later reactivates it,
6535
6644
  * with no re-registration.
6536
6645
  *
6537
6646
  */
@@ -6565,7 +6674,7 @@ export const reuseSmsRegistrationForNumber = <ThrowOnError extends boolean = fal
6565
6674
  * sub-resource). Encrypted secrets are never returned; only a boolean
6566
6675
  * saying whether a SIP password is stored. The account-scoped read
6567
6676
  * (`GET /v1/whatsapp/calling?accountId=`) remains for callers that only
6568
- * know the social account id, and additionally carries account-level
6677
+ * know the account id, and additionally carries account-level
6569
6678
  * extras (billing eligibility, current-period spend).
6570
6679
  *
6571
6680
  */
@@ -6662,7 +6771,7 @@ export const verifyWhatsAppCallerId = <ThrowOnError extends boolean = false>(opt
6662
6771
  * track Meta pre-verification (US sync path) and, for regulated (Tier 3/4)
6663
6772
  * numbers, the async lifecycle: pending_regulatory → active (or
6664
6773
  * regulatory_declined). When a regulated number has an Onfido ID step,
6665
- * `onfidoVerificationUrl` appears here once the order is placed — forward
6774
+ * `onfidoVerificationUrl` appears here once the order is placed. Forward
6666
6775
  * it to the end user. (Or subscribe to the whatsapp.number.* webhooks
6667
6776
  * instead of polling.)
6668
6777
  *
@@ -6681,7 +6790,7 @@ export const getWhatsAppPhoneNumber = <ThrowOnError extends boolean = false>(opt
6681
6790
  * integrations should use that path.
6682
6791
  *
6683
6792
  * Release a purchased phone number. This will:
6684
- * 1. Disconnect any linked WhatsApp social account
6793
+ * 1. Disconnect any linked WhatsApp account
6685
6794
  * 2. Decrement the Stripe subscription quantity (or cancel if last number)
6686
6795
  * 3. Release the number from Telnyx
6687
6796
  * 4. Mark the number as released
@@ -6714,7 +6823,7 @@ export const listWhatsAppSandboxSessions = <ThrowOnError extends boolean = false
6714
6823
  * Creates (or refreshes) a pending sandbox session for the given phone and
6715
6824
  * immediately fires the verified sandbox template from the shared sandbox
6716
6825
  * number to that phone. The session activates when the phone owner replies
6717
- * to that WhatsApp message — the reply itself is proof of ownership.
6826
+ * to that WhatsApp message: the reply itself is proof of ownership.
6718
6827
  *
6719
6828
  * One phone per user: if the caller already has a non-expired session for
6720
6829
  * a DIFFERENT phone, the request is rejected with `invalid_field_value`
@@ -6738,8 +6847,8 @@ export const createWhatsAppSandboxSession = <ThrowOnError extends boolean = fals
6738
6847
  * Revoke a sandbox session
6739
6848
  * Hard-deletes the session. The user loses the ability to send to that
6740
6849
  * phone via the sandbox until they re-activate it. Existing conversations
6741
- * and messages already exchanged with that phone are untouched —
6742
- * revocation only blocks FUTURE sends.
6850
+ * and messages already exchanged with that phone are untouched.
6851
+ * Revocation only blocks FUTURE sends.
6743
6852
  *
6744
6853
  * Sessions belonging to other users cannot be revoked; the response is
6745
6854
  * the same 400 as "session not found" so existence isn't leaked.
@@ -7015,7 +7124,7 @@ export const getWhatsAppFlowPreview = <ThrowOnError extends boolean = false>(opt
7015
7124
  * List flow versions
7016
7125
  * List the flow's version history (the clone lineage Zernio tracks, since Meta has no
7017
7126
  * native versioning), newest version first. Each entry is enriched with the version's
7018
- * live name and status from Meta. A flow with no lineage returns just itself as version 1.
7127
+ * live name and status from Meta. A flow with no lineage returns only itself as version 1.
7019
7128
  *
7020
7129
  */
7021
7130
  export const listWhatsAppFlowVersions = <ThrowOnError extends boolean = false>(options: OptionsLegacyParser<ListWhatsAppFlowVersionsData, ThrowOnError>) => {
@@ -7104,7 +7213,7 @@ export const sendWhatsAppFlowMessage = <ThrowOnError extends boolean = false>(op
7104
7213
  * List flow responses
7105
7214
  * List the responses customers submitted when completing a flow (parsed from the
7106
7215
  * nfm_reply messages received via webhook), newest first. Scope to a single flow
7107
- * with `flowId` — this matches responses whose flow_token carries the `<flowId>:`
7216
+ * with `flowId`, which matches responses whose flow_token carries the `<flowId>:`
7108
7217
  * prefix that Zernio stamps on auto-generated tokens at send time. Responses sent
7109
7218
  * with a custom integrator-supplied flow_token are not attributed to a flow.
7110
7219
  *
@@ -7461,7 +7570,7 @@ export const listWorkflowExecutions = <ThrowOnError extends boolean = false>(opt
7461
7570
 
7462
7571
  /**
7463
7572
  * Manually start a workflow run
7464
- * Kick off a run without waiting for an inbound message (useful for testing). Target an existing conversation by `conversationId`, or — WhatsApp only — a phone number via `to` (a conversation is found or created). `text` seeds the run's `lastMessage` variable. The graph must be runnable.
7573
+ * Kick off a run without waiting for an inbound message (useful for testing). Target an existing conversation by `conversationId`, or (WhatsApp only) a phone number via `to` (a conversation is found or created). `text` seeds the run's `lastMessage` variable. The graph must be runnable.
7465
7574
  *
7466
7575
  */
7467
7576
  export const triggerWorkflow = <ThrowOnError extends boolean = false>(options: OptionsLegacyParser<TriggerWorkflowData, ThrowOnError>) => {
@@ -7485,7 +7594,7 @@ export const listWorkflowExecutionEvents = <ThrowOnError extends boolean = false
7485
7594
 
7486
7595
  /**
7487
7596
  * Duplicate a workflow
7488
- * Create an independent copy of a workflow's graph, name, description, and account binding. The copy is created in `draft` status with fresh execution counters and a new id — execution history is NOT copied. Useful for branching off a known-good workflow before making experimental edits.
7597
+ * Create an independent copy of a workflow's graph, name, description, and account binding. The copy is created in `draft` status with fresh execution counters and a new id. Execution history is NOT copied. Useful for branching off a known-good workflow before making experimental edits.
7489
7598
  *
7490
7599
  */
7491
7600
  export const duplicateWorkflow = <ThrowOnError extends boolean = false>(options: OptionsLegacyParser<DuplicateWorkflowData, ThrowOnError>) => {
@@ -7497,7 +7606,7 @@ export const duplicateWorkflow = <ThrowOnError extends boolean = false>(options:
7497
7606
 
7498
7607
  /**
7499
7608
  * List a workflow's version history
7500
- * Returns the snapshot history. A new version is recorded automatically before every PATCH to `nodes` / `edges` / `entryNodeId`, and explicitly when a previous version is restored. Lightweight list — call `getWorkflowVersion` for the full snapshot graph.
7609
+ * Returns the snapshot history. A new version is recorded automatically before every PATCH to `nodes` / `edges` / `entryNodeId`, and explicitly when a previous version is restored. Lightweight list. Call `getWorkflowVersion` for the full snapshot graph.
7501
7610
  *
7502
7611
  */
7503
7612
  export const listWorkflowVersions = <ThrowOnError extends boolean = false>(options: OptionsLegacyParser<ListWorkflowVersionsData, ThrowOnError>) => {
@@ -7751,7 +7860,7 @@ export const listCommentAutomationLogs = <ThrowOnError extends boolean = false>(
7751
7860
  *
7752
7861
  * To find the Zernio ad behind a comment you see in Meta Business Manager, filter by
7753
7862
  * platformAdId (the Meta ad ID), effectiveObjectStoryId (Facebook), or
7754
- * effectiveInstagramMediaId (Instagram) — those are the post/media the ad's engagement
7863
+ * effectiveInstagramMediaId (Instagram). Those are the post/media the ad's engagement
7755
7864
  * lives on, and are also returned on each ad's `creative` object. Then call
7756
7865
  * GET /v1/ads/{adId}/comments with the returned ad id.
7757
7866
  *
@@ -7766,7 +7875,7 @@ export const listAds = <ThrowOnError extends boolean = false>(options?: OptionsL
7766
7875
  /**
7767
7876
  * Google Ads search terms report
7768
7877
  * The actual search queries that triggered your ads, with matched-keyword
7769
- * status and spend metrics — the raw material for wasted-spend analysis and
7878
+ * status and spend metrics, the raw material for wasted-spend analysis and
7770
7879
  * negative-keyword lists. Reads Google's `search_term_view`, cached for
7771
7880
  * the quota window; defaults to the last 30 days. Rows are ordered by
7772
7881
  * cost, descending. Draws on the shared Google Ads operations budget.
@@ -7954,7 +8063,7 @@ export const createAdCampaign = <ThrowOnError extends boolean = false>(options:
7954
8063
  * `updated` / `skipped` describe only the ads whose own stored status CHANGED alongside it, so
7955
8064
  * `updated: 0` is a normal successful response, not a no-op. Ads are skipped when they are in a terminal
7956
8065
  * status (rejected, completed, cancelled), already in the target state, or switched on but not yet
7957
- * delivering — the last group keeps its `pending_review` / `error` status until the platform reports what
8066
+ * delivering. The last group keeps its `pending_review` / `error` status until the platform reports what
7958
8067
  * it became. `skippedReasons` names which case applies.
7959
8068
  *
7960
8069
  * On Meta this flips the campaign only. An ad set paused in its own right stays paused, so pair this with
@@ -8001,7 +8110,7 @@ export const getCampaignBidding = <ThrowOnError extends boolean = false>(options
8001
8110
  * | Body field | Meta | Google | Others |
8002
8111
  * |---|---|---|---|
8003
8112
  * | `bidStrategy` | Yes | Yes | 501 |
8004
- * | `bidAmount`, `roasAverageFloor` | 400 — ad-set level | Yes | 400 |
8113
+ * | `bidAmount`, `roasAverageFloor` | 400 (ad-set level) | Yes | 400 |
8005
8114
  * | `portfolioBidStrategyId` | 400 | Yes | 400 |
8006
8115
  * | `budget` (CBO; ABO returns 409) | Yes | 501 | 501 |
8007
8116
  * | `name` | Yes | 501 | 501 |
@@ -8125,9 +8234,9 @@ export const bulkUpdateAdCampaignStatus = <ThrowOnError extends boolean = false>
8125
8234
  * any Group / Campaign / Creative whose source is `ACTIVE` gets its
8126
8235
  * clone activated too. Duplicating an ACTIVE campaign with
8127
8236
  * `INHERITED_FROM_SOURCE` starts a second front of spend the moment
8128
- * the clone activates — the safe default is `PAUSED`.
8237
+ * the clone activates. The safe default is `PAUSED`.
8129
8238
  *
8130
- * The new hierarchy is asynchronous to materialize in our DB — we
8239
+ * The new hierarchy is asynchronous to materialize in our DB, and we
8131
8240
  * trigger sync discovery automatically. Set `syncAfter: false` to
8132
8241
  * skip and poll `/v1/ads/tree` on your own cadence.
8133
8242
  *
@@ -8196,9 +8305,9 @@ export const updateCampaignTargeting = <ThrowOnError extends boolean = false>(op
8196
8305
  * Ad sets (Google ad groups) synced for the connection, optionally
8197
8306
  * filtered by platform and campaignId. Reads the `ad_sets` table
8198
8307
  * directly, independent of the `ads` rollup GET /v1/ads/tree uses, so a
8199
- * just-created standalone ad group with no ad yet (POST /v1/ads/ad-sets,
8308
+ * newly created standalone ad group with no ad yet (POST /v1/ads/ad-sets,
8200
8309
  * Google only) is visible here even though it is invisible in the tree
8201
- * until an ad joins it via `existingAdGroupId`. Returns at most 500
8310
+ * until an ad joins it via `adSetId` on POST /v1/ads/create. Returns at most 500
8202
8311
  * rows, newest first.
8203
8312
  */
8204
8313
  export const listAdSets = <ThrowOnError extends boolean = false>(options?: OptionsLegacyParser<ListAdSetsData, ThrowOnError>) => {
@@ -8211,7 +8320,7 @@ export const listAdSets = <ThrowOnError extends boolean = false>(options?: Optio
8211
8320
  /**
8212
8321
  * Create a standalone ad group
8213
8322
  * Google Ads compliance row C.190: creates an ad group WITHOUT an ad,
8214
- * under an existing campaign. Ads join it later via `existingAdGroupId`
8323
+ * under an existing campaign. Ads join it later via `adSetId`
8215
8324
  * on POST /v1/ads/create. Google only; every other platform returns 501.
8216
8325
  *
8217
8326
  * Created `PAUSED` unless `status: ACTIVE`. The new ad group has no ad
@@ -8233,7 +8342,7 @@ export const createAdSet = <ThrowOnError extends boolean = false>(options: Optio
8233
8342
  * Duplicates an ad set, including its ads and creatives by default (`deepCopy: true`),
8234
8343
  * via Meta's native `POST /{adset-id}/copies`. The copy is created paused so callers can
8235
8344
  * review before launching. `campaignId` retargets the copy into another campaign; omitted
8236
- * = the source's own campaign. The new hierarchy materializes asynchronously — sync
8345
+ * = the source's own campaign. The new hierarchy materializes asynchronously, and sync
8237
8346
  * discovery is triggered automatically (`syncAfter: false` to skip).
8238
8347
  */
8239
8348
  export const duplicateAdSet = <ThrowOnError extends boolean = false>(options: OptionsLegacyParser<DuplicateAdSetData, ThrowOnError>) => {
@@ -8260,7 +8369,7 @@ export const duplicateAd = <ThrowOnError extends boolean = false>(options: Optio
8260
8369
  /**
8261
8370
  * Live ad-set details incl. learning phase
8262
8371
  * Reads the ad set live from Meta, returned verbatim. The default projection includes
8263
- * `learning_stage_info` (learning-phase status: LEARNING / SUCCESS / FAIL / WAIVING — Meta
8372
+ * `learning_stage_info` (learning-phase status: LEARNING / SUCCESS / FAIL / WAIVING; Meta
8264
8373
  * omits its `status` key on paused ad sets), delivery settings, budgets, schedule and
8265
8374
  * targeting. `fields` is a raw-passthrough override; unknown fields return Meta's 400
8266
8375
  * verbatim.
@@ -8309,7 +8418,7 @@ export const getAdSetDetails = <ThrowOnError extends boolean = false>(options: O
8309
8418
  * doesn't allow) surface as 400s from Meta.
8310
8419
  *
8311
8420
  * When updating `budget` on an ABO campaign: if the parent campaign is
8312
- * CBO, the response is 409 with code BUDGET_LEVEL_MISMATCH — route to
8421
+ * CBO, the response is 409 with code BUDGET_LEVEL_MISMATCH. Route to
8313
8422
  * PUT /v1/ads/campaigns/{campaignId} instead.
8314
8423
  *
8315
8424
  */
@@ -8347,7 +8456,7 @@ export const deleteAdSet = <ThrowOnError extends boolean = false>(options: Optio
8347
8456
  * /v1/ads/campaigns/{campaignId}/status.
8348
8457
  *
8349
8458
  * On Meta and LinkedIn this writes the ad set's own on/off switch
8350
- * (Meta: `configured_status`), whatever delivery status its ads report —
8459
+ * (Meta: `configured_status`), whatever delivery status its ads report:
8351
8460
  * an ad still in review does not block resuming its ad set. The echoed
8352
8461
  * `status` is the confirmation that it landed. Where the platform has no
8353
8462
  * ad-set switch (TikTok and others) the toggle is emulated by flipping the
@@ -8402,13 +8511,13 @@ export const getAdTree = <ThrowOnError extends boolean = false>(options?: Option
8402
8511
  /**
8403
8512
  * Get daily account metrics
8404
8513
  * Returns daily aggregate metrics across all ads in a SocialAccount as a single
8405
- * time series — one row per calendar day in the requested range. Use this for
8514
+ * time series, one row per calendar day in the requested range. Use this for
8406
8515
  * dashboards that draw a daily-spend or daily-conversions chart, instead of
8407
8516
  * calling `/v1/ads/tree` once per day.
8408
8517
  *
8409
8518
  * `accountId` is required. The lookup is sibling-expanded so passing the `metaads`
8410
8519
  * ID also includes ads under the linked `facebook` / `instagram` posting account
8411
- * (and vice-versa) — same convention as `/v1/ads/tree` and `/v1/ads`.
8520
+ * (and vice-versa), the same convention as `/v1/ads/tree` and `/v1/ads`.
8412
8521
  *
8413
8522
  * Date range defaults to the last 90 days. Capped at 730 days. Ranges older
8414
8523
  * than the ingested history return a `202` immediately with the covered part
@@ -8453,16 +8562,18 @@ export const getAd = <ThrowOnError extends boolean = false>(options: OptionsLega
8453
8562
  * Per-platform support:
8454
8563
  * - **Meta** (Facebook + Instagram): all fields supported.
8455
8564
  * - **TikTok**: status, budget, targeting (via `/v2/adgroup/update/`), and creative
8456
- * (via `/v2/ad/update/` patch-style — `headline` is ignored, `body` becomes `ad_text`).
8565
+ * (via `/v2/ad/update/` patch-style: `headline` is ignored, `body` becomes `ad_text`).
8457
8566
  * - **Google**: status, budget, KEYWORD edits via `targeting.keywords` /
8458
- * `targeting.negativeKeywords`, and DEVICE bid adjustments via `targeting.devices`
8459
- * — each list you send becomes the FULL new set of its kind (criteria not in the
8567
+ * `targeting.negativeKeywords`, and DEVICE bid adjustments via `targeting.devices`.
8568
+ * Each list you send becomes the FULL new set of its kind (criteria not in the
8460
8569
  * list are removed); a kind left out is untouched. Any other `targeting` field
8461
8570
  * returns 400: Google cannot mutate broad targeting post-create without recreating
8462
8571
  * the campaign. `creative` returns 501.
8463
- * - **LinkedIn**: status, budget, targeting (geo countries only, applied to the
8464
- * LinkedIn Campaign via PARTIAL_UPDATE), and creative (uploads new media, creates a
8465
- * replacement inline creative on the same campaign, pauses the old one).
8572
+ * - **LinkedIn**: status, budget, targeting (countries or regions, excludedLocations (countries),
8573
+ * the B2B facets, and audience segments; applied to the LinkedIn Campaign via
8574
+ * PARTIAL_UPDATE, and REPLACES the campaign's entire targetingCriteria, not a merge),
8575
+ * and creative (uploads new media, creates a replacement inline creative on the same
8576
+ * campaign, pauses the old one).
8466
8577
  * - **Pinterest / X / OpenAI Ads**: status + budget only. Sending
8467
8578
  * `targeting` or `creative` returns 501 with code `unsupported_platform_operation`.
8468
8579
  * OpenAI Ads budget is lifetime-only (see `budget.type` below).
@@ -8514,7 +8625,7 @@ export const deleteAd = <ThrowOnError extends boolean = false>(options: OptionsL
8514
8625
 
8515
8626
  /**
8516
8627
  * Pause or resume a single ad
8517
- * Ad-scoped pause/resume — touches ONLY this ad, never its parent ad set or
8628
+ * Ad-scoped pause/resume: touches ONLY this ad, never its parent ad set or
8518
8629
  * campaign (so sibling ads keep running). Thin wrapper over the `status`
8519
8630
  * field of PUT /v1/ads/{adId}, for callers that want a URL symmetric to
8520
8631
  * /v1/ads/campaigns/{campaignId}/status and /v1/ads/ad-sets/{adSetId}/status.
@@ -8536,7 +8647,7 @@ export const updateAdStatus = <ThrowOnError extends boolean = false>(options: Op
8536
8647
  /**
8537
8648
  * Attach extension assets to a Google Search campaign
8538
8649
  * Attach sitelinks, callouts and/or structured snippets to an already-existing Google
8539
- * Search campaign — the same builders POST /v1/ads/create uses, but without rebuilding
8650
+ * Search campaign. These are the same builders POST /v1/ads/create uses, but without rebuilding
8540
8651
  * the hierarchy. At least one of sitelinks, callouts or structuredSnippets is required.
8541
8652
  *
8542
8653
  * Google-only. Other platforms have no equivalent extension surface and return 501.
@@ -8607,7 +8718,7 @@ export const getAdPreviews = <ThrowOnError extends boolean = false>(options: Opt
8607
8718
  *
8608
8719
  * Reads Meta live rather than the stored creative blob because Meta's signed fbcdn
8609
8720
  * URLs carry an `oe=<hex>` expiration (image_url ~24 h, video source ~12 d). Treat
8610
- * URLs as short-lived — re-fetch this endpoint before serving or downloading assets
8721
+ * URLs as short-lived: re-fetch this endpoint before serving or downloading assets
8611
8722
  * instead of caching URLs beyond that window.
8612
8723
  */
8613
8724
  export const getAdMedia = <ThrowOnError extends boolean = false>(options: OptionsLegacyParser<GetAdMediaData, ThrowOnError>) => {
@@ -8744,7 +8855,7 @@ export const getAdTrackingTags = <ThrowOnError extends boolean = false>(options:
8744
8855
  * - Meta: `urlTags` (array of {key,value}). Meta creatives are immutable, so this rebuilds the
8745
8856
  * creative and repoints the ad. By DEFAULT we PRESERVE the existing creative verbatim
8746
8857
  * (re-post its object_story_spec + the new url_tags, reusing the image), so you send `urlTags`
8747
- * ALONE — no need to read back headline/body/CTA. `creative` (headline, body, callToAction,
8858
+ * ALONE, with no need to read back headline/body/CTA. `creative` (headline, body, callToAction,
8748
8859
  * linkUrl, imageUrl) is OPTIONAL and only needed to rebuild explicitly, or for SHARE / page-post
8749
8860
  * / dark / asset_feed creatives whose object_story_spec Meta strips (those return 422 asking for
8750
8861
  * `creative`).
@@ -8774,7 +8885,7 @@ export const updateAdTrackingTags = <ThrowOnError extends boolean = false>(optio
8774
8885
  * fallback for ads that predate the field.
8775
8886
  *
8776
8887
  * For Instagram-placed comments, the Instagram account that runs the ad must be connected
8777
- * to Zernio — those comments are read through that account's token. If no connected
8888
+ * to Zernio, because those comments are read through that account's token. If no connected
8778
8889
  * Instagram account on the profile can read the ad's media, the call returns
8779
8890
  * ads_connection_required (the Facebook side, if any, is still readable via ?placement=facebook).
8780
8891
  *
@@ -8830,7 +8941,7 @@ export const getAdsActivityLog = <ThrowOnError extends boolean = false>(options:
8830
8941
 
8831
8942
  /**
8832
8943
  * Create a Reach & Frequency prediction
8833
- * Creates an R&F prediction — a QUOTE, nothing is bought and no ad entities are created.
8944
+ * Creates an R&F prediction. This is a QUOTE, nothing is bought and no ad entities are created.
8834
8945
  * Provide a date range plus exactly one of `budgetAmount` (Meta predicts reach) or `reach`
8835
8946
  * (Meta predicts the budget). The response carries the estimate and its allowed bounds
8836
8947
  * (min/max budget and reach). Predictions expire on their own; to buy, reserve one via
@@ -8873,7 +8984,7 @@ export const cancelRfReservation = <ThrowOnError extends boolean = false>(option
8873
8984
  /**
8874
8985
  * Reserve a Reach & Frequency prediction
8875
8986
  * Locks the quoted price + inventory until the returned `expiresAt` and mints a NEW
8876
- * prediction id — pass that RESERVED id (not the original) as `rfPredictionId` on
8987
+ * prediction id. Pass that RESERVED id (not the original) as `rfPredictionId` on
8877
8988
  * POST /v1/ads/create. Release an unused reservation via DELETE.
8878
8989
  */
8879
8990
  export const reserveRfPrediction = <ThrowOnError extends boolean = false>(options: OptionsLegacyParser<ReserveRfPredictionData, ThrowOnError>) => {
@@ -8944,7 +9055,7 @@ export const listHighDemandPeriods = <ThrowOnError extends boolean = false>(opti
8944
9055
  *
8945
9056
  * Two Meta constraints worth knowing before you call it. `timeStart` / `timeEnd` must
8946
9057
  * fall on a 15-minute boundary, and a campaign cannot mix `ABSOLUTE` and `MULTIPLIER`
8947
- * across its schedules — the second type is rejected with "Can't mix your budget scaling
9058
+ * across its schedules; the second type is rejected with "Can't mix your budget scaling
8948
9059
  * selection". Window rules (must sit inside the campaign's run dates, minimum lead time,
8949
9060
  * no overlap) are Meta's and its message is forwarded verbatim.
8950
9061
  */
@@ -8999,7 +9110,7 @@ export const getAdCreative = <ThrowOnError extends boolean = false>(options: Opt
8999
9110
 
9000
9111
  /**
9001
9112
  * Rename a creative
9002
- * Renames a creative. Creatives are immutable on Meta beyond `name` — for content changes
9113
+ * Renames a creative. Creatives are immutable on Meta beyond `name`. For content changes
9003
9114
  * create a new creative (POST /v1/ads/creatives) and swap it onto the ad
9004
9115
  * (PUT /v1/ads/{adId} with `creative`).
9005
9116
  */
@@ -9013,7 +9124,7 @@ export const updateAdCreative = <ThrowOnError extends boolean = false>(options:
9013
9124
  /**
9014
9125
  * Delete a creative
9015
9126
  * Deletes a creative from the library. Meta only allows deleting creatives not referenced
9016
- * by any ad — otherwise its 400 surfaces verbatim.
9127
+ * by any ad; otherwise its 400 surfaces verbatim.
9017
9128
  */
9018
9129
  export const deleteAdCreative = <ThrowOnError extends boolean = false>(options: OptionsLegacyParser<DeleteAdCreativeData, ThrowOnError>) => {
9019
9130
  return (options?.client ?? client).delete<DeleteAdCreativeResponse, DeleteAdCreativeError, ThrowOnError>({
@@ -9204,7 +9315,7 @@ export const getAdAccountFinance = <ThrowOnError extends boolean = false>(option
9204
9315
 
9205
9316
  /**
9206
9317
  * List ad accounts
9207
- * Returns the platform ad accounts available for the given social account (e.g. Meta ad
9318
+ * Returns the platform ad accounts available for the given account (e.g. Meta ad
9208
9319
  * accounts, TikTok advertiser IDs, Google Ads customer IDs).
9209
9320
  *
9210
9321
  * For TikTok agencies: enumerates every advertiser under every Business Center the token
@@ -9319,9 +9430,20 @@ export const boostPost = <ThrowOnError extends boolean = false>(options: Options
9319
9430
 
9320
9431
  /**
9321
9432
  * Create standalone ad
9322
- * Creates a paid ad with custom creative across Meta, Google Ads, Pinterest, TikTok, X/Twitter, LinkedIn, and OpenAI Ads (ChatGPT Ads). Supports three mutually-exclusive request shapes selected by the body, a legacy single-creative shape (all platforms, default), a Meta-only multi-creative shape via the creatives array (one ad set with N ads sharing budget and targeting), and an attach shape via adSetId that adds one new ad to an existing ad set, inheriting its budget, targeting, and schedule (Meta, TikTok, and LinkedIn; on LinkedIn adSetId is the existing Campaign id, and the budget, schedule, targeting and bidding fields must be omitted). Per-platform required fields, budget minimums, and video-ad rules are documented on each property below. LinkedIn creates a Single Image or Single Video Ad backed by a Direct Sponsored Content "dark post" authored by a Company Page (see `organizationId`); supported goals are engagement, traffic, awareness, and video_views (video ads use the `video` field; video_views requires a video), and traffic ads require `linkUrl`.
9433
+ * Create a paid ad with custom creative across Meta, Google Ads, Pinterest, TikTok, X, LinkedIn, and OpenAI Ads (ChatGPT Ads).
9434
+ *
9435
+ * Three mutually-exclusive request shapes are selected by the body:
9436
+ *
9437
+ * - Legacy single-creative shape (all platforms, the default).
9438
+ * - Meta-only multi-creative shape via the creatives array: one ad set with N ads sharing budget and targeting.
9439
+ * - Attach shape via adSetId: adds one new ad to an existing ad set, inheriting its budget, targeting, and schedule (Meta, Google Ads, TikTok, and LinkedIn). On LinkedIn adSetId is the existing Campaign id, and the budget, schedule, targeting and bidding fields must be omitted.
9440
+ *
9441
+ * Per-platform required fields, budget minimums, and video-ad rules are documented on each property below.
9442
+ *
9443
+ * LinkedIn creates a Single Image or Single Video Ad backed by a Direct Sponsored Content "dark post" authored by a Company Page (see `organizationId`). Supported goals are engagement, traffic, awareness, and video_views (video ads use the `video` field; video_views requires a video), and traffic ads require `linkUrl`.
9323
9444
  *
9324
9445
  * **Idempotency:** this endpoint is not idempotent at the platform level (a blind retry creates a second campaign/ad set/ad). Send an `Idempotency-Key` header to make retries safe: the first request with a given key creates the ad and we store the response; a retry with the same key replays that exact response (with `Idempotent-Replayed: true`) instead of creating duplicates. Reusing a key with a different body returns 422; a key whose first request is still in flight returns 409 (retry after a short backoff). Keys are scoped to your credential and expire after 24h.
9446
+ *
9325
9447
  */
9326
9448
  export const createStandaloneAd = <ThrowOnError extends boolean = false>(options: OptionsLegacyParser<CreateStandaloneAdData, ThrowOnError>) => {
9327
9449
  return (options?.client ?? client).post<CreateStandaloneAdResponse, CreateStandaloneAdError, ThrowOnError>({
@@ -9344,7 +9466,7 @@ export const listLeads = <ThrowOnError extends boolean = false>(options?: Option
9344
9466
 
9345
9467
  /**
9346
9468
  * List lead forms
9347
- * Lists the Lead Gen forms owned by the account. Meta: forms on the connected Facebook Page. LinkedIn: forms owned by the ad account's Company Page — pass `adAccountId` (LinkedIn forms are org-owned). Requires the Ads add-on.
9469
+ * Lists the Lead Gen forms owned by the account. Meta: forms on the connected Facebook Page. LinkedIn: forms owned by the ad account's Company Page. Pass `adAccountId` (LinkedIn forms are org-owned). Requires the Ads add-on.
9348
9470
  *
9349
9471
  */
9350
9472
  export const listLeadForms = <ThrowOnError extends boolean = false>(options: OptionsLegacyParser<ListLeadFormsData, ThrowOnError>) => {
@@ -9356,7 +9478,7 @@ export const listLeadForms = <ThrowOnError extends boolean = false>(options: Opt
9356
9478
 
9357
9479
  /**
9358
9480
  * Create a lead form
9359
- * Creates a Lead Gen form. The form content goes inside `platformSpecificData` for both platforms (the shape is selected by the accountId's platform). Meta: created on the connected Facebook Page (POST /{page-id}/leadgen_forms); the old top-level Meta fields (questions, thankYou*, contextCard, …) are DEPRECATED but still accepted while platformSpecificData is absent — mixing both shapes is a 400. LinkedIn: created on the ad account's Company Page. NOT idempotent — a retry creates a second form. Meta prefilled question types (EMAIL, PHONE, FULL_NAME, …) must omit label/key; CUSTOM questions require both. LinkedIn exposes only free-text and multiple-choice questions via API (prefilled-from-profile fields are Campaign Manager UI-only). Requires the Ads add-on.
9481
+ * Creates a Lead Gen form. The form content goes inside `platformSpecificData` for both platforms (the shape is selected by the accountId's platform). Meta: created on the connected Facebook Page (POST /{page-id}/leadgen_forms); the old top-level Meta fields (questions, thankYou*, contextCard, …) are DEPRECATED but still accepted while platformSpecificData is absent; mixing both shapes is a 400. LinkedIn: created on the ad account's Company Page. NOT idempotent: a retry creates a second form. Meta prefilled question types (EMAIL, PHONE, FULL_NAME, …) must omit label/key; CUSTOM questions require both. LinkedIn exposes only free-text and multiple-choice questions via API (prefilled-from-profile fields are Campaign Manager UI-only). Requires the Ads add-on.
9360
9482
  *
9361
9483
  */
9362
9484
  export const createLeadForm = <ThrowOnError extends boolean = false>(options: OptionsLegacyParser<CreateLeadFormData, ThrowOnError>) => {
@@ -9413,7 +9535,7 @@ export const createTestLead = <ThrowOnError extends boolean = false>(options: Op
9413
9535
 
9414
9536
  /**
9415
9537
  * Upload an ad image from base64
9416
- * Uploads raw image bytes to the Meta ad account's image library — for callers whose
9538
+ * Uploads raw image bytes to the Meta ad account's image library, for callers whose
9417
9539
  * creatives aren't hosted at a public URL. Returns the image `hash` (Meta's identifier for
9418
9540
  * the asset) and the Meta-hosted `url`, which can be used directly as `imageUrl` on the
9419
9541
  * create endpoints. Max 30 MB decoded.
@@ -9447,7 +9569,7 @@ export const listAdImages = <ThrowOnError extends boolean = false>(options: Opti
9447
9569
  *
9448
9570
  * Accepts either an https `videoUrl` we download server-side (SSRF-guarded) or raw
9449
9571
  * `videoBase64` bytes; exactly one is required. `videoBase64` is capped by Vercel's body
9450
- * limit — around 4.5 MB payload in practice, so larger videos must come via `videoUrl`.
9572
+ * limit, around 4.5 MB payload in practice, so larger videos must come via `videoUrl`.
9451
9573
  *
9452
9574
  * Returns the Meta `video.id` (reusable wherever `video.id` is accepted) plus Meta's
9453
9575
  * auto-generated poster URL when available. The endpoint waits until Meta reports the
@@ -9470,7 +9592,7 @@ export const uploadAdVideo = <ThrowOnError extends boolean = false>(options: Opt
9470
9592
  *
9471
9593
  * `source` lets you PLAY a video before picking it, which a poster frame alone can't settle
9472
9594
  * when several videos share a first frame. It is a signed CDN URL that EXPIRES, so treat it
9473
- * as good for preview at selection time only — never persist it, re-list to get a fresh one.
9595
+ * as good for preview at selection time only. Never persist it; re-list to get a fresh one.
9474
9596
  *
9475
9597
  * This is the only way to reach a video uploaded OUTSIDE Zernio (Ads Manager, another
9476
9598
  * tool); videos we uploaded also come back as `creative.videoId` on GET /v1/ads.
@@ -9525,22 +9647,28 @@ export const searchAdInterests = <ThrowOnError extends boolean = false>(options:
9525
9647
  * `interests`/`behaviors` entity ids) on `POST /v1/ads/create`,
9526
9648
  * `POST /v1/ads/targeting/reach-estimate`, and `saved_targeting` audiences.
9527
9649
  *
9528
- * The `dimension` param selects what is searched, `geo` (locations, further scoped
9529
- * by `geoType`), `interest`, `behavior`, `income`, `language` (Google-only), or the
9530
- * Meta-only work demographics `workPosition`, `workEmployer` and `workIndustry` (their
9531
- * ids feed `TargetingSpec.workPositions`/`workEmployers`/`workIndustries`). Availability
9532
- * of each dimension varies by platform (e.g. behaviours are Meta/TikTok only).
9650
+ * The `dimension` param selects what is searched:
9651
+ *
9652
+ * - `geo`: locations, further scoped by `geoType`
9653
+ * - `interest`
9654
+ * - `behavior`
9655
+ * - `income`
9656
+ * - `language`: Google-only
9657
+ * - `workPosition`, `workEmployer`, `workIndustry`: the Meta-only work demographics, whose
9658
+ * ids feed `TargetingSpec.workPositions`/`workEmployers`/`workIndustries`
9659
+ *
9660
+ * Availability of each dimension varies by platform (e.g. behaviours are Meta/TikTok only).
9533
9661
  * Work industries are a fixed ~30-entry Meta catalog with no server-side query,
9534
9662
  * so `workIndustry` matching, ranking and `limit` happen in Zernio. `language`
9535
9663
  * is likewise a fixed, checked-in table of Google's targetable
9536
9664
  * `language_constant` rows (id, ISO code, name) matched by name or code, capped
9537
9665
  * at 20, with no network call; its ids feed `TargetingSpec.languages`.
9538
- * Results are normalized
9539
- * across platforms into a single shape, so the same client code consumes Meta,
9540
- * TikTok, LinkedIn, X, Pinterest, and Google results.
9666
+ *
9667
+ * Results are normalized across platforms into a single shape, so the same client code
9668
+ * consumes Meta, TikTok, LinkedIn, X, Pinterest, and Google results.
9541
9669
  *
9542
9670
  * TikTok geo searches return every matching level in one list (`type` is
9543
- * `country`, `region`, `city`, `district`, or `metro` for DMA areas) —
9671
+ * `country`, `region`, `city`, `district`, or `metro` for DMA areas), and
9544
9672
  * `geoType` is not applied. Results are scoped to the advertiser's targetable
9545
9673
  * markets, and every id is usable in `regions`/`cities`/`metros` keys on
9546
9674
  * `POST /v1/ads/create`.
@@ -9568,15 +9696,19 @@ export const searchAdInterests = <ThrowOnError extends boolean = false>(options:
9568
9696
  * `limit` cutoff all happen in Zernio; the catalog is independent of any ad account
9569
9697
  * and results never carry `audienceSize`. Names come back localized to the connected
9570
9698
  * Pinterest account's language (there is no way to force a locale), so match against
9571
- * whatever language that account returns. `geoType` routes to a different catalog:
9572
- * `country` and `metro_area` read the locations catalog (`type` is `country` or
9573
- * `metro`); `region` reads the regions catalog (`type` is `region`, its id a
9574
- * `regions[].key` on `POST /v1/ads/create`); `all` and the default `city` merge both
9575
- * catalogs with honest per-entry `type`s, since Pinterest has no city-level catalog
9576
- * and `city` is an alias for `all`, not a literal city search. `zip`, `subcity`,
9577
- * `neighborhood`, `place` and `geo_market` return a 400: Pinterest exposes no
9578
- * postal-code catalog, pass postal codes directly as `targeting.zips: [{ key }]` on
9579
- * `POST /v1/ads/create`.
9699
+ * whatever language that account returns.
9700
+ *
9701
+ * `geoType` routes to a different Pinterest catalog:
9702
+ *
9703
+ * - `country` and `metro_area` read the locations catalog (`type` is `country` or `metro`)
9704
+ * - `region` reads the regions catalog (`type` is `region`, its id a `regions[].key` on
9705
+ * `POST /v1/ads/create`)
9706
+ * - `all` and the default `city` merge both catalogs with honest per-entry `type`s, since
9707
+ * Pinterest has no city-level catalog and `city` is an alias for `all`, not a literal
9708
+ * city search
9709
+ * - `zip`, `subcity`, `neighborhood`, `place` and `geo_market` return a 400: Pinterest
9710
+ * exposes no postal-code catalog, pass postal codes directly as
9711
+ * `targeting.zips: [{ key }]` on `POST /v1/ads/create`
9580
9712
  *
9581
9713
  * For geo queries, `q` should contain only the locality name (e.g. `"Amsterdam"`,
9582
9714
  * not `"Amsterdam, NL"`). Use `countryCode` to disambiguate.
@@ -9682,7 +9814,7 @@ export const getLinkedInSupplyForecast = <ThrowOnError extends boolean = false>(
9682
9814
 
9683
9815
  /**
9684
9816
  * List Meta product catalogs
9685
- * Lists the Meta product catalogs reachable from an ad account (owned + agency-shared catalogs of the ad account's business), for Advantage+ catalog ads (`goal: catalog_sales` on POST /v1/ads/create — e.g. vehicle inventory catalogs). Read-only; uses scopes customers already granted (no reconnect needed). Catalog contents (items, feeds) are managed in Meta Commerce Manager, not through this API.
9817
+ * Lists the Meta product catalogs reachable from an ad account (owned + agency-shared catalogs of the ad account's business), for Advantage+ catalog ads (`goal: catalog_sales` on POST /v1/ads/create, e.g. vehicle inventory catalogs). Read-only; uses scopes customers already granted (no reconnect needed). Catalog contents (items, feeds) are managed in Meta Commerce Manager, not through this API.
9686
9818
  */
9687
9819
  export const listAdCatalogs = <ThrowOnError extends boolean = false>(options: OptionsLegacyParser<ListAdCatalogsData, ThrowOnError>) => {
9688
9820
  return (options?.client ?? client).get<ListAdCatalogsResponse, ListAdCatalogsError, ThrowOnError>({
@@ -9693,7 +9825,7 @@ export const listAdCatalogs = <ThrowOnError extends boolean = false>(options: Op
9693
9825
 
9694
9826
  /**
9695
9827
  * List a catalog's product sets
9696
- * Lists a Meta product catalog's product sets — the unit a catalog ad promotes. Pass the chosen set as `promotedObject.productSetId` on POST /v1/ads/create with `goal: catalog_sales`.
9828
+ * Lists a Meta product catalog's product sets, the unit a catalog ad promotes. Pass the chosen set as `promotedObject.productSetId` on POST /v1/ads/create with `goal: catalog_sales`.
9697
9829
  */
9698
9830
  export const listAdCatalogProductSets = <ThrowOnError extends boolean = false>(options: OptionsLegacyParser<ListAdCatalogProductSetsData, ThrowOnError>) => {
9699
9831
  return (options?.client ?? client).get<ListAdCatalogProductSetsResponse, ListAdCatalogProductSetsError, ThrowOnError>({
@@ -9704,7 +9836,7 @@ export const listAdCatalogProductSets = <ThrowOnError extends boolean = false>(o
9704
9836
 
9705
9837
  /**
9706
9838
  * List custom audiences
9707
- * Returns custom audiences for the given ad account. Supports Meta, Google, TikTok, Pinterest, LinkedIn, and X (Twitter).
9839
+ * Returns custom audiences for the given ad account. Supports Meta, Google, TikTok, Pinterest, LinkedIn, and X.
9708
9840
  */
9709
9841
  export const listAdAudiences = <ThrowOnError extends boolean = false>(options: OptionsLegacyParser<ListAdAudiencesData, ThrowOnError>) => {
9710
9842
  return (options?.client ?? client).get<ListAdAudiencesResponse, ListAdAudiencesError, ThrowOnError>({
@@ -9802,18 +9934,23 @@ export const addUsersToAdAudience = <ThrowOnError extends boolean = false>(optio
9802
9934
  * Upload the company rows of a LinkedIn `company_list` audience (account-based marketing).
9803
9935
  * LinkedIn-only, every other platform returns 422.
9804
9936
  *
9805
- * A LinkedIn audience segment holds exactly one uploaded list, so the list you send here REPLACES the
9806
- * segment's list instead of being appended to it: always send the full set of companies. LinkedIn returns
9807
- * only the identifier of the uploaded file, never its rows, so the merge cannot be done for you, keep the
9808
- * source list on your side. LinkedIn does not document how quickly companies dropped from the list stop
9809
- * being targeted, so treat removals as eventual rather than immediate.
9810
- * Rows are plain text (not hashed), matched against LinkedIn's own company graph. Matching is asynchronous:
9811
- * LinkedIn takes up to 48h for a new audience and up to 24h for a later update, and the audience stays
9812
- * `processing` meanwhile. LinkedIn recommends at least 1,000 companies for a usable match rate, and caps a
9813
- * list at 300,000.
9937
+ * A LinkedIn audience segment holds exactly one uploaded list, so the list you send here
9938
+ * REPLACES the segment's list instead of being appended to it: always send the full set of
9939
+ * companies. LinkedIn returns only the identifier of the uploaded file, never its rows, so the
9940
+ * merge cannot be done for you, keep the source list on your side.
9941
+ *
9942
+ * How the matching behaves:
9814
9943
  *
9815
- * The initial list is sent with `companies` on `POST /v1/ads/audiences`; this endpoint is for every
9816
- * change after that.
9944
+ * - Rows are plain text (not hashed), matched against LinkedIn's own company graph.
9945
+ * - Matching is asynchronous: LinkedIn takes up to 48h for a new audience and up to 24h for a
9946
+ * later update, and the audience stays `processing` meanwhile.
9947
+ * - LinkedIn does not document how quickly companies dropped from the list stop being targeted,
9948
+ * so treat removals as eventual rather than immediate.
9949
+ * - LinkedIn recommends at least 1,000 companies for a usable match rate, and caps a list at
9950
+ * 300,000.
9951
+ *
9952
+ * The initial list is sent with `companies` on `POST /v1/ads/audiences`; this endpoint is for
9953
+ * every change after that.
9817
9954
  *
9818
9955
  */
9819
9956
  export const replaceAdAudienceCompanies = <ThrowOnError extends boolean = false>(options: OptionsLegacyParser<ReplaceAdAudienceCompaniesData, ThrowOnError>) => {
@@ -9847,7 +9984,7 @@ export const getConversionsQuality = <ThrowOnError extends boolean = false>(opti
9847
9984
  * - Meta (`metaads`) via Graph API
9848
9985
  * - Google Ads (`googleads`) via Data Manager API `ingestEvents`
9849
9986
  * - LinkedIn (`linkedinads`) via `/rest/conversionEvents`
9850
- * - TikTok (`tiktokads`) via the Offline Events API `/offline/batch/` — OFFLINE conversions only
9987
+ * - TikTok (`tiktokads`) via the Offline Events API `/offline/batch/` (OFFLINE conversions only)
9851
9988
  * - OpenAI Ads (`openaiads`) via its Conversions API (a separate host, `bzr.openai.com`)
9852
9989
  *
9853
9990
  * `destinationId` semantics differ per platform:
@@ -9862,7 +9999,7 @@ export const getConversionsQuality = <ThrowOnError extends boolean = false>(opti
9862
9999
  * events. Each event must carry an email or phone (TikTok requires at least one). The connected
9863
10000
  * TikTok ads account must have granted the Offline Events permission; older grants must reconnect.
9864
10001
  *
9865
- * OpenAI Ads notes: requires a tracking tag (pixel) to already exist on the account — returns 422
10002
+ * OpenAI Ads notes: requires a tracking tag (pixel) to already exist on the account. Returns 422
9866
10003
  * with code `TRACKING_TAG_REQUIRED` if `POST /v1/accounts/{accountId}/tracking-tags` hasn't been
9867
10004
  * called yet.
9868
10005
  *
@@ -9902,7 +10039,7 @@ export const sendConversions = <ThrowOnError extends boolean = false>(options: O
9902
10039
 
9903
10040
  /**
9904
10041
  * Adjust uploaded conversions
9905
- * Adjust conversions that were previously uploaded via `POST /v1/ads/conversions` —
10042
+ * Adjust conversions that were previously uploaded via `POST /v1/ads/conversions`:
9906
10043
  * retract them, restate their value, or enhance them with first-party data. Requires
9907
10044
  * the Ads add-on.
9908
10045
  *
@@ -9913,14 +10050,14 @@ export const sendConversions = <ThrowOnError extends boolean = false>(options: O
9913
10050
  *
9914
10051
  * Adjustment types:
9915
10052
  *
9916
- * - `RETRACTION` — remove the conversion entirely (refund, chargeback, cancelled order, churn).
9917
- * - `RESTATEMENT` — change the conversion's value (upgrade / downgrade / partial refund). Send the corrected **total** value in `restatementValue` (not a delta).
9918
- * - `ENHANCEMENT` — attach first-party identifiers (hashed email / phone) to an existing conversion (enhanced conversions applied after the fact).
10053
+ * - `RETRACTION`: remove the conversion entirely (refund, chargeback, cancelled order, churn).
10054
+ * - `RESTATEMENT`: change the conversion's value (upgrade / downgrade / partial refund). Send the corrected **total** value in `restatementValue` (not a delta).
10055
+ * - `ENHANCEMENT`: attach first-party identifiers (hashed email / phone) to an existing conversion (enhanced conversions applied after the fact).
9919
10056
  *
9920
10057
  * Identifying the original conversion (per adjustment):
9921
10058
  *
9922
- * - `orderId` — the transaction ID you sent as `eventId` on the original conversion. Recommended, and **required** for `ENHANCEMENT`.
9923
- * - or `gclid` + `conversionTime` — the click ID and the original conversion's time (unix seconds). Not available for `ENHANCEMENT`.
10059
+ * - `orderId`: the transaction ID you sent as `eventId` on the original conversion. Recommended, and **required** for `ENHANCEMENT`.
10060
+ * - or `gclid` + `conversionTime`: the click ID and the original conversion's time (unix seconds). Not available for `ENHANCEMENT`.
9924
10061
  *
9925
10062
  * `destinationId` is the conversion action resource name, e.g.
9926
10063
  * `customers/1234567890/conversionActions/987654321` (same value you send to
@@ -9987,7 +10124,7 @@ export const createConversionAction = <ThrowOnError extends boolean = false>(opt
9987
10124
  * posting to `POST /v1/ads/conversions`.
9988
10125
  *
9989
10126
  * For Google and LinkedIn, each destination's `type` reflects the
9990
- * conversion type (PURCHASE, LEAD, SIGN_UP, etc.) — the event type is
10127
+ * conversion type (PURCHASE, LEAD, SIGN_UP, etc.), and the event type is
9991
10128
  * locked to the destination. For Meta and OpenAI Ads, `type` is absent:
9992
10129
  * pixels accept any event name per request.
9993
10130
  *
@@ -10069,7 +10206,7 @@ export const getConversionDestination = <ThrowOnError extends boolean = false>(o
10069
10206
  * Partial-update a conversion rule. LinkedIn-only today. Whitelisted
10070
10207
  * fields: `name`, `enabled`, attribution windows, `valueType`, `value`,
10071
10208
  * `attributionType`. The rule's `type` and parent ad account are
10072
- * intentionally not exposed for update — recreate the rule if those
10209
+ * intentionally not exposed for update. Recreate the rule if those
10073
10210
  * need to change.
10074
10211
  *
10075
10212
  */
@@ -10083,7 +10220,7 @@ export const updateConversionDestination = <ThrowOnError extends boolean = false
10083
10220
  /**
10084
10221
  * Delete a conversion destination
10085
10222
  * LinkedIn-only today. LinkedIn does not expose hard-delete on conversion
10086
- * rules — what their UI calls "delete" is the same `enabled: false` flip
10223
+ * rules; what their UI calls "delete" is the same `enabled: false` flip
10087
10224
  * we apply here. The rule remains fetchable via GET with
10088
10225
  * `status: 'inactive'`; the unified discovery endpoint hides it by
10089
10226
  * default.
@@ -10102,7 +10239,7 @@ export const deleteConversionDestination = <ThrowOnError extends boolean = false
10102
10239
  /**
10103
10240
  * List associated campaigns
10104
10241
  * LinkedIn-only today. Returns the campaigns currently associated with
10105
- * this conversion rule. Note that auto-association on rule creation
10242
+ * this conversion rule. Auto-association on rule creation
10106
10243
  * runs once at create time; campaigns created after the rule still need
10107
10244
  * explicit association.
10108
10245
  *
@@ -10275,7 +10412,7 @@ export const createCallAd = <ThrowOnError extends boolean = false>(options: Opti
10275
10412
  *
10276
10413
  * - **Multi-creative**: supply a `creatives[]` array with N entries (each carrying its own headline, body, and image/video). Creates 1 campaign + 1 ad set + N ads sharing budget and targeting so Meta A/Bs the creatives inside a single auction instead of fragmenting budget across N parallel campaigns. Recommended when launching multiple creative variants for the same campaign.
10277
10414
  *
10278
- * **Attach shape.** Send `adSetId` (with either creative shape) to add the ads to an EXISTING messaging ad set instead of building a campaign, so the ad set keeps its learning phase — the way to refresh a CTWA creative without resetting delivery. The ad set then owns budget, targeting and schedule, so `budgetAmount`, `budgetType`, `endDate`, `objective`, `countries`, `interests` and `audienceId` are rejected with a 400 alongside it rather than silently dropped. The target ad set's `destination_type` must match the ad's destination (a WhatsApp ad needs a `WHATSAPP` ad set), otherwise Meta would accept an ad that never delivers.
10415
+ * **Attach shape.** Send `adSetId` (with either creative shape) to add the ads to an EXISTING messaging ad set instead of building a campaign, so the ad set keeps its learning phase, the way to refresh a CTWA creative without resetting delivery. The ad set then owns budget, targeting and schedule, so `budgetAmount`, `budgetType`, `endDate`, `objective`, `countries`, `interests` and `audienceId` are rejected with a 400 alongside it rather than silently dropped. The target ad set's `destination_type` must match the ad's destination (a WhatsApp ad needs a `WHATSAPP` ad set), otherwise Meta would accept an ad that never delivers.
10279
10416
  *
10280
10417
  * Prerequisites enforced by Meta (surfaced as platform_error on failure): the Facebook Page must be paired with a verified WhatsApp Business number, the WhatsApp Business Account must be business-verified, and the Meta access token must carry ads_management.
10281
10418
  */
@@ -10319,14 +10456,620 @@ export const createCustomConversion = <ThrowOnError extends boolean = false>(opt
10319
10456
  });
10320
10457
  };
10321
10458
 
10459
+ /**
10460
+ * Get agent setup status
10461
+ * One read that says where the merchant is: whether the number is eligible, whether the
10462
+ * Meta Business Agent terms are accepted, whether an agent exists, whether it is on, and its
10463
+ * settings. `manualSteps` lists what Zernio can verify is still pending (accepting the terms
10464
+ * in WhatsApp Manager); `unverifiedSteps` lists what Meta exposes no state for (the payment
10465
+ * method in Billing Hub). Never fails for those pre-setup states; it reports them as flags.
10466
+ *
10467
+ */
10468
+ export const getBusinessAgentStatus = <ThrowOnError extends boolean = false>(options: OptionsLegacyParser<GetBusinessAgentStatusData, ThrowOnError>) => {
10469
+ return (options?.client ?? client).get<GetBusinessAgentStatusResponse, GetBusinessAgentStatusError, ThrowOnError>({
10470
+ ...options,
10471
+ url: '/v1/accounts/{accountId}/business-agent'
10472
+ });
10473
+ };
10474
+
10475
+ /**
10476
+ * Create the agent
10477
+ * Creates the Meta Business Agent on the number and schedules Meta's data preparation.
10478
+ * Requires the terms to be accepted; eligibility is checked first and an ineligible
10479
+ * number answers 403 `business_agent_not_eligible`. Not idempotent: call it once, then
10480
+ * configure knowledge and skills, then enable it through the settings. Configuration
10481
+ * calls made in the first minute can still answer `business_agent_not_found` while Meta
10482
+ * prepares the workspace.
10483
+ *
10484
+ */
10485
+ export const onboardBusinessAgent = <ThrowOnError extends boolean = false>(options: OptionsLegacyParser<OnboardBusinessAgentData, ThrowOnError>) => {
10486
+ return (options?.client ?? client).post<OnboardBusinessAgentResponse, OnboardBusinessAgentError, ThrowOnError>({
10487
+ ...options,
10488
+ url: '/v1/accounts/{accountId}/business-agent/onboard'
10489
+ });
10490
+ };
10491
+
10492
+ /**
10493
+ * List agent settings
10494
+ * Settings of every agent configured on the number (normally one). Pass `agentId` to read one.
10495
+ */
10496
+ export const listBusinessAgentSettings = <ThrowOnError extends boolean = false>(options: OptionsLegacyParser<ListBusinessAgentSettingsData, ThrowOnError>) => {
10497
+ return (options?.client ?? client).get<ListBusinessAgentSettingsResponse, ListBusinessAgentSettingsError, ThrowOnError>({
10498
+ ...options,
10499
+ url: '/v1/accounts/{accountId}/business-agent/settings'
10500
+ });
10501
+ };
10502
+
10503
+ /**
10504
+ * Update agent settings
10505
+ * Partial update: fields you omit keep their value. `rollout.enabled: true` turns the agent
10506
+ * on for new conversations; `false` stops it on every thread. Turning it on for `EVERYONE`
10507
+ * needs a payment method on the Business Agent billable account (Meta accepts the call but
10508
+ * delivers nothing without one); `ALLOWLISTED_ONLY` does not, which is how you test with a
10509
+ * few numbers before billing. `never_say_phrases` replaces the whole list.
10510
+ *
10511
+ */
10512
+ export const updateBusinessAgentSettings = <ThrowOnError extends boolean = false>(options: OptionsLegacyParser<UpdateBusinessAgentSettingsData, ThrowOnError>) => {
10513
+ return (options?.client ?? client).patch<UpdateBusinessAgentSettingsResponse, UpdateBusinessAgentSettingsError, ThrowOnError>({
10514
+ ...options,
10515
+ url: '/v1/accounts/{accountId}/business-agent/settings'
10516
+ });
10517
+ };
10518
+
10519
+ /**
10520
+ * List allowlisted consumers
10521
+ * Consumers the agent answers while `ai_audience` is ALLOWLISTED_ONLY.
10522
+ */
10523
+ export const listBusinessAgentAllowlist = <ThrowOnError extends boolean = false>(options: OptionsLegacyParser<ListBusinessAgentAllowlistData, ThrowOnError>) => {
10524
+ return (options?.client ?? client).get<ListBusinessAgentAllowlistResponse, ListBusinessAgentAllowlistError, ThrowOnError>({
10525
+ ...options,
10526
+ url: '/v1/accounts/{accountId}/business-agent/allowlist'
10527
+ });
10528
+ };
10529
+
10530
+ /**
10531
+ * Allowlist a consumer
10532
+ * One E.164 number per call. Not idempotent.
10533
+ */
10534
+ export const addBusinessAgentAllowlistEntry = <ThrowOnError extends boolean = false>(options: OptionsLegacyParser<AddBusinessAgentAllowlistEntryData, ThrowOnError>) => {
10535
+ return (options?.client ?? client).post<AddBusinessAgentAllowlistEntryResponse, AddBusinessAgentAllowlistEntryError, ThrowOnError>({
10536
+ ...options,
10537
+ url: '/v1/accounts/{accountId}/business-agent/allowlist'
10538
+ });
10539
+ };
10540
+
10541
+ /**
10542
+ * Remove an allowlisted consumer
10543
+ */
10544
+ export const removeBusinessAgentAllowlistEntry = <ThrowOnError extends boolean = false>(options: OptionsLegacyParser<RemoveBusinessAgentAllowlistEntryData, ThrowOnError>) => {
10545
+ return (options?.client ?? client).delete<RemoveBusinessAgentAllowlistEntryResponse, RemoveBusinessAgentAllowlistEntryError, ThrowOnError>({
10546
+ ...options,
10547
+ url: '/v1/accounts/{accountId}/business-agent/allowlist/{entryId}'
10548
+ });
10549
+ };
10550
+
10551
+ /**
10552
+ * Get business information
10553
+ * Payment methods, return policy, how to buy, shipping, description and contact details the agent answers from. Empty values until configured.
10554
+ */
10555
+ export const getBusinessAgentBusinessInformation = <ThrowOnError extends boolean = false>(options: OptionsLegacyParser<GetBusinessAgentBusinessInformationData, ThrowOnError>) => {
10556
+ return (options?.client ?? client).get<GetBusinessAgentBusinessInformationResponse, GetBusinessAgentBusinessInformationError, ThrowOnError>({
10557
+ ...options,
10558
+ url: '/v1/accounts/{accountId}/business-agent/business-information'
10559
+ });
10560
+ };
10561
+
10562
+ /**
10563
+ * Replace business information
10564
+ * Full replacement: every field you send overwrites the stored value; fields you omit are cleared.
10565
+ */
10566
+ export const replaceBusinessAgentBusinessInformation = <ThrowOnError extends boolean = false>(options: OptionsLegacyParser<ReplaceBusinessAgentBusinessInformationData, ThrowOnError>) => {
10567
+ return (options?.client ?? client).put<ReplaceBusinessAgentBusinessInformationResponse, ReplaceBusinessAgentBusinessInformationError, ThrowOnError>({
10568
+ ...options,
10569
+ url: '/v1/accounts/{accountId}/business-agent/business-information'
10570
+ });
10571
+ };
10572
+
10573
+ /**
10574
+ * Reset business information
10575
+ */
10576
+ export const resetBusinessAgentBusinessInformation = <ThrowOnError extends boolean = false>(options: OptionsLegacyParser<ResetBusinessAgentBusinessInformationData, ThrowOnError>) => {
10577
+ return (options?.client ?? client).delete<ResetBusinessAgentBusinessInformationResponse, ResetBusinessAgentBusinessInformationError, ThrowOnError>({
10578
+ ...options,
10579
+ url: '/v1/accounts/{accountId}/business-agent/business-information'
10580
+ });
10581
+ };
10582
+
10583
+ /**
10584
+ * List FAQs
10585
+ */
10586
+ export const listBusinessAgentFaqs = <ThrowOnError extends boolean = false>(options: OptionsLegacyParser<ListBusinessAgentFaqsData, ThrowOnError>) => {
10587
+ return (options?.client ?? client).get<ListBusinessAgentFaqsResponse, ListBusinessAgentFaqsError, ThrowOnError>({
10588
+ ...options,
10589
+ url: '/v1/accounts/{accountId}/business-agent/faqs'
10590
+ });
10591
+ };
10592
+
10593
+ /**
10594
+ * Create a FAQ
10595
+ * One specific question per entry; beyond a few hundred entries retrieval quality drops. Not idempotent.
10596
+ */
10597
+ export const createBusinessAgentFaq = <ThrowOnError extends boolean = false>(options: OptionsLegacyParser<CreateBusinessAgentFaqData, ThrowOnError>) => {
10598
+ return (options?.client ?? client).post<CreateBusinessAgentFaqResponse, CreateBusinessAgentFaqError, ThrowOnError>({
10599
+ ...options,
10600
+ url: '/v1/accounts/{accountId}/business-agent/faqs'
10601
+ });
10602
+ };
10603
+
10604
+ /**
10605
+ * Get a FAQ
10606
+ */
10607
+ export const getBusinessAgentFaq = <ThrowOnError extends boolean = false>(options: OptionsLegacyParser<GetBusinessAgentFaqData, ThrowOnError>) => {
10608
+ return (options?.client ?? client).get<GetBusinessAgentFaqResponse, GetBusinessAgentFaqError, ThrowOnError>({
10609
+ ...options,
10610
+ url: '/v1/accounts/{accountId}/business-agent/faqs/{faqId}'
10611
+ });
10612
+ };
10613
+
10614
+ /**
10615
+ * Update a FAQ
10616
+ */
10617
+ export const updateBusinessAgentFaq = <ThrowOnError extends boolean = false>(options: OptionsLegacyParser<UpdateBusinessAgentFaqData, ThrowOnError>) => {
10618
+ return (options?.client ?? client).put<UpdateBusinessAgentFaqResponse, UpdateBusinessAgentFaqError, ThrowOnError>({
10619
+ ...options,
10620
+ url: '/v1/accounts/{accountId}/business-agent/faqs/{faqId}'
10621
+ });
10622
+ };
10623
+
10624
+ /**
10625
+ * Delete a FAQ
10626
+ */
10627
+ export const deleteBusinessAgentFaq = <ThrowOnError extends boolean = false>(options: OptionsLegacyParser<DeleteBusinessAgentFaqData, ThrowOnError>) => {
10628
+ return (options?.client ?? client).delete<DeleteBusinessAgentFaqResponse, DeleteBusinessAgentFaqError, ThrowOnError>({
10629
+ ...options,
10630
+ url: '/v1/accounts/{accountId}/business-agent/faqs/{faqId}'
10631
+ });
10632
+ };
10633
+
10634
+ /**
10635
+ * List crawled websites
10636
+ */
10637
+ export const listBusinessAgentWebsites = <ThrowOnError extends boolean = false>(options: OptionsLegacyParser<ListBusinessAgentWebsitesData, ThrowOnError>) => {
10638
+ return (options?.client ?? client).get<ListBusinessAgentWebsitesResponse, ListBusinessAgentWebsitesError, ThrowOnError>({
10639
+ ...options,
10640
+ url: '/v1/accounts/{accountId}/business-agent/websites'
10641
+ });
10642
+ };
10643
+
10644
+ /**
10645
+ * Add a website to crawl
10646
+ * Meta crawls the site into the agent knowledge and recrawls it periodically; check `crawl_status` and `crawl_error` on read. Not idempotent.
10647
+ */
10648
+ export const addBusinessAgentWebsite = <ThrowOnError extends boolean = false>(options: OptionsLegacyParser<AddBusinessAgentWebsiteData, ThrowOnError>) => {
10649
+ return (options?.client ?? client).post<AddBusinessAgentWebsiteResponse, AddBusinessAgentWebsiteError, ThrowOnError>({
10650
+ ...options,
10651
+ url: '/v1/accounts/{accountId}/business-agent/websites'
10652
+ });
10653
+ };
10654
+
10655
+ /**
10656
+ * Get a crawled website
10657
+ */
10658
+ export const getBusinessAgentWebsite = <ThrowOnError extends boolean = false>(options: OptionsLegacyParser<GetBusinessAgentWebsiteData, ThrowOnError>) => {
10659
+ return (options?.client ?? client).get<GetBusinessAgentWebsiteResponse, GetBusinessAgentWebsiteError, ThrowOnError>({
10660
+ ...options,
10661
+ url: '/v1/accounts/{accountId}/business-agent/websites/{websiteId}'
10662
+ });
10663
+ };
10664
+
10665
+ /**
10666
+ * Update a crawled website
10667
+ */
10668
+ export const updateBusinessAgentWebsite = <ThrowOnError extends boolean = false>(options: OptionsLegacyParser<UpdateBusinessAgentWebsiteData, ThrowOnError>) => {
10669
+ return (options?.client ?? client).put<UpdateBusinessAgentWebsiteResponse, UpdateBusinessAgentWebsiteError, ThrowOnError>({
10670
+ ...options,
10671
+ url: '/v1/accounts/{accountId}/business-agent/websites/{websiteId}'
10672
+ });
10673
+ };
10674
+
10675
+ /**
10676
+ * Remove a crawled website
10677
+ */
10678
+ export const deleteBusinessAgentWebsite = <ThrowOnError extends boolean = false>(options: OptionsLegacyParser<DeleteBusinessAgentWebsiteData, ThrowOnError>) => {
10679
+ return (options?.client ?? client).delete<DeleteBusinessAgentWebsiteResponse, DeleteBusinessAgentWebsiteError, ThrowOnError>({
10680
+ ...options,
10681
+ url: '/v1/accounts/{accountId}/business-agent/websites/{websiteId}'
10682
+ });
10683
+ };
10684
+
10685
+ /**
10686
+ * List knowledge files
10687
+ */
10688
+ export const listBusinessAgentFiles = <ThrowOnError extends boolean = false>(options: OptionsLegacyParser<ListBusinessAgentFilesData, ThrowOnError>) => {
10689
+ return (options?.client ?? client).get<ListBusinessAgentFilesResponse, ListBusinessAgentFilesError, ThrowOnError>({
10690
+ ...options,
10691
+ url: '/v1/accounts/{accountId}/business-agent/files'
10692
+ });
10693
+ };
10694
+
10695
+ /**
10696
+ * Upload a knowledge file
10697
+ * Accepted types: pdf, doc, docx, png, jpg, jpeg, plus csv and xlsx when Meta enabled
10698
+ * extraction on the asset. Meta's limit is 100 MB. Two ways to send the file:
10699
+ * - JSON `{ url, fileName }`: Zernio downloads the file (public https URL, no redirects,
10700
+ * capped at 100 MB) and forwards it. Use this for anything above a few megabytes.
10701
+ * - multipart form-data with a `file` part (and an optional `fileName`): bounded by the
10702
+ * request body limit of about 4.5 MB; larger uploads must use the `url` form.
10703
+ * Not idempotent.
10704
+ *
10705
+ */
10706
+ export const uploadBusinessAgentFile = <ThrowOnError extends boolean = false>(options: OptionsLegacyParser<UploadBusinessAgentFileData, ThrowOnError>) => {
10707
+ return (options?.client ?? client).post<UploadBusinessAgentFileResponse, UploadBusinessAgentFileError, ThrowOnError>({
10708
+ ...options,
10709
+ url: '/v1/accounts/{accountId}/business-agent/files'
10710
+ });
10711
+ };
10712
+
10713
+ /**
10714
+ * Get a knowledge file
10715
+ */
10716
+ export const getBusinessAgentFile = <ThrowOnError extends boolean = false>(options: OptionsLegacyParser<GetBusinessAgentFileData, ThrowOnError>) => {
10717
+ return (options?.client ?? client).get<GetBusinessAgentFileResponse, GetBusinessAgentFileError, ThrowOnError>({
10718
+ ...options,
10719
+ url: '/v1/accounts/{accountId}/business-agent/files/{fileId}'
10720
+ });
10721
+ };
10722
+
10723
+ /**
10724
+ * Delete a knowledge file
10725
+ */
10726
+ export const deleteBusinessAgentFile = <ThrowOnError extends boolean = false>(options: OptionsLegacyParser<DeleteBusinessAgentFileData, ThrowOnError>) => {
10727
+ return (options?.client ?? client).delete<DeleteBusinessAgentFileResponse, DeleteBusinessAgentFileError, ThrowOnError>({
10728
+ ...options,
10729
+ url: '/v1/accounts/{accountId}/business-agent/files/{fileId}'
10730
+ });
10731
+ };
10732
+
10733
+ /**
10734
+ * List skills
10735
+ */
10736
+ export const listBusinessAgentSkills = <ThrowOnError extends boolean = false>(options: OptionsLegacyParser<ListBusinessAgentSkillsData, ThrowOnError>) => {
10737
+ return (options?.client ?? client).get<ListBusinessAgentSkillsResponse, ListBusinessAgentSkillsError, ThrowOnError>({
10738
+ ...options,
10739
+ url: '/v1/accounts/{accountId}/business-agent/skills'
10740
+ });
10741
+ };
10742
+
10743
+ /**
10744
+ * Create a skill
10745
+ * Behavioral instructions in the brand voice. Reads back `pending_review` until Meta content review passes it. Not idempotent.
10746
+ */
10747
+ export const createBusinessAgentSkill = <ThrowOnError extends boolean = false>(options: OptionsLegacyParser<CreateBusinessAgentSkillData, ThrowOnError>) => {
10748
+ return (options?.client ?? client).post<CreateBusinessAgentSkillResponse, CreateBusinessAgentSkillError, ThrowOnError>({
10749
+ ...options,
10750
+ url: '/v1/accounts/{accountId}/business-agent/skills'
10751
+ });
10752
+ };
10753
+
10754
+ /**
10755
+ * Get a skill
10756
+ */
10757
+ export const getBusinessAgentSkill = <ThrowOnError extends boolean = false>(options: OptionsLegacyParser<GetBusinessAgentSkillData, ThrowOnError>) => {
10758
+ return (options?.client ?? client).get<GetBusinessAgentSkillResponse, GetBusinessAgentSkillError, ThrowOnError>({
10759
+ ...options,
10760
+ url: '/v1/accounts/{accountId}/business-agent/skills/{skillId}'
10761
+ });
10762
+ };
10763
+
10764
+ /**
10765
+ * Update a skill
10766
+ */
10767
+ export const updateBusinessAgentSkill = <ThrowOnError extends boolean = false>(options: OptionsLegacyParser<UpdateBusinessAgentSkillData, ThrowOnError>) => {
10768
+ return (options?.client ?? client).put<UpdateBusinessAgentSkillResponse, UpdateBusinessAgentSkillError, ThrowOnError>({
10769
+ ...options,
10770
+ url: '/v1/accounts/{accountId}/business-agent/skills/{skillId}'
10771
+ });
10772
+ };
10773
+
10774
+ /**
10775
+ * Delete a skill
10776
+ */
10777
+ export const deleteBusinessAgentSkill = <ThrowOnError extends boolean = false>(options: OptionsLegacyParser<DeleteBusinessAgentSkillData, ThrowOnError>) => {
10778
+ return (options?.client ?? client).delete<DeleteBusinessAgentSkillResponse, DeleteBusinessAgentSkillError, ThrowOnError>({
10779
+ ...options,
10780
+ url: '/v1/accounts/{accountId}/business-agent/skills/{skillId}'
10781
+ });
10782
+ };
10783
+
10784
+ /**
10785
+ * List UI skills
10786
+ * Cursor paged; follow `paging.cursors.after` until `paging.next` is absent.
10787
+ */
10788
+ export const listBusinessAgentUiSkills = <ThrowOnError extends boolean = false>(options: OptionsLegacyParser<ListBusinessAgentUiSkillsData, ThrowOnError>) => {
10789
+ return (options?.client ?? client).get<ListBusinessAgentUiSkillsResponse, ListBusinessAgentUiSkillsError, ThrowOnError>({
10790
+ ...options,
10791
+ url: '/v1/accounts/{accountId}/business-agent/ui-skills'
10792
+ });
10793
+ };
10794
+
10795
+ /**
10796
+ * Create a UI skill
10797
+ * Tells the agent when to send a rich component (CTA URL button, image, carousel, list, reply buttons, location, Flow) and what to put in it. Not idempotent.
10798
+ */
10799
+ export const createBusinessAgentUiSkill = <ThrowOnError extends boolean = false>(options: OptionsLegacyParser<CreateBusinessAgentUiSkillData, ThrowOnError>) => {
10800
+ return (options?.client ?? client).post<CreateBusinessAgentUiSkillResponse, CreateBusinessAgentUiSkillError, ThrowOnError>({
10801
+ ...options,
10802
+ url: '/v1/accounts/{accountId}/business-agent/ui-skills'
10803
+ });
10804
+ };
10805
+
10806
+ /**
10807
+ * Get a UI skill
10808
+ */
10809
+ export const getBusinessAgentUiSkill = <ThrowOnError extends boolean = false>(options: OptionsLegacyParser<GetBusinessAgentUiSkillData, ThrowOnError>) => {
10810
+ return (options?.client ?? client).get<GetBusinessAgentUiSkillResponse, GetBusinessAgentUiSkillError, ThrowOnError>({
10811
+ ...options,
10812
+ url: '/v1/accounts/{accountId}/business-agent/ui-skills/{uiSkillId}'
10813
+ });
10814
+ };
10815
+
10816
+ /**
10817
+ * Update a UI skill
10818
+ */
10819
+ export const updateBusinessAgentUiSkill = <ThrowOnError extends boolean = false>(options: OptionsLegacyParser<UpdateBusinessAgentUiSkillData, ThrowOnError>) => {
10820
+ return (options?.client ?? client).put<UpdateBusinessAgentUiSkillResponse, UpdateBusinessAgentUiSkillError, ThrowOnError>({
10821
+ ...options,
10822
+ url: '/v1/accounts/{accountId}/business-agent/ui-skills/{uiSkillId}'
10823
+ });
10824
+ };
10825
+
10826
+ /**
10827
+ * Delete a UI skill
10828
+ */
10829
+ export const deleteBusinessAgentUiSkill = <ThrowOnError extends boolean = false>(options: OptionsLegacyParser<DeleteBusinessAgentUiSkillData, ThrowOnError>) => {
10830
+ return (options?.client ?? client).delete<DeleteBusinessAgentUiSkillResponse, DeleteBusinessAgentUiSkillError, ThrowOnError>({
10831
+ ...options,
10832
+ url: '/v1/accounts/{accountId}/business-agent/ui-skills/{uiSkillId}'
10833
+ });
10834
+ };
10835
+
10836
+ /**
10837
+ * List connectors
10838
+ * External APIs the agent may call. `connection_status` says whether Meta can currently reach each one.
10839
+ */
10840
+ export const listBusinessAgentConnectors = <ThrowOnError extends boolean = false>(options: OptionsLegacyParser<ListBusinessAgentConnectorsData, ThrowOnError>) => {
10841
+ return (options?.client ?? client).get<ListBusinessAgentConnectorsResponse, ListBusinessAgentConnectorsError, ThrowOnError>({
10842
+ ...options,
10843
+ url: '/v1/accounts/{accountId}/business-agent/connectors'
10844
+ });
10845
+ };
10846
+
10847
+ /**
10848
+ * Create a connector
10849
+ * Base URL plus how to authenticate (OAuth client credentials, API key or none). Names are unique per number. Not idempotent.
10850
+ */
10851
+ export const createBusinessAgentConnector = <ThrowOnError extends boolean = false>(options: OptionsLegacyParser<CreateBusinessAgentConnectorData, ThrowOnError>) => {
10852
+ return (options?.client ?? client).post<CreateBusinessAgentConnectorResponse, CreateBusinessAgentConnectorError, ThrowOnError>({
10853
+ ...options,
10854
+ url: '/v1/accounts/{accountId}/business-agent/connectors'
10855
+ });
10856
+ };
10857
+
10858
+ /**
10859
+ * Get a connector
10860
+ */
10861
+ export const getBusinessAgentConnector = <ThrowOnError extends boolean = false>(options: OptionsLegacyParser<GetBusinessAgentConnectorData, ThrowOnError>) => {
10862
+ return (options?.client ?? client).get<GetBusinessAgentConnectorResponse, GetBusinessAgentConnectorError, ThrowOnError>({
10863
+ ...options,
10864
+ url: '/v1/accounts/{accountId}/business-agent/connectors/{connectorId}'
10865
+ });
10866
+ };
10867
+
10868
+ /**
10869
+ * Update a connector
10870
+ */
10871
+ export const updateBusinessAgentConnector = <ThrowOnError extends boolean = false>(options: OptionsLegacyParser<UpdateBusinessAgentConnectorData, ThrowOnError>) => {
10872
+ return (options?.client ?? client).put<UpdateBusinessAgentConnectorResponse, UpdateBusinessAgentConnectorError, ThrowOnError>({
10873
+ ...options,
10874
+ url: '/v1/accounts/{accountId}/business-agent/connectors/{connectorId}'
10875
+ });
10876
+ };
10877
+
10878
+ /**
10879
+ * Delete a connector
10880
+ */
10881
+ export const deleteBusinessAgentConnector = <ThrowOnError extends boolean = false>(options: OptionsLegacyParser<DeleteBusinessAgentConnectorData, ThrowOnError>) => {
10882
+ return (options?.client ?? client).delete<DeleteBusinessAgentConnectorResponse, DeleteBusinessAgentConnectorError, ThrowOnError>({
10883
+ ...options,
10884
+ url: '/v1/accounts/{accountId}/business-agent/connectors/{connectorId}'
10885
+ });
10886
+ };
10887
+
10888
+ /**
10889
+ * Set connector credentials
10890
+ * Set or rotate the connector's credentials in place: `kind: api_key`, `kind: oauth`
10891
+ * (client credentials) or `kind: certificate` (mTLS client certificate). Meta has no call
10892
+ * that removes a credential layer; change the connector's `auth_type` or delete it instead.
10893
+ *
10894
+ */
10895
+ export const setBusinessAgentConnectorCredentials = <ThrowOnError extends boolean = false>(options: OptionsLegacyParser<SetBusinessAgentConnectorCredentialsData, ThrowOnError>) => {
10896
+ return (options?.client ?? client).post<SetBusinessAgentConnectorCredentialsResponse, SetBusinessAgentConnectorCredentialsError, ThrowOnError>({
10897
+ ...options,
10898
+ url: '/v1/accounts/{accountId}/business-agent/connectors/{connectorId}/credentials'
10899
+ });
10900
+ };
10901
+
10902
+ /**
10903
+ * Refresh MCP connector tools
10904
+ * Re-discovers the tools of an MCP connector. A failed discovery keeps the previous tool set and reports an ERROR sync status inside a 200.
10905
+ */
10906
+ export const refreshBusinessAgentConnectorTools = <ThrowOnError extends boolean = false>(options: OptionsLegacyParser<RefreshBusinessAgentConnectorToolsData, ThrowOnError>) => {
10907
+ return (options?.client ?? client).post<RefreshBusinessAgentConnectorToolsResponse, RefreshBusinessAgentConnectorToolsError, ThrowOnError>({
10908
+ ...options,
10909
+ url: '/v1/accounts/{accountId}/business-agent/connectors/{connectorId}/refresh-tools'
10910
+ });
10911
+ };
10912
+
10913
+ /**
10914
+ * Get connector failure logs
10915
+ * Third-party failures over the last 7 days (window at most 7 days, default the last 24 hours). Each entry carries `failure_code_name` and `error_message`.
10916
+ */
10917
+ export const getBusinessAgentConnectorLogs = <ThrowOnError extends boolean = false>(options: OptionsLegacyParser<GetBusinessAgentConnectorLogsData, ThrowOnError>) => {
10918
+ return (options?.client ?? client).get<GetBusinessAgentConnectorLogsResponse, GetBusinessAgentConnectorLogsError, ThrowOnError>({
10919
+ ...options,
10920
+ url: '/v1/accounts/{accountId}/business-agent/connectors/{connectorId}/logs'
10921
+ });
10922
+ };
10923
+
10924
+ /**
10925
+ * List connector tools
10926
+ */
10927
+ export const listBusinessAgentConnectorTools = <ThrowOnError extends boolean = false>(options: OptionsLegacyParser<ListBusinessAgentConnectorToolsData, ThrowOnError>) => {
10928
+ return (options?.client ?? client).get<ListBusinessAgentConnectorToolsResponse, ListBusinessAgentConnectorToolsError, ThrowOnError>({
10929
+ ...options,
10930
+ url: '/v1/accounts/{accountId}/business-agent/connectors/{connectorId}/tools'
10931
+ });
10932
+ };
10933
+
10934
+ /**
10935
+ * Create a connector tool
10936
+ * One operation on the connector, with the request definition Meta uses to build the outbound call from the conversation. Type the body params explicitly. Not idempotent.
10937
+ */
10938
+ export const createBusinessAgentConnectorTool = <ThrowOnError extends boolean = false>(options: OptionsLegacyParser<CreateBusinessAgentConnectorToolData, ThrowOnError>) => {
10939
+ return (options?.client ?? client).post<CreateBusinessAgentConnectorToolResponse, CreateBusinessAgentConnectorToolError, ThrowOnError>({
10940
+ ...options,
10941
+ url: '/v1/accounts/{accountId}/business-agent/connectors/{connectorId}/tools'
10942
+ });
10943
+ };
10944
+
10945
+ /**
10946
+ * Get a connector tool
10947
+ */
10948
+ export const getBusinessAgentConnectorTool = <ThrowOnError extends boolean = false>(options: OptionsLegacyParser<GetBusinessAgentConnectorToolData, ThrowOnError>) => {
10949
+ return (options?.client ?? client).get<GetBusinessAgentConnectorToolResponse, GetBusinessAgentConnectorToolError, ThrowOnError>({
10950
+ ...options,
10951
+ url: '/v1/accounts/{accountId}/business-agent/connectors/{connectorId}/tools/{toolId}'
10952
+ });
10953
+ };
10954
+
10955
+ /**
10956
+ * Update a connector tool
10957
+ */
10958
+ export const updateBusinessAgentConnectorTool = <ThrowOnError extends boolean = false>(options: OptionsLegacyParser<UpdateBusinessAgentConnectorToolData, ThrowOnError>) => {
10959
+ return (options?.client ?? client).put<UpdateBusinessAgentConnectorToolResponse, UpdateBusinessAgentConnectorToolError, ThrowOnError>({
10960
+ ...options,
10961
+ url: '/v1/accounts/{accountId}/business-agent/connectors/{connectorId}/tools/{toolId}'
10962
+ });
10963
+ };
10964
+
10965
+ /**
10966
+ * Delete a connector tool
10967
+ */
10968
+ export const deleteBusinessAgentConnectorTool = <ThrowOnError extends boolean = false>(options: OptionsLegacyParser<DeleteBusinessAgentConnectorToolData, ThrowOnError>) => {
10969
+ return (options?.client ?? client).delete<DeleteBusinessAgentConnectorToolResponse, DeleteBusinessAgentConnectorToolError, ThrowOnError>({
10970
+ ...options,
10971
+ url: '/v1/accounts/{accountId}/business-agent/connectors/{connectorId}/tools/{toolId}'
10972
+ });
10973
+ };
10974
+
10975
+ /**
10976
+ * Run a connector tool once
10977
+ * Executes the tool against the merchant API and returns the raw upstream result, to check a connector before the agent relies on it.
10978
+ */
10979
+ export const runBusinessAgentConnectorTool = <ThrowOnError extends boolean = false>(options: OptionsLegacyParser<RunBusinessAgentConnectorToolData, ThrowOnError>) => {
10980
+ return (options?.client ?? client).post<RunBusinessAgentConnectorToolResponse, RunBusinessAgentConnectorToolError, ThrowOnError>({
10981
+ ...options,
10982
+ url: '/v1/accounts/{accountId}/business-agent/connectors/{connectorId}/tools/{toolId}/run'
10983
+ });
10984
+ };
10985
+
10986
+ /**
10987
+ * Get usage budgets
10988
+ * Caps over rolling windows for the Business Manager that owns the number. An empty list means unlimited.
10989
+ */
10990
+ export const getBusinessAgentBudget = <ThrowOnError extends boolean = false>(options: OptionsLegacyParser<GetBusinessAgentBudgetData, ThrowOnError>) => {
10991
+ return (options?.client ?? client).get<GetBusinessAgentBudgetResponse, GetBusinessAgentBudgetError, ThrowOnError>({
10992
+ ...options,
10993
+ url: '/v1/accounts/{accountId}/business-agent/budget'
10994
+ });
10995
+ };
10996
+
10997
+ /**
10998
+ * Replace usage budgets
10999
+ * The full desired set: budgets left out are removed, an empty list returns to unlimited. Pass `budget_id` to edit one in place. When a cap is hit the agent finishes its turn, stops answering and hands the thread to a human until the window rolls over.
11000
+ */
11001
+ export const replaceBusinessAgentBudget = <ThrowOnError extends boolean = false>(options: OptionsLegacyParser<ReplaceBusinessAgentBudgetData, ThrowOnError>) => {
11002
+ return (options?.client ?? client).put<ReplaceBusinessAgentBudgetResponse, ReplaceBusinessAgentBudgetError, ThrowOnError>({
11003
+ ...options,
11004
+ url: '/v1/accounts/{accountId}/business-agent/budget'
11005
+ });
11006
+ };
11007
+
11008
+ /**
11009
+ * Send a test message
11010
+ * Runs the message through the full agent pipeline in Meta sandbox with no WhatsApp user and no token billing. Pass back `conversationId` to continue a thread. Meta rate-limits it per number per hour.
11011
+ */
11012
+ export const sendBusinessAgentTestMessage = <ThrowOnError extends boolean = false>(options: OptionsLegacyParser<SendBusinessAgentTestMessageData, ThrowOnError>) => {
11013
+ return (options?.client ?? client).post<SendBusinessAgentTestMessageResponse, SendBusinessAgentTestMessageError, ThrowOnError>({
11014
+ ...options,
11015
+ url: '/v1/accounts/{accountId}/business-agent/test-messages'
11016
+ });
11017
+ };
11018
+
11019
+ /**
11020
+ * Send a business event
11021
+ * Tell the agent something happened in your systems (order shipped, document verified) so it messages the consumer about it. The consumer must already have a conversation with the number. Answers 202 with the event id; poll it for the outcome.
11022
+ */
11023
+ export const sendBusinessAgentEvent = <ThrowOnError extends boolean = false>(options: OptionsLegacyParser<SendBusinessAgentEventData, ThrowOnError>) => {
11024
+ return (options?.client ?? client).post<SendBusinessAgentEventResponse, SendBusinessAgentEventError, ThrowOnError>({
11025
+ ...options,
11026
+ url: '/v1/accounts/{accountId}/business-agent/events'
11027
+ });
11028
+ };
11029
+
11030
+ /**
11031
+ * Get a business event status
11032
+ */
11033
+ export const getBusinessAgentEvent = <ThrowOnError extends boolean = false>(options: OptionsLegacyParser<GetBusinessAgentEventData, ThrowOnError>) => {
11034
+ return (options?.client ?? client).get<GetBusinessAgentEventResponse, GetBusinessAgentEventError, ThrowOnError>({
11035
+ ...options,
11036
+ url: '/v1/accounts/{accountId}/business-agent/events/{eventId}'
11037
+ });
11038
+ };
11039
+
11040
+ /**
11041
+ * Read evaluation data
11042
+ * Without query parameters, lists the evaluation scenarios (`eval_cases`). With `jobId`,
11043
+ * polls a run started with POST. With `summaryIds`, returns the aggregated insight reports.
11044
+ * With `evalIds`, returns per-conversation evaluation details. One of the three at a time.
11045
+ *
11046
+ */
11047
+ export const readBusinessAgentEvals = <ThrowOnError extends boolean = false>(options: OptionsLegacyParser<ReadBusinessAgentEvalsData, ThrowOnError>) => {
11048
+ return (options?.client ?? client).get<ReadBusinessAgentEvalsResponse, ReadBusinessAgentEvalsError, ThrowOnError>({
11049
+ ...options,
11050
+ url: '/v1/accounts/{accountId}/business-agent/evals'
11051
+ });
11052
+ };
11053
+
11054
+ /**
11055
+ * Start an evaluation run
11056
+ * Simulates the given scenarios against the agent and scores them. Answers 202 with a `job_id` to poll with GET.
11057
+ */
11058
+ export const startBusinessAgentEvalRun = <ThrowOnError extends boolean = false>(options: OptionsLegacyParser<StartBusinessAgentEvalRunData, ThrowOnError>) => {
11059
+ return (options?.client ?? client).post<StartBusinessAgentEvalRunResponse, StartBusinessAgentEvalRunError, ThrowOnError>({
11060
+ ...options,
11061
+ url: '/v1/accounts/{accountId}/business-agent/evals'
11062
+ });
11063
+ };
11064
+
10322
11065
  /**
10323
11066
  * List tracking tags
10324
11067
  * Returns the tracking tags (Meta Pixels, or OpenAI Ads pixels) the
10325
11068
  * connected ads account can see. Pass `?adAccountId=act_...` (Meta only)
10326
11069
  * to scope the list to a single ad account; omit it to list every pixel
10327
11070
  * reachable by the token (the name is then suffixed with the ad account
10328
- * it was discovered on, for disambiguation). The list view omits `code`
10329
- * — call `getTrackingTag` for the install snippet and full detail (Meta
11071
+ * it was discovered on, for disambiguation). The list view omits `code`.
11072
+ * Call `getTrackingTag` for the install snippet and full detail (Meta
10330
11073
  * only; OpenAI Ads has no get-by-id endpoint).
10331
11074
  *
10332
11075
  * Meta (platform `metaads`) and OpenAI Ads (platform `openaiads`); other
@@ -10346,20 +11089,20 @@ export const listTrackingTags = <ThrowOnError extends boolean = false>(options:
10346
11089
 
10347
11090
  /**
10348
11091
  * Create a tracking tag
10349
- * Meta: creates a Meta Pixel on the given ad account (`POST /act_{id}/adspixels`
10350
- * — `name` is the only input). Returns the created tag including its
11092
+ * Meta: creates a Meta Pixel on the given ad account (`POST /act_{id}/adspixels`,
11093
+ * where `name` is the only input). Returns the created tag including its
10351
11094
  * install `code`. The pixel is owned by the Business Manager that owns the
10352
11095
  * ad account; a pixel created on a personal (non-BM) ad account ends up
10353
11096
  * with `ownerBusinessId: null` and can't be shared with other ad accounts.
10354
11097
  *
10355
- * Creating a Meta pixel does NOT install it — install the returned `code`
11098
+ * Creating a Meta pixel does NOT install it. Install the returned `code`
10356
11099
  * snippet on the site, or send events server-side via
10357
11100
  * `POST /v1/ads/conversions`. The check `installed` is derived from
10358
11101
  * `lastFiredTime`.
10359
11102
  *
10360
11103
  * OpenAI Ads: creates an OpenAI pixel AND provisions a Conversions API
10361
11104
  * key for it in the same call (`adAccountId` is required by this
10362
- * endpoint but ignored — one API key maps to exactly one ad account, so
11105
+ * endpoint but ignored: one API key maps to exactly one ad account, so
10363
11106
  * there's nothing to select). Returns 422 (`FEATURE_NOT_AVAILABLE`) if
10364
11107
  * the ad account isn't enabled for pixel management; contact your OpenAI
10365
11108
  * partner representative to enable it. There is no delete API for
@@ -10388,7 +11131,7 @@ export const createTrackingTag = <ThrowOnError extends boolean = false>(options:
10388
11131
  * Returns the full tag record including the base-code `code` snippet,
10389
11132
  * `lastFiredTime`, `ownerBusinessId`, `isUnavailable`, etc. Meta only
10390
11133
  * (platform `metaads`); other platforms return 405. OpenAI Ads has no
10391
- * get-by-id endpoint, so it 405s here too — use
11134
+ * get-by-id endpoint, so it 405s here too. Use
10392
11135
  * `GET /v1/accounts/{accountId}/tracking-tags` (list) instead.
10393
11136
  *
10394
11137
  */
@@ -10407,7 +11150,7 @@ export const getTrackingTag = <ThrowOnError extends boolean = false>(options: Op
10407
11150
  * Returns the re-fetched canonical tag. Meta only (platform `metaads`);
10408
11151
  * other platforms return 405.
10409
11152
  *
10410
- * There is no DELETE — Meta has no API to delete a pixel. To stop using
11153
+ * There is no DELETE: Meta has no API to delete a pixel. To stop using
10411
11154
  * one, unshare it from your ad accounts (`DELETE
10412
11155
  * .../tracking-tags/{tagId}/shared-accounts`) or disable it in Events
10413
11156
  * Manager.
@@ -10464,7 +11207,7 @@ export const removeTrackingTagSharedAccount = <ThrowOnError extends boolean = fa
10464
11207
  /**
10465
11208
  * Get aggregated event stats
10466
11209
  * Returns aggregated event counts for the pixel (`GET /{pixel_id}/stats`).
10467
- * Rows are passed through from Meta as-is — their shape depends on the
11210
+ * Rows are passed through from Meta as-is; their shape depends on the
10468
11211
  * `aggregation` requested. Meta only (platform `metaads`); other platforms
10469
11212
  * return 405.
10470
11213
  *
@@ -10702,7 +11445,7 @@ export const getVerification = <ThrowOnError extends boolean = false>(options: O
10702
11445
  /**
10703
11446
  * Check a verification code
10704
11447
  * Verify the code the user typed. Wrong, expired, and exhausted codes
10705
- * answer 200 with `valid: false` and the settled `status` — only an
11448
+ * answer 200 with `valid: false` and the settled `status`. Only an
10706
11449
  * unknown id is a 404. A correct code consumes the verification
10707
11450
  * (single-use, `status: approved`) and fires the `verification.approved`
10708
11451
  * webhook; the 5th wrong attempt settles it as `max_attempts_reached`