diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index a9e527dcfa90b550df13e80c9b07fd8eaf6beaaf..ed3f38eb1927c925a783c5b3860059a8f7cc642a 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -79,7 +79,7 @@ python linting:
   script:
     - pycodestyle --config=pycodestyle.ini nomad tests
     - pylint --rcfile=.pylintrc nomad tests
-    - mypy --ignore-missing-imports --follow-imports=silent --no-strict-optional nomad tests
+    - mypy nomad tests
   rules:
     - if: $CI_COMMIT_TAG
       when: never
@@ -102,7 +102,7 @@ gui linting:
 
 check python dependencies:
   stage: test
-  image: python:3.7
+  image: python:3.9
   variables:
     GIT_SUBMODULE_STRATEGY: recursive
     GIT_SUBMODULE_UPDATE_FLAGS: --jobs 4
diff --git a/Dockerfile b/Dockerfile
index 1eb4278a2f39fdb123cb8b8606b306c84c5de209..f72d071cb1aaac71f3948cd2395639239f42e5b3 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -25,7 +25,7 @@
 
 
 FROM node:16.15 AS base_node
-FROM python:3.7-slim AS base_python
+FROM python:3.9-slim AS base_python
 
 # ================================================================================
 # Built the GUI in the gui build image
@@ -179,9 +179,9 @@ COPY --from=dev_python /app/dist/nomad-lab-*.tar.gz .
 RUN pip install nomad-lab-*.tar.gz
 
 # Reduce the size of the packages
-RUN find /usr/local/lib/python3.7/ -type d -name 'tests' ! -path '*/networkx/*' -exec rm -r '{}' + \
- && find /usr/local/lib/python3.7/ -type d -name 'test' -exec rm -r '{}' + \
- && find /usr/local/lib/python3.7/site-packages/ -name '*.so' ! -path '*/h5py/*' -print -exec sh -c 'file "{}" | grep -q "not stripped" && strip -s "{}"' \;
+RUN find /usr/local/lib/python3.9/ -type d -name 'tests' ! -path '*/networkx/*' -exec rm -r '{}' + \
+ && find /usr/local/lib/python3.9/ -type d -name 'test' -exec rm -r '{}' + \
+ && find /usr/local/lib/python3.9/site-packages/ -name '*.so' ! -path '*/h5py/*' -print -exec sh -c 'file "{}" | grep -q "not stripped" && strip -s "{}"' \;
 
 
 # ================================================================================
@@ -212,14 +212,14 @@ COPY --chown=nomad:1000 nomad/jupyterhub_config.py ./nomad/jupyterhub_config.py
 COPY --chown=nomad:1000 dependencies/nomad-remote-tools-hub/tools.json ./dependencies/nomad-remote-tools-hub/tools.json
 
 COPY --chown=nomad:1000 --from=dev_python /app/examples/data/uploads /app/examples/data/uploads
-COPY --chown=nomad:1000 --from=builder /usr/local/lib/python3.7/site-packages /usr/local/lib/python3.7/site-packages
+COPY --chown=nomad:1000 --from=builder /usr/local/lib/python3.9/site-packages /usr/local/lib/python3.9/site-packages
 COPY --chown=nomad:1000 --from=builder /usr/local/share/jupyterhub /usr/local/share/jupyterhub
 COPY --chown=nomad:1000 --from=builder /usr/local/bin/nomad /usr/local/bin/nomad
 
 RUN useradd -ms /bin/bash nomad \
  && mkdir -p /app/.volumes/fs \
  && chown -R nomad:1000 /app \
- && chown -R nomad:1000 /usr/local/lib/python3.7/site-packages/nomad
+ && chown -R nomad:1000 /usr/local/lib/python3.9/site-packages/nomad
 
 USER nomad
 
diff --git a/README.md b/README.md
index 3c26ab4102816f4239f905de1268f1bf93fa4ad1..f928d8f72327e6334b5275847b97a3a6fa5f3b62 100644
--- a/README.md
+++ b/README.md
@@ -51,6 +51,9 @@ Omitted versions are plain bugfix releases with only minor changes and fixes. Th
 file `CHANGELOG.md` might contain more detailed change information for the latest
 versions.
 
+### v1.1.8
+- use Python 3.9
+
 ### v1.1.7
 - refactored NORTH configuration and k8s deployment
 - categorized build-in ELN schemas
diff --git a/docs/develop/setup.md b/docs/develop/setup.md
index adf44c943c1d76b391b192a99a180c57b1a647d6..32353ff560886cc4a380b3ba3b9f6d020f725f43 100644
--- a/docs/develop/setup.md
+++ b/docs/develop/setup.md
@@ -59,31 +59,25 @@ git submodule update --init
 You should work in a Python virtual environment.
 
 #### pyenv
