# Office 365 Listener

Learn more about this Listener type in [this article](https://app.gitbook.com/s/kxZeV4nlXcIAjMGZxzLI/the-workspace/listeners/listener-integrations/collect-data-from-microsoft-products/collect-data-from-microsoft-office-365).

<details>

<summary>v1.0.0</summary>

<mark style="background-color:purple;">**Released on**</mark> <mark style="background-color:purple;"></mark><mark style="background-color:purple;">03/04/2026</mark>

We have added structured error handling for Office 365 API responses, including:

* Parse JSON error responses with error codes and messages
* Distinguish between permanent (non-retryable) and retryable errors
* Support for Office 365 error codes: AF20050, AF20051, AF20052
* Add retry logic with attempt tracking
  * implement max retry attempts (3) to prevent unbounded retry loops
  * track retry attempts per content ID with failedRetryAttempts map
  * improved error messages include attempt counts (e.g., "attempt 2/3")
  * cleanup of retry attempt counters on success and permanent failures
* We have implemented safeguards against memory exhaustion in high-volume data processing scenarios in the deduplication system (which prevents duplicate message processing)
  * implement size limit for processedContentIDs map (500k entries max, \~50 MB)
  * clear map when limit reached to prevent OOM in high-volume
  * log warning when map is cleared for monitoring/alerting
* We have added memory protection for retry map. This update implements safeguards against memory exhaustion in the retry system. Failed content entries are now automatically removed from the retry tracking map after they exceed their maximum retry attempts, rather than being stored indefinitely.
  * remove failed content after exceeding max retry attempts
  * prevent unbounded growth of failedContentURIs map

</details>

<details>

<summary>v0.2.0</summary>

<mark style="background-color:purple;">**Released on**</mark> <mark style="background-color:purple;"></mark><mark style="background-color:purple;">02/10/2026</mark>

* New logs for errors and pre-fetch operations.
* Added proxy configuration settings.
* In order to use this Listener, you must activate the following environment variable in your distributor using docker compose: `SINGLETON_LISTENER_EXECUTOR=true.`
* Fixed deadlock in the `fetch` method.
* Fixed next page query parameter (`nextpage` > `nextPage`).
* Fixed forever loop in the `listContent` function.

</details>

<details>

<summary>v0.1.0</summary>

<mark style="background-color:purple;">**Released on**</mark> <mark style="background-color:purple;"></mark><mark style="background-color:purple;">20/01/2026</mark>

Added error port when using this Listener in a Pipeline.

</details>

<details>

<summary>v0.0.3</summary>

<mark style="background-color:purple;">**Released on**</mark> <mark style="background-color:purple;"></mark><mark style="background-color:purple;">07/10/2025</mark>

The logger has been replaced by an error notifier. This change represents an architectural shift from passive logging to active error notification, whereby the error notifier proactively alerts about issues.

</details>

<details>

<summary>v0.0.1</summary>

<mark style="background-color:purple;">**Released on**</mark> <mark style="background-color:purple;"></mark><mark style="background-color:purple;">01/23/2025</mark>

Initial version

</details>
