diff --git a/src/_zkapauthorizer/controller.py b/src/_zkapauthorizer/controller.py
index 89d08dfe5e8189597bee87254ea59be6ffe8ac01..3d78b9ddaae7491b0e00cf153855c7d4157d0498 100644
--- a/src/_zkapauthorizer/controller.py
+++ b/src/_zkapauthorizer/controller.py
@@ -220,6 +220,16 @@ class IssuerConfigurationMismatch(Exception):
 @implementer(IRedeemer)
 @attr.s
 class RistrettoRedeemer(object):
+    """
+    An ``IRedeemer`` which speaks the Ristretto-flavored PrivacyPass protocol
+    described at
+    https://docs.rs/challenge-bypass-ristretto/1.0.0-pre.0/challenge_bypass_ristretto/#cryptographic-protocol
+
+    :ivar treq.client.HTTPClient _treq: An HTTP client to use to make calls to
+        the issuer.
+
+    :ivar URL _api_root: The root of the issuer HTTP API.
+    """
     _log = Logger()
 
     _treq = attr.ib()