diff --git a/backend/src/ceph_service.py b/backend/src/ceph_service.py
index a39481b10dc7258420e049958c4e846ea9c642eb..5be6fe8c9d44e43784e7d2519d787bc03129a5ba 100644
--- a/backend/src/ceph_service.py
+++ b/backend/src/ceph_service.py
@@ -1,3 +1,4 @@
+from models.buckets import Bucket, BucketRWAccess, BucketResponse
 import boto3
 import json
 import os
@@ -21,9 +22,24 @@ def get_s3_client():
     return client
 
 
-def list_buckets() -> json:
+def list_buckets() -> BucketResponse:
     s3 = get_s3_client()
-    buckets = s3.list_buckets()
-    buckets = {key: buckets[key] for key in ["Buckets", "Owner"]}
-    return json.dumps(buckets, default=str)
-
+    response = s3.list_buckets()
+    buckets_info = response["Buckets"]
+    buckets = [None] * len(buckets_info)
+    for i, bucket_info in enumerate(buckets_info):
+        bucket_name = bucket_info["Name"]
+        creation_date = bucket_info["CreationDate"]
+        bucket_acl = s3.get_bucket_acl(Bucket=bucket_name)
+        grant = bucket_acl["Grants"][0]    # TODO: Here we can have multiple grants
+        permission = grant["Permission"]
+        read = permission in ("READ", "FULL_CONTROL")
+        write = permission in ("WRITE", "FULL_CONTROL")
+        rw_access = BucketRWAccess(read=read, write=write)
+        buckets[i] = Bucket(
+            name=bucket_name,
+            creation_date=creation_date,
+            details={},
+            rw_access=rw_access
+        )
+    return BucketResponse(buckets=buckets, total=len(buckets))
diff --git a/backend/src/models/buckets.py b/backend/src/models/buckets.py
new file mode 100644
index 0000000000000000000000000000000000000000..542e0bc9f1fde18b649ab62f05e12a21de802bcb
--- /dev/null
+++ b/backend/src/models/buckets.py
@@ -0,0 +1,20 @@
+from pydantic import BaseModel
+from datetime import datetime
+from typing import List
+
+
+class BucketRWAccess(BaseModel):
+    read: bool
+    write: bool
+
+
+class Bucket(BaseModel):
+    name: str
+    creation_date: datetime
+    details: dict
+    rw_access: BucketRWAccess
+
+
+class BucketResponse(BaseModel):
+    buckets: List[Bucket]
+    total: int
diff --git a/backend/src/routes/buckets.py b/backend/src/routes/buckets.py
index 193a973335777fdd07f06d8654c961177cdcef8a..d3bb3af749324cb7cd308977cd2b84e5a63ec13b 100644
--- a/backend/src/routes/buckets.py
+++ b/backend/src/routes/buckets.py
@@ -1,3 +1,4 @@
+from models.buckets import BucketResponse
 from fastapi import APIRouter
 import ceph_service
 
@@ -5,5 +6,5 @@ router = APIRouter()
 
 
 @router.get("/buckets")
-def list_buckets():
+def list_buckets() -> BucketResponse:
     return ceph_service.list_buckets()