diff --git a/server/api/routes/project/items.py b/server/api/routes/project/items.py
index 1551894afa7001aca8bab66ac08bd0a79b2aa60d..4e11574e0ae370b2be9d74158d073a8c6a0feef4 100644
--- a/server/api/routes/project/items.py
+++ b/server/api/routes/project/items.py
@@ -1,5 +1,5 @@
 from fastapi import APIRouter, Depends, HTTPException, status, Query
-from nacsos_data.db.schemas import Project, ItemTypeLiteral, GenericItem, AcademicItem, ItemType
+from nacsos_data.db.schemas import Project, ItemTypeLiteral, GenericItem, AcademicItem, ItemType, Item
 
 from nacsos_data.models.items import AnyItemModel, GenericItemModel, AcademicItemModel, AnyItemModelList
 from nacsos_data.models.items.twitter import TwitterItemModel
@@ -13,6 +13,7 @@ from nacsos_data.db.crud.items.twitter import \
     read_all_twitter_items_for_project_paged, \
     read_twitter_item_by_item_id, \
     import_tweet
+from sqlalchemy import select
 
 from server.api.errors import ItemNotFoundError
 from server.data import db_engine
@@ -86,6 +87,16 @@ async def get_detail_for_item(item_id: str,
     raise ItemNotFoundError(f'No item found with type {item_type} with the id {item_id}')
 
 
+@router.get('/text/{item_id}', response_model=str)
+async def get_text_for_item(item_id: str, permission=Depends(UserPermissionChecker('dataset_read'))) -> str:
+    async with db_engine.session() as session:
+        stmt = select(Item.text).where(Item.item_id == item_id)
+        text: str | None = await session.scalar(stmt)
+        if text is None:
+            raise ItemNotFoundError(f'No text available for item with ID: {item_id}')
+        return text
+
+
 @router.get('/count', response_model=int)
 async def count_project_items(permission=Depends(UserPermissionChecker('dataset_read'))) -> int:
     tweets = await read_item_count_for_project(project_id=permission.permissions.project_id, engine=db_engine)