diff --git a/core/modules/user/user.api.php b/core/modules/user/user.api.php
index 51237d7..e049705 100644
--- a/core/modules/user/user.api.php
+++ b/core/modules/user/user.api.php
@@ -5,6 +5,44 @@
  * Hooks provided by the User module.
  */
 
+ /**
+ * @defgroup user User API
+ * @{
+ * Users are fieldable entities, so administrators can attach arbitrary fields
+ * to user objects. Unlike other entities (such as nodes and taxonomy terms),
+ * user entities do not come in multiple bundles; rather, there is only a single
+ * bundle 'user'.
+ *
+ * Use user_load() to load a user account.
+ *
+ * A user object representing the user that is currently logged in is available
+ * in the global variable $user. Note that $user is not a fully loaded user
+ * account object and therefore must not be saved without prior loading of the
+ * actual account:
+ * @code
+ * $account = user_load($GLOBALS['uid']);
+ * user_save($account);
+ * @endcode
+ *
+ * The global $user additionally contains the following session properties:
+ * - sid: The user's session ID for the current HTTP session, if any.
+ * - ssid: The user's session ID for the current HTTPS session, if any.
+ * - hostname: The user's current IP address, if any.
+ * - session: The user's session data stored in the $_SESSION variable.
+ * - timestamp: A UNIX timestamp indicating the last time the user accessed the
+ *   site.
+ * - cache: A UNIX timestamp used in DrupalDatabaseCache::prepareItem() to
+ *   check freshness of cached data.
+ *
+ * Modules may add additional properties by implementing hook_user_load().
+ * Fields attached to the user bundle (by modules or through the Field UI)
+ * will add properties holding an array structure containing the field's values,
+ * as described in the @link field_language Field language API @endlink
+ * documentation.
+ *
+ * @} End of "defgroup user".
+ */
+
 /**
  * @addtogroup hooks
  * @{
@@ -18,8 +56,9 @@
  * since this may result in unreliable results when loading from cache.
  *
  * @param $users
- *   An array of user objects, indexed by uid.
+ *   An array of user objects, indexed by user ID.
  *
+ * @ingroup user
  * @see user_load_multiple()
  * @see profile_user_load()
  */
