diff --git a/poetry.lock b/poetry.lock
index e2d4668c4bcbdbd658217faba3d3f307cae6cf55..a78bb7b4047c318e50de5f52ac65a08ed123a08b 100644
--- a/poetry.lock
+++ b/poetry.lock
@@ -1,4 +1,4 @@
-# This file is automatically @generated by Poetry 1.8.3 and should not be changed by hand.
+# This file is automatically @generated by Poetry 1.5.1 and should not be changed by hand.
 
 [[package]]
 name = "asgiref"
@@ -613,8 +613,14 @@ files = [
 [package.dependencies]
 google-auth = ">=2.14.1,<3.0.dev0"
 googleapis-common-protos = ">=1.56.2,<2.0.dev0"
-grpcio = {version = ">=1.49.1,<2.0dev", optional = true, markers = "python_version >= \"3.11\" and extra == \"grpc\""}
-grpcio-status = {version = ">=1.49.1,<2.0.dev0", optional = true, markers = "python_version >= \"3.11\" and extra == \"grpc\""}
+grpcio = [
+    {version = ">=1.33.2,<2.0dev", optional = true, markers = "extra == \"grpc\""},
+    {version = ">=1.49.1,<2.0dev", optional = true, markers = "python_version >= \"3.11\" and extra == \"grpc\""},
+]
+grpcio-status = [
+    {version = ">=1.33.2,<2.0.dev0", optional = true, markers = "extra == \"grpc\""},
+    {version = ">=1.49.1,<2.0.dev0", optional = true, markers = "python_version >= \"3.11\" and extra == \"grpc\""},
+]
 proto-plus = ">=1.22.3,<2.0.0dev"
 protobuf = ">=3.19.5,<3.20.0 || >3.20.0,<3.20.1 || >3.20.1,<4.21.0 || >4.21.0,<4.21.1 || >4.21.1,<4.21.2 || >4.21.2,<4.21.3 || >4.21.3,<4.21.4 || >4.21.4,<4.21.5 || >4.21.5,<6.0.0.dev0"
 requests = ">=2.18.0,<3.0.0.dev0"
diff --git a/pyproject.toml b/pyproject.toml
index 712e3b5657453e4426994a4a72caf09d5e7297af..dbad362dd42ababec6191005727068174ec49e11 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -132,6 +132,10 @@ filterwarnings = [
   "ignore::DeprecationWarning:.*google.*"
 ]
 
+[tool.poe.tasks.generate-schema]
+help = "Generate OpenAPI schema using drf-spectacular"
+cmd = "docker compose run --build --rm manage spectacular --file openapi.yaml"
+
 [tool.mypy]
 ignore_missing_imports = true