Skip to main content
The Newsletter feature provides methods for managing WhatsApp newsletter channels, including creation, subscription management, reactions, and live updates. Newsletter operations use MEX (GraphQL) for metadata/management and IQ stanzas for message operations. Newsletter message sending is handled by the unified client.send_message() method — see the Send API. Reactions remain on the Newsletter struct because they use a different stanza format.
Newsletter messages are plaintext — they are not encrypted with the Signal protocol.

Access

Access newsletter operations through the client:

Methods

list_subscribed

List all newsletters the user is subscribed to.
Returns:
  • Vec<NewsletterMetadata> — List of subscribed newsletters
Example:

get_metadata

Fetch metadata for a newsletter by its JID.
Parameters:
  • jid — Newsletter JID (server must be newsletter)
Returns:
  • NewsletterMetadata — Full newsletter metadata
Example:

get_metadata_by_invite

Fetch metadata for a newsletter by its invite code.
Parameters:
  • invite_code — Newsletter invite code string
Returns:
  • NewsletterMetadata — Full newsletter metadata
Example:

create

Create a new newsletter.
Parameters:
  • name — Newsletter name
  • description — Optional description
Returns:
  • NewsletterMetadata — Metadata of the newly created newsletter
Example:

join

Join (subscribe to) a newsletter.
Parameters:
  • jid — Newsletter JID to join
Returns:
  • NewsletterMetadata — Metadata with the viewer’s role set to Subscriber
Example:

leave

Leave (unsubscribe from) a newsletter.
Parameters:
  • jid — Newsletter JID to leave
Example:

update

Update a newsletter’s name and/or description.
Parameters:
  • jid — Newsletter JID
  • name — New name, or None to keep the current name
  • description — New description, or None to keep the current description
Returns:
  • NewsletterMetadata — Updated metadata
Example:

set_follower_mute

Mute or unmute a newsletter’s follower-activity notifications (WhatsApp Web’s MUTE_FOLLOWER_ACTIVITY). Sent via MEX as a user-setting update.
Parameters:
  • jid — Newsletter JID
  • mutedtrue silences notifications, false re-enables them
Example:

set_admin_mute

Mute or unmute a newsletter’s admin-activity notifications (WhatsApp Web’s MUTE_ADMIN_ACTIVITY). Only meaningful for owners/admins.
Parameters:
  • jid — Newsletter JID
  • mutedtrue silences admin-activity notifications, false re-enables them
Example:
The mute state is sent as ON/OFF; the mute expiration is local database state and is never put on the wire, matching WhatsApp Web’s WAWebNewsletterUpdateUserSettingJob.

Sending messages

Newsletter message sending is handled by the unified client.send_message() method. See the Send API reference for full details.
The library detects newsletter recipients automatically and sends messages as plaintext (no Signal encryption), with the correct type and mediatype stanza attributes inferred from the message content. Stanza-level <meta> nodes (for polls, events, etc.) are also included automatically, matching WhatsApp Web behavior.
Newsletter::send_message() was removed. Use client.send_message() instead — it accepts newsletter, group, and direct message JIDs.

send_reaction

Send a reaction to a newsletter message.
Parameters:
  • jid — Newsletter JID
  • server_id — Server-assigned ID of the message to react to
  • reaction — Emoji code (e.g., "👍", "❤️"), or empty string to remove
Example:

edit_message

Edit a previously-sent newsletter message. Channel messages are plaintext, so the edit is sent as a <message edit="1"> stanza with the new protobuf body — not through the E2E send path.
Parameters:
  • jid — Newsletter JID. Non-newsletter JIDs are rejected with an error; use Client::edit_message for DMs and groups.
  • message_id — The target message’s message_id (the wire stanza id, as returned by send_message or carried on NewsletterMessage). This is not the server_id used by reactions. Empty IDs are rejected.
  • new_content — Replacement message body. Typically a wa::Message { conversation: Some(..), .. } for text edits.
Example:

revoke_message

Revoke (delete) a previously-sent newsletter message. Like edit_message, this goes through the plaintext channel path, not the E2E send path.
Parameters:
  • jid — Newsletter JID. Non-newsletter JIDs are rejected; use Client::revoke_message for DMs and groups.
  • message_id — The target message’s message_id (wire stanza id, not server_id). Empty IDs are rejected.
Example:
Newsletter JIDs are now also rejected at the root of the E2E send path. If your code accidentally routes a channel JID through send_message_impl, pin_message, or the standard edit_message / revoke_message on Client, you get an error that names the mis-route instead of a malformed encrypted fan-out.

get_messages

Fetch message history from a newsletter.
Parameters:
  • jid — Newsletter JID
  • count — Maximum number of messages to return
  • before — If set, return messages before this server_id (for pagination)
Returns:
  • Vec<NewsletterMessage> — List of newsletter messages
Example:

subscribe_live_updates

Subscribe to live updates for a newsletter (reaction counts, message changes).
Parameters:
  • jid — Newsletter JID
Returns:
  • u64 — Subscription duration in seconds (typically 300)
The server sends Event::NewsletterLiveUpdate events with updated reaction counts. You need to re-subscribe periodically when the duration expires. Example:

Types

NewsletterMetadata

Metadata for a newsletter channel. Implements PartialEq and Eq for direct comparison.

NewsletterVerification

NewsletterState

NewsletterRole

The viewer’s role in a newsletter.
All newsletter enums are #[non_exhaustive], so match statements should include a wildcard arm to handle future variants.

NewsletterMessage

A message from a newsletter’s history.

NewsletterMessageType

The type of a newsletter message. Uses a StringEnum for type-safe wire-protocol mapping. Implements PartialEq and Eq.
Methods:
  • as_str() - Returns the wire-protocol string representation
  • From<&str> - Parse from wire string, unknown values become Other(String)

NewsletterReactionCount

A reaction count on a newsletter message.

Error handling

All newsletter methods return Result<T, NewsletterError>: