diff --git a/src/EntityToJsonApi.php b/src/EntityToJsonApi.php
index 31686fe..a5fae00 100644
--- a/src/EntityToJsonApi.php
+++ b/src/EntityToJsonApi.php
@@ -83,16 +83,14 @@ class EntityToJsonApi {
    *
    * @param \Drupal\Core\Entity\EntityInterface $entity
    *   The entity to generate the JSON from.
+   * @param string[] $include
+   *   The list of includes.
    *
    * @return string
    *   The raw JSON string of the requested resource.
    */
-  public function serialize(EntityInterface $entity) {
-    // TODO: Supporting includes requires adding the 'include' query string.
-    return $this->serializer->serialize(new JsonApiDocumentTopLevel($entity),
-      'api_json',
-      $this->calculateContext($entity)
-    );
+  public function serialize(EntityInterface $entity, array $include = []) {
+    return $this->serializer->serialize(...$this->computeArguments($entity, $include));
   }
 
   /**
@@ -100,28 +98,28 @@ class EntityToJsonApi {
    *
    * @param \Drupal\Core\Entity\EntityInterface $entity
    *   The entity to generate the JSON from.
+   * @param string[] $include
+   *   The list of includes.
    *
    * @return array
    *   The JSON structure of the requested resource.
    */
-  public function normalize(EntityInterface $entity) {
-    return $this->serializer->normalize(new JsonApiDocumentTopLevel($entity),
-      'api_json',
-      $this->calculateContext($entity)
-    )->rasterizeValue();
+  public function normalize(EntityInterface $entity, array $include = []) {
+    return $this->serializer->normalize(...$this->computeArguments($entity, $include))->rasterizeValue();
   }
 
   /**
-   * Calculate the context for the serialize/normalize operation.
+   * Calculate the arguments for the serialize/normalize operation.
    *
    * @param \Drupal\Core\Entity\EntityInterface $entity
    *   The entity to generate the JSON from.
+   * @param string[] $include
+   *   The list of includes.
    *
    * @return array
-   *   The context.
+   *   The list of arguments for serialize/normalize operation.
    */
-  protected function calculateContext(EntityInterface $entity) {
-    // TODO: Supporting includes requires adding the 'include' query string.
+  protected function computeArguments(EntityInterface $entity, array $include = []) {
     $entity_type_id = $entity->getEntityTypeId();
     $resource_type = $this->resourceTypeRepository->get(
       $entity_type_id,
@@ -140,14 +138,21 @@ class EntityToJsonApi {
     );
     $request = Request::create($this->masterRequest->getUriForPath($path));
 
+    // We don't have to filter the "$include" since this will be done later.
+    /* @see \Drupal\jsonapi\Normalizer\JsonApiDocumentTopLevelNormalizer::expandContext() */
+    $request->query->set('include', implode(',', $include));
     $request->attributes->set($entity_type_id, $entity);
     $request->attributes->set(Routes::RESOURCE_TYPE_KEY, $resource_type);
     $request->attributes->set(Routes::JSON_API_ROUTE_FLAG_KEY, TRUE);
 
     return [
-      'account' => $this->currentUser,
-      'resource_type' => $resource_type,
-      'request' => $request,
+      new JsonApiDocumentTopLevel($entity),
+      'api_json',
+      [
+        'account' => $this->currentUser,
+        'resource_type' => $resource_type,
+        'request' => $request,
+      ],
     ];
   }
 
