diff --git a/core/modules/migrate/src/Plugin/migrate/destination/Book.php b/core/modules/migrate/src/Plugin/migrate/destination/Book.php
index f6ff932..e9dcbc5 100644
--- a/core/modules/migrate/src/Plugin/migrate/destination/Book.php
+++ b/core/modules/migrate/src/Plugin/migrate/destination/Book.php
@@ -11,6 +11,8 @@
 use Drupal\migrate\Row;
 
 /**
+ * @ingroup migrate
+ *
  * @MigrateDestination(
  *   id = "book",
  *   provider = "book"
diff --git a/core/modules/migrate/src/Plugin/migrate/destination/Config.php b/core/modules/migrate/src/Plugin/migrate/destination/Config.php
index a7b5de2..18e3cb4 100644
--- a/core/modules/migrate/src/Plugin/migrate/destination/Config.php
+++ b/core/modules/migrate/src/Plugin/migrate/destination/Config.php
@@ -19,6 +19,8 @@
  * When a property is NULL, the default is used unless the configuration option
  * 'store null' is set to TRUE.
  *
+ * @ingroup migrate
+ *
  * @MigrateDestination(
  *   id = "config"
  * )
diff --git a/core/modules/migrate/src/Plugin/migrate/destination/Entity.php b/core/modules/migrate/src/Plugin/migrate/destination/Entity.php
index 8d69f80..bbf1347 100644
--- a/core/modules/migrate/src/Plugin/migrate/destination/Entity.php
+++ b/core/modules/migrate/src/Plugin/migrate/destination/Entity.php
@@ -14,6 +14,8 @@
 use Symfony\Component\DependencyInjection\ContainerInterface;
 
 /**
+ * @ingroup migrate
+ *
  * @MigrateDestination(
  *   id = "entity",
  *   deriver = "Drupal\migrate\Plugin\Derivative\MigrateEntity"
diff --git a/core/modules/migrate/src/Plugin/migrate/destination/EntityComment.php b/core/modules/migrate/src/Plugin/migrate/destination/EntityComment.php
index 64bdcec..e31fb3b 100644
--- a/core/modules/migrate/src/Plugin/migrate/destination/EntityComment.php
+++ b/core/modules/migrate/src/Plugin/migrate/destination/EntityComment.php
@@ -16,6 +16,8 @@
 use Symfony\Component\DependencyInjection\ContainerInterface;
 
 /**
+ * @ingroup migrate
+ *
  * @MigrateDestination(
  *   id = "entity:comment"
  * )
diff --git a/core/modules/migrate/src/Plugin/migrate/destination/EntityDateFormat.php b/core/modules/migrate/src/Plugin/migrate/destination/EntityDateFormat.php
index 695056a..0f777f3 100644
--- a/core/modules/migrate/src/Plugin/migrate/destination/EntityDateFormat.php
+++ b/core/modules/migrate/src/Plugin/migrate/destination/EntityDateFormat.php
@@ -10,6 +10,8 @@
 use Drupal\Core\Entity\EntityInterface;
 
 /**
+ * @ingroup migrate
+ *
  * @MigrateDestination(
  *   id = "entity:date_format"
  * )
diff --git a/core/modules/migrate/src/Plugin/migrate/destination/EntityFieldInstance.php b/core/modules/migrate/src/Plugin/migrate/destination/EntityFieldInstance.php
index c02fef5..6a71409 100644
--- a/core/modules/migrate/src/Plugin/migrate/destination/EntityFieldInstance.php
+++ b/core/modules/migrate/src/Plugin/migrate/destination/EntityFieldInstance.php
@@ -10,6 +10,8 @@
 use Drupal\migrate\Row;
 
 /**
+ * @ingroup migrate
+ *
  * @MigrateDestination(
  *   id = "entity:field_instance_config"
  * )
diff --git a/core/modules/migrate/src/Plugin/migrate/destination/EntityFieldStorageConfig.php b/core/modules/migrate/src/Plugin/migrate/destination/EntityFieldStorageConfig.php
index 0e5829f..7e7e765 100644
--- a/core/modules/migrate/src/Plugin/migrate/destination/EntityFieldStorageConfig.php
+++ b/core/modules/migrate/src/Plugin/migrate/destination/EntityFieldStorageConfig.php
@@ -8,6 +8,8 @@
 namespace Drupal\migrate\Plugin\migrate\destination;
 
 /**
+ * @ingroup migrate
+ *
  * @MigrateDestination(
  *   id = "entity:field_storage_config"
  * )
diff --git a/core/modules/migrate/src/Plugin/migrate/destination/EntityFile.php b/core/modules/migrate/src/Plugin/migrate/destination/EntityFile.php
index 5a2db21..403c908 100644
--- a/core/modules/migrate/src/Plugin/migrate/destination/EntityFile.php
+++ b/core/modules/migrate/src/Plugin/migrate/destination/EntityFile.php
@@ -17,6 +17,8 @@
  * Every migration that uses this destination must have an optional
  * dependency on the d6_file migration to ensure it runs first.
  *
+ * @ingroup migrate
+ *
  * @MigrateDestination(
  *   id = "entity:file"
  * )
diff --git a/core/modules/migrate/src/Plugin/migrate/destination/EntityRevision.php b/core/modules/migrate/src/Plugin/migrate/destination/EntityRevision.php
index 8aaefef..705abac 100644
--- a/core/modules/migrate/src/Plugin/migrate/destination/EntityRevision.php
+++ b/core/modules/migrate/src/Plugin/migrate/destination/EntityRevision.php
@@ -12,6 +12,8 @@
 use Drupal\migrate\Row;
 
 /**
+ * @ingroup migrate
+ *
  * @MigrateDestination(
  *   id = "entity_revision",
  *   deriver = "Drupal\migrate\Plugin\Derivative\MigrateEntityRevision"
diff --git a/core/modules/migrate/src/Plugin/migrate/destination/EntitySearchPage.php b/core/modules/migrate/src/Plugin/migrate/destination/EntitySearchPage.php
index 0e623ef..2ebbfd2 100644
--- a/core/modules/migrate/src/Plugin/migrate/destination/EntitySearchPage.php
+++ b/core/modules/migrate/src/Plugin/migrate/destination/EntitySearchPage.php
@@ -11,6 +11,8 @@
 use Drupal\migrate\Row;
 
 /**
+ * @ingroup migrate
+ *
  * @MigrateDestination(
  *   id = "entity:search_page"
  * )
diff --git a/core/modules/migrate/src/Plugin/migrate/destination/EntityUser.php b/core/modules/migrate/src/Plugin/migrate/destination/EntityUser.php
index 5cdcfc6..4e84cbf 100644
--- a/core/modules/migrate/src/Plugin/migrate/destination/EntityUser.php
+++ b/core/modules/migrate/src/Plugin/migrate/destination/EntityUser.php
@@ -18,6 +18,8 @@
 use Symfony\Component\DependencyInjection\ContainerInterface;
 
 /**
+ * @ingroup migrate
+ *
  * @MigrateDestination(
  *   id = "entity:user"
  * )
diff --git a/core/modules/migrate/src/Plugin/migrate/destination/EntityViewMode.php b/core/modules/migrate/src/Plugin/migrate/destination/EntityViewMode.php
index 0887d30..d07e5ce 100644
--- a/core/modules/migrate/src/Plugin/migrate/destination/EntityViewMode.php
+++ b/core/modules/migrate/src/Plugin/migrate/destination/EntityViewMode.php
@@ -8,6 +8,8 @@
 namespace Drupal\migrate\Plugin\migrate\destination;
 
 /**
+ * @ingroup migrate
+ *
  * @MigrateDestination(
  *   id = "entity:view_mode"
  * )
diff --git a/core/modules/migrate/src/Plugin/migrate/destination/Null.php b/core/modules/migrate/src/Plugin/migrate/destination/Null.php
index d5e6ba2..720d0e5 100644
--- a/core/modules/migrate/src/Plugin/migrate/destination/Null.php
+++ b/core/modules/migrate/src/Plugin/migrate/destination/Null.php
@@ -11,6 +11,8 @@
 use Drupal\migrate\Row;
 
 /**
+ * @ingroup migrate
+ *
  * @MigrateDestination(
  *   id = "null",
  *   requirements_met = false
diff --git a/core/modules/migrate/src/Plugin/migrate/destination/PerComponentEntityDisplay.php b/core/modules/migrate/src/Plugin/migrate/destination/PerComponentEntityDisplay.php
index 953d5ff..65cd6f0 100644
--- a/core/modules/migrate/src/Plugin/migrate/destination/PerComponentEntityDisplay.php
+++ b/core/modules/migrate/src/Plugin/migrate/destination/PerComponentEntityDisplay.php
@@ -10,6 +10,8 @@
 /**
  * This class imports one component of an entity display.
  *
+ * @ingroup migrate
+ *
  * @MigrateDestination(
  *   id = "component_entity_display"
  * )
diff --git a/core/modules/migrate/src/Plugin/migrate/destination/PerComponentEntityFormDisplay.php b/core/modules/migrate/src/Plugin/migrate/destination/PerComponentEntityFormDisplay.php
index 7ae9d46..0d0db20 100644
--- a/core/modules/migrate/src/Plugin/migrate/destination/PerComponentEntityFormDisplay.php
+++ b/core/modules/migrate/src/Plugin/migrate/destination/PerComponentEntityFormDisplay.php
@@ -10,6 +10,8 @@
 /**
  * This class imports one component of an entity form display.
  *
+ * @ingroup migrate
+ *
  * @MigrateDestination(
  *   id = "component_entity_form_display"
  * )
diff --git a/core/modules/migrate/src/Plugin/migrate/destination/UrlAlias.php b/core/modules/migrate/src/Plugin/migrate/destination/UrlAlias.php
index db08749..4bfc5b7 100644
--- a/core/modules/migrate/src/Plugin/migrate/destination/UrlAlias.php
+++ b/core/modules/migrate/src/Plugin/migrate/destination/UrlAlias.php
@@ -14,6 +14,8 @@
 use Drupal\Core\Plugin\ContainerFactoryPluginInterface;
 
 /**
+ * @ingroup migrate
+ *
  * @MigrateDestination(
  *   id = "url_alias"
  * )
diff --git a/core/modules/migrate/src/Plugin/migrate/process/Callback.php b/core/modules/migrate/src/Plugin/migrate/process/Callback.php
index b1ecd2d..7207b26 100644
--- a/core/modules/migrate/src/Plugin/migrate/process/Callback.php
+++ b/core/modules/migrate/src/Plugin/migrate/process/Callback.php
@@ -20,6 +20,8 @@
  * arguments can be passed to the callback as this would make the migration YAML
  * file too complex.
  *
+ * @ingroup migrate
+ *
  * @MigrateProcessPlugin(
  *   id = "callback"
  * )
diff --git a/core/modules/migrate/src/Plugin/migrate/process/Concat.php b/core/modules/migrate/src/Plugin/migrate/process/Concat.php
index 4296057..1fadbe8 100644
--- a/core/modules/migrate/src/Plugin/migrate/process/Concat.php
+++ b/core/modules/migrate/src/Plugin/migrate/process/Concat.php
@@ -16,6 +16,8 @@
 /**
  * Concatenates the strings in the current value.
  *
+ * @ingroup migrate
+ *
  * @MigrateProcessPlugin(
  *   id = "concat",
  *   handle_multiples = TRUE
diff --git a/core/modules/migrate/src/Plugin/migrate/process/DedupeEntity.php b/core/modules/migrate/src/Plugin/migrate/process/DedupeEntity.php
index 58bcdf8..b27ec77 100644
--- a/core/modules/migrate/src/Plugin/migrate/process/DedupeEntity.php
+++ b/core/modules/migrate/src/Plugin/migrate/process/DedupeEntity.php
@@ -15,6 +15,8 @@
 /**
  * Ensures value is not duplicated against an entity field.
  *
+ * @ingroup migrate
+ *
  * @MigrateProcessPlugin(
  *   id = "dedupe_entity"
  * )
diff --git a/core/modules/migrate/src/Plugin/migrate/process/DefaultValue.php b/core/modules/migrate/src/Plugin/migrate/process/DefaultValue.php
index 1758e52..c41a224 100644
--- a/core/modules/migrate/src/Plugin/migrate/process/DefaultValue.php
+++ b/core/modules/migrate/src/Plugin/migrate/process/DefaultValue.php
@@ -15,6 +15,8 @@
 /**
  * This plugin sets missing values on the destination.
  *
+ * @ingroup migrate
+ *
  * @MigrateProcessPlugin(
  *   id = "default_value"
  * )
diff --git a/core/modules/migrate/src/Plugin/migrate/process/Extract.php b/core/modules/migrate/src/Plugin/migrate/process/Extract.php
index 4ec792b..aeacf51 100644
--- a/core/modules/migrate/src/Plugin/migrate/process/Extract.php
+++ b/core/modules/migrate/src/Plugin/migrate/process/Extract.php
@@ -18,6 +18,8 @@
  *
  * @see https://drupal.org/node/2152731
  *
+ * @ingroup migrate
+ *
  * @MigrateProcessPlugin(
  *   id = "extract"
  * )
diff --git a/core/modules/migrate/src/Plugin/migrate/process/Flatten.php b/core/modules/migrate/src/Plugin/migrate/process/Flatten.php
index fd4cc46..3f98709 100644
--- a/core/modules/migrate/src/Plugin/migrate/process/Flatten.php
+++ b/core/modules/migrate/src/Plugin/migrate/process/Flatten.php
@@ -19,6 +19,8 @@
  *
  * @see https://drupal.org/node/2154215
  *
+ * @ingroup migrate
+ *
  * @MigrateProcessPlugin(
  *   id = "flatten",
  *   handle_multiples = TRUE
diff --git a/core/modules/migrate/src/Plugin/migrate/process/Get.php b/core/modules/migrate/src/Plugin/migrate/process/Get.php
index 85da630..f603895 100644
--- a/core/modules/migrate/src/Plugin/migrate/process/Get.php
+++ b/core/modules/migrate/src/Plugin/migrate/process/Get.php
@@ -14,6 +14,8 @@
 /**
  * This plugin copies from the source to the destination.
  *
+ * @ingroup migrate
+ *
  * @MigrateProcessPlugin(
  *   id = "get"
  * )
diff --git a/core/modules/migrate/src/Plugin/migrate/process/Iterator.php b/core/modules/migrate/src/Plugin/migrate/process/Iterator.php
index f0bfdef..1dc5816 100644
--- a/core/modules/migrate/src/Plugin/migrate/process/Iterator.php
+++ b/core/modules/migrate/src/Plugin/migrate/process/Iterator.php
@@ -16,6 +16,8 @@
  *
  * @see https://drupal.org/node/2135345
  *
+ * @ingroup migrate
+ *
  * @MigrateProcessPlugin(
  *   id = "iterator",
  *   handle_multiples = TRUE
diff --git a/core/modules/migrate/src/Plugin/migrate/process/MachineName.php b/core/modules/migrate/src/Plugin/migrate/process/MachineName.php
index 9af3fdc..7c18778 100644
--- a/core/modules/migrate/src/Plugin/migrate/process/MachineName.php
+++ b/core/modules/migrate/src/Plugin/migrate/process/MachineName.php
@@ -19,6 +19,8 @@
  * and replaced by an underscore and multiple underscores are collapsed into
  * one.
  *
+ * @ingroup migrate
+ *
  * @MigrateProcessPlugin(
  *   id = "machine_name"
  * )
diff --git a/core/modules/migrate/src/Plugin/migrate/process/Migration.php b/core/modules/migrate/src/Plugin/migrate/process/Migration.php
index cc4a536..e4ebb4c 100644
--- a/core/modules/migrate/src/Plugin/migrate/process/Migration.php
+++ b/core/modules/migrate/src/Plugin/migrate/process/Migration.php
@@ -23,6 +23,8 @@
 /**
  * Calculates the value of a property based on a previous migration.
  *
+ * @ingroup migrate
+ *
  * @MigrateProcessPlugin(
  *   id = "migration"
  * )
diff --git a/core/modules/migrate/src/Plugin/migrate/process/SkipProcessOnEmpty.php b/core/modules/migrate/src/Plugin/migrate/process/SkipProcessOnEmpty.php
index bb24bf2..fb98014 100644
--- a/core/modules/migrate/src/Plugin/migrate/process/SkipProcessOnEmpty.php
+++ b/core/modules/migrate/src/Plugin/migrate/process/SkipProcessOnEmpty.php
@@ -15,6 +15,8 @@
 /**
  * If the value evaluates to false, skip further processing.
  *
+ * @ingroup migrate
+ *
  * @MigrateProcessPlugin(
  *   id = "skip_process_on_empty"
  * )
diff --git a/core/modules/migrate/src/Plugin/migrate/process/SkipRowOnEmpty.php b/core/modules/migrate/src/Plugin/migrate/process/SkipRowOnEmpty.php
index 156dd33..cd5c57f 100644
--- a/core/modules/migrate/src/Plugin/migrate/process/SkipRowOnEmpty.php
+++ b/core/modules/migrate/src/Plugin/migrate/process/SkipRowOnEmpty.php
@@ -15,6 +15,8 @@
 /**
  * If the source evaluates to empty, we skip the current row.
  *
+ * @ingroup migrate
+ *
  * @MigrateProcessPlugin(
  *   id = "skip_row_on_empty"
  * )
diff --git a/core/modules/migrate/src/Plugin/migrate/process/StaticMap.php b/core/modules/migrate/src/Plugin/migrate/process/StaticMap.php
index e800819..a4f8ed3 100644
--- a/core/modules/migrate/src/Plugin/migrate/process/StaticMap.php
+++ b/core/modules/migrate/src/Plugin/migrate/process/StaticMap.php
@@ -19,6 +19,8 @@
  *
  * @see https://drupal.org/node/2143521
  *
+ * @ingroup migrate
+ *
  * @MigrateProcessPlugin(
  *   id = "static_map"
  * )
diff --git a/core/modules/migrate/src/Plugin/migrate/source/EmptySource.php b/core/modules/migrate/src/Plugin/migrate/source/EmptySource.php
index 705e93b..dfc4032 100644
--- a/core/modules/migrate/src/Plugin/migrate/source/EmptySource.php
+++ b/core/modules/migrate/src/Plugin/migrate/source/EmptySource.php
@@ -12,6 +12,8 @@
  *
  * This is generally useful when needing to create a field using a migration..
  *
+ * @ingroup migrate
+ *
  * @MigrateSource(
  *   id = "empty"
  * )
diff --git a/core/modules/system/core.api.php b/core/modules/system/core.api.php
index 89ac0c8..c321845 100644
--- a/core/modules/system/core.api.php
+++ b/core/modules/system/core.api.php
@@ -855,12 +855,23 @@
  * @{
  * Overview of the Migration API, which migrates data into Drupal.
  *
- * @todo write this
+ * Migrate is an ETL (http://wikipedia.org/wiki/Extract,_transform,_load)
+ * tool. For historical reasons (load in Drupal have a different meaning and
+ * also migrate existed as a contrib module) the extract phase is called
+ * source, the transform phase is called process and the load phase is called
+ * destination. Source, destination and process are each provided by plugins.
  *
- * Additional documentation paragraphs need to be written, and functions,
- * classes, and interfaces need to be added to this topic.
+ * Migrations themselves are configuration entities, containing the id and the
+ * configuration of the plugins to use. source and destination are specified
+ * as a single plugin and its configuration. For each property of the
+ * destination object, there is a process pipeline with each stage being a
+ * process plugin and its configuration. migrate modules provides plugins for
+ * common process operations (default value, map etc) and destinations to save
+ * Drupal objects (configuration, entities, url aliases etc). The
+ * migrate_drupal provides source plugins to extract data from various Drupal
+ * versions.
  *
- * See https://drupal.org/node/2127611
+ * See https://drupal.org/node/2127611 for more information on the migrate API.
  * @}
  */
 