@@ -215,7 +254,7 @@ function hook_user_operations() {
  * @param $edit
  *   The array of form values submitted by the user.
  * @param $account
- *   The user object on which the operation is performed.
+ *   A fully-loaded user account object, as returned by user_load().
  *
  * @see hook_user_insert()
  * @see hook_user_update()
@@ -236,7 +275,7 @@ function hook_user_presave(&$edit, $account) {
  * @param $edit
  *   The array of form values submitted by the user.
  * @param $account
- *   The user object on which the operation is being performed.
+ *   A fully-loaded user account object, as returned by user_load().
  *
  * @see hook_user_presave()
  * @see hook_user_update()
@@ -259,7 +298,7 @@ function hook_user_insert(&$edit, $account) {
  * @param $edit
  *   The array of form values submitted by the user.
  * @param $account
- *   The user object on which the operation is performed.
+ *   A fully-loaded user account object, as returned by user_load().
  *
  * @see hook_user_presave()
  * @see hook_user_insert()
@@ -279,7 +318,7 @@ function hook_user_update(&$edit, $account) {
  * @param $edit
  *   The array of form values submitted by the user.
  * @param $account
- *   The user object on which the operation was just performed.
+ *   A fully-loaded user account object, as returned by user_load().
  */
 function hook_user_login(&$edit, $account) {
   // If the user has a NULL time zone, notify them to set a time zone.
@@ -292,7 +331,7 @@ function hook_user_login(&$edit, $account) {
  * The user just logged out.
  *
  * @param $account
- *   The user object on which the operation was just performed.
+ *   A fully-loaded user account object, as returned by user_load().
  */
 function hook_user_logout($account) {
   db_insert('logouts')
@@ -310,7 +349,7 @@ function hook_user_logout($account) {
  * $account->content array.
  *
  * @param $account
- *   The user object on which the operation is being performed.
+ *   A fully-loaded user account object, as returned by user_load().
  * @param $view_mode
  *   View mode, e.g. 'full'.
  * @param $langcode
diff --git a/core/modules/user/user.module b/core/modules/user/user.module
index 009a716..98a1982 100644
--- a/core/modules/user/user.module
+++ b/core/modules/user/user.module
@@ -249,7 +249,9 @@ function user_field_extra_fields() {
  *   The external authentication username.
  *
  * @return
- *   A fully-loaded user object if the user is found or FALSE if not found.
+ *   A fully-loaded user account object, as returned by user_load().
+ *
+ * @ingroup user
  */
 function user_external_load($authname) {
   $uid = db_query("SELECT uid FROM {authmap} WHERE authname = :authname", array(':authname' => $authname))->fetchField();
@@ -282,13 +284,14 @@ function user_external_load($authname) {
  *   loading a user object which has been altered during the page request.
  *
  * @return
- *   An array of user objects, indexed by uid.
+ *   An array of fully-loaded user account objects, as returned by user_load().
  *
  * @see entity_load()
  * @see user_load()
  * @see user_load_by_mail()
  * @see user_load_by_name()
  * @see EntityFieldQuery
+ * @ingroup user
  *
  * @todo Remove $conditions in Drupal 8.
  */
@@ -314,11 +317,34 @@ function user_load_multiple($uids = array(), $conditions = array(), $reset = FAL
  *   TRUE to reset the internal cache and load from the database; FALSE
  *   (default) to load from the internal cache, if set.
  *
- * @return
- *   A fully-loaded user object upon successful user load, or FALSE if the user
- *   cannot be loaded.
+ * @return FALSE|object
+ *   FALSE if the $uid was not found, or a fully-loaded user account object
+ *   containing:
+ *   - uid: The unique ID of the user.
+ *   - name: The login name of the user.
+ *   - pass: The user's encrypted password.
+ *   - mail: The e-mail address of the user.
+ *   - init: The user's email address provided during initial registration.
+ *   - theme: The machine name of the default theme for the user.
+ *   - signature: The signature of the user, as set in the user account settings.
+ *   - signature_format: The text format to apply to the user's signature.
+ *   - roles: An array of the names of the roles assigned to the user, keyed by
+ *     role ID.
+ *   - status: The status of the user:
+ *     - 1: The user is active.
+ *     - 0: The user is blocked.
+ *   - timezone: The user's timezone as a PHP compatible timezone string (see
+ *     date_default_timezone_set()).
+ *   - language: The language code of the user's default language.
+ *   - picture: The file ID (fid) of the user's picture/avatar.
+ *   - created: A UNIX timestamp indicating when the user's account was created.
+ *   - access: A UNIX timestamp indicating the last time the user accessed the
+ *     site.
+ *   - login: A UNIX timestamp indicating when the user last logged in.
+ *   - data: Any data stored for this user in the {users} table by modules.
  *
  * @see user_load_multiple()
+ * @ingroup user
  */
 function user_load($uid, $reset = FALSE) {
   $users = user_load_multiple(array($uid), array(), $reset);
@@ -330,11 +356,12 @@ function user_load($uid, $reset = FALSE) {
  *
  * @param $mail
  *   String with the account's e-mail address.
+ *
  * @return
- *   A fully-loaded $user object upon successful user load or FALSE if user
- *   cannot be loaded.
+ *   A fully-loaded user account object, as returned by user_load().
  *
  * @see user_load_multiple()
+ * @ingroup user
  */
 function user_load_by_mail($mail) {
   $users = user_load_multiple(array(), array('mail' => $mail));
@@ -347,10 +374,10 @@ function user_load_by_mail($mail) {
  * @param $name
  *   String with the account's user name.
  * @return
- *   A fully-loaded $user object upon successful user load or FALSE if user
- *   cannot be loaded.
+ *   A fully-loaded user account object, as returned by user_load().
  *
  * @see user_load_multiple()
+ * @ingroup user
  */
 function user_load_by_name($name) {
   $users = user_load_multiple(array(), array('name' => $name));
@@ -373,7 +400,10 @@ function user_load_by_name($name) {
  *   serialized and saved in the {users.data} column.
  *
  * @return
- *   A fully-loaded $user object upon successful save or FALSE if the save failed.
+ *   A fully-loaded user account object, as returned by user_load(), or FALSE
+ *   if the save operation failed.
+ *
+ * @ingroup user
  *
  * @todo D8: Drop $edit and fix user_save() to be consistent with others.
  */
@@ -1924,11 +1954,12 @@ function user_uid_only_optional_to_arg($arg) {
  * @param $uid
  *   An optional user ID of the user to load. If not provided, the current
  *   user's ID will be used.
+
  * @return
- *   A fully-loaded $user object upon successful user load, FALSE if user
- *   cannot be loaded.
+ *   A fully-loaded user account object, as returned by user_load().
  *
  * @see user_load()
+ * @ingroup user
  * @todo rethink the naming of this in Drupal 8.
  */
 function user_uid_optional_load($uid = NULL) {
