diff --git a/worker_generic_training_dataset/__init__.py b/worker_generic_training_dataset/__init__.py
index bfa5077db85fbaa27b0e725dea2a9fbe4b18b55b..07534c6aff8a41a8b21fe29c619b91807d010dbe 100644
--- a/worker_generic_training_dataset/__init__.py
+++ b/worker_generic_training_dataset/__init__.py
@@ -159,10 +159,13 @@ class Extractor(DatasetWorker):
         polygon = element.polygon
 
         if isinstance(element, Element):
+            # SQL result
             image = element.image
             wk_version = get_object_id(element.worker_version)
             wk_run = get_object_id(element.worker_run)
         else:
+            # API result
+            polygon = json.dumps(polygon)
             image = element.zone.image
             wk_version = (
                 element.worker_version
diff --git a/worker_generic_training_dataset/utils.py b/worker_generic_training_dataset/utils.py
index 9ca2d47ca51ef7099849d86b0360b796abc43ea4..841a765ebfe8228aaac0be807eeddd82ae8bd0f1 100644
--- a/worker_generic_training_dataset/utils.py
+++ b/worker_generic_training_dataset/utils.py
@@ -9,11 +9,8 @@ from arkindex_worker.image import BoundingBox, polygon_bounding_box
 logger: Logger = logging.getLogger(__name__)
 
 
-def build_image_url(image, polygon: str | list[list[int]]) -> str:
-    if isinstance(polygon, str):
-        polygon = json.loads(polygon)
-
-    bbox: BoundingBox = polygon_bounding_box(polygon)
+def build_image_url(image, polygon: str) -> str:
+    bbox: BoundingBox = polygon_bounding_box(json.loads(polygon))
     x: int
     y: int
     width: int