diff --git a/src/Controller/ApiController.php b/src/Controller/ApiController.php
index ce521b8d6a3f0a119994809b6908a82b182d8277..aa9d575cc4c0145d1798c70aaf16bda16132a076 100644
--- a/src/Controller/ApiController.php
+++ b/src/Controller/ApiController.php
@@ -14,6 +14,7 @@ use Symfony\Component\Serializer\Mapping\Factory\ClassMetadataFactory;
 use Symfony\Component\Serializer\Mapping\Loader\AnnotationLoader;
 use App\Entity\Transaction;
 use App\Entity\User;
+use App\Service\CategoryService;
 use Doctrine\Persistence\ManagerRegistry;
 use Symfony\Component\HttpFoundation\Request;
 use Symfony\Component\PropertyInfo\Extractor\ReflectionExtractor;
@@ -24,8 +25,9 @@ use Symfony\Component\Serializer\Normalizer\DateTimeNormalizer;
 class ApiController extends AbstractController
 {
     private Serializer $serializer;
+    private CategoryService $categoryService;
 
-    public function __construct()
+    public function __construct(CategoryService $categoryService)
     {
         $classMetadataFactory = new ClassMetadataFactory(new AnnotationLoader(new AnnotationReader()));
 
@@ -35,8 +37,27 @@ class ApiController extends AbstractController
         $normalizers = [$dateNormalizer, new ObjectNormalizer($classMetadataFactory, null, null, new ReflectionExtractor())];
 
         $this->serializer = new Serializer($normalizers, $encoders);
+
+        $this->categoryService = $categoryService;
+    }
+
+    private function manageCategory(Transaction $transaction)
+    {
+        if ($transaction->getCategory() !== "auto-detect") return;
+        $category = $this->categoryService->getCategory($transaction->getLocation());
+        $transaction->setCategory($category);
+    }
+
+    private function checkTransactionAccess(Transaction $transaction)
+    {
+        /**
+         * @var User
+         */
+        $user = $this->getUser();
+        if (!$user->getTransactions()->contains($transaction)) throw $this->createNotFoundException();
     }
 
+    
     #[Route('/api/transaction', name: 'api_transaction_list', methods: ['GET'])]
     public function list(): Response
     {
@@ -45,10 +66,18 @@ class ApiController extends AbstractController
          */
         $user = $this->getUser();
         $transactions = $user->getTransactions();
-
+        
         return new Response($this->serializer->serialize($transactions, "json"), 200, ["Content-Type" => "application/json"]);
     }
 
+    #[Route("/api/transaction/{id}", name: 'api_transaction_get', methods: ['GET'])]
+    public function get(Transaction $transaction): Response
+    {
+        $this->checkTransactionAccess($transaction);
+
+        return new Response($this->serializer->serialize($transaction, "json", 200, ["Content-Type" => "application/json"]));
+    }
+
     #[Route('/api/transaction', name: 'api_transaction_create', methods: ['POST'])]
     public function create(Request $request, ManagerRegistry $doctrine): Response
     {
@@ -62,6 +91,7 @@ class ApiController extends AbstractController
         } catch (\Exception $error) {
             return new Response($error, 400);
         }
+        $this->manageCategory($transaction);
         $user->addTransaction($transaction);
         $entityManager->persist($transaction);
         $entityManager->flush();
@@ -71,11 +101,7 @@ class ApiController extends AbstractController
     #[Route('/api/transaction/{id}', name: 'api_transaction_delete', methods: ['DELETE'])]
     public function delete(Transaction $transaction, ManagerRegistry $doctrine)
     {
-        /**
-         * @var User
-         */
-        $user = $this->getUser();
-        if (!$user->getTransactions()->contains($transaction)) throw $this->createNotFoundException();
+        $this->checkTransactionAccess($transaction);
         $entityManager = $doctrine->getManager();
 
         $entityManager->remove($transaction);
@@ -87,11 +113,7 @@ class ApiController extends AbstractController
     #[Route('/api/transaction/{id}', name: 'api_transaction_update', methods: ['PATCH'])]
     public function update(Request $request, Transaction $transaction, ManagerRegistry $doctrine)
     {
-        /**
-         * @var User
-         */
-        $user = $this->getUser();
-        if (!$user->getTransactions()->contains($transaction)) throw $this->createNotFoundException();
+        $this->checkTransactionAccess($transaction);
         $entityManager = $doctrine->getManager();
 
         try {
@@ -100,6 +122,8 @@ class ApiController extends AbstractController
             return new Response($error, 400);
         }
 
+        $this->manageCategory($transaction);
+
         $entityManager->flush();
 
         return new Response();