diff --git a/src/libcamera/ipa_proxy.cpp b/src/libcamera/ipa_proxy.cpp
index ec4c2cc823c2..8608b0c92a87 100644
--- a/src/libcamera/ipa_proxy.cpp
+++ b/src/libcamera/ipa_proxy.cpp
@@ -32,6 +32,18 @@ LOG_DEFINE_CATEGORY(IPAProxy)
  * Isolate IPA into separate process.
  */
 
+/**
+ * \enum IPAProxy::ProxyState
+ * \brief Identifies the available operational states of the proxy
+ *
+ * \var IPAProxy::ProxyStopped
+ * \brief The proxy is not active and only synchronous operations are permitted
+ * \var IPAProxy::ProxyStopping
+ * \brief No new tasks can be submitted to the proxy, however existing events can be completed
+ * \var IPAProxy::ProxyRunning
+ * \brief The Proxy is active and asynchronous tasks may be queued
+ */
+
 /**
  * \brief Construct an IPAProxy instance
  * \param[in] ipam The IPA module
@@ -213,4 +225,15 @@ std::string IPAProxy::resolvePath(const std::string &file) const
  * construction.
  */
 
+/**
+ * \var IPAProxy::state_
+ * \brief Current state of the IPAProxy
+ *
+ * The IPAProxy can be Running, Stopped, or Stopping.
+ *
+ * This state provides a means to ensure that asynchronous methods are only
+ * called while the proxy is running, and prevent new tasks being submitted
+ * while still enabling events to complete when the IPAProxy is stopping.
+ */
+
 } /* namespace libcamera */
