# HG changeset patch
# Node ID 8de8850e991d
# Parent  8019945e1c21
diff --git a/doc/reference/libpurple/libpurple.toml.in b/doc/reference/libpurple/libpurple.toml.in
--- a/doc/reference/libpurple/libpurple.toml.in
+++ b/doc/reference/libpurple/libpurple.toml.in
@@ -54,3 +54,27 @@
 content_images = [
 ]
 urlmap_file = "urlmap.js"
+
+[[object]]
+pattern = "DEPRECATED_IN_*"
+hidden = true
+
+[[object]]
+name = "DEPRECATED_FOR"
+hidden = true
+
+[[object]]
+name = "UNAVAILABLE"
+hidden = true
+
+[[object]]
+name = "UNAVAILABLE_MACRO"
+hidden = true
+
+[[object]]
+name = "UNAVAILABLE_STATIC_INLINE"
+hidden = true
+
+[[object]]
+name = "UNAVAILABLE_TYPE"
+hidden = true
\ No newline at end of file
diff --git a/doc/reference/libpurple/meson.build b/doc/reference/libpurple/meson.build
--- a/doc/reference/libpurple/meson.build
+++ b/doc/reference/libpurple/meson.build
@@ -44,5 +44,18 @@
 		install : true,
 		install_dir : docs_dir,
 	)
+
+	test('doc-check',
+		gidocgen,
+		args: [
+			'check',
+			'--config', libpurple_toml,
+			'--add-include-path=@0@'.format(meson.global_build_root() / 'subprojects/birb/birb'),
+			'--add-include-path=@0@'.format(meson.global_build_root() / 'subprojects/gplugin/gplugin'),
+			libpurple_gir[0],
+		],
+		depends: libpurple_gir[0],
+		verbose: true,
+	)
 endif
 
diff --git a/libpurple/action.h b/libpurple/action.h
--- a/libpurple/action.h
+++ b/libpurple/action.h
@@ -37,6 +37,14 @@
 PURPLE_AVAILABLE_TYPE_IN_3_0
 typedef struct _PurpleProtocolAction PurpleProtocolAction;
 
+/**
+ * PurpleProtocolActionCallback:
+ * @action: The action that was activated.
+ *
+ * The callback function for [type@ProtocolAction].
+ *
+ * Since: 3.0
+ */
 PURPLE_AVAILABLE_TYPE_IN_3_0
 typedef void (*PurpleProtocolActionCallback)(PurpleProtocolAction *action);
 
diff --git a/libpurple/blistnode.h b/libpurple/blistnode.h
--- a/libpurple/blistnode.h
+++ b/libpurple/blistnode.h
@@ -319,6 +319,8 @@
  * purple_blist_node_get_extended_menu:
  * @n: The blist node for which to obtain the extended menu items.
  *
+ * Emits the blist-node-extended-menu signal and returns the results.
+ *
  * Returns: (element-type PurpleActionMenu) (transfer full): The extended menu
  *          items for a buddy list node, as harvested by the
  *          blist-node-extended-menu signal.
diff --git a/libpurple/blistnode.c b/libpurple/blistnode.c
--- a/libpurple/blistnode.c
+++ b/libpurple/blistnode.c
@@ -373,6 +373,13 @@
 	obj_class->get_property = purple_blist_node_get_property;
 	obj_class->set_property = purple_blist_node_set_property;
 
+	/**
+	 * PurpleBlistNode:transient:
+	 *
+	 * If %TRUE the node will not be saved to the contact list.
+	 *
+	 * Since: 3.0
+	 */
 	properties[PROP_TRANSIENT] = g_param_spec_boolean("transient",
 				"Transient",
 				"Whether node should not be saved with the buddy list.",
diff --git a/libpurple/buddy.c b/libpurple/buddy.c
--- a/libpurple/buddy.c
+++ b/libpurple/buddy.c
@@ -257,41 +257,92 @@
 		NULL,
 		G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY | G_PARAM_STATIC_STRINGS);
 
+	/**
+	 * PurpleBuddy:name:
+	 *
+	 * The name of the buddy.
+	 *
+	 * Since: 3.0
+	 */
 	properties[PROP_NAME] = g_param_spec_string(
 		"name", "Name",
 		"The name of the buddy.",
 		NULL,
 		G_PARAM_READWRITE | G_PARAM_CONSTRUCT | G_PARAM_STATIC_STRINGS);
 