-The nomad code currently targets python 3.7. If your host machine has an older version installed,
-you can use [pyenv](https://github.com/pyenv/pyenv) to use python 3.7 in parallel to your
-system's python. Never the less, we have good experience with 3.8 and 3.9 users as well
-and everything might work with newer versions as well.
+The nomad code currently targets python 3.9. If your host machine has an older version installed,
+you can use [pyenv](https://github.com/pyenv/pyenv) to use python 3.9 in parallel to your
+system's python.
 
 #### virtualenv
-We strongly recommend to use *virtualenv* to create a virtual environment. It allows you
+Create a virtual environment. It allows you
 to keep nomad and its dependencies separate from your system's python installation.
-Make sure that the virtual environment is based on Python 3.
+Make sure that the virtual environment is based on Python 3.8 or higher (ideally Python 3.9). Use the built-in `venv` or (virtualenv)[https://pypi.org/project/virtualenv/] alternatively.
 
-To install *virtualenv*, create an environment, and activate the environment, use:
 ```
-pip install virtualenv
-virtualenv -p `which python3` .pyenv
+python3 -m venv .pyenv
 source .pyenv/bin/activate
 ```
 
-If you use *pyenv* (or similar solutions) make sure that the `-p` arguments evaluates
-to the `python` binary with the desired version.
-
 #### conda
 If you are a conda user, there is an equivalent, but you have to install pip and the
 right python version while creating the environment.
 ```sh
-conda create --name nomad_env pip python=3.7
+conda create --name nomad_env pip python=3.9
 conda activate nomad_env
 ```
 
diff --git a/docs/oasis.md b/docs/oasis.md
index f92e8b0b8f0e1c2bb0aa64742cd992a6e623325d..1f075e07c90e64361bc542170e5f357f596bda11 100644
--- a/docs/oasis.md
+++ b/docs/oasis.md
@@ -410,9 +410,9 @@ able to run NOMAD in user space.
 
 You will need:
 
-- preferably a linux computer, which Python 3.7, preferable a Python virtual environment
-- elasticsearch 6.x, running without users and authentication, preferable on the default settings
-- mongodb 4.x, running without users and authentication, preferable on the default settings
+- preferably a linux computer, which Python 3.9, preferable a Python virtual environment
+- elasticsearch 7.x, running without users and authentication, preferable on the default settings
+- mongodb 5.x, running without users and authentication, preferable on the default settings
 - rabbitmq 3.x, running without users and authentication, preferable on the default settings
 - nginx
 - an empty directory to work in
diff --git a/gui/src/parserMetadata.json b/gui/src/parserMetadata.json
index cf3cd1184e9baea79e2d69a56f416b7a2c529af3..251a03b5f5523560f3db963f861c0506bde0fcb5 100644
--- a/gui/src/parserMetadata.json
+++ b/gui/src/parserMetadata.json
@@ -484,7 +484,7 @@
     "codeUrl": "https://www.nexusformat.org/",
     "parserDirName": "dependencies/parsers/nexus/",
     "parserGitUrl": "https://github.com/nomad-coe/nomad-parser-nexus.git",
-    "preamble": "This is not a real parser, but an example template on how to write one. You can fork this repository to create actual parsers.\n\n## Get started\n\nYou should create a virtual environment. This is optional, but highly recommended as\nthe required nomad-lab pypi package requires many dependencies with specific versions\nthat might conflict with other libraries that you have installed. This was tested\nwith Python 3.7.\n\n```\npip install virtualenv\nvirtualenv -p `which python3` .pyenv\nsource .pyenv/bin/activate\n```\n\nSimply install our pypi package with pip:\n```\npip install --upgrade pip\npip install nomad-lab\n```\n\nClone this project (or fork and then clone the fork). Go into the cloned directly and\ndirectly run the parser from there:\n```\ngit clone https://github.com/nomad-coe/nomad-parser-nexus.git parser-nexus\ncd parser-nexus\npython -m nexusutils tests/data/nexus.out\n```\n\nThere are also a basic test framework written in [pytest](https://docs.pytest.org/en/stable/).\nInstall the remaining dev dependencies and run the tests with:\n```\npip install -r requirements.txt\npytest -sv tests\n```\n\n## Next steps\n\nOur documentation provides several resources that might be interesting:\n- [How to write a parser](https://nomad-lab.eu/prod/rae/docs/parser.html). Provides\n  a more detailed tutorial on how to write a parser.\n- [Introduction to the NOMAD Metainfo](https://nomad-lab.eu/prod/rae/docs/metainfo.html).\n  This explains how NOMAD data schema and can be extended and used within your parser.\n\nTo get you parser included in NOMAD or ask further questions, you can:\n- Use our forums at [matsci.org](https://matsci.org/c/nomad/32)\n- Open an issue on the [nexus-parser GitHub project](https://github.com/nomad-coe/nomad-parser-nexus/issues)\n- Write to [support@nomad-lab.eu](mailto:support@nomad-lab.eu)\n\n**Note!** The rest of this README.md is the usual text that applies to all NOMAD parsers.\n",
+    "preamble": "This is not a real parser, but an example template on how to write one. You can fork this repository to create actual parsers.\n\n## Get started\n\nYou should create a virtual environment. This is optional, but highly recommended as\nthe required nomad-lab pypi package requires many dependencies with specific versions\nthat might conflict with other libraries that you have installed. This was tested\nwith Python 3.9.\n\n```\npip install virtualenv\nvirtualenv -p `which python3` .pyenv\nsource .pyenv/bin/activate\n```\n\nSimply install our pypi package with pip:\n```\npip install --upgrade pip\npip install nomad-lab\n```\n\nClone this project (or fork and then clone the fork). Go into the cloned directly and\ndirectly run the parser from there:\n```\ngit clone https://github.com/nomad-coe/nomad-parser-nexus.git parser-nexus\ncd parser-nexus\npython -m nexusutils tests/data/nexus.out\n```\n\nThere are also a basic test framework written in [pytest](https://docs.pytest.org/en/stable/).\nInstall the remaining dev dependencies and run the tests with:\n```\npip install -r requirements.txt\npytest -sv tests\n```\n\n## Next steps\n\nOur documentation provides several resources that might be interesting:\n- [How to write a parser](https://nomad-lab.eu/prod/rae/docs/parser.html). Provides\n  a more detailed tutorial on how to write a parser.\n- [Introduction to the NOMAD Metainfo](https://nomad-lab.eu/prod/rae/docs/metainfo.html).\n  This explains how NOMAD data schema and can be extended and used within your parser.\n\nTo get you parser included in NOMAD or ask further questions, you can:\n- Use our forums at [matsci.org](https://matsci.org/c/nomad/32)\n- Open an issue on the [nexus-parser GitHub project](https://github.com/nomad-coe/nomad-parser-nexus/issues)\n- Write to [support@nomad-lab.eu](mailto:support@nomad-lab.eu)\n\n**Note!** The rest of this README.md is the usual text that applies to all NOMAD parsers.\n",
     "status": "production",
     "tableOfFiles": "|Input Filename| Description|\n|--- | --- |\n|`nexus.out` | **Mainfile** in NEXUS specific plain-text |\n"
   },
diff --git a/mypy.ini b/mypy.ini
new file mode 100644
index 0000000000000000000000000000000000000000..a922f13471d53daa927e934f4dd823922f795f95
--- /dev/null
+++ b/mypy.ini
@@ -0,0 +1,6 @@
+[mypy]
+strict = false
+ignore_missing_imports = true
+follow_imports = silent
+no_strict_optional = true
+disable_error_code = import, annotation-unchecked
diff --git a/nomad/app/v1/routers/uploads.py b/nomad/app/v1/routers/uploads.py
index e6d9a20ae76bb3377d447b990858bc9014c81d3d..0dd47de1bae14687a7b25a05b4e24d96aa4dea8c 100644
--- a/nomad/app/v1/routers/uploads.py
+++ b/nomad/app/v1/routers/uploads.py
@@ -1677,7 +1677,7 @@ async def get_upload_bundle(
         raise HTTPException(status_code=status.HTTP_400_BAD_REQUEST, detail=strip('''
             Could not export due to error: ''' + str(e)))
 
-    return StreamingResponse(stream, media_type='application/zip')
+    return StreamingResponse(iter(stream), media_type='application/zip')
 
 
 @router.post(
diff --git a/nomad/atomutils.py b/nomad/atomutils.py
index 49097208c5dfc8d691751e07a74060a11c437793..40f84b57605357bb1d59376e0668e0c091ddbaf7 100644
--- a/nomad/atomutils.py
+++ b/nomad/atomutils.py
@@ -1516,7 +1516,7 @@ def __parse_jumps(universe: MDAnalysis.Universe, selection: MDAnalysis.AtomGroup
     __ = universe.trajectory[0]
     prev = np.array(selection.positions)
     box = universe.trajectory[0].dimensions[:3]
-    sparse_data = namedtuple('SparseData', ['data', 'row', 'col'])
+    sparse_data = namedtuple('SparseData', ['data', 'row', 'col'])  # type: ignore[name-match]
     jump_data = (
         sparse_data(data=array('b'), row=array('l'), col=array('l')),
         sparse_data(data=array('b'), row=array('l'), col=array('l')),
diff --git a/nomad/cli/dev.py b/nomad/cli/dev.py
index 24634e7c1e13f1eb446f2c5285801cc7a10c3c5f..2bec90fa4dc0ec92594a808f652bbe9d8923ba4d 100644
--- a/nomad/cli/dev.py
+++ b/nomad/cli/dev.py
@@ -46,7 +46,7 @@ def qa(skip_tests: bool, exitfirst: bool):
     click.echo('Run linter ...')
     ret_code += os.system('python -m pylint --rcfile=.pylintrc nomad tests')
     click.echo('Run static type checks ...')
-    ret_code += os.system('python -m mypy --ignore-missing-imports --follow-imports=silent --no-strict-optional nomad tests')
+    ret_code += os.system('python -m mypy nomad tests')
 
     sys.exit(ret_code)
 
diff --git a/nomad/client/processing.py b/nomad/client/processing.py
index 255803bda3280a75d783b0680daa013268cb9164..26aa0514ce926238f9b686b094c096468c34d22e 100644
--- a/nomad/client/processing.py
+++ b/nomad/client/processing.py
@@ -133,9 +133,14 @@ class LocalEntryProcessing:
             response = self.__handle_response(
                 api.get(f'entries/{self.entry_id}/raw', auth=auth))
 
+            iter_content = getattr(response, 'iter_content', None)
             with open(self.local_path, 'wb') as f:
-                for chunk in response.iter_content(chunk_size=io.DEFAULT_BUFFER_SIZE):
-                    f.write(chunk)
+                if iter_content:
+                    for chunk in iter_content(chunk_size=io.DEFAULT_BUFFER_SIZE):
+                        f.write(chunk)
+                else:
+                    # Fallback for clients that don't support iterating the content
+                    f.write(response.content)
         else:
             print('Entry already downloaded.')
 
diff --git a/nomad/config/models.py b/nomad/config/models.py
index 60d521569356ab18d40383502428beefd199eb00..cb80b52db4b76b469dc73cc3c511859c12b3dab8 100644
--- a/nomad/config/models.py
+++ b/nomad/config/models.py
@@ -262,16 +262,15 @@ class NORTH(NomadSettings):
         if not isinstance(v, str):
             return v
 
-        # interpret as file
+        # interpret v as file path
         path = v
         if not os.path.exists(path):
+            # try to interprete path as relative to project root
             root_path = os.path.join(os.path.dirname(__file__), '../..')
             path = os.path.join(root_path, v)
 
         with open(path, 'rt') as f:
-            v = json.load(f)
-
-        return v
+            return json.load(f)
 
 
 class RabbitMQ(NomadSettings):
diff --git a/nomad/metainfo/util.py b/nomad/metainfo/util.py
index 237bb758f38b614a6e3fcb41a86ffd8d7c048cb9..1d441e769a91c08eca0092797590e9ff78caf5b5 100644
--- a/nomad/metainfo/util.py
+++ b/nomad/metainfo/util.py
@@ -744,9 +744,9 @@ def validate_shape(section, quantity_def, value: Any) -> bool:
     if type(value) == np.ndarray:
         value_shape = value.shape
     elif isinstance(value, list) and not isinstance(value, MEnum):
-        value_shape = [len(value)]
+        value_shape = (len(value),)
     else:
-        value_shape = []
+        value_shape = ()
 
     if len(value_shape) != len(quantity_shape):
         return False
diff --git a/nomad/parsing/metadata.yaml b/nomad/parsing/metadata.yaml
index 6d941c76c422599f11dd90b7668b3b49510c5dce..437fb77566e5e83f64ea2a0c5e2ffc372214297a 100644
--- a/nomad/parsing/metadata.yaml
+++ b/nomad/parsing/metadata.yaml
@@ -14,7 +14,7 @@ preamble: |
   You should create a virtual environment. This is optional, but highly recommended as
   the required nomad-lab pypi package requires many dependencies with specific versions
   that might conflict with other libraries that you have installed. This was tested
-  with Python 3.7.
+  with Python 3.9.
 
   ```
   pip install virtualenv
diff --git a/pyproject.toml b/pyproject.toml
index c39849ebe8fffa1671fcb95081829b358a38f23e..7a5d8163546262c985ca0e9c8a2e7e04e5985ce1 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -11,7 +11,7 @@ authors = [
 ]
 dynamic = ["version"]
 license = { file = "LICENSE" }
-requires-python = ">=3.6"
+requires-python = ">=3.8"
 dependencies = [
     'nptyping==1.4.4',
     'cachetools==4.2.4',
@@ -19,13 +19,13 @@ dependencies = [
     'Pint==0.17',
     'orjson==3.6.0',
     'click>=7.1.2',
-    'requests==2.27.1',
+    'requests==2.28.2',
     'pytz==2021.1',
     'aniso8601==7.0.0',
     'ase==3.19.0',
     'python-keycloak==0.26.1',
     'elasticsearch-dsl==7.4.0',
-    'pydantic==1.9.1',
+    'pydantic==1.10.5',
     'jmespath==0.10.0',
     'h5grove>=1.0.0',
     'httpx==0.22.0',
@@ -54,7 +54,7 @@ parsing = [
     'mdanalysis==2.1.0',
     'xarray',
     'phonopy==2.11.0',
-    'pymatgen==2022.0.17',
+    'pymatgen==2023.2.28',
     'asr==0.4.1',
     'bitarray==2.3.5',
     'xrdtools==0.1.1',
@@ -94,7 +94,7 @@ infrastructure = [
     'recommonmark==0.7.1',
     'jinja2==3.0.3',
     'rdflib==5.0.0',
-    'fastapi==0.65.3',
+    'fastapi==0.92.0',
     'uvicorn[standard]',
     'python-multipart==0.0.5',
     'jupyterhub==1.4.2',
@@ -102,7 +102,7 @@ infrastructure = [
     'oauthenticator==14.2.0',
     'validators==0.18.2',
     'aiofiles==0.8.0',
-    'joblib==1.1.0',
+    'joblib>=1.1.0',
     'importlib-metadata~=4.13.0' # Needed because of https://github.com/python/importlib_metadata/issues/411
 ]
 dev = [
@@ -110,7 +110,7 @@ dev = [
     'pip-tools',
     'markupsafe',
     'gitpython==3.1.24',
-    'mypy==0.730',
+    'mypy>=1.0.1',
     'typed-ast>=1.4.2',
     'astroid>=2.5.1',
     'pylint==2.13.9',
@@ -150,4 +150,12 @@ where = [
 exclude = ["tests*"]
 namespaces = false
 
+[tool.mypy]
+strict = false
+ignore_missing_imports = true
+follow_imports = "silent"
+no_strict_optional = true
+disable_error_code = "import, annotation-unchecked"
+
+
 [tool.setuptools_scm]
diff --git a/requirements-dev.txt b/requirements-dev.txt
index 3c1c5b852691ea5c09a4619c24fe7183417c10de..8fd3dd80d7911527ebe00f297fc202f118964f80 100644
--- a/requirements-dev.txt
+++ b/requirements-dev.txt
@@ -1,5 +1,5 @@
 #
-# This file is autogenerated by pip-compile with python 3.7
+# This file is autogenerated by pip-compile with python 3.9
 # To update, run:
 #
 #    pip-compile --annotation-style=line --extra=dev --extra=infrastructure --extra=parsing --output-file=requirements-dev.txt dependencies/matid/pyproject.toml dependencies/nomad-dos-fingerprints/pyproject.toml dependencies/parsers/atomistic/pyproject.toml dependencies/parsers/database/pyproject.toml dependencies/parsers/eelsdb/pyproject.toml dependencies/parsers/electronic/pyproject.toml dependencies/parsers/nexus/pyproject.toml dependencies/parsers/workflow/pyproject.toml pyproject.toml requirements.txt
@@ -9,8 +9,8 @@ alabaster==0.7.12         # via -r requirements.txt, sphinx
 alembic==1.9.1            # via -r requirements.txt, jupyterhub
 amqp==2.6.1               # via -r requirements.txt, kombu
 aniso8601==7.0.0          # via -r requirements.txt, nomad-lab (pyproject.toml)
-anyio==3.6.2              # via -r requirements.txt, httpcore, jupyter-server, watchfiles
-appnope==0.1.3            # via -r requirements.txt
+anyio==3.6.2              # via -r requirements.txt, httpcore, jupyter-server, starlette, watchfiles
+appnope==0.1.3            # via -r requirements.txt, ipykernel, ipython
 argon2-cffi==21.3.0       # via -r requirements.txt, jupyter-server
 argon2-cffi-bindings==21.2.0  # via -r requirements.txt, argon2-cffi
 arrow==1.2.3              # via -r requirements.txt, isoduration
@@ -37,7 +37,6 @@ bitarray==2.3.5           # via -r requirements.txt, nomad-dos-fingerprints (dep
 bleach==5.0.1             # via -r requirements.txt, nbconvert, readme-renderer
 bs4==0.0.1                # via -r requirements.txt, nomad-lab (pyproject.toml)
 build==0.9.0              # via nomad-lab (pyproject.toml), pip-tools
-cached-property==1.5.2    # via -r requirements.txt, fqdn, h5py
 cachetools==4.2.4         # via -r requirements.txt, nomad-lab (pyproject.toml)
 celery[redis]==4.4.7      # via -r requirements.txt, nomad-lab (pyproject.toml)
 certifi==2022.12.7        # via -r requirements.txt, elasticsearch, httpcore, httpx, requests
@@ -50,7 +49,7 @@ cloudpickle==2.2.0        # via -r requirements.txt, dask
 colorama==0.4.6           # via twine
 commonmark==0.9.1         # via -r requirements.txt, recommonmark
 coverage==6.5.0           # via pytest-cov
-cryptography==39.0.0      # via -r requirements.txt, nomad-lab (pyproject.toml), pyjwt, pyopenssl, rfc3161ng, secretstorage
+cryptography==39.0.0      # via -r requirements.txt, nomad-lab (pyproject.toml), pyjwt, pyopenssl, rfc3161ng
 cycler==0.11.0            # via -r requirements.txt, matplotlib
 dask[array]==2022.2.0     # via -r requirements.txt, hyperspy
 debugpy==1.6.5            # via -r requirements.txt, ipykernel
@@ -67,12 +66,13 @@ ecdsa==0.18.0             # via -r requirements.txt, python-jose
 elasticsearch==7.17.1     # via -r requirements.txt, elasticsearch-dsl, nomad-lab (pyproject.toml)
 elasticsearch-dsl==7.4.0  # via -r requirements.txt, nomad-lab (pyproject.toml)
 email-validator==1.3.0    # via -r requirements.txt, optimade
+emmet-core==0.48.4        # via -r requirements.txt, mp-api
 entrypoints==0.4          # via -r requirements.txt, ipyparallel, jupyter-client, jupyterhub, numcodecs
 escapism==1.0.1           # via -r requirements.txt, dockerspawner
 essential-generators==1.0  # via nomad-lab (pyproject.toml)
 et-xmlfile==1.1.0         # via -r requirements.txt, openpyxl
 executing==0.10.0         # via devtools
-fastapi==0.65.3           # via -r requirements.txt, nomad-lab (pyproject.toml), optimade
+fastapi==0.92.0           # via -r requirements.txt, nomad-lab (pyproject.toml), optimade
 fasteners==0.18           # via -r requirements.txt, zarr
 fastjsonschema==2.16.2    # via -r requirements.txt, nbformat
 filelock==3.3.1           # via -r requirements.txt, nomad-lab (pyproject.toml)
@@ -90,7 +90,7 @@ griddataformats==0.7.0    # via -r requirements.txt, mdanalysis
 gsd==2.7.0                # via -r requirements.txt, mdanalysis
 h11==0.12.0               # via -r requirements.txt, httpcore, uvicorn
 h5grove==1.2.0            # via -r requirements.txt, jupyterlab-h5web, nomad-lab (pyproject.toml)
-h5py==3.6.0               # via -r requirements.txt, electronicparsers (dependencies/parsers/electronic/pyproject.toml), h5grove, h5py-wrapper, hyperspy, jupyterlab-h5web, nexusutils (dependencies/parsers/nexus/pyproject.toml), nomad-lab (pyproject.toml), phonopy, workflowparsers (dependencies/parsers/workflow/pyproject.toml)
+h5py==3.6.0               # via -r requirements.txt, electronicparsers (dependencies/parsers/electronic/pyproject.toml), h5grove, h5py-wrapper, hyperspy, jupyterlab-h5web, nexusutils (dependencies/parsers/nexus/pyproject.toml), nomad-lab (pyproject.toml), phonopy, pyscf, workflowparsers (dependencies/parsers/workflow/pyproject.toml)
 h5py-wrapper==1.1.0       # via -r requirements.txt, hdfdict
 hdfdict @ git+https://github.com/shabihsherjeel/hdfdict@f48a586  # via -r requirements.txt, nexusutils (dependencies/parsers/nexus/pyproject.toml)
 hjson==3.0.2              # via -r requirements.txt, nomad-lab (pyproject.toml)
@@ -102,8 +102,7 @@ hyperspy==1.7.3           # via -r requirements.txt, nexusutils (dependencies/pa
 idna==3.4                 # via -r requirements.txt, anyio, email-validator, jsonschema, requests, rfc3986
 imageio==2.24.0           # via -r requirements.txt, hyperspy, scikit-image
 imagesize==1.4.1          # via -r requirements.txt, sphinx
-importlib-metadata==4.13.0  # via -r requirements.txt, alembic, build, click, flask, hyperspy, jsonschema, keyring, kombu, mako, markdown, mkdocs, nbconvert, nbformat, nomad-lab (pyproject.toml), numba, pep517, pint, pluggy, prettytable, redis, sphinx, sqlalchemy, structlog, twine, xarray
-importlib-resources==5.10.2  # via -r requirements.txt, alembic
+importlib-metadata==4.13.0  # via -r requirements.txt, flask, hyperspy, keyring, markdown, mkdocs, nbconvert, nomad-lab (pyproject.toml), sphinx, twine
 inflection==0.5.1         # via -r requirements.txt, nomad-lab (pyproject.toml)
 ipykernel==6.16.2         # via -r requirements.txt, ipyparallel
 ipyparallel==8.4.1        # via -r requirements.txt, hyperspy
@@ -114,7 +113,6 @@ isort==4.3.21             # via pylint
 itsdangerous==2.0.1       # via -r requirements.txt, flask, nomad-lab (pyproject.toml)
 jaraco-classes==3.2.3     # via keyring
 jedi==0.18.2              # via -r requirements.txt, ipython
-jeepney==0.8.0            # via keyring, secretstorage
 jinja2==3.0.3             # via -r requirements.txt, flask, hyperspy, jupyter-server, jupyterhub, mkdocs, mkdocs-macros-plugin, mkdocs-material, nbconvert, nomad-lab (pyproject.toml), sphinx
 jmespath==0.10.0          # via -r requirements.txt, nomad-lab (pyproject.toml)
 joblib==1.1.0             # via -r requirements.txt, mdanalysis, nomad-lab (pyproject.toml), scikit-learn
@@ -131,6 +129,7 @@ keyring==23.11.0          # via twine
 kiwisolver==1.4.4         # via -r requirements.txt, matplotlib
 kombu==4.6.11             # via -r requirements.txt, celery
 lark-parser==0.12.0       # via -r requirements.txt, optimade
+latexcodec==2.0.1         # via -r requirements.txt, pybtex
 lazy-object-proxy==1.9.0  # via astroid
 llvmlite==0.39.1          # via -r requirements.txt, numba
 locket==1.0.0             # via -r requirements.txt, partd
@@ -154,12 +153,13 @@ mkdocs-material-extensions==1.0.3  # via mkdocs-material, nomad-lab (pyproject.t
 mmtf-python==1.1.3        # via -r requirements.txt, mdanalysis
 mongoengine==0.25.0       # via -r requirements.txt, nomad-lab (pyproject.toml)
 mongomock==4.1.2          # via -r requirements.txt, optimade
-monty==2022.9.9           # via -r requirements.txt, pymatgen
-more-itertools==9.0.0     # via jaraco-classes, pytest
+monty==2022.9.9           # via -r requirements.txt, emmet-core, mp-api, pymatgen
+more-itertools==9.0.0     # via pytest
+mp-api==0.30.10           # via -r requirements.txt, pymatgen
 mpmath==1.2.1             # via -r requirements.txt, sympy
 mrcfile==1.4.3            # via -r requirements.txt, griddataformats
-msgpack==1.0.4            # via -r requirements.txt, mmtf-python, nomad-lab (pyproject.toml)
-mypy==0.730               # via nexusutils (dependencies/parsers/nexus/pyproject.toml), nomad-lab (pyproject.toml)
+msgpack==1.0.4            # via -r requirements.txt, mmtf-python, mp-api, nomad-lab (pyproject.toml)
+mypy==1.0.1               # via nexusutils (dependencies/parsers/nexus/pyproject.toml), nomad-lab (pyproject.toml)
 mypy-extensions==0.4.3    # via mypy
 names==0.3.0              # via nomad-lab (pyproject.toml)
 natsort==8.2.0            # via -r requirements.txt, hyperspy
@@ -173,7 +173,7 @@ nptyping==1.4.4           # via -r requirements.txt, nomad-lab (pyproject.toml)
 numba==0.56.4             # via -r requirements.txt, hyperspy, sparse
 numcodecs==0.10.2         # via -r requirements.txt, zarr
 numexpr==2.8.4            # via -r requirements.txt, hyperspy
-numpy==1.21.6             # via -r requirements.txt, ase, biopython, cftime, dask, griddataformats, gsd, h5grove, h5py, hyperspy, imageio, matid (dependencies/matid/pyproject.toml), matplotlib, mdanalysis, mdtraj, mrcfile, netcdf4, nexusutils (dependencies/parsers/nexus/pyproject.toml), nomad-dos-fingerprints (dependencies/nomad-dos-fingerprints/pyproject.toml), nptyping, numba, numcodecs, numexpr, pandas, phonopy, pymatgen, pywavelets, scikit-image, scikit-learn, scipy, sparse, spglib, tifffile, xarray, xrdtools, zarr
+numpy==1.21.6             # via -r requirements.txt, ase, biopython, cftime, dask, griddataformats, gsd, h5grove, h5py, hyperspy, imageio, matid (dependencies/matid/pyproject.toml), matplotlib, mdanalysis, mdtraj, mrcfile, netcdf4, nexusutils (dependencies/parsers/nexus/pyproject.toml), nomad-dos-fingerprints (dependencies/nomad-dos-fingerprints/pyproject.toml), nptyping, numba, numcodecs, numexpr, pandas, phonopy, pymatgen, pyscf, pywavelets, scikit-image, scikit-learn, scipy, sparse, spglib, tifffile, xarray, xrdtools, zarr
 oauthenticator==14.2.0    # via -r requirements.txt, nomad-lab (pyproject.toml)
 oauthlib==3.2.2           # via -r requirements.txt, jupyterhub
 openpyxl==3.0.9           # via -r requirements.txt, nomad-lab (pyproject.toml)
@@ -208,20 +208,22 @@ ptyprocess==0.7.0         # via -r requirements.txt, pexpect, terminado
 py==1.11.0                # via pytest
 pyasn1==0.4.8             # via -r requirements.txt, pyasn1-modules, python-jose, rfc3161ng, rsa
 pyasn1-modules==0.2.8     # via -r requirements.txt, rfc3161ng
+pybtex==0.24.0            # via -r requirements.txt, emmet-core, pymatgen
 pycodestyle==2.8.0        # via nexusutils (dependencies/parsers/nexus/pyproject.toml), nomad-lab (pyproject.toml)
 pycparser==2.21           # via -r requirements.txt, cffi
-pydantic==1.9.1           # via -r requirements.txt, fastapi, nomad-lab (pyproject.toml), optimade
+pydantic==1.10.5          # via -r requirements.txt, emmet-core, fastapi, nomad-lab (pyproject.toml), optimade
 pygments==2.14.0          # via -r requirements.txt, ipython, mkdocs-material, nbconvert, readme-renderer, sphinx
 pyjwt[crypto]==1.7.1      # via -r requirements.txt, nomad-lab (pyproject.toml)
 pylint==2.13.9            # via nexusutils (dependencies/parsers/nexus/pyproject.toml), nomad-lab (pyproject.toml), pylint-mongoengine, pylint-plugin-utils
 pylint-mongoengine==0.4.0  # via nomad-lab (pyproject.toml)
 pylint-plugin-utils==0.7  # via nomad-lab (pyproject.toml), pylint-mongoengine
-pymatgen==2022.0.17       # via -r requirements.txt, asr, nomad-lab (pyproject.toml)
+pymatgen==2023.2.28       # via -r requirements.txt, asr, emmet-core, mp-api, nomad-lab (pyproject.toml)
 pymdown-extensions==9.7   # via mkdocs-material
 pymongo==3.12.1           # via -r requirements.txt, mongoengine, nomad-lab (pyproject.toml), optimade
 pyopenssl==23.0.0         # via -r requirements.txt, certipy
 pyparsing==3.0.9          # via -r requirements.txt, matplotlib, mdtraj, rdflib
 pyrsistent==0.19.3        # via -r requirements.txt, jsonschema
+pyscf==2.0.1 ; sys_platform == "darwin"  # via -r requirements.txt, electronicparsers (dependencies/parsers/electronic/pyproject.toml)
 pytest==3.10.0            # via nexusutils (dependencies/parsers/nexus/pyproject.toml), nomad-lab (pyproject.toml), pytest-cov, pytest-timeout
 pytest-cov==2.7.1         # via nexusutils (dependencies/parsers/nexus/pyproject.toml), nomad-lab (pyproject.toml)
 pytest-runner==6.0.0      # via -r requirements.txt, h5py-wrapper
@@ -237,14 +239,14 @@ python-magic==0.4.24      # via -r requirements.txt, nomad-lab (pyproject.toml)
 python-multipart==0.0.5   # via -r requirements.txt, nomad-lab (pyproject.toml)
 pytz==2021.1              # via -r requirements.txt, babel, celery, nexusutils (dependencies/parsers/nexus/pyproject.toml), nomad-lab (pyproject.toml), pandas
 pywavelets==1.3.0         # via -r requirements.txt, scikit-image
-pyyaml==6.0               # via -r requirements.txt, dask, hdfdict, hyperspy, mkdocs, mkdocs-macros-plugin, nexusutils (dependencies/parsers/nexus/pyproject.toml), nomad-lab (pyproject.toml), phonopy, pyyaml-env-tag, uvicorn
+pyyaml==6.0               # via -r requirements.txt, dask, hdfdict, hyperspy, mkdocs, mkdocs-macros-plugin, nexusutils (dependencies/parsers/nexus/pyproject.toml), nomad-lab (pyproject.toml), phonopy, pybtex, pyyaml-env-tag, uvicorn
 pyyaml-env-tag==0.1       # via mkdocs
 pyzmq==25.0.0             # via -r requirements.txt, ipykernel, ipyparallel, jupyter-client, jupyter-server
 rdflib==5.0.0             # via -r requirements.txt, nomad-lab (pyproject.toml)
 readme-renderer==37.3     # via twine
 recommonmark==0.7.1       # via -r requirements.txt, nomad-lab (pyproject.toml)
 redis==4.4.2              # via -r requirements.txt, celery
-requests==2.27.1          # via -r requirements.txt, docker, hyperspy, jupyterhub, nomad-lab (pyproject.toml), optimade, pymatgen, python-gitlab, python-keycloak, requests-toolbelt, rfc3161ng, sphinx, twine
+requests==2.28.2          # via -r requirements.txt, docker, hyperspy, jupyterhub, mp-api, nomad-lab (pyproject.toml), optimade, pymatgen, python-gitlab, python-keycloak, requests-toolbelt, rfc3161ng, sphinx, twine
 requests-toolbelt==0.10.1  # via python-gitlab, twine
 rfc3161ng==2.1.3          # via -r requirements.txt, nomad-lab (pyproject.toml)
 rfc3339-validator==0.1.4  # via -r requirements.txt, jsonschema
@@ -257,17 +259,16 @@ ruamel-yaml-clib==0.2.7   # via -r requirements.txt, ruamel-yaml
 runstats==2.0.0           # via -r requirements.txt, nomad-lab (pyproject.toml)
 scikit-image==0.19.3      # via -r requirements.txt, hyperspy
 scikit-learn==1.0.2       # via -r requirements.txt, matid (dependencies/matid/pyproject.toml)
-scipy==1.7.1              # via -r requirements.txt, ase, atomisticparsers (dependencies/parsers/atomistic/pyproject.toml), griddataformats, hyperspy, matid (dependencies/matid/pyproject.toml), mdanalysis, mdtraj, nomad-lab (pyproject.toml), pymatgen, scikit-image, scikit-learn, sparse
-secretstorage==3.3.3      # via keyring
+scipy==1.7.1              # via -r requirements.txt, ase, atomisticparsers (dependencies/parsers/atomistic/pyproject.toml), griddataformats, hyperspy, matid (dependencies/matid/pyproject.toml), mdanalysis, mdtraj, nomad-lab (pyproject.toml), pymatgen, pyscf, scikit-image, scikit-learn, sparse
 send2trash==1.8.0         # via -r requirements.txt, jupyter-server
 sentinels==1.0.0          # via -r requirements.txt, mongomock
-six==1.16.0               # via -r requirements.txt, asttokens, astunparse, basicauth, bcrypt, bleach, ecdsa, elasticsearch-dsl, griddataformats, html5lib, isodate, pytest, python-dateutil, python-multipart, rdflib, rfc3339-validator, validators
+six==1.16.0               # via -r requirements.txt, asttokens, astunparse, basicauth, bcrypt, bleach, ecdsa, elasticsearch-dsl, griddataformats, html5lib, isodate, latexcodec, pybtex, pytest, python-dateutil, python-multipart, rdflib, rfc3339-validator, validators
 smmap==5.0.0              # via -r requirements.txt, gitdb
 sniffio==1.3.0            # via -r requirements.txt, anyio, httpcore, httpx
 snowballstemmer==2.2.0    # via -r requirements.txt, sphinx
 soupsieve==2.3.2.post1    # via -r requirements.txt, beautifulsoup4
 sparse==0.13.0            # via -r requirements.txt, hyperspy
-spglib==2.0.2             # via -r requirements.txt, asr, matid (dependencies/matid/pyproject.toml), phonopy, pymatgen
+spglib==2.0.2             # via -r requirements.txt, asr, emmet-core, matid (dependencies/matid/pyproject.toml), phonopy, pymatgen
 sphinx==5.3.0             # via -r requirements.txt, recommonmark
 sphinxcontrib-applehelp==1.0.2  # via -r requirements.txt, sphinx
 sphinxcontrib-devhelp==1.0.2  # via -r requirements.txt, sphinx
@@ -276,7 +277,7 @@ sphinxcontrib-jsmath==1.0.1  # via -r requirements.txt, sphinx
 sphinxcontrib-qthelp==1.0.3  # via -r requirements.txt, sphinx
 sphinxcontrib-serializinghtml==1.1.5  # via -r requirements.txt, sphinx
 sqlalchemy==1.4.46        # via -r requirements.txt, alembic, jupyterhub
-starlette==0.14.2         # via -r requirements.txt, fastapi
+starlette==0.25.0         # via -r requirements.txt, fastapi
 structlog==22.3.0         # via -r requirements.txt, nexusutils (dependencies/parsers/nexus/pyproject.toml), nomad-lab (pyproject.toml)
 sympy==1.10.1             # via -r requirements.txt, hyperspy, pymatgen
 tabulate==0.8.9           # via -r requirements.txt, nomad-lab (pyproject.toml), pymatgen
@@ -286,18 +287,18 @@ terminado==0.17.1         # via -r requirements.txt, jupyter-server
 threadpoolctl==3.1.0      # via -r requirements.txt, mdanalysis, scikit-learn
 tifffile==2021.11.2       # via -r requirements.txt, h5grove, hyperspy, scikit-image
 tinycss2==1.2.1           # via -r requirements.txt, nbconvert
-tomli==2.0.1              # via build, pep517, pylint
+tomli==2.0.1              # via build, mypy, pep517, pylint
 toolz==0.12.0             # via -r requirements.txt, dask, hyperspy, partd
 toposort==1.9             # via -r requirements.txt, nomad-lab (pyproject.toml)
 tornado==6.2              # via -r requirements.txt, ipykernel, ipyparallel, jupyter-client, jupyter-server, jupyterhub, terminado
-tqdm==4.64.1              # via -r requirements.txt, hyperspy, ipyparallel, mdanalysis, twine
+tqdm==4.64.1              # via -r requirements.txt, hyperspy, ipyparallel, mdanalysis, pymatgen, twine
 traitlets==5.8.1          # via -r requirements.txt, ipykernel, ipyparallel, ipython, jupyter-client, jupyter-core, jupyter-server, jupyter-telemetry, jupyterhub, matplotlib-inline, nbclient, nbconvert, nbformat
 traits==6.4.1             # via -r requirements.txt, hyperspy
 twine==3.4.2              # via nomad-lab (pyproject.toml)
-typed-ast==1.4.2          # via astroid, mypy, nomad-lab (pyproject.toml)
+typed-ast==1.4.2          # via nomad-lab (pyproject.toml)
 types-pytz==2022.7.0.0    # via nexusutils (dependencies/parsers/nexus/pyproject.toml)
 types-pyyaml==6.0.12.1    # via nexusutils (dependencies/parsers/nexus/pyproject.toml)
-typing-extensions==4.4.0  # via -r requirements.txt, anyio, argon2-cffi, arrow, asgiref, astroid, async-timeout, gitpython, importlib-metadata, kiwisolver, mypy, numcodecs, optimade, platformdirs, pydantic, pylint, pymatgen, redis, structlog, uvicorn, xarray
+typing-extensions==4.4.0  # via -r requirements.txt, astroid, emmet-core, gitpython, mp-api, mypy, numcodecs, pydantic, pylint, starlette
 typish==1.9.3             # via -r requirements.txt, nptyping
 uncertainties==3.1.7      # via -r requirements.txt, pymatgen
 unidecode==1.3.2          # via -r requirements.txt, nomad-lab (pyproject.toml)
@@ -321,7 +322,7 @@ xarray==0.20.2            # via -r requirements.txt, nexusutils (dependencies/pa
 xrdtools==0.1.1           # via -r requirements.txt, nomad-lab (pyproject.toml)
 zarr==2.12.0              # via -r requirements.txt, hyperspy
 zipfile37==0.1.3          # via -r requirements.txt, nomad-lab (pyproject.toml)
-zipp==3.11.0              # via -r requirements.txt, importlib-metadata, importlib-resources, pep517
+zipp==3.11.0              # via -r requirements.txt, importlib-metadata
 zipstream-new==1.1.5      # via -r requirements.txt, nomad-lab (pyproject.toml)
 
 # The following packages are considered to be unsafe in a requirements file:
diff --git a/requirements.txt b/requirements.txt
index 7ee3b1401f1427d06d60570d4f65785a473b882b..2f8ad131769922cf6b03c893e81dc921d1d74ed5 100644
--- a/requirements.txt
+++ b/requirements.txt
@@ -1,5 +1,5 @@
 #
-# This file is autogenerated by pip-compile with python 3.7
+# This file is autogenerated by pip-compile with python 3.9
 # To update, run:
 #
 #    pip-compile --annotation-style=line --extra=infrastructure --extra=parsing --output-file=requirements.txt dependencies/matid/pyproject.toml dependencies/nomad-dos-fingerprints/pyproject.toml dependencies/parsers/atomistic/pyproject.toml dependencies/parsers/database/pyproject.toml dependencies/parsers/eelsdb/pyproject.toml dependencies/parsers/electronic/pyproject.toml dependencies/parsers/nexus/pyproject.toml dependencies/parsers/workflow/pyproject.toml pyproject.toml
@@ -9,7 +9,7 @@ alabaster==0.7.12         # via sphinx
 alembic==1.9.1            # via jupyterhub
 amqp==2.6.1               # via kombu
 aniso8601==7.0.0          # via nomad-lab (pyproject.toml)
-anyio==3.6.2              # via httpcore, jupyter-server, watchfiles
+anyio==3.6.2              # via httpcore, jupyter-server, starlette, watchfiles
 appnope==0.1.3            # via ipykernel, ipython
 argon2-cffi==21.3.0       # via jupyter-server
 argon2-cffi-bindings==21.2.0  # via argon2-cffi
@@ -33,7 +33,6 @@ biopython==1.80           # via mdanalysis
 bitarray==2.3.5           # via nomad-dos-fingerprints (dependencies/nomad-dos-fingerprints/pyproject.toml), nomad-lab (pyproject.toml)
 bleach==5.0.1             # via nbconvert
 bs4==0.0.1                # via nomad-lab (pyproject.toml)
-cached-property==1.5.2    # via fqdn, h5py
 cachetools==4.2.4         # via nomad-lab (pyproject.toml)
 celery[redis]==4.4.7      # via nomad-lab (pyproject.toml)
 certifi==2022.12.7        # via elasticsearch, httpcore, httpx, requests
@@ -60,10 +59,11 @@ ecdsa==0.18.0             # via python-jose
 elasticsearch==7.17.1     # via elasticsearch-dsl, nomad-lab (pyproject.toml)
 elasticsearch-dsl==7.4.0  # via nomad-lab (pyproject.toml)
 email-validator==1.3.0    # via optimade
+emmet-core==0.48.4        # via mp-api
 entrypoints==0.4          # via ipyparallel, jupyter-client, jupyterhub, numcodecs
 escapism==1.0.1           # via dockerspawner
 et-xmlfile==1.1.0         # via openpyxl
-fastapi==0.65.3           # via nomad-lab (pyproject.toml), optimade
+fastapi==0.92.0           # via nomad-lab (pyproject.toml), optimade
 fasteners==0.18           # via zarr
 fastjsonschema==2.16.2    # via nbformat
 filelock==3.3.1           # via nomad-lab (pyproject.toml)
@@ -92,8 +92,7 @@ hyperspy==1.7.3           # via nexusutils (dependencies/parsers/nexus/pyproject
 idna==3.4                 # via anyio, email-validator, jsonschema, requests, rfc3986
 imageio==2.24.0           # via hyperspy, scikit-image
 imagesize==1.4.1          # via sphinx
-importlib-metadata==4.13.0  # via alembic, click, flask, hyperspy, jsonschema, kombu, mako, nbconvert, nbformat, nomad-lab (pyproject.toml), numba, pint, prettytable, redis, sphinx, sqlalchemy, structlog, xarray
-importlib-resources==5.10.2  # via alembic
+importlib-metadata==4.13.0  # via flask, hyperspy, nbconvert, nomad-lab (pyproject.toml), sphinx
 inflection==0.5.1         # via nomad-lab (pyproject.toml)
 ipykernel==6.16.2         # via ipyparallel
 ipyparallel==8.4.1        # via hyperspy
@@ -117,6 +116,7 @@ jupyterlab-pygments==0.2.2  # via nbconvert
 kiwisolver==1.4.4         # via matplotlib
 kombu==4.6.11             # via celery
 lark-parser==0.12.0       # via optimade
+latexcodec==2.0.1         # via pybtex
 llvmlite==0.39.1          # via numba
 locket==1.0.0             # via partd
 lxml==4.7.1               # via atomisticparsers (dependencies/parsers/atomistic/pyproject.toml), electronicparsers (dependencies/parsers/electronic/pyproject.toml), nomad-lab (pyproject.toml), workflowparsers (dependencies/parsers/workflow/pyproject.toml), xrdtools
@@ -132,10 +132,11 @@ mistune==2.0.4            # via m2r, nbconvert
 mmtf-python==1.1.3        # via mdanalysis
 mongoengine==0.25.0       # via nomad-lab (pyproject.toml)
 mongomock==4.1.2          # via optimade
-monty==2022.9.9           # via pymatgen
+monty==2022.9.9           # via emmet-core, mp-api, pymatgen
+mp-api==0.30.10           # via pymatgen
 mpmath==1.2.1             # via sympy
 mrcfile==1.4.3            # via griddataformats
-msgpack==1.0.4            # via mmtf-python, nomad-lab (pyproject.toml)
+msgpack==1.0.4            # via mmtf-python, mp-api, nomad-lab (pyproject.toml)
 natsort==8.2.0            # via hyperspy
 nbclient==0.7.2           # via nbconvert
 nbconvert==7.2.7          # via jupyter-server
@@ -176,11 +177,12 @@ psutil==5.9.4             # via ipykernel, ipyparallel
 ptyprocess==0.7.0         # via pexpect, terminado
 pyasn1==0.4.8             # via pyasn1-modules, python-jose, rfc3161ng, rsa
 pyasn1-modules==0.2.8     # via rfc3161ng
+pybtex==0.24.0            # via emmet-core, pymatgen
 pycparser==2.21           # via cffi
-pydantic==1.9.1           # via fastapi, nomad-lab (pyproject.toml), optimade
+pydantic==1.10.5          # via emmet-core, fastapi, nomad-lab (pyproject.toml), optimade
 pygments==2.14.0          # via ipython, nbconvert, sphinx
 pyjwt[crypto]==1.7.1      # via nomad-lab (pyproject.toml)
-pymatgen==2022.0.17       # via asr, nomad-lab (pyproject.toml)
+pymatgen==2023.2.28       # via asr, emmet-core, mp-api, nomad-lab (pyproject.toml)
 pymongo==3.12.1           # via mongoengine, nomad-lab (pyproject.toml), optimade
 pyopenssl==23.0.0         # via certipy
 pyparsing==3.0.9          # via matplotlib, mdtraj, rdflib
@@ -197,12 +199,12 @@ python-magic==0.4.24      # via nomad-lab (pyproject.toml)
 python-multipart==0.0.5   # via nomad-lab (pyproject.toml)
 pytz==2021.1              # via babel, celery, nexusutils (dependencies/parsers/nexus/pyproject.toml), nomad-lab (pyproject.toml), pandas
 pywavelets==1.3.0         # via scikit-image
-pyyaml==6.0               # via dask, hdfdict, hyperspy, nexusutils (dependencies/parsers/nexus/pyproject.toml), nomad-lab (pyproject.toml), phonopy, uvicorn
+pyyaml==6.0               # via dask, hdfdict, hyperspy, nexusutils (dependencies/parsers/nexus/pyproject.toml), nomad-lab (pyproject.toml), phonopy, pybtex, uvicorn
 pyzmq==25.0.0             # via ipykernel, ipyparallel, jupyter-client, jupyter-server
 rdflib==5.0.0             # via nomad-lab (pyproject.toml)
 recommonmark==0.7.1       # via nomad-lab (pyproject.toml)
 redis==4.4.2              # via celery
-requests==2.27.1          # via docker, hyperspy, jupyterhub, nomad-lab (pyproject.toml), optimade, pymatgen, python-keycloak, rfc3161ng, sphinx
+requests==2.28.2          # via docker, hyperspy, jupyterhub, mp-api, nomad-lab (pyproject.toml), optimade, pymatgen, python-keycloak, rfc3161ng, sphinx
 rfc3161ng==2.1.3          # via nomad-lab (pyproject.toml)
 rfc3339-validator==0.1.4  # via jsonschema
 rfc3986[idna2008]==1.5.0  # via httpx
@@ -216,13 +218,13 @@ scikit-learn==1.0.2       # via matid (dependencies/matid/pyproject.toml)
 scipy==1.7.1              # via ase, atomisticparsers (dependencies/parsers/atomistic/pyproject.toml), griddataformats, hyperspy, matid (dependencies/matid/pyproject.toml), mdanalysis, mdtraj, nomad-lab (pyproject.toml), pymatgen, pyscf, scikit-image, scikit-learn, sparse
 send2trash==1.8.0         # via jupyter-server
 sentinels==1.0.0          # via mongomock
-six==1.16.0               # via astunparse, basicauth, bcrypt, bleach, ecdsa, elasticsearch-dsl, griddataformats, html5lib, isodate, python-dateutil, python-multipart, rdflib, rfc3339-validator, validators
+six==1.16.0               # via astunparse, basicauth, bcrypt, bleach, ecdsa, elasticsearch-dsl, griddataformats, html5lib, isodate, latexcodec, pybtex, python-dateutil, python-multipart, rdflib, rfc3339-validator, validators
 smmap==5.0.0              # via gitdb
 sniffio==1.3.0            # via anyio, httpcore, httpx
 snowballstemmer==2.2.0    # via sphinx
 soupsieve==2.3.2.post1    # via beautifulsoup4
 sparse==0.13.0            # via hyperspy
-spglib==2.0.2             # via asr, matid (dependencies/matid/pyproject.toml), phonopy, pymatgen
+spglib==2.0.2             # via asr, emmet-core, matid (dependencies/matid/pyproject.toml), phonopy, pymatgen
 sphinx==5.3.0             # via recommonmark
 sphinxcontrib-applehelp==1.0.2  # via sphinx
 sphinxcontrib-devhelp==1.0.2  # via sphinx
@@ -231,7 +233,7 @@ sphinxcontrib-jsmath==1.0.1  # via sphinx
 sphinxcontrib-qthelp==1.0.3  # via sphinx
 sphinxcontrib-serializinghtml==1.1.5  # via sphinx
 sqlalchemy==1.4.46        # via alembic, jupyterhub
-starlette==0.14.2         # via fastapi
+starlette==0.25.0         # via fastapi
 structlog==22.3.0         # via nomad-lab (pyproject.toml)
 sympy==1.10.1             # via hyperspy, pymatgen
 tabulate==0.8.9           # via nomad-lab (pyproject.toml), pymatgen
@@ -243,10 +245,10 @@ tinycss2==1.2.1           # via nbconvert
 toolz==0.12.0             # via dask, hyperspy, partd
 toposort==1.9             # via nomad-lab (pyproject.toml)
 tornado==6.2              # via ipykernel, ipyparallel, jupyter-client, jupyter-server, jupyterhub, terminado
-tqdm==4.64.1              # via hyperspy, ipyparallel, mdanalysis
+tqdm==4.64.1              # via hyperspy, ipyparallel, mdanalysis, pymatgen
 traitlets==5.8.1          # via ipykernel, ipyparallel, ipython, jupyter-client, jupyter-core, jupyter-server, jupyter-telemetry, jupyterhub, matplotlib-inline, nbclient, nbconvert, nbformat
 traits==6.4.1             # via hyperspy
-typing-extensions==4.4.0  # via anyio, argon2-cffi, arrow, asgiref, async-timeout, gitpython, importlib-metadata, kiwisolver, numcodecs, optimade, pydantic, pymatgen, redis, structlog, uvicorn, xarray
+typing-extensions==4.4.0  # via emmet-core, gitpython, mp-api, numcodecs, pydantic, starlette
 typish==1.9.3             # via nptyping
 uncertainties==3.1.7      # via pymatgen
 unidecode==1.3.2          # via nomad-lab (pyproject.toml)
@@ -269,7 +271,7 @@ xarray==0.20.2            # via nexusutils (dependencies/parsers/nexus/pyproject
 xrdtools==0.1.1           # via nomad-lab (pyproject.toml)
 zarr==2.12.0              # via hyperspy
 zipfile37==0.1.3          # via nomad-lab (pyproject.toml)
-zipp==3.11.0              # via importlib-metadata, importlib-resources
+zipp==3.11.0              # via importlib-metadata
 zipstream-new==1.1.5      # via nomad-lab (pyproject.toml)
 
 # The following packages are considered to be unsafe in a requirements file:
diff --git a/tests/app/v1/routers/test_uploads.py b/tests/app/v1/routers/test_uploads.py
index c847c1a47866965d2a01994dd5cf1399211a328c..4e2c04c058f0261a9fb4a25f7848bdf796b867c4 100644
--- a/tests/app/v1/routers/test_uploads.py
+++ b/tests/app/v1/routers/test_uploads.py
@@ -55,9 +55,12 @@ to assert for certain aspects in the responses.
 
 
 def perform_get(client, base_url, user_auth=None, accept='application/json', **query_args):
-    headers = {'Accept': accept}
+    headers = {}
+    if accept:
+        headers['Accept'] = accept
     if user_auth:
         headers.update(user_auth)
+
     response = client.get(build_url(base_url, query_args), headers=headers)
     return response