diff --git a/src/gpioplus/handle.hpp b/src/gpioplus/handle.hpp
index 8bdf4d5..3a66518 100644
--- a/src/gpioplus/handle.hpp
+++ b/src/gpioplus/handle.hpp
@@ -8,34 +8,85 @@
 namespace gpioplus
 {
 
+/** @brief Flags to set when taking a handle */
 struct HandleFlags
 {
+    /** @brief Is the line used for output (otherwise input) */
     bool output;
+    /** @brief Is the line value active at low voltage */
     bool active_low;
+    /** @brief Is the line an open drain */
     bool open_drain;
+    /** @brief Is the line an open source */
     bool open_source;
 
     HandleFlags() = default;
+
+    /** @brief Creates handle flags from the gpio line flags
+     *
+     *  @param[in] line_flags - Line flags used for population
+     */
     explicit HandleFlags(LineFlags line_flags);
 
+    /** @brief Converts this struct to an int bitfield
+     *
+     *  @return The int bitfield usable by the syscall interface
+     */
     uint32_t toInt() const;
 };
 
+/** @class Handle
+ *  @brief Handle to a gpio line handle
+ *  @details Provides a c++ interface for gpio handle operations
+ */
 class Handle
 {
   public:
+    /** @brief Per line information used to construct a handle */
     struct Line
     {
+        /** @brief Offset of the line on the gpio chip */
         uint32_t offset;
+        /** @brief Default output value of the line */
         uint8_t default_value;
     };
+
+    /** @brief Creates a new gpio handle
+     *
+     *  @param[in] chip           - The gpio chip which provides the handle
+     *  @param[in] lines          - A collection of lines the handle provides
+     *  @param[in] flags          - The flags applied to all lines
+     *  @param[in] consumer_label - The functional name of this consumer
+     *  @throws std::system_error for underlying syscall failures
+     */
     Handle(const Chip& chip, const std::vector<Line>& lines, HandleFlags flags,
            std::string_view consumer_label);
 
+    /** @brief Get the file descriptor used for the handle
+     *
+     *  @return The gpio handle file descriptor
+     */
     const internal::Fd& getFd() const;
 
+    /** @brief Get the current values of all associated lines
+     *
+     *  @throws std::system_error for underlying syscall failures
+     *  @return The values of the gpio lines
+     */
     std::vector<uint8_t> getValues() const;
+
+    /** @brief Gets the current values of all associated lines
+     *
+     *  @param[out] values - The values of the gpio lines
+     *  @throws std::system_error for underlying syscall failures
+     */
     void getValues(std::vector<uint8_t>& values) const;
+
+    /** @brief Sets the current values of all associated lines
+     *
+     *  @param[in] values - The new values of the gpio lines
+     *  @throws std::system_error for underlying syscall failures
+     */
     void setValues(const std::vector<uint8_t>& values) const;
 
   private:
