v9.4.0
pathwaycom/pathwayv9.4.0Sep 19, 2026by github-actions[bot]
Upgrading?
AI Summary
Introduces on-demand chat history retrieval, allows per-device webhooks to merge with global targets, and adds a flag to skip status media downloads, alongside reliability fixes for history sync and device purge.
Key Highlights
- On-demand chat history via `POST /chat/{chat_jid}/history` endpoint
- Per-device webhooks can now merge with global targets instead of replacing them
- New `--ignore-status-media` flag to skip downloading media attached to status broadcasts
- Reliability fixes for history sync naming, device purge, and webhook delivery
New Features
- On-demand history sync endpoint
- Device webhook merge flag (`--webhook-device-merge-global`)
- Ignore status media downloads flag (`--ignore-status-media`)
- Reliability improvements for device purge and path decoding
Full Release Notes
## What's New in v9.4.0
š **On-Demand Chat History, Per-Device Webhook Fan-Out & Status Media Control**
Version 9.4.0 lets you pull older chat history from the phone on demand, allows a device's own webhook to add to the global targets instead of replacing them, and adds a switch to skip status media downloads. History sync naming, device purge, webhook delivery, and route ordering all get reliability fixes, and whatsmeow is updated to the latest revision.
---
## ⨠Features
### On-Demand Chat History ([#834](https://github.com/aldinokemal/go-whatsapp-web-multidevice/pull/834))
- Adds `POST /chat/{chat_jid}/history` to request older messages from the phone, anchored at the oldest message currently stored locally for that chat
- Accepts a `count` of older messages to request and returns the requested count, with percent-encoded chat JIDs accepted on the path
- Documents the endpoint in OpenAPI and rejects requests for a chat with no stored message to anchor on
### Per-Device Webhooks Can Add to the Global Targets ([#842](https://github.com/aldinokemal/go-whatsapp-web-multidevice/pull/842))
- Adds `--webhook-device-merge-global` / `WHATSAPP_WEBHOOK_DEVICE_MERGE_GLOBAL` so a device with its own webhook also delivers its events to the global `--webhook` URLs
- Leaves the default unchanged: a per-device webhook still replaces the global ones
- Documents the flag in the README, `.env.example`, and the webhook payload reference
### Ignore Status Media Downloads ([#836](https://github.com/aldinokemal/go-whatsapp-web-multidevice/pull/836))
- Adds `--ignore-status-media` / `WHATSAPP_IGNORE_STATUS_MEDIA` to skip downloading media attached to status broadcasts
- Keeps status events flowing while avoiding the storage and bandwidth cost of their media
---
## š Bug Fixes
### History Sync Chat Naming ([#845](https://github.com/aldinokemal/go-whatsapp-web-multidevice/pull/845))
- Names 1:1 chats from the contact store instead of the history-sync `DisplayName`
- Keeps `DisplayName` for group and newsletter chats, where it is the authoritative title
- Preserves the disappearing-messages timer when a chat is refreshed by an on-demand sync
### Device Purge and Path Decoding ([#843](https://github.com/aldinokemal/go-whatsapp-web-multidevice/pull/843))
- Percent-decodes the `:device_id` path parameter so clients can safely send `encodeURIComponent` values
- Resolves purge targets verbatim instead of trimming, so distinct slots are never confused, and keeps the registry entry when local cleanup fails so `DELETE` can be retried
- Skips the keep-slot callback on a purge-triggered logout, purges both the registry id and the paired JID partition when they differ, and broadcasts `DEVICE_REMOVED` with the refreshed device list
- Surfaces shared-JID lookup failures instead of silently continuing when companion slots share one number
### Chatwoot Config Routes and Device Route Order ([#837](https://github.com/aldinokemal/go-whatsapp-web-multidevice/pull/837))
- Registers the Chatwoot config routes before the header-based device group so `DeviceMiddleware` no longer intercepts them
- Keeps the device group as the last registration on the API group ā `Group("")` installs a root handler matching every path ā and pins the order with a regression test
- Hardens the status-media guard to match on the JID's shape, so a device-qualified status JID is still recognised
### Slow Device Webhook No Longer Starves the Global Leg
- Runs the device and global webhook legs concurrently so one slow endpoint burning its retry backoff cannot leave the global leg a dead context
- Dedupes a global URL against the device URLs only when the device leg will actually deliver, so an event rejected by the device's own filter still reaches the global subscription
---
## š§ Technical Improvements
### Dependency & Documentation Updates
- Updates whatsmeow to the latest revision
- Streamlines the AGENTS documentation across chatstorage, chatwoot, whatsapp, ui, usecase, and validations
---
## What's Changed
* chore: update whatsmeow to latest by @aldinokemal
* refactor: streamline AGENTS documentation and improve clarity across multiple sections by @aldinokemal
* fix(history-sync): name 1:1 chats from the contact store, not DisplayName ([#845](https://github.com/aldinokemal/go-whatsapp-web-multidevice/pull/845)) by @arivelli
* fix(device): make DELETE purge reliable and decode path device_id ([#843](https://github.com/aldinokemal/go-whatsapp-web-multidevice/pull/843)) by @hanlest
* feat(webhook): let a per-device webhook add to the global targets instead of replacing them ([#842](https://github.com/aldinokemal/go-whatsapp-web-multidevice/pull/842)) by @Kizuno18
* fix(device): compare purge slot id verbatim and surface shared-JID lookup failures by @aldinokemal
* fix(webhook): stop a slow device webhook starving the global leg by @aldinokemal
* fix(history-sync): keep DisplayName for group and newsletter chats by @aldinokemal
* fix(rest): register chatwoot config routes before DeviceMiddleware ([#837](https://github.com/aldinokemal/go-whatsapp-web-multidevice/pull/837)) by @aguinaldotupy
* feat: add flag to ignore downloading status media ([#836](https://github.com/aldinokemal/go-whatsapp-web-multidevice/pull/836)) by @danihidayatx
* feat(chat): add on-demand history sync endpoint ([#834](https://github.com/aldinokemal/go-whatsapp-web-multidevice/pull/834)) by @Kizuno18
* fix(history-sync): keep the disappearing-messages timer on on-demand sync by @aldinokemal
* fix(rest): keep the device group last, and harden the status-media guard by @aldinokemal
* feat: update SKILL by @aldinokemal
* chore(release): v9.4.0 by @aldinokemal
## Contributors
- [@aldinokemal](https://github.com/aldinokemal)
- [@aguinaldotupy](https://github.com/aguinaldotupy)
- [@arivelli](https://github.com/arivelli)
- [@danihidayatx](https://github.com/danihidayatx)
- [@hanlest](https://github.com/hanlest)
- [@Kizuno18](https://github.com/Kizuno18)
**Full Changelog**: https://github.com/aldinokemal/go-whatsapp-web-multidevice/compare/v9.3.1...v9.4.0
Related Repositories
public-apis/public-apisā
491,123
A collective list of free APIs
NousResearch/hermes-agentā
255,887
The agent that grows with you
yt-dlp/yt-dlpā
199,986
A feature-rich command-line audio/video downloader
microsoft/markitdownā
191,478
Python tool for converting files and office documents to Markdown.
Significant-Gravitas/AutoGPTā
187,699
AutoGPT is the vision of accessible AI for everyone, to use and to build on. Our mission is to provide the tools, so that you can focus on what matters.