diff --git a/app/Uploads/Controllers/ImageGalleryApiController.php b/app/Uploads/Controllers/ImageGalleryApiController.php
index 1614b6445..4fca6a4dd 100644
--- a/app/Uploads/Controllers/ImageGalleryApiController.php
+++ b/app/Uploads/Controllers/ImageGalleryApiController.php
@@ -30,6 +30,7 @@ class ImageGalleryApiController extends ApiController
             ],
             'update' => [
                 'name'  => ['string', 'max:180'],
+                'image' => ['file', ...$this->getImageValidationRules()],
             ]
         ];
     }
@@ -89,7 +90,8 @@ class ImageGalleryApiController extends ApiController
 
     /**
      * Update the details of an existing image in the system.
-     * Only allows updating of the image name at this time.
+     * Since "image" is expected to be a file, this needs to be a 'multipart/form-data' type request if providing a
+     * new image file. Updated image files should be of the same file type as the original image.
      */
     public function update(Request $request, string $id)
     {
@@ -99,6 +101,9 @@ class ImageGalleryApiController extends ApiController
         $this->checkOwnablePermission('image-update', $image);
 
         $this->imageRepo->updateImageDetails($image, $data);
+        if (isset($data['image'])) {
+            $this->imageRepo->updateImageFile($image, $data['image']);
+        }
 
         return response()->json($this->formatForSingleResponse($image));
     }
diff --git a/app/Uploads/ImageRepo.php b/app/Uploads/ImageRepo.php
index e28e7b794..cdd5485ac 100644
--- a/app/Uploads/ImageRepo.php
+++ b/app/Uploads/ImageRepo.php
@@ -175,6 +175,7 @@ class ImageRepo
             throw new ImageUploadException(trans('errors.image_upload_replace_type'));
         }
 
+        $image->refresh();
         $image->updated_by = user()->id;
         $image->save();
         $this->imageService->replaceExistingFromUpload($image->path, $image->type, $file);
diff --git a/tests/Api/ImageGalleryApiTest.php b/tests/Api/ImageGalleryApiTest.php
index 17c90518c..067173a6b 100644
--- a/tests/Api/ImageGalleryApiTest.php
+++ b/tests/Api/ImageGalleryApiTest.php
@@ -295,7 +295,24 @@ class ImageGalleryApiTest extends TestCase
         ]);
     }
 
-    public function test_update_endpoint_requires_image_delete_permission()
+    public function test_update_existing_image_file()
+    {
+        $this->actingAsApiAdmin();
+        $imagePage = $this->entities->page();
+        $data = $this->files->uploadGalleryImageToPage($this, $imagePage);
+        $image = Image::findOrFail($data['response']->id);
+
+        $this->assertFileEquals($this->files->testFilePath('test-image.png'), public_path($data['path']));
+
+        $resp = $this->call('PUT', $this->baseEndpoint . "/{$image->id}", [], [], [
+            'image' => $this->files->uploadedImage('my-cool-image.png', 'compressed.png'),
+        ]);
+
+        $resp->assertStatus(200);
+        $this->assertFileEquals($this->files->testFilePath('compressed.png'), public_path($data['path']));
+    }
+
+    public function test_update_endpoint_requires_image_update_permission()
     {
         $user = $this->users->editor();
         $this->actingAsForApi($user);