+	/**
+	 * PurpleBuddy:local-alias:
+	 *
+	 * An alias for the buddy created by the libpurple user.
+	 *
+	 * Since: 3.0
+	 */
 	properties[PROP_LOCAL_ALIAS] = g_param_spec_string(
 		"local-alias", "Local alias",
 		"Local alias of thee buddy.",
 		NULL,
 		G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
 
+	/**
+	 * PurpleBuddy:server-alias:
+	 *
+	 * An alias that is created by the remote user.
+	 *
+	 * This is typically called a display name now.
+	 *
+	 * Since: 3.0
+	 */
 	properties[PROP_SERVER_ALIAS] = g_param_spec_string(
 		"server-alias", "Server alias",
 		"Server-side alias of the buddy.",
 		NULL,
 		G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
 
+	/**
+	 * PurpleBuddy:icon:
+	 *
+	 * An avatar for the buddy.
+	 *
+	 * Since: 3.0
+	 */
 	properties[PROP_ICON] = g_param_spec_pointer(
 		"icon", "Buddy icon",
 		"The icon for the buddy.",
 		G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
 
+	/**
+	 * PurpleBuddy:account:
+	 *
+	 * The [class@Account] that this buddy belongs to.
+	 *
+	 * Since: 3.0
+	 */
 	properties[PROP_ACCOUNT] = g_param_spec_object(
 		"account", "Account",
 		"The account for the buddy.",
 		PURPLE_TYPE_ACCOUNT,
 		G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY | G_PARAM_STATIC_STRINGS);
 
+	/**
+	 * PurpleBuddy:presence:
+	 *
+	 * The [class@Presence] for this buddy.
+	 *
+	 * Since: 3.0
+	 */
 	properties[PROP_PRESENCE] = g_param_spec_object(
 		"presence", "Presence",
 		"The status information for the buddy.",
 		PURPLE_TYPE_PRESENCE,
 		G_PARAM_READABLE | G_PARAM_STATIC_STRINGS);
 
+	/**
+	 * PurpleBuddy:media-caps:
+	 *
+	 * The media caps for this buddy.
+	 *
+	 * Since: 3.0
+	 */
 	properties[PROP_MEDIA_CAPS] = g_param_spec_enum(
 		"media-caps", "Media capabilities",
 		"The media capabilities of the buddy.",
diff --git a/libpurple/buddyicon.h b/libpurple/buddyicon.h
--- a/libpurple/buddyicon.h
+++ b/libpurple/buddyicon.h
@@ -59,6 +59,8 @@
  * @PURPLE_ICON_SCALE_DISPLAY: We scale the icon when we display it
  * @PURPLE_ICON_SCALE_SEND:    We scale the icon before we send it to the server
  *
+ * Flags for when an icon should be scaled.
+ *
  * Since: 2.0
  */
 typedef enum  /*< flags >*/
diff --git a/libpurple/chat.c b/libpurple/chat.c
--- a/libpurple/chat.c
+++ b/libpurple/chat.c
@@ -265,6 +265,13 @@
 	obj_class->set_property = purple_chat_set_property;
 	obj_class->constructed = purple_chat_constructed;
 
+	/**
+	 * PurpleChat:alias:
+	 *
+	 * The alias of the chat.
+	 *
+	 * Since: 3.0
+	 */
 	properties[PROP_ALIAS] = g_param_spec_string(
 		"alias",
 		"Alias",
@@ -273,6 +280,13 @@
 		G_PARAM_READWRITE | G_PARAM_CONSTRUCT | G_PARAM_STATIC_STRINGS
 	);
 
+	/**
+	 * PurpleChat:account:
+	 *
+	 * The account that the chat belongs to.
+	 *
+	 * Since: 3.0
+	 */
 	properties[PROP_ACCOUNT] = g_param_spec_object(
 		"account",
 		"Account",
@@ -281,6 +295,13 @@
 		G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY | G_PARAM_STATIC_STRINGS
 	);
 
+	/**
+	 * PurpleChat:components:
+	 *
+	 * The components for the chat.
+	 *
+	 * Since: 3.0
+	 */
 	properties[PROP_COMPONENTS] = g_param_spec_pointer(
 		"components",
 		"Components",
diff --git a/libpurple/circularbuffer.h b/libpurple/circularbuffer.h
--- a/libpurple/circularbuffer.h
+++ b/libpurple/circularbuffer.h
@@ -34,6 +34,13 @@
 
 G_BEGIN_DECLS
 
+/**
+ * PurpleCircularBuffer:
+ *
+ * A circular buffer implementation.
+ *
+ * Since: 3.0
+ */
 #define PURPLE_TYPE_CIRCULAR_BUFFER (purple_circular_buffer_get_type())
 
 PURPLE_AVAILABLE_IN_3_0
diff --git a/libpurple/circularbuffer.c b/libpurple/circularbuffer.c
--- a/libpurple/circularbuffer.c
+++ b/libpurple/circularbuffer.c
@@ -315,19 +315,47 @@
 	buffer_class->max_read_size = purple_circular_buffer_real_max_read_size;
 	buffer_class->mark_read = purple_circular_buffer_real_mark_read;
 
+	/**
+	 * PurpleCircularBuffer:grow-size:
+	 *
+	 * The grow size of the buffer.
+	 *
+	 * Since: 3.0
+	 */
 	properties[PROP_GROW_SIZE] = g_param_spec_uint64(
 	        "grow-size", "grow-size", "The grow size of the buffer", 0,
 	        G_MAXSIZE, 0,
 	        G_PARAM_READWRITE | G_PARAM_CONSTRUCT | G_PARAM_STATIC_STRINGS);
 
+	/**
+	 * PurpleCircularBuffer:buffer-used:
+	 *
+	 * How much of the buffer that has been used.
+	 *
+	 * Since: 3.0
+	 */
 	properties[PROP_BUFFER_USED] = g_param_spec_uint64(
 	        "buffer-used", "buffer-used", "The amount of the buffer used", 0,
 	        G_MAXSIZE, 0, G_PARAM_READABLE | G_PARAM_STATIC_STRINGS);
 
+	/**
+	 * PurpleCircularBuffer:input:
+	 *
+	 * The input pointer of the buffer.
+	 *
+	 * Since: 3.0
+	 */
 	properties[PROP_INPUT] = g_param_spec_pointer("input", "input",
 		                     "The input pointer of the buffer",
 		                     G_PARAM_READABLE | G_PARAM_STATIC_STRINGS);
 
+	/**
+	 * PurpleCircularBuffer:output:
+	 *
+	 * The output pointer of the buffer.
+	 *
+	 * Since: 3.0
+	 */
 	properties[PROP_OUTPUT] = g_param_spec_pointer("output", "output",
 		                     "The output pointer of the buffer",
 		                     G_PARAM_READABLE | G_PARAM_STATIC_STRINGS);
diff --git a/libpurple/cmds.h b/libpurple/cmds.h
--- a/libpurple/cmds.h
+++ b/libpurple/cmds.h
@@ -91,6 +91,8 @@
  *
  * A function implementing a command, as passed to purple_cmd_register().
  *
+ * Returns: The result of the command.
+ *
  * Since: 2.0
  */
 typedef PurpleCmdRet (*PurpleCmdFunc)(PurpleConversation *conversation, const gchar *cmd,
diff --git a/libpurple/connection.c b/libpurple/connection.c
--- a/libpurple/connection.c
+++ b/libpurple/connection.c
@@ -893,9 +893,16 @@
 	klass->connect = purple_connection_default_connect;
 	klass->disconnect = purple_connection_default_disconnect;
 
+	/**
+	 * PurpleConnection:id:
+	 *
+	 * The unique identifier for the connection.
+	 *
+	 * Since: 3.0
+	 */
 	properties[PROP_ID] = g_param_spec_string(
 		"id", "id",
-		"The identifier of the account",
+		"The identifier of the connection",
 		NULL,
 		G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY | G_PARAM_STATIC_STRINGS);
 
@@ -915,34 +922,78 @@
 		G_TYPE_CANCELLABLE,
 		G_PARAM_READABLE | G_PARAM_STATIC_STRINGS);
 
+	/**
+	 * PurpleConnection:protocol:
+	 *
+	 * The protocol that this connection is for.
+	 *
+	 * Since: 3.0
+	 */
 	properties[PROP_PROTOCOL] = g_param_spec_object(
 		"protocol", "Protocol",
 		"The protocol that the connection is using.",
 		PURPLE_TYPE_PROTOCOL,
 		G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY | G_PARAM_STATIC_STRINGS);
 
+	/**
+	 * PurpleConnection:flags:
+	 *
+	 * The flags for this connection.
+	 *
+	 * Since: 3.0
+	 */
 	properties[PROP_FLAGS] = g_param_spec_flags(
 		"flags", "Connection flags",
 		"The flags of the connection.",
 		PURPLE_TYPE_CONNECTION_FLAGS, 0,
 		G_PARAM_READWRITE | G_PARAM_CONSTRUCT | G_PARAM_STATIC_STRINGS);
 
+	/**
+	 * PurpleConnection:state:
+	 *
+	 * The state of the connection.
+	 *
+	 * Since: 3.0
+	 */
 	properties[PROP_STATE] = g_param_spec_enum(
 		"state", "Connection state",
 		"The current state of the connection.",
 		PURPLE_TYPE_CONNECTION_STATE, PURPLE_CONNECTION_STATE_DISCONNECTED,
 		G_PARAM_READWRITE | G_PARAM_CONSTRUCT | G_PARAM_STATIC_STRINGS);
 
+	/**
+	 * PurpleConnection:account:
+	 *
+	 * The account this connection belongs to.
+	 *
+	 * Since: 3.0
+	 */
 	properties[PROP_ACCOUNT] = g_param_spec_object(
 		"account", "Account",
 		"The account using the connection.", PURPLE_TYPE_ACCOUNT,
 		G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY | G_PARAM_STATIC_STRINGS);
 
+	/**
+	 * PurpleConnection:password:
+	 *
+	 * The password for this connection.
+	 *
+	 * This is only stored for reconnections and may go away in the future.
+	 *
+	 * Since: 3.0
+	 */
 	properties[PROP_PASSWORD] = g_param_spec_string(
 		"password", "Password",
 		"The password used for connection.", NULL,
 		G_PARAM_READWRITE | G_PARAM_CONSTRUCT | G_PARAM_STATIC_STRINGS);
 
+	/**
+	 * PurpleConnection:display-name:
+	 *
+	 * The display name for the account.
+	 *
+	 * Since: 3.0
+	 */
 	properties[PROP_DISPLAY_NAME] = g_param_spec_string(
 		"display-name", "Display name",
 		"Your name that appears to other people.", NULL,
diff --git a/libpurple/contact.c b/libpurple/contact.c
--- a/libpurple/contact.c
+++ b/libpurple/contact.c
@@ -328,6 +328,13 @@
 	obj_class->get_property = purple_meta_contact_get_property;
 	obj_class->set_property = purple_meta_contact_set_property;
 
+	/**
+	 * PurpleMetaContact:alias:
+	 *
+	 * The alias for the contact.
+	 *
+	 * Since: 3.0
+	 */
 	properties[PROP_ALIAS] = g_param_spec_string(
 		"alias",
 		"Alias",
@@ -336,6 +343,13 @@
 		G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS
 	);
 
+	/**
+	 * PurpleMetaContact:priority-buddy:
+	 *
+	 * The priority buddy of the contact.
+	 *
+	 * Since: 3.0
+	 */
 	properties[PROP_PRIORITY_BUDDY] = g_param_spec_object(
 		"priority-buddy",
 		"Priority buddy",
diff --git a/libpurple/core.h b/libpurple/core.h
--- a/libpurple/core.h
+++ b/libpurple/core.h
@@ -33,6 +33,15 @@
 #include "purpleui.h"
 #include "purpleversion.h"
 
+/**
+ * PurpleCore:
+ *
+ * The core instance for libpurple.
+ *
+ * This is primarily used for connecting to signals.
+ *
+ * Since: 2.0
+ */
 typedef struct PurpleCore PurpleCore;
 
 G_BEGIN_DECLS
@@ -117,7 +126,7 @@
 PurpleUi *purple_core_get_ui(void);
 
 /**
- * purple_get_local_dir:
+ * purple_get_locale_dir:
  *
  * Gets the search directory for translations.
  *
diff --git a/libpurple/countingnode.c b/libpurple/countingnode.c
--- a/libpurple/countingnode.c
+++ b/libpurple/countingnode.c
@@ -220,6 +220,13 @@
 	obj_class->get_property = purple_counting_node_get_property;
 	obj_class->set_property = purple_counting_node_set_property;
 
+	/**
+	 * PurpleCountingNode:total-size:
+	 *
+	 * The number of children under this node.
+	 *
+	 * Since: 3.0
+	 */
 	properties[PROP_TOTAL_SIZE] = g_param_spec_int(
 		"total-size",
 		"Total size",
@@ -228,6 +235,13 @@
 		G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS
 	);
 
+	/**
+	 * PurpleCountingNode:current-size:
+	 *
+	 * The number of children with online accounts.
+	 *
+	 * Since: 3.0
+	 */
 	properties[PROP_CURRENT_SIZE] = g_param_spec_int(
 		"current-size",
 		"Current size",
@@ -236,6 +250,13 @@
 		G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS
 	);
 
+	/**
+	 * PurpleCountingNode:online-count:
+	 *
+	 * The number of children that are online.
+	 *
+	 * Since: 3.0
+	 */
 	properties[PROP_ONLINE_COUNT] = g_param_spec_int(
 		"online-count",
 		"Online count",
diff --git a/libpurple/group.c b/libpurple/group.c
--- a/libpurple/group.c
+++ b/libpurple/group.c
@@ -331,6 +331,13 @@
 	obj_class->get_property = purple_group_get_property;
 	obj_class->set_property = purple_group_set_property;
 
+	/**
+	 * PurpleGroup:name:
+	 *
+	 * The name of the group.
+	 *
+	 * Since: 3.0
+	 */
 	properties[PROP_NAME] = g_param_spec_string(
 		"name",
 		"Name",
diff --git a/libpurple/idle.h b/libpurple/idle.h
--- a/libpurple/idle.h
+++ b/libpurple/idle.h
@@ -53,6 +53,7 @@
 
 /**
  * purple_idle_set:
+ * @time: The time to set the idle time to.
  *
  * Fake our idle time by setting the time at which our
  * accounts purportedly became idle.  This is used by
diff --git a/libpurple/image.c b/libpurple/image.c
--- a/libpurple/image.c
+++ b/libpurple/image.c
@@ -140,6 +140,13 @@
 	gobj_class->get_property = purple_image_get_property;
 	gobj_class->set_property = purple_image_set_property;
 
+	/**
+	 * PurpleImage:path:
+	 *
+	 * The file path for the image if one was provided.
+	 *
+	 * Since: 3.0
+	 */
 	properties[PROP_PATH] = g_param_spec_string(
 		"path",
 		"path",
@@ -148,6 +155,13 @@
 		G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY | G_PARAM_STATIC_STRINGS
 	);
 
+	/**
+	 * PurpleImage:contents:
+	 *
+	 * The contents of the image.
+	 *
+	 * Since: 3.0
+	 */
 	properties[PROP_CONTENTS] = g_param_spec_boxed(
 		"contents",
 		"contents",
@@ -156,6 +170,13 @@
 		G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY | G_PARAM_STATIC_STRINGS
 	);
 
+	/**
+	 * PurpleImage:size:
+	 *
+	 * The size of the image in bytes.
+	 *
+	 * Since: 3.0
+	 */
 	properties[PROP_SIZE] = g_param_spec_uint64(
 		"size",
 		"size",
diff --git a/libpurple/media/backend-iface.h b/libpurple/media/backend-iface.h
--- a/libpurple/media/backend-iface.h
+++ b/libpurple/media/backend-iface.h
@@ -50,13 +50,6 @@
  */
 typedef struct _PurpleMediaBackend PurpleMediaBackend;
 
-/**
- * PurpleMediaBackendInterface:
- *
- * A structure to derive media backends from.
- *
- * Since: 3.0
- */
 typedef struct _PurpleMediaBackendInterface PurpleMediaBackendInterface;
 
 struct _PurpleMediaBackendInterface
diff --git a/libpurple/notify.h b/libpurple/notify.h
--- a/libpurple/notify.h
+++ b/libpurple/notify.h
@@ -33,8 +33,22 @@
 
 #include "purpleversion.h"
 
+/**
+ * PurpleNotifyUserInfoEntry:
+ *
+ * A entry for the user information.
+ *
+ * Since: 2.0
+ */
 typedef struct _PurpleNotifyUserInfoEntry	PurpleNotifyUserInfoEntry;
 
+/**
+ * PurpleNotifyUserInfo:
+ *
+ * A collection of user information entries.
+ *
+ * Since: 2.0
+ */
 #define  PURPLE_TYPE_NOTIFY_USER_INFO  (purple_notify_user_info_get_type())
 typedef struct _PurpleNotifyUserInfo		PurpleNotifyUserInfo;
 
@@ -556,6 +570,8 @@
  * Create a textual representation of a PurpleNotifyUserInfo, separating
  * entries with newline
  *
+ * Returns: (transfer full): The text.
+ *
  * Since: 2.0
  */
 PURPLE_AVAILABLE_IN_ALL
diff --git a/libpurple/plugins.h b/libpurple/plugins.h
--- a/libpurple/plugins.h
+++ b/libpurple/plugins.h
@@ -33,6 +33,12 @@
 #define PURPLE_PLUGINS_DOMAIN          (g_quark_from_static_string("plugins"))
 
 #define PURPLE_TYPE_PLUGIN             GPLUGIN_TYPE_PLUGIN
+/**
+ * PURPLE_PLUGIN:
+ * @obj: The instance.
+ *
+ * A typecast macro to cast @obj to PurplePlugin.
+ */
 #define PURPLE_PLUGIN(obj)             GPLUGIN_PLUGIN(obj)
 #define PURPLE_IS_PLUGIN(obj)          GPLUGIN_IS_PLUGIN(obj)
 #define PURPLE_PLUGIN_GET_IFACE(obj)   GPLUGIN_PLUGIN_GET_IFACE(obj)
@@ -47,6 +53,15 @@
  */
 typedef GPluginPlugin PurplePlugin;
 
+/**
+ * PurplePluginInterface:
+ *
+ * Represents the plugin interface.
+ *
+ * This type is an alias for GPluginPluginInterface.
+ *
+ * Since: 3.0
+ */
 typedef GPluginPluginInterface PurplePluginInterface;
 
 #include "purpleplugininfo.h"
@@ -124,6 +139,7 @@
 
 /**
  * purple_plugin_disable:
+ * @plugin: The plugin.
  *
  * Disable a plugin.
  *
diff --git a/libpurple/prefs.h b/libpurple/prefs.h
--- a/libpurple/prefs.h
+++ b/libpurple/prefs.h
@@ -524,6 +524,8 @@
  *
  * Read preferences
  *
+ * Returns: %TRUE if the prefs loaded successfully, otherwise %FALSE.
+ *
  * Since: 2.0
  */
 PURPLE_AVAILABLE_IN_ALL
diff --git a/libpurple/purpleaccount.h b/libpurple/purpleaccount.h
--- a/libpurple/purpleaccount.h
+++ b/libpurple/purpleaccount.h
@@ -747,6 +747,8 @@
  *
  * Whether the account supports sending offline messages to buddy.
  *
+ * Returns: %TRUE if offline messages are supported, otherwise %FALSE.
+ *
  * Since: 2.0
  */
 PURPLE_AVAILABLE_IN_ALL
diff --git a/libpurple/purpleaccountmanager.h b/libpurple/purpleaccountmanager.h
--- a/libpurple/purpleaccountmanager.h
+++ b/libpurple/purpleaccountmanager.h
@@ -239,6 +239,7 @@
 /**
  * purple_account_manager_set_online:
  * @manager: The instance.
+ * @online: The new online status.
  *
  * Sets whether or not new accounts should automatically have
  * [method@Account.connect] called for them.
diff --git a/libpurple/purpleaccountpresence.c b/libpurple/purpleaccountpresence.c
--- a/libpurple/purpleaccountpresence.c
+++ b/libpurple/purpleaccountpresence.c
@@ -175,6 +175,13 @@
 	presence_class->update_idle = purple_account_presence_update_idle;
 	presence_class->get_statuses = purple_account_presence_get_statuses;
 
+	/**
+	 * PurpleAccountPresence:account:
+	 *
+	 * The account for this presence.
+	 *
+	 * Since: 3.0
+	 */
 	properties[PROP_ACCOUNT] = g_param_spec_object(
 		"account", "Account",
 		"The account for this presence.",
diff --git a/libpurple/purpleattachment.h b/libpurple/purpleattachment.h
--- a/libpurple/purpleattachment.h
+++ b/libpurple/purpleattachment.h
@@ -64,6 +64,8 @@
  *
  * Creates a new #PurpleAttachment with the given @id and @content_type.
  *
+ * Returns: (transfer full): The new attachment.
+ *
  * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
diff --git a/libpurple/purplebuddypresence.c b/libpurple/purplebuddypresence.c
--- a/libpurple/purplebuddypresence.c
+++ b/libpurple/purplebuddypresence.c
@@ -250,6 +250,13 @@
 	presence_class->update_idle = purple_buddy_presence_update_idle;
 	presence_class->get_statuses = purple_buddy_presence_get_statuses;
 
+	/**
+	 * PurpleBuddyPresence:buddy:
+	 *
+	 * The buddy for this presence.
+	 *
+	 * Since: 3.0
+	 */
 	properties[PROP_BUDDY] = g_param_spec_object(
 		"buddy", "Buddy",
 		"The buddy for this presence.",
diff --git a/libpurple/purplechatconversation.c b/libpurple/purplechatconversation.c
--- a/libpurple/purplechatconversation.c
+++ b/libpurple/purplechatconversation.c
@@ -255,7 +255,7 @@
 	conv_class->write_message = chat_conversation_write_message;
 
 	/**
-	 * PurpleChatConversation::chat-id:
+	 * PurpleChatConversation:chat-id:
 	 *
 	 * The identifier of the chat.
 	 */
@@ -266,7 +266,7 @@
 		G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
 
 	/**
-	 * PurpleChatConversation::left:
+	 * PurpleChatConversation:left:
 	 *
 	 * Whether the user has left the chat or not.
 	 */
diff --git a/libpurple/purplechatuser.c b/libpurple/purplechatuser.c
--- a/libpurple/purplechatuser.c
+++ b/libpurple/purplechatuser.c
@@ -171,24 +171,52 @@
 	obj_class->set_property = purple_chat_user_set_property;
 	obj_class->finalize = purple_chat_user_finalize;
 
+	/**
+	 * PurpleChatUser:chat:
+	 *
+	 * The chat the user is in.
+	 *
+	 * Since: 3.0
+	 */
 	properties[PROP_CHAT] = g_param_spec_object(
 		"chat", "Chat",
 		"The chat the buddy belongs to.",
 		PURPLE_TYPE_CHAT_CONVERSATION,
 		G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY | G_PARAM_STATIC_STRINGS);
 
+	/**
+	 * PurpleChatUser:name:
+	 *
+	 * The name of the user.
+	 *
+	 * Since: 3.0
+	 */
 	properties[PROP_NAME] = g_param_spec_string(
 		"name", "Name",
 		"Name of the chat user.",
 		NULL,
 		G_PARAM_READWRITE | G_PARAM_CONSTRUCT | G_PARAM_STATIC_STRINGS);
 
+	/**
+	 * PurpleChatUser:alias:
+	 *
+	 * The alias of the user.
+	 *
+	 * Since: 3.0
+	 */
 	properties[PROP_ALIAS] = g_param_spec_string(
 		"alias", "Alias",
 		"Alias of the chat user.",
 		NULL,
 		G_PARAM_READWRITE | G_PARAM_CONSTRUCT | G_PARAM_STATIC_STRINGS);
 
+	/**
+	 * PurpleChatUser:flags:
+	 *
+	 * The flags for the user.
+	 *
+	 * Since: 3.0
+	 */
 	properties[PROP_FLAGS] = g_param_spec_flags(
 		"flags", "Buddy flags",
 		"The flags for the chat user.",
diff --git a/libpurple/purpleconnectionerrorinfo.h b/libpurple/purpleconnectionerrorinfo.h
--- a/libpurple/purpleconnectionerrorinfo.h
+++ b/libpurple/purpleconnectionerrorinfo.h
@@ -75,6 +75,8 @@
  *         self-signed.
  * @PURPLE_CONNECTION_ERROR_CERT_OTHER_ERROR: There was some other error
  *         validating the server's SSL certificate.
+ * @PURPLE_CONNECTION_ERROR_CUSTOM_TEMPORARY: A custom error that is temporary.
+ * @PURPLE_CONNECTION_ERROR_CUSTOM_FATAL: A custom error that is fatal.
  * @PURPLE_CONNECTION_ERROR_OTHER_ERROR: Some other error occurred which fits
  *         into none of the other categories.
  *
diff --git a/libpurple/purplecontactinfo.h b/libpurple/purplecontactinfo.h
--- a/libpurple/purplecontactinfo.h
+++ b/libpurple/purplecontactinfo.h
@@ -67,13 +67,6 @@
 
 #include "purpleperson.h"
 
-/**
- * PurpleContactInfoClass:
- *
- * The class struct for [class@Purple.ContactInfo].
- *
- * Since: 3.0
- */
 struct _PurpleContactInfoClass {
 	/*< private >*/
 	GObjectClass parent;
@@ -316,7 +309,7 @@
 GTimeZone *purple_contact_info_get_time_zone(PurpleContactInfo *info);
 
 /**
- * purple_contact_info-set_time_zone:
+ * purple_contact_info_set_time_zone:
  * @info: The instance.
  * @time_zone: (transfer none) (nullable): The new time zone.
  *
@@ -325,7 +318,7 @@
  * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
-void purple_contact_info_set_time_zone(PurpleContactInfo *info, GTimeZone *timezone);
+void purple_contact_info_set_time_zone(PurpleContactInfo *info, GTimeZone *time_zone);
 
 /**
  * purple_contact_info_get_note:
diff --git a/libpurple/purpleconversation.h b/libpurple/purpleconversation.h
--- a/libpurple/purpleconversation.h
+++ b/libpurple/purpleconversation.h
@@ -403,6 +403,8 @@
  *
  * Get the features supported by the given conversation.
  *
+ * Returns: The flags.
+ *
  * Since: 2.0
  */
 PURPLE_AVAILABLE_IN_ALL
diff --git a/libpurple/purpleconversation.c b/libpurple/purpleconversation.c
--- a/libpurple/purpleconversation.c
+++ b/libpurple/purpleconversation.c
@@ -688,6 +688,13 @@
 		PURPLE_CONVERSATION_TYPE_UNSET,
 		G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
 
+	/**
+	 * PurpleConversation:account:
+	 *
+	 * The account this conversation belongs to.
+	 *
+	 * Since: 3.0
+	 */
 	properties[PROP_ACCOUNT] = g_param_spec_object(
 		"account", "Account",
 		"The account for the conversation.",
@@ -710,18 +717,39 @@
 		PURPLE_TYPE_AVATAR,
 		G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
 
+	/**
+	 * PurpleConversation:name:
+	 *
+	 * The name of the conversation.
+	 *
+	 * Since: 3.0
+	 */
 	properties[PROP_NAME] = g_param_spec_string(
 		"name", "Name",
 		"The name of the conversation.",
 		NULL,
 		G_PARAM_READWRITE | G_PARAM_CONSTRUCT | G_PARAM_STATIC_STRINGS);
 
+	/**
+	 * PurpleConversation:title:
+	 *
+	 * The title of the conversation.
+	 *
+	 * Since: 3.0
+	 */
 	properties[PROP_TITLE] = g_param_spec_string(
 		"title", "Title",
 		"The title of the conversation.",
 		NULL,
 		G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
 
+	/**
+	 * PurpleConversation:features:
+	 *
+	 * The features that this conversation supports.
+	 *
+	 * Since: 3.0
+	 */
 	properties[PROP_FEATURES] = g_param_spec_flags(
 		"features", "Connection features",
 		"The connection features of the conversation.",
diff --git a/libpurple/purpledebugui.h b/libpurple/purpledebugui.h
--- a/libpurple/purpledebugui.h
+++ b/libpurple/purpledebugui.h
@@ -50,10 +50,7 @@
 #include "debug.h"
 
 /**
- * PurpleDebugUiInterface:
- * @print: Called to output a debug string to the UI.
- * @is_enabled: Returns if debug printing is enabled in the UI for a @level and
- *              @category.
+ * PurpleDebugUi:
  *
  * Debug UI operations.
  */
diff --git a/libpurple/purplefiletransfer.h b/libpurple/purplefiletransfer.h
--- a/libpurple/purplefiletransfer.h
+++ b/libpurple/purplefiletransfer.h
@@ -47,6 +47,8 @@
  * @PURPLE_FILE_TRANSFER_STATE_FINISHED: The transfer has completed
  *                                       successfully.
  * @PURPLE_FILE_TRANSFER_STATE_FAILED: The transfer failed.
+ *
+ * The possible states that a file transfer can be in.
  */
 typedef enum {
 	PURPLE_FILE_TRANSFER_STATE_UNKNOWN,
diff --git a/libpurple/purpleidlemanager.c b/libpurple/purpleidlemanager.c
--- a/libpurple/purpleidlemanager.c
+++ b/libpurple/purpleidlemanager.c
@@ -84,7 +84,7 @@
 	obj_class->get_property = purple_idle_manager_get_property;
 
 	/**
-	 * PurpleIdleManager::timestamp:
+	 * PurpleIdleManager:timestamp:
 	 *
 	 * The aggregate of the oldest idle timestamp of all of the sources that
 	 * are known.
diff --git a/libpurple/purpleidleui.h b/libpurple/purpleidleui.h
--- a/libpurple/purpleidleui.h
+++ b/libpurple/purpleidleui.h
@@ -42,7 +42,7 @@
 G_DECLARE_INTERFACE(PurpleIdleUi, purple_idle_ui, PURPLE, IDLE_UI, GObject)
 
 /**
- * PurpleIdleUiInterface:
+ * PurpleIdleUi:
  * @get_idle_time: vfunc to get the time that the user interface has been idle.
  *
  * An interface that a user interface can implement to let the core determine
diff --git a/libpurple/purpleimconversation.c b/libpurple/purpleimconversation.c
--- a/libpurple/purpleimconversation.c
+++ b/libpurple/purpleimconversation.c
@@ -192,6 +192,13 @@
 
 	conv_class->write_message = im_conversation_write_message;
 
+	/**
+	 * PurpleIMConversation:typing-state:
+	 *
+	 * The typing state of the remote user.
+	 *
+	 * Since: 3.0
+	 */
 	properties[PROP_TYPING_STATE] = g_param_spec_enum(
 		"typing-state", "Typing state",
 		"Status of the user's typing of a message.",
diff --git a/libpurple/purplemenu.h b/libpurple/purplemenu.h
--- a/libpurple/purplemenu.h
+++ b/libpurple/purplemenu.h
@@ -34,6 +34,13 @@
 
 G_BEGIN_DECLS
 
+/**
+ * PURPLE_MENU_ATTRIBUTE_DYNAMIC_TARGET:
+ *
+ * A constant to help when defining actions that have a dynamic-target value.
+ *
+ * Since: 3.0
+ */
 #define PURPLE_MENU_ATTRIBUTE_DYNAMIC_TARGET "dynamic-target"
 
 /**
diff --git a/libpurple/purplemessage.h b/libpurple/purplemessage.h
--- a/libpurple/purplemessage.h
+++ b/libpurple/purplemessage.h
@@ -399,7 +399,7 @@
  *
  * Adds @attachment to @message.
  *
- * Returns %TRUE if an attachment with the same ID did not already exist.
+ * Returns: %TRUE if an attachment with the same ID did not already exist.
  *
  * Since: 3.0
  */
diff --git a/libpurple/purplemessage.c b/libpurple/purplemessage.c
--- a/libpurple/purplemessage.c
+++ b/libpurple/purplemessage.c
@@ -300,7 +300,7 @@
 		G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
 
 	/**
-	 * PurpleMessage:content:
+	 * PurpleMessage:contents:
 	 *
 	 * The contents of the message.
 	 *
@@ -401,7 +401,7 @@
 		G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
 
 	/**
-	 * PurpleMessaged:edited:
+	 * PurpleMessage:edited:
 	 *
 	 * Whether or not this message has been edited.
 	 *
@@ -416,7 +416,7 @@
 		G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
 
 	/**
-	 * PurpleMessage:edit-at:
+	 * PurpleMessage:edited-at:
 	 *
 	 * The time that the message was last edited at. This is protocol dependent
 	 * and possibly client dependent as well. So if this is %NULL that doesn't
diff --git a/libpurple/purplenotification.h b/libpurple/purplenotification.h
--- a/libpurple/purplenotification.h
+++ b/libpurple/purplenotification.h
@@ -39,6 +39,25 @@
 
 /**
  * PurpleNotificationType:
+ * @PURPLE_NOTIFICATION_TYPE_UNKNOWN: This type is unknown.
+ * @PURPLE_NOTIFICATION_TYPE_GENERIC: A generic notification that is just text
+ *                                    that may have links.
+ * @PURPLE_NOTIFICATION_TYPE_CONNECTION_ERROR: A notification that is for a
+ *                                             connection error.
+ * @PURPLE_NOTIFICATION_TYPE_AUTHORIZATION_REQUEST: A notification for a
+ *                                                  contact authorization
+ *                                                  request.
+ * @PURPLE_NOTIFICATION_TYPE_ADD_CONTACT: A notification for when a contact add
+ *                                        you to their contact list.
+ * @PURPLE_NOTIFICATION_TYPE_FILE_TRANSFER: A notification for a file transfer.
+ * @PURPLE_NOTIFICATION_TYPE_CHAT_INVITE: A notification when the user has been
+ *                                        invited to a chat.
+ * @PURPLE_NOTIFICATION_TYPE_MENTION: A notification that the user has been
+ *                                    mentioned.
+ * @PURPLE_NOTIFICATION_TYPE_REACTION: A notification when a reaction has been
+ *                                     added to message.
+ *
+ * The different types of notifications.
  *
  * Since: 3.0
  */
diff --git a/libpurple/purpleperson.h b/libpurple/purpleperson.h
--- a/libpurple/purpleperson.h
+++ b/libpurple/purpleperson.h
@@ -225,7 +225,7 @@
 const char *purple_person_get_name_for_display(PurplePerson *person);
 
 /**
- * purple_person_add_contact:
+ * purple_person_add_contact_info:
  * @person: The instance.
  * @info: The [class@Purple.ContactInfo] to add.
  *
@@ -267,7 +267,7 @@
 PURPLE_AVAILABLE_IN_3_0
 PurpleContactInfo *purple_person_get_priority_contact_info(PurplePerson *person);
 
-/*
+/**
  * purple_person_has_contacts:
  * @person: The instance.
  *
diff --git a/libpurple/purpleplugininfo.c b/libpurple/purpleplugininfo.c
--- a/libpurple/purpleplugininfo.c
+++ b/libpurple/purpleplugininfo.c
@@ -210,6 +210,13 @@
 	obj_class->get_property = purple_plugin_info_get_property;
 	obj_class->set_property = purple_plugin_info_set_property;
 
+	/**
+	 * PurplePluginInfo:flags:
+	 *
+	 * Flags for the plugin.
+	 *
+	 * Since: 3.0
+	 */
 	properties[PROP_FLAGS] = g_param_spec_flags(
 		"flags", "Plugin flags",
 		"The flags for the plugin",
diff --git a/libpurple/purpleprotocol.h b/libpurple/purpleprotocol.h
--- a/libpurple/purpleprotocol.h
+++ b/libpurple/purpleprotocol.h
@@ -163,6 +163,9 @@
  * @IFACE:    The interface name in caps. e.g. <literal>CLIENT</literal>
  * @func:     The function to check
  *
+ * Checks if a protocol plugin implements an interface and a specific function
+ * in the interface.
+ *
  * Returns: %TRUE if a protocol implements a function in an interface,
  *          %FALSE otherwise.
  *
diff --git a/libpurple/purpleprotocolactions.h b/libpurple/purpleprotocolactions.h
--- a/libpurple/purpleprotocolactions.h
+++ b/libpurple/purpleprotocolactions.h
@@ -49,24 +49,6 @@
  * Since: 3.0
  */
 
-/**
- * PurpleProtocolActionsInterface:
- * @get_prefix: The prefix used for the actions in the group. If this isn't
- *              implemented, the id of the protocol will be used instead.
- * @get_action_group: Returns the actions the protocol can perform. If actions
- *                    depend on connectivity, connect to the relevant signals
- *                    on the @connection and signal the action has changed with
- *                    [iface@GLib.ActionGroup] signals.
- * @get_menu: Get the menu used to display protocol actions. In Pidgin, these
- *            will show up in the Accounts menu, under a submenu with the name
- *            of the account.
- *
- * The protocol actions interface.
- *
- * This interface provides a gateway between purple and the protocol.
- *
- * Since: 3.0
- */
 struct _PurpleProtocolActionsInterface {
 	/*< private >*/
 	GTypeInterface parent;
diff --git a/libpurple/purpleprotocolchat.h b/libpurple/purpleprotocolchat.h
--- a/libpurple/purpleprotocolchat.h
+++ b/libpurple/purpleprotocolchat.h
@@ -77,36 +77,6 @@
 
 G_BEGIN_DECLS
 
-/**
- * PurpleProtocolChatInterface:
- * @info: Returns a list of #PurpleProtocolChatEntry structs, which represent
- *        information required by the protocol to join a chat. libpurple will
- *        call join_chat along with the information filled by the user.
- * @info_defaults: Returns a hashtable which maps #PurpleProtocolChatEntry
- *                 struct identifiers to default options as strings based on
- *                 @chat_name. The resulting hashtable should be created with
- *                 #g_hash_table_new_full(#g_str_hash, #g_str_equal, %NULL,
- *                 #g_free). Use @get_name if you instead need to extract a chat
- *                 name from a hashtable.
- * @join: Called when the user requests joining a chat. Should arrange for
- *        purple_serv_got_joined_chat() to be called.
- * @reject: Called when the user refuses a chat invitation.
- * @get_name: Returns a chat name based on the information in components. Use
- *            @info_defaults if you instead need to generate a hashtable from a
- *            chat name.
- * @invite: Invite a user to join a chat.
- * @leave: Called when the user requests leaving a chat.
- * @send: Send a message to a chat.
- * @get_user_real_name: Gets the real name of a participant in a chat. For
- *                      example, on XMPP this turns a chat room nick
- *                      <literal>foo</literal> into
- *                      <literal>room\@server/foo</literal>.
- * @set_topic: Called to set the topic for the given chat.
- *
- * The protocol chat interface.
- *
- * This interface provides callbacks needed by protocols that implement chats.
- */
 struct _PurpleProtocolChatInterface {
 	/*< private >*/
 	GTypeInterface parent;
diff --git a/libpurple/purpleprotocolclient.h b/libpurple/purpleprotocolclient.h
--- a/libpurple/purpleprotocolclient.h
+++ b/libpurple/purpleprotocolclient.h
@@ -51,71 +51,6 @@
  * Since: 3.0
  */
 
-/**
- * PurpleProtocolClientInterface:
- * @get_actions: Returns the actions the protocol can perform. These will show
- *               up in the Accounts menu, under a submenu with the name of the
- *               account.
- * @list_emblem: Fills the four <type>char**</type>'s with string identifiers
- *               for "emblems" that the UI will interpret and display as
- *               relevant.
- * @blist_node_menu: Returns a list of #PurpleActionMenu structs, which
- *                   represent extra actions to be shown in (for example) the
- *                   right-click menu for @node.
- * @buddy_free: Allows the protocol to clean up any additional data for the
- *              given buddy.
- * @convo_closed: Allows the protocol to do any necessary cleanup when a
- *                conversation is closed.
- * @normalize: Convert the username @who to its canonical form. Also checks for
- *             validity.
- *             <sbr/>For example, AIM treats "fOo BaR" and "foobar" as the same
- *             user; this function should return the same normalized string for
- *             both of those. On the other hand, both of these are invalid for
- *             protocols with number-based usernames, so function should return
- *             %NULL in such case.
- *             <sbr/>@account: The account the username is related to. Can be
- *                             %NULL.
- *             <sbr/>@who:     The username to convert.
- *             <sbr/>Returns:  Normalized username, or %NULL, if it's invalid.
- * @find_blist_chat: Attempts to find a chat with the given name in the contact
- *                   list.
- * @offline_message: Checks whether offline messages to @buddy are supported.
- *                   <sbr/>Returns: %TRUE if @buddy can be sent messages while
- *                                  they are offline, or %FALSE if not.
- * @get_account_text_table: This allows protocols to specify additional strings
- *                          to be used for various purposes. The idea is to
- *                          stuff a bunch of strings in this hash table instead
- *                          of expanding the struct for every addition. This
- *                          hash table is allocated every call and
- *                          <emphasis>MUST</emphasis> be unrefed by the caller.
- *                          <sbr/>@account: The account to specify.  This can be
- *                                          %NULL.
- *                          <sbr/>Returns:  The protocol's string hash table.
- *                                          The hash table should be destroyed
- *                                          by the caller when it's no longer
- *                                          needed.
- * @get_max_message_size: Gets the maximum message size in bytes for the
- *                        conversation.
- *                        <sbr/>It may depend on connection-specific or
- *                        conversation-specific variables, like channel or
- *                        buddy's name length.
- *                        <sbr/>This value is intended for plaintext message,
- *                              the exact value may be lower because of:
- *                        <sbr/> - used newlines (some protocols count them as
- *                                 more than one byte),
- *                        <sbr/> - formatting,
- *                        <sbr/> - used special characters.
- *                        <sbr/>@conv:   The conversation to query, or NULL to
- *                                       get safe minimum for the protocol.
- *                        <sbr/>Returns: Maximum message size, 0 if unspecified,
- *                                       -1 for infinite.
- *
- * The protocol client interface.
- *
- * This interface provides a gateway between purple and the protocol.
- *
- * Since: 3.0
- */
 struct _PurpleProtocolClientInterface {
 	/*< private >*/
 	GTypeInterface parent;
diff --git a/libpurple/purpleprotocolcontacts.h b/libpurple/purpleprotocolcontacts.h
--- a/libpurple/purpleprotocolcontacts.h
+++ b/libpurple/purpleprotocolcontacts.h
@@ -60,15 +60,6 @@
 	g_quark_from_static_string("purple-protocol-contacts") \
 	PURPLE_AVAILABLE_MACRO_IN_3_0
 
-/**
- * PurpleProtocolContactsInterface:
- *
- * This interface defines the behavior for interacting with contacts at the
- * protocol layer. These methods will primarily be called by the user
- * interface.
- *
- * Since: 3.0
- */
 struct _PurpleProtocolContactsInterface {
 	/*< private >*/
 	GTypeInterface parent;
diff --git a/libpurple/purpleprotocolconversation.h b/libpurple/purpleprotocolconversation.h
--- a/libpurple/purpleprotocolconversation.h
+++ b/libpurple/purpleprotocolconversation.h
@@ -48,7 +48,7 @@
                     PURPLE, PROTOCOL_CONVERSATION, PurpleProtocol)
 
 /**
- * PurpleProtocolConversationInterface:
+ * PurpleProtocolConversation:
  *
  * This interface defines the behavior for interacting with conversations at
  * the protocol layer. These methods will primarily be called by the user
@@ -255,7 +255,7 @@
 gboolean purple_protocol_conversation_set_avatar_finish(PurpleProtocolConversation *protocol, GAsyncResult *result, GError **error);
 
 /**
- * purple_protocl_conversation_send_typing_state:
+ * purple_protocol_conversation_send_typing:
  * @protocol: The instance.
  * @conversation: The conversation.
  * @state: The new typing state.
diff --git a/libpurple/purpleprotocolfiletransfer.h b/libpurple/purpleprotocolfiletransfer.h
--- a/libpurple/purpleprotocolfiletransfer.h
+++ b/libpurple/purpleprotocolfiletransfer.h
@@ -50,13 +50,6 @@
  * Since: 3.0
  */
 
-/**
- * PurpleProtocolFileTransferInterface:
- *
- * This interface defines the behavior for sending and receiving files.
- *
- * Since: 3.0
- */
 struct _PurpleProtocolFileTransferInterface {
 	/*< private >*/
 	GTypeInterface parent;
diff --git a/libpurple/purpleprotocolim.h b/libpurple/purpleprotocolim.h
--- a/libpurple/purpleprotocolim.h
+++ b/libpurple/purpleprotocolim.h
@@ -49,27 +49,6 @@
 G_DECLARE_INTERFACE(PurpleProtocolIM, purple_protocol_im, PURPLE, PROTOCOL_IM,
                     PurpleProtocol)
 
-/**
- * PurpleProtocolIMInterface:
- * @send:        This protocol function should return a positive value on
- *               success. If the message is too big to be sent, return
- *               <literal>-E2BIG</literal>. If the account is not connected,
- *               return <literal>-ENOTCONN</literal>. If the protocol is unable
- *               to send the message for another reason, return some other
- *               negative value. You can use one of the valid #errno values, or
- *               just big something. If the message should not be echoed to the
- *               conversation window, return 0.
- * @send_typing: If this protocol requires the #PURPLE_IM_TYPING message to be
- *               sent repeatedly to signify that the user is still typing, then
- *               the protocol should return the number of seconds to wait before
- *               sending a subsequent notification. Otherwise the protocol
- *               should return 0.
- *
- * The protocol IM interface that needs to be implemented to send one to one
- * messages.
- *
- * Since: 3.0
- */
 struct _PurpleProtocolIMInterface {
 	/*< private >*/
 	GTypeInterface parent;
diff --git a/libpurple/purpleprotocolmedia.h b/libpurple/purpleprotocolmedia.h
--- a/libpurple/purpleprotocolmedia.h
+++ b/libpurple/purpleprotocolmedia.h
@@ -52,31 +52,6 @@
  * Since: 3.0
  */
 
-/**
- * PurpleProtocolMediaInterface:
- * @initiate_session: Initiate a media session with the given contact.
- *                    <sbr/>@account: The account to initiate the media session
- *                                    on.
- *                    <sbr/>@who: The remote user to initiate the session with.
- *                    <sbr/>@type: The type of media session to initiate.
- *                    <sbr/>Returns: %TRUE if the call succeeded else %FALSE.
- *                                   (Doesn't imply the media session or stream
- *                                   will be successfully created)
- * @get_caps: Checks to see if the given contact supports the given type of
- *            media session.
- *            <sbr/>@account: The account the contact is on.
- *            <sbr/>@who: The remote user to check for media capability with.
- *            <sbr/>Returns: The media caps the contact supports.
- * @send_dtmf: Sends DTMF codes out-of-band in a protocol-specific way if the
- *             protocol supports it, or failing that in-band if the media backend
- *             can do so. See purple_media_send_dtmf().
- *
- * The protocol media interface.
- *
- * This interface provides callbacks for media sessions on the protocol.
- *
- * Since: 3.0
- */
 struct _PurpleProtocolMediaInterface {
 	/*< private >*/
 	GTypeInterface parent;
diff --git a/libpurple/purpleprotocolroomlist.h b/libpurple/purpleprotocolroomlist.h
--- a/libpurple/purpleprotocolroomlist.h
+++ b/libpurple/purpleprotocolroomlist.h
@@ -38,25 +38,17 @@
 
 #define PURPLE_TYPE_PROTOCOL_ROOMLIST (purple_protocol_roomlist_get_type())
 
-/**
- * PurpleProtocolRoomlist:
- *
- * #PurpleProtocolRoomlist is an interface to abstract how to handle rooms
- * lists at the protocol level.
- *
- * Since: 3.0
- */
-
 PURPLE_AVAILABLE_IN_3_0
 G_DECLARE_INTERFACE(PurpleProtocolRoomlist, purple_protocol_roomlist, PURPLE,
                     PROTOCOL_ROOMLIST, PurpleProtocol)
 
 /**
- * PurpleProtocolRoomlistInterface:
+ * PurpleProtocolRoomlist:
  *
  * The protocol roomlist interface.
  *
- * This interface provides callbacks for room listing.
+ * #PurpleProtocolRoomlist is an interface to abstract how to handle room
+ * lists at the protocol level.
  *
  * Since: 3.0
  */
diff --git a/libpurple/purpleprotocolroster.h b/libpurple/purpleprotocolroster.h
--- a/libpurple/purpleprotocolroster.h
+++ b/libpurple/purpleprotocolroster.h
@@ -50,26 +50,6 @@
  * Since: 3.0
  */
 
-/**
- * PurpleProtocolRosterInterface:
- * @add_async: Called when the user is trying to add a contact to the server
- *             side roster.
- * @add_finish: Called when adding the contact has completed.
- * @update_async: Called when the user is trying to update a contact on the
- *                server side roster.
- * @update_finish: Called when updating the contact has completed.
- * @remove_async: Called when the user is trying to remove a contact from the
- *                server side roster.
- * @remove_finish: Called when removing the contact has completed.
- *
- * The interface for managing the server side roster.
- *
- * This interface provides a gateway between purple and the protocol for
- * managing the server side roster. All of the functions are asynchronous to
- * make sure nothing blocks the rest of the program.
- *
- * Since: 3.0
- */
 struct _PurpleProtocolRosterInterface {
 	/*< private >*/
 	GTypeInterface parent;
diff --git a/libpurple/purpleprotocolserver.h b/libpurple/purpleprotocolserver.h
--- a/libpurple/purpleprotocolserver.h
+++ b/libpurple/purpleprotocolserver.h
@@ -55,40 +55,6 @@
  * Since: 3.0
  */
 
-/**
- * PurpleProtocolServerInterface:
- * @set_info: Sets the user's profile.
- * @get_info: Should arrange for purple_notify_userinfo() to be called with the
- *            requested user's profile.
- * @set_status: Sets the active status for the given account.
- * @set_idle: Set the idle time for the given account.
- * @change_passwd: Changes the users password.
- * @add_buddy: Add a buddy to a group on the server.
- * @add_buddies: Add multiple buddies on the server at once.
- * @remove_buddy: Removes the given buddy from the user's buddy list.
- * @remove_buddies: Removes multiple buddies from the user's buddy list.
- * @keepalive: If implemented, this will be called regularly for this
- *             protocol's active connections. You'd want to do this if you need
- *             to repeatedly send some kind of keepalive packet to the server
- *             to avoid being disconnected. ("Regularly" is defined to be 30
- *             unless @get_keepalive_interval is implemented to override it).
- * @get_keepalive_interval: If implemented, this will override the default
- *                          keepalive interval.
- * @alias_buddy: Save/store buddy's alias on server list/roster
- * @group_buddy: Change a buddy's group on a server list/roster
- * @rename_group: Rename a group on a server list/roster
- * @set_buddy_icon: Set the buddy icon for the given connection to @img. The
- *                  protocol does <emphasis>NOT</emphasis> own a reference to
- *                  @img; if it needs one, it must #g_object_ref(@img) itself.
- * @remove_group: Removes the given group from the users buddy list.
- * @send_raw: For use in plugins that may understand the underlying protocol.
- *
- * The protocol server interface.
- *
- * This interface provides a gateway between purple and the protocol's server.
- *
- * Since: 3.0
- */
 struct _PurpleProtocolServerInterface {
 	/*< private >*/
 	GTypeInterface parent;
diff --git a/libpurple/purpleprotocolwhiteboard.h b/libpurple/purpleprotocolwhiteboard.h
--- a/libpurple/purpleprotocolwhiteboard.h
+++ b/libpurple/purpleprotocolwhiteboard.h
@@ -49,16 +49,6 @@
  * Since: 3.0
  */
 
-/**
- * PurpleProtocolWhiteboardInterface:
- * @create: Creates a new whiteboard.
- *
- * The protocol whiteboard interface.
- *
- * This interface provides a gateway between purple and the protocol.
- *
- * Since: 3.0
- */
 struct _PurpleProtocolWhiteboardInterface {
 	/*< private >*/
 	GTypeInterface parent;
diff --git a/libpurple/purpleproxyinfo.h b/libpurple/purpleproxyinfo.h
--- a/libpurple/purpleproxyinfo.h
+++ b/libpurple/purpleproxyinfo.h
@@ -60,6 +60,13 @@
 
 #define PURPLE_TYPE_PROXY_INFO (purple_proxy_info_get_type())
 
+/**
+ * PurpleProxyInfo:
+ *
+ * A representation of a proxy.
+ *
+ * Since: 2.0
+ */
 PURPLE_AVAILABLE_IN_3_0
 G_DECLARE_FINAL_TYPE(PurpleProxyInfo, purple_proxy_info, PURPLE, PROXY_INFO,
                      GObject)
diff --git a/libpurple/purpleroomlistroom.h b/libpurple/purpleroomlistroom.h
--- a/libpurple/purpleroomlistroom.h
+++ b/libpurple/purpleroomlistroom.h
@@ -72,6 +72,8 @@
  *
  * Creates a new room to be added to a [class@Purple.Roomlist].
  *
+ * Returns: (transfer full): The new room.
+ *
  * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
@@ -104,7 +106,7 @@
 const gchar *purple_roomlist_room_get_description(PurpleRoomlistRoom *room);
 
 /**
- * purple_roomlist_get_category:
+ * purple_roomlist_room_get_category:
  * @room: The instance.
  *
  * Gets the category of @room. It is up to the user interface on whether or not
diff --git a/libpurple/purpleroomlistroom.c b/libpurple/purpleroomlistroom.c
--- a/libpurple/purpleroomlistroom.c
+++ b/libpurple/purpleroomlistroom.c
@@ -167,24 +167,52 @@
 	obj_class->set_property = purple_roomlist_room_set_property;
 	obj_class->finalize = purple_roomlist_room_finalize;
 
+	/**
+	 * PurpleRoomlistRoom:name:
+	 *
+	 * The name of the room.
+	 *
+	 * Since: 3.0
+	 */
 	properties[PROP_NAME] = g_param_spec_string(
 		"name", "name",
 		"The name of the room",
 		NULL,
 		G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY | G_PARAM_STATIC_STRINGS);
 
+	/**
+	 * PurpleRoomlistRoom:description:
+	 *
+	 * The description of the room.
+	 *
+	 * Since: 3.0
+	 */
 	properties[PROP_DESCRIPTION] = g_param_spec_string(
 		"description", "description",
 		"The description of the room",
 		NULL,
 		G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY | G_PARAM_STATIC_STRINGS);
 
+	/**
+	 * PurpleRoomlistRoom:category:
+	 *
+	 * The category of the room.
+	 *
+	 * Since: 3.0
+	 */
 	properties[PROP_CATEGORY] = g_param_spec_string(
 		"category", "category",
 		"The category of the room",
 		NULL,
 		G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY | G_PARAM_STATIC_STRINGS);
 
+	/**
+	 * PurpleRoomlistRoom:user-count:
+	 *
+	 * The number of users in the room.
+	 *
+	 * Since: 3.0
+	 */
 	properties[PROP_USER_COUNT] = g_param_spec_uint(
 		"user-count", "user-count",
 		"The user count of the room",
diff --git a/libpurple/purpleversion.h b/libpurple/purpleversion.h
--- a/libpurple/purpleversion.h
+++ b/libpurple/purpleversion.h
@@ -77,6 +77,26 @@
 #define PURPLE_VERSION_CUR_STABLE \
 	(G_ENCODE_VERSION(PURPLE_MAJOR_VERSION, PURPLE_MINOR_VERSION))
 
+/**
+ * PURPLE_VERSION_MIN_REQUIRED:
+ *
+ * A macro that should be defined by the user prior to including the `purple.h`
+ * header.
+ *
+ * The definition should be one of the predefined Purple version macros:
+ * %PURPLE_VERSION_3_0, %PURPLE_VERSION_3_1, ...
+ *
+ * This macro defines the earliest version of Purple that the package is
+ * required to be able to compile against.
+ *
+ * If the compiler is configured to warn about the use of deprecated functions,
+ * then using functions that were deprecated in version
+ * %PURPLE_VERSION_MIN_REQUIRED or earlier will cause warnings (but using
+ * functions deprecated in later releases will not).
+ *
+ * Since: 3.0
+ */
+
 /* If the package sets PURPLE_VERSION_MIN_REQUIRED to some future
  * PURPLE_VERSION_X_Y value that we don't know about, it will compare as 0 in
  * preprocessor tests.
diff --git a/libpurple/purplewhiteboard.c b/libpurple/purplewhiteboard.c
--- a/libpurple/purplewhiteboard.c
+++ b/libpurple/purplewhiteboard.c
@@ -195,22 +195,50 @@
 	obj_class->finalize = purple_whiteboard_finalize;
 	obj_class->constructed = purple_whiteboard_constructed;
 
+	/**
+	 * PurpleWhiteboard:state:
+	 *
+	 * The state of the whiteboard.
+	 *
+	 * Since: 3.0
+	 */
 	properties[PROP_STATE] = g_param_spec_int(
 		"state", "State",
 		"State of the whiteboard.",
 		G_MININT, G_MAXINT, 0,
 		G_PARAM_READWRITE | G_PARAM_CONSTRUCT | G_PARAM_STATIC_STRINGS);
 
+	/**
+	 * PurpleWhiteboard:account:
+	 *
+	 * The account this whiteboard belongs to.
+	 *
+	 * Since: 3.0
+	 */
 	properties[PROP_ACCOUNT] = g_param_spec_object(
 		"account", "Account",
 		"The whiteboard's account.", PURPLE_TYPE_ACCOUNT,
 		G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY | G_PARAM_STATIC_STRINGS);
 
+	/**
+	 * PurpleWhiteboard:id:
+	 *
+	 * The unique identifier of the whiteboard.
+	 *
+	 * Since: 3.0
+	 */
 	properties[PROP_ID] = g_param_spec_string(
 		"id", "id",
 		"The ID of the whiteboard.", NULL,
 		G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY | G_PARAM_STATIC_STRINGS);
 
+	/**
+	 * PurpleWhiteboard:draw-list:
+	 *
+	 * The list of draw actions for the whiteboard.
+	 *
+	 * Since: 3.0
+	 */
 	properties[PROP_DRAW_LIST] = g_param_spec_pointer(
 		"draw-list", "Draw list",
 		"A list of points to draw to the buddy.",
diff --git a/libpurple/request-datasheet.h b/libpurple/request-datasheet.h
--- a/libpurple/request-datasheet.h
+++ b/libpurple/request-datasheet.h
@@ -36,13 +36,45 @@
  *
  * Request Datasheet is a UI abstracted table.
  */
+typedef struct _PurpleRequestDatasheet PurpleRequestDatasheet;
 
-typedef struct _PurpleRequestDatasheet PurpleRequestDatasheet;
+/**
+ * PurpleRequestDatasheetRecord:
+ *
+ * A data sheet record.
+ */
 typedef struct _PurpleRequestDatasheetRecord PurpleRequestDatasheetRecord;
+
+/**
+ * PurpleRequestDatasheetAction:
+ *
+ * A data sheet action.
+ */
 typedef struct _PurpleRequestDatasheetAction PurpleRequestDatasheetAction;
 
+/**
+ * PurpleRequestDatasheetActionCb:
+ * @rec: The record.
+ * @user_data: User data.
+ *
+ * A callback function for actions in a data sheet.
+ *
+ * Since: 3.0
+ */
 typedef void (*PurpleRequestDatasheetActionCb)(
 	PurpleRequestDatasheetRecord *rec, gpointer user_data);
+
+/**
+ * PurpleRequestDatasheetActionCheckCb:
+ * @rec: The record.
+ * @user_data: User data.
+ *
+ * A callback function for checking if an action is enabled or not.
+ *
+ * Returns: %TRUE if the actions should be enabled, otherwise %FALSE.
+ *
+ * Since: 3.0
+ */
 typedef gboolean (*PurpleRequestDatasheetActionCheckCb)(
 	PurpleRequestDatasheetRecord *rec, gpointer user_data);
 
diff --git a/libpurple/request.h b/libpurple/request.h
--- a/libpurple/request.h
+++ b/libpurple/request.h
@@ -51,6 +51,11 @@
 #include "request/purplerequestfield.h"
 #include "request-datasheet.h"
 
+/**
+ * PURPLE_DEFAULT_ACTION_NONE:
+ *
+ * A constant to set no default action.
+ */
 #define PURPLE_DEFAULT_ACTION_NONE	-1
 
 /**
@@ -188,6 +193,13 @@
 	void (*_purple_reserved4)(void);
 };
 
+/**
+ * PurpleRequestInputCb:
+ * @data: User data.
+ * @value: The value that was input.
+ *
+ * The type of callback passed to purple_request_input().
+ */
 typedef void (*PurpleRequestInputCb)(void *data, const char *value);
 
 /**
@@ -211,8 +223,31 @@
  * values of those choice.
  */
 typedef void (*PurpleRequestChoiceCb)(void *data, gpointer value);
+
+/**
+ * PurpleRequestFieldsCb:
+ * @data: User data.
+ * @page: The page.
+ *
+ * The type of callbacks passed to purple_request_fields().
+ */
 typedef void (*PurpleRequestFieldsCb)(void *data, PurpleRequestPage *page);
+
+/**
+ * PurpleRequestFileCb:
+ * @data: User data.
+ * @filename: The filename.
+ *
+ * The type of callbacks passed to purple_request_file().
+ */
 typedef void (*PurpleRequestFileCb)(void *data, const char *filename);
+
+/**
+ * PurpleRequestHelpCb:
+ * @data: User data.
+ *
+ * The type of callback passed to purple_request_cpar_set_help_cb().
+ */
 typedef void (*PurpleRequestHelpCb)(gpointer data);
 
 G_BEGIN_DECLS
@@ -698,6 +733,8 @@
  *
  * <literal>va_list</literal> version of purple_request_choice(); see its
  * documentation.
+ *
+ * Returns: A UI-specific handle.
  */
 PURPLE_AVAILABLE_IN_ALL
 void *purple_request_choice_varg(void *handle, const char *title,
@@ -774,6 +811,8 @@
  *
  * <literal>va_list</literal> version of purple_request_action(); see its
  * documentation.
+ *
+ * Returns: A UI-specific handle.
  */
 PURPLE_AVAILABLE_IN_ALL
 void *
diff --git a/libpurple/request/purplerequestfield.h b/libpurple/request/purplerequestfield.h
--- a/libpurple/request/purplerequestfield.h
+++ b/libpurple/request/purplerequestfield.h
@@ -70,6 +70,8 @@
  *             [method@Purple.RequestField.set_validator].
  *
  * A callback to check whether a field is valid.
+ *
+ * Returns: %TRUE if the field is valid, otherwise %FALSE.
  */
 typedef gboolean (*PurpleRequestFieldValidator)(PurpleRequestField *field, char **errmsg, gpointer user_data);
 
diff --git a/libpurple/request/purplerequestfieldlist.c b/libpurple/request/purplerequestfieldlist.c
--- a/libpurple/request/purplerequestfieldlist.c
+++ b/libpurple/request/purplerequestfieldlist.c
@@ -115,7 +115,7 @@
 	obj_class->set_property = purple_request_field_list_set_property;
 
 	/**
-	 * PurpleRequestFieldChoice:multi-select:
+	 * PurpleRequestFieldList:multi-select:
 	 *
 	 * Whether the field should allow multiple selections.
 	 *
diff --git a/libpurple/roomlist.h b/libpurple/roomlist.h
--- a/libpurple/roomlist.h
+++ b/libpurple/roomlist.h
@@ -32,6 +32,13 @@
 #define PURPLE_TYPE_ROOMLIST (purple_roomlist_get_type())
 typedef struct _PurpleRoomlist PurpleRoomlist;
 
+/**
+ * PurpleRoomlistField:
+ *
+ * A field for the room list.
+ *
+ * Since: 2.0
+ */
 #define PURPLE_TYPE_ROOMLIST_FIELD (purple_roomlist_field_get_type())
 typedef struct _PurpleRoomlistField PurpleRoomlistField;
 
diff --git a/libpurple/roomlist.c b/libpurple/roomlist.c
--- a/libpurple/roomlist.c
+++ b/libpurple/roomlist.c
@@ -274,12 +274,26 @@
 	obj_class->get_property = purple_roomlist_get_property;
 	obj_class->set_property = purple_roomlist_set_property;
 
+	/**
+	 * PurpleRoomlist:account:
+	 *
+	 * The account this room list belongs to.
+	 *
+	 * Since: 3.0
+	 */
 	properties[PROP_ACCOUNT] = g_param_spec_object("account", "Account",
 				"The account for the room list.",
 				PURPLE_TYPE_ACCOUNT,
 				G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY |
 				G_PARAM_STATIC_STRINGS);
 
+	/**
+	 * PurpleRoomlist:in-progress:
+	 *
+	 * Whether or not the room list is being fetched.
+	 *
+	 * Since: 3.0
+	 */
 	properties[PROP_IN_PROGRESS] = g_param_spec_boolean("in-progress",
 				"In progress",
 				"Whether the room list is being fetched.", FALSE,
diff --git a/libpurple/savedstatuses.h b/libpurple/savedstatuses.h
--- a/libpurple/savedstatuses.h
+++ b/libpurple/savedstatuses.h
@@ -61,6 +61,13 @@
  */
 typedef struct _PurpleSavedStatus     PurpleSavedStatus;
 
+/**
+ * PurpleSavedStatusSub:
+ *
+ * A sub statuses of a saved status.
+ *
+ * Since: 2.0
+ */
 typedef struct _PurpleSavedStatusSub  PurpleSavedStatusSub;
 
 #include "status.h"
diff --git a/libpurple/server.h b/libpurple/server.h
--- a/libpurple/server.h
+++ b/libpurple/server.h
@@ -241,6 +241,8 @@
  * @data: The hash function should be g_str_hash() and the equal
  *             function should be g_str_equal().
  *
+ * Joins the chat described by the components in @data.
+ *
  * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
@@ -248,10 +250,12 @@
 
 /**
  * purple_serv_reject_chat:
- * @gc: The #PurpleConnection 
+ * @gc: The #PurpleConnection
  * @data: The hash function should be g_str_hash() and the equal
  *             function should be g_str_equal().
  *
+ * Rejects a chat invite based on the components in @data.
+ *
  * Since: 3.0
  */
 PURPLE_AVAILABLE_IN_3_0
diff --git a/libpurple/status.h b/libpurple/status.h
--- a/libpurple/status.h
+++ b/libpurple/status.h
@@ -85,6 +85,14 @@
  *
  * Since: 2.0
  */
+
+/**
+ * PurpleStatusAttribute:
+ *
+ * An attribute that can be added to a status.
+ *
+ * Since: 2.0
+ */
 typedef struct _PurpleStatusAttribute PurpleStatusAttribute;
 
 /**
diff --git a/libpurple/status.c b/libpurple/status.c
--- a/libpurple/status.c
+++ b/libpurple/status.c
@@ -1108,18 +1108,39 @@
 	obj_class->get_property = purple_status_get_property;
 	obj_class->set_property = purple_status_set_property;
 
+	/**
+	 * PurpleStatus:status-type:
+	 *
+	 * The type of this status.
+	 *
+	 * Since: 3.0
+	 */
 	properties[PROP_STATUS_TYPE] = g_param_spec_pointer("status-type",
 				"Status type",
 				"The PurpleStatusType of the status.",
 				G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY |
 				G_PARAM_STATIC_STRINGS);
 
+	/**
+	 * PurpleStatus:presence:
+	 *
+	 * The presence that the status belongs to.
+	 *
+	 * Since: 3.0
+	 */
 	properties[PROP_PRESENCE] = g_param_spec_object("presence", "Presence",
 				"The presence that the status belongs to.",
 				PURPLE_TYPE_PRESENCE,
 				G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY |
 				G_PARAM_STATIC_STRINGS);
 
+	/**
+	 * PurpleStatus:active:
+	 *
+	 * Whether or not the status is active.
+	 *
+	 * Since: 3.0
+	 */
 	properties[PROP_ACTIVE] = g_param_spec_boolean("active", "Active",
 				"Whether the status is active or not.", FALSE,
 				G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
diff --git a/libpurple/tests.h b/libpurple/tests.h
--- a/libpurple/tests.h
+++ b/libpurple/tests.h
@@ -27,12 +27,40 @@
 
 G_BEGIN_DECLS
 
+/**
+ * PurpleTestStringData:
+ *
+ * Test data for testing strings.
+ *
+ * Since: 2.0
+ */
 typedef struct {
 	const gchar *input;
 	const gchar *output;
 } PurpleTestStringData;
 
+/**
+ * PurpleTestStringFunc:
+ * @str: The string to test.
+ *
+ * A function to call with @str as the input.
+ *
+ * Returns: The output of the function.
+ *
+ * Since: 2.0
+ */
 typedef const gchar *(*PurpleTestStringFunc)(const gchar *str);
+
+/**
+ * PurpleTestStringFreeFunc:
+ * @str: The string to test.
+ *
+ * A function to call with @str as the input.
+ *
+ * Returns: (transfer full): The output of the function.
+ *
+ * Since: 2.0
+ */
 typedef gchar *(*PurpleTestStringFreeFunc)(const gchar *str);
 
 static inline void
diff --git a/libpurple/util.h b/libpurple/util.h
--- a/libpurple/util.h
+++ b/libpurple/util.h
@@ -410,6 +410,14 @@
 /* URI/URL Functions                                                      */
 /**************************************************************************/
 
+/**
+ * purple_got_protocol_handler_uri:
+ * @uri: The uri.
+ *
+ * Parses @uri and emits the uri-handler core signal.
+ *
+ * Since: 2.0
+ */
 PURPLE_AVAILABLE_IN_ALL
 void purple_got_protocol_handler_uri(const char *uri);
 
diff --git a/libpurple/xfer.h b/libpurple/xfer.h
--- a/libpurple/xfer.h
+++ b/libpurple/xfer.h
@@ -991,17 +991,13 @@
                     PROTOCOL_XFER, PurpleProtocol)
 
 /**
- * PurpleProtocolXferInterface:
- * @can_receive: A method to determine if we can receive a file.
- * @send_file: A method to determine if we can send a file.
- * @new_xfer: A method to create a new file transfer.
+ * PurpleProtocolXfer:
  *
  * The protocol file transfer interface.
  *
- * This interface provides file transfer callbacks for the protocol.
- *
  * Since: 3.0
  */
+
 struct _PurpleProtocolXferInterface {
 	/*< private >*/
 	GTypeInterface parent_iface;
diff --git a/libpurple/xfer.c b/libpurple/xfer.c
--- a/libpurple/xfer.c
+++ b/libpurple/xfer.c
@@ -2186,94 +2186,182 @@
 	klass->write_local = do_write_local;
 	klass->data_not_sent = do_data_not_sent;
 
-	/* Properties */
-
+	/**
+	 * PurpleXfer:type:
+	 *
+	 * The type of the transfer.
+	 */
 	properties[PROP_TYPE] = g_param_spec_enum("type", "Transfer type",
 				"The type of file transfer.", PURPLE_TYPE_XFER_TYPE,
 				PURPLE_XFER_TYPE_UNKNOWN,
 				G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY |
 				G_PARAM_STATIC_STRINGS);
 
+	/**
+	 * PurpleXfer:account:
+	 *
+	 * The account that this transfer is for.
+	 */
 	properties[PROP_ACCOUNT] = g_param_spec_object("account", "Account",
 				"The account sending or receiving the file.",
 				PURPLE_TYPE_ACCOUNT,
 				G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY |
 				G_PARAM_STATIC_STRINGS);
 
+	/**
+	 * PurpleXfer:remote-user:
+	 *
+	 * The user on the other side of this transfer.
+	 */
 	properties[PROP_REMOTE_USER] = g_param_spec_string("remote-user",
 				"Remote user",
 				"The name of the remote user.", NULL,
 				G_PARAM_READWRITE | G_PARAM_CONSTRUCT | G_PARAM_STATIC_STRINGS);
 
+	/**
+	 * PurpleXfer:message:
+	 *
+	 * A message that was sent with the transfer.
+	 */
 	properties[PROP_MESSAGE] = g_param_spec_string("message", "Message",
 				"The message for the file transfer.", NULL,
 				G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
 
+	/**
+	 * PurpleXfer:filename:
+	 *
+	 * The name of the file being transferred.
+	 */
 	properties[PROP_FILENAME] = g_param_spec_string("filename", "Filename",
 				"The filename for the file transfer.", NULL,
 				G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
 
+	/**
+	 * PurpleXfer:local-filename:
+	 *
+	 * The local filename for this transfer.
+	 */
 	properties[PROP_LOCAL_FILENAME] = g_param_spec_string("local-filename",
 				"Local filename",
 				"The local filename for the file transfer.", NULL,
 				G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
 
+	/**
+	 * PurpleXfer:file-size:
+	 *
+	 * The size of the file in bytes.
+	 */
 	properties[PROP_FILE_SIZE] = g_param_spec_int64("file-size", "File size",
 				"Size of the file in a file transfer.",
 				G_MININT64, G_MAXINT64, 0,
 				G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
 
+	/**
+	 * PurpleXfer:remote-ip:
+	 *
+	 * The IP address of the remote user.
+	 */
 	properties[PROP_REMOTE_IP] = g_param_spec_string("remote-ip", "Remote IP",
 				"The remote IP address in the file transfer.", NULL,
 				G_PARAM_READABLE | G_PARAM_STATIC_STRINGS);
 
+	/**
+	 * PurpleXfer:local-port:
+	 *
+	 * The port number on the local side.
+	 */
 	properties[PROP_LOCAL_PORT] = g_param_spec_int("local-port", "Local port",
 				"The local port number in the file transfer.",
 				G_MININT, G_MAXINT, 0,
 				G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
 
+	/**
+	 * PurpleXfer:remote-port:
+	 *
+	 * The port number on the remote side.
+	 */
 	properties[PROP_REMOTE_PORT] = g_param_spec_int("remote-port",
 				"Remote port",
 				"The remote port number in the file transfer.",
 				G_MININT, G_MAXINT, 0,
 				G_PARAM_READABLE | G_PARAM_STATIC_STRINGS);
 
+	/**
+	 * PurpleXfer:fd:
+	 *
+	 * The socket file descriptor for the transfer.
+	 */
 	properties[PROP_FD] = g_param_spec_int("fd", "Socket FD",
 				"The socket file descriptor.",
 				G_MININT, G_MAXINT, 0,
 				G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
 
+	/**
+	 * PurpleXfer:watcher:
+	 *
+	 * The input watcher for this transfer.
+	 */
 	properties[PROP_WATCHER] = g_param_spec_int("watcher", "Watcher",
 				"The watcher for the file transfer.",
 				G_MININT, G_MAXINT, 0,
 				G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
 
+	/**
+	 * PurpleXfer:bytes-sent:
+	 *
+	 * The number of bytes that have been sent.
+	 */
 	properties[PROP_BYTES_SENT] = g_param_spec_int64("bytes-sent", "Bytes sent",
 				"The number of bytes sent (or received) so far.",
 				G_MININT64, G_MAXINT64, 0,
 				G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
 
+	/**
+	 * PurpleXfer:start-time:
+	 *
+	 * The time when the transfer started.
+	 */
 	properties[PROP_START_TIME] = g_param_spec_int64(
 	        "start-time", "Start time",
 	        "The monotonic time the transfer of a file started.",
 	        G_MININT64, G_MAXINT64, 0,
 	        G_PARAM_READABLE | G_PARAM_STATIC_STRINGS);
 
+	/**
+	 * PurpleXfer:end-time:
+	 *
+	 * The time when the transfer ended.
+	 */
 	properties[PROP_END_TIME] = g_param_spec_int64(
 	        "end-time", "End time",
 	        "The monotonic time the transfer of a file ended.", G_MININT64,
 	        G_MAXINT64, 0, G_PARAM_READABLE | G_PARAM_STATIC_STRINGS);
 
+	/**
+	 * PurpleXfer:status:
+	 *
+	 * The status of the transfer.
+	 */
 	properties[PROP_STATUS] = g_param_spec_enum("status", "Status",
 				"The current status for the file transfer.",
 				PURPLE_TYPE_XFER_STATUS, PURPLE_XFER_STATUS_UNKNOWN,
 				G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
 
+	/**
+	 * PurpleXfer:progress:
+	 *
+	 * The current progress of the transfer.
+	 */
 	properties[PROP_PROGRESS] = g_param_spec_double(
 	        "progress", "Progress",
 	        "The current progress of the file transfer.", -1.0, 1.0, -1.0,
 	        G_PARAM_READABLE | G_PARAM_STATIC_STRINGS);
 
+	/**
+	 * PurpleXfer:visible:
+	 *
+	 * Whether or not user interfaces should display the transfer.
+	 */
 	properties[PROP_VISIBLE] = g_param_spec_boolean(
 	        "visible", "Visible",
 	        "Hint for UIs whether this transfer should be visible.", FALSE,
