X-Device-Id. A channel ID ends in @newsletter; a contact number or group JID is not a channel ID.
Set the server URL and credentials before running the curl examples. Use the public HTTPS URL for a remote server and include APP_BASE_PATH when configured.
Find a channel
Look up channel metadata by eithernewsletter_id or invite. Supply exactly one. An invite can be a full https://whatsapp.com/channel/... link or its code.
results contains the channel metadata, including its ID, thread metadata, and viewer metadata. Invite lookup supports public metadata without following the channel. JID lookup depends on the selected account’s access to the channel. viewer_metadata can be null when WhatsApp supplies only public metadata.
To browse the directory, provide at least one country code. To search by name, use search_text.
Directory responses put channels in
results.data. The directory uses undocumented WhatsApp queries and can change independently of GOWA.
Follow or unfollow
POST /newsletter/unfollow to unfollow. GET /user/my/newsletters lists newsletters followed by the selected account.
Following a channel and subscribing to live engagement updates are separate operations. Manage live subscriptions through /newsletter/live-updates.
Read messages and counters
GET /newsletter/messages reads posts directly from WhatsApp without requiring a follow. Available history is controlled by WhatsApp. GOWA does not guarantee a retention window or complete archive. count defaults to 50 and accepts 1–100. To load older posts, pass the oldest returned server_id as before.
results.data contains posts with server_id, message_id, type, timestamp, text, views_count, forwards_count, and optional reaction_counts. Content fields can be absent. WhatsApp reports views to channel admins; other accounts can see views_count: 0.
Use the numeric server_id, rather than message_id, for pagination and media downloads.
GET /newsletter/message-updates refreshes counters without fetching message content. after is required and must be a positive server ID. count defaults to 50, with a maximum of 100. Optional since is a nonnegative Unix timestamp in seconds. Results use the same results.data list shape, with content fields omitted when WhatsApp does not return them.
Receive live counter updates
Configure a webhook, then subscribe each device to the channels it needs.results contains newsletter_id, duration_seconds, expires_at, renewed_at, and optional last_error. WhatsApp grants a short subscription, observed at about 90 seconds. GOWA renews it before expiration and after reconnects. Counter events arrive as newsletter.message webhooks.
List subscriptions with GET /newsletter/live-updates. Its results.data includes the same status fields. Inspect last_error when renewal fails.
Subscriptions are held in memory and do not survive a server restart. Re-create them after restarting GOWA. Subscription state belongs to the selected device.
Download channel media
results contains server_id, message_id, status, media_type, mime_type, filename, file_path, file_url, and file_size. The REST handler supplies file_url as a public static URL for the saved file. This is not a binary file response. A missing post or a post without downloadable media returns an error.