diff --git a/rest/index.php b/rest/index.php
index b5e0fd13a0fdea4bcd6ffe9f31fdb4aba4f4ce17..1cfc9eae17e208699ef6739485cbfdab63c07861 100755
--- a/rest/index.php
+++ b/rest/index.php
@@ -127,6 +127,8 @@ $app->post('/baskets/{id}/groups', \Basket\controllers\BasketController::class .
 $app->put('/baskets/{id}/groups/{groupId}', \Basket\controllers\BasketController::class . ':updateGroup');
 $app->delete('/baskets/{id}/groups/{groupId}', \Basket\controllers\BasketController::class . ':deleteGroup');
 $app->get('/baskets/{id}/groups/data', \Basket\controllers\BasketController::class . ':getDataForGroupById');
+$app->get('/sortedBaskets', \Basket\controllers\BasketController::class . ':getSorted');
+$app->put('/sortedBaskets/{id}', \Basket\controllers\BasketController::class . ':updateSorted');
 
 //status
 $app->get('/administration/status', \Core\Controllers\StatusController::class . ':getList');
diff --git a/src/app/basket/controllers/BasketController.php b/src/app/basket/controllers/BasketController.php
index e431b2a46862d7dbe7bc44d43d63abe2674631d4..dcd7c24a49bff591e8b009d6cd4ab06178c2f509 100644
--- a/src/app/basket/controllers/BasketController.php
+++ b/src/app/basket/controllers/BasketController.php
@@ -123,6 +123,94 @@ class BasketController
         return $response->withJson(['baskets' => BasketModel::get()]);
     }
 
