diff --git a/composer.json b/composer.json
index 72acd02..4d35345 100644
--- a/composer.json
+++ b/composer.json
@@ -7,6 +7,14 @@
         {
             "name": "Mateu Aguiló Bosch",
             "email": "mateu.aguilo.bosch@gmail.com"
+        },
+        {
+            "name": "Martin Kolar",
+            "homepage": "https://www.drupal.org/u/mkolar"
+        },
+        {
+            "name": "Karel Majzlik",
+            "homepage": "https://www.drupal.org/u/karlos007"
         }
     ],
     "require": {
diff --git a/jsonapi_defaults/README.md b/jsonapi_defaults/README.md
new file mode 100644
index 0000000..30f2552
--- /dev/null
+++ b/jsonapi_defaults/README.md
@@ -0,0 +1 @@
+# JSON API Defaults
diff --git a/jsonapi_defaults/config/schema/jsonapi_defaults.schema.yml b/jsonapi_defaults/config/schema/jsonapi_defaults.schema.yml
new file mode 100644
index 0000000..b750961
--- /dev/null
+++ b/jsonapi_defaults/config/schema/jsonapi_defaults.schema.yml
@@ -0,0 +1,16 @@
+jsonapi_extras.jsonapi_resource_config.*.third_party.jsonapi_defaults:
+  type: mapping
+  label: 'JSONAPI Defaults settings'
+  mapping:
+    default_include:
+      type: sequence
+      label: 'Default includes list'
+      sequence:
+        type: string
+        label: 'Key and value'
+    default_filter:
+      type: sequence
+      label: 'Default filters list'
+      sequence:
+        type: string
+        label: 'Key and value'
diff --git a/jsonapi_defaults/jsonapi_defaults.info.yml b/jsonapi_defaults/jsonapi_defaults.info.yml
new file mode 100644
index 0000000..a7bb7ca
--- /dev/null
+++ b/jsonapi_defaults/jsonapi_defaults.info.yml
@@ -0,0 +1,8 @@
+name: JSON API Defaults
+type: module
+description: Builds on top of JSON API to deliver extra functionality.
+core: 8.x
+package: Web services
+dependencies:
+  - jsonapi
+  - jsonapi_extras
diff --git a/jsonapi_defaults/jsonapi_defaults.install b/jsonapi_defaults/jsonapi_defaults.install
new file mode 100644
index 0000000..478b257
--- /dev/null
+++ b/jsonapi_defaults/jsonapi_defaults.install
@@ -0,0 +1,29 @@
+<?php
+
+/**
+ * @file
+ * Install, update and uninstall functions for the JSON API Defaults module.
+ */
+
+/**
+ * Update third party settings default_include.
+ */
+function jsonapi_defaults_update_8001() {
+  /** @var \Drupal\Core\Config\ConfigFactoryInterface $config_factory */
+  $config_factory = \Drupal::configFactory();
+  /** @var \Drupal\Core\Config\Config $config */
+  $config_list = $config_factory->listAll('jsonapi_extras.jsonapi_resource_config');
+  foreach ($config_list as $config) {
+    $config = $config_factory->getEditable($config);
+    $third_party = $config->get('third_party_settings');
+    if (isset($third_party['jsonapi_defaults']['default_include'])
+      && is_string($third_party['jsonapi_defaults']['default_include'])
+    ) {
+      $third_party_defaults = str_replace(" ", "", $third_party['jsonapi_defaults']['default_include']);
+      $third_party_array = explode(",", $third_party_defaults);
+      $third_party['jsonapi_defaults']['default_include'] = $third_party_array;
+      $config->set('third_party_settings', $third_party);
+      $config->save();
+    }
+  }
+}
diff --git a/jsonapi_defaults/jsonapi_defaults.module b/jsonapi_defaults/jsonapi_defaults.module
new file mode 100644
index 0000000..8db288e
--- /dev/null
+++ b/jsonapi_defaults/jsonapi_defaults.module
@@ -0,0 +1,142 @@
+<?php
+
+use Drupal\Core\Form\FormStateInterface;
+use Drupal\jsonapi_extras\Entity\JsonapiResourceConfig;
+
+
+/**
+ * Implements hook_form_FORM_ID_alter().
+ */
+function jsonapi_defaults_form_jsonapi_resource_config_add_form_alter(&$form, FormStateInterface $form_state, $form_id) {
+  _jsonapi_defaults_form_alter($form, $form_state);
+}
+
+/**
+ * Implements hook_form_FORM_ID_alter().
+ */
+function jsonapi_defaults_form_jsonapi_resource_config_edit_form_alter(&$form, FormStateInterface $form_state, $form_id) {
+  _jsonapi_defaults_form_alter($form, $form_state);
+}
+
+/**
+ * Build JSON API Defaults part of the form.
+ *
+ * @param array $form
+ *   Drupal form array.
+ * @param \Drupal\Core\Form\FormStateInterface $form_state
+ *   Drupal form_state object.
+ *
+ * @return array
+ *   Drupal form array
+ */
+function _jsonapi_defaults_form_alter(array &$form, FormStateInterface $form_state) {
+
+  /** @var \Drupal\jsonapi_extras\Entity\JsonapiResourceConfig $config_resource */
+  $config_resource = $form_state->getFormObject()->getEntity();
+
+  $form['bundle_wrapper']['fields_wrapper']['defaults'] = [
+    '#type' => 'details',
+    '#title' => t('Defaults'),
+    '#open' => FALSE,
+    '#description' => t('Sets resource default parameters.'),
+  ];
+
+  $includes = $config_resource->getThirdPartySetting('jsonapi_defaults', 'default_include');
+  $form['bundle_wrapper']['fields_wrapper']['defaults']['default_include'] = [
+    '#type' => 'textarea',
+    '#title' => 'Default include list',
+    '#default_value' => $includes ? implode("\n", $includes) : '',
+    '#description' => t('Specify includes here (For example uid or field_image). Enter one include per line.'),
+  ];
+
+  $form['bundle_wrapper']['fields_wrapper']['defaults']['default_filter'] = [
+    '#type' => 'textarea',
+    '#title' => 'Default filter list',
+    '#default_value' => _jsonapi_defaults_convert_value($config_resource->getThirdPartySetting('jsonapi_defaults', 'default_filter')),
+    '#description' => t('Enter one filter per line, in the format key|value. For example:<br />
+        filter[titleFilter][condition][path]|title<br />
+        filter[titleFilter][condition][value]|Comis Commodo Ymo<br />'),
+  ];
+
+  $form['#entity_builders'][] = 'jsonapi_defaults_form_jsonapi_resource_config_form_builder';
+
+}
+
+/**
+ * Entity builder for json api resource configuration entity.
+ */
+function jsonapi_defaults_form_jsonapi_resource_config_form_builder($entity_type, JsonapiResourceConfig $config_resource, &$form, FormStateInterface $form_state) {
+  if ($raw_value = $form_state->getValue('default_filter')) {
+    $value = _jsonapi_defaults_convert_rawvalue($raw_value);
+    $config_resource->setThirdPartySetting('jsonapi_defaults', 'default_filter', $value);
+  }
+  else {
+    $config_resource->unsetThirdPartySetting('jsonapi_defaults', 'default_filter');
+  }
+
+  if ($raw_value = $form_state->getValue('default_include')) {
+    $include = array_map('trim', preg_split('/\r\n?|\n/', $raw_value));
+    $include = array_filter($include);
+    $config_resource->setThirdPartySetting('jsonapi_defaults', 'default_include', $include);
+  }
+  else {
+    $config_resource->unsetThirdPartySetting('jsonapi_defaults', 'default_include');
+  }
+
+}
+
+/**
+ * Convert default parameters value to array (used in config).
+ *
+ * @param string|null $raw_value
+ *   Raw value from textarea.
+ *
+ * @return array
+ *   Value to be saved into config.
+ */
+function _jsonapi_defaults_convert_rawvalue($raw_value) {
+  $value = [];
+  $raw_value = (!is_string($raw_value)) ? '' : $raw_value;
+  foreach (preg_split('/\r\n|[\r\n]/', $raw_value) as $param) {
+    if (strpos($param, '|') !== FALSE) {
+      $a = explode("|", $param);
+      $key = $a[0];
+      $val = $a[1];
+      if ($key == 'include') {
+        $value[$key] = trim($val);
+      }
+      elseif (preg_match("/^filter.+/", $key)) {
+        $key = str_replace('filter[', '', $key);
+        $key = explode('][', $key);
+        $value['filter:' . trim(implode('_', $key), '[]')] = $val;
+      }
+
+    }
+  }
+  return $value;
+}
+
+/**
+ * Convert default parameters value to raw value (textarea).
+ *
+ * @param array|null $value
+ *   Value from config.
+ *
+ * @return string
+ *   Value to be shown in textarea.
+ */
+function _jsonapi_defaults_convert_value($value) {
+  $raw_value = "";
+  if (is_array($value)) {
+    foreach ($value as $key => $val) {
+      if ($key == 'include') {
+        $raw_value .= "$key|$val\n";
+      }
+      elseif (preg_match("/^filter.+/", $key)) {
+        $key = implode("][", explode("_", preg_replace("/^filter:/", '', $key)));
+        $raw_value .= "filter[$key]|$val\n";
+      }
+    }
+  }
+  return $raw_value;
+}
diff --git a/jsonapi_defaults/src/JsonApiDefaultsJsonApiDocumentTopLevelNormalizer.php b/jsonapi_defaults/src/JsonApiDefaultsJsonApiDocumentTopLevelNormalizer.php
new file mode 100644
index 0000000..b0c52a1
--- /dev/null
+++ b/jsonapi_defaults/src/JsonApiDefaultsJsonApiDocumentTopLevelNormalizer.php
@@ -0,0 +1,36 @@
+<?php
+
+namespace Drupal\jsonapi_defaults;
+
+use Drupal\jsonapi\Normalizer\JsonApiDocumentTopLevelNormalizer;
+use Drupal\jsonapi\ResourceType\ResourceType;
+use Symfony\Component\HttpFoundation\Request;
+
+/**
+ * Class JsonapiServiceOverride.
+ *
+ * @package Drupal\jsonapi_defaults
+ */
+class JsonApiDefaultsJsonApiDocumentTopLevelNormalizer extends JsonApiDocumentTopLevelNormalizer {
+
+  /**
+   * @inheritdoc
+   */
+  protected function expandContext(Request $request, ResourceType $resource_type) {
+    // Do not return unrequested resources in include.
+    // @see http://jsonapi.org/format/#fetching-includes
+    if($request->query->get('include')) {
+        return parent::expandContext($request, $resource_type);
+    }
+
+    /** @var \Drupal\jsonapi_extras\ResourceType\ConfigurableResourceType $resource_type */
+    $resource_config = $resource_type->getJsonapiResourceConfig();
+
+    $default_include = $resource_config->getThirdPartySetting('jsonapi_defaults', 'default_include');
+    $includes = trim(implode(',', $default_include), ',');
+    $request->query->set('include', $includes);
+
+    return parent::expandContext($request, $resource_type);
+  }
+
+}
diff --git a/jsonapi_defaults/src/JsonApiDefaultsJsonApiParamEnhancer.php b/jsonapi_defaults/src/JsonApiDefaultsJsonApiParamEnhancer.php
new file mode 100644
index 0000000..4e38cc5
--- /dev/null
+++ b/jsonapi_defaults/src/JsonApiDefaultsJsonApiParamEnhancer.php
@@ -0,0 +1,78 @@
+<?php
+
+namespace Drupal\jsonapi_defaults;
+
+use Drupal\Core\Config\ConfigManagerInterface;
+use Drupal\jsonapi\Routing\JsonApiParamEnhancer;
+use Symfony\Component\HttpFoundation\Request;
+use Symfony\Component\Serializer\Normalizer\DenormalizerInterface;
+
+/**
+ * JsonApiDefaultsJsonApiParamEnhancer class.
+ *
+ * @internal
+ */
+class JsonApiDefaultsJsonApiParamEnhancer extends JsonApiParamEnhancer {
+
+  /**
+   * @var \Drupal\Core\Config\ConfigManagerInterface
+   */
+  protected $configManager;
+
+  /**
+   * {@inheritdoc}
+   */
+  public function __construct(DenormalizerInterface $filter_normalizer, DenormalizerInterface $sort_normalizer, DenormalizerInterface $page_normalizer, ConfigManagerInterface $configManager) {
+    parent::__construct($filter_normalizer, $sort_normalizer, $page_normalizer);
+    $this->configManager = $configManager;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function enhance(array $defaults, Request $request) {
+    /** @var \Symfony\Component\Routing\Route $route */
+    $route = $defaults['_route_object'];
+    if ($route->hasRequirement('_entity_type') && $route->hasRequirement('_bundle')) {
+      if ($resource_config = $this->configManager->loadConfigEntityByName('jsonapi_extras.jsonapi_resource_config.' . $route->getRequirement('_entity_type') . '--' . $route->getRequirement('_bundle'))) {
+        $thirdPartyDefaults = $resource_config->getThirdPartySetting('jsonapi_defaults', 'default_filter');
+
+        $default_filter = [];
+        if (is_array($thirdPartyDefaults)) {
+          foreach ($thirdPartyDefaults as $key => $value) {
+            if (substr($key, 0, 6) === 'filter') {
+              $key = str_replace('filter:', '', $key);
+              $this->setFilterValue($default_filter, $key, $value);
+            }
+          }
+        }
+        $filters = array_merge($default_filter, $request->query->get('filter') ?? []);
+
+        if (!empty($filters)) {
+          $request->query->set('filter', $filters);
+        }
+      }
+    };
+
+    return parent::enhance($defaults, $request);
+
+  }
+
+  /**
+   * Set filter into nested array.
+   *
+   * @param $arr
+   * @param $path
+   * @param $value
+   */
+  private function setFilterValue(&$arr, $path, $value) {
+    $keys = explode("_", $path);
+
+    foreach ($keys as $key) {
+      $arr = &$arr[$key];
+    }
+
+    $arr = $value;
+  }
+
+}
diff --git a/jsonapi_defaults/src/JsonapiDefaultsServiceProvider.php b/jsonapi_defaults/src/JsonapiDefaultsServiceProvider.php
new file mode 100644
index 0000000..6873637
--- /dev/null
+++ b/jsonapi_defaults/src/JsonapiDefaultsServiceProvider.php
@@ -0,0 +1,31 @@
+<?php
+
+namespace Drupal\jsonapi_defaults;
+
+use Drupal\Core\DependencyInjection\ContainerBuilder;
+use Drupal\Core\DependencyInjection\ServiceProviderBase;
+use Symfony\Component\DependencyInjection\Reference;
+
+/**
+ * Modifies the jsonapi normalizer service.
+ */
+class JsonapiDefaultsServiceProvider extends ServiceProviderBase {
+
+  /**
+   * {@inheritdoc}
+   */
+  public function alter(ContainerBuilder $container) {
+
+    // Overrides jsonapi class to add custom overrides.
+    /** @var \Symfony\Component\DependencyInjection\Definition $definition */
+    $definition = $container->getDefinition('serializer.normalizer.jsonapi_document_toplevel.jsonapi');
+    $definition->setClass('Drupal\jsonapi_defaults\JsonApiDefaultsJsonApiDocumentTopLevelNormalizer');
+
+    /** @var \Symfony\Component\DependencyInjection\Definition $definition */
+    $definition = $container->getDefinition('jsonapi.params.enhancer');
+    $definition->setClass('Drupal\jsonapi_defaults\JsonApiDefaultsJsonApiParamEnhancer');
+    $definition->addArgument(new Reference('config.manager'));
+
+  }
+
+}
