diff --git a/core/lib/Drupal/Core/Config/Config.php b/core/lib/Drupal/Core/Config/Config.php
index 76a5b33..8d00146 100644
--- a/core/lib/Drupal/Core/Config/Config.php
+++ b/core/lib/Drupal/Core/Config/Config.php
@@ -17,6 +17,8 @@
  * specific configuration object, including support for runtime overrides. The
  * overrides are handled on top of the stored configuration so they are not
  * saved back to storage.
+ *
+ * @ingroup config_state
  */
 class Config extends StorableConfigBase {
 
diff --git a/core/lib/Drupal/Core/Config/Entity/ConfigEntityBase.php b/core/lib/Drupal/Core/Config/Entity/ConfigEntityBase.php
index 257d88f..392ae42 100644
--- a/core/lib/Drupal/Core/Config/Entity/ConfigEntityBase.php
+++ b/core/lib/Drupal/Core/Config/Entity/ConfigEntityBase.php
@@ -16,6 +16,8 @@
 
 /**
  * Defines a base configuration entity class.
+ *
+ * @ingroup config_state
  */
 abstract class ConfigEntityBase extends Entity implements ConfigEntityInterface {
 
diff --git a/core/lib/Drupal/Core/Config/Entity/ConfigEntityInterface.php b/core/lib/Drupal/Core/Config/Entity/ConfigEntityInterface.php
index f15a92b..ded908b 100644
--- a/core/lib/Drupal/Core/Config/Entity/ConfigEntityInterface.php
+++ b/core/lib/Drupal/Core/Config/Entity/ConfigEntityInterface.php
@@ -11,6 +11,8 @@
 
 /**
  * Defines the interface common for all configuration entities.
+ *
+ * @ingroup config_state
  */
 interface ConfigEntityInterface extends EntityInterface {
 
diff --git a/core/lib/Drupal/Core/Config/Entity/ConfigEntityListBuilder.php b/core/lib/Drupal/Core/Config/Entity/ConfigEntityListBuilder.php
index 2bf8807..f0c0bbd 100644
--- a/core/lib/Drupal/Core/Config/Entity/ConfigEntityListBuilder.php
+++ b/core/lib/Drupal/Core/Config/Entity/ConfigEntityListBuilder.php
@@ -12,6 +12,8 @@
 
 /**
  * Defines the default class to build a listing of configuration entities.
+ *
+ * @ingroup config_state
  */
 class ConfigEntityListBuilder extends EntityListBuilder {
 
diff --git a/core/lib/Drupal/Core/Entity/EntityConfirmFormBase.php b/core/lib/Drupal/Core/Entity/EntityConfirmFormBase.php
index bc45b6b..aa7fca0 100644
--- a/core/lib/Drupal/Core/Entity/EntityConfirmFormBase.php
+++ b/core/lib/Drupal/Core/Entity/EntityConfirmFormBase.php
@@ -13,6 +13,8 @@
 
 /**
  * Provides a generic base class for an entity-based confirmation form.
+ *
+ * @ingroup config_state
  */
 abstract class EntityConfirmFormBase extends EntityFormController implements ConfirmFormInterface {
 
diff --git a/core/lib/Drupal/Core/Entity/EntityFormController.php b/core/lib/Drupal/Core/Entity/EntityFormController.php
index 4e7f961..5fa8673 100644
--- a/core/lib/Drupal/Core/Entity/EntityFormController.php
+++ b/core/lib/Drupal/Core/Entity/EntityFormController.php
@@ -13,6 +13,8 @@
 
 /**
  * Base class for entity form controllers.
+ *
+ * @ingroup config_state
  */
 class EntityFormController extends FormBase implements EntityFormControllerInterface {
 
diff --git a/core/lib/Drupal/Core/State/StateInterface.php b/core/lib/Drupal/Core/State/StateInterface.php
index abfd289..db09ca5 100644
--- a/core/lib/Drupal/Core/State/StateInterface.php
+++ b/core/lib/Drupal/Core/State/StateInterface.php
@@ -9,6 +9,8 @@
 
 /**
  * Defines the interface for the state system.
+ *
+ * @ingroup config_state
  */
 interface StateInterface {
 
diff --git a/core/modules/config/config.api.php b/core/modules/config/config.api.php
deleted file mode 100644
index 7b06336..0000000
--- a/core/modules/config/config.api.php
+++ /dev/null
@@ -1,13 +0,0 @@
-<?php
-
-/**
- * @file
- * Hooks provided by the Configuration module.
- */
-
-/**
- * @defgroup config_hooks Configuration system hooks
- * @{
- * @todo Overall description of the configuration system.
- * @}
- */
diff --git a/core/modules/system/core.api.php b/core/modules/system/core.api.php
index 1ecc9c1..d3ab74a 100644
--- a/core/modules/system/core.api.php
+++ b/core/modules/system/core.api.php
@@ -88,22 +88,155 @@
  * @}
  */
 
-
 /**
  * @defgroup config_state Configuration and State Systems
  * @{
- * Information about the Configuration system and the State system.
- *
- * @todo write this
+ * Information about the Configuration API and the State API.
+ *
+ * Drupal has several distinct types of information, each with its own methods
+ * for storage and retrieval:
+ * - Content: Information meant to be displayed on your site: articles, basic
+ *   pages, images, files, custom blocks, etc. Content is stored and accessed
+ *   using @link entity_api Entities @endlink.
+ * - Session: Information about individual users' interactions with the site,
+ *   such as whether they are logged in. This is really "state" information, but
+ *   it is not stored the same way so it's a separate type here. Session
+ *   information is accessed via class
+ *   \Symfony\Component\HttpFoundation\Session\Session.
+ * - State: Information of a temporary nature, generally machine-generated and
+ *   not human-edited, about the current state of your site. Examples: the time
+ *   when Cron was last run, whether node access permissions need rebuilding,
+ *   etc. See @ref sec_state below for more information.
+ * - Configuration: Information about your site that is generally (or at least
+ *   can be) human-edited, but is not Content, and is meant to be relatively
+ *   permanent. Examples: the name of your site, the content types and views
+ *   you have defined, etc. See @ref sec_config below for more information.
+ *
+ * @section sec_state State API
+ * The basic entry point into the State API is \Drupal::state(), which returns
+ * an object of class \Drupal\Core\State\StateInterface. This class has
+ * methods for storing and retrieving state information; each piece of state
+ * information is associated with a string-valued key. Example:
+ * @code
+ * // Get the state class.
+ * $state = \Drupal::state();
+ * // Find out when cron was last run; the key is 'system.cron_last'.
+ * $time = $state->get('system.cron_last');
+ * // Set the cron run time to the current request time.
+ * $state->set('system_cron_last', REQUEST_TIME);
+ * @endcode
  *
- * This topic needs to describe simple configuration, configuration entities,
- * and the state system, at least at an overview level, and link to more
- * information (either drupal.org or more detailed topics in the API docs).
+ * For more on the State API, see https://drupal.org/developing/api/8/state
+ *
+ * @section sec_config Configuration API
+ * In Drupal, configuration information can be stored in files or in the
+ * database. Module developers do not generally need to worry about which is in
+ * use on a particular site; they should use the configuration API to access the
+ * active configuration at run time, which will automatically use the correct
+ * storage. And independent of how any individual site is storing configuration,
+ * module developers need to provide default values for their module's
+ * configuration in YAML files. The sections below have more information about
+ * the configuration API; see https://drupal.org/developing/api/8/configuration
+ * for more details.
+ *
+ * @subsection sub_config_store Configuration YAML files
+ * The file storage format for configuration information in Drupal is
+ * @link http://en.wikipedia.org/wiki/YAML YAML files. @endlink Configuration is
+ * divided into files, each containing a related set of configuration
+ * settings. Some modules will only have one configuration file containing all
+ * of the settings for the module; some will have several. Each module needs to
+ * define its default configuration by putting default configuration files in
+ * the config/install directory under the top-level module directory, so look
+ * there in most Core modules for examples. For more information, see
+ * https://drupal.org/node/2120571.
+ *
+ * Each configuration file has a specific structure, which is expressed as a
+ * YAML-based configuration schema. The configuration schema details the
+ * structure of the configuration, its data types, and which of its values need
+ * to be translatable. Each module needs to define its configuration schema in
+ * files in the config/schema directory under the top-level module directory, so
+ * look there in most Core modules for examples. For more information, see
+ * https://drupal.org/node/1905070.
+ *
+ * @subsection sub_config_simple Simple configuration
+ * The simple configuration API should be used for information that will always
+ * have exactly one copy or version. For instance, if your module has a
+ * setting that is either on or off, then this is only defined once, and it
+ * would be a Boolean-valued simple configuration setting.
+ *
+ * The first task in using the simple configuration API is to define the
+ * configuration file structure, file name, and schema of your settings (see
+ * @ref sub_config_store above). Once you have done that, you can retrieve the
+ * active configuration object that corresponds to config file mymodule.foo.yml
+ * with a call to:
+ * @code
+ * $config = \Drupal::config('mymodule.foo');
+ * @endcode
  *
- * See https://drupal.org/node/1667894
+ * This will be an object of class \Drupal\Core\Config\Config, which has methods
+ * for getting and setting configuration information.  For instance, if your
+ * YAML file structure looks like this:
+ * @code
+ * enabled: '0'
+ * bar:
+ *   baz: 'string1'
+ *   boo: 34
+ * @endcode
+ * you can make calls such as:
+ * @code
+ * // Get a single value.
+ * $enabled = $config->get('enabled');
+ * // Get an associative array.
+ * $bar = $config->get('bar');
+ * // Get one element of the array.
+ * $bar_baz = $config->get('bar.baz');
+ * // Update a value. Nesting works the same as get().
+ * $config->set('bar.baz', 'string2');
+ * // Nothing actually happens with set() until you call save().
+ * $config->save();
+ * @endcode
  *
- * Additional documentation paragraphs need to be written, and functions,
- * classes, and interfaces need to be added to this topic.
+ * @subsection sub_config_entity Configuration entities
+ * In contrast to the simple configuration settings described in the previous
+ * section, if your module allows users to create zero or more items (where
+ * "items" are things like content type definitions, view definitions, and the
+ * like), then you need to define a configuration entity type to store your
+ * configuration. This involves several steps:
+ * - Define an interface for your configuration entity's get/set methods,
+ *   extending \Drupal\Core\Config\Entity\ConfigEntityInterface
+ * - Define a class for your entity, implementing your interface and extending
+ *   \Drupal\Core\Config\Entity\ConfigEntityBase, with annotation for
+ *   \@ConfigEntityType in its documentation block.
+ * - The annotation will refer to several controller classes, which you will
+ *   also need to define:
+ *   - list_builder: Define a class that extends
+ *     \Drupal\Core\Config\Entity\ConfigEntityListBuilder, to provide an
+ *     administrative overview for your entities.
+ *   - add and edit forms: Define a class that extends
+ *     \Drupal\Core\Entity\EntityFormController
+ *   - delete form: Define a class that extends
+ *     \Drupal\Core\Entity\EntityConfirmFormBase
+ *   - access: If your configuration entity has complex permissions, you might
+ *     need an access controller, implementing
+ *     \Drupal\Core\Entity\EntityAccessControllerInterface, but most entities
+ *     can just use the 'admin_permission' annotation instead.
+ * - All of this will result in zero or more individual configuration entity
+ *   objects being defined by users. To load them, use the entity storage
+ *   manager, which is a class implementing
+ *   \Drupal\Core\Entity\EntityStorageInterface that you can retrieve with:
+ *   @code
+ *   $storage = \Drupal::entityManager()->getStorage('your_entity_type');
+ *   @endcode
+ *   or the entity query, which is a class implementing
+ *   \Drupal\Core\Entity\Query\QueryInterface that you can retrieve with:
+ *   @code
+ *   $storage = \Drupal::entityQuery('your_entity_type');
+ *   @endcode
+ *
+ * More detailed documentation on how to define a configuration entity
+ * can be found on https://drupal.org/node/1809494. Or, you might want to look
+ * at examples in Drupal core: classes that implement
+ * \Drupal\Core\Config\Entity\ConfigEntityInterface
  * @}
  */
 