+    public function getSorted(Request $request, Response $response)
+    {
+        if (!ServiceModel::hasService(['id' => 'admin_baskets', 'userId' => $GLOBALS['userId'], 'location' => 'basket', 'type' => 'admin'])) {
+            return $response->withStatus(403)->withJson(['errors' => 'Service forbidden']);
+        }
+
+        $baskets = BasketModel::get([
+            'select'    => ['basket_id', 'basket_name', 'basket_desc', 'basket_order'],
+            'where'     => ['is_visible = ?'],
+            'data'      => ['Y'],
+            'orderBy'   => ['basket_order']
+        ]);
+
+        return $response->withJson(['baskets' => $baskets]);
+    }
+
+    public function updateSorted(Request $request, Response $response, $aArgs)
+    {
+        if (!ServiceModel::hasService(['id' => 'admin_baskets', 'userId' => $GLOBALS['userId'], 'location' => 'basket', 'type' => 'admin'])) {
+            return $response->withStatus(403)->withJson(['errors' => 'Service forbidden']);
+        }
+
+        $theBasket = BasketModel::getById(['id' => $aArgs['id'], 'select' => ['basket_order']]);
+        if (empty($theBasket)) {
+            return $response->withStatus(400)->withJson(['errors' => 'Basket not found']);
+        }
+
+        $data = $request->getParams();
+
+        $allowedMethods = ['UP', 'DOWN'];
+        $allowedPowers = ['ONE', 'ALL'];
+        $check = Validator::stringType()::notEmpty()->validate($data['method']) && in_array($data['method'], $allowedMethods);
+        $check = $check && Validator::stringType()::notEmpty()->validate($data['power']) && in_array($data['power'], $allowedPowers);
+        if (!$check) {
+            return $response->withStatus(400)->withJson(['errors' => 'Bad Request']);
+        }
+
+        $baskets = BasketModel::get([
+            'select'    => ['basket_id'],
+            'where'     => ['is_visible = ?'],
+            'data'      => ['Y'],
+            'orderBy'   => ['basket_order']
+        ]);
+        if (($data['method'] == 'UP' && $baskets[0]['basket_id'] == $aArgs['id']) || ($data['method'] == 'DOWN' && $baskets[count($baskets) - 1]['basket_id'] == $aArgs['id'])) {
+            return $response->withStatus(400)->withJson(['errors' => 'Basket is already sorted']);
+        }
+
+        $basketsToUpdate = [];
+        foreach ($baskets as $key => $basket) {
+            if ($basket['basket_id'] == $aArgs['id'])
+                continue;
+            if ($data['method'] == 'UP' && $data['power'] == 'ALL') {
+                if ($key == 0) {
+                    $basketsToUpdate[] = $aArgs['id'];
+                }
+                $basketsToUpdate[] = $basket['basket_id'];
+            } elseif ($data['method'] == 'UP' && $data['power'] == 'ONE') {
+                if (!empty($baskets[$key + 1]) && $baskets[$key + 1]['basket_id'] == $aArgs['id']) {
+                    $basketsToUpdate[] = $aArgs['id'];
+                }
+                $basketsToUpdate[] = $basket['basket_id'];
+            } elseif ($data['method'] == 'DOWN' && $data['power'] == 'ALL') {
+                $basketsToUpdate[] = $basket['basket_id'];
+                if (count($baskets) == $key + 1) {
+                    $basketsToUpdate[] = $aArgs['id'];
+                }
+            } elseif ($data['method'] == 'DOWN' && $data['power'] == 'ONE') {
+                $basketsToUpdate[] = $basket['basket_id'];
+                if (!empty($baskets[$key - 1]) && $baskets[$key - 1]['basket_id'] == $aArgs['id']) {
+                    $basketsToUpdate[] = $aArgs['id'];
+                }
+            }
+        }
+
+        foreach ($basketsToUpdate as $key => $basketToUpdate) {
+            BasketModel::updateOrder(['id' => $basketToUpdate, 'order' => $key + 1]);
+        }
+
+        $baskets = BasketModel::get([
+            'select'    => ['basket_id', 'basket_name', 'basket_desc', 'basket_order'],
+            'where'     => ['is_visible = ?'],
+            'data'      => ['Y'],
+            'orderBy'   => ['basket_order']
+        ]);
+
+        return $response->withJson(['baskets' => $baskets]);
+    }
+
     public function getGroups(Request $request, Response $response, $aArgs)
     {
         if (!ServiceModel::hasService(['id' => 'admin_baskets', 'userId' => $GLOBALS['userId'], 'location' => 'basket', 'type' => 'admin'])) {
diff --git a/src/app/basket/models/BasketModelAbstract.php b/src/app/basket/models/BasketModelAbstract.php
index 837d4bbd719e82e2a74af9ad9176aa0afc80bc18..d200ba6acdf5c1442d29047caaf9d7cfc8439ebf 100644
--- a/src/app/basket/models/BasketModelAbstract.php
+++ b/src/app/basket/models/BasketModelAbstract.php
@@ -26,11 +26,14 @@ class BasketModelAbstract
 {
     public static function get(array $aArgs = [])
     {
-        ValidatorModel::arrayType($aArgs, ['select']);
+        ValidatorModel::arrayType($aArgs, ['select', 'where', 'data', 'orderBy']);
 
         $aBaskets = DatabaseModel::select([
             'select'    => empty($aArgs['select']) ? ['*'] : $aArgs['select'],
-            'table'     => ['baskets']
+            'table'     => ['baskets'],
+            'where'     => $aArgs['where'],
+            'data'      => $aArgs['data'],
+            'order_by'  => $aArgs['orderBy']
         ]);
 
         return $aBaskets;
@@ -99,6 +102,24 @@ class BasketModelAbstract
         return true;
     }
 
+    public static function updateOrder(array $aArgs)
+    {
+        ValidatorModel::notEmpty($aArgs, ['id', 'order']);
+        ValidatorModel::stringType($aArgs, ['id']);
+        ValidatorModel::intVal($aArgs, ['order']);
+
+        DatabaseModel::update([
+            'table'     => 'baskets',
+            'set'       => [
+                'basket_order'  => $aArgs['order']
+            ],
+            'where'     => ['basket_id = ?'],
+            'data'      => [$aArgs['id']]
+        ]);
+
+        return true;
+    }
+
     public static function delete(array $aArgs)
     {
         ValidatorModel::notEmpty($aArgs, ['id']);