diff --git a/core/includes/entity.api.php b/core/includes/entity.api.php
index 5be9bf7..0c1cd2d 100644
--- a/core/includes/entity.api.php
+++ b/core/includes/entity.api.php
@@ -58,12 +58,15 @@ function hook_entity_info_alter(&$entity_info) {
 /**
  * Act on entity creation.
  *
- * @param Drupal\Core\Entity\EntityInterface $entity
+ * This can be used to set initial values for the entity, for instance to
+ * provide defaults.
+ *
+ * @param \Drupal\Core\Entity\EntityInterface $entity
  *   The entity object.
  */
-function hook_entity_create(Drupal\Core\Entity\EntityInterface $entity) {
+function hook_entity_create(\Drupal\Core\Entity\EntityInterface $entity) {
   if (!isset($entity->foo)) {
-    $entity->foo = 'bar';
+    $entity->foo->value = 'bar';
   }
 }
 
diff --git a/core/modules/comment/comment.api.php b/core/modules/comment/comment.api.php
index 95c3e1d..e7e51ef 100644
--- a/core/modules/comment/comment.api.php
+++ b/core/modules/comment/comment.api.php
@@ -49,6 +49,21 @@ function hook_comment_update(Drupal\comment\Comment $comment) {
 }
 
 /**
+ * Act on comment creation.
+ *
+ * This can be used to set initial values for the comment, for instance to
+ * provide defaults.
+ *
+ * @param \Drupal\comment\Plugin\Core\Entity\Comment $comment
+ *   The comment object.
+ */
+function hook_comment_create(\Drupal\comment\Plugin\Core\Entity\Comment $comment) {
+  if (!isset($comment->foo)) {
+    $comment->foo->value = 'bar';
+  }
+}
+
+/**
  * Act on comments being loaded from the database.
  *
  * @param array $comments
diff --git a/core/modules/file/file.api.php b/core/modules/file/file.api.php
index fb59229..f350459 100644
--- a/core/modules/file/file.api.php
+++ b/core/modules/file/file.api.php
@@ -7,6 +7,21 @@
 
 
 /**
+ * Act on file creation.
+ *
+ * This can be used to set initial values for the file, for instance to
+ * provide defaults.
+ *
+ * @param \Drupal\file\Plugin\Core\Entity\File $file
+ *   The file object.
+ */
+function hook_file_create(\Drupal\file\Plugin\Core\Entity\File $file) {
+  if (!isset($file->foo)) {
+    $file->foo->value = 'bar';
+  }
+}
+
+/**
  * Load additional information into file entities.
  *
  * file_load_multiple() calls this hook to allow modules to load
diff --git a/core/modules/node/node.api.php b/core/modules/node/node.api.php
index c139952..841f787 100644
--- a/core/modules/node/node.api.php
+++ b/core/modules/node/node.api.php
@@ -16,9 +16,9 @@
  * node.module (for content types created in the user interface) or the module
  * that implements hook_node_info() to define the content type.
  *
- * During node operations (create, update, view, delete, etc.), there are
- * several sets of hooks that get invoked to allow modules to modify the base
- * node operation:
+ * During node operations (create, insert, update, view, delete, etc.), there
+ * are several sets of hooks that get invoked to allow modules to modify the
+ * base node operation:
  * - Node-type-specific hooks: These hooks are only invoked on the primary
  *   module, using the "base" return component of hook_node_info() as the
  *   function prefix.  For example, poll.module defines the base for the Poll
@@ -36,6 +36,9 @@
  *
  * Here is a list of the node and entity hooks that are invoked, field
  * operations, and other steps that take place during node operations:
+ * - Instantiating a new node:
+ *   - hook_node_create() (all)
+ *   - hook_entity_create() (all)
  * - Creating a new node (calling node_save() on a new node):
  *   - field_attach_presave()
  *   - hook_node_presave() (all)
@@ -535,6 +538,23 @@ function hook_node_insert(Drupal\node\Node $node) {
 }
 
 /**
+ * Act on node creation.
+ *
+ * This can be used to set initial values for the node, for instance to
+ * provide defaults.
+ *
+ * @param \Drupal\node\Plugin\Core\Entity\Node $node
+ *   The node object.
+ *
+ * @ingroup node_api_hooks
+ */
+function hook_node_create(\Drupal\node\Plugin\Core\Entity\Node $node) {
+  if (!isset($node->foo)) {
+    $node->foo->value = 'bar';
+  }
+}
+
+/**
  * Act on arbitrary nodes being loaded from the database.
  *
  * This hook should be used to add information that is not in the node or node
diff --git a/core/modules/taxonomy/taxonomy.api.php b/core/modules/taxonomy/taxonomy.api.php
index d4d2675..39f2926 100644
--- a/core/modules/taxonomy/taxonomy.api.php
+++ b/core/modules/taxonomy/taxonomy.api.php
@@ -13,6 +13,21 @@
  */
 
 /**
+ * Act on vocabulary creation.
+ *
+ * This can be used to set initial values for the vocabulary, for instance to
+ * provide defaults.
+ *
+ * @param \Drupal\taxonomy\Plugin\Core\Entity\Vocabulary $vocabulary
+ *   The vocabulary object.
+ */
+function hook_taxonomy_vocabulary_create(\Drupal\taxonomy\Plugin\Core\Entity\Vocabulary $vocabulary) {
+  if (!isset($vocabulary->foo)) {
+    $vocabulary->foo->value = 'bar';
+  }
+}
+
+/**
  * Act on taxonomy vocabularies when loaded.
  *
  * Modules implementing this hook can act on the vocabulary objects before they
@@ -110,6 +125,21 @@ function hook_taxonomy_vocabulary_delete(Drupal\taxonomy\Plugin\Core\Entity\Voca
 }
 
 /**
+ * Act on term creation.
+ *
+ * This can be used to set initial values for the term, for instance to
+ * provide defaults.
+ *
+ * @param \Drupal\taxonomy\Plugin\Core\Entity\Term $term
+ *   The term object.
+ */
+function hook_taxonomy_term_create(\Drupal\taxonomy\Plugin\Core\Entity\Term $term) {
+  if (!isset($term->foo)) {
+    $term->foo->value = 'bar';
+  }
+}
+
+/**
  * Act on taxonomy terms when loaded.
  *
  * Modules implementing this hook can act on the term objects returned by
diff --git a/core/modules/user/user.api.php b/core/modules/user/user.api.php
index b5bbbf7..4f7a370 100644
--- a/core/modules/user/user.api.php
+++ b/core/modules/user/user.api.php
@@ -13,6 +13,21 @@
  */
 
 /**
+ * Act on user creation.
+ *
+ * This can be used to set initial values for the user, for instance to
+ * provide defaults.
+ *
+ * @param \Drupal\user\Plugin\Core\Entity\User $user
+ *   The user object.
+ */
+function hook_user_create(\Drupal\user\Plugin\Core\Entity\User $user) {
+  if (!isset($user->foo)) {
+    $user->foo->value = 'bar';
+  }
+}
+
+/**
  * Act on user objects when loaded from the database.
  *
  * Due to the static cache in user_load_multiple() you should not use this
