diff --git a/src/Controller/ApiTraceController.php b/src/Controller/ApiTraceController.php
index b811ecec51071300a310c3d97ab5d13583d53bba..67c63ae8bc80746aadc8e9a5536dc13418c1101a 100644
--- a/src/Controller/ApiTraceController.php
+++ b/src/Controller/ApiTraceController.php
@@ -84,6 +84,70 @@ class ApiTraceController extends ApiBaseController
         return $this->createJsonResponse(200);
     }
 
+    /**
+     *
+     * @Route("/create-batch", name="api_trace_create_batch", methods={"POST"})
+     *
+     * @OA\Response(response=200, description="success", @OA\JsonContent(type="string"))
+     * @OA\Response(response=401, description="error", @OA\JsonContent(type="string"))
+     * @OA\Response(response=403, description="error", @OA\JsonContent(type="string"))
+     * @OA\Response(response=500, description="error", @OA\JsonContent(type="string"))
+     * @OA\RequestBody(
+     *     required=true,
+     *     @OA\JsonContent(
+     *       @OA\Property(property="trace_list", type="array", description="Tableau de traces",
+     *           example={{"origin": "Prisms", "action": "Partie gagnée", "additional_info": {"info1": "example"}, "timestamp": "2012-08-18 11:14:15.889342"}, {"origin": "Prisms", "action": "Match nul", "additional_info": {"info2": "other"}, "timestamp": "2012-07-08 11:14:15.889342"}},
+     *           @OA\Items(
+     *               type="object"
+     *           )
+     *       )
+     *     )
+     * )
+     * @OA\Tag(name="Traces")
+     * @Security(name="OAuth2")
+     */
+    public function createBatchTrace(Request $request): Response
+    {
+        $data = json_decode($request->getContent(), true);
+        if (!$data) {
+            return $this->createJsonResponse(401, ['error' => sprintf("Json non valide")]);
+        }
+        if ($missingFields = $this->getMissingFields($data, ['trace_list'])) {
+            return $this->createJsonResponse(401, ['error' => sprintf("Veuillez fournir une valeur pour: %s", implode(', ', $missingFields))]);
+        }
+
+        $traceList = $data['trace_list'];
+        foreach ($traceList as $traceData) {
+
+            if ($missingFields = $this->getMissingFields($traceData, ['origin', 'action'])) {
+                return $this->createJsonResponse(401, ['error' => sprintf("Veuillez fournir une valeur pour: %s", implode(', ', $missingFields))]);
+            }
+            if ($traceData['timestamp'] ?? null) {
+                $date = new \DateTime($traceData['timestamp']);
+                if ($date === false) {
+                    return $this->createJsonResponse(401, ['error' => sprintf("Veuillez fournir une date au format aaaa-mm-jj hh:mm:ss.dddddd pour le paramètre «timestamp»")]);
+                }
+            }
+
+            $trace = new Trace();
+            $trace->setCreatedBy($this->getUser());
+            $trace->setAction($traceData['action']);
+            $trace->setOrigin($traceData['origin']);
+            if ($traceData['additional_info'] ?? null) {
+                $trace->setAdditionalInfo($traceData['additional_info']);
+            }
+            if ($date ?? null) {
+                $trace->setTimestamp($date);
+            }
+            $this->doctrine->getManager()->persist($trace);
+            $this->doctrine->getManager()->flush();
+
+            $this->success[] = sprintf("Trace id %s créée.", $trace->getId());
+        }
+
+        return $this->createJsonResponse(200);
+    }
+
     /**
      * Recherche de traces par date ou user ou action ou origin
      *