diff --git a/bbcli/cli.py b/bbcli/cli.py
index 55407058cafd35cf1abd01a6793a2bded3b02971..f2173c6ec0022290121cd7183e1f1a6867e97dfd 100644
--- a/bbcli/cli.py
+++ b/bbcli/cli.py
@@ -9,7 +9,7 @@ import click
 
 from bbcli.commands.courses import list_courses
 from bbcli.commands.announcements import list_announcements, create_announcement, delete_announcement, update_announcement
-from bbcli.commands.contents import create_assignment, create_courselink, create_folder, delete_content, list_contents, create_document, create_file, create_web_link, upload_attachment
+from bbcli.commands.contents import create_assignment, create_courselink, create_folder, delete_content, list_contents, create_document, create_file, create_web_link, update_content, upload_attachment
 from bbcli.services.authorization_service import login
 
 load_dotenv()
@@ -91,6 +91,7 @@ def contents(ctx):
 
 contents.add_command(list_contents)
 contents.add_command(delete_content)
+contents.add_command(update_content)
 
 """
 CONTENTS CREATE COMMANDS ENTRY POINT
diff --git a/bbcli/commands/contents.py b/bbcli/commands/contents.py
index 7e06d54c21e32bf6449bd9891b72edbe6db945f8..8e2d7ac5bfb735718f41a15340c32f668028af41 100644
--- a/bbcli/commands/contents.py
+++ b/bbcli/commands/contents.py
@@ -196,6 +196,18 @@ def delete_content(ctx, course_id: str, content_id: str, delete_grades: bool):
     response = contents_service.delete_content(ctx.obj['SESSION'], course_id, content_id, delete_grades)
     click.echo(response)
 
+@click.command(name='update')
+@click.argument('course_id', required=True, type=str)
+@click.argument('content_id', required=True, type=str)
+@click.pass_context
+def update_content(ctx, course_id: str, content_id: str):
+    """
+    Updates a given content
+    Editable content types: document, files, assignments, externallinks, courselinks
+    """
+    response = contents_service.update_content(ctx.obj['SESSION'], course_id, content_id)
+    click.echo(response)
+
 """
 HELPER FUNCTIONS
 """
diff --git a/bbcli/services/contents_service.py b/bbcli/services/contents_service.py
index 52ad18dada20c8935fb0467d293b06c5c0b959b0..e7f992d5f71c573e87e4df3155d94503aee1efaa 100644
--- a/bbcli/services/contents_service.py
+++ b/bbcli/services/contents_service.py
@@ -8,6 +8,7 @@ from bbcli.utils.URL_builder import URLBuilder
 from bbcli.services.utils.content_builder import ContentBuilder
 from bbcli.entities.content_builder_entitites import DateInterval, FileContent, GradingOptions, StandardOptions, FileOptions, WeblinkOptions
 from bbcli.utils.utils import input_body
+import click
 
 url_builder = URLBuilder()
 content_builder = ContentBuilder()
@@ -182,6 +183,27 @@ def delete_content(session: requests.Session, course_id: str, content_id: str, d
     
     return response.text
 
+def update_content(session: requests.Session, course_id: str, content_id: str):
+    url = url_builder.base_v1().add_courses().add_id(course_id).add_contents().add_id(content_id).create()
+    content = session.get(url)
+    content = json.loads(content.text)
+    if not is_editable_content_type(content['contentHandler']['id']):
+        click.echo('This content type is not editable')
+        raise click.Abort()
+    if 'links' in content:
+        del content['links']
+    if 'contentHandler' in content:
+        del content['contentHandler']
+
+    MARKER = '# Everything below is ignored.\n'
+    editable_data = json.dumps(content, indent=2)
+    print(editable_data)
+    new_data = click.edit(editable_data + '\n\n' + MARKER)
+
+    response = session.patch(url, data=new_data)
+    return response.text
+    
+
 """
 
 HELPER FUNCTIONS
@@ -216,4 +238,12 @@ def generate_create_content_url(course_id: str, content_id: str):
 def handle_attachments(session: requests.Session, course_id: str, content_id: str, attachments: tuple or None):
     if attachments:
         for attachment in attachments:
-            upload_attachment(session, course_id, content_id, attachment)
\ No newline at end of file
+            upload_attachment(session, course_id, content_id, attachment)
+
+
+def is_editable_content_type(content_type: str):
+    valid_content_types = ['resource/x-bb-assignment', 'resource/x-bb-externallink', 'resource/x-bb-courselink', 'resource/x-bb-file', 'resource/x-bb-document']
+    for type in valid_content_types:
+        if content_type == type:
+            return True
+    return False
\ No newline at end of